130 MODE7:PROCa:PROCb:PROCc:PROCd 180 PROCe:PROCf(g$,h$):IFFNiTHENGOTO180 210 VDU22,7:PROCj:END 250 DEFPROCb:k%=0:ONERRORPROCl 280 PROCm:PROCn:PRINT'"Please wait, initialising...":o%=TRUE:DIMp%64:IFo%THENDIMq%512 340 CLOSE#0:ENDPROC 370 DEFPROCd:DIMr%-1:s%=HIMEM-r%-1024:DIMt%s%:ENDPROC 430 DEFPROCl:IFk%<>0ANDERR>=128THENREPORT:PRINT:GOTO180 450 VDU22,7:CLOSE#0:PROCj:IFERR<>17THENREPORT:PRINT" at line ";ERL 490 END 510 DEFPROCm:*FX4,1 530 ENDPROC 550 DEFPROCj:*FX4 570 ENDPROC 590 DEFPROCa:VDU23,1,0;0;0;0;:ENDPROC 630 DEFPROCu:VDU23,1,1;0;0;0;:ENDPROC 670 DEFPROCc:LOCALv%,w%,x%,y%,z%,aa%,A%,X%,Y%:IFo%THENv%=OPENIN("LZSSDMB")ELSEv%=OPENIN("LZSSDM") 700 DIMba%FNca(v%):?p%=v%:p%!1=ba%:p%!5=FNca(v%):A%=4:X%=p%MOD256:Y%=p%DIV256:CALL&FFD1:w%=FNca(v%):FORx%=1TOFNca(v%):y%=FNca(v%):z%=ba%?y%+256*ba%?(y%+1):aa%=z%-w%+ba%:ba%?y%=aa%MOD256:ba%?(y%+1)=aa%DIV256:NEXT:CLOSE#v%:da=&77:ea=&73:fa=&78:ga=&79:ha=&7A:ia=&7F:ja=&8C:ENDPROC 920 DEFFNca(ka%):=BGET#ka%+256*BGET#ka% 950 DEFPROCla($p%):LOCALX%,Y%:X%=p%MOD256:Y%=p%DIV256:CALL&FFF7:ENDPROC 1020 DEFPROCn:CLS:PRINTTAB(4,0);CHR$141;CHR$132;CHR$157;CHR$135;"LZSS fast decompression ";CHR$156:PRINTTAB(4,1);CHR$141;CHR$132;CHR$157;CHR$135;"LZSS fast decompression ";CHR$156:PRINTCHR$131;"Version 1.00 (C) Steven Flintham 1996":ENDPROC 1090 DEFPROCe:IFk%=1THENGOTO1170 1110 IFk%=2THENGOTO1210 1120 PROCn:VDU28,0,24,39,4:PRINT"Whenever a filename is requested you canalso enter a * command":PRINT'"Maximum decompressed file size is &";STR$~s%:k%=1 1170 REPEAT:g$=FNma("Input file: "):UNTILFNna(g$):k%=2 1210 REPEAT:h$=FNma("Output file: "):UNTILFNoa(h$):k%=0:VDU26:ENDPROC 1280 DEFFNma(pa$):LOCALqa$:REPEAT:PRINT'pa$;:qa$=FNra(FNg(1,255,FALSE)):PRINT:IFLEFT$(qa$,1)="*"ANDLEN(qa$)<64THENPROCla(qa$) 1340 UNTILLEFT$(qa$,1)<>"*":=qa$ 1370 DEFFNra(sa$):REPEAT:IFLEFT$(sa$,1)=" "THENsa$=MID$(sa$,2) 1400 UNTILLEFT$(sa$,1)<>" ":=sa$ 1430 DEFFNna(qa$):LOCALka%,ta%,ua%:ka%=OPENIN(qa$):IFka%=0THENPRINT'"That file does not exist!":=FALSE 1470 FORta%=0TO11:p%?ta%=BGET#ka%:NEXT:CLOSE#ka%:ua%=p%?4:p%?4=13:IF$p%<>"LZSS"THENPRINT'"That is not an LZSS file!":=FALSE 1530 IFua%<>0THENPRINT'"That is not a version 0 LZSS file!":=FALSE 1540 IFp%!8>s%THENPRINT'"The decompressed file would be too"'"large!":=FALSE 1550 =TRUE 1570 DEFFNoa(h$):LOCALka%:ka%=OPENIN(h$):IFka%=0THEN=TRUE 1610 CLOSE#ka%:PRINT'"That file already exists. Are you sure you want to overwrite it? (Y/N) ";:IFNOTFNvaTHENPRINT"No":=FALSE 1640 PRINT"Yes":ka%=OPENOUT(h$):CLOSE#ka%:=TRUE 1690 DEFPROCf(g$,h$):LOCALv%,wa%,xa%,ya%,za%,ab%,bb%,cb%,db%,eb%,A%,X%,Y%:PROCn:PRINT'"Input file: ";CHR$131;RIGHT$(g$,27):PRINT"Output file:";CHR$131;RIGHT$(h$,27):v%=OPENIN(g$):?da=v%:PTR#v%=5:?ga=BGET#v%:?ha=BGET#v%:PRINT"Offset bits:";CHR$131;?ga:PRINT"Length bits:";CHR$131;?ha:PRINT'"Please wait, decompressing..." 1790 PTR#v%=8:FORfb%=0TO11:p%?fb%=BGET#v%:NEXT:gb%=!p%:db%=p%!4:eb%=p%!8:ia?0=gb%MOD256:ia?1=gb%DIV256:ia?2=gb%DIV&FFFF:?fa=(1+?ga+?ha)DIV9:?ea=t%MOD256:ea?1=t%DIV256:IFo%THEN?ja=q%MOD256:ja?1=q%DIV256 1860 PTR#v%=24:xa%=TIME:CALLba%:PROCla("Save "+h$+" "+STR$~t%+" +"+STR$~gb%+" "+STR$~eb%+" "+STR$~db%):xa%=TIME-xa%:IFxa%=0THENxa%=1: 1920 ya%=PTR#v%::PRINT'"Bytes read: ";CHR$131;"&";RIGHT$("000000"+STR$~ya%,6):PRINT"Bytes written:";CHR$131;"&";RIGHT$("000000"+STR$~gb%,6):ab%=xa%DIV360000:bb%=(xa%-ab%*360000)DIV6000:cb%=(xa%-ab%*360000-bb%*6000)DIV100:PRINT'"Time taken: ";CHR$131;ab%;":";RIGHT$("00"+STR$(bb%),2);":";RIGHT$("00"+STR$(cb%),2) 1990 PRINT"Speed: ";CHR$131;(100*ya%)DIVxa%;" bytes/second":PRINT"Input/output ratio:";CHR$131;ya%*100DIVgb%;"%":CLOSE#v%:ENDPROC 2040 DEFFNi:PRINT'"Decompress another file? (Y/N)";:=FNva 2080 DEFFNva:LOCALhb$:*FX21 2110 REPEAT:hb$=CHR$(GETAND&DF):UNTILhb$="Y"ORhb$="N":=(hb$="Y") 2160 DEFFNg(bb%,s%,ib%):LOCALg$,hb$:g$="":*FX21 2200 PROCu:REPEAT:REPEAT:hb$=GET$:UNTIL(hb$>="0"ANDhb$<="9")OR(NOTib%ANDhb$>=" "ANDhb$<="~")ORhb$=CHR$13ORhb$=CHR$127:IFhb$<>CHR$13ANDhb$<>CHR$127ANDLEN(g$)""THENg$=LEFT$(g$,LEN(g$)-1):VDU127 2270 UNTILLEN(g$)>=bb%ANDLEN(g$)<=s%ANDhb$=CHR$13:PROCa:=g$