8-Bit Software Online Conversion

Compression - Listing

180MODE7:PROCa:PROCb:PROCc:PROCd 230PROCe:PROCf(g$,h$,i%,j%):IFFNkTHENG OTO230 260VDU22,7:PROCl:END 300DEFPROCb:m%=0:ONERRORPROCn 330PROCo:PROCp:PRINT'"Please wait, ini tialising...":DIMq%64:CLOSE#0:ENDPROC 400DEFPROCd:LOCALr%,j%,s%,t%,u%,v%:DIM r%-1:IFHIMEM-r%>=29821THENw%=12ELSEw%=11 460j%=7::s%=2^w%:t%=(1+w%+j%)DIV9:u%=t %+2^j%:v%=s%+u%:DIMx%v%+u%:DIMy%6*(v%+1) :ENDPROC 550DEFPROCn:IFm%<>0ANDERR>=128THENREPO RT:PRINT:GOTO230 570VDU22,7:CLOSE#0:PROCl:IFERR<>17THEN REPORT:PRINT" at line ";ERL 610END 630DEFPROCo:*FX4,1 650ENDPROC 670DEFPROCl:*FX4 690ENDPROC 710DEFPROCa:VDU23,1,0;0;0;0;:ENDPROC 750DEFPROCz:VDU23,1,1;0;0;0;:ENDPROC 790DEFPROCc:LOCALaa%,ba%,ca%,da%,ea%,f a%,A%,X%,Y%:aa%=OPENIN("LZSSCX"):IFaa%=0 THENPRINT'"Sorry, I can't find LZSSCX."' :PROCl:END 830DIMga%FNha(aa%):?q%=aa%:q%!1=ga%:q% !5=FNha(aa%):A%=4:X%=q%MOD256:Y%=q%DIV25 6:CALL&FFD1:ba%=FNha(aa%):FORca%=1TOFNha (aa%):da%=FNha(aa%):ea%=ga%?da%+256*ga%? (da%+1):fa%=ea%-ba%+ga%:ga%?da%=fa%MOD25 6:ga%?(da%+1)=fa%DIV256:NEXT:CLOSE#aa%:i a=ga%+&6CB:ja=ga%+&6CC:x=&82:y=&84 1000s=ga%+&6D3:v=&86:u=&7F:t=ga%+&6D7:i =ga%+&6D8:j=ga%+&6D9:ka=ga%+&6DD:la=ga%+ &6DE:ma=ga%+&6DF:na=ga%+&6E0:oa=ga%+&6CE :pa=&8A:ENDPROC 1140DEFFNha(qa%):=BGET#qa%+256*BGET#qa% 1170DEFPROCra($x%):LOCALX%,Y%:X%=x%MOD2 56:Y%=x%DIV256:CALL&FFF7:ENDPROC 1240DEFPROCp:CLS:PRINTTAB(8,0);CHR$141; CHR$132;CHR$157;CHR$135;"LZSS compressio n ";CHR$156:PRINTTAB(8,1);CHR$141;CHR$1 32;CHR$157;CHR$135;"LZSS compression "; CHR$156:PRINTCHR$131;"Version 1.00 (C) S teven Flintham 1996":ENDPROC 1310DEFPROCe:LOCALqa%:IFm%=1THENGOTO139 0 1340IFm%=2THENGOTO1450 1350PROCp:VDU28,0,24,39,4:PRINT"Wheneve r a filename is requested you canalso en ter a * command":m%=1 1390REPEAT:g$=FNsa("Input file: "):qa%= OPENIN(g$):IFqa%<>0THENCLOSE#qa%ELSEPRIN T'"That file does not exist!" 1430UNTILqa%<>0:m%=2 1450REPEAT:h$=FNsa("Output file: "):UNT ILFNta(h$):qa%=OPENOUT(h$):CLOSE#qa%:m%= 0:i%=FNua("Offset bits:",6,w%):IFi%<=7TH ENva%=i%ELSEva%=7 1530j%=FNua("Length bits:",2,va%):VDU26 :ENDPROC 1570DEFFNsa(wa$):LOCALxa$:REPEAT:PRINT' wa$;:xa$=FNya(FNg(1,255,FALSE)):PRINT:IF LEFT$(xa$,1)="*"THENPROCra(xa$) 1630UNTILLEFT$(xa$,1)<>"*":=xa$ 1660DEFFNya(za$):REPEAT:IFLEFT$(za$,1)= " "THENza$=MID$(za$,2) 1690UNTILLEFT$(za$,1)<>" ":=za$ 1720DEFFNta(h$):LOCALqa%:qa%=OPENIN(h$) :IFqa%=0THEN=TRUE 1760CLOSE#qa%:PRINT'"That file already exists. Are you sure you want to overwr ite it? (Y/N) ";:IFNOTFNabTHENPRINT"No": =FALSE 1790PRINT"Yes":qa%=OPENOUT(h$):CLOSE#qa %:=TRUE 1840DEFFNua(wa$,bb%,cb%):LOCALua%:REPEA T:PRINT'wa$;" (";bb%;"-";cb%;") ";:ua%=V AL(FNg(1,LEN(STR$(cb%)),TRUE)):PRINT:UNT ILua%>=bb%ANDua%<=cb%:=ua% 1920DEFPROCf(g$,h$,i%,j%):LOCALg%,h%,db %,A%,X%,Y%,s%,t%,u%,v%,eb%,fb%,gb%,hb%,b b%,ib%:PROCp:PRINT'"Input file: ";CHR$13 1;g$:PRINT"Output file:";CHR$131;h$:PRIN T"Offset bits:";CHR$131;i%:PRINT"Length bits:";CHR$131;j%:PRINT'"Please wait, co mpressing..." 2000PRINT'"Bytes read: ";CHR$131;"&"; :?ka=POS:?la=VPOS:PRINT"000000":PRINT"By tes written:";CHR$131;"&";:?ma=POS:?na=V POS:PRINT"000000";:g%=OPENIN(g$):h%=OPEN OUT(h$):FORdb%=1TO4:BPUT#h%,ASC(MID$("LZ SS",db%,1)):NEXT:BPUT#h%,0::BPUT#h%,i%:B PUT#h%,j%:BPUT#h%,0::$(q%+32)=g$:q%!0=q% +32:A%=5:X%=q%MOD256:Y%=q%DIV256:CALL&FF DD 2120FORdb%=10TO13:BPUT#h%,q%?db%:NEXT:F ORdb%=2TO9:BPUT#h%,q%?db%:NEXT:FORdb%=1T O4:BPUT#h%,0:NEXT::?ia=g%:?ja=h%:s%=2^i% :t%=(1+i%+j%)DIV9:u%=t%+2^j%:v%=s%+u%:x? 0=x%MOD256:x?1=x%DIV256:y?0=y%MOD256:y?1 =y%DIV256:s?0=s%MOD256:s?1=s%DIV256:v?0= v%MOD256:v?1=v%DIV256:?u=u%:?t=t%:?i=i%: ?j=j%:eb%=TIME:CALLga% 2310eb%=TIME-eb%:IFeb%=0THENeb%=1: 2330fb%=oa!0AND&FFFFFF:gb%=24+pa!0AND&F FFFFF::PRINTTAB(?ka,?la);RIGHT$("000000" +STR$÷fb%,6):PRINTTAB(?ma,?na);RIGHT$("0 00000"+STR$÷gb%,6):hb%=eb%DIV360000:bb%= (eb%-hb%*360000)DIV6000:ib%=(eb%-hb%*360 000-bb%*6000)DIV100:PRINT'"Time taken: ";CHR$131;hb%;":";RIGHT$("00"+STR$ (bb%),2);":";RIGHT$("00"+STR$(ib%),2) 2410PRINT"Speed: ";CHR$131; (100*fb%)DIVeb%;" bytes/second":PRINT"Ou tput/input ratio:";CHR$131;gb%*100DIVfb% ;"%":CLOSE#g%:CLOSE#h%:ENDPROC 2470DEFFNk:PRINT'"Compress another file ? (Y/N)";:=FNab 2510DEFFNab:LOCALjb$:*FX21 2540REPEAT:jb$=CHR$(GETAND&DF):UNTILjb$ ="Y"ORjb$="N":=(jb$="Y") 2590DEFFNg(bb%,cb%,kb%):LOCALg$,jb$:g$= "":*FX21 2630PROCz:REPEAT:REPEAT:jb$=GET$:UNTIL( jb$>="0"ANDjb$<="9")OR(NOTkb%ANDjb$>=" " ANDjb$<="÷")ORjb$=CHR$13ORjb$=CHR$127:IF jb$<>CHR$13ANDjb$<>CHR$127ANDLEN(g$)<cb% THENg$=g$+jb$:PRINTjb$; 2690IFjb$=CHR$127ANDg$<>""THENg$=LEFT$( g$,LEN(g$)-1):VDU127 2700UNTILLEN(g$)>=bb%ANDLEN(g$)<=cb%AND jb$=CHR$13:PROCa:=g$