May 07, 2024, 09:30:40 AM

News:

Own IWBasic 2.x ? -----> Get your free upgrade to 3.x now.........


File Converter + sample program By Jolly Roger

Started by pistol350, September 08, 2007, 06:57:15 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

pistol350

You can use that program to convert any file to CBasic subrountine

'Converts any file to an IBasic subroutine which,when run,will recreate the file and save it
'Jolly Roger October 2003
AUTODEFINE "OFF"
DEF win:WINDOW
DEF run,error,filelength,b,numberofbytesintextline,basearraynumber:INT
DEF data:UINT
DEF file:BFILE
DEF textfile:FILE
DEF textline,filename,fn:STRING
DEF byte1,byte2,byte3,byte4:CHAR
WINDOW win,0,0,640,80,@MINBOX,0,"File to code encoder",mainwindow
CONTROL win,"B,Choose file to convert,200,30,200,20,0,1"
run = 1
WAITUNTIL run=0
CLOSEWINDOW win
END

SUB mainwindow
SELECT @class
   CASE @IDCREATE
     CENTERWINDOW win
   CASE @IDCLOSEWINDOW
     run=0
   CASE @IDCHAR
     IF @CODE = ASC("Q")| @CODE=ASC("q") THEN run = 0
   CASE @IDCONTROL
     filename=FILEREQUEST("Choose file to convert to IBasic subroutine",win,1,"All Files|*.*||")
     IF filename<>"" THEN createfilecode
ENDSELECT
RETURN

SUB createfilecode
DEF progressbarstep,dotposn,ch1,ch2,ch3,ch4,ch5,posn:INT
error=OPENFILE (file,filename,"R")
error=OPENFILE (textfile,RTRIM$(filename)+"-code.txt","W")
filelength=LEN(file)
WRITE (textfile,"SUB createfile(w)")
WRITE (textfile,"DEF d["+LTRIM$(STR$(CEIL(filelength/56)))+"]:STRING")
WRITE (textfile,"DEF data$[70]:ISTRING")
WRITE (textfile,"DEF mem:MEMORY")
WRITE (textfile,"DEF file:BFILE")
WRITE (textfile,"DEF numberofcharacters,filelength,c,bytenumber,startposn,progressbarstep,intdata:INT")
WRITE (textfile,"DEF byte1,byte2,byte3,d1,d2,d3,d4,d5:CHAR")
WRITE (textfile,"ALLOCMEM (mem,1,70)")
textline="d="+CHR$(34)
progressbarstep=4*CEIL(filelength/80)
RECT win,200,5,200,20
FOR b=0 TO 4*CEIL(filelength/4-1) STEP 4
  'Read file four bytes at a time
  READ(file,byte1)
  READ(file,byte2)
  READ(file,byte3)
  READ(file,byte4)
  'Combine four bytes into an unsigned integer
  data=256*256*256*(byte4 & 255)+256*256*(byte3 & 255)+256*(byte2 & 255)+(byte1 & 255)
  'Convert four bytes to five text characters using base 85
  ch1=35+(data/(85*85*85*85))
  data=data%(85*85*85*85):ch2=35+(data/(85*85*85))
  data=data%(85*85*85):ch3=35+(data/(85*85))
  data=data%(85*85):ch4=35+(data/85)
  ch5=35+(data%85)
  textline=textline+CHR$(ch1)+CHR$(ch2)+CHR$(ch3)+CHR$(ch4)+CHR$(ch5)
  numberofbytesintextline=numberofbytesintextline+4
  IF numberofbytesintextline=56
    WRITE (textfile,textline+CHR$(34))
    numberofbytesintextline=0
    basearraynumber=basearraynumber+1
    textline="d["+LTRIM$(STR$(basearraynumber))+"]="+CHR$(34)
  ENDIF
  IF b%progressbarstep=0 THEN RECT win,200,5,10*b/progressbarstep,20,0,0
