> ScrSqsh * Squash a screen with multiple passes : (2 ctrl% 31,name% 39,pal% 15:X%=ctrl%:Y%=X%256 2' >&FFFF: mem% &8000 mem%=&3000 <"Screen to compress: "f1$ F"Screen mode: "m% P"File to save as: "f2$ Z$'" (RETURN to optimise)":11,11 d*"Number of passes: "p%:p%<9 p%>-1 n: <&FFFF:m% x :Close_All:: 1 f1$,1)="*": f1$ "LOAD "+f1$+" "+~mem%  <&FFFF:m%=fx(135,0)256 * x%=0 15:pal%?x%=pal(x%) 15: x% 7 m%=0:colours%=2 m%=1:colours%=4 colours%=16 N >&FFFF: x%=0 colours%-1: "Palette ";x%;": ";: ""A%:pal%?x%=A%: x% u colours%>8:?mem%=pal%?8+16*pal%?9:mem%?1=pal%?10+16*pal%?11:mem%?2=pal%?12+16*pal%?13:mem%?3=pal%?14+16*pal%?15 9 p%=0:p%=passes: p%=0:"Screen not compressable": 9"SAVE "+f2$+" "+~mem%+"+5000 "+~p%+"0000 FFFF3000" out%=(f2$) ext%=squash(p%,out%) #out%:out%=0 load%=&FFFF3000 M colours%>4:load%=pal%?4 8*pal%?5 64*pal%?6 512*pal%?7 &FFFF3000 *X%!2=load%:A%=file(f2$,2): p%=8:p%=3 Oexec%=(p%-1)*&10000 m%*&1000 512*pal%?3 64*pal%?2 8*pal%?1 pal%?0 X%!6=exec%:A%=file(f2$,3) "F:"Compression done."'"Reduced size: &";~ext%;" (";ext%;" bytes)" , 6: @ݤsquash(p%,o%) Jext%=0:start%=mem%:pass%=p% T":addr%=start%:start%=start%+1 ^:b%=?addr%:n%=0: h-addr%=addr%+p%:n%=n%+1: o%:?(addr%-p%)=0 r: ?addr%<>b% addr%-mem%>&4FFF n%=256: n%=256:n%=0 |(ext%=ext%+2: o%:#out%,b%:#out%,n% $ addr%-mem%>&4FFF:pass%=pass%-1  pass%=0  =ext% :  ݤpasses !size%=&5000:p%=0: try%=1 8 & >&FFFF:"Trying passes: ";try%; ext%=squash(try%,0) # ext%&FFFF:" - size: ";ext% % try%=2:try%=3 try%=4:try%=7  try%:=p% : 6ݤfx(A%,X%): Y%:Y%=X%256:=((&FFF4)&FFFF00)256 (ݤpal(A%):?X%=A%:A%=11: &FFF1:=X%?1 Bݤfile(A$,A%):$name%=A$:?X%=name%:X%?1=name%256:=(&FFDD)&FF &Close_All 0'out%=out%:out%:A%=out%:out%=0:#A% :