180MODE7:PROCa:PROCb:PROCc:PROCd 230PROCe:PROCf(g$,h$,i%,j%):IFFNkTHENGOTO230 260VDU22,7:PROCl:END 300DEFPROCb:m%=0:ONERRORPROCn 330PROCo:PROCp:PRINT'"Please wait, initialising...":DIMq%64:CLOSE#0:ENDPROC 400DEFPROCd:LOCALr%,j%,s%,t%,u%,v%:DIMr%-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>=128THENREPORT:PRINT:GOTO230 570VDU22,7:CLOSE#0:PROCl:IFERR<>17THENREPORT: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%,fa%,A%,X%,Y%:aa%=OPENIN("LZSSCX"):IFaa%=0THENPRINT'"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%DIV256: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%MOD256:ga%?(da%+1)=fa%DIV256:NEXT:CLOSE#aa%:ia=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%MOD256:Y%=x%DIV256:CALL&FFF7:ENDPROC 1240DEFPROCp:CLS:PRINTTAB(8,0);CHR$141;CHR$132;CHR$157;CHR$135;"LZSS compression ";CHR$156:PRINTTAB(8,1);CHR$141;CHR$132;CHR$157;CHR$135;"LZSS compression ";CHR$156:PRINTCHR$131;"Version 1.00 (C) Steven Flintham 1996":ENDPROC 1310DEFPROCe:LOCALqa%:IFm%=1THENGOTO1390 1340IFm%=2THENGOTO1450 1350PROCp:VDU28,0,24,39,4:PRINT"Whenever a filename is requested you canalso enter a * command":m%=1 1390REPEAT:g$=FNsa("Input file: "):qa%=OPENIN(g$):IFqa%<>0THENCLOSE#qa%ELSEPRINT'"That file does not exist!" 1430UNTILqa%<>0:m%=2 1450REPEAT:h$=FNsa("Output file: "):UNTILFNta(h$):qa%=OPENOUT(h$):CLOSE#qa%:m%=0:i%=FNua("Offset bits:",6,w%):IFi%<=7THENva%=i%ELSEva%=7 1530j%=FNua("Length bits:",2,va%):VDU26:ENDPROC 1570DEFFNsa(wa$):LOCALxa$:REPEAT:PRINT'wa$;:xa$=FNya(FNg(1,255,FALSE)):PRINT:IFLEFT$(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 overwrite it? (Y/N) ";:IFNOTFNabTHENPRINT"No":=FALSE 1790PRINT"Yes":qa%=OPENOUT(h$):CLOSE#qa%:=TRUE 1840DEFFNua(wa$,bb%,cb%):LOCALua%:REPEAT:PRINT'wa$;" (";bb%;"-";cb%;") ";:ua%=VAL(FNg(1,LEN(STR$(cb%)),TRUE)):PRINT:UNTILua%>=bb%ANDua%<=cb%:=ua% 1920DEFPROCf(g$,h$,i%,j%):LOCALg%,h%,db%,A%,X%,Y%,s%,t%,u%,v%,eb%,fb%,gb%,hb%,bb%,ib%:PROCp:PRINT'"Input file: ";CHR$131;g$:PRINT"Output file:";CHR$131;h$:PRINT"Offset bits:";CHR$131;i%:PRINT"Length bits:";CHR$131;j%:PRINT'"Please wait, compressing..." 2000PRINT'"Bytes read: ";CHR$131;"&";:?ka=POS:?la=VPOS:PRINT"000000":PRINT"Bytes written:";CHR$131;"&";:?ma=POS:?na=VPOS:PRINT"000000";:g%=OPENIN(g$):h%=OPENOUT(h$):FORdb%=1TO4:BPUT#h%,ASC(MID$("LZSS",db%,1)):NEXT:BPUT#h%,0::BPUT#h%,i%:BPUT#h%,j%:BPUT#h%,0::$(q%+32)=g$:q%!0=q%+32:A%=5:X%=q%MOD256:Y%=q%DIV256:CALL&FFDD 2120FORdb%=10TO13:BPUT#h%,q%?db%:NEXT:FORdb%=2TO9:BPUT#h%,q%?db%:NEXT:FORdb%=1TO4: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&FFFFFF::PRINTTAB(?ka,?la);RIGHT$("000000"+STR$~fb%,6):PRINTTAB(?ma,?na);RIGHT$("000000"+STR$~gb%,6):hb%=eb%DIV360000:bb%=(eb%-hb%*360000)DIV6000:ib%=(eb%-hb%*360000-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"Output/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:IFjb$<>CHR$13ANDjb$<>CHR$127ANDLEN(g$)""THENg$=LEFT$(g$,LEN(g$)-1):VDU127 2700UNTILLEN(g$)>=bb%ANDLEN(g$)<=cb%ANDjb$=CHR$13:PROCa:=g$