NEXT b
CLOSEFILE file
'Check if last textline has data in it.If so then save it
IF RIGHT$(textline,1)<>CHR$(34) THEN WRITE (textfile,textline+CHR$(34))
'Find filename
fn=filename
DO
  posn=INSTR(fn,"\")
  IF posn>0 THEN fn=MID$(fn,posn+1)
UNTIL INSTR(fn,"\")=0
'Find dot separating filename from file extension
FOR b=LEN(fn) TO 1 STEP -1
  IF MID$(fn,b,1)="."
    dotposn=b
    b=1
  ENDIF
NEXT b
'Add "-recreated" to the end of the filename of the recreated file to avoid overwriting the original
WRITE (textfile,"OPENFILE (file,GETSTARTPATH+"+CHR$(34)+LEFT$(fn,dotposn-1)+"-recreated"+MID$(fn,dotposn)+CHR$(34)+","+CHR$(34)+"W"+CHR$(34)+")")
WRITE (textfile,"RECT w,0,0,200,20")
textline="filelength="+LTRIM$(STR$(filelength))+":numberofcharacters="+LTRIM$(STR$(5*CEIL(filelength/4)))
WRITE (textfile,textline)
WRITE (textfile,"progressbarstep=5*CEIL(numberofcharacters/100)")
WRITE (textfile,"FOR c=0 TO numberofcharacters-1 STEP 5")
WRITE (textfile,"startposn=c%70")
WRITE (textfile,"IF startposn=0")
WRITE (textfile,"  data$=d[c/70]")
WRITE (textfile,"  WRITEMEM mem,1,data$")
WRITE (textfile,"ENDIF")
WRITE (textfile,"READMEM mem,1,d1,startposn")
WRITE (textfile,"READMEM mem,1,d2,startposn+1")
WRITE (textfile,"READMEM mem,1,d3,startposn+2")
WRITE (textfile,"READMEM mem,1,d4,startposn+3")
WRITE (textfile,"READMEM mem,1,d5,startposn+4")
WRITE (textfile,"'Convert five characters to four bytes of data")
WRITE (textfile,"intdata=52200625*(d1-35)+614125*(d2-35)+7225*(d3-35)+85*(d4-35)+(d5-35)")
WRITE (textfile,"IF bytenumber<=filelength-4")
WRITE (textfile,"  WRITE (file,intdata)")
WRITE (textfile,"  bytenumber=bytenumber+4")
WRITE (textfile,"ELSE")
WRITE (textfile,"  'Less than four bytes of data left")
WRITE (textfile,"  byte1=intdata & 0xFF")
WRITE (textfile,"  byte2=(intdata & 0xFF00)/0x100")
WRITE (textfile,"  byte3=(intdata & 0xFF0000)/0x10000")
WRITE (textfile,"  IF bytenumber<filelength THEN WRITE (file,byte1)")
WRITE (textfile,"  IF bytenumber<filelength-1 THEN WRITE (file,byte2)")
WRITE (textfile,"  IF bytenumber<filelength-2 THEN WRITE (file,byte3)")
WRITE (textfile,"ENDIF")
WRITE (textfile,"IF c%progressbarstep=0 THEN RECT w,0,0,200*c/numberofcharacters,20,0,0")
WRITE (textfile,"NEXT c")
WRITE (textfile,"CLOSEFILE file")
WRITE (textfile,"FREEMEM mem")
WRITE (textfile,"RECT w,0,0,200,20,0xFFFFFF,0xFFFFFF")
WRITE (textfile,"RETURN")
CLOSEFILE textfile
RECT win,0,0,640,80,0xFFFFFF,0xFFFFFF
MOVE win,20,7:PRINT win,"Saved as ",RTRIM$(filename)+"-code.txt"
RETURN





And here is a sample code from an audio file converted.
"Daffy Duck 01-12kHz-16kbps-recreated.mp3"
Press the dialog button and listen  ;)
After converting a file with the above code,
you just have to replace the "Sub createfile(w)" subroutine of the sample below by the sample code created and that's it.
Have fun  ;D


'Example of the use of an IBasic subroutine generated by file to code encoder programme
'Jolly Roger October 2003
AUTODEFINE "OFF"
DEF win:WINDOW
DEF run,error:INT
DEF f:BFILE
DEF command:STRING
DECLARE "winmm",mciSendStringA(lpszCommand:STRING,lpszReturnString:STRING,cchReturn:INT,hwndCallback:INT),INT

WINDOW win,0,0,200,100,@MINBOX,0,"Code to file demo",mainwindow

'Check if mp3 file present.If not then create and save it
error=OPENFILE(f,GETSTARTPATH+"Daffy Duck 01-12kHz-16kbps-recreated.mp3","R")
IF error
  DECLARE createfile(w:WINDOW)
  createfile(win)
ELSE
  CLOSEFILE f
ENDIF
'Create red button
CONTROL win,"B,"",70,50,50,20,0,1"
SETCONTROLCOLOR win,1,RGB(255,0,0),RGB(255,0,0)
'Open sound
command="open "+CHR$(34)+GETSTARTPATH+"Daffy Duck 01-12kHz-16kbps-recreated.mp3"+CHR$(34)+" type MpegVideo alias sound"
mciSendStringA(command,"",0,0)

run = 1
WAITUNTIL run=0
CLOSEWINDOW win
mciSendStringA("close sound","",0,0)
END

SUB mainwindow
SELECT @CLASS
   CASE @IDCREATE
     CENTERWINDOW win
   CASE @IDCLOSEWINDOW
     run=0
   CASE @IDCHAR
     IF @CODE = ASC("Q")| @CODE=ASC("q") THEN run = 0
   CASE @IDCONTROL
     'Play sound
     mciSendStringA("play sound from 0","",0,0)
ENDSELECT
RETURN


SUB createfile(w)
DEF d[141]:STRING
DEF data$[70]:ISTRING
DEF mem:MEMORY
DEF file:BFILE
DEF numberofcharacters,filelength,c,bytenumber,startposn,progressbarstep,intdata:INT
DEF byte1,byte2,byte3,d1,d2,d3,d4,d5:CHAR
ALLOCMEM (mem,1,70)
d="b&HEE#tt>&#0[+B$rvL7`lnHh&nE]-Slu5(:99Uw)b&ht0'A$r7]_/X&SOD?bD\u\pdiGq"
d[1]="jwQ@#<N]0*0tK[J1t9v$sUBmQs%sunV-bWZ(s-\VQ.V$p`'rNcb&HEElvg4]QJc,skKkwg"
d[2]="s=ba+4@fEXAZfqDLbEAIR*m2GtXwoH0d#7R3d`i@iipmcs\&UTlq>+brXj6HWJvO,Hf4g#"
d[3]="*n'6XE4qVcS>o7lc`[Bo907,%T-u`ab&HEE*,QL9IcLPWfK3GD/`Ju'L)Wc,q_U,)nBfoB"
d[4]="7S9Tj;+P'a/V<Y>WTjK[>,i)t33WA,=9.?-ES0m1m1/8-tt?Au^dQOO..]\7M,a2aLKd=*"
d[5]="ZS$nAEFBB4b&HEEE>97+:<ru>R>in(jrv5FS6umm+Z]2#u&.k4AT0/^X7A-U#CkoN2'0ei"
d[6]="#c<wp9;W[N9p(S.@jpG^l#\Y<*/\;Cf^l)9IrHS\u:U&/DFc9Ru8qw>r.=Q5b&HEEfv(4A"
d[7]="50m5=:f,bISU[(jNhw'O-#E%Br2Wv)GS>_:ZZnG@Mb5hK,q%'?FY_#B5N>0ehCr2[UXDvc"
d[8]="ZY=%g;Jc'h-7^kK=^5CA<VP[mNRek4`mF(0ltlm'b&HEE'\3q/DU/AN,O1+h'_[)3PAVnp"
d[9]="Zk&r\UAg(qe8*3/Nd-@ihN,]JC8tn5L[^6>:Rb9*S][r`u'kLV]>i9%Zg-TQ>FFWacV*0*"
d[10]="pJ(Xj)OKjXY#pI1=QNoVb&HEE\GZwRD\:2_OGn6cY]@`rL$dd%f;>UNj.M6MYUcBE;4c3X"
d[11]="7G=QYk>#ntT[i_U>=tV]RL@\m>Mmsg'o=3d@hg*gbG#Rs2\w>qD&NiFS>q*cE4M58ciR1O"
d[12]="b&HEE]SvPHDN=iW=SHuBc;1CQLThQ()O3kc/Xe3]qqI@-gIml`^>]%3pe(^p(9ZP0gF<1p"
d[13]="Y&:st)]&W]qJog'-Hb^5Eg=ihCEgA(>$EVn^MM#)7W:<^Ej?%)b&HEEo^3ZJDUQ`iSsaS%"
d[14]="b1iD53CS?0XL0B>Sv`k)%%/nJW1nXg;B%JU)7@H]KcaZgX.?$uSbiA#WeX><e<cTqp.I>`"
d[15]="[mfbb2^G6s^IwUk]^\7m##/eh0-%Gbb&HEEn_Omg57_+/T8rqTDtHKRgIq.WfIJe,^)p_e"
d[16]="sQ^^wQbR]bqSoo6tVkrDnj`4gJ`5[ftc7#M_t.m3E0Bls*VN_K_N@s\A`<Krkj.A4Lj\v("
d[17]="Vp4%\4Kg#'b&HEE5iiYpIZaabN8fdw>KQNonfu^.L'mT-1]#^*(RXI,1OvJ-]wL:X.O)A6"
d[18]="eid&B[j^wQ3A$Rd7NXo:>8KD)niM=tI<PRS6.(p4JhIRRCv%fAM^'CZS-826b&HEEE@hlC"
d[19]="Ia%pdE8(_'r$lv2@j&SLJhu_gV7:\O[bn3J9w^uJHbH=;sTn;1<K2cs12dNE%G/fqG[_%X"
d[20]="7S+^2Kvu3uJOQM*1f4-RP/R\e:=7n*fC@m)E@au?b&HEEkdD+A<t:Nl)+O:&f<TJ.T0<-#"
d[21]="E#4D'D%j25n0pAVtt9#'tK9F:ji]mNge1l%.C]?1GiiUls5+32iMljN#>m1q*3@nMOjUT-"
d[22]="2\^spZM<)l$M6@3I(<_Cb&HEEr(RrN5*TGOor.(X;/#i0Perlw-kgTdS$,6UqY<T`,lu;P"
d[23]="BUR>p]Cg])iPiud6;A+7ULmY0+.o:#VpFDBc`M2<8\Fe#\k=kl,CU]u+[/NU>JN]N<u'CQ"
d[24]="b&HEE'SdNG<mR(1(W%@w3\iKC)R?.:VWKnW>>=rE)A]FP8O;DF/J*rvRRqu>iviCMr5Y4&"
d[25]="Xljgo3[mFiu:WS^;YKGOA..Q0u%;99u.</D%14S.mM,[q`#>rib&HEEs@a,9?Ok:L-4lGG"
d[26]="XF1/.Kd<X\<^6WU/*`1s%mmMZ,a>7@dVt9/CiYe-[1b=g2QWRGe_\rHRl92#0a.NMthfC+"
d[27]="B=@D_F5f[KQFJ.n9\BO9Wfn4__rj\nb&HEEpm`(?(fwmQSS]au'<;;))L<B@?d]/hg8#$d"
d[28]="CEwNc,FEH1A*mEP%?j<v@M_q3`#?Di7T3;cTW7%+_v<c<ogpm7tsN8k_i)ia+J4g7fc7%%"
d[29]="E_fN]bUOsjb&HEEjQ$tndXS;Y<ki+f@G3;$`TC%m5>/2<g0Ohm0OvH[^T8Ju:7PfGHr\GF"
d[30]="S5qOQfODLmtii]kK`>m.ZqIVTgJCmo:a$am&J`,s7<2lm4k6NAaY4.=4X-iub&HEE#aH$E"
d[31]="*0L=<E]Dsv6Na0]T^@P(FLel:5JXc`2%q#G9$f'2;^?17jbe4L3_Qg]o/lnRqksHsKLv2:"
d[32]="encjf^3ounXB[bZf:kaZD2Uww?MTr_I0qAXAaW\Zb&HEE]e'kFb-(gUrYmibOfiUF4/'l-"
d[33]="`]5psm_X+j[3It?B#<g>iNKG__n3]Ctt;&[#XCHB(JDMRtK?kO(FR0G[S].=6dQ7M=Ok-q"
d[34]="#lO?SCJ#7Y:4rrBOC`L9b&HEENC=P7*h/HC4YBN6MPu4qu0Cst:Jm`Z<bVQ0Lf>N5Lm1>="
d[35]="SWcuYiXUO=iZm@fEZK7(&l/NHQ)_`*5?bvk&ml,:(84vJVUO`me=]ZsStt#*GJbs`C7o'O"
d[36]="b&HEEoNiJh<mR(1K#w-u*cHP\jQK$M6UE7fDQl8W-rnD>.W^[&Z'PC?H3_3O1:vNVZ[G:4"
d[37]="u&fL[>E%/O8?,Kf:k^NVU=9.I%ALZvobMv0gib,Mi<[%-t/Lheb&HEEFR9ZS:CvY#l$Mf$"
d[38]="ge5FRT&@Q8HGE4W-v1'lgC&s)&)gtlIsE>qP5#[aDK;ovHKo>IqZP[C`MYlRtc75\1a][B"
d[39]="][;tJkEPZi/L_R1f4/[MUvT\lF]_*Eb&HEE2=;)w(62a@MHov]j/9\V?(e1b.#4V>L(BPb"
d[40]="=Hew*jHaZ]9K(V/#r%=Xi'L.=RASY-t_QPiUw$w5_m3#N#Y]_^--414\%fj+baP;*hr-o`"
d[41]="$wW$1g)=Zab&HEER5Pt3DUJSEGAjcj3i.R(YdLV`97i`FU<eXE(XkM?bS5;VVjBbfTQ2ZD"
d[42]="/JMfiOl3PFKAgR5/d=nsg_IKeXNLN>0@lmudvXaLO37M4a==3)S%g:B6jwmCb&HEEGpO)6"
d[43]="7hj/kfMEbq,\cZCaH16vu8Hs(FpmIDNLuM2+\J1'n[^&LVr]8nf6$$/%Tt>dP>WGJIr37X"
d[44]="+JSBcn=oB-KmB_esM=e:u#p+Qa>Nv)QZ-G]-Q$$ab&HEE<7MXtMNsG_-3AqE7cmtosc`SB"
d[45]=";+`4mmOF4]gIG$m\STJVDX9F\0Jf#uj&,BRLJjrM0#NPtg/q1&?5=o_RB+<tK(ek=k)?k("
d[46]="&p>jSqun9]L7df#[pKDab&HEEI23W;$C:cKkq7#iV_%K5@&B@3hE^9CW9`dq-<^F#?2X/q"
d[47]="\uLh0W^]bfdm.4IpH_h:\M.UOIC@Cf^a9%aCRrU%Mcm/qFl':rV5W1ggd'Aa?R5T<s5^)&"
d[48]="b&HEEm3E9QjGs=*[.*k51Un7S*MiDa4>EJ5N*NlTAh47K<$,J'ZU.(>9ZtObr,>Xg`[bq;"
d[49]=".TUQ)q^53AO9=.fkek-E=w/0b*6DN?do<(9q?''bEG+p,WrB<qb&HEE.('\)(9.BjTOJMU"
d[50]="-aL+tfDeodO)-^XQ&4:o$W1=/k\,)?pe/:/RFg0t]0<2ItVT(bu:W+Ku+*9(oK7Y#gdu)C"
d[51]="6*aK(s*;G6EHH]oLl1dZYEMASkR8o,b&HEESAl1b/u/Oea:=kH<bvAwXS.A.nNg92HK-Ug"
d[52]="\:Equu75.C9M)`aZi^9*qFgll2E_vjV/GU%OauS2Fa/DqI]e?7g/IEdZ;Hr,#)kt?ODrZ["
d[53]="8ndI$DXAG;b&HEEr>ll,DVG4BAanV]WuBp.`1.I8q'BUG^Dt%t3kG8&7f8tAq$:&)+OlRl"
d[54]="jw:,;nQ=rAu2#?h_<fr[D=CbVtt>%wTXGsRu:SHPE5%5KFcO#brA[FaGRT4_b&HEEr)F>@"
d[55]="(D-^89BGbKd$w6\o[Eki5]'#pE[,r6.%llZVb?eBu)/<MN\jt^%Env.Yo$V_'U0RL]?mvc"
d[56]="u:R7+nB0<X@GZO)^`nXI;[m0#4FMvXCc1q2B2ejEb&HEE#sK#Ecs?`6_h@LLp*Qu.(mD`m"
d[57]="gRF+g;JGwZpp<,R@2?QdLPNfk3c6LI?`sl3>)jZ2':+YcALT1r'_/t=VhO>9a+])En9H=9"
d[58]="aH2E&QrQYa*b)c/ERLEMb&HEEoPG7cb*N,It^c15]DEIKKucFp0MCaKi>uV2BtJUSh=Y[s"
d[59]="]_NEK$>@-Jt.90>`s]fHt^'^UkqX48)GG=b)%&]hq3HC<P8)m-TQesMGsgQL16M^FP5&ae"
d[60]="b&HEE%(v7$&v_NNY-Ni*\GgW,qB]<q?4(AVjElTQn1j8ku2Od+?1IDeX6]afJjJvLV5gsp"
d[61]=";hBu-h@.O+Y>)q3mvrdrA(d(V-I^FsIuH;0f:+Iq#lwI<Q/.8Ob&HEEq&C'*fWP;g36n/="
d[62]="5$hu`?kZA(5=qKC1NT=I]h2g'?;#Dwi:[-gAsWh--[+)G4`Zj+#7O28(rj$s4$lHqO(d'\"
d[63]="7Un*3s<vnXI&,W#i4GQ4fwvd6;)^<&b&HEEAMtEc$C:c3Z\d?J_E_\2B.,[:GdRf_gi9]Q"
d[64]="4=OnhhDW&9`VT=bPFDA7(Lj<QHG(M+\KNVY*,v8mtsM+cp:,`wapgGn#(dbJ-e1-pHGhS9"
d[65]="_?1Ni-]UT6b&HEEE0V;c=CwTdoc5UO1miYi.@9eld/TO+\F7`3RkBPl=YPdcBA[-5'.ZYH"
d[66]="*LRnKOY_.$eBIUk\0Bd>,BQb.64E+Ie??p2]E7VkONS.Nm0-$6cNlY5NmnVeb&HEEB\a83"
d[67]="b-(gmF(%Q+Y#dX.c)_^S0w?JZdimA3t,oBk9eT[8FSBS_=:DuQ_vG[4\adnMYTmCqsIM;V"
d[68]="/Y]f*@5]**b&#ID`)$G:P#S.jk1dw3l,7'LHm`O'b&HEEjTH08b*SAL@h<FuKpXZM'i]wp"
d[69]="=B8Ht#-ekM3Y\JWBc@MMH*=0lnwwQ)%b-`Ct=ZOgu1:g$84l0#n<)J@96t/)DGRwwMP6-8"
d[70]="C2f))T=ECO0Ci%pDs-t<b&HEEFWD*C5+AV`:ujlFmJsA<g[rmoFdYncXbDg1`27:SWh&jI"
d[71]="Uc<8ID=<r+tX+DF##)'S/ki*H#[s`NUMqL>-dh+7lRRlO'>`[L`_]</,$F]8M%LI`u,wCH"
d[72]="b&HEE8OjbR521SdM?:t)9Z9.C/s4aYE9?c?2]DX?.)%IWWBirbe5NdkT`7Q\-#THv9q+c&"
d[73]="mHrDNqEaBUoiED_5pD3uGPZNqIn/-O/?$?S(aK'UN`Rm(tfm;gb&HEE9D9-1519QO7Z@IQ"
d[74]="LLBZ:QnI;;u8_@C5`.\rpI,%pK-]DBc:d(7NLn)I9Un0;.1uV`5reC\H6@U8ge7\c82VfH"
d[75]=">8gC6u:Y,r-#-16pVnV*8j#\2*74Iob&HEEm#Mij51TaXu1J$w#vrl_bUE73q+F8AQe:J,"
d[76]="/PH+[jbaheDrggvpkTA#m7[K4M`shQ20'F@t=\hu?LEIk1=U=[u:R?XNCs7S<pHT'SLVmY"
d[77]="*g\DXLi[Ywb&HEEFVPU%DV5(Pf#w4w4R\Z'Gb5+5&.$4TT?64v':;Ii`L%*Hm4sks0%/03"
d[78]="aq:;w.s#d)s4^/Mb\ZgqEJjd?iX>lm91o5(L;KpeHV+7jt=Vd+u,_Pa0ZOQ'b&HEEg#WiW"
d[79]="(DK)M5%9OUYcSghZMlaGqO8JsTK+9,1#VX%THtRZr77`8mYJ?eSS@E_J/e8[NN>mI@:+F<"
d[80]="1&sLY7AoPYssmu;ECUBQu%)v;.2N.iQ.wq`D;V.Yb&HEEeZBU'8sMSF0)MC2gM[=/\Onw?"
d[81]="XUd0`98uBdZJ,=]Ue8ZcdwW+<f&JQC<m@N^-GOnH#vB,8*+4&H4D'FX.pa8MM8$%`9pTCd"
d[82]="f,$l)Qh)F)B`_6IKWMAqb&HEEjBN@0fZ*vsNS*+1h5B=n);']St&bwWU,UDl9$fnCNJT1("
d[83]=".:H9m)JtLa8vf`FQLLg<Bwq3(bR<&vT*Mt/)kd3;`VXG#.Q70,3^3s?9Kk<D^]&Plj9*W9"
d[84]="b&HEEOL,X9*h*30-hQ7v$G4Rt92T;APZ03h5C0[d_T':R<VM=ZYQ*7wCbe<)cu;^^(hPdm"
d[85]="b4_kvF',_Zt^Pmk&)frmP`EY-6CS(.GU2-5^fC#s%gQb_6Q%<Pb&HEEgu]Gq50oNr=J2'c"
d[86]="cpIh\8.rTNZp=Re?/HR[C%N9Cow8;_:*945T<aq^Ru.1-)S+GiI)Xn^j@fN;lSs>O/$53t"
d[87]="Mn^Dp+YwW.LsGmwfAVU6(U;sfRZFTbb&HEEp$EE'51'C7>jH0/kA1c_mgi]`lhL@_-r@n0"
d[88]="?nPO=dv7K'FRNulOiEm(q8kK\Ib<6aE:%45)$nD%Bw\]hXi7S'a,HJeASY%D#4efs93FPa"
d[89]="ai-M\*YGOXb&HEEoedIt?I/=GVc6f&A>M[v2iA%?+g/vr@W8lYkrX<_q&uEwUC.`;Cghia"
d[90]="aLBgcjt#9S9,BW2:.\ZSrCd2ON%r`^tP'WB9snqn?:u?7rL#9-6qI@39]<8$b&HEEtf[Wh"
d[91]="0,IYVi>A(g-QJ(7=,-kwjZq<RXM5Qs90l))#Z/lpB71+q5*vY-TqblD<eHWS%'LClOb`Rl"
d[92]="CJ<,U*N#sdpc(dKD'bOJQWm0]bWU.X-^=Q&@[@`jb&HEE7-tb+hL>Pi$D&Ha-An9F;cj2G"
d[93]="bMRs2m_S'3rbe,^WHS+%e<1.q(1SQr79Pg)_B\NcDdLscGW_rtPX?;0$XPH+D\7IWp*I2="
d[94]="L.4u5<q`t(KPRMs>[.vAb&HEE0PqM7;I3?j.[(amU6`EU]C;>`G28_hBOKZ]i9kFK6g$6/"
d[95]="^w;64&mWi.R386EktT2<*8/J\)BOghiou5o=*'OVCVcjFtr&^VS,3.Ft)*4^1H+fKSo1ga"
d[96]="b&HEE7,8Jf/sTHjVpwmQDf66YMOeLd%ok/:If+t0X;D[W$DhW9d2gcugmfhn?INCN=oG(Z"
d[97]="%i;&=6T1mvZ)5*S-:O&b*(KuDmI]2])r$rpLrJD&cL)Mt(3@G*b&HEEFBo]#QJ2Hf#Pq+t"
d[98]="/2.*D9AktT)]M3oH+M4l;Sr&jFmZ1gcl#8H/5kLJTP(5(i;e@16ZV6PC38]6Q*);5*nksD"
d[99]="saR]f7Kq*UpE]fB$L1XP47\D1GkMrnb&HEEe?'EqQJ2HnT/>h:)hvTJYLM(^BkJ1He1s>d"
d[100]="@j&A,95(Y8US`J;h\]$pX;;;\:*X]SObDdnsw;:Att;bYu1UV=M/:a-FwLUo,$Qd:juM8T"
d[101]="O;HtH[#H&4b&HEEAG$IEB+b88.+ZXHM_qc;3%PPd]0K_hl,s$'n]1>2fcqtZoDk*cFe=#Q"
d[102]="n4We\X5MGaM,sh#-:[Ju<N>ha$A2EF8j5_'.F6#f,,(.W)u+TQYprg[c:3<fb&HEEE@hiL"
d[103]="N.%`be2VC7M%8o;>S$]'GV<0#2H6(,.wG)bNq@m0OMM`,0_Dabl>Fg.1*,_:9M3j>ok1<b"
d[104]="C0wZw[,S_p>.@-M(L1,c/`@Qhu+9s,RkgI7>M3#7b&HEE>qHe=N3**n&^u6tXgumA=*1fK"
d[105]="-)RX=UZ%SJ1UsKMST#UnI'bH<3eh>uEC;Z.'A3w'r;Afu&KfXV1Ud-.'-<^l+YcBI%)`t,"
d[106]="D]/=jE3EKGdiN6LS5Wpwb&HEELpRb<QGik/'9+oEmA2:q8m/gfj5;tj%,dvU=XT9E5*OfF"
d[107]="Osr&V9L6vOC8Opit[LmnHld6Je6)lX6;=ch*Ww`@,nr^RJ(Iw)`U\),Bnq'6Wv>B0Iu*%k"
d[108]="b&HEEFFG$Zb*N,I_`neI8@\3Y`'[FIlKGlPQog[bp'\:qh/.j68K%O%t7pvi##0'v,E9Ln"
d[109]="KBN9ULZAPB5m0v28,h*TsiBe9@N&,b1Nu;(6oWc1'[6vFk7K>Ob&HEEsU5okhT#XL&6(p;"
d[110]="U[CdI3LXX5o[tv\/L$IpIiHPe.oq'b)sP\mY%id3_aAj0A;c@P_(]sPYKgc$Z5?E&qPjAb"
d[111]="nWP&t-HTGbn8F<vI]$QvT;'?)eQT-*b&HEEgnYX%hQHr,a)\u<EdTGKY5Ni8>h6`,'M7%t"
d[112]="%8BCJbPG]n0i&8b##Ass0:X?9V,Rpae+Sh\6oHW^]BbngL$;Bk$vIh:L8U<Q#wLwr#5kSY"
d[113]="J)mb]OKaBrb&HEE/Mw)X&<[&4P7%fAom[6rTg5r8B5IY':Ms?``HdNG[/SMG?0:DZdN/Bg"
d[114]="t=[[.u/Oi@>T0bJQ_NDlArVQVBZhXP1jDF5@.HUjJ`]RQLS;a8iSdo>[U(gNb&HEE%4r0@"
d[115]="$H`AVLBKBT>WW;[r*n3S@:'+/_BVQ%dDGoOu6MoWl[.K^hi]rlQcCsj55io&I7'9wcrvn:"
d[116]="VpYn@BJ$nQA4en:G^JcAk<p,8/r[T,?k1(v.uwf#b&HEE3COmD*gv*V`Zpel'N_(?5#4(N"
d[117]="*7mYIKRYOr89-9d,72v>917/0Lv\$+'FbH()=w@br%9UaNS:\&;8[B5m:^MkGtY]pJqc'3"
d[118]="0dOVaR-ao]0bL,[X?jNSb&HEE@1<ug&n_53rcE/J.eA)VlSPUme6F/Ll&LGW(Tw$OI01o:"
d[119]="HpE[H;$G(GdN\_0f+,q6/h5SP<bql$'Mom7U&.*<\7V4dfrD>q*2-_oQ8t14a?Joai$Q4b"
d[120]="b&HEEfQ@p>:gV=;B&N%D^^FUX.A5j$\r+^m(;2@/ETHws3B%v4]a1[)*TccnR\ZLlpf'8U"
d[121]="./'D'/%,Ob^%.WM=qws/OqND9lVN4h\]Yh)A.,G:YZBt53D4;Hb&HEEfSgJQdUrS5ZH>5N"
d[122]=",ip#MYV-?]mU*=uZa,QJ;</+5@X^%#i9aJ?AgT'h7WC%X$h.)`6X=II&;V%AhNNHXeh3sV"
d[123]="[YX5K),(#]Mdmu6>MT93H(o+aL>H>&b&HEE#t5J?d['tU02Hu<&=c(9mUU7+-m^@=:+Lvi"
d[124]="3Q2XWk&,/;1TBC34i4,@NpO+g(/Y3pD3S>rJ.%aXWQQfu_rc8Hs;q</*_?>P-u8PM,iT>^"
d[125]="Z)>Kq(<dH_b&HEEd%h=n9U8[;9Aq/=CjoiP'Z8PHW*;</-OpDggkm396>0WeDfR8Q%i,9^"
d[126]="#u\]O2E\T:7p,&]eo1:]5>02q8G+kGU1:/*Ga5NJ$I:3w;o1wIMNL'#9(RkMb&HEE#lPN\"
d[127]="=I)r?1urMr2W.9?W_Fa,E);BdBl,2.aT>RwSPZ=2US;MHArrgf[nu^)tG7$l:>RO$<raC;"
d[128]="KW56##*apGn8N(*t=Yo'`@V$t13ow+RQ^k(j:4Zob&HEE0P(r7P*L/K;QmLN\cTA712#_\"
d[129]="sR7sbH,=8B?SsqCJ%[6PY/5P5@1`X*R.cA68*ous=suT)6VdE`$.36V7>?R[0W?F&m/N'%"
d[130]="e/2HEQef2?3-7%d+^c.Cb&HEE:ivOk=Jc*G&^YR@0NkL=b>fNdNP6A]):'S-B\bD,?`3('"
d[131]="WS9u3X7h^(:gp@R&Af1j5M-,E6I;mFBkcnJ8>3Xs`Km;eU)AG`DQ?LPS6hOP805V$A4oKJ"
d[132]="b&HEEConCb&q9p?LgV4jQNXM8M_('Y:SVCefns\,2%/.-`:4t4m4ll4eKal,@EG3Gqqi<Z"
d[133]="#0iE?HqjqT[D)W.VQ1F:]K8FMtdjKh,DO>/Wrdw>.%T21)oMd&b&HEE`7,E6hLDR]^%;H)"
d[134]="5DiJ^i3v^[KnV81JI7Q?n%#kZ5l'aX'ig6&/d3Vl>9%&SZfv7qNX.$deAD8Jp)nX<qb-um"
d[135]="$WO-ZI;;9Ts<'*n3'UwVblsvU/+EZ8b&HEEbZtj$5,<?XkSZ6]58rGdG&%O->>)_QrBlj-"
d[136]="l[&GVOCVl'gd/G;86E58oulYko>gY-p@H\*#.EXD9vLOY.h.VhQ9%mc5R6e`??'H$dO^Ob"
d[137]="#N_F6$4\VGb&HEE2('8g53.5HH.pePN9822di%cJPoj+l)C+L02<@'JZ\DpY,?6bfK(.)T"
d[138]="EB1Em=9@t>381eTu7/:=HBFXB+pUQ0hCE^P?BP7**#\c26L2^0$r126Be1>3b&HEE9\0tj"
d[139]="52QCdkFJe['m.`(^4GSfbLHRR2=@Igjwh(AfZXoXc:.bcPS3N_t=ZP&XCwOq`ZJ(N,oZhe"
d[140]="Pvwiq@37IFu:QJ_\QS,v0P;H*9:8)C5D1YKCT](3"
OPENFILE (file,GETSTARTPATH+"Daffy Duck 01-12kHz-16kbps-recreated.mp3","W")
RECT w,0,0,200,20
filelength=7872:numberofcharacters=9840
progressbarstep=5*CEIL(numberofcharacters/100)
FOR c=0 TO numberofcharacters-1 STEP 5
startposn=c%70
IF startposn=0
  data$=d[c/70]
  WRITEMEM mem,1,data$
ENDIF
READMEM mem,1,d1,startposn
READMEM mem,1,d2,startposn+1
READMEM mem,1,d3,startposn+2
READMEM mem,1,d4,startposn+3
READMEM mem,1,d5,startposn+4
'Convert five characters to four bytes of data
intdata=52200625*(d1-35)+614125*(d2-35)+7225*(d3-35)+85*(d4-35)+(d5-35)
IF bytenumber<=filelength-4
  WRITE (file,intdata)
  bytenumber=bytenumber+4
ELSE
  'Less than four bytes of data left
  byte1=intdata & 0xFF
  byte2=(intdata & 0xFF00)/0x100
  byte3=(intdata & 0xFF0000)/0x10000
  IF bytenumber<filelength THEN WRITE (file,byte1)
  IF bytenumber<filelength-1 THEN WRITE (file,byte2)
  IF bytenumber<filelength-2 THEN WRITE (file,byte3)
ENDIF
IF c%progressbarstep=0 THEN RECT w,0,0,200*c/numberofcharacters,20,0,0
NEXT c
CLOSEFILE file
FREEMEM mem
RECT w,0,0,200,20,0xFFFFFF,0xFFFFFF
RETURN
Regards,

Peter B.