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>�[+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