Home » Archimedes archive » Acorn User » AU 1995-12 A.adf » BigPicDem » !TheBigPic/Resources/Delta
!TheBigPic/Resources/Delta
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
Tape/disk: | Home » Archimedes archive » Acorn User » AU 1995-12 A.adf » BigPicDem |
Filename: | !TheBigPic/Resources/Delta |
Read OK: | ✔ |
File size: | 24B3B bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM > ChangeFSI 140areanumber%=0 150SYS"OS_GetEnv" TO A$ 160IFINSTR(A$," -wimp") THEN 170DIM z%(1),p%(2),s%(3),m$(22) 180A%=OPENIN"<ChangeFSI$Dir>.Messages" 190B%=-1:REPEAT B%+=1:m$(B%)=GET$#A%:UNTILEOF#A%:CLOSE#A% 200startfile%=RIGHT$(A$,6)<>"-wimp " 210DIM taskid%4:$taskid%="TASK" 220SYS "Wimp_Initialise",200,!taskid%,m$(20) TO version% 230Wimp = (1<<18) + (3<<6) 240CreateW = Wimp+1:OpenW = Wimp+5 250CloseW = Wimp+6:RedrawW = Wimp+8 260UpdateW = Wimp+9:GetR% = Wimp+10 270GetW = Wimp+11:SetI = Wimp+13 280GetI = Wimp+14:GetP = Wimp+15 290Drag = Wimp+16:CrMenu = Wimp+20 300DcMenu = Wimp+21 310SYS "OS_SWINumberFromString",,"Wimp_PollIdle" TO Poll% 320SYS "OS_SWINumberFromString",,"XOS_SpriteOp" TO spop% 330SYS "OS_SWINumberFromString",,"OS_ReadMonotonicTime" TO Time% 340SYS "OS_SWINumberFromString",,"ColourTrans_ReturnColourNumber" TO ctran% 350SYS "XOS_SWINumberFromString",,"DragASprite_Start" TO dstart%;f%:IFf%AND 1 dstart%=0 360SYS "OS_Byte",161,&1C TO ,,f%:IF(f% AND 2)=0 dstart%=0 370nextlocation%=HIMEM 380SYS "Wimp_SlotSize",-1,-1 TO originalslot% 390PROClocale_initialise 410IF version%>=300 THEN 420DIM q% 255,ifactors% 15,factors% 15,pixtrans% 255,paltemp% 1023,buffer% 255,idata% 1023 430ELSE 440DIM z% 1223,q% 255,ifactors% 15,factors% 15,pixtrans% 255,paltemp% 1023,buffer% 255,idata% 2599 450ENDIF 470scrap%=FALSE 480IF version%<300 sidata%=idata% 490sprite%=FALSE:sar%=FALSE:saved%=TRUE:z$=STRING$(12,CHR$13) 510SYS "OS_Byte",161,&8C TO ,,f% 520IFf% AND 1 THEN 530SYS"Wimp_OpenTemplate",,"<ChangeFSI$Dir>.3dTemplate" 540ELSE 550SYS"Wimp_OpenTemplate",,"<ChangeFSI$Dir>.Templates" 560ENDIF 580LOCAL ERROR 590ON ERROR SYS"Wimp_CloseTemplate":ERROR 0,REPORT$+" (code "+STR$ERL+")" 610IFversion%>=300 THEN 620DIM z% FNlargest_buffer 630indsize%=FNsize_indirect("Info") 640DIM info_wind% indsize% 650SYS"Wimp_LoadTemplate",,z%,info_wind%,info_wind%+indsize%,-1,"Info"+z$,0 660ELSE 670SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Info"+z$,0 TO ,,idata% 680ENDIF 690SYS CreateW,,z% TO infow%:$!(z%+88+7*32+20)=m$(21) 710IFversion%>=300 THEN 720indsize%=FNsize_indirect("Processing") 730DIM proc_wind% indsize% 740SYS"Wimp_LoadTemplate",,z%,proc_wind%,proc_wind%+indsize%,-1,"Processing",0 750ELSE 760SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Processing",0 TO ,,idata% 770ENDIF 780SYS CreateW,,z% TO proc% 790p%(0)=!(z%+88+8*32+20):p%(1)=!(z%+88+9*32+20):p%(2)=!(z%+88+10*32+20) 810IFversion%>=300 THEN 820indsize%=FNsize_indirect("Output") 830DIM outp_wind% indsize% 840SYS"Wimp_LoadTemplate",,z%,outp_wind%,outp_wind%+indsize%,-1,"Output"+z$,0 850ELSE 860SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Output"+z$,0 TO ,,idata% 870ENDIF 880SYS CreateW,,z% TO output%:admode%=!(z%+88+17*32+20):adspcl%=!(z%+88+16*32+20) 900IFversion%>=300 THEN 910indsize%=FNsize_indirect("Scaling") 920DIM scal_wind% indsize% 930SYS"Wimp_LoadTemplate",,z%,scal_wind%,scal_wind%+indsize%,-1,"Scaling"+z$,0 940ELSE 950SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Scaling"+z$,0 TO ,,idata% 960ENDIF 970SYS CreateW,,z% TO scalew%:adscale%=!(z%+88+1*32+20) 980s%(0)=!(z%+88+10*32+20):s%(1)=!(z%+88+11*32+20) 990s%(2)=!(z%+88+12*32+20):s%(3)=!(z%+88+13*32+20) 1010IFversion%>=300 THEN 1020indsize%=FNsize_indirect("Save") 1030DIM save_wind% indsize% 1040SYS"Wimp_LoadTemplate",,z%,save_wind%,save_wind%+indsize%,-1,"Save"+z$,0 1050ELSE 1060SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Save"+z$,0 TO ,,idata% 1070ENDIF 1080SYS CreateW,,z% TO save%:adsave%=!(z%+88+1*32+20) 1100IFversion%>=300 THEN 1110indsize%=FNsize_indirect("Sprite") 1120DIM sprt_wind% indsize% 1130SYS"Wimp_LoadTemplate",,z%,sprt_wind%,sprt_wind%+indsize%,-1,"Sprite"+z$,0 1140ELSE 1150SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Sprite"+z$,0 TO ,,idata% 1160ENDIF 1170SYS CreateW,,z% TO sinfo%:adsname%=!(z%+88+5*32+20):adsbytes%=!(z%+88+8*32+20) 1180adsx%=!(z%+88+7*32+20):adsy%=!(z%+88+9*32+20):adsm%=!(z%+88+6*32+20) 1200IFversion%>=300 THEN 1210indsize%=FNsize_indirect("Source") 1220DIM src_wind% indsize% 1230SYS"Wimp_LoadTemplate",,z%,src_wind%,src_wind%+indsize%,-1,"Source"+z$,0 1240ELSE 1250SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Source"+z$,0 TO ,,idata% 1260ENDIF 1270SYS CreateW,,z% TO srcinfo%:adsrc%=!(z%+88+0*32+20) 1290IFversion%>=300 THEN 1300indsize%=FNsize_indirect("Range") 1310DIM range_wind% indsize% 1320SYS"Wimp_LoadTemplate",,z%,range_wind%,range_wind%+indsize%,-1,"Range"+z$,0 1330ELSE 1340SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Range"+z$,0 TO ,,idata% 1350ENDIF 1360SYS CreateW,,z% TO raninfo%:adran%=!(z%+88+0*32+20) 1380IFversion%>=300 THEN 1390indsize%=FNsize_indirect("Zoom") 1400DIM zoom_wind% indsize% 1410SYS"Wimp_LoadTemplate",,z%,zoom_wind%,zoom_wind%+indsize%,-1,"Zoom"+z$,0 1420ELSE 1430SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Zoom"+z$,0 TO ,,idata% 1440ENDIF 1450SYS CreateW,,z% TO zoom%:z%(0)=!(z%+88+4*32+20):z%(1)=!(z%+88+5*32+20) 1470IFversion%>=300 THEN 1480indsize%=FNsize_indirect("Pic") 1490DIM pic_wind% indsize% 1500SYS"Wimp_LoadTemplate",,z%,pic_wind%,pic_wind%+indsize%,-1,"Pic"+z$,0 1510ELSE 1520SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Pic"+z$,0 1530ENDIF 1540SYS CreateW,,z% TO pic%:adtitle%=z%!72 1560RESTORE ERROR 1570SYS"Wimp_CloseTemplate" 1580!q%=-1:q%!4=0:q%!8=0:q%!12=68:q%!16=68:q%!20=%11000000000010 1590$(q%+24)="!"+m$(20):SYS"Wimp_CreateIcon",,q% TO iconbar% 1600A%=OPENIN"<ChangeFSI$Dir>.Choices":IFA%=0 THEN 1610fast%=FALSE:statescale%=%10000000100:stateproc%=0:stateoutput%=&a008 1620$p%(0)="":$p%(1)="2"+decimal_point$+"2":$p%(2)="24":$adspcl%="" 1630$admode%="28":$s%(0)="1":$s%(1)="4":$s%(2)="1":$s%(3)="4" 1640ELSE 1650INPUT#A%,fast%,statescale%,stateproc%,stateoutput% 1660INPUT#A%,$p%(0),$p%(1),$p%(2),$admode%,$adspcl% 1670$p%(1)=FNlocale_convert($p%(1),".",decimal_point$) 1680INPUT#A%,$s%(0),$s%(1),$s%(2),$s%(3) 1690CLOSE#A% 1700ENDIF 1710q%!12=1<<21 1720!q%=scalew%:FORI%=0TO9:IFstatescale%>>I%AND1 q%!8=1<<21 ELSEq%!8=0 1730q%!4=I%:SYS SetI,,q%:NEXT 1740FORI%=10TO13:IFstatescale%>>I%AND1 q%!8=1<<21 ELSEq%!8=0 1750q%!4=I%+6:SYS SetI,,q%:NEXT 1760!q%=proc%:FORI%=0TO7:IFstateproc%>>I%AND1 q%!8=1<<21 ELSEq%!8=0 1770q%!4=I%:SYS SetI,,q%:NEXT 1780!q%=output%:FORI%=0TO15:IFstateoutput%>>I%AND1 q%!8=1<<21 ELSEq%!8=0 1790q%!4=I%:SYS SetI,,q%:NEXT 1800PROCshowscaletofit:$z%(0)="1":$z%(1)="1" 1810SYS "OS_UpdateMEMC" TO oldmemc 1830ON ERROR SYS"OS_UpdateMEMC",oldmemc,&700:PROCerrorbox:SYS CrMenu,,-1 1840SYS Drag,,-1 1850IFNOTsprite% SYS "Wimp_SlotSize",originalslot%,-1 1860F$="":IFstartfile% startfile%=FALSE:F$=MID$(A$,INSTR(A$,"-wimp")+6):PROCcallFSI 1870REPEAT 1880SYS Poll%,1,q% TO A% 1890CASE A% OF 1900WHEN 1 :IFsprite% PROCredraw_window(!q%) 1910WHEN 2 :PROCopen_window(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,q%!28) 1920WHEN 3 :SYS &400c3,,q%:nextlocation%=HIMEM:PROCremovearea 1930SYS "Wimp_SlotSize",originalslot%,-1:saved%=TRUE:sprite%=FALSE 1940WHEN 6 :PROCcheckmouse(!q%,q%!4,q%!8,q%!12,q%!16,q%!20) 1950WHEN 7 :SYS GetP,,q%:dw%=q%!12:di%=q%!16:IFdstart% SYS"DragASprite_Stop" 1960q%!12=0:q%!16=1:q%!20=dw%:q%!24=di%:q%!28=!q%:q%!32=q%!4 1970q%!36=!sar%+3:q%!40=&ff9:$adsave%=FNZS(adsave%) 1980foo%=INSTR($adsave%,"."):WHILEfoo% 1990$adsave%=MID$($adsave%,foo%+1):foo%=INSTR($adsave%,".") 2000ENDWHILE 2010$(q%+44)=$adsave%+CHR$0:!q%=44+(LEN$adsave%+1+3ANDNOT3) 2020SYS "Wimp_SendMessage",17,q%,dw%,di%:myref%=q%!8 2030WHEN 8 :PROCkey(!q%,q%!4,q%!24) 2040WHEN 9 :PROCmenuselect(q%) 2050WHEN 17,18:PROCreceive(q%) 2060ENDCASE 2070UNTIL FALSE 2080ELSE 2090Q%=HIMEM 2100END=&4000000 2110ON ERROR ON ERROR OFF:OSCLI"Set ChangeFSI$ReturnCode "+REPORT$+" (code "+STR$ERL+")":PROCremovearea:CLEAR:END=Q%:END 2120foo%=0:A%=FNChangeFSI(A$,-1,-1,0,-1,-1,foo%,TRUE) 2130PROCremovearea:*unset ChangeFSI$ReturnCode 2140CLEAR:END=Q% 2150ENDIF 2160END 2180DEF PROClocale_initialise 2190LOCAL p% 2200SYS "Territory_ReadSymbols",-1,0 TO p% 2210decimal_point$=CHR$?p% 2220ENDPROC 2240DEF FNlocale_convert(n$,f$,t$) 2250IF f$=t$ :=n$ 2260LOCAL i% 2270i%=INSTR(n$,f$) 2280IF i%<>0 :=LEFT$(n$,i%-1)+t$+MID$(n$,i%+1) 2290=n$ 2310DEF FNsize_indirect(name$) 2320LOCAL size% 2330SYS "Wimp_LoadTemplate",,0,,,,name$+z$,0 TO ,,size% 2340=size% 2360DEF FNwinsize_indirect(name$) 2370LOCAL size% 2380SYS "Wimp_LoadTemplate",,0,,,,name$+z$,0 TO ,size% 2390=size% 2440DEF FNlargest_buffer 2450LOCAL largest_tem%,size%,here%,name 2460DIM name 12 2470$name="*":here%=0:largest_tem%=0 2480SYS "Wimp_LoadTemplate", ,0,,,,name,0 TO ,size%,,,,,here% 2490WHILE here% 2500IF largest_tem%<size% largest_tem%=size% 2510$name= "*" 2520SYS "Wimp_LoadTemplate", ,0,,,,name,here% TO ,size%,,,,,here% 2530ENDWHILE 2540=largest_tem% 2560DEF PROCreceive(q%) 2570CASE q%!16 OF 2580WHEN 0:PROCcheckandfinish 2590WHEN 1:IFq%!20<>save% THEN 2600!q%=60:q%!12=q%!8:q%!16=2:q%!36=-1:$(q%+44)="<Wimp$Scrap>"+CHR$0 2610SYS"Wimp_SendMessage",17,q%,q%!4:scrap%=q%!8 2620ENDIF 2630WHEN 2:SYSspop%,&10C,sar%,FNZS(q%+44):$adsave%=FNZS(q%+44) 2640q%!12=q%!8:q%!16=3:SYS "Wimp_SendMessage",18,q%,q%!4 2650IF q%!36<>-1 saved%=TRUE 2660SYS CrMenu,,-1 2670WHEN 3:F$=FNZS(q%+44):IFscrap% scrap%=scrap%=q%!12 2680q%!12=q%!8:q%!16=4:SYS"Wimp_SendMessage",17,q%,q%!4 2690PROCcallFSI 2700WHEN 5:CASE q%!40 OF 2710WHEN &ff0,&c85 2720q%!12=q%!8:q%!16=4:SYS"Wimp_SendMessage",17,q%,q%!4 2730F$=FNZS(q%+44):PROCcallFSI 2740ENDCASE 2750WHEN9,&400C1:IFsprite% PROCgetmodeinfo:SYS&400d1,pic%,0,-32767,32767,0 2760PROCshowscaletofit 2770WHEN 10:SYS"XOS_ReadVarVal","ChangeFSI$Dir",paltemp%,256,0,3 TO,,bootlen% 2780paltemp%?bootlen%=13 2790BPUT#q%!20,"Run "+$paltemp% 2800ENDCASE 2810ENDPROC 2830DEF PROCcallFSI 2840A$=FNdeducemode:A%=47 2850IFFNgeticonstate(output%,12) THEN 2860A$+=$adspcl% 2870ELSE 2880IFFNgeticonstate(output%,13) THEN 2890IFFNgeticonstate(output%,2)ORFNgeticonstate(output%,8) A$+="R" 2900ELSE 2910SYS53,VALA$,3 TO,,A% 2920IFA%=63 THEN 2930IFFNgeticonstate(output%,3) A$="27t" 2940IFFNgeticonstate(output%,9) A$="12t" 2950ELSE 2960IFA%=255 A$+="d" 2970ENDIF 2980ENDIF 2990ENDIF 3000A$="garbage "+F$+" <ChangeFSI$Dir>.Foo "+A$ 3010IFFNgeticonstate(scalew%,1) A$+=" "+STR$tofitx+": "+STR$tofity+":" 3020IFFNgeticonstate(scalew%,5) A$+=" 1:2" 3030IFFNgeticonstate(scalew%,4) A$+=" 1:2 1:1" 3040IFFNgeticonstate(scalew%,3) A$+=" 1:1 1:2" 3050IFFNgeticonstate(scalew%,9) THEN 3060IFVAL$s%(0) A$+=" "+$s%(0) ELSEA$+=" 1" 3070A$+=":"+$s%(1) 3080IFVAL$s%(2) A$+=" "+$s%(2) ELSEA$+=" 1" 3090A$+=":"+$s%(3) 3100ENDIF 3110IFFNgeticonstate(scalew%,0) A$+=" -nosize" 3120IFFNgeticonstate(scalew%,18) A$+=" -noscale" 3130IFFNgeticonstate(scalew%,19) A$+=" -lock" 3140IFFNgeticonstate(scalew%,6) THEN 3150IFFNgeticonstate(scalew%,16) A$+=" -rotate" ELSEA$+=" -rotate-" 3160ENDIF 3170IFFNgeticonstate(scalew%,7) A$+=" -hflip" 3180IFFNgeticonstate(scalew%,8) A$+=" -vflip" 3190IFFNgeticonstate(proc%,0) A$+=" -range" 3200IFFNgeticonstate(proc%,1) A$+=" -equal" 3210IFFNgeticonstate(proc%,2) A$+=" -nodither" 3220IFFNgeticonstate(proc%,3) A$+=" -invert" 3230IFFNgeticonstate(proc%,4) A$+=" -brighten" 3240IFFNgeticonstate(proc%,5) A$+=" -black"+$p%(0) 3250IFFNgeticonstate(proc%,6) A$+=" -gamma"+FNlocale_convert($p%(1),decimal_point$,".") 3260IFFNgeticonstate(proc%,7) A$+=" -sharpen"+$p%(2) 3270info$="":range$=m$(19):cputime%=0 3280IFsprite% !q%=pic%:SYS &400c3,,q%:saved%=TRUE:sprite%=FALSE 3290nextlocation%=HIMEM 3300SYS "Wimp_SlotSize",originalslot%,-1:PROCremovearea 3310IFfast% SYS "OS_UpdateMEMC",&300,&700 TO oldmemc 3320A%=FNChangeFSI(A$,-1,-1,nextlocation%,0,0,sar%,0) 3330IFfast% SYS "OS_UpdateMEMC",oldmemc,&700 3340IFscrap% scrap%=FALSE:SYS"OS_File",6,F$ 3350IFA%<2 AND sar%<>0 THEN 3360SYS spop%,&10d,sar%,pixtrans%,255,1 3370n$=FNZS(pixtrans%):SYS spop%,&128,sar%,n$ TO,,,x,y,,m 3380$adsx%=STR$x:$adsy%=STR$y:$adsm%=STR$m:$adsname%=n$ 3390$adsbytes%=STR$sar%!12:$adran%=range$ 3400$adsrc%=info$+m$(0)+STR$(cputime%DIV100)+decimal_point$+RIGHT$("0"+STR$(cputime%MOD100),2)+m$(1) 3410A%=LENF$:WHILEMID$("."+F$,A%,1)<>".":A%-=1:ENDWHILE 3420$adsave%=MID$("."+F$,A%+1) 3430SYS&35,m,4 TO,,nx:x=x<<nx 3440SYS&35,m,5 TO,,ny:y=y<<ny 3450saved%=FALSE:sprite%=TRUE:PROCgetmodeinfo 3460pic%=FNcreate_window(x,y,F$) 3470PROCpopup(pic%,-1) 3480ENDIF 3490ENDPROC 3510DEF PROCcheckandfinish 3520IFsaved% ORNOTsprite% PROCremovearea:SYS "Wimp_CloseDown":END 3530!buffer%=ERR:$(buffer%+4)=m$(2)+F$+m$(3)+CHR$0 3540SYS "Wimp_ReportError",buffer%,%10111,m$(20) TO ,A% 3550IFA%=1 PROCremovearea:SYS "Wimp_CloseDown":END 3560ENDPROC 3580DEF PROCkey(handle%,icon%,key%) 3590IFkey%=&1b SYS CrMenu,,-1:ENDPROC 3600CASE handle% OF 3610WHEN zoom%:CASE key% OF 3620WHEN 13:PROCdozoom(icon%-4,0):IFicon%=4 SYS &400d2,zoom%,5,,,-1,LEN$z%(0) 3630IFicon%=5 SYS CrMenu,,-1 3640ENDPROC 3650WHEN &18e,&18f:PROCdozoom(icon%-4,0) 3660SYS &400d2,zoom%,icon%EOR1,,,-1,LEN$z%(icon%EOR5):ENDPROC 3670ENDCASE 3680WHEN save% 3690IFkey%=13 PROCsavesprite:ENDPROC 3700WHEN output% 3710PROCshowscaletofit 3720IFkey%=13 SYS CrMenu,,-1:ENDPROC 3730IFkey%=&18e ORkey%=&18f THEN 3740icon%=icon%EOR1:key%=admode%:IFicon%=16 key%=adspcl% 3750SYS &400d2,output%,icon%,,,-1,LEN$key%:ENDPROC 3760ENDIF 3770WHEN proc%:CASE key% OF 3780WHEN &18e,13:icon%+=1:IFicon%>10 icon%=8:IFkey%=13 SYS CrMenu,,-1:ENDPROC 3790SYS &400d2,proc%,icon%,,,-1,LEN$p%(icon%-8):ENDPROC 3800WHEN &18f:icon%-=1:IFicon%<8 icon%=10 3810SYS &400d2,proc%,icon%,,,-1,LEN$p%(icon%-8):ENDPROC 3820ENDCASE 3830WHEN scalew%:CASE key% OF 3840WHEN &18e,13:icon%+=1:IFicon%>13 icon%=10:IFkey%=13 SYS CrMenu,,-1:ENDPROC 3850SYS &400d2,scalew%,icon%,,,-1,LEN$s%(icon%-10):ENDPROC 3860WHEN &18f:icon%-=1:IFicon%<10 icon%=13 3870SYS &400d2,scalew%,icon%,,,-1,LEN$s%(icon%-10):ENDPROC 3880ENDCASE 3890ENDCASE 3900SYS "Wimp_ProcessKey",key% 3910ENDPROC 3930DEF PROCsavesprite 3940SYS spop%,&10C,sar%,$adsave% 3950SYS CrMenu,,-1 3960ENDPROC 3980DEF PROCcheckmouse(mousex%,mousey%,b%,handle%,icon%,ob%) 3990IFb%AND2 THEN 4000CASE handle% OF 4010WHEN pic%:PROCdomenu(pic%,m$(4)+">sinfo%,"+m$(5)+">srcinfo%,"+m$(6)+">raninfo%,"+m$(7)+">zoom%,"+m$(8)+">save%,"+m$(9),m$(20)) 4020WHEN -2:PROCdomenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20)) 4030ENDCASE 4040rmenuhandle%=handle% 4050ENDIF 4060IFb%AND4 THEN 4070CASE handle% OF 4080WHEN zoom%:CASE icon% OF 4090WHEN 0:PROCdozoom(0,1) 4100WHEN 1:PROCdozoom(0,-1) 4110WHEN 2:PROCdozoom(1,1) 4120WHEN 3:PROCdozoom(1,-1) 4130ENDCASE 4140ENDCASE 4150ENDIF 4160IFb%AND1 THEN 4170CASE handle% OF 4180WHEN zoom%:CASE icon% OF 4190WHEN 0:PROCdozoom(0,-1) 4200WHEN 1:PROCdozoom(0,1) 4210WHEN 2:PROCdozoom(1,-1) 4220WHEN 3:PROCdozoom(1,1) 4230ENDCASE 4240ENDCASE 4250ENDIF 4260IFb%AND5 THEN 4270CASE handle% OF 4280WHEN output%:CASE icon% OF 4290WHEN 0,1,2,3:PROCkillcurrent(STR$(25+icon%)) 4300WHEN 4:PROCkillcurrent("S16,90,90") 4310WHEN 5:PROCkillcurrent("S32,90,90") 4320WHEN 6:PROCkillcurrent("0") 4330WHEN 7:PROCkillcurrent("8") 4340WHEN 8:PROCkillcurrent("12") 4350WHEN 9:PROCkillcurrent("15") 4360WHEN 10:PROCkillcurrent("S16,90,45") 4370WHEN 11:PROCkillcurrent("S32,90,45") 4380ENDCASE 4390IFFNgeticonstate(output%,15) $admode%=FNdeducemode 4400!q%=output%:q%!4=17:q%!8=0:q%!12=0:SYS SetI,,q% 4410PROCshowscaletofit 4420WHEN save%:CASE icon% OF 4430WHEN 2:PROCsavesprite 4440ENDCASE 4450WHEN -2:IFsprite% PROCgetw(pic%):PROCopen_window(pic%,x0%,y0%,x1%,y1%,scx%,scy%,-1) 4460ENDCASE 4470ENDIF 4480IFb%AND&50 THEN 4490CASE handle% OF 4500WHEN save%:CASE icon% OF 4510WHEN 0:PROCgetw(save%) 4520!q%=save%:q%!4=0:SYS GetI,,q% 4530!q%=save%:q%!4=5 4540q%!8+=bx%:q%!12+=by%:q%!16+=bx%:q%!20+=by% 4550q%!24=0:q%!28=0:q%!32=&7FFFFFFF:q%!36=&7FFFFFFF 4560IFdstart% SYS dstart%,%11000101,1,"file_ff9",q%+8,q%+24 ELSESYS "Wimp_DragBox",,q% 4570ENDCASE 4580ENDCASE 4590ENDIF 4600ENDPROC 4620DEF PROCdozoom(s%,a%) 4630IFs%=0 THEN 4640$z%(0)=STR$(VAL$z%(0)+a%):IF$z%(0)="0" $z%(0)="1" 4650ELSE 4660$z%(1)=STR$(VAL$z%(1)+a%):IF$z%(1)="0" $z%(1)="1" 4670ENDIF 4680!q%=zoom%:q%!4=4+s%:q%!8=0:q%!12=0:SYS SetI,,q% 4690!q%=pic%:SYS GetW,,q%:f%=q%!28:SYS &400c3,,q% 4700pic%=FNcreate_window(x,y,F$) 4710PROCpopup(pic%,f%) 4720ENDPROC 4740DEF PROCdomenu(handle%,menu$,menutitle$) 4750menuhandle%=handle% 4760menuptr%=buffer%:indirect%=idata% 4770i%=0 4780menuptr%!20=44 4790$menuptr%=menutitle$ 4800menuptr%?12=7:menuptr%?13=2:menuptr%?14=7:menuptr%?15=0 4810menuptr%!16=200:menuptr%!24=0 4820menuptr%+=28 4830REPEAT i1%=i%+1:i%=INSTR(menu$+",",",",i1%) 4840item$=MID$(menu$,i1%,i%-i1%):PROCmenuitem(item$):UNTIL item$="" 4850menuptr%!-24=(menuptr%!-24)OR&80 4860IFhandle%=101 SYS CrMenu,,buffer%,mousex%-64,96+8*44 ELSESYS CrMenu,,buffer%,mousex%-32,mousey%+16 4870ENDPROC 4890DEF PROCmenuitem(text$) 4900IF text$="" ENDPROC 4910flg%=0:submenu%=-1:I%=INSTR(text$,":"):IFI%THEN 4920flg%=EVALMID$(text$,I%+1):text$=LEFT$(text$,I%-1) 4930ENDIF 4940I%=INSTR(text$,">"):IFI%THEN 4950submenu%=EVALMID$(text$,I%+1):text$=LEFT$(text$,I%-1) 4960ENDIF 4970menuptr%!0=flg% 4980menuptr%!4=submenu% 4990IFtext$=m$(9)ANDF$="" menuptr%!8=&07400021 ELSEmenuptr%!8=&07000021 5000IFLENtext$*16+8>buffer%!16 buffer%!16=LENtext$*16+8 5010IFLENtext$>12 THEN 5020menuptr%!8=menuptr%!8 OR 256:menuptr%!16=LENtext$ 5030menuptr%!12=indirect%:$indirect%=text$:indirect%+=LENtext$+1 5040ELSE 5050$(menuptr%+12)=text$ 5060ENDIF 5070menuptr%+=24 5080ENDPROC 5100DEF PROCmenuselect(menus%) 5110SYS GetP,,paltemp%:adjust%=paltemp%!8 AND 1 5120SYS DcMenu,,buffer%,menus%,STRING$(200," ")TO,,,a$ 5130IF a$="" THENENDPROC 5140CASE menuhandle% OF 5150WHEN pic% 5160CASE a$ OF 5170WHEN m$(9):PROCcallFSI 5180ENDCASE 5190WHEN 101 5200CASE a$ OF 5210WHEN m$(14):fast%=NOTfast% 5220WHEN m$(9):PROCcallFSI 5230WHEN m$(15) 5240statescale%=0:FORI%=0TO9:statescale%+=FNgeticonstate(scalew%,I%)<<I%:NEXT 5250FORI%=10TO13:statescale%+=FNgeticonstate(scalew%,I%+6)<<I%:NEXT 5260stateproc%=0:FORI%=0TO7:stateproc%+=FNgeticonstate(proc%,I%)<<I%:NEXT 5270stateoutput%=0:FORI%=0TO15:stateoutput%+=FNgeticonstate(output%,I%)<<I%:NEXT 5280A%=OPENOUT"<ChangeFSI$Dir>.Choices" 5290PRINT#A%,fast%,statescale%,stateproc%,stateoutput% 5300PRINT#A%,$p%(0),FNlocale_convert($p%(1),decimal_point$,"."),$p%(2),$admode%,$adspcl% 5310PRINT#A%,$s%(0),$s%(1),$s%(2),$s%(3) 5320CLOSE#A% 5330WHEN m$(16):PROCcheckandfinish 5340ENDCASE 5350ENDCASE 5360IFadjust% PROCcheckmouse(0,0,2,rmenuhandle%,0,0) 5370ENDPROC 5390DEF FNcreate_window(x,y,title$) 5400x=x*VAL$z%(0)DIVVAL$z%(1):y=y*VAL$z%(0)DIVVAL$z%(1) 5410!z%=0:z%!4=-y:z%!8=x:z%!12=0 5420z%!40=0:z%!44=-y:z%!48=x:z%!52=0 5430IFx<128 OR y<128 z%?35=0 ELSEz%?35=255 5440$adtitle%="":SYS CreateW,,z% TO handle% 5450$adtitle%=title$ 5460=handle% 5480DEF PROCpopup(handle%,f%) 5490SYS "OS_ReadModeVariable",-1,4 TO ,,modexshift% 5500SYS "OS_ReadModeVariable",-1,5 TO ,,modeyshift% 5510SYS "OS_ReadModeVariable",-1,11 TO ,,rightscr% 5520SYS "OS_ReadModeVariable",-1,12 TO ,,topscr% 5530rightscr%=rightscr%<<modexshift%:topscr%=topscr%<<modeyshift% 5540PROCgetw(handle%) 5550xo%=rightscr%/2-(x0%+x1%)/2:yo%=topscr%/2-(y0%+y1%)/2 5560PROCopen_window(handle%,x0%+xo%,y0%+yo%,x1%+xo%,y1%+yo%,scx%,scy%,f%) 5570ENDPROC 5590DEF PROCopen_window(handle%,x0%,y0%,x1%,y1%,scx%,scy%,bhandle%) 5600IFhandle%=-1THENENDPROC 5610q%!0=handle%:q%!28=bhandle% 5620q%!4=x0%:q%!8=y0%:q%!12=x1%:q%!16=y1% 5630q%!20=scx%:q%!24=scy% 5640SYS OpenW,,q% 5650ENDPROC 5670DEF PROCgetw(handle%) 5680!q%=handle%:SYS GetW,,q% 5690PROCinfo(q%+4):bhandle%=q%!28:flags%=q%!32 5700ENDPROC 5720DEF PROCinfo(q%) 5730x0%=!q%:y0%=q%!4:x1%=q%!8:y1%=q%!12:scx%=q%!16:scy%=q%!20 5740bx%=x0%-scx%:by%=y1%-scy% 5750ENDPROC 5770DEF PROCredraw_window(handle%) 5780IF handle%=pic% THEN 5790!factors%=!ifactors%*VAL$z%(0):factors%!4=ifactors%!4*VAL$z%(0) 5800factors%!8=ifactors%!8*VAL$z%(1):factors%!12=ifactors%!12*VAL$z%(1) 5810PROCreduce(!factors%,factors%!8):PROCreduce(factors%!4,factors%!12) 5820!q%=handle% 5830SYS RedrawW,,q% TO more% 5840PROCinfo(q%+4):by%=by%-INT(y*VAL$z%(0)DIVVAL$z%(1)) 5850WHILE more% 5860SYS spop%,&134,sar%,n$,bx%,by%,,factors%,spx% 5870SYS GetR%,0,q% TO more% 5880ENDWHILE 5890ENDIF 5900ENDPROC 5920DEF FNgeticonstate(handle%,icon%) 5930!q%=handle%:q%!4=icon%:SYS GetI,,q% 5940=q%!24>>21 AND 1 5960DEF PROCgetmodeinfo 5970SYS"XWimp_ReadPixTrans",&100,sar%,n$,,,,ifactors%,pixtrans% 5980SYS spop%,&118,sar%,n$ TO ,,sptr% 5990IF sptr%!32=44 THEN 6000palptr%=0 6010ELSE 6020FOR grab%=0 TO 2048-8 STEP 8 6030paltemp%!(grab%>>1)=sptr%!(grab%+44) 6040NEXT 6050palptr%=paltemp% 6060ENDIF 6070FORQ%=0TO255:pixtrans%?Q%=Q%:NEXT 6080IFsptr%!32=44+2048 THEN 6090FORQ%=0TO255:SYSctran%,palptr%!(Q%<<2)TOpixtrans%?Q%:NEXT 6100ELSE 6110SYS "ColourTrans_SelectTable",m,palptr%,-1,-1,pixtrans% 6120ENDIF 6130spx%=-1:FORQ%=0TO255:IFpixtrans%?Q%<>Q% spx%=pixtrans% 6140NEXT 6150ENDPROC 6170DEF FNdeducemode 6180LOCAL m,x,y 6190IFFNgeticonstate(output%,15) THEN 6200SYS&35,-1,9 TO,,m:IFm>3 THEN 6210SYS&35,-1,4 TO,,x:SYS&35,-1,5 TO,,y 6220x=180/(2^x):y=180/(2^y) 6230="S"+STR$(2^m)+","+STR$x+","+STR$y 6240ELSE 6250=STR$MODE 6260ENDIF 6270ELSE 6280=$admode% 6290ENDIF 6300=0 6320DEF PROCshowscaletofit 6330LOCAL m,x,y 6340$admode%=FNdeducemode 6350IF?admode%=ASC"S" THEN 6360IFVALMID$($admode%,5)>VALMID$($admode%,8) x=6 ELSEx=0 6370IFVALMID$($admode%,2)>16 x+=5 ELSEx+=4 6380SYS&35,-1,11 TO,,tofitx:SYS&35,-1,12 TO,,tofity 6390ELSE 6400m=VAL$admode% 6410SYS&35,m,11 TO,,tofitx:SYS&35,m,12 TO,,tofity 6420SYS&35,m,4 TO,,x:SYS&35,m,5 TO,,y:IFy>x x=6 ELSEx=0 6430SYS&35,m,9 TO,,y:x+=y 6440ENDIF 6450tofitx+=1:tofity+=1:$adscale%=m$(17)+STR$tofitx+m$(18)+STR$tofity 6460q%!12=1<<21:!q%=output%:FORI%=0TO11:IFI%=x q%!8=1<<21 ELSEq%!8=0 6470q%!4=I%:SYS SetI,,q%:NEXT 6480ENDPROC 6500DEF PROCkillcurrent(m$) 6510q%!12=1<<21:!q%=output%:q%!8=0 6520q%!4=17:SYS SetI,,q% 6530$admode%=m$ 6540ENDPROC 6560DEFFNZS(I%)LOCALA$:REPEATA$+=CHR$?I%:I%+=1:UNTIL?I%<14:=A$ 6580DEF PROCerrorbox 6590SYS Drag,,-1 6600!buffer%=ERR:$(buffer%+4)=REPORT$+" (code "+STR$ERL+")"+CHR$0 6610SYS "Wimp_ReportError",buffer%,%11,m$(20) TO ,A% 6620IFA%=2 PROCremovearea:SYS "Wimp_CloseDown":END 6630ENDPROC 6860DEF FNChangeFSI(A$,spritearea%,workspace%,worklimit%,oksave%,okinfo%,RETURN ram%,fast%) 6870LOCAL A$(),r%(),g%(),b%(),rpal%(),gpal%(),bpal%(),table%(),cl%(),xl%(),xl2%() 6880LOCAL xp%(),rm%(),rm1%(),rm2%(),vals%(),nl%(),A%(),B%(),new%(),st%() 6890WHILELEFT$(A$,1)<>" "ANDLENA$<>0 A$=MID$(A$,2):ENDWHILE 6900WHILELEFT$(A$,1)=" " A$=MID$(A$,2):ENDWHILE 6910WHILERIGHT$(A$,1)=" " A$=LEFT$(A$):ENDWHILE 6920IFFNuc(LEFT$(A$,5))="-QUIT" THEN 6930A$=MID$(A$,7):WHILELEFT$(A$,1)<>" "ANDLENA$<>0 A$=MID$(A$,2):ENDWHILE 6940WHILELEFT$(A$,1)=" " A$=MID$(A$,2):ENDWHILE 6950ENDIF 6960DIM A$(100):ARG%=0:B%=INSTR(A$," ") 6970WHILE B%<>0 6980ARG%+=1:A$(ARG%)=LEFT$(A$,B%-1):A$=MID$(A$,B%+1) 6990WHILE LEFT$(A$,1)=" ":A$=MID$(A$,2):ENDWHILE 7000B%=INSTR(A$," ") 7010ENDWHILE 7020IFA$<>"" ARG%+=1:A$(ARG%)=A$ 7030invert%=FALSE:range%=FALSE:sharpen%=FALSE:info%=FALSE:cache%=FALSE:cacheareanumber%=0:dither%=TRUE:black%=FALSE 7040hist%=FALSE:equal%=FALSE:vflip%=FALSE:hflip%=FALSE:scale%=TRUE:scaleo%=TRUE:scrapf%=FALSE 7050gamma=1:rotate%=FALSE:max%=20000000:bright%=15:lock%=FALSE 7060rwt=.299:gwt=.587:bwt=.114 7070IFARG%<3 THEN 7080PRINT"ChangeFSI interactive input (read FSIinfo for command line details)" 7090INPUT"Source file: "s$,"Destination file: "f$,"Output mode: "m$ 7100INPUT"(X)Scale (e.g. 2:1): "xs$:INPUT"Y Scale: "ys$ 7110INPUT"Info on input picture?"a$:IFFNuc(LEFT$(a$,1))="Y" info%=TRUE 7120INPUT"Invert picture colours?"a$:IFFNuc(LEFT$(a$,1))="Y" invert%=TRUE 7130INPUT"Compute histogram of input?"a$:IFFNuc(LEFT$(a$,1))="Y" hist%=TRUE 7140INPUT"Apply histogram equalisation?"a$:IFFNuc(LEFT$(a$,1))="Y" equal%=TRUE 7150INPUT"Expand input dynamic range?"a$:IFFNuc(LEFT$(a$,1))="Y" range%=TRUE:equal%=FALSE 7160INPUT"Sharpen picture by (e.g. 12 for harsh, 24 for soft) "a$ 7170IFa$<>"" sharpen%=VALa$ 7180INPUT"Rotate?"a$:IFFNuc(LEFT$(a$,1))="Y" rotate%=1 7190scale%=FALSE:scaleo%=FALSE:fast%=FALSE 7200ELSE 7210REPEAT A%=ARG% 7220IFFNuc(A$(ARG%))="-INFO" info%=TRUE:A$(ARG%)="":ARG%-=1 7230IFFNuc(A$(ARG%))="-HIST" hist%=TRUE:A$(ARG%)="":ARG%-=1 7240IFFNuc(A$(ARG%))="-LOCK" lock%=TRUE:A$(ARG%)="":ARG%-=1 7250IFFNuc(A$(ARG%))="-EQUAL" equal%=TRUE:range%=FALSE:A$(ARG%)="":ARG%-=1 7260IFFNuc(A$(ARG%))="-RANGE" range%=TRUE:equal%=FALSE:A$(ARG%)="":ARG%-=1 7270IFFNuc(A$(ARG%))="-INVERT" invert%=TRUE:A$(ARG%)="":ARG%-=1 7280IFFNuc(A$(ARG%))="-NOSCALE" scale%=FALSE:scaleo%=FALSE:A$(ARG%)="":ARG%-=1 7290IFFNuc(A$(ARG%))="-NOSIZE" scale%=FALSE:A$(ARG%)="":ARG%-=1 7300IFFNuc(A$(ARG%))="-NODITHER" dither%=FALSE:A$(ARG%)="":ARG%-=1 7310IFFNuc(A$(ARG%))="-BRIGHTEN" bright%=16:A$(ARG%)="":ARG%-=1 7320IFFNuc(A$(ARG%))="-ROTATE" rotate%=1:A$(ARG%)="":ARG%-=1 7330IFFNuc(A$(ARG%))="-ROTATE-" rotate%=-1:A$(ARG%)="":ARG%-=1 7340IFFNuc(A$(ARG%))="-VFLIP" vflip%=TRUE:A$(ARG%)="":ARG%-=1 7350IFFNuc(A$(ARG%))="-HFLIP" hflip%=TRUE:A$(ARG%)="":ARG%-=1 7360IFFNuc(A$(ARG%))="-NOMODE" fast%=FALSE:A$(ARG%)="":ARG%-=1 7370IFFNuc(LEFT$(A$(ARG%),6))="-BLACK" THEN 7380black%=32:IFLENA$(ARG%)>6 black%=VALMID$(A$(ARG%),7):IFblack%>128 black%=128 7390A$(ARG%)="":ARG%-=1 7400ENDIF 7410IFFNuc(LEFT$(A$(ARG%),6))="-GAMMA" THEN 7420gamma=2.2:IFLENA$(ARG%)>6 gamma=VALMID$(A$(ARG%),7) 7430A$(ARG%)="":ARG%-=1 7440ENDIF 7450IFFNuc(LEFT$(A$(ARG%),8))="-SHARPEN" THEN 7460sharpen%=TRUE:IFLENA$(ARG%)>8 sharpen%=VALMID$(A$(ARG%),9) 7470A$(ARG%)="":ARG%-=1 7480ENDIF 7490IFFNuc(LEFT$(A$(ARG%),4))="-RED" rwt=VALMID$(A$(ARG%),5):A$(ARG%)="":ARG%-=1 7500IFFNuc(LEFT$(A$(ARG%),6))="-GREEN" gwt=VALMID$(A$(ARG%),7):A$(ARG%)="":ARG%-=1 7510IFFNuc(LEFT$(A$(ARG%),5))="-BLUE" bwt=VALMID$(A$(ARG%),6):A$(ARG%)="":ARG%-=1 7520IFFNuc(LEFT$(A$(ARG%),4))="-MAX" THEN 7530max%=VALMID$(A$(ARG%),5):IFINSTR(A$(ARG%),"K")ORINSTR(A$(ARG%),"k") max%=max%*1024 7540A$(ARG%)="":ARG%-=1 7550ENDIF 7560UNTILA%=ARG% 7570s$=A$(1):f$=A$(2):m$=A$(3):xs$=A$(4):ys$=A$(5) 7580ENDIF 7590IFokinfo% ELSEinfo%=FALSE 7600IFworkspace%>=0 THEN 7610flex%=FALSE 7620ELSE 7630IFworklimit%=0 THENflex%=FALSE ELSEflex%=TRUE:nextlocation%=worklimit% 7640ENDIF 7650pnm$=FNuc(m$):CASE LEFT$(pnm$+",",3) OF 7660WHEN"AIM":m=-1:m$="" 7670WHEN"P1,","P4,":m=-2:m$="":spm=18 7680WHEN"P2,","P5,":m=-2:m$="T":spm=20 7690WHEN"P3,","P6,":m=-4:pnm$=LEFT$(pnm$,2):p6bits=8:I%=VALMID$(m$,4):m$="" 7700IFI%>0IFI%<8 p6bits=I% 7710WHEN"P15":m=-3:m$="" 7720WHEN"C15":m=-5:m$="" 7730WHEN"IRL":m=-4:m$="":p6bits=8 7740WHEN"S16":m=-6:m$="" 7750WHEN"S24":m=-7:m$="":p6bits=8 7760WHEN"S32":m=-8:m$="":p6bits=8 7770OTHERWISE:m=VALm$:spm=m:m$=FNuc(RIGHT$(m$,1)):IFINSTR("CDRT",m$)=0 m$="" 7780ENDCASE 7790IFxs$="" OR LEFT$(xs$,1)="-" THEN 7800xmul%=1:xdiv%=1:ymul%=1:ydiv%=1 7810ELSE 7820IFys$="" ys$=xs$ 7830xmul%=VALxs$:xdiv%=VALMID$(xs$,INSTR(xs$,":")+1) 7840ymul%=VALys$:ydiv%=VALMID$(ys$,INSTR(ys$,":")+1) 7850ENDIF 7860flag=-1:SYS8,5,s$ TO r0,,r2:dir=r0=2 7870IFdir THEN 7880panic=TRUE:SYS8,5,s$+".raw" TO r0,,r2:IFr0=1 s$+=".raw":dir=FALSE:panic=FALSE 7890IFpanic SYS8,5,s$+".red" TO r0,,r2:IFr0=1 panic=FALSE 7900IFpanic ERROR 42,"Directory given" 7910ENDIF 7920ftype=r2>>8 AND &FFF:bits=28:F=2^bits:c%=0:cc%=0:ccc%=0:o%=0 7930IFdir THEN 7940c%=OPENIN(s$+".red"):IFc%=0 ERROR 42,"Red file "+s$+".red not found" 7950cc%=OPENIN(s$+".green"):IFcc%=0 ERROR42,"Green file "+s$+".green not found" 7960ccc%=OPENIN(s$+".blue"):IFccc%=0 ERROR42,"Blue file "+s$+".blue not found" 7970ELSE 7980c%=OPENINs$:IFc%=0 ERROR 42,"File "+s$+" not found" 7990ENDIF 8000LOCAL ERROR 8010ON ERROR LOCAL RESTORE ERROR:PROCclose:ERROR ERR,REPORT$ 8020DIM r%(255) 8030DIM g%(255),b%(255) 8040SYS&66f4d TO;pcd% 8050CASE ftype OF 8060WHEN &FF9:flag=0 8070IFINSTR("."+FNuc(s$),".HIP.")ORINSTR(FNuc(s$),":HIP.") THEN 8080flag=300:I%=INSTR(FNuc(s$),"HIP.") 8090MID$(s$,I%)="LOP.":cc%=OPENINs$:IFcc%=0 ERROR42,"Can't find Lop file "+s$ 8100ENDIF 8110WHEN &FF0:PTR#c%=0:S$="":FORI%=1TO4:S$+=CHR$BGET#c%:NEXT 8120IFS$="II*"+CHR$0 flag=1500:bigendian=FALSE 8130IFS$="MM"+CHR$0+"*" flag=1500:bigendian=TRUE 8140WHEN &DFA:flag=800:IFdir flag=801 8150WHEN &DE2:flag=1000 8160WHEN &BE8:IF(pcd%AND1)=0 flag=3600 8170WHEN &7A0:flag=1200 8180WHEN &69d:flag=2000 8190WHEN &699:flag=700 8200WHEN &698:flag=100 8210WHEN &697:flag=1900 8220WHEN &691:flag=2600 8230WHEN &690:flag=2500 8240WHEN &666:flag=666 8250WHEN &601:flag=3000 8260WHEN &371:flag=3100 8270WHEN &300:flag=1300:IFdir flag=1301 8280WHEN 4:flag=900:IFdir flag=901 8290WHEN 6:flag=950 8300ENDCASE 8310IFflag=-1 THEN 8320PTR#c%=0:S$="":FORI%=1TO22:S$+=CHR$BGET#c%:NEXT 8330IFLEFT$(S$,7)="FSIfile" flag=2100 8340IFflag=-1 IFLEFT$(S$,8)="SIMPLE " flag=2800 8350IFflag=-1 IFFNuc(LEFT$(S$,8))="MERCSOFT"ORFNuc(LEFT$(S$,8))="SNAPSHOT"flag=902 8360IFflag=-1 IFFNuc(LEFT$(S$,8))="MERCSOF1" flag=903 8370IFflag=-1 IFFNuc(LEFT$(S$,13))="IRLAM YUV 411" flag=2250 8380IFflag=-1 IFLEFT$(S$,5)="Irlam" flag=2200 8390IFflag=-1 IFLEFT$(S$,2)="BM" flag=2400:riffoff%=0 8400IFflag=-1 IFLEFT$(S$,4)="RIFF" AND MID$(S$,9,8)="RDIBdata" AND MID$(S$,21,2)="BM" flag=2400:riffoff%=20 8410IFflag=-1 IFLEFT$(S$,4)="GIF8" flag=500 8420IFflag=-1 IFLEFT$(S$,5)="AV_VO" flag=600 8430IFflag=-1 IFLEFT$(S$,4)=CHR$&59+CHR$&A6+CHR$&6A+CHR$&95 flag=1100 8440IFflag=-1 IFLEFT$(S$,4)=CHR$0+CHR$1+CHR$0+CHR$8 flag=1400 8450IFflag=-1 IFLEFT$(S$,4)=CHR$0+CHR$1+CHR$0+CHR$1 flag=2900 8460IFflag=-1 IFLEFT$(S$,4)="RIX3" flag=2700 8470IFflag=-1 IFLEFT$(S$,4)="II*"+CHR$0 flag=1500:bigendian=FALSE 8480IFflag=-1 IFLEFT$(S$,4)="MM"+CHR$0+"*" flag=1500:bigendian=TRUE 8490IFflag=-1 IFLEFT$(S$,2)=CHR$&52+CHR$&CC flag=2300 8500IFflag=-1 IFLEFT$(S$,2)="P4"ORLEFT$(S$,2)="P5"ORLEFT$(S$,2)="P6" flag=3300:info$="" 8510IFflag=-1 IFLEFT$(S$,3)="P15" flag=3400 8520IFflag=-1 IFLEFT$(S$,3)="PIC" flag=3500 8530IFflag=-1 IFFNuc(LEFT$(S$,3))="P13" flag=3450 8540IFflag=-1 IFLEFT$(S$,4)="FORM" IFMID$(S$,9,4)="ILBM" flag=1600 8550IFflag=-1 THEN 8560IFMID$(S$,7,4)="JFIF" OR ftype=&C85 THEN 8570jpegblk%=FNdim(20):PROCcachesize(jpegblk%) 8580IFcache%<EXT#c% THEN 8590CLOSE#c%:X%=OPENIN"Run:djpeg" 8600IFX% THEN 8610CLOSE#X%:SYS"Wimp_StartTask","djpeg "+s$+" <Wimp$Scrap>" 8620ELSE 8630SYS"XOS_CLI","djpeg "+s$+" <Wimp$Scrap>" TO ;V 8640IFV AND1 THEN 8650SYS"Wimp_StartTask","<ChangeFSI$Dir>.djpeg "+s$+" <Wimp$Scrap>" 8660ENDIF 8670ENDIF 8680c%=OPENIN"<Wimp$Scrap>":IFc%=0 THEN=100 8690scrapf%=TRUE:flag=3300:info$="JPEG (JFIF) file converted to " 8700ELSE 8710flag=3700 8720ENDIF 8730ENDIF 8740ENDIF 8750IFflag=-1 THEN 8760PTR#c%=&10:S$="":FORI%=1TO9:S$+=CHR$BGET#c%:NEXT 8770IFS$="MILLIPEDE" flag=200 8780ENDIF 8790IFflag=-1 THEN 8800PTR#c%=&41:S$="":FORI%=1TO8:S$+=CHR$BGET#c%:NEXT 8810IFLEFT$(S$,4)="PNTG" flag=1800:st%=&280 8820ENDIF 8830IFflag=-1 THEN 8840PTR#c%=196:S$="":FORI%=1TO8:S$+=CHR$BGET#c%:NEXT 8850IFLEFT$(S$,4)="PNTG" flag=1800:st%=&2e2 8860ENDIF 8870IFflag=-1 THEN 8880PTR#c%=522:S$="":FORI%=1TO8:S$+=CHR$BGET#c%:NEXT 8890IFS$=CHR$0+CHR$&11+CHR$2+CHR$&ff+CHR$&c+CHR$0+CHR$&ff+CHR$&fe flag=1850 8900ENDIF 8910IFflag=-1 THEN 8920PTR#c%=0:IFBGET#c%=10 THEN 8930C%=BGET#c%:IFC%<6 AND C%<>1 ANDBGET#c%=1 flag=1900 8940ENDIF 8950ENDIF 8960IFflag=-1 IFINSTR("."+FNuc(s$),".PCX.")ORINSTR(FNuc(s$),":PCX.")ORRIGHT$(s$,4)="/PCX" flag=1900 8970IFflag=-1 IFINSTR("."+FNuc(s$),".IMAGE.")ORINSTR(FNuc(s$),":IMAGE.") flag=400 8980IFflag=-1 IFFNuc(RIGHT$(s$,4))=".RAW" flag=100 8990IFflag=-1 IFFNuc(RIGHT$(s$,3))="TGA" flag=2000 9000IFflag=-1 IFFNuc(RIGHT$(s$,3))="VDA" flag=2000 9010IFflag=-1 IFINSTR("."+FNuc(s$),".PIC.")ORINSTR(FNuc(s$),":PIC.") flag=700 9020IFflag=-1 IFINSTR("."+FNuc(s$),".IMG.")ORINSTR(FNuc(s$),":IMG.")ORRIGHT$(s$,4)="/IMG" flag=1400 9030IFflag=-1 IFINSTR("."+FNuc(s$),".DSP.")ORINSTR(FNuc(s$),":DSP.")ORRIGHT$(s$,4)="/DSP" flag=1700 9040IFflag=-1 IFFNuc(RIGHT$(s$,4))="/RGB" flag=3200 9050IFflag=-1 AND(FNuc(RIGHT$(s$,4))="/PCD"ORftype=&be8)AND((pcd%AND1)=1) THEN 9060CLOSE#c%:SYS"Wimp_StartTask","<ChangeFSI$Dir>.hpcdtoppm -3 -a "+s$+" <Wimp$Scrap> { > <ChangeFSI$Dir>.pcdtemp }" 9070c%=OPENIN"<Wimp$Scrap>":scrapf%=TRUE:flag=3300:info$="PhotoCD file converted to " 9080ENDIF 9090ENDIF 9100IFflag=-1 PROCclose:ERROR 42,"Sorry: format not recognised - please try again or contact your supplier" 9110step24=1:input=8:ham=0:planar%=0:bigendianbits=FALSE:r$="FN"+STR$flag 9120compression=0:hpredict%=1:striprows%=-1:cachebytes%=FALSE 9130IFxdiv%=0 AND ydiv%=0 scale%=FALSE 9140CASE flag OF 9150WHEN 0 9160quant%=4:PTR#c%=4:F%=FNW+&1C:PTR#c%=F%:st%=FNW+F%-&20:K%=FNW+F%-&20 9170sm=FNW:IFsm<256 THEN 9180SYS53,sm,3 TO ,,I% 9190CASE I% OF 9200WHEN 1:IFst%=F%+12 PROCdefpal2 ELSEPROCipal(2) 9210PTR#c%=F%-16:sx%=(FNW+1)*32:rowbytes%=sx%>>3:input=1 9220sy%=FNW+1:I%=FNW:sx%-=31-FNW 9230WHEN 3:IFst%=F%+12 PROCdefpal4 ELSEPROCipal(4) 9240PTR#c%=F%-16:sx%=(FNW+1)*16:rowbytes%=sx%>>2:input=2 9250sy%=FNW+1:I%=FNW:sx%-=(31-FNW)DIV2 9260WHEN 15:IFst%=F%+12 PROCdefpal16 ELSEPROCipal(16) 9270PTR#c%=F%-16:sx%=(FNW+1)*8:rowbytes%=sx%>>1:input=4 9280sy%=FNW+1:I%=FNW:sx%-=(31-FNW)DIV4 9290WHEN 63,255:IFst%=F%+12 THEN 9300PROCdefpal 9310ELSE 9320IFK%>st% K%=st% 9330IFK%-12-F%=2048 ORI%=255 THEN 9340PTR#c%=&38 9350FORC%=0TO255:D%=BGET#c% 9360r%(C%)=BGET#c%/255*F:g%(C%)=BGET#c%/255*F:b%(C%)=BGET#c%/255*F 9370D%=FNW:NEXT 9380ELSE 9390PROCipal63 9400ENDIF 9410ENDIF 9420PTR#c%=F%-16:sx%=(FNW+1)*4:rowbytes%=sx%:sy%=FNW+1:I%=FNW:sx%-=(31-FNW)DIV8 9430OTHERWISE ERROR42,"Not understood RISC OS sprite" 9440ENDCASE 9450r$="FN8":SYS53,sm,4 TO ,,nx:SYS53,sm,5 TO ,,ny:nx=1<<nx:ny=1<<ny 9460IFscale% xmul%=xmul%*nx/2:ymul%=ymul%*ny/2 9470info$="RISC OS sprite, mode "+STR$sm+" "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 9480ELSE 9490bpp%=sm>>>27:CASEbpp% OF 9500WHEN 1:bpp%=1:r$="FN8":IFst%=F%+12 PROCdefpal2 ELSEPROCnewropal(2) 9510WHEN 2:bpp%=2:r$="FN8":IFst%=F%+12 PROCdefpal4 ELSEPROCnewropal(4) 9520WHEN 3:bpp%=4:r$="FN8":IFst%=F%+12 PROCdefpal16 ELSEPROCnewropal(16) 9530WHEN 4:bpp%=8:r$="FN8":IFst%=F%+12 PROCdefpal ELSEPROCnewropal(256) 9540WHEN 5:bpp%=16:r$="FN16":IFst%=F%+12 ELSE 9550DIM rpal%(255),gpal%(255):step24=2 9560FORC%=0TO255 9570gpal%(C%)=(C%>>5)<<8 OR (C%AND31) 9580rpal%(C%)=((C%>>2)AND31)<<16 OR (C%AND3)<<11 9590NEXT 9600FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 9610WHEN 6:bpp%=32:r$="FN24":IFst%=F%+12 PROCnopal ELSE 9620rbo%=0:gbo%=1:bbo%=2:step24=4 9630WHEN 8:bpp%=24:r$="FN24":IFst%=F%+12 PROCnopal ELSE 9640rbo%=0:gbo%=1:bbo%=2 9650OTHERWISE ERROR42,"Not understood new format RISC OS sprite bpp" 9660ENDCASE 9670nx=(sm>>1) AND&1fff:ny=(sm>>14) AND&1fff 9680IFscale% xdiv%=xdiv%*nx:ydiv%=ydiv%*ny:xmul%=xmul%*90:ymul%=ymul%*90 9690PTR#c%=F%-16:rowbytes%=(FNW+1)*4:sy%=FNW+1:I%=FNW:sx%=(rowbytes%*8-(31-FNW))/bpp%:input=bpp% 9700info$="New RISC OS sprite, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 9710IFbpp%=32 input=24 9720ENDIF 9730PTR#c%=st%:cache%=TRUE 9740WHEN 100 9750quant%=8:PTR#c%=0:sx%=FNHW:sy%=FNHW:PROCnopal:input=24:rowbytes%=sx%*3+2 9760rbo%=2:gbo%=2+sx%:bbo%=2+2*sx%:r$="FN24":cache%=TRUE 9770info$="QRT .raw image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 9780WHEN 200 9790quant%=8:PTR#c%=5:sx%=FNHW:sy%=FNHW:sx%=(FNHW-sx%+2)/2:sy%=(FNHW-sy%+2)/2 9800PTR#c%=&1a:cadsoft%=BGET#c%:PTR#c%=&200 9810FORC%=0TO255:r%(C%)=BGET#c%/255*F:NEXT 9820FORC%=0TO255:g%(C%)=BGET#c%/255*F:NEXT 9830FORC%=0TO255:b%(C%)=BGET#c%/255*F:NEXT 9840PTR#c%=&600:st%=&600:cache%=TRUE:IFcadsoft%=2 THEN 9850rep%=0:r$="FN1100":plbuff%=FNdim(sx%):plbytes%=sx%:cachebytes%=TRUE 9860ELSE 9870r$="FN8":rowbytes%=sx% 9880ENDIF 9890info$="Cadsoft type "+STR$cadsoft%+" image, "+STR$sx%+" by "+STR$sy%+" pixels, 8 bits per pixel" 9900WHEN 300 9910quant%=5:PTR#c%=&2c:st%=FNW+(&38-&2c):PTR#cc%=&2c:stcc%=FNW1(cc%)+(&38-&2c) 9920PTR#c%=&1c:sx%=(FNW+1)*4:sy%=FNW+1:PTR#c%=st%:PTR#cc%=stcc% 9930DIM rpal%(255),gpal%(255):input=16:cache%=TRUE:rowbytes%=sx% 9940FORC%=0TO255 9950rpal%(C%)=C%AND7 OR (C%AND64)<<2 OR (C%AND&38)<<13 9960gpal%(C%)=(C%AND4)<<1ORC%AND16 OR ((C%AND3)<<1OR(C%AND&60)>>2)<<8 OR (C%AND8OR(C%AND128)>>3)<<16 9970NEXT 9980FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 9990pbuff%=FNdim(sx%):IFscale% ymul%=ymul%*2 10000info$="ArVis image, "+STR$sx%+" by "+STR$sy%+" pixels, 15 bits per pixel" 10010WHEN 400 10020quant%=8:PTR#c%=0:sx%=FNbeHW:sy%=FNbeHW:X%=FNbeHW:st%=PTR#c%+X%:PTR#c%=st% 10030plbuff%=FNdim(sx%*3):plbytes%=sx%*3:rb%=plbuff%:gb%=plbuff%+1:bb%=plbuff%+2:rbo%=-1 10040PROCnopal:input=24:rep%=0:cachebytes%=TRUE:cache%=TRUE:step24=3 10050info$="RT image. run length encoded image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 10060WHEN 500 10070compression=5:PTR#c%=6:GIFsx=FNHW:GIFsy=FNHW 10080GIF=BGET#c%:GIFback=BGET#c%:GIFext=BGET#c%:quant%=(GIF AND 7)+1 10090IFGIF AND &80 THEN 10100FORC%=0TO(1<<quant%)-1 10110r%(C%)=BGET#c%/255*F:g%(C%)=BGET#c%/255*F:b%(C%)=BGET#c%/255*F 10120NEXT 10130ENDIF 10140I%=BGET#c%:IFI%<>ASC"," ERROR 42,"GIF file without , in right place" 10150GIFleft=FNHW:GIFright=FNHW:sx%=FNHW:sy%=FNHW 10160IFGIFsx<sx% OR GIFsy<sy% THEN 10170IFinfo% THEN 10180PRINT"GIF file with bigger image inside:" 10190PRINT"Screen ";GIFsx"x by "GIFsy"y; image "sx%"x by "sy%"y" 10200INPUT"Continue with monitor's size [Y or y]?"A$ 10210IFA$="Y"ORA$="y" sx%=GIFsx:sy%=GIFsy 10220PRINT"Continuing with ";sx%"x by "sy%"y" 10230ENDIF 10240ENDIF 10250GIF=BGET#c%:IFGIF AND &40 flag=501:r$="FN8" 10260setcodes%=BGET#c%:clearcode%=1<<setcodes%:st%=PTR#c%:cache%=TRUE:cachebytes%=TRUE 10270DIM table%(1<<12):stk%=FNdim(1<<13):buf%=FNdim(280):plbuff%=FNdim(sx%) 10280FORI%=0TOclearcode%-1:table%(I%)=I%:NEXT 10290info$="GIF file, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(quant%) 10300WHEN 600 10310quant%=8:PTR#c%=&5c:FORC%=0TO255 10320r%(C%)=BGET#c%/255*F:g%(C%)=BGET#c%/255*F:b%(C%)=BGET#c%/255*F 10330NEXT 10340PTR#c%=&36e:sy%=FNHW:sx%=FNHW 10350st%=&380:PTR#c%=st%:rowbytes%=sx%:r$="FN8":cache%=TRUE 10360info$=".PIC image, "+STR$sx%+" by "+STR$sy%+" pixels, 8 bits per pixel" 10370WHEN 700 10380quant%=8:PTR#c%=0:a$=GET$#c%:st%=PTR#c% 10390sx%=VALa$:sy%=VAL(MID$(a$,INSTR(a$," "))) 10400PROCnopal:input=24:step24=3:rowbytes%=sx%*3:r$="FN24" 10410rbo%=0:gbo%=1:bbo%=2:cache%=TRUE 10420info$="MTV .pic image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 10430WHEN 800 10440sx%=512:sy%=256:IFscale% ymul%=ymul%*2 10450plbuff%=FNdim(sx%):rep%=0:wt%=0:wtsx%=plbuff%+sx% 10460cache%=TRUE:cachebytes%=TRUE 10470FORC%=0TO255:r%(C%)=(C%AND63)/63*F:NEXT:g%()=r%():b%()=r%():quant%=6 10480info$="Watford digitiser picture, 512 by 256 pixels, 6 bits per pixel" 10490WHEN 801 10500sx%=512:sy%=256:input=24:quant%=6:IFscale% ymul%=ymul%*2 10510rep1%=0:wt1%=0:rep2%=0:wt2%=0:rep3%=0:wt3%=0 10520buff%=FNdim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+2*sx% 10530wtsx1%=buff%+sx%:wtsx2%=buff%+2*sx%:wtsx3%=buff%+3*sx% 10540FORC%=0TO255:r%(C%)=(C%AND63)/63*F:NEXT:g%()=r%():b%()=r%() 10550info$="Triple Watford digitiser picture, 512 by 256 pixels, 18 bits per pixel" 10560WHEN 900 10570quant%=8:st%=0:PTR#c%=0:IFEXT#c%=65536 THEN 10580sx%=256:sy%=256:IFscale% ymul%=ymul%*2:xmul%=xmul%*2 10590ELSE 10600sx%=512:sy%=512 10610ENDIF 10620FORC%=0TO255:r%(C%)=C%/255*F:NEXT:g%()=r%():b%()=r%():rowbytes%=sx%:r$="FN8":cache%=TRUE 10630info$="AIM .raw image, 256 by 256 pixels, 8 bits per pixel" 10640WHEN 901 10650quant%=4:IFEXT#c%=65536 THEN 10660sx%=256:sy%=256:IFscale% ymul%=ymul%*2:xmul%=xmul%*2 10670ELSE 10680sx%=512:sy%=512 10690ENDIF 10700buff%=FNdim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+sx%*2 10710FORC%=0TO255:r%(C%)=C%/255*F:NEXT:g%()=r%():b%()=r%() 10720input=24:info$="Hawk V9 Triple image, 256 by 256 pixels, 24 bits per pixel" 10730WHEN 902 10740quant%=4:PTR#c%=8:sx%=FNW:rowbytes%=sx%*3/2:sy%=FNW:st%=20:PTR#c%=20 10750IFscale% ymul%=ymul%*2 10760plbuff%=FNdim(sx%*3):rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2:rbo%=-1 10770FORC%=0TO255:r%(C%)=(C%AND&F)/&F*F:NEXT:g%()=r%():b%()=r%():cache%=TRUE 10780input=24:info$="Hawk V9/Snapshot Colour image, "+STR$sx%+" by "+STR$sy%+" pixels, 12 bits per pixel" 10790WHEN 903 10800quant%=5:PTR#c%=8:sx%=FNW:rowbytes%=sx%*2:sy%=FNW:st%=20:PTR#c%=20:cache%=TRUE:r$="FN16":flag=700 10810DIM rpal%(255),gpal%(255):input=16:step24=2 10820FORC%=0TO255 10830gpal%(C%)=(C%>>5)<<8 OR (C%AND31) 10840rpal%(C%)=((C%>>2)AND31)<<16 OR (C%AND3)<<11 10850NEXT 10860FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 10870input=16:info$="Hawk V9 mk II Colour image, "+STR$sx%+" by "+STR$sy%+" pixels, 16 bits per pixel" 10880WHEN 950 10890quant%=8:PTR#c%=0:sx%=512:rowbytes%=512:sy%=512:st%=0:flag=900 10900FORC%=0TO255:r%(C%)=C%/255*F:NEXT:g%()=r%():b%()=r%():r$="FN8":cache%=TRUE 10910info$="Wild Vision V12 image, 512 by 512 pixels, 8 bits per pixel" 10920WHEN 1000 10930quant%=4:sx%=640:sy%=256:PROCdefpal:st%=FNW:r$="FN"+STR$(1000+FNW):IFscale% ymul%=ymul%*2 10950buff%=FNdim(sx%):ctable%=FNdim(st%) 10960SYS12,4,c%,ctable%,st%:st%=PTR#c% 10970pa%=ctable%:rep%=0:rep2%=0:pasx%=buff%+sx% 10980info$="ProArtisan image, 640 by 256 pixels, 8 bits per pixel" 10990WHEN 1100 11000quant%=1:PTR#c%=4:sx%=FNbeW:sy%=FNbeW:input=FNbeW:bigendianbits=TRUE 11010S%=FNbeW:S%=FNbeW 11020cache%=TRUE:IFS%=2 cachebytes%=TRUE:info$="Byte Encoded " ELSEinfo$="":r$="FN8" 11030C%=FNbeW 11040D%=FNbeW 11050CASE C% OF 11060WHEN 1,2 11070FORI%=0TOD%/3-1:r%(I%)=BGET#c%/255*F:NEXT 11080FORI%=0TOD%/3-1:g%(I%)=BGET#c%/255*F:NEXT 11090FORI%=0TOD%/3-1:b%(I%)=BGET#c%/255*F:NEXT 11100OTHERWISE 11110CASE input OF 11120WHEN 1:r%(0)=F:g%(0)=F:b%(0)=F 11130WHEN 4,8:PROCnopal 11140WHEN 24:PROCnopal 11150ENDCASE 11160ENDCASE 11170CASE input OF 11180WHEN 1:rowbytes%=(sx%+15>>4)<<1 11190WHEN 4:rowbytes%=(sx%+3>>2)<<1 11200WHEN 8:rowbytes%=(sx%+1>>1)<<1 11210WHEN 24:rowbytes%=(3*sx%+1>>1)<<1:r$="FN24":rbo%=0:gbo%=1:bbo%=2:step24=3 11220IFS%=1 bbo%=0:rbo%=2 11230OTHERWISE:ERROR 42,"Can't do this Sun pixrect" 11240ENDCASE 11250st%=D%+&20:rep%=0:IFcachebytes% plbuff%=FNdim(rowbytes%):plbytes%=rowbytes% 11260info$+="Sun image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 11270WHEN 1200 11280quant%=8:sx%=800:sy%=800:st%=1600:PTR#c%=st%:vflip%=NOT vflip% 11290PROCnopal:r$="FN8":rowbytes%=sx%:cache%=TRUE 11300info$="TimeStep satellite image, 800 by 800 pixels, 8 bits per pixel" 11310WHEN 1300 11320quant%=8:sx%=128:sy%=256:st%=0:PTR#c%=0:IFscale% xmul%=xmul%*2 11330PROCnopal:r$="FN8":rowbytes%=sx%:cache%=TRUE 11340info$="satellite image, 128 by 256 pixels, 8 bits per pixel" 11350WHEN 1301 11360input=24:quant%=8:sx%=128:sy%=256:IFscale% xmul%=xmul%*2 11370buff%=FNdim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+2*sx%:PROCnopal:r$="FN901" 11380info$="Triple satellite image, 128 by 256 pixels, 24 bits per pixel" 11390WHEN 1400 11400planar%=TRUE:PTR#c%=0:Z%=FNHW:IFZ%>255 THEN 11410st%=FNbeHW*2:planes%=FNbeHW:patlen%=FNbeHW 11420pw%=FNbeHW:ph%=FNbeHW:sx%=FNbeHW:sy%=FNbeHW 11430ELSE 11440st%=FNHW*2:input=FNHW:patlen%=FNHW:pw%=FNHW:ph%=FNHW:sx%=FNHW:sy%=FNHW 11450ENDIF 11460IFscale% THEN 11470xmul%=xmul%*pw%:xdiv%=xdiv%*282 11480ymul%=ymul%*ph%:ydiv%=ydiv%*282 11490ENDIF 11500rowbytes%=sx%+7>>3:pbuff%=FNdim(sx%):plbytes%=rowbytes%*planes%:buff%=FNdim(plbytes%) 11510PTR#c%=st%:vrep%=0 11520FORC%=0TO(1<<planes%)-1:r%(C%)=F-C%/((1<<planes%)-1)*F:NEXT:g%()=r%():b%()=r%() 11530info$="IMG file, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(planes%) 11540WHEN 1500 11550PTR#c%=4:dir%=FNtiff(4):PTR#c%=dir% 11560rgb=FALSE:greyunit=100:planar%=1:fillorder=1:resunit=2 11570xnum%=90:xdenom%=1:ynum%=90:ydenom%=1 11580E%=FNtiff(3):FORZ%=1TOE% 11590T%=FNtiff(3):D%=FNtiff(3):C%=FNtiff(4) 11600IFC%>1 V%=FNtiff(4) ELSEIFD%=2 PTR#c%=dir%+2+Z%*12 ELSEIFD%<4 V%=FNtiff(D%):PTR#c%=dir%+2+Z%*12 ELSEV%=FNtiff(4) 11620CASE T% OF 11630WHEN 256:sx%=V% 11640WHEN 257:sy%=V% 11650WHEN 258:IFC%>1 THEN 11660IFD%*C%>6 THEN 11670PTR#c%=V%:quant%=FNtiff(D%) 11680input=quant%:FORI%=1TOC%-1:V%=FNtiff(D%) 11690IFV%<>quant% ERROR42,"Can't do RGB TIFF with different numbers of bits per pixel" 11700input+=V% 11710NEXT:PROCnopal 11720ELSE 11730quant%=V% AND &FF:input=quant% 11740FORI%=0TO(1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:NEXT 11750g%()=r%():b%()=r%() 11760ENDIF 11770PTR#c%=dir%+2+Z%*12 11780ELSE 11790quant%=V%:input=quant% 11800FORI%=0TO(1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:NEXT 11810g%()=r%():b%()=r%() 11820ENDIF 11830WHEN 259:compression=V% 11840WHEN 262:photometric=V%:IFV%=0 invert%=NOTinvert% 11850WHEN 266:fillorder=V% 11860WHEN 273:stc%=C%:stv%=V%:std%=D% 11870WHEN 277:sampperpix%=V%:input=quant%*V%:rgb=V%=3 11880WHEN 278:striprows%=V% 11890WHEN 279:stcbyte%=C%:stvbyte%=V%:stdbyte%=D% 11900WHEN 282:PTR#c%=V%:xnum%=FNtiff(4):xdenom%=FNtiff(4) 11910PTR#c%=dir%+2+Z%*12 11920WHEN 283:PTR#c%=V%:ynum%=FNtiff(4):ydenom%=FNtiff(4) 11930PTR#c%=dir%+2+Z%*12 11940WHEN 284:planar%=V%:IFplanar%=2 input=quant% 11950WHEN 290:greyunit=10^V% 11960WHEN 291:PTR#c%=V%:FORI%=0TOC%-1:r%(I%)=FNtiff(D%)/greyunit/2*F:NEXT 11970g%()=r%():b%()=r%() 11980PTR#c%=dir%+2+Z%*12 11990WHEN 296:resunit=V% 12000WHEN 317:hpredict%=V% 12010WHEN 320:PTR#c%=V%:FORI%=0TOC%/3-1:r%(I%)=FNtiff(3)/65535*F:NEXT 12020FORI%=0TOC%/3-1:g%(I%)=FNtiff(3)/65535*F:NEXT 12030FORI%=0TOC%/3-1:b%(I%)=FNtiff(3)/65535*F:NEXT 12040PTR#c%=dir%+2+Z%*12 12050OTHERWISE 12060IFinfo% PRINT"Ignoring tag ";T%" datatype "D%" count "C%" value/pointer "V% 12070ENDCASE 12080NEXT 12090DIM st%(stc%):IFstc%>1 THEN 12100PTR#c%=stv%:FORI%=0TOstc%-1:st%(I%)=FNtiff(std%):NEXT 12120ELSE 12130st%(0)=stv% 12140ENDIF 12150CASE compression OF 12160WHEN 0,1:info$="" 12170WHEN 2:info$="CCITT Group 3 compressed " 12180WHEN 5:info$="LZW compressed ":r$="FN1505" 12190IFhpredict%=2 THENinfo$+="horizontal differenced " ELSEIFhpredict%>2 info$+=" unknown predictor ("+STR$hpredict%+") " 12200setcodes%=8:clearcode%=1<<setcodes% 12210DIM table%(1<<12):stk%=FNdim(1<<13):buf%=FNdim(280) 12220FORI%=0TOclearcode%-1:table%(I%)=I%:NEXT 12230WHEN 32773:info$="PackBits compressed ":r$="FN1501" 12240WHEN 6:info$="JPEG compressed " 12250OTHERWISE info$="Compress "+STR$compression+" - unknown " 12260ENDCASE 12270info$+="TIFF file, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 12280bigendianbits=fillorder=1:PTR#c%=st%(0):stripptr=0:IFstriprows%>=sy% striprows%=-1 12290CASE input OF 12300WHEN 1:rowbytes%=sx%+7>>3 12310WHEN 2:rowbytes%=sx%+3>>2 12320WHEN 4:rowbytes%=sx%+1>>1 12330WHEN 8:rowbytes%=sx% 12340WHEN 24:rowbytes%=3*sx% 12350OTHERWISE ERROR 42,"Can't do "+FNbits(input)+" TIFF" 12360ENDCASE 12370IFplanar%=2 rowbytes%=rowbytes%*sampperpix% 12380IFplanar%<>1 AND rgb<>0 ERROR42,"Can't do this style of TIFF yet" ELSEplanar%=FALSE 12390IF compression<2 THEN 12400cache%=TRUE:stripptr=-1:r$="FN8":IFinput=24 rbo%=0:gbo%=1:bbo%=2:step24=3:r$="FN24" 12410ELSE 12420IFcompression=5 ORcompression=32773 THEN 12430cache%=TRUE:cachebytes%=rowbytes%*striprows% 12440plbuff%=FNdim(rowbytes%):rowstogo%=striprows% 12450IFinput=24 rb%=plbuff%:gb%=plbuff%+1:bb%=plbuff%+2:r$="FN"+STR$(VALMID$(r$,3)+10):step24=3:rbo%=-1 12460ELSE 12470buff%=FNdim(rowbytes%):rowstogo%=striprows% 12480IFinput=24 rb%=buff%:gb%=buff%+1:bb%=buff%+2:r$="FN"+STR$(VALMID$(r$,3)+10):step24=3 12490ENDIF 12500ENDIF 12510IFscale% THEN 12520S%=resunit:IFS%=2 S%=90 12530IFS%=3 S%=35 12540xdiv%=xdiv%*xnum%:xmul%=xmul%*xdenom%*S% 12550ydiv%=ydiv%*ynum%:ymul%=ymul%*ydenom%*S% 12560ENDIF 12570IFr$="FN1500" r$="FN8" 12580WHEN 1600 12590PTR#c%=12:camg=0:planar%=TRUE:REPEAT 12600S$=CHR$BGET#c%+CHR$BGET#c%+CHR$BGET#c%+CHR$BGET#c%:S%=FNbeW 12610CASE S$ OF 12620WHEN "BMHD":sx%=FNbeHW:sy%=FNbeHW:S%=FNW:planes%=BGET#c%:masking%=BGET#c%=1 12630compression=BGET#c%:S%=BGET#c%+FNHW:U%=BGET#c%:V%=BGET#c%:S%=FNW 12640IFscale% ymul%=ymul%*V%:ydiv%=ydiv%*U% 12650FORI%=0TO(1<<planes%)-1:r%(I%)=I%/((1<<planes%)-1)*F:NEXT:g%()=r%():b%()=r%() 12660WHEN "CMAP":S%=PTR#c%+S%:FORI%=0TO(1<<planes%)-1:r%(I%)=(BGET#c%>>4)/15*F 12670g%(I%)=(BGET#c%>>4)/15*F:b%(I%)=(BGET#c%>>4)/15*F:NEXT 12680PTR#c%=S%:IFinfo% PRINT"Warning: truncated IFF CMAP information to 4 bits" 12690WHEN "CAMG":camg=FNbeW:IFinfo% PRINT"Amiga viewport mode ";~camg 12700WHEN "BODY":st%=PTR#c% 12710OTHERWISE IF info% PRINT"Ignoring IFF property "S$" size ";S% 12720PTR#c%=PTR#c%+S% 12730ENDCASE 12740UNTILS$="BODY":IFcompression info$="Compressed " ELSEinfo$="" 12760ham=(camg AND &800)<>0:IFham info$+="HAM " 12770half=(camg AND &80)<>0:IFhalf info$+="half-bright " 12780IFhalf half%=1<<planes%-1:FORI%=0TOhalf%-1:r%(I%+half%)=r%(I%)/2:g%(I%+half%)=g%(I%)/2:b%(I%+half%)=b%(I%)/2:NEXT 12790info$+="IFF file, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(planes%) 12800IFmasking% info$+=" with mask (ignored)" 12810rowbytes%=(sx%+15>>4)<<1:plbytes%=rowbytes%*planes% 12820pbuff%=FNdim(sx%):r$="FN"+STR$(1600+compression):cache%=TRUE 12830IFcompression THEN 12840cachebytes%=TRUE:plbuff%=FNdim(plbytes%) 12850ELSE 12860realrowbytes%=rowbytes%:rowbytes%=plbytes%:IFmasking% rowbytes%+=realrowbytes% 12870ENDIF 12880PTR#c%=st% 12890WHEN 1700 12900sx%=640:rowbytes%=80:sy%=350:planes%=4:plbytes%=4*80:planar%=TRUE 12910buff%=FNdim(80*4):pbuff%=FNdim(640):G=F/3:H=F*2/3 12920r%()=0,0,0,0,F,F,F,H,G,G,G,G,F,F,F,F 12930g%()=0,0,F,F,0,0,F,H,G,G,F,F,G,G,F,F 12940b%()=0,F,0,F,0,F,0,H,G,F,G,F,G,F,G,F 12950masking%=FALSE:r$="FN1600":st%=16:PTR#c%=16:cache%=TRUE:realrowbytes%=80:rowbytes%=plbytes% 12960info$="PC EGA '.dsp' file, 640 by 350 pixels, 4 bits per pixel (fixed palette)" 12970WHEN 1800 12980sx%=72*8:sy%=720:quant%=1:input=1:PTR#c%=st%:plbuff%=FNdim(72) 12990cache%=TRUE:cachebytes%=TRUE 13000r%(0)=F:g%(0)=F:b%(0)=F:bigendianbits=TRUE:rowbytes%=72:r$="FN1501":rowstogo%=-1 13010IFscale% xmul%=xmul%*90:xdiv%=xdiv%*72:ymul%=ymul%*90:ydiv%=ydiv%*72 13020info$="MacPaint file, 576 by 720 bits, creator id "+RIGHT$(S$,4) 13030WHEN 1850 13040PTR#c%=552 13050done%=FALSE 13060REPEAT 13070code%=FNbeHW:CASE code% OF 13080WHEN &01:PTR#c%=PTR#c%+FNbeHW 13090WHEN &1E 13100WHEN &98 13110rowbytes%=FNbeHW:IF(rowbytes% AND&8000)=0 ERROR42,"PICT without Pixmap" 13120sy%=FNbeHW:sx%=FNbeHW:sy%=FNbeHW-sy%:sx%=FNbeHW-sx% 13130junk%=FNHW:packtype%=FNbeHW:junk%=FNW:resx%=FNbeW:resy%=FNbeW 13140IFFNbeHW<>0 CLOSE#c%:ERROR42,"ChangeFSI expected Mac PICT2 pixeltype=Chunky" 13150bpp%=FNbeHW:junk%=FNbeHW:junk%=FNbeHW 13160junk%=FNbeW:junk%=FNbeW:junk%=FNbeW 13170junk%=FNbeW:junk%=FNbeHW 13180C%=FNbeHW:FORI%=0TOC%:J%=FNbeHW:r%(J%)=FNbeHW/65535*F:g%(J%)=FNbeHW/65535*F:b%(J%)=FNbeHW/65535*F:NEXT 13190done%=TRUE 13200WHEN &9A:junk%=FNW:rowbytes%=FNbeHW:IF(rowbytes% AND&8000)=0 ERROR42,"PICT without Pixmap" 13210sy%=FNbeHW:sx%=FNbeHW:sy%=FNbeHW-sy%:sx%=FNbeHW-sx% 13220junk%=FNHW:packtype%=FNbeHW:junk%=FNW:resx%=FNbeW:resy%=FNbeW 13230IFFNbeHW<>16 CLOSE#c%:ERROR42,"ChangeFSI expected Mac PICT2 pixeltype=RGBDirect" 13240bpp%=FNbeHW:comps%=FNbeHW:junk%=FNbeHW 13250junk%=FNbeW:junk%=FNbeW 13260junk%=FNbeHW:junk%=FNbeHW 13270IFbpp%>16 PROCnopal ELSEJ%=2^(bpp%DIV3):FORI%=0TOJ%-1:r%(I%)=I%/(J%-1)*F:NEXT:g%()=r%():b%()=r%() 13280IFbpp%=32 AND comps%=3 bpp%=24:rowbytes%=3*sx% 13290done%=TRUE 13300OTHERWISE:CLOSE#c%:ERROR42,"ChangeFSI can't understand Mac PICT2 code "+STR$~code% 13310ENDCASE 13320UNTIL done% 13330junk%=FNbeHW:junk%=FNbeHW:junk%=FNbeHW:junk%=FNbeHW 13340junk%=FNbeHW:junk%=FNbeHW:junk%=FNbeHW:junk%=FNbeHW 13350junk%=FNbeHW 13360cache%=TRUE:cachebytes%=TRUE:bigendianbits=TRUE:st%=PTR#c%:rowbytes%=rowbytes%ANDNOT&8000 13370IFscale% xmul%=xmul%*90*65536:xdiv%=xdiv%*resx%:ymul%=ymul%*90*65536:ydiv%=ydiv%*resy% 13380info$="Mac PICT2, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(bpp%) 13390plbuff%=FNdim(rowbytes%):IFbpp%>8 THEN 13400rbo%=-1:rb%=plbuff%+sx%:gb%=plbuff%+sx%*2:bb%=plbuff%+sx%*3:r$="FN1851":input=24 13410IFcomps%=3 rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2 13420ENDIF 13430WHEN 1900 13440PTR#c%=1:C%=BGET#c% 13450E%=BGET#c%:IFE%<>1 ERROR 42,"ZSoft .PCX file with unknown encoding" 13460E%=BGET#c%:sx%=FNHW:sy%=FNHW:sx%=FNHW+1-sx%:sy%=FNHW+1-sy% 13470IFscale% xmul%=xmul%*90:xdiv%=xdiv%*FNHW:ymul%=ymul%*90:ydiv%=ydiv%*FNHW ELSEIFFNW 13480PTR#c%=65:planes%=BGET#c%:planar%=planes%>1:rowbytes%=FNHW:bpp%=E%*planes% 13490pcxpal=16:IFbpp%>4 AND C%=5 THEN 13500PTR#c%=EXT#c%-769:IFBGET#c%=12 pcxpal=EXT#c%-768 13510ENDIF 13520PTR#c%=pcxpal:E%=0:FORC%=0TO(1<<bpp%)*3-1:E%=E%ORBGET#c%:NEXT 13530IFinfo% PRINT".PCX palette mask established at ";~E% 13540IFE%=0 THEN 13550FORC%=0TO(1<<bpp%)-1:r%(C%)=C%/((1<<bpp%)-1)*F:NEXT:g%()=r%():b%()=r%() 13560ELSE 13570PTR#c%=pcxpal:FORC%=0TO(1<<bpp%)-1 13580r%(C%)=(BGET#c%ANDE%)/E%*F:g%(C%)=(BGET#c%ANDE%)/E%*F:b%(C%)=(BGET#c%ANDE%)/E%*F 13590NEXT 13600ENDIF 13610PROCrewind 13620plbytes%=rowbytes%*planes%:plbuff%=FNdim(plbytes%):cache%=TRUE:cachebytes%=TRUE 13630IFplanar% pbuff%=FNdim(sx%) ELSEinput=bpp%:bigendianbits=TRUE:r$="FN1100" 13640info$="ZSoft .PCX file, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(bpp%) 13650WHEN 2000 13660PTR#c%=0:L%=BGET#c%:C%=BGET#c%:I%=BGET#c%:J%=FNHW:K%=FNHW:M%=BGET#c% 13670sx%=FNW:sx%=FNHW:sy%=FNHW:B%=BGET#c%:ID%=BGET#c%:IFID%AND&10 hflip%=NOThflip% 13680IF(ID% AND&20)=0 vflip%=NOTvflip% 13690PTR#c%=PTR#c%+L%:CASE C% OF 13700WHEN 1:IFM%=&18 THEN 13710FORC%=J%TOK%-1 13720b%(C%)=BGET#c%/255*F:g%(C%)=BGET#c%/255*F:r%(C%)=BGET#c%/255*F 13730NEXT 13740ELSE 13750ENDIF 13760OTHERWISE PROCnopal 13770ENDCASE 13780st%=PTR#c% 13790CASE I% OF 13800WHEN 1,2,3:cache%=TRUE:IFB%>8 THEN 13810IFB%>16 THEN 13820input=24:bbo%=0:gbo%=1:rbo%=2:step24=B%DIV8:r$="FN24":rowbytes%=step24*sx% 13830ELSE 13840rowbytes%=sx%*2 13850DIM rpal%(255),gpal%(255):input=16:step24=2:r$="FN16" 13860FORC%=0TO255 13870gpal%(C%)=(C%>>5)<<8 OR (C%AND31)<<16 13880rpal%(C%)=(C%>>2)AND31 OR (C%AND3)<<11 13890NEXT 13900FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 13910ENDIF 13920ELSE 13930r$="FN8":rowbytes%=sx% 13940ENDIF 13950info$="Truevision TGA image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(B%) 13960WHEN 9,10,11:step24=B%DIV8:rowbytes%=step24*sx%:buff%=FNdim(rowbytes%) 13970IFB%>8 THEN 13980IFB%>16 THEN 13990input=24:bb%=buff%:gb%=buff%+1:rb%=buff%+2:r$="FN2002" 14000ELSE 14010DIM rpal%(255),gpal%(255):input=16:step24=2:r$="FN2001" 14020FORC%=0TO255 14030gpal%(C%)=(C%>>5)<<8 OR (C%AND31)<<16 14040rpal%(C%)=(C%>>2)AND31 OR (C%AND3)<<11 14050NEXT 14060FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 14070ENDIF 14080ENDIF 14090info$="Truevision TGA RLE image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(B%) 14100ENDCASE 14110WHEN 2100 14120quant%=6:sx%=512:rowbytes%=2*sx%:sy%=256:cache%=TRUE:r$="FN16" 14130DIM rpal%(255),gpal%(255):input=16:step24=2 14140FORC%=0TO255 14150gpal%(C%)=C%>>3 OR (C%AND7)<<11 14160rpal%(C%)=(C%AND7)<<8 OR (C%>>3)<<16 14170NEXT 14180FORC%=0TO31:r%(C%)=C%/31*F:NEXT:b%()=r%() 14190FORC%=0TO63:g%(C%)=C%/63*F:NEXT 14200IFscale% ymul%=ymul%*2 14210info$="Pineapple image, 512 by 256 pixels, 16 bits per pixel":PTR#c%=7 14220WHEN 2200 14230quant%=8:step24=1:PTR#c%=0:s$=GET$#c%:E%=INSTR(s$,":"):st%=PTR#c% 14240sx%=VALMID$(s$,E%+1):sy%=VALMID$(s$,E%+2+LENSTR$sx%):PROCnopal:input=24 14250rowbytes%=sx%*3:rbo%=0:gbo%=sx%:bbo%=2*sx%:cache%=TRUE:r$="FN24" 14260info$="Irlam image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 14270WHEN 2250 14280PTR#c%=16:sx%=FNW:sy%=FNW:DIM rpal%(255),gpal%(255),bpal%(255),table%(255) 14290FORC%=0TO255:D%=C%OR1 14300table%(C%)=(D%-16)/219*F 14310IFD%AND128 D%-=256 14320r%(C%)=INT(D%/160*F):b%(C%)=INT(D%/126*F) 14330g%(C%)=INT(-D%/160*rwt/gwt*F):gpal%(C%)=INT(-D%/126*bwt/gwt*F) 14340NEXT 14350table%()=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 14360st%=32:PTR#c%=32:cache%=TRUE:rowbytes%=2*sx%:input=411 14370info$="Irlam YUV 4:1:1 file "+STR$sx%+" by "+STR$sy%+" pixels" 14380WHEN 2300 14390PTR#c%=6:sx%=FNHW:sy%=FNHW:D%=BGET#c%:ncolors%=BGET#c%:input=24 14400vflip%=NOTvflip%:quant%=BGET#c%:ncmap%=BGET#c%:cmaplen%=1<<BGET#c% 14410PROCnopal:back%=FNdim(4):!back%=0 14420clrfirst%=D%AND1 14430IF(D%AND2)=0 THEN 14440FORI%=0TOncolors%-1:back%?I%=BGET#c%:NEXT 14450IF(ncolors%AND1)=0 IFBGET#c% 14460ENDIF 14470IFD%AND4 alpha%=FNdim(sx%) 14480IFncmap%>0 THEN 14490FORI%=0TOcmaplen%-1:r%(I%)=FNHW/&FF00*F:NEXT 14500FORI%=0TOcmaplen%-1:g%(I%)=FNHW/&FF00*F:NEXT 14510FORI%=0TOcmaplen%-1:b%(I%)=FNHW/&FF00*F:NEXT 14520ENDIF 14530IFD%AND8 THEN 14540PTR#c%=FNHW+PTR#c%:IFPTR#c%AND1 PTR#c%=PTR#c%+1 14550ENDIF 14560st%=PTR#c%:buff%=FNdim(sx%*3):rb%=buff%:gb%=buff%+1*sx%:bb%=buff%+2*sx% 14570PROCrewind 14580info$="Utah rle image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(ncolors%*quant%) 14590WHEN 2400 14600PTR#c%=riffoff%+&0a:st%=FNW:pal%=FNW:sx%=FNW:sy%=FNW 14610CASE pal% OF 14620WHEN 12 14630PTR#c%=riffoff%+&18:input=FNHW:compression=0 14640WHEN 40 14650PTR#c%=riffoff%+&1c:input=FNHW:compression=FNW 14660PTR#c%=riffoff%+&26:xppm=FNW:yppm=FNW 14670IF (xppm<>0 AND yppm<>0) THEN 14680xdiv%=xdiv%*xppm:xmul%=xmul%*3543 14690ydiv%=ydiv%*yppm:ymul%=ymul%*3543 14700ENDIF 14710OTHERWISE 14720ERROR 42,"Unknown .BMP variant ("+STR$pal%+")" 14730ENDCASE 14740bigendianbits=TRUE:vflip%=NOTvflip% 14750CASE input OF 14760WHEN 1:rowbytes%=sx%+7>>3 14770WHEN 4:rowbytes%=sx%+1>>1 14780WHEN 8:rowbytes%=sx% 14790WHEN 16:rowbytes%=sx%*2:r$="FN16":step24=2 14800DIM rpal%(255),gpal%(255) 14810FORC%=0TO255 14820gpal%(C%)=(C%>>5)<<8 OR (C%AND31) 14830rpal%(C%)=((C%>>2)AND31)<<16 OR (C%AND3)<<11 14840NEXT 14850FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 14860WHEN 24:rowbytes%=sx%*3 14870rbo%=0:gbo%=1:bbo%=2:step24=3:r$="FN24" 14880FORC%=0TO255:r%(C%)=C%/255*F:NEXT:g%()=r%():b%()=r%() 14890OTHERWISE ERROR 42,".BMP file of unusual depth ("+STR$input+")" 14900ENDCASE 14910IFinput<=8 THEN 14920PTR#c%=riffoff%+14+pal%:r$="FN8" 14930FORC%=0TO2^input-1 14940b%(C%)=BGET#c%/255*F:g%(C%)=BGET#c%/255*F:r%(C%)=BGET#c%/255*F:IFBGET#c% 14950NEXT 14960ENDIF 14970CASE compression OF 14980WHEN 0:info$="Uncompressed " 14990WHEN 1:info$="RLE8 compressed ":r$="FN2401" 15000WHEN 2:info$="RLE4 compressed ":r$="FN2402" 15010OTHERWISE ERROR 42,".BMP compression type not supported ("+STR$compression+")" 15020ENDCASE 15030rowbytes%=rowbytes%+3ANDNOT3 15040IF compression<>0 cachebytes%=TRUE:plbuff%=FNdim(rowbytes%) 15050cache%=TRUE:PTR#c%=riffoff%+st% 15060info$+="Windows 3.0 .BMP image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 15070WHEN 2500 15080PTR#c%=0:s$="":C%=BGET#c%:WHILEC%<>0 s$+=CHR$C%:C%=BGET#c%:ENDWHILE 15090s$+=" version "+STR$FNW:sx%=FNW:sy%=FNW:input=FNW:cache%=TRUE 15100info$="!Translator Clear format made by "+s$+", "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 15110IFinput>8 THEN 15120PROCnopal:input=24:step24=3:rowbytes%=3*sx%:rbo%=0:gbo%=1:bbo%=2:r$="FN24" 15130ELSE 15140FORC%=0TO2^input-1 15150r%(C%)=BGET#c%/255*F:g%(C%)=BGET#c%/255*F:b%(C%)=BGET#c%/255*F 15160NEXT 15170input=8:r$="FN8":rowbytes%=sx% 15180ENDIF 15190st%=PTR#c% 15200WHEN 2600 15210PTR#c%=0:C%=BGET#c% 15220D%=BGET#c%:CASE D% OF 15230WHEN 0:sx%=320:sy%=200:planes%=4 15240WHEN 1:sx%=640:sy%=200:planes%=2 15250WHEN 2:sx%=640:sy%=400:planes%=1 15260OTHERWISE ERROR42,"ChangeFSI knows nothing of "+STR$C%+" type Degas files" 15270ENDCASE 15280FORI%=0TO(1<<input)-1:D%=FNbeHW:r%(I%)=(D%>>8AND7)/7*F:g%(I%)=(D%>>4AND7)/7*F:b%(I%)=(D%AND7)/7*F:NEXT 15290cache%=TRUE:planar%=TRUE:masking%=FALSE:st%=34:PTR#c%=34:r$="FN1600" 15300rowbytes%=(sx%+15>>4)<<1:plbytes%=rowbytes%*planes%:pbuff%=FNdim(sx%) 15310IFC%AND128 r$="FN1601":flag=1600:cachebytes%=TRUE:plbuff%=FNdim(plbytes%) ELSErealrowbytes%=2:rowbytes%=plbytes% 15320info$="Degas file "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(planes%) 15330WHEN 2700 15340PTR#c%=4:sx%=FNHW:sy%=FNHW 15350CASE FNHW OF 15360WHEN &AF:rowbytes%=sx%:cache%=TRUE:r$="FN8":st%=&30A 15370OTHERWISE CLOSE#c%:ERROR 42,"Panic in ColoRIX reading - ChangeFSI largely ignorant of format!" 15380ENDCASE 15390FORC%=0TO2^input-1 15400r%(C%)=BGET#c%/63*F:g%(C%)=BGET#c%/63*F:b%(C%)=BGET#c%/63*F 15410NEXT 15420PTR#c%=st% 15430info$="ColoRIX file "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 15440WHEN 2800 15450PTR#c%=0:REPEAT s$=FNfits:CASE LEFT$(s$,8) OF 15460WHEN "SIMPLE ":IFMID$(s$,30,1)<>"T" ERROR42,"ChangeFSI can only read Simple FITS format" 15470WHEN "BITPIX ":input=VALMID$(s$,10) 15480WHEN "NAXIS ":IFVALMID$(s$,10)<>2 ERROR42,"ChangeFSI can only read 2d FITS images" 15490WHEN "NAXIS1 ":sx%=VALMID$(s$,10) 15500WHEN "NAXIS2 ":sy%=VALMID$(s$,10) 15510WHEN "END " 15520OTHERWISE IFinfo% PRINT"Ignoring FITS record "s$ 15530ENDCASE 15540UNTILLEFT$(s$,8)="END " 15550st%=(PTR#c%DIV2880 + 1)*2880:cache%=TRUE:PTR#c%=st% 15560CASE input OF 15570WHEN 8:r$="FN8":rowbytes%=sx%:PROCnopal 15580WHEN 16:rowbytes%=2*sx%:DIM rpal%(255),gpal%(255):step24=2:r$="FN16" 15590FORC%=0TO255 15600gpal%(C%)=C%<<8 15610rpal%(C%)=C% 15620NEXT:cheat%=0:IFinvert% cheat%=F 15630FORC%=0TO255:r%(C%)=cheat%+C%/65535*F:g%(C%)=((C%EOR&80)<<8)/65535*F:b%(C%)=cheat%:NEXT:rwt=1:gwt=1:bwt=1 15640OTHERWISE ERROR 42,"ChangeFSI can't read a FITS image with this number of bits per pixel" 15650ENDCASE 15660info$="FITS file "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 15670WHEN 2900 15680PTR#c%=4:sx%=FNbeHW:sy%=FNbeHW:PTR#c%=&42:input=FNbeHW:C%=FNbeHW 15690rowbytes%=FNbeHW:C%=FNbeW:st%=FNbeW:PTR#c%=st%:r$="FN8":PROCnopal 15700DIM rpal%(15),gpal%(15),bpal%(15) 15710rpal%()=&e6,&23,&e6,&7f,&17,&00,&a1,&45,&e6,&4a,&e6,&73,&6e,&47,&8a,0 15720gpal%()=&e6,&78,&00,&23,&a1,&73,&2e,&2e,&c8,&a6,&75,&40,&b8,&78,&55,0 15730bpal%()=&b8,&e6,&00,&a1,&17,&2e,&0c,&2e,&00,&c6,&00,&e6,&00,&00,&00,0 15740FORC%=&80TO&8F:r%(C%)=rpal%(C%-&80)/255*F:g%(C%)=gpal%(C%-&80)/255*F:b%(C%)=bpal%(C%-&80)/255*F:NEXT:cache%=TRUE 15750info$="Apollo GPR file "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 15760WHEN 3000 15770sx%=720:sy%=EXT#c%/1440:DIM rpal%(255),gpal%(255),bpal%(255),table%(255) 15790IFFALSE THEN 15800FORC%=0TO255 15810table%(C%)=(C%-16)/219*F 15820r%(C%)=(C%-128)/186*0.624*F:rpal%(C%)=(C%-128)/160*0.952*F 15830g%(C%)=-(C%-128)/186*0.64*F:gpal%(C%)=-(C%-128)/160*0.277*F 15840b%(C%)=(C%-128)/186*1.73*F:bpal%(C%)=-(C%-128)/160*1.11*F 15850NEXT 15860ELSE 15880FORC%=0TO255 15890table%(C%)=(C%-16)/219*F 15900r%(C%)=INT((C%-128)/160*F):b%(C%)=INT((C%-128)/126*F) 15910g%(C%)=INT(-(C%-128)/160*rwt/gwt*F):gpal%(C%)=INT(-(C%-128)/126*bwt/gwt*F) 15920NEXT 15930ENDIF 15940table%()=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 15950st%=0:PTR#c%=0:cache%=TRUE:rowbytes%=1440:input=422:gamma=1 15960IFscale% ymul%=ymul%*2 15970info$="CCIR601 4:2:2 file "+STR$sx%+" by "+STR$sy%+" pixels" 15980WHEN 3100 15990quant%=8:PTR#c%=0:a$=GET$#c%:st%=PTR#c% 16000sx%=VALa$:sy%=VAL(MID$(a$,INSTR(a$," "))) 16010PROCnopal:input=24:step24=3:rowbytes%=sx%*3 16020rbo%=0:gbo%=1:bbo%=2:cache%=TRUE:flag=700:r$="FN24" 16030info$="!RayShade 'RGB' image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 16040WHEN 3200 16050quant%=8:PTR#c%=0:st%=0 16060sx%=VALMID$(s$,INSTR(s$,"_")+1,1) 16070CASE sx% OF 16080WHEN 5:sx%=768:sy%=512 16090WHEN 2:sx%=3072:sy%=2048 16100WHEN 1:sx%=1536:sy%=1024 16110ENDCASE 16120PROCnopal:input=24:step24=3:rowbytes%=sx%*3 16130rbo%=0:gbo%=1:bbo%=2:cache%=TRUE:flag=700:r$="FN24" 16140info$="Kodak /RGB image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 16150WHEN 3300 16160PTR#c%=0:input=VALMID$(FNGET,2) 16170s$=FNGET:sx%=VALs$:sy%=VALMID$(s$,INSTR(s$," ")):IFsy%=0 sy%=VALFNGET 16180cache%=TRUE:CASE input OF 16190WHEN 4:input=1:r$="FN8":r%(0)=F:g%()=r%():b%()=r%():bigendianbits=TRUE 16200rowbytes%=(sx%+7)DIV8 16210WHEN 5:input=8:r$="FN8":E%=VALFNGET 16220FORC%=0TOE%:r%(C%)=C%/E%*F:NEXT:g%()=r%():b%()=r%() 16230rowbytes%=sx% 16240WHEN 6:input=24:r$="FN24":E%=VALFNGET:step24=3:rbo%=0:gbo%=1:bbo%=2 16250FORC%=0TOE%:r%(C%)=C%/E%*F:NEXT:g%()=r%():b%()=r%() 16260rowbytes%=sx%*3 16270ENDCASE 16280st%=PTR#c%:flag=700 16290info$+="pbm image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 16300DEF FNGET REPEATs$=GET$#c%:UNTILLEFT$(s$,1)<>"#":=s$ 16310WHEN 3400 16320PTR#c%=0:s$=FNGET:input=16:quant%=5 16330s$=FNGET:sx%=VALs$:sy%=VALMID$(s$,INSTR(s$," ")):s$=FNGET 16340DIM rpal%(255),gpal%(255):input=16:step24=2 16350FORC%=0TO255 16360gpal%(C%)=(C%>>5)<<8 OR (C%AND31) 16370rpal%(C%)=((C%>>2)AND31)<<16 OR (C%AND3)<<11 16380NEXT 16390cache%=TRUE:r$="FN16" 16400FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 16410rowbytes%=sx%*2:st%=PTR#c%:flag=700 16420info$="p15 image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 16430WHEN 3450 16440PTR#c%=0:info$=FNGET 16450ybits%=VALMID$(info$,INSTR(info$," ")):ymax%=(1<<ybits%)-1 16460ubits%=VALMID$(info$,INSTR(info$,"Y ")+1):umax%=(1<<(ubits%-1))-1 16470vbits%=VALMID$(info$,INSTR(info$,"U ")+1):vmax%=(1<<(vbits%-1))-1 16480s$=FNGET:sx%=VALs$:sy%=VALMID$(s$,INSTR(s$," ")) 16490DIM rpal%(255),gpal%(255),bpal%(255),table%(255) 16500FORC%=0TOymax%:table%(C%)=C%/ymax%*F:NEXT 16510D%=(1<<ubits%)-1 16520FORC%=0TOD%:d=C%/umax%:IFd>1 d=-(D%-C%)/umax% 16530b%(C%)=INT(d*(1-bwt)*F):gpal%(C%)=INT(-d*(1-bwt)*bwt/gwt*F) 16540NEXT 16550D%=(1<<vbits%)-1 16560FORC%=0TOD%:d=C%/vmax%:IFd>1 d=-(D%-C%)/vmax% 16570r%(C%)=INT(d*(1-rwt)*F):g%(C%)=INT(-d*(1-rwt)*rwt/gwt*F) 16580NEXT 16590rowbytes%=sx%*2:st%=PTR#c%:cache%=TRUE:r$="FN2250":input=555 16600info$+=", "+STR$sx%+" by "+STR$sy%+" pixels" 16610WHEN 3500 16620quant%=1:PTR#c%=6:E%=FNHW:sx%=FNHW:sx%=FNHW:sy%=FNHW:st%=FNHW:st%=FNW 16630rowbytes%=sx%/8+1ANDNOT1:cache%=TRUE:st%+=PTR#c%:PTR#c%=st% 16640CASE E% OF 16650WHEN 1 16660r$="FN8":input=1:r%(0)=F:g%(0)=F:b%(0)=F 16670info$="Pocketbook bitmap, "+STR$sx%+" by "+STR$sy%+" pixels, 1 bit per pixel" 16680WHEN 2 16690planar%=TRUE:planes%=2:r$="FN1600":input=8:cachebytes%=TRUE 16700r%(0)=F:r%(1)=(F/3)*2:r%(2)=F/3:r%(3)=0:g%()=r%():b%()=r%() 16710plbytes%=rowbytes%*planes%:buff%=FNdim(plbytes%*sy%):pbuff%=FNdim(sx%) 16720realrowbytes%=rowbytes%*sy% 16730info$="PocketbookII bitmap, "+STR$sx%+" by "+STR$sy%+" pixels, 2 bits per pixel" 16740OTHERWISE 16750ERROR 42,"Unknown Pocketbook PIC format" 16760ENDCASE 16770WHEN 3600 16780pcdblk%=FNdim(40):SYS&20023,"ChangeFSI$PCDindex",pcdblk%,20 TO,,Z 16790IFZ THENpcdblk%?Z=13:pcdindex%=VAL$pcdblk% ELSEpcdindex%=3 16800SYS"PhotoCD_Open",1,c%,1 TO pcdh%:SYS"PhotoCD_GetCount",pcdh% TO,Z 16810IF(Z>>pcdindex%)=0 CLOSE#c%:ERROR42,"Desired resolution unavailable" 16820SYS"PhotoCD_GetRotation",pcdh% TO,,pcdtr% 16830SYS"PhotoCD_GetSize",pcdh%,,pcdindex% TO,,,,sx%,sy% 16840pcdblk%!0=0:pcdblk%!8=sx%:pcdblk%!4=0 16850pcdblk%!16=0:pcdblk%!20=2:pcdblk%!24=1:pcdblk%!28=3 16870CASE pcdtr% OF 16880WHEN 0 16890WHEN &80000000:hflip%=NOThflip% 16900WHEN 90 16910CASE rotate% OF 16920WHEN 0:rotate%=1 16930WHEN -1:rotate%=0 16940WHEN 1:rotate%=0:vflip%=NOTvflip%:hflip%=NOThflip% 16950ENDCASE 16960WHEN &8000005A 16970CASE rotate% OF 16980WHEN 0:rotate%=1:vflip%=NOTvflip% 16990WHEN -1:rotate%=0:vflip%=NOTvflip% 17000WHEN 1:rotate%=0:hflip%=NOThflip% 17010ENDCASE 17020WHEN 180:hflip%=NOThflip%:vflip%=NOTvflip% 17030WHEN &800000B4:vflip%=NOTvflip% 17040WHEN 270 17050CASE rotate% OF 17060WHEN 0:rotate%=-1 17070WHEN 1:rotate%=0 17080WHEN -1:rotate%=0:vflip%=NOTvflip%:hflip%=NOThflip% 17090ENDCASE 17100WHEN &8000010E 17110CASE rotate% OF 17120WHEN 0:rotate%=-1:vflip%=NOTvflip% 17130WHEN 1:rotate%=0:vflip%=NOTvflip% 17140WHEN -1:rotate%=0:hflip%=NOThflip% 17150ENDCASE 17160OTHERWISE PANIC 17170ENDCASE 17190input=24:step24=3:rbo%=0:gbo%=1:bbo%=2:pcdcachesize%=32*1024 17200rowbytes%=sx%*3:PROCnopal:cache%=TRUE:pcdcache%=FNdim(pcdcachesize%) 17210info$="PhotoCD image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 17220WHEN 3700 17230A%=OPENIN"<ChangeFSI$Dir>.CFSIjpeg":jpeg%=FNdim(EXT#A%) 17240SYS12,4,A%,jpeg%,EXT#A%:CLOSE#A% 17250datacache%=FNcachedim(EXT#c%):IFdatacache%=-1 datacache%=FNdim(EXT#c%) 17260PTR#c%=0:SYS12,4,c%,datacache%,EXT#c% 17270A%=datacache%:B%=jpegblk%:C%=jpegblk%+4:D%=jpegblk%+8:E%=jpegblk%+12:CALLjpeg%+8 17280B%=jpegblk%!12:jpegspace%=FNdim(B%) 17290C%=datacache%:A%=jpegspace%:D%=EXT#c% 17300CALLjpeg%:cache%=FALSE:IF!A% ERROR42,"JPEG code error: "+STR$!A% 17310sx%=A%!20:sy%=A%!24:input=8*A%?28:PROCnopal:step24=4 17320info$="JFIF image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 17330jpegy%=sy%:r$="FN"+STR$INT(3700+input) 17340WHEN 666 17450st%=0:PTR#c%=0:sx%=160:sy%=128:input=8:cache%=TRUE:rowbytes%=sx% 17460FORC%=0TO255:r%(C%)=C%/255*F:NEXT:g%()=r%():b%()=r%():r$="FN8" 17470info$="The number of the beast, 160 by "+STR$sy%+" pixels, 8 bits per pixel" 17480ENDCASE 17490IFinfo% PRINTinfo$ 17500SYS"Hourglass_On",1:hour%=&406c4 17510IFinvert% r%()=F-r%():g%()=F-g%():b%()=F-b%() 17520IFxdiv% PROCreduce(xmul%,xdiv%) 17530IFydiv% PROCreduce(ymul%,ydiv%) 17540CASE m OF 17550WHEN -1:x%=256:y%=256:ncol=256:IFscaleo% xdiv%=xdiv%*2:ydiv%=ydiv%*2 17560WHEN -2:x%=sx%:y%=sy%:IFspm=18 ncol=1 ELSEncol=15 17570WHEN -3,-5,-6:x%=sx%:y%=sy%:ncol=2^15-1 17580WHEN -4,-7,-8:x%=sx%:y%=sy%:ncol=2^24-1 17590OTHERWISE 17600SYS53,m,4 TO ,,nx:SYS53,m,5 TO ,,ny:nx=1<<nx:ny=1<<ny 17610SYS53,m,11 TO ,,x%:SYS53,m,12 TO ,,y%:x%+=1:y%+=1 17620SYS53,m,3 TO ,,ncol:IFscaleo% THEN 17630IFrotate% THEN 17640xdiv%=xdiv%*ny:ydiv%=ydiv%*nx 17650IFxdiv% ymul%=ymul%*2 17660IFydiv% xmul%=xmul%*2 17670ELSE 17680xdiv%=xdiv%*nx:ydiv%=ydiv%*ny 17690IFxdiv% xmul%=xmul%*2 17700IFydiv% ymul%=ymul%*2 17710ENDIF 17720ENDIF 17730SYS&62A51,m TO r0;V:IF(V AND1)=0 THEN 17750IFr0=1 THEN 17760ncol=255:IFm$<>"D" m$="R" 17770ENDIF 17780ENDIF 17790ENDCASE 17800IFm=-6 OR m=-7 OR m=-8 THEN 17810nx=VALMID$(pnm$,5):ny=VALMID$(pnm$,INSTR(pnm$,",",5)+1) 17820IFscaleo% THEN 17830IFrotate% THEN 17840IFxdiv% ymul%=ymul%*nx 17850IFydiv% xmul%=xmul%*ny 17860ELSE 17870IFxdiv% xmul%=xmul%*nx 17880IFydiv% ymul%=ymul%*ny 17890ENDIF 17900xdiv%=xdiv%*90:ydiv%=ydiv%*90 17910ENDIF 17920ENDIF 17930IFrotate% SWAP x%,y% 17950IFxdiv%=0 xdiv%=sx% 17960IFydiv%=0 ydiv%=sy% 17970IFxs$="=" xmul%=x%:xdiv%=sx% 17980IFys$="=" ymul%=y%:ydiv%=sy% 17990IFlock% THEN 18000IFxmul%/xdiv%>ymul%/ydiv% xmul%=ymul%:xdiv%=ydiv% ELSEymul%=xmul%:ydiv%=xdiv% 18010ENDIF 18020IFncol=1 THEN 18030CASE m$ OF 18040WHEN"C":xdiv%=xdiv%*4:ydiv%=ydiv%*4 18050DIM A%(16),B%(16) 18060A%()=0,&00000001,&08000001,&08000101,&08080101,&08080103,&0C080103,&0C080303,&0C0C0303,&0C0E0303,&0C0E0703,&0E0E0703,&0E0E0707,&0E0F0707,&0E0F0F07,&0F0F0F07,&0F0F0F0F 18070B%()=0,&00000008,&01000008,&01000808,&01010808,&0101080C,&0301080C,&03010C0C,&03030C0C,&03070C0C,&03070E0C,&07070E0C,&07070E0E,&070F0E0E,&070F0F0E,&0F0F0F0E,&0F0F0F0F 18080even_gard=FNdim(17*32*4):odd_gard=FNdim(17*32*4) 18090FORI%=0TO16:FORJ%=0TO16:even_gard!(J%*32*4+I%*4)=A%(I%)ORB%(J%)<<4:NEXT:NEXT 18100FORI%=0TO16:FORJ%=0TO16:odd_gard!(I%*32*4+J%*4)=B%(I%)ORA%(J%)<<4:NEXT:NEXT 18110WHEN"T":xdiv%=xdiv%*3:ydiv%=ydiv%*3 18120DIM A%(9),B%(9) 18130A%()=0,&0001,&4001,&4041,&4043,&40C3,&60C3,&61C3,&71C3,&71C7 18140B%()=0,&0004,&1004,&1104,&1106,&1186,&3186,&31C6,&71C6,&71C7 18150even_gard=FNdim(10*16*4):odd_gard=FNdim(10*16*4) 18160FORI%=0TO9:FORJ%=0TO9:even_gard!(J%*16*4+I%*4)=A%(I%)ORB%(J%)<<3:NEXT:NEXT 18170FORI%=0TO9:FORJ%=0TO9:odd_gard!(I%*16*4+J%*4)=B%(I%)ORA%(J%)<<3:NEXT:NEXT 18180WHEN"D":xdiv%=xdiv%*2:ydiv%=ydiv%*2 18190DIM A%(4),B%(4) 18200A%()=0,&1,&21,&31,&33 18210B%()=0,&2,&12,&32,&33 18220even_gard=FNdim(5*8):odd_gard=FNdim(5*8) 18230FORI%=0TO4:FORJ%=0TO4:even_gard?(J%*8+I%)=A%(I%)ORB%(J%)<<2:NEXT:NEXT 18240FORI%=0TO4:FORJ%=0TO4:odd_gard?(I%*8+J%)=B%(I%)ORA%(J%)<<2:NEXT:NEXT 18250ENDCASE 18260ENDIF 18270PROCreduce(xmul%,xdiv%):PROCreduce(ymul%,ydiv%) 18280IFinfo% PRINT"Size ratios are x ";xmul%":"xdiv%" y "ymul%":"ydiv% 18290x%=sx%*xmul%/xdiv%+.9999:y%=sy%*ymul%/ydiv%+.9999:rows%=sy% 18300order%=x%*y%>sx%*sy% 18310code%=FNdim(8192):SP=13 18320IFcache% THEN 18330PROCcachesize(code%) 18340IFcachebytes% THEN 18350filesize%=EXT#c%-PTR#c%:IFcache%>filesize% cache%=filesize% 18360IFcachebytes%>0 IFcache%>cachebytes% cache%=cachebytes% 18370cacherows%=cache% 18380ELSE 18390filesize%=sy%*rowbytes%:IFcache%<rowbytes% cache%=rowbytes% 18400IFcache%>filesize% cache%=filesize% 18410cacherows%=striprows%:IFcacherows%<1 cacherows%=cache%DIVrowbytes% 18420cache%=cacherows%*rowbytes% 18430ENDIF 18440datacache%=FNcachedim(cache%):IFdatacache%=-1 datacache%=FNdim(cache%) 18450ENDIF 18460IFncol=255 IFm$<>"D" m$="R" 18470IFm$="R" OR(ncol=63 ANDm$="") THEN 18480SYS53,-1,3 TO,,J%:IFncol=255 AND MODE=m J%=ncol 18490IFncol=63 AND(m$=""ORm$="R") J%=ncol 18500IFJ%<>ncol PROCclose:ERROR42,"You must be in a "+STR$(ncol+1)+" colour mode to do this" 18510J%=ncol:IFJ%=63 J%=255 18520palette%=FNdim((J%+1)*4) 18530IFncol=255 THEN 18540SYS"ColourTrans_ReadPalette",-1,-1,palette%,256*4 18550FORI%=0TO255:palette%!(I%<<2)=palette%!(I%<<2)>>>8:NEXT 18560ELSE 18570IFncol=63 THEN 18580FORI%=0TO255 18590palette%!(I%<<2)=(I%AND7 OR (I%AND16)>>1)*17 18600palette%?(I%<<2 OR1)=(I%AND3 OR (I%AND&60)>>3)*17 18610palette%?(I%<<2 OR2)=(I%AND3 OR (I%AND8)>>1 OR (I%AND128)>>4)*17 18620NEXT 18630ELSE 18640FORI%=0TOncol:SYS"OS_ReadPalette",I%,16 TO ,,i%:palette%!(I%<<2)=i%>>>8:NEXT 18650ENDIF 18660ENDIF 18670t%=TRUE:k%=palette%+1:nk%=palette%+2 18680FORI%=0TOncol*4STEP4 18690IFpalette%?I%<>k%?I% OR palette%?I%<>nk%?I% t%=FALSE 18700NEXT 18710IFncol>16 IFt% m$="D" 18720IFncol=15 IFt% m$="T" 18730IFm$="R" THEN 18740IF sx%*xmul%/xdiv%*sy%*ymul%/ydiv%<200000 k%=3 ELSEk%=4 18750nk%=8-k% 18760t%=1<<nk% 18770mask%=t%-1 18780td2%=1<<nk%-1 18790step%=1<<(8-k%) 18800ncol%=ncol+1:IFncol%=64 ncol%=256 18810ict%=FNdim(2^(k%*3)*4-1) 18820IFcache%<8192*6 scratch%=FNdim(8192*6):scratchsz%=8192*6 ELSEscratch%=datacache%:scratchsz%=cache% 18830IFinfo% PRINT"Begin table generation with ";scratchsz%" bytes." 18840FORZ%=0TO2STEP2 18850P%=code% 18860[OPT Z% 18870.make% 18880STMFD r13!,{r14} 18890LDR r4,ict 18900MOV r2,#step%/2 18910.blueloop 18920MOV r1,#step%/2 18930.greenloop 18940MOV r0,#step%/2 18950.redloop 18970MOV r3,r0,LSR #nk% 18980MOV r14,r1,LSR #nk% 18990MOV r5,r2,LSR #nk% 19000ORR r3,r3,r14,LSL #k% 19010ORR r3,r3,r5,LSL #k%*2 19020BL devious 19030ADD r0,r0,#step%*2 19040CMP r0,#256 19050BCC redloop 19060ADD r1,r1,#step% 19070CMP r1,#256 19080BCC greenloop 19090ADD r2,r2,#step% 19100CMP r2,#256 19110BCC blueloop 19120LDMFD r13!,{pc}^ 19130.ct DCD palette% 19140.min DCD code%+8192-256*2*4 19150.ict DCD ict% 19160.fsaad DCD scratch% 19170.fsalim DCD scratch%+scratchsz% 19180.devious 19190STMFD r13!,{r0,r1,r2,r3,r4,r8,r14} 19200BIC r0,r0,#(mask%<<1)+1 19210BIC r1,r1,#mask% 19220BIC r2,r2,#mask% 19250MOV r5,#0 19260LDR r6,ct 19270MOV r9,#&ff0000 19280MOV r14,#&ff0000 19290LDR r12,min 19300.devloop 19310LDR r7,[r6,r5,LSL #2] 19320MOV r8,r7,lsr #16 19330BIC r10,r8,#mask% 19340ADD r11,r2,#t% 19350CMP r10,r2 19360BEQ blueequal 19370SUBCC r10,r2,r8 19380SUBCC r11,r11,r8 19390SUBCS r10,r8,r11 19400SUBCS r11,r8,r2 19410MUL r3,r10,r10 19420.doneblue 19430MUL r4,r11,r11 19440MOV r8,r7,lsr #8 19450AND r8,r8,#255 19460BIC r10,r8,#mask% 19470ADD r11,r1,#t% 19480CMP r10,r1 19490BEQ greenequal 19500SUBCC r10,r1,r8 19510SUBCC r11,r11,r8 19520SUBCS r10,r8,r11 19530SUBCS r11,r8,r1 19540MLA r3,r10,r10,r3 19550.donegreen 19560MLA r4,r11,r11,r4 19570AND r8,r7,#255 19590BIC r10,r8,#mask% 19600ADD r11,r0,#t% 19610CMP r10,r0 19620BEQ redequal0 19630SUBCC r10,r0,r8 19640SUBCC r11,r11,r8 19650SUBCS r10,r8,r11 19660SUBCS r11,r8,r0 19670MLA r7,r10,r10,r3 19680STR r7,[r12,r5,LSL #2] 19690.donered0 19700MLA r7,r11,r11,r4 19710CMP r7,r9 19720MOVCC r9,r7 19740ADD r7,r0,#t% 19750BIC r10,r8,#mask% 19760ADD r11,r7,#t% 19770CMP r10,r7 19780BEQ redequal1 19790SUBCC r10,r7,r8 19800SUBCC r11,r11,r8 19810SUBCS r10,r8,r11 19820SUBCS r11,r8,r7 19830MLA r3,r10,r10,r3 19840.donered1 19850ADD r7,r5,#ncol% 19860STR r3,[r12,r7,LSL #2] 19870MLA r7,r11,r11,r4 19880CMP r7,r14 19890MOVCC r14,r7 19900ADD r5,r5,#1 19910CMP r5,#ncol% 19920BCC devloop 19930LDMFD r13!,{r0,r1,r2,r3,r4} 19950LDR r5,fsaad 19960MOV r7,r5 19970MOV r10,#0 19980.calcnum0 19990LDMIA r12!,{r8,r11} 20000CMP r8,r9 20010STRLEB r10,[r7],#1 20020ADD r10,r10,#1 20030CMP r11,r9 20040STRLEB r10,[r7],#1 20050ADD r10,r10,#1 20060LDMIA r12!,{r8,r11} 20070CMP r8,r9 20080STRLEB r10,[r7],#1 20090ADD r10,r10,#1 20100CMP r11,r9 20110STRLEB r10,[r7],#1 20120ADD r10,r10,#1 20130CMP r10,#ncol% 20140BCC calcnum0 20150SUBS r10,r7,r5 20160SWIEQ 256+ASC"A" 20170CMP r10,#4 ;if<4 then 20180MOVCC r7,r5 ;reset list pointer 20190LDRCCB r5,[r7] ;first possible 20200LDRCCB r8,[r7,#1] ;second possible 20210ORRCC r5,r5,r8,lsl #8 20220LDRCCB r8,[r7,#2] ;third possible 20230ORRCC r5,r5,r8,lsl #16 20240ADD r5,r5,r10,lsl #24 20250BIC r10,r3,#1 20260STR r5,[r4,r10,LSL #2] 20270MOV r5,r7 20280MOV r10,#0 20290.calcnum1 20300LDMIA r12!,{r8,r11} 20310CMP r8,r14 20320STRLEB r10,[r7],#1 20330ADD r10,r10,#1 20340CMP r11,r14 20350STRLEB r10,[r7],#1 20360ADD r10,r10,#1 20370LDMIA r12!,{r8,r11} 20380CMP r8,r14 20390STRLEB r10,[r7],#1 20400ADD r10,r10,#1 20410CMP r11,r14 20420STRLEB r10,[r7],#1 20430ADD r10,r10,#1 20440CMP r10,#ncol% 20450BCC calcnum1 20460SUBS r10,r7,r5 20470SWIEQ 256+ASC"B" 20480CMP r10,#4 ;if<4 then 20490MOVCC r7,r5 20500LDRCCB r5,[r7] 20510LDRCCB r8,[r7,#1] 20520ORRCC r5,r5,r8,lsl #8 20530LDRCCB r8,[r7,#2] 20540ORRCC r5,r5,r8,lsl #16 20550ADD r5,r5,r10,lsl #24 20560ORR r10,r3,#1 20570STR r5,[r4,r10,LSL #2] 20580STR r7,fsaad 20590LDR r8,fsalim 20600CMP r7,r8 20610SWICS 256+ASC"!" 20620LDMFD r13!,{r8,pc}^ 20630.redequal0 20640STR r3,[r12,r5,LSL #2] 20650TST r8,#td2% 20660SUBNE r11,r8,r0 20670SUBEQ r11,r11,r8 20680B donered0 20690.redequal1 20700TST r8,#td2% 20710SUBNE r11,r8,r7 20720SUBEQ r11,r11,r8 20730B donered1 20740.greenequal 20750TST r8,#td2% 20760SUBNE r11,r8,r1 20770SUBEQ r11,r11,r8 20780B donegreen 20790.blueequal 20800MOV r3,#0 20810TST r8,#td2% 20820SUBNE r11,r8,r2 20830SUBEQ r11,r11,r8 20840B doneblue 20850] 20860NEXT 20870I%=TIME:CALLmake% 20880IFinfo% PRINT"Generated 'r'";k%" tables for ";ncol%" colours using ";!fsaad-scratch%" bytes, taking "TIME-I%" cS" 20890safesubict%=FNdim(!fsaad-scratch%) 20900FORI%=0TO!fsaad-scratch%+4STEP4:safesubict%!I%=scratch%!I%:NEXT 20910FORI%=0TO2^(k%*3)*4-1STEP4:IF(ict%!I%>>>24)>3 ict%!I%=ict%!I%-scratch%+safesubict% 20920NEXT 20930ENDIF 20940ENDIF 20950IFfast% IFMODE<>0 MODE0 20970CASE m OF 20980WHEN -1:col=0 20990WHEN -3,-4,-5,-6,-7,-8:col=2 21000OTHERWISE 21010IFm$="D" IFncol=3 m$="" 21020col=0:IFncol>15 ORm$="C" ORm$="D" ORm$="R" col=2 21030IFncol=63 OR ncol=255 IFm$="D" col=0:ncol=256 21040ENDCASE 21050IFncol=1 THEN 21060CASE m$ OF 21070WHEN"C":col=0:x%=x%+1ANDNOT1 21080WHEN"D":col=0:x%=x%+3ANDNOT3 21090WHEN"T":col=0:x%=x%+1ANDNOT1 21100ENDCASE 21110ENDIF 21120IFsharpen%=TRUE sharpen%=24 21130DIM cl%(x%+7,col) 21140DIM xl%(x%+7,col),xp%(sx%+7,col) 21150DIM xl2%(x%+7,col) 21160IFsharpen% THEN 21170IForder% THEN 21180DIM rm%(sx%+7,col),rm1%(sx%+7,col),rm2%(sx%+7,col) 21190ELSE 21200DIM rm%(x%+7,col),rm1%(x%+7,col),rm2%(x%+7,col) 21210ENDIF 21220ENDIF 21230IFhist%ORequal% DIM vals%(256,col) 21240DIM nl%(x%+7,col) 21250totvals%=x%*(col+1) 21260totvals2%=sx%*(col+1) 21270FORZ=0TO2STEP2:P%=code% 21280CASE ncol OF 21290WHEN 2^24-1 21300[OPT Z 21310.div255 21320] 21330FORI%=0TO2^p6bits-1 21340[OPT Z 21350EQUD I%/(2^p6bits-1)*F 21360] 21370NEXT 21380[OPT Z 21390.fs% 21400STMFD SP !,{R14} 21410LDR R1,[R9,#5*8]:LDR R1,[R1] 21420LDR R10,[R9,#4*8] 21430LDR R11,[R9,#3*8] 21440LDR R12,[R9,#2*8]:LDR R12,[R12] 21450LDR R8,[R9,#8]:LDR R8,[R8] 21460LDR R9,[R9]:LDR R9,[R9] 21470LDR R4,[R10] 21480LDR R5,[R10,#4] 21490LDR R6,[R10,#8] 21500ADR R7,div255 21510.fsloop 21520ADD R10,R10,R8 21530CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 21540SUB R0,R4,R4,LSR #p6bits:ADD R0,R0,#1<<(bits-p6bits-1):MOV R0,R0,LSR #(bits-p6bits) 21550LDR R2,[R7,R0,LSL #2]:SUB R4,R4,R2 21560CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 21570SUB R3,R5,R5,LSR #p6bits:ADD R3,R3,#1<<(bits-p6bits-1):MOV R3,R3,LSR #(bits-p6bits):ORR R0,R0,R3,LSL #8 21580LDR R2,[R7,R3,LSL #2]:SUB R5,R5,R2 21590CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 21600SUB R3,R6,R6,LSR #p6bits:ADD R3,R3,#1<<(bits-p6bits-1):MOV R3,R3,LSR #(bits-p6bits):ORR R0,R0,R3,LSL #16 21610LDR R2,[R7,R3,LSL #2]:SUB R6,R6,R2 21620STRB R0,[R12]:MOV R0,R0,LSR #8:STRB R0,[R12,#1]:MOV R0,R0,LSR #8 21630STRB R0,[R12,#2] 21640] 21650IFm=-8 THEN 21660[OPT Z 21670ADD R12,R12,R1,LSL #2 21680] 21690ELSE 21700[OPT Z 21710ADD R12,R12,R1,LSL #1:ADD R12,R12,R1 21720] 21730ENDIF 21740IFdither% THEN 21750[OPT Z 21760ADD R0,R11,#4 21770ADD R2,R4,R4,LSL #1 21780LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 21790STR R3,[R11,-R8] 21800ADD R2,R4,R4,LSL #2 21810LDR R3,[R11]:ADD R3,R3,R2,ASR #4 21820STR R3,[R11] 21830MOV R3,R4,ASR #4 21840STR R3,[R11,R8]! 21850RSB R2,R4,R4,LSL #3 21860LDR R4,[R10] 21870ADD R4,R4,R2,ASR #4 21880ADD R2,R5,R5,LSL #1 21890LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 21900STR R3,[R0,-R8] 21910MOV R3,R5,ASR #4 21920STR R3,[R0,R8] 21930ADD R2,R5,R5,LSL #2 21940LDR R3,[R0]:ADD R3,R3,R2,ASR #4 21950STR R3,[R0],#4 21960RSB R2,R5,R5,LSL #3 21970LDR R5,[R10,#4] 21980ADD R5,R5,R2,ASR #4 21990ADD R2,R6,R6,LSL #1 22000LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 22010STR R3,[R0,-R8] 22020ADD R2,R6,R6,LSL #2 22030LDR R3,[R0]:ADD R3,R3,R2,ASR #4 22040STR R3,[R0] 22050MOV R3,R6,ASR #4 22060STR R3,[R0,R8] 22070RSB R2,R6,R6,LSL #3 22080LDR R6,[R10,#8] 22090ADD R6,R6,R2,ASR #4 22100] 22110ELSE 22120[OPT Z 22130LDMIA R10,{R4,R5,R6} 22140] 22150ENDIF 22160[OPT Z 22170SUBS R9,R9,#1:BNE fsloop 22180LDMFD SP !,{PC}^ 22190] 22200WHEN 2^15-1 22210[OPT Z 22220.div31 22230] 22240FORI%=0TO31 22250[OPT Z 22260EQUD I%/31*F 22270] 22280NEXT 22290[OPT Z 22300.fs% 22310STMFD SP !,{R14} 22320LDR R1,[R9,#5*8]:LDR R1,[R1] 22330LDR R10,[R9,#4*8] 22340LDR R11,[R9,#3*8] 22350LDR R12,[R9,#2*8]:LDR R12,[R12] 22360LDR R8,[R9,#8]:LDR R8,[R8] 22370LDR R9,[R9]:LDR R9,[R9] 22380LDR R4,[R10] 22390LDR R5,[R10,#4] 22400LDR R6,[R10,#8] 22410ADR R7,div31 22420.fsloop 22430ADD R10,R10,R8 22440CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 22450SUB R0,R4,R4,LSR #5:ADD R0,R0,#1<<(bits-6):MOV R0,R0,LSR #(bits-5) 22460LDR R2,[R7,R0,LSL #2]:SUB R4,R4,R2 22470CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 22480SUB R3,R5,R5,LSR #5:ADD R3,R3,#1<<(bits-6):MOV R3,R3,LSR #(bits-5):ORR R0,R0,R3,LSL #5 22490LDR R2,[R7,R3,LSL #2]:SUB R5,R5,R2 22500CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 22510SUB R3,R6,R6,LSR #5:ADD R3,R3,#1<<(bits-6):MOV R3,R3,LSR #(bits-5):ORR R0,R0,R3,LSL #10 22520LDR R2,[R7,R3,LSL #2]:SUB R6,R6,R2 22530STRB R0,[R12]:MOV R0,R0,LSR #8:STRB R0,[R12,#1]:ADD R12,R12,R1,LSL #1 22540] 22550IFdither% THEN 22560[OPT Z 22570ADD R0,R11,#4 22580ADD R2,R4,R4,LSL #1 22590LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 22600STR R3,[R11,-R8] 22610ADD R2,R4,R4,LSL #2 22620LDR R3,[R11]:ADD R3,R3,R2,ASR #4 22630STR R3,[R11] 22640MOV R3,R4,ASR #4 22650STR R3,[R11,R8]! 22660RSB R2,R4,R4,LSL #3 22670LDR R4,[R10] 22680ADD R4,R4,R2,ASR #4 22690ADD R2,R5,R5,LSL #1 22700LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 22710STR R3,[R0,-R8] 22720MOV R3,R5,ASR #4 22730STR R3,[R0,R8] 22740ADD R2,R5,R5,LSL #2 22750LDR R3,[R0]:ADD R3,R3,R2,ASR #4 22760STR R3,[R0],#4 22770RSB R2,R5,R5,LSL #3 22780LDR R5,[R10,#4] 22790ADD R5,R5,R2,ASR #4 22800ADD R2,R6,R6,LSL #1 22810LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 22820STR R3,[R0,-R8] 22830ADD R2,R6,R6,LSL #2 22840LDR R3,[R0]:ADD R3,R3,R2,ASR #4 22850STR R3,[R0] 22860MOV R3,R6,ASR #4 22870STR R3,[R0,R8] 22880RSB R2,R6,R6,LSL #3 22890LDR R6,[R10,#8] 22900ADD R6,R6,R2,ASR #4 22910] 22920ELSE 22930[OPT Z 22940LDMIA R10,{R4,R5,R6} 22950] 22960ENDIF 22970[OPT Z 22980SUBS R9,R9,#1:BNE fsloop 22990LDMFD SP !,{PC}^ 23000] 23010WHEN 256 23020[OPT Z 23030.div255 23040] 23050FORI%=0TO255 23060[OPT Z 23070EQUD I%/255*F 23080] 23090NEXT 23100[OPT Z 23120.fs% 23130STMFD SP !,{R14} 23140LDR R10,[R9,#4*8] 23150ADR R7,div255 23160LDR R1,[R9,#5*8]:LDR R1,[R1] 23170LDR R11,[R9,#3*8] 23180LDR R12,[R9,#2*8]:LDR R12,[R12] 23190LDR R8,[R9,#8]:LDR R8,[R8] 23200LDR R9,[R9]:LDR R9,[R9] 23210LDR R4,[R10],R8 23220.fsloop 23230CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 23240SUB R0,R4,R4,LSR #8:ADD R0,R0,#1<<(bits-9):MOV R0,R0,LSR #(bits-8):STRB R0,[R12],R1 23250LDR R2,[R7,R0,LSL #2] 23260] 23270IFdither% THEN 23280[OPT Z 23290SUB R4,R4,R2 23300MOVCS R4,#0 23310ADD R2,R4,R4,LSL #1 23320LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 23330STR R3,[R11,-R8] 23340ADD R2,R4,R4,LSL #2 23350LDR R3,[R11]:ADD R3,R3,R2,ASR #4 23360STR R3,[R11] 23370MOV R3,R4,ASR #4 23380STR R3,[R11,R8]! 23390RSB R2,R4,R4,LSL #3 23400LDR R4,[R10],R8 23410ADD R4,R4,R2,ASR #4 23420] 23430ELSE 23440[OPT Z 23450LDR R4,[R10],R8 23460] 23470ENDIF 23480[OPT Z 23490SUBS R9,R9,#1:BNE fsloop 23500LDMFD SP !,{PC}^ 23510] 23520WHEN 63,255 23530div15=P%:FORI%=0TO255*4STEP4 23540[OPT Z 23550EQUD (palette%!I%AND&FF)/255*F 23560EQUD (palette%!I%>>8AND&FF)/255*F 23570EQUD (palette%!I%>>16AND&FF)/255*F 23580] 23590NEXT 23600IFm$="R" THEN 23610[OPT Z 23620.ictloc EQUD ict% 23630] 23640ENDIF 23650[OPT Z 23660EQUD div15 23670.fs% 23680STMFD SP !,{R14} 23690LDR R1,[R9,#5*8]:LDR R1,[R1] 23700LDR R10,[R9,#4*8] 23710LDR R11,[R9,#3*8] 23720LDR R12,[R9,#2*8]:LDR R12,[R12] 23730LDR R8,[R9,#8]:LDR R8,[R8] 23740LDR R9,[R9]:LDR R9,[R9] 23750LDR R4,[R10] 23760LDR R5,[R10,#4] 23770LDR R6,[R10,#8] 23780LDR R7,fs%-4 23790.fsloop 23800ADD R10,R10,R8 23810] 23820CASE m$ OF 23830WHEN"T" 23840[OPT Z 23850CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 23860MOV R0,R4,LSR #(bits-4):CMP R0,#15:MOVCS R0,#15 23870CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 23880MOV R3,R5,LSR #(bits-4):CMP R3,#15:MOVCS R3,#15:ORR R0,R0,R3,LSL #4 23890CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 23900MOV R3,R6,LSR #(bits-4):CMP R3,#15:MOVCS R3,#15:ORR R0,R0,R3,LSL #8 23910LDR R3,colmatchloc 23920LDRB R0,[R3,R0] 23930ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2 23940LDR R2,[R3],#4:SUB R4,R4,R2 23950LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3 23960] 23970WHEN"R" 23980PROCsrchdevlist 23990OTHERWISE 24000[OPT Z 24010CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 24020CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 24030CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 24040STMFD SP !,{R7,R8,R9} 24050MVN R2,#0 24060MOV R3,#&30<<23 24070.srch RSB R7,R3,#&20<<23 24080MOV R8,R6,LSR #bits-8 24090SUB R8,R8,R8,LSR #4 24100ADDS R7,R7,R8,LSL #23 24110MOVVSS R7,#&7F000000 24120MOVMI R7,#0 24130AND R7,R7,#&60000000 24140ADD R7,R7,R3 24150ADD R14,R7,R7,LSR #4 24160ADD R7,R14,R14,LSR #8 24170ADD R7,R7,R7,LSR #16 24180SUBS R8,R6,R14,LSR #31-bits 24190RSBLT R8,R8,#0 24200MOV R8,R8,LSR #bits/2 24210MUL R9,R8,R8 24220RSB R7,R3,#&20<<23 24230MOV R8,R5,LSR #bits-8 24240SUB R8,R8,R8,LSR #4 24250ADDS R7,R7,R8,LSL #23 24260MOVVSS R7,#&7F000000 24270MOVMI R7,#0 24280AND R7,R7,#&60000000 24290ADD R7,R3,R7 24300ADD R7,R7,R7,LSR #4 24310ORR R14,R14,R7,LSR #8 24320ADD R7,R7,R7,LSR #8 24330ADD R7,R7,R7,LSR #16 24340SUBS R8,R5,R7,LSR #31-bits 24350RSBLT R8,R8,#0 24360MOV R8,R8,LSR #bits/2 24370MUL R7,R8,R8 24380ADD R7,R7,R7,LSL #2 24390ADD R9,R9,R7,LSL #1 24400RSB R7,R3,#&20<<23 24410MOV R8,R4,LSR #bits-8 24420SUB R8,R8,R8,LSR #4 24430ADDS R7,R7,R8,LSL #23 24440MOVVSS R7,#&7F000000 24450MOVMI R7,#0 24460AND R7,R7,#&60000000 24470ADD R7,R3,R7 24480ADD R7,R7,R7,LSR #4 24490ORR R14,R14,R7,LSR #16 24500ADD R7,R7,R7,LSR #8 24510ADD R7,R7,R7,LSR #16 24520SUBS R8,R4,R7,LSR #31-bits 24530RSBLT R8,R8,#0 24540MOV R8,R8,LSR #bits/2 24550MUL R7,R8,R8 24560ADD R7,R7,R7,LSL #1 24570ADD R9,R9,R7 24580CMP R9,R2 24590MOVLS R2,R9 24600MOVLS R0,R14 24610SUBS R3,R3,#&10<<23 24620BGE srch 24630AND R7,R0,#&40000000 24640MOV R8,R7,LSR #23 24650AND R7,R0,#&600000 24660ORR R8,R8,R7,LSR #16 24670AND R7,R0,#&4000 24680ORR R8,R8,R7,LSR #10 24690AND R7,R0,#&20000000 24700ORR R8,R8,R7,LSR #26 24710AND R7,R0,#&3800 24720ORR R0,R8,R7,LSR #11 24730LDMFD SP !,{R7,R8,R9} 24740ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2 24750LDR R2,[R3],#4:SUB R4,R4,R2 24760LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3 24770] 24780ENDCASE 24790[OPT Z 24800STRB R0,[R12],R1 24810] 24820IFdither% THEN 24830[OPT Z 24840ADD R0,R11,#4 24850ADD R2,R4,R4,LSL #1 24860LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 24870STR R3,[R11,-R8] 24880ADD R2,R4,R4,LSL #2 24890LDR R3,[R11]:ADD R3,R3,R2,ASR #4 24900STR R3,[R11] 24910MOV R3,R4,ASR #4 24920STR R3,[R11,R8]! 24930RSB R2,R4,R4,LSL #3 24940LDR R4,[R10] 24950ADD R4,R4,R2,ASR #4 24960ADD R2,R5,R5,LSL #1 24970LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 24980STR R3,[R0,-R8] 24990MOV R3,R5,ASR #4 25000STR R3,[R0,R8] 25010ADD R2,R5,R5,LSL #2 25020LDR R3,[R0]:ADD R3,R3,R2,ASR #4 25030STR R3,[R0],#4 25040RSB R2,R5,R5,LSL #3 25050LDR R5,[R10,#4] 25060ADD R5,R5,R2,ASR #4 25070ADD R2,R6,R6,LSL #1 25080LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 25090STR R3,[R0,-R8] 25100ADD R2,R6,R6,LSL #2 25110LDR R3,[R0]:ADD R3,R3,R2,ASR #4 25120STR R3,[R0] 25130MOV R3,R6,ASR #4 25140STR R3,[R0,R8] 25150RSB R2,R6,R6,LSL #3 25160LDR R6,[R10,#8] 25170ADD R6,R6,R2,ASR #4 25180] 25190ELSE 25200[OPT Z 25210LDMIA R10,{R4,R5,R6} 25220] 25230ENDIF 25240[OPT Z 25250SUBS R9,R9,#1:BNE fsloop 25260LDMFD SP !,{PC}^ 25270] 25280WHEN 15 25290divtable=P%:CASE m$ OF 25300WHEN "D" 25310WHEN "R" 25320FORI%=0TO15*4STEP4 25330[OPT Z 25340EQUD (palette%!I%>>4AND&F)/bright%*F 25350EQUD (palette%!I%>>12AND&F)/bright%*F 25360EQUD (palette%!I%>>20AND&F)/bright%*F 25370] 25380NEXT 25390[OPT Z 25400.ictloc EQUD ict% 25410] 25420WHEN "T" 25430FORI%=0TO15 25440[OPT Z 25450EQUD I%/bright%*F 25460] 25470NEXT 25480OTHERWISE 25490FORI%=0TO7 25500[OPT Z 25510EQUD I%/(bright%DIV2)*F 25520] 25530NEXT 25540ENDCASE 25550[OPT Z 25560.fs% 25570STMFD SP !,{R14} 25580LDR R1,[R9,#5*8]:LDR R1,[R1] 25590LDR R10,[R9,#4*8] 25600LDR R11,[R9,#3*8] 25610LDR R12,[R9,#2*8]:LDR R12,[R12] 25620LDR R8,[R9,#8]:LDR R8,[R8] 25630LDR R9,[R9]:LDR R9,[R9] 25640] 25650IFm$="D" ORm$="R" THEN 25660[OPT Z 25670LDR R4,[R10] 25680LDR R5,[R10,#4] 25690LDR R6,[R10,#8] 25700] 25710ELSE 25720[OPT Z 25730LDR R4,[R10],R8 25740] 25750ENDIF 25760IFm$<>"D" THEN 25770[OPT Z 25780ADR R7,divtable 25790] 25800ENDIF 25810[OPT Z 25820.fsloop 25830] 25840CASE m$ OF 25850WHEN"R" 25860[OPT Z 25870ADD R10,R10,R8 25880] 25890PROCsrchdevlist 25900[OPT Z 25910MOV r3,r0 25920] 25930WHEN "D" 25940[OPT Z 25950ADD R10,R10,R8 25960MOV R3,#0 25970CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 25980CMP R4,#F>>1 25990SUBCS R4,R4,#F:ORRCS R3,R3,#1 26000CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 26010CMP R5,#F>>1 26020SUBCS R5,R5,#F:ORRCS R3,R3,#2 26030CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 26040CMP R6,#F>>1 26050SUBCS R6,R6,#F:ORRCS R3,R3,#4 26060] 26070WHEN "T" 26080[OPT Z 26090CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 26100RSB R3,R4,R4,LSL #4:ADD R3,R3,#F>>1:MOV R3,R3,LSR #bits 26110LDR R2,[R7,R3,LSL #2] 26120SUB R4,R4,R2 26130] 26140OTHERWISE 26150[OPT Z 26160CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 26170RSB R3,R4,R4,LSL #3:ADD R3,R3,#F>>1:MOV R3,R3,LSR #bits 26180LDR R2,[R7,R3,LSL #2] 26190SUB R4,R4,R2 26200] 26210ENDCASE 26220[OPT Z 26230MOV R2,R12,LSR #1 26240TST R12,#1 26250LDRB R0,[R2] 26260ANDEQ R0,R0,#&F0:ORREQ R0,R0,R3 26270ANDNE R0,R0,#&0F:ORRNE R0,R0,R3,LSL #4 26280STRB R0,[R2] 26290ADD R12,R12,R1 26300] 26310IFm$="D" ORm$="R" THEN 26320IFdither% THEN 26330[OPT Z 26340ADD R0,R11,#4 26350ADD R2,R4,R4,LSL #1 26360LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 26370STR R3,[R11,-R8] 26380ADD R2,R4,R4,LSL #2 26390LDR R3,[R11]:ADD R3,R3,R2,ASR #4 26400STR R3,[R11] 26410MOV R3,R4,ASR #4 26420STR R3,[R11,R8]! 26430RSB R2,R4,R4,LSL #3 26440LDR R4,[R10] 26450ADD R4,R4,R2,ASR #4 26460ADD R2,R5,R5,LSL #1 26470LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 26480STR R3,[R0,-R8] 26490MOV R3,R5,ASR #4 26500STR R3,[R0,R8] 26510ADD R2,R5,R5,LSL #2 26520LDR R3,[R0]:ADD R3,R3,R2,ASR #4 26530STR R3,[R0],#4 26540RSB R2,R5,R5,LSL #3 26550LDR R5,[R10,#4] 26560ADD R5,R5,R2,ASR #4 26570ADD R2,R6,R6,LSL #1 26580LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 26590STR R3,[R0,-R8] 26600ADD R2,R6,R6,LSL #2 26610LDR R3,[R0]:ADD R3,R3,R2,ASR #4 26620STR R3,[R0] 26630MOV R3,R6,ASR #4 26640STR R3,[R0,R8] 26650RSB R2,R6,R6,LSL #3 26660LDR R6,[R10,#8] 26670ADD R6,R6,R2,ASR #4 26680] 26690ELSE 26700[OPT Z 26710LDMIA R10,{R4,R5,R6} 26720] 26730ENDIF 26740ELSE 26750IFdither% THEN 26760[OPT Z 26770ADD R2,R4,R4,LSL #1 26780LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 26790STR R3,[R11,-R8] 26800ADD R2,R4,R4,LSL #2 26810LDR R3,[R11]:ADD R3,R3,R2,ASR #4 26820STR R3,[R11] 26830MOV R3,R4,ASR #4 26840STR R3,[R11,R8]! 26850RSB R2,R4,R4,LSL #3 26860LDR R4,[R10],R8 26870ADD R4,R4,R2,ASR #4 26880] 26890ELSE 26900[OPT Z 26910LDR R4,[R10],R8 26920] 26930ENDIF 26940ENDIF 26950[OPT Z 26960SUBS R9,R9,#1:BNE fsloop 26970LDMFD SP !,{PC}^ 26980] 26990WHEN 3 27000divtable=P%:CASE m$ OF 27010WHEN "C" 27020WHEN "R" 27030FORI%=0TO3*4STEP4 27040[OPT Z 27050EQUD (palette%!I%>>4AND&F)/bright%*F 27060EQUD (palette%!I%>>12AND&F)/bright%*F 27070EQUD (palette%!I%>>20AND&F)/bright%*F 27080] 27090NEXT 27100OTHERWISE 27110[OPT Z 27120EQUD 0 27130EQUD 1/(bright%DIV4)*F 27140EQUD 2/(bright%DIV4)*F 27150EQUD F 27160] 27170ENDCASE 27180[OPT Z 27190.fs% 27200STMFD SP !,{R14} 27210LDR R1,[R9,#5*8]:LDR R1,[R1] 27220LDR R10,[R9,#4*8] 27230LDR R11,[R9,#3*8] 27240LDR R12,[R9,#2*8] 27250LDR R12,[R12] 27260LDR R8,[R9,#8] 27270LDR R8,[R8] 27280LDR R9,[R9] 27290LDR R9,[R9] 27300] 27310IFm$="C" ORm$="R" THEN 27320[OPT Z 27330LDR R4,[R10] 27340LDR R5,[R10,#4] 27350LDR R6,[R10,#8] 27360] 27370ELSE 27380[OPT Z 27390LDR R4,[R10],R8 27400] 27410ENDIF 27420[OPT Z 27430.fsloop 27440] 27450IFm$<>"C"THEN 27460[OPT Z 27470ADR R7,divtable 27480] 27490ENDIF 27500CASE m$ OF 27510WHEN"C" 27520[OPT Z 27530ADD R10,R10,R8 27540CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 27550CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 27560CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 27570MOV R3,#0 27580CMP R4,#F>>1:ORRCS R3,R3,#1 27590CMP R5,#F>>1:ORRCS R3,R3,#2 27600CMP R6,#F>>1:ORRCS R3,R3,#4 27610CMP R3,#6:MOVEQ R3,#1:BEQ octcyan 27620BCS octwhite 27630CMP R3,#4:BEQ octblue 27640MOVCS R3,#2:BCS octmagenta 27650CMP R3,#2:BEQ octgreen 27660BCS octyellow 27670CMP R3,#0:BEQ octblack 27680.octred 27690RSB R0,R4,#F 27700CMP R5,R0 27710BLT octred1 27720CMP R5,R6 27730MOVGE R3,#3 27740MOVLT R3,#2 27750B octconvert 27760.octred1 27770CMP R0,R6 27780MOVGE R3,#0 27790MOVLT R3,#2 27800B octconvert 27810.octgreen 27820RSB R0,R5,#F 27830CMP R0,R4 27840BLT octgreen1 27850CMP R0,R6 27860MOVGE R3,#0 27870MOVLT R3,#1 27880B octconvert 27890.octgreen1 27900CMP R4,R6 27910MOVGE R3,#3 27920MOVLT R3,#1 27930B octconvert 27940.octblue 27950RSB R0,R6,#F 27960CMP R0,R4 27970BLT octblue1 27980CMP R0,R5 27990MOVGE R3,#0 28000MOVLT R3,#1 28010B octconvert 28020.octblue1 28030CMP R4,R5 28040MOVGE R3,#2 28050MOVLT R3,#1 28060B octconvert 28070.octwhite 28080CMP R4,R5 28090BLT octwhite1 28100CMP R5,R6 28110MOVGE R3,#3 28120MOVLT R3,#2 28130B octconvert 28140.octwhite1 28150CMP R4,R6 28160MOVGE R3,#3 28170MOVLT R3,#1 28180.octconvert 28190CMP R3,#1 28200.octcyan 28210SUBEQ R5,R5,#F 28220SUBEQ R6,R6,#F 28230.octmagenta 28240CMP R3,#2 28250SUBEQ R4,R4,#F 28260SUBEQ R6,R6,#F 28270.octyellow 28280CMP R3,#3 28290SUBEQ R4,R4,#F 28300SUBEQ R5,R5,#F 28310.octblack 28320MOV R2,R12,LSR #2 28330AND R7,R12,#3:MOV R7,R7,LSL #1 28340MOV R14,#3 28350LDRB R0,[R2]:BIC R0,R0,R14,LSL R7:ORR R0,R0,R3,LSL R7:STRB R0,[R2] 28360ADD R12,R12,R1 28370] 28380WHEN"R" 28390[OPT Z 28400ADD R10,R10,R8 28410CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 28420CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 28430CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 28440STMFD SP !,{R8,R9,R10} 28450MVN R2,#0 28460MOV R3,#3 28470.srch ADD R14,R3,R3,LSL #1 28480ADD R14,R7,R14,LSL #2 28490LDMIA R14,{R8,R9,R10} 28500SUBS R8,R4,R8 28510RSBMI R8,R8,#0 28520SUBS R9,R5,R9 28530RSBMI R9,R9,#0 28540SUBS R10,R6,R10 28550RSBMI R10,R10,#0 28560MOV R14,R8,LSR #bits/2 28570MUL R8,R14,R14 28580MOV R14,R9,LSR #bits/2 28590MUL R9,R14,R14 28600MOV R14,R10,LSR #bits/2 28610MUL R10,R14,R14 28620ADD R9,R9,R9,LSL #2 28630ADD R8,R8,R8,LSL #1 28640ADD R14,R8,R9,LSL #1 28650ADD R14,R14,R10 28660CMP R14,R2 28670MOVCC R2,R14 28680MOVCC R0,R3 28690SUBS R3,R3,#1 28700BPL srch 28710LDMFD SP !,{R8,R9,R10} 28720ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2 28730LDR R2,[R3],#4:SUB R4,R4,R2 28740LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3 28750MOV R3,R0 28760MOV R2,R12,LSR #2 28770AND R7,R12,#3:MOV R7,R7,LSL #1 28780MOV R14,#3 28790LDRB R0,[R2]:BIC R0,R0,R14,LSL R7:ORR R0,R0,R3,LSL R7:STRB R0,[R2] 28800ADD R12,R12,R1 28810] 28820OTHERWISE 28830[OPT Z 28840CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 28850RSB R3,R4,R4,LSL #2:ADD R3,R3,#F>>1:MOV R3,R3,LSR#bits 28860LDR R2,[R7,R3,LSL #2] 28870SUB R4,R4,R2 28880MOV R2,R12,LSR #2 28890AND R5,R12,#3:MOV R5,R5,LSL #1 28900MOV R6,#3 28910LDRB R0,[R2]:BIC R0,R0,R6,LSL R5:ORR R0,R0,R3,LSL R5:STRB R0,[R2] 28920ADD R12,R12,R1 28930] 28940ENDCASE 28950IFm$="C" ORm$="R" THEN 28960IFdither% THEN 28970[OPT Z 28980ADD R0,R11,#4 28990ADD R2,R4,R4,LSL #1 29000LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 29010STR R3,[R11,-R8] 29020ADD R2,R4,R4,LSL #2 29030LDR R3,[R11]:ADD R3,R3,R2,ASR #4 29040STR R3,[R11] 29050MOV R3,R4,ASR #4 29060STR R3,[R11,R8]! 29070RSB R2,R4,R4,LSL #3 29080LDR R4,[R10] 29090ADD R4,R4,R2,ASR #4 29100ADD R2,R5,R5,LSL #1 29110LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 29120STR R3,[R0,-R8] 29130MOV R3,R5,ASR #4 29140STR R3,[R0,R8] 29150ADD R2,R5,R5,LSL #2 29160LDR R3,[R0]:ADD R3,R3,R2,ASR #4 29170STR R3,[R0],#4 29180RSB R2,R5,R5,LSL #3 29190LDR R5,[R10,#4] 29200ADD R5,R5,R2,ASR #4 29210ADD R2,R6,R6,LSL #1 29220LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 29230STR R3,[R0,-R8] 29240ADD R2,R6,R6,LSL #2 29250LDR R3,[R0]:ADD R3,R3,R2,ASR #4 29260STR R3,[R0] 29270MOV R3,R6,ASR #4 29280STR R3,[R0,R8] 29290RSB R2,R6,R6,LSL #3 29300LDR R6,[R10,#8] 29310ADD R6,R6,R2,ASR #4 29320] 29330ELSE 29340[OPT Z 29350LDMIA R10,{R4,R5,R6} 29360] 29370ENDIF 29380ELSE 29390IFdither% THEN 29400[OPT Z 29410ADD R2,R4,R4,LSL #1 29420LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 29430STR R3,[R11,-R8] 29440ADD R2,R4,R4,LSL #2 29450LDR R3,[R11]:ADD R3,R3,R2,ASR #4 29460STR R3,[R11] 29470MOV R3,R4,ASR #4 29480STR R3,[R11,R8]! 29490RSB R2,R4,R4,LSL #3 29500LDR R4,[R10],R8 29510ADD R4,R4,R2,ASR #4 29520] 29530ELSE 29540[OPT Z 29550LDR R4,[R10],R8 29560] 29570ENDIF 29580ENDIF 29590[OPT Z 29600SUBS R9,R9,#1:BNE fsloop 29610LDMFD SP !,{PC}^ 29620] 29630WHEN 1 29640CASE m$ OF 29650WHEN"C" 29660[OPT Z 29670.divtable EQUD 0 29680EQUD (1-black%/256*2)/16*F 29690EQUD (2-black%/256*4)/16*F 29700EQUD (3-black%/256*5)/16*F 29710EQUD (4-black%/256*6)/16*F 29720EQUD (5-black%/256*7)/16*F 29730EQUD (6-black%/256*8)/16*F 29740EQUD (7-black%/256*8)/16*F 29750EQUD (8-black%/256*8)/16*F 29760EQUD (9-black%/256*8)/16*F 29770EQUD (10-black%/256*8)/16*F 29780EQUD (11-black%/256*7)/16*F 29790EQUD (12-black%/256*6)/16*F 29800EQUD (13-black%/256*5)/16*F 29810EQUD (14-black%/256*4)/16*F 29820EQUD (15-black%/256*2)/16*F 29830EQUD F 29840.evenrow_gard DCD even_gard 29850.oddrow_gard DCD odd_gard 29860.rowinc DCD 0 29870.fs% 29880STMFD SP !,{R14} 29890LDR R1,[R9,#5*8]:LDR R1,[R1] 29900LDR R10,[R9,#4*8] 29910LDR R11,[R9,#3*8] 29920LDR R12,[R9,#2*8] 29930LDR R12,[R12] 29940LDR R8,[R9,#8] 29950LDR R8,[R8] 29960LDR R9,[R9] 29970LDR R9,[R9] 29980LDR R4,[R10],R8 29990TEQ R8,#0 30000LDRPL R6,evenrow_gard 30010LDRMI R6,oddrow_gard 30020MOV R1,R1,LSL #1 30030LDR R7,rowinc 30040ADR R14,divtable 30050.fsloop 30060CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 30070ADD R5,R4,#F>>5 30080MOVS R5,R5,LSR #bits-4 30090LDRNE R0,[R14,R5,LSL #2] 30100SUBNE R4,R4,R0 30110] 30120IFdither% THEN 30130[OPT Z 30140ADD R2,R4,R4,LSL #1 30150LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 30160STR R3,[R11,-R8] 30170ADD R2,R4,R4,LSL #2 30180LDR R3,[R11]:ADD R3,R3,R2,ASR #4 30190STR R3,[R11] 30200MOV R3,R4,ASR #4 30210STR R3,[R11,R8]! 30220RSB R2,R4,R4,LSL #3 30230LDR R4,[R10],R8 30240ADDS R4,R4,R2,ASR #4 30250] 30260ELSE 30270[OPT Z 30280LDR R4,[R10],R8 30290] 30300ENDIF 30310[OPT Z 30320CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 30330ADD R3,R4,#F>>5 30340MOVS R3,R3,LSR #bits-4 30350LDRNE R0,[R14,R3,LSL #2] 30360SUBNE R4,R4,R0 30370ORR R5,R5,R3,LSL #5:LDR R3,[R6,R5,LSL #2] 30380MOV R2,R12,LSR #1:STRB R3,[R2],R7:MOV R3,R3,LSR #8:STRB R3,[R2],R7 30390MOV R3,R3,LSR #8:STRB R3,[R2],R7:MOV R3,R3,LSR #8:STRB R3,[R2] 30400ADD R12,R12,R1 30410] 30420IFdither% THEN 30430[OPT Z 30440ADD R2,R4,R4,LSL #1 30450LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 30460STR R3,[R11,-R8] 30470ADD R2,R4,R4,LSL #2 30480LDR R3,[R11]:ADD R3,R3,R2,ASR #4 30490STR R3,[R11] 30500MOV R3,R4,ASR #4 30510STR R3,[R11,R8]! 30520RSB R2,R4,R4,LSL #3 30530LDR R4,[R10],R8 30540ADD R4,R4,R2,ASR #4 30550] 30560ELSE 30570[OPT Z 30580LDR R4,[R10],R8 30590] 30600ENDIF 30610[OPT Z 30620SUBS R9,R9,#2:BNE fsloop 30630LDMFD SP !,{PC}^ 30640] 30650WHEN"T" 30660[OPT Z 30670.divtable EQUD 0 30680EQUD (1-black%/256*2)/9*F 30690EQUD (2-black%/256*4)/9*F 30700EQUD (3-black%/256*5)/9*F 30710EQUD (4-black%/256*6)/9*F 30720EQUD (5-black%/256*6)/9*F 30730EQUD (6-black%/256*5)/9*F 30740EQUD (7-black%/256*4)/9*F 30750EQUD (8-black%/256*2)/9*F 30760EQUD F 30770.evenrow_gard DCD even_gard 30780.oddrow_gard DCD odd_gard 30790.rowinc DCD 0 30800.fs% 30810STMFD SP !,{R14} 30820LDR R1,[R9,#5*8]:LDR R1,[R1] 30830LDR R10,[R9,#4*8] 30840LDR R11,[R9,#3*8] 30850LDR R12,[R9,#2*8] 30860LDR R12,[R12] 30870LDR R8,[R9,#8] 30880LDR R8,[R8] 30890LDR R9,[R9] 30900LDR R9,[R9] 30910LDR R4,[R10],R8 30920TEQ R8,#0 30930LDRPL R6,evenrow_gard 30940LDRMI R6,oddrow_gard 30950MOV R1,R1,LSL #1 30960LDR R7,rowinc 30970ADR R14,divtable 30980.fsloop 30990CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 31000ADD R5,R4,#F>>4 31010ADD R5,R5,R5,LSL #3 31020MOVS R5,R5,LSR #bits 31030LDRNE R0,[R14,R5,LSL #2] 31040SUBNE R4,R4,R0 31050] 31060IFdither% THEN 31070[OPT Z 31080ADD R2,R4,R4,LSL #1 31090LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 31100STR R3,[R11,-R8] 31110ADD R2,R4,R4,LSL #2 31120LDR R3,[R11]:ADD R3,R3,R2,ASR #4 31130STR R3,[R11] 31140MOV R3,R4,ASR #4 31150STR R3,[R11,R8]! 31160RSB R2,R4,R4,LSL #3 31170LDR R4,[R10],R8 31180ADDS R4,R4,R2,ASR #4 31190] 31200ELSE 31210[OPT Z 31220LDR R4,[R10],R8 31230] 31240ENDIF 31250[OPT Z 31260CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 31270ADD R3,R4,#F>>4 31280ADD R3,R3,R3,LSL #3 31290MOVS R3,R3,LSR #bits 31300LDRNE R0,[R14,R3,LSL #2] 31310SUBNE R4,R4,R0 31320ORR R5,R5,R3,LSL #4:LDR R5,[R6,R5,LSL #2] 31330MOV R2,R12,LSR #1 31340AND R3,R5,#&3F 31350STRB R3,[R2],R7 31360MOV R3,R5,LSR #6:AND R3,R3,#&3F 31370STRB R3,[R2],R7 31380MOV R3,R5,LSR #12:STRB R3,[R2] 31390ADD R12,R12,R1 31400] 31410IFdither% THEN 31420[OPT Z 31430ADD R2,R4,R4,LSL #1 31440LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 31450STR R3,[R11,-R8] 31460ADD R2,R4,R4,LSL #2 31470LDR R3,[R11]:ADD R3,R3,R2,ASR #4 31480STR R3,[R11] 31490MOV R3,R4,ASR #4 31500STR R3,[R11,R8]! 31510RSB R2,R4,R4,LSL #3 31520LDR R4,[R10],R8 31530ADD R4,R4,R2,ASR #4 31540] 31550ELSE 31560[OPT Z 31570LDR R4,[R10],R8 31580] 31590ENDIF 31600[OPT Z 31610SUBS R9,R9,#2:BNE fsloop 31620LDMFD SP !,{PC}^ 31630] 31640WHEN"D" 31650[OPT Z 31660.divtable EQUD 0 31670EQUD (1-black%/256*2)/4*F 31680EQUD (2-black%/256*4)/4*F 31690EQUD (3-black%/256*2)/4*F 31700EQUD F 31710.evenrow_gard DCD even_gard 31720.oddrow_gard DCD odd_gard 31730.rowinc DCD 0 31740.fs% 31750STMFD SP !,{R14} 31760LDR R1,[R9,#5*8]:LDR R1,[R1] 31770LDR R10,[R9,#4*8] 31780LDR R11,[R9,#3*8] 31790LDR R12,[R9,#2*8] 31800LDR R12,[R12] 31810LDR R8,[R9,#8] 31820LDR R8,[R8] 31830LDR R9,[R9] 31840LDR R9,[R9] 31850LDR R4,[R10],R8 31860TEQ R8,#0 31870LDRPL R6,evenrow_gard 31880LDRMI R6,oddrow_gard 31890MOV R1,R1,LSL #1 31900LDR R7,rowinc 31910ADR R14,divtable 31920.fsloop 31930CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 31940ADD R5,R4,#F>>3 31950MOVS R5,R5,LSR #bits-2 31960LDRNE R0,[R14,R5,LSL #2] 31970SUBNE R4,R4,R0 31980] 31990IFdither% THEN 32000[OPT Z 32010ADD R2,R4,R4,LSL #1 32020LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 32030STR R3,[R11,-R8] 32040ADD R2,R4,R4,LSL #2 32050LDR R3,[R11]:ADD R3,R3,R2,ASR #4 32060STR R3,[R11] 32070MOV R3,R4,ASR #4 32080STR R3,[R11,R8]! 32090RSB R2,R4,R4,LSL #3 32100LDR R4,[R10],R8 32110ADDS R4,R4,R2,ASR #4 32120] 32130ELSE 32140[OPT Z 32150LDR R4,[R10],R8 32160] 32170ENDIF 32180[OPT Z 32190CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 32200ADD R3,R4,#F>>3 32210MOVS R3,R3,LSR #bits-2 32220LDRNE R0,[R14,R3,LSL #2] 32230SUBNE R4,R4,R0 32240ORR R5,R5,R3,LSL #3:LDRB R5,[R6,R5] 32250MOV R2,R12,LSR #2 32260TST R12,#2 32270AND R3,R5,#&F:LDRB R0,[R2] 32280ANDEQ R0,R0,#&F0:ORREQ R0,R0,R3 32290ANDNE R0,R0,#&0F:ORRNE R0,R0,R3,LSL #4 32300STRB R0,[R2],R7 32310MOV R3,R5,LSR #4:LDRB R0,[R2] 32320ANDEQ R0,R0,#&F0:ORREQ R0,R0,R3 32330ANDNE R0,R0,#&0F:ORRNE R0,R0,R3,LSL #4 32340STRB R0,[R2] 32350ADD R12,R12,R1 32360] 32370IFdither% THEN 32380[OPT Z 32390ADD R2,R4,R4,LSL #1 32400LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 32410STR R3,[R11,-R8] 32420ADD R2,R4,R4,LSL #2 32430LDR R3,[R11]:ADD R3,R3,R2,ASR #4 32440STR R3,[R11] 32450MOV R3,R4,ASR #4 32460STR R3,[R11,R8]! 32470RSB R2,R4,R4,LSL #3 32480LDR R4,[R10],R8 32490ADD R4,R4,R2,ASR #4 32500] 32510ELSE 32520[OPT Z 32530LDR R4,[R10],R8 32540] 32550ENDIF 32560[OPT Z 32570SUBS R9,R9,#2:BNE fsloop 32580LDMFD SP !,{PC}^ 32590] 32600OTHERWISE 32610[OPT Z 32620.fs% 32630STMFD SP !,{R14} 32640LDR R1,[R9,#5*8]:LDR R1,[R1] 32650LDR R10,[R9,#4*8] 32660LDR R11,[R9,#3*8] 32670LDR R12,[R9,#2*8] 32680LDR R12,[R12] 32690LDR R8,[R9,#8] 32700LDR R8,[R8] 32710LDR R9,[R9] 32720LDR R9,[R9] 32730LDR R4,[R10],R8 32740MOV R7,#1 32750.fsloop 32760CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 32770] 32780IFblack% THEN 32790[OPT Z 32800MOV R2,R12,LSR #3 32810AND R5,R12,#7:MOV R6,#1 32820LDRB R0,[R2,#-(x%+7>>3)] 32830SUB R3,R4,#F 32840CMP R7,#0 32850ADDNE R4,R4,#black%<<(bits-8) 32860ADDEQ R3,R3,#black%<<(bits-8) 32870TST R0,R6,LSL R5 32880ADDNE R4,R4,#black%<<(bits-8) 32890ADDEQ R3,R3,#black%<<(bits-8) 32900MOVS R0,R3:RSBMI R0,R3,#0 32910CMP R4,R0 32920MOVCC R3,#0 32930MOVCS R4,R3:MOVCS R3,#1 32940MOV R7,R3 32950] 32960ELSE 32970[OPT Z 32980ADD R3,R4,#F>>1:MOV R3,R3,LSR #bits 32990SUB R4,R4,R3,LSL #bits 33000MOV R2,R12,LSR #3 33010AND R5,R12,#7:MOV R6,#1 33020] 33030ENDIF 33040[OPT Z 33050LDRB R0,[R2]:BIC R0,R0,R6,LSL R5:ORR R0,R0,R3,LSL R5 33060STRB R0,[R2] 33070ADD R12,R12,R1 33080] 33090IFdither% THEN 33100[OPT Z 33110ADD R2,R4,R4,LSL #1 33120LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 33130STR R3,[R11,-R8] 33140ADD R2,R4,R4,LSL #2 33150LDR R3,[R11]:ADD R3,R3,R2,ASR #4 33160STR R3,[R11] 33170MOV R3,R4,ASR #4 33180STR R3,[R11,R8]! 33190RSB R2,R4,R4,LSL #3 33200LDR R4,[R10],R8 33210ADD R4,R4,R2,ASR #4 33220] 33230ELSE 33240[OPT Z 33250LDR R4,[R10],R8 33260] 33270ENDIF 33280[OPT Z 33290SUBS R9,R9,#1:BNE fsloop 33300LDMFD SP !,{PC}^ 33310] 33320ENDCASE 33330ENDCASE 33340[OPT Z 33350.sxloc DCD sx% 33360] 33370CASE col OF 33380WHEN 0 33390IFinput<=8 THEN 33400[OPT Z 33410.mappix% 33420LDR R0,sxloc 33430LDR R1,[R9]:LDR R1,[R1] 33440LDR R2,[R9,#3*8] 33450LDR R5,[R9,#4*8] 33460MOV R8,#0 33470.mappixlp 33480LDRB R6,[R1],#step24 33490] 33500ENDIF 33510CASE input OF 33520WHEN 8 33530IFham THEN 33540[OPT Z 33550ADR R9,ltable 33560MOVS R7,R6,LSR #4:AND R6,R6,#15 33570LDREQ R10,[R2,R6,LSL #2]:MOVEQ R11,R10:MOVEQ R12,R10 33580CMP R7,#1:LDREQ R12,[R9,R6,LSL #2] 33590CMP R7,#2:LDREQ R10,[R9,R6,LSL #2] 33600CMP R7,#3:LDREQ R11,[R9,R6,LSL #2] 33610ADD R3,R10,R11 33620ADD R3,R3,R12 33630MOV R3,R3,LSR #2 33640STMIA R5!,{R3} 33650SUBS R0,R0,#1:BNE mappixlp 33660MOVS PC,R14 33670.ltable 33680] 33690FORI%=0TO15 33700[OPT Z 33710EQUD I%/15*F 33720] 33730NEXT 33740ELSE 33750IFhpredict%=2 THEN 33760[OPT Z 33770ADD R6,R6,R8 33780AND R6,R6,#255 33790MOV R8,R6 33800] 33810ENDIF 33820[OPT Z 33830LDR R7,[R2,R6,LSL #2]:STR R7,[R5],#4 33840SUBS R0,R0,#1:BNE mappixlp 33850MOVS PC,R14 33860] 33870ENDIF 33880WHEN 4 33890IFbigendianbits THEN 33900[OPT Z 33910MOV R10,R6,LSR #4 33920LDR R7,[R2,R10,LSL #2] 33930AND R10,R6,#&F 33940] 33950ELSE 33960[OPT Z 33970AND R10,R6,#&F 33980LDR R7,[R2,R10,LSL #2] 33990MOV R10,R6,LSR #4 34000] 34010ENDIF 34020[OPT Z 34030LDR R8,[R2,R10,LSL #2]:STMIA R5!,{R7,R8} 34040SUBS R0,R0,#2:BHI mappixlp 34050MOVS PC,R14 34060] 34070WHEN 2 34080IFbigendianbits THEN 34090[OPT Z 34100MOV R10,R6,LSR #6 34110LDR R7,[R2,R10,LSL #2] 34120AND R10,R6,#&30 34130LDR R8,[R2,R10,LSR #2] 34140AND R10,R6,#&C 34150LDR R9,[R2,R10] 34160AND R10,R6,#&3 34170] 34180ELSE 34190[OPT Z 34200AND R10,R6,#&3 34210LDR R7,[R2,R10,LSL #2] 34220AND R10,R6,#&C 34230LDR R8,[R2,R10] 34240AND R10,R6,#&30 34250LDR R9,[R2,R10,LSR #2] 34260MOV R10,R6,LSR #6 34270] 34280ENDIF 34290[OPT Z 34300LDR R10,[R2,R10,LSL #2]:STMIA R5!,{R7,R8,R9,R10} 34310SUBS R0,R0,#4:BHI mappixlp 34320MOVS PC,R14 34330] 34340WHEN 1 34350IFbigendianbits THEN 34360[OPT Z 34370AND R10,R6,#&80 34380LDR R7,[R2,R10,LSR #5] 34390AND R10,R6,#&40 34400LDR R8,[R2,R10,LSR #4] 34410AND R10,R6,#&20 34420LDR R9,[R2,R10,LSR #3] 34430AND R10,R6,#&10 34440LDR R10,[R2,R10,LSR #2]:STMIA R5!,{R7,R8,R9,R10} 34450AND R10,R6,#&8 34460LDR R7,[R2,R10,LSR #1] 34470AND R10,R6,#&4 34480LDR R8,[R2,R10] 34490AND R10,R6,#&2 34500LDR R9,[R2,R10,LSL #1] 34510AND R10,R6,#&1 34520] 34530ELSE 34540[OPT Z 34550AND R10,R6,#&1 34560LDR R7,[R2,R10,LSL #2] 34570AND R10,R6,#&2 34580LDR R8,[R2,R10,LSL #1] 34590AND R10,R6,#&4 34600LDR R9,[R2,R10] 34610AND R10,R6,#&8 34620LDR R10,[R2,R10,LSR #1]:STMIA R5!,{R7,R8,R9,R10} 34630AND R10,R6,#&10 34640LDR R7,[R2,R10,LSR #2] 34650AND R10,R6,#&20 34660LDR R8,[R2,R10,LSR #3] 34670AND R10,R6,#&40 34680LDR R9,[R2,R10,LSR #4] 34690MOV R10,R6,LSR #7 34700] 34710ENDIF 34720[OPT Z 34730LDR R10,[R2,R10,LSL #2]:STMIA R5!,{R7,R8,R9,R10} 34740SUBS R0,R0,#8:BHI mappixlp 34750MOVS PC,R14 34760] 34770WHEN 16 34780[OPT Z 34790.mappix% 34800LDR R0,sxloc 34810LDR R1,[R9]:LDR R1,[R1] 34820LDR R2,[R9,#8]:LDR R2,[R2] 34830LDR R3,[R9,#4*8] 34840LDR R4,[R9,#3*8] 34850LDR R5,[R9,#2*8] 34860LDR R6,[R9,#5*8] 34870LDR R7,[R9,#6*8] 34880LDR R8,[R9,#7*8] 34890CMP R1,R2 34900ADDEQ R2,R2,#1 34910.mappixlp 34920LDRB R9,[R1],#step24:LDRB R10,[R2],#step24 34930LDR R9,[R6,R9,LSL #2]:LDR R10,[R7,R10,LSL #2]:ORR R9,R9,R10 34940AND R10,R9,#255:LDR R10,[R3,R10,LSL #2] 34950MOV R11,R9,LSR #8:AND R11,R11,#255:LDR R11,[R4,R11,LSL #2] 34960MOV R12,R9,LSR #16:LDR R12,[R5,R12,LSL #2] 34970ADD R10,R10,R11:ADD R10,R10,R12:STMIA R8!,{R10} 34980SUBS R0,R0,#1:BNE mappixlp 34990MOVS PC,R14 35000] 35010WHEN 24 35020[OPT Z 35030.mappix% 35040LDR R0,sxloc 35050LDR R1,[R9,#2*8]:LDR R1,[R1] 35060LDR R2,[R9,#8]:LDR R2,[R2] 35070LDR R3,[R9]:LDR R3,[R3] 35080LDR R4,[R9,#5*8] 35090LDR R5,[R9,#4*8] 35100LDR R6,[R9,#3*8] 35110LDR R7,[R9,#6*8] 35120STMFD SP !,{R14} 35130MOV r11,#0:MOV R12,#0:MOV R14,#0 35140.mappixlp 35150LDRB R8,[R1],#step24:LDRB R9,[R2],#step24:LDRB R10,[R3],#step24 35160] 35170IFhpredict%=2 THEN 35180[OPT Z 35190ADD r8,r8,r11 35200AND r8,r8,#255 35210MOV r11,r8 35220ADD r9,r9,r12 35230AND r9,r9,#255 35240MOV r12,r9 35250ADD r10,r10,r14 35260AND r10,r10,#255 35270MOV r14,r10 35280] 35290ENDIF 35300[OPT Z 35310LDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2] 35320ADD R8,R8,R9:ADD R8,R8,R10:STR R8,[R7],#4 35330SUBS R0,R0,#1:BNE mappixlp 35340LDMFD SP !,{PC}^ 35350] 35360WHEN 411 35370[OPT Z 35380.mappix% 35390LDR R0,sxloc 35400LDR R1,[R9]:LDR R1,[R1] 35410LDR R4,[R9,#1*8] 35420LDR R7,[R9,#8*8] 35430.mappixlp 35440LDRB R8,[R1],#2 35450LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4 35460SUBS R0,R0,#1:BNE mappixlp 35470MOVS PC,R14 35480] 35490WHEN 422 35500[OPT Z 35510.mappix% 35520LDR R0,sxloc 35530LDR R1,[R9]:LDR R1,[R1] 35540ADD R1,R1,#1 35550LDR R4,[R9,#1*8] 35560LDR R7,[R9,#8*8] 35570.mappixlp 35580LDRB R8,[R1],#2 35590LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4 35600SUBS R0,R0,#1:BNE mappixlp 35610MOVS PC,R14 35620] 35630WHEN 555 35640[OPT Z 35650.mappix% 35660LDR R0,sxloc 35670LDR R1,[R9]:LDR R1,[R1] 35680ADD R1,R1,#1 35690LDR R4,[R9,#1*8] 35700LDR R7,[R9,#8*8] 35710.mappixlp 35720LDRB R8,[R1],#2 35730AND R8,R8,#ymax% 35740LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4 35750SUBS R0,R0,#1:BNE mappixlp 35760MOVS PC,R14 35770] 35780ENDCASE 35790IFxmul%=2 AND xdiv%=1 THEN 35800[OPT Z 35820.xsample% 35830LDR R0,[R9]:LDR R0,[R0] 35840LDR R1,[R9,#8] 35850LDR R2,[R9,#2*8] 35860SUBS R0,R0,#2 35870BEQ xdonediv 35880BMI xdonediv 35890.xsamplelp 35900LDMIA R1,{R5,R6} 35910ADD R6,R6,R5 35920MOV R6,R6,LSR #1 35930STMIA R2!,{R5,R6} 35940ADD R1,R1,#4 35950SUBS R0,R0,#2:BGT xsamplelp 35960.xdonediv 35970LDMIA R1,{R5} 35980MOV R6,R5 35990STMIA R2!,{R5,R6} 36000MOVS PC,R14 36010] 36020ELSE 36030[OPT Z 36050.xsample% 36060LDR R0,[R9]:LDR R0,[R0] 36070LDR R1,[R9,#8] 36080LDR R2,[R9,#2*8] 36090LDR R3,[R9,#3*8]:LDR R3,[R3] 36100LDR R4,[R9,#4*8]:LDR R4,[R4] 36110MOV R11,R4 36120.xsamplelp 36130LDMIA R1,{R5} 36140SUBS R11,R11,#1:MOVEQ R11,R4:ADDEQ R1,R1,#4 36150SUBS R12,R3,#1 36160BEQ xdonediv 36170.xdivlp 36180CMP R12,R11 36190BCC xdivlp2 36200LDMIA R1!,{R8}:MLA R5,R8,R11,R5 36210SUBS R12,R12,R11:MOV R11,R4 36220BNE xdivlp 36230B xdonediv 36240.xdivlp2 36250LDMIA R1,{R8} 36260SUBS R11,R11,#1:MOVEQ R11,R4:ADDEQ R1,R1,#4 36270ADD R5,R5,R8 36280SUBS R12,R12,#1:BNE xdivlp 36290.xdonediv 36300STMIA R2!,{R5} 36310SUBS R0,R0,#1:BPL xsamplelp 36320MOVS PC,R14 36330] 36340ENDIF 36350WHEN 2 36360IFinput<=8 THEN 36370[OPT Z 36380.mappix% 36390LDR R0,sxloc 36400LDR R1,[R9]:LDR R1,[R1] 36410LDR R2,[R9,#3*8] 36420LDR R3,[R9,#2*8] 36430LDR R4,[R9,#8] 36440LDR R5,[R9,#4*8] 36450MOV R10,#0 36460.mappixlp 36470LDRB R6,[R1],#step24 36480] 36490ENDIF 36500CASE input OF 36510WHEN 8 36520IFham THEN 36530[OPT Z 36540ADR R9,ltable 36550MOVS R7,R6,LSR #4:AND R6,R6,#15 36560LDREQ R10,[R2,R6,LSL #2]:LDREQ R11,[R3,R6,LSL #2]:LDREQ R12,[R4,R6,LSL #2] 36570CMP R7,#1:LDREQ R12,[R9,R6,LSL #2] 36580CMP R7,#2:LDREQ R10,[R9,R6,LSL #2] 36590CMP R7,#3:LDREQ R11,[R9,R6,LSL #2] 36600STMIA R5!,{R10,R11,R12} 36610SUBS R0,R0,#1:BNE mappixlp 36620MOVS PC,R14 36630.ltable 36640] 36650FORI%=0TO15 36660[OPT Z 36670EQUD I%/15*F 36680] 36690NEXT 36700ELSE 36710IFhpredict%=2 THEN 36720[OPT Z 36730ADD R6,R6,R10 36740AND R6,R6,#255 36750MOV R10,R6 36760] 36770ENDIF 36780[OPT Z 36790LDR R7,[R2,R6,LSL #2]:LDR R8,[R3,R6,LSL #2]:LDR R9,[R4,R6,LSL #2] 36800STMIA R5!,{R7,R8,R9} 36810SUBS R0,R0,#1:BNE mappixlp 36820MOVS PC,R14 36830] 36840ENDIF 36850WHEN 4 36860IFbigendianbits THEN 36870[OPT Z 36880MOV R10,R6,LSR #4 36890LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 36900STMIA R5!,{R7,R8,R9} 36910AND R10,R6,#&F 36920] 36930ELSE 36940[OPT Z 36950AND R10,R6,#&F 36960LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 36970STMIA R5!,{R7,R8,R9} 36980MOV R10,R6,LSR #4 36990] 37000ENDIF 37010[OPT Z 37020LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 37030STMIA R5!,{R7,R8,R9} 37040SUBS R0,R0,#2:BHI mappixlp 37050MOVS PC,R14 37060] 37070WHEN 2 37080IFbigendianbits THEN 37090[OPT Z 37100MOV R10,R6,LSR #6 37110LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 37120STMIA R5!,{R7,R8,R9} 37130AND R10,R6,#&30 37140LDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2] 37150STMIA R5!,{R7,R8,R9} 37160AND R10,R6,#&C 37170LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10] 37180STMIA R5!,{R7,R8,R9} 37190AND R10,R6,#&3 37200] 37210ELSE 37220[OPT Z 37230AND R10,R6,#&3 37240LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 37250STMIA R5!,{R7,R8,R9} 37260AND R10,R6,#&C 37270LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10] 37280STMIA R5!,{R7,R8,R9} 37290AND R10,R6,#&30 37300LDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2] 37310STMIA R5!,{R7,R8,R9} 37320MOV R10,R6,LSR #6 37330] 37340ENDIF 37350[OPT Z 37360LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 37370STMIA R5!,{R7,R8,R9} 37380SUBS R0,R0,#4:BHI mappixlp 37390MOVS PC,R14 37400] 37410WHEN 1 37420IFbigendianbits THEN 37430[OPT Z 37440AND R10,R6,#&80 37450LDR R7,[R2,R10,LSR #5]:LDR R8,[R3,R10,LSR #5]:LDR R9,[R4,R10,LSR #5] 37460STMIA R5!,{R7,R8,R9} 37470AND R10,R6,#&40 37480LDR R7,[R2,R10,LSR #4]:LDR R8,[R3,R10,LSR #4]:LDR R9,[R4,R10,LSR #4] 37490STMIA R5!,{R7,R8,R9} 37500AND R10,R6,#&20 37510LDR R7,[R2,R10,LSR #3]:LDR R8,[R3,R10,LSR #3]:LDR R9,[R4,R10,LSR #3] 37520STMIA R5!,{R7,R8,R9} 37530AND R10,R6,#&10 37540LDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2] 37550STMIA R5!,{R7,R8,R9} 37560AND R10,R6,#&8 37570LDR R7,[R2,R10,LSR #1]:LDR R8,[R3,R10,LSR #1]:LDR R9,[R4,R10,LSR #1] 37580STMIA R5!,{R7,R8,R9} 37590AND R10,R6,#&4 37600LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10] 37610STMIA R5!,{R7,R8,R9} 37620AND R10,R6,#&2 37630LDR R7,[R2,R10,LSL #1]:LDR R8,[R3,R10,LSL #1]:LDR R9,[R4,R10,LSL #1] 37640STMIA R5!,{R7,R8,R9} 37650AND R10,R6,#&1 37660] 37670ELSE 37680[OPT Z 37690AND R10,R6,#&1 37700LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 37710STMIA R5!,{R7,R8,R9} 37720AND R10,R6,#&2 37730LDR R7,[R2,R10,LSL #1]:LDR R8,[R3,R10,LSL #1]:LDR R9,[R4,R10,LSL #1] 37740STMIA R5!,{R7,R8,R9} 37750AND R10,R6,#&4 37760LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10] 37770STMIA R5!,{R7,R8,R9} 37780AND R10,R6,#&8 37790LDR R7,[R2,R10,LSR #1]:LDR R8,[R3,R10,LSR #1]:LDR R9,[R4,R10,LSR #1] 37800STMIA R5!,{R7,R8,R9} 37810AND R10,R6,#&10 37820LDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2] 37830STMIA R5!,{R7,R8,R9} 37840AND R10,R6,#&20 37850LDR R7,[R2,R10,LSR #3]:LDR R8,[R3,R10,LSR #3]:LDR R9,[R4,R10,LSR #3] 37860STMIA R5!,{R7,R8,R9} 37870AND R10,R6,#&40 37880LDR R7,[R2,R10,LSR #4]:LDR R8,[R3,R10,LSR #4]:LDR R9,[R4,R10,LSR #4] 37890STMIA R5!,{R7,R8,R9} 37900MOV R10,R6,LSR #7 37910] 37920ENDIF 37930[OPT Z 37940LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 37950STMIA R5!,{R7,R8,R9} 37960SUBS R0,R0,#8:BHI mappixlp 37970MOVS PC,R14 37980] 37990WHEN 16 38000[OPT Z 38010.mappix% 38020LDR R0,sxloc 38030LDR R1,[R9]:LDR R1,[R1] 38040LDR R2,[R9,#8]:LDR R2,[R2] 38050LDR R3,[R9,#4*8] 38060LDR R4,[R9,#3*8] 38070LDR R5,[R9,#2*8] 38080LDR R6,[R9,#5*8] 38090LDR R7,[R9,#6*8] 38100LDR R8,[R9,#7*8] 38110CMP R1,R2 38120ADDEQ R2,R2,#1 38130.mappixlp 38140LDRB R9,[R1],#step24:LDRB R10,[R2],#step24 38150LDR R9,[R6,R9,LSL #2]:LDR R10,[R7,R10,LSL #2]:ORR R9,R9,R10 38160AND R10,R9,#255:LDR R10,[R3,R10,LSL #2] 38170MOV R11,R9,LSR #8:AND R11,R11,#255:LDR R11,[R4,R11,LSL #2] 38180MOV R12,R9,LSR #16:LDR R12,[R5,R12,LSL #2] 38190STMIA R8!,{R10,R11,R12} 38200SUBS R0,R0,#1:BNE mappixlp 38210MOVS PC,R14 38220] 38230WHEN 24 38240[OPT Z 38250.mappix% 38260LDR R0,sxloc 38270LDR R1,[R9,#2*8]:LDR R1,[R1] 38280LDR R2,[R9,#8]:LDR R2,[R2] 38290LDR R3,[R9]:LDR R3,[R3] 38300LDR R4,[R9,#5*8] 38310LDR R5,[R9,#4*8] 38320LDR R6,[R9,#3*8] 38330LDR R7,[R9,#6*8] 38340STMFD SP !,{R14} 38350MOV r11,#0:MOV R12,#0:MOV R14,#0 38360.mappixlp 38370LDRB R8,[R1],#step24:LDRB R9,[R2],#step24:LDRB R10,[R3],#step24 38380] 38390IFhpredict%=2 THEN 38400[OPT Z 38410ADD r8,r8,r11 38420AND r8,r8,#255 38430MOV r11,r8 38440ADD r9,r9,r12 38450AND r9,r9,#255 38460MOV r12,r9 38470ADD r10,r10,r14 38480AND r10,r10,#255 38490MOV r14,r10 38500] 38510ENDIF 38520[OPT Z 38530LDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2] 38540STMIA R7!,{R8,R9,R10} 38550SUBS R0,R0,#1:BNE mappixlp 38560LDMFD SP !,{PC}^ 38570] 38580WHEN 411 38600[OPT Z 38610.mappix% 38620LDR R0,sxloc 38630LDR R1,[R9]:LDR R1,[R1] 38640LDR R2,[R9,#1*8] 38650LDR R3,[R9,#2*8] 38660LDR R5,[R9,#4*8] 38670LDR R6,[R9,#5*8] 38680LDR R7,[R9,#6*8] 38690LDR R9,[R9,#8*8] 38700STMFD SP !,{R14} 38710.mappixlp 38720LDMIA R1!,{R4,R10} 38730AND R8,R4,#&C000 38740MOV R8,R8,LSR #8 38750AND R14,R4,#&C0000000 38760ORR R8,R8,R14,LSR #16+8+2 38770AND R14,R10,#&C000 38780ORR R8,R8,R14,LSR #8+4 38790ORR R8,R8,R10,LSR #16+8+6 38800AND R11,R4,#&3000 38810MOV R11,R11,LSR #6 38820AND R14,R4,#&30000000 38830ORR R11,R11,R14,LSR #16+6+2 38840AND R14,R10,#&3000 38850ORR R11,R11,R14,LSR #6+4 38860AND R14,R10,#&30000000 38870ORR R11,R11,R14,LSR #16+6+6 38890AND R12,R4,#&FF 38900LDR R12,[R2,R12,LSL #2] 38910LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12 38920MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 38930LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12 38940LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12 38950MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 38960AND R12,R4,#&FF 38970LDR R12,[R2,R12,LSL #2] 38980LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14 38990MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39010MOV R4,R4,LSR #16 39020AND R12,R4,#&FF 39030LDR R12,[R2,R12,LSL #2] 39040LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12 39050MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39060LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12 39070LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12 39080MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39090AND R12,R4,#&FF 39100LDR R12,[R2,R12,LSL #2] 39110LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14 39120MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39140AND R12,R10,#&FF 39150LDR R12,[R2,R12,LSL #2] 39160LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12 39170MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39180LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12 39190LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12 39200MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39210AND R12,R10,#&FF 39220LDR R12,[R2,R12,LSL #2] 39230LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14 39240MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39260MOV R10,R10,LSR #16 39270AND R12,R10,#&FF 39280LDR R12,[R2,R12,LSL #2] 39290LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12 39300MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39310LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12 39320LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12 39330MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39340AND R12,R10,#&FF 39350LDR R12,[R2,R12,LSL #2] 39360LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14 39370MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39390SUBS R0,R0,#4:BNE mappixlp 39400LDMFD SP !,{PC}^ 39410] 39420WHEN 423 39430[OPT Z 39440.mappix% 39450LDR R0,sxloc 39460LDR R1,[R9]:LDR R1,[R1] 39470LDR R2,[R9,#1*8] 39480LDR R3,[R9,#2*8] 39490LDR R4,[R9,#3*8] 39500LDR R5,[R9,#4*8] 39510LDR R6,[R9,#5*8] 39520LDR R7,[R9,#6*8] 39530LDR R8,[R9,#7*8] 39540LDR R9,[R9,#8*8] 39550STMFD SP !,{R14} 39560.mappixlp 39570LDR R10,[R1],#4 39580AND R11,R10,#&FF00 39590LDR R11,[R2,R11,LSR #6] 39600AND R12,R10,#&FF:LDR R12,[R7,R12,LSL #2]:ADD R14,R12,R11 39610AND R12,R10,#&FF0000:LDR R12,[R8,R12,LSR #14]:ADDS R14,R14,R12 39620MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39630AND R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11 39640AND R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12 39650MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39660AND R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADD R14,R12,R11 39670AND R12,R10,#&FF0000:LDR R12,[R4,R12,LSR #14]:ADDS R14,R14,R12 39680MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39690AND R11,R10,#&FF000000 39700LDR R11,[R2,R11,LSR #22] 39710AND R12,R10,#&FF:LDR R12,[R7,R12,LSL #2]:ADD R14,R12,R11 39720AND R12,R10,#&FF0000:LDR R12,[R8,R12,LSR #14]:ADDS R14,R14,R12 39730MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39740AND R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11 39750AND R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12 39760MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39770AND R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADD R14,R12,R11 39780AND R12,R10,#&FF0000:LDR R12,[R4,R12,LSR #14]:ADDS R14,R14,R12 39790MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39800SUBS R0,R0,#2:BNE mappixlp 39810LDMFD SP !,{PC}^ 39820] 39830WHEN 422 39840[OPT Z 39850.mappix% 39860LDR R0,sxloc 39870LDR R1,[R9]:LDR R1,[R1] 39880LDR R2,[R9,#1*8] 39890LDR R3,[R9,#2*8] 39900LDR R5,[R9,#4*8] 39910LDR R6,[R9,#5*8] 39920LDR R7,[R9,#6*8] 39930LDR R9,[R9,#8*8] 39940STMFD SP !,{R14} 39950.mappixlp 39960LDR R10,[R1],#4 39970AND R11,R10,#&FF00 39980LDR R11,[R2,R11,LSR #6] 39990AND R12,R10,#&FF0000:LDR R12,[R7,R12,LSR #14]:ADDS R14,R12,R11 40000MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 40010AND R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11 40020AND R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12 40030MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 40040AND R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADDS R14,R12,R11 40050MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 40060AND R11,R10,#&FF000000 40070LDR R11,[R2,R11,LSR #22] 40080AND R12,R10,#&FF0000:LDR R12,[R7,R12,LSR #14]:ADDS R14,R12,R11 40090MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 40100AND R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11 40110AND R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12 40120MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 40130AND R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADDS R14,R12,R11 40140MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 40150SUBS R0,R0,#2:BNE mappixlp 40160LDMFD SP !,{PC}^ 40170] 40180WHEN 555 40200[OPT Z 40210.mappix% 40220LDR R0,sxloc 40230LDR R1,[R9]:LDR R1,[R1] 40240LDR R2,[R9,#1*8] 40250LDR R3,[R9,#2*8] 40260LDR R5,[R9,#4*8] 40270LDR R6,[R9,#5*8] 40280LDR R7,[R9,#6*8] 40290LDR R9,[R9,#8*8] 40300STMFD SP !,{R14} 40310.mappixlp 40320LDR R10,[R1],#2 40330AND R11,R10,#ymax% 40340LDR R11,[R2,R11,LSL #2] 40350AND R8,R10,#((1<<vbits%)-1)<<(ybits%+ubits%) 40360AND R10,R10,#((1<<ubits%)-1)<<ybits% 40380LDR R12,[R7,R8,LSR #ybits%+ubits%-2]:ADDS R14,R12,R11 40390MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 40400LDR R12,[R5,R8,LSR #ybits%+ubits%-2]:ADD R14,R12,R11 40410LDR R12,[R6,R10,LSR #ybits%-2]:ADDS R14,R14,R12 40420MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 40430LDR R12,[R3,R10,LSR #ybits%-2]:ADDS R14,R12,R11 40440MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 40450SUBS R0,R0,#1:BNE mappixlp 40460LDMFD SP !,{PC}^ 40470] 40480ENDCASE 40490IFxmul%=2 AND xdiv%=1 THEN 40500[OPT Z 40520.xsample% 40530LDR R0,[R9]:LDR R0,[R0] 40540LDR R1,[R9,#8] 40550LDR R2,[R9,#2*8] 40560SUBS R0,R0,#2 40570BEQ xdonediv 40580BMI xdonediv 40590.xsamplelp 40600LDMIA R1,{R5,R6,R7,R8,R9,R10} 40610ADD R8,R8,R5 40620MOV R8,R8,LSR #1 40630ADD R9,R9,R6 40640MOV R9,R9,LSR #1 40650ADD R10,R10,R7 40660MOV R10,R10,LSR #1 40670STMIA R2!,{R5,R6,R7,R8,R9,R10} 40680ADD R1,R1,#12 40690SUBS R0,R0,#2:BGT xsamplelp 40700.xdonediv 40710LDMIA R1,{R5,R6,R7} 40720MOV R8,R5 40730MOV R9,R6 40740MOV R10,R7 40750STMIA R2!,{R5,R6,R7,R8,R9,R10} 40760MOVS PC,R14 40770] 40780ELSE 40790[OPT Z 40810.xsample% 40820LDR R0,[R9]:LDR R0,[R0] 40830LDR R1,[R9,#8] 40840LDR R2,[R9,#2*8] 40850LDR R3,[R9,#3*8]:LDR R3,[R3] 40860LDR R4,[R9,#4*8]:LDR R4,[R4] 40870MOV R11,R4 40880.xsamplelp 40890LDMIA R1,{R5,R6,R7} 40900SUBS R11,R11,#1:MOVEQ R11,R4:ADDEQ R1,R1,#12 40910SUBS R12,R3,#1 40920BEQ xdonediv 40930.xdivlp 40940CMP R12,R11 40950BCC xdivlp2 40960LDMIA R1!,{R8,R9,R10}:MLA R5,R8,R11,R5:MLA R6,R9,R11,R6:MLA R7,R10,R11,R7 40970SUBS R12,R12,R11:MOV R11,R4 40980BNE xdivlp 40990B xdonediv 41000.xdivlp2 41010LDMIA R1,{R8,R9,R10} 41020SUBS R11,R11,#1:MOVEQ R11,R4:ADDEQ R1,R1,#12 41030ADD R5,R5,R8:ADD R6,R6,R9:ADD R7,R7,R10 41040SUBS R12,R12,#1:BNE xdivlp 41050.xdonediv 41060STMIA R2!,{R5,R6,R7} 41070SUBS R0,R0,#1:BPL xsamplelp 41080MOVS PC,R14 41090] 41100ENDIF 41110ENDCASE 41120IFcompression=5 THEN 41130[OPT Z 41150.firstcode DCD 0 41160.oldcode DCD 0 41170.codesize DCD setcodes%+1 41180.stack DCD stk% 41190.sp DCD stk% 41200.maxcode DCD clearcode%+2 41210.maxcodesize DCD 2*clearcode% 41220.LZWdecode% 41230LDR R2,firstcode:LDR R3,oldcode:LDR R4,stack:LDR R5,codesize 41240LDR R6,sp:LDR R7,maxcode:LDR R8,maxcodesize 41250LDR R10,[R9]:LDR R10,[R10] 41260LDR R11,[R9,#8]:LDR R11,[R11] 41270LDR R12,[R9,#24] 41280STMFD SP !,{R14} 41290.lzwloop 41300CMP R6,R4 41310BHI lzwunstack 41320.lzwengine 41330BL getcode 41340CMP R0,#clearcode% 41350BEQ lzwclear 41370MOV R1,R0 41380CMP R0,R7 41390STRCSB R2,[R6],#1 41400MOVCS R0,R3 41410CMP R0,#clearcode% 41420BCC lzwdonepush 41430.lzwpushtable 41440LDR R14,[R12,R0,LSL #2] 41450STRB R14,[R6],#1 41460MOV R0,R14,LSR #16 41470CMP R0,#clearcode% 41480BCS lzwpushtable 41490.lzwdonepush 41500LDR R2,[R12,R0,LSL #2] 41510BIC R2,R2,#&FF0000 41520BIC R2,R2,#&FF000000 41530STRB R2,[R6],#1 41540CMP R7,#4096 41550BCS lzwnocode 41560ORR R0,R2,R3,LSL #16 41570STR R0,[R12,R7,LSL #2] 41580ADD R7,R7,#1 41590CMP R7,R8 41600BCC lzwnocode 41610CMP R8,#4096 41620ADDCC R5,R5,#1 41630MOVCC R8,R8,LSL #1 41640] 41650IFflag=1500 THEN 41660[OPT Z 41670ORRCC R8,R8,#1 41680] 41690ENDIF 41700[OPT Z 41710.lzwnocode 41720MOV R3,R1 41730CMP R6,R4 41740BLS lzwengine 41750.lzwunstack 41760LDRB R0,[R6,#-1]! 41770.lzwloopend 41780STRB R0,[R11],#1 41790SUBS R10,R10,#1 41800BNE lzwloop 41810STR R2,firstcode:STR R3,oldcode:STR R5,codesize 41820STR R6,sp:STR R7,maxcode:STR R8,maxcodesize 41830LDMFD SP !,{PC}^ 41840.lzwclear 41850MOV R0,#0 41860MOV R3,R12 41870.lzwdefaulttable 41880STR R0,[R3],#4 41890ADD R0,R0,#1:CMP R0,#clearcode% 41900BCC lzwdefaulttable 41910MOV R5,#setcodes%+1 41920MOV R7,#clearcode% 41930MOV R8,R7,LSL #1 41940] 41950IFflag=1500 THEN 41960[OPT Z 41970SUB R8,R8,#1 41980] 41990ENDIF 42000[OPT Z 42010ADD R7,R7,#2 42020BL getcode 42030MOV R2,R0 42040MOV R3,R0 42050MOV R6,R4 42060B lzwloopend 42080.curbit DCD 0 42090.lastbit DCD 0 42100.buf DCD buf% 42110.getcode 42120STMFD SP !,{R6,R7,R8} 42130ADR R6,curbit 42140LDMIA R6,{R6,R7,R8} 42150ADD R1,R5,R6 42160CMP R1,R7 42170BCS needmoredata 42180.simplecode 42190ADD R7,R8,R6,LSR #3 42200BIC R7,R7,#3 42210LDMIA R7,{R0,R7} 42220] 42230IFflag=1500 THEN 42240[OPT Z 42250EOR R1,R0,R0,ROR #16 42260BIC R1,R1,#&FF0000 42270MOV R0,R0,ROR #8 42280EOR R0,R0,R1,LSR #8 42290EOR R1,R7,R7,ROR #16 42300BIC R1,R1,#&FF0000 42310MOV R7,R7,ROR #8 42320EOR R7,R7,R1,LSR #8 42330ANDS R1,R6,#31:MOVNE R0,R0,LSL R1:RSBNE R1,R1,#32:ORRNE R0,R0,R7,LSR R1 42340RSB R1,R5,#32 42350MOV R0,R0,LSR R1 42360] 42370ELSE 42380[OPT Z 42390ANDS R1,R6,#31:MOVNE R0,R0,LSR R1:RSBNE R1,R1,#32:ORRNE R0,R0,R7,LSL R1 42400MVN R1,#0:BIC R0,R0,R1,LSL R5 42410] 42420ENDIF 42430[OPT Z 42440ADD R6,R6,R5 42450STR R6,curbit 42460LDMFD SP !,{R6,R7,R8} 42470MOV PC,R14 42480.needmoredata 42490STMFD SP !,{R2,R3,R4,R14} 42500MOV R3,R7,LSR #3 42510SUB R0,R3,#2 42520LDRB R0,[R8,R0] 42530STRB R0,[R8] 42540SUB R0,R3,#1 42550LDRB R0,[R8,R0] 42560STRB R0,[R8,#1] 42570LDR R1,[R9,#16] 42580LDR R1,[R1] 42590] 42600IFflag=1500 THEN 42610[OPT Z 42620MOV R0,#256 42630MOV R3,#256 42640] 42650ELSE 42660[OPT Z 42670BL bytefromcache% 42680MOVS R3,R0 42690BEQ simplecode1 42700] 42710ENDIF 42720[OPT Z 42730SUB R6,R6,R7 42740ADD R6,R6,#16 42750ADD R0,R0,#2 42760MOV R7,R0,LSL #3 42770STR R7,lastbit 42780ADD R2,R8,#2 42790BL multibytefromcache% 42800.simplecode1 42810LDMFD SP !,{R2,R3,R4,R14} 42820B simplecode 42830] 42840ENDIF 42850IFrange% THEN 42860[OPT Z 42880.maxmin% 42890LDR R0,[R9]:LDR R0,[R0] 42900LDR R1,[R9,#8] 42910LDR R2,min 42920LDR R3,max 42930.maxminlp 42940LDR R4,[R1],#4 42950CMP R4,R3:MOVCS R3,R4 42960CMP R4,R2:MOVCC R2,R4 42970SUBS R0,R0,#1:BNE maxminlp 42980STR R2,min 42990STR R3,max 43000MOVS PC,R14 43010.min DCD F 43020.max DCD 0 43030] 43040ENDIF 43050IFsharpen% THEN 43060sharp=(col+1)*4:IFsharpen%<>8 sharpmul%=F/(sharpen%-8) 43070[OPT Z 43090.sharp% 43100LDR R0,[R9]:LDR R0,[R0] 43110LDR R1,[R9,#8] 43120LDR R2,[R9,#16] 43130LDR R3,[R9,#24] 43140LDR R4,[R9,#32] 43150] 43160CASE sharpen% OF 43170WHEN 8,9,12,16,24 43180OTHERWISE 43190[OPT Z 43200MOV R8,#sharpmul% AND &FF 43210ORR R8,R8,#sharpmul% AND &FF00 43220MOV R9,#(sharpmul% >> 16) AND &FF 43230ORR R9,R9,#(sharpmul% >> 16) AND &FF00 43240] 43250ENDCASE 43260[OPT Z 43270.sharplp 43280LDR R5,[R1,#-sharp] 43290LDR R6,[R1,#sharp]:ADD R5,R5,R6 43300LDR R6,[R1],#4:ADD R5,R5,R6 43310LDR R6,[R3,#-sharp]:ADD R5,R5,R6 43320LDR R6,[R3,#sharp]:ADD R5,R5,R6 43330LDR R6,[R3],#4:ADD R5,R5,R6 43340LDR R6,[R2,#-sharp]:ADD R5,R5,R6 43350LDR R6,[R2,#sharp]:ADD R5,R5,R6 43360LDR R6,[R2],#4 43370MOV R6,R6,LSR #1 43380MOV R7,#sharpen% 43390MUL R7,R6,R7 43400SUBS R5,R7,R5,LSR #1 43410MOVCC R5,#0 43420] 43430CASE sharpen% OF 43440WHEN 8,9 43450[OPT Z 43460MOV R6,R5,LSL #1 43470] 43480WHEN 10 43490[OPT Z 43500MOV R6,R5 43510] 43520WHEN 12 43530[OPT Z 43540MOV R6,R5,LSR #1 43550] 43560WHEN 16 43570[OPT Z 43580MOV R6,R5,LSR #2 43590] 43600WHEN 24 43610[OPT Z 43620MOV R6,R5,LSR #3 43630] 43640OTHERWISE 43650[OPT Z 43660MOV R6,R5,LSR #16 43670EOR R5,R5,R6,LSL #16 43680MUL R7,R8,R5 43690MUL R5,R9,R5 43700MUL R10,R6,R8 43710MUL R6,R9,R6 43720ADDS R10,R5,R10 43730ADDCS R6,R6,#&10000 43740ADDS R7,R7,R10,LSL #16 43750ADC R6,R6,R10,LSR #16 43760MOV R6,R6,LSL #(32-27) 43770ORRS R6,R6,R7,LSR #27 43780ADDCS R6,R6,#1 43790] 43800ENDCASE 43810[OPT Z 43820CMP R6,#F:MOVCS R6,#F 43830STR R6,[R4],#4 43840SUBS R0,R0,#1 43850BNE sharplp 43860MOVS PC,R14 43870] 43880ENDIF 43890IFhist%ORequal% THEN 43900[OPT Z 43920.histo% 43930LDR R0,[R9]:LDR R0,[R0] 43940LDR R1,[R9,#8] 43950LDR R2,[R9,#16] 43960.histlp 43970LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F 43980MOV R3,R3,LSR #bits-8 43990] 44000IFcol=2 THEN 44010[OPT Z 44020ADD R3,R3,R3,LSL #1 44030LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2] 44040LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F 44050MOV R3,R3,LSR #bits-8 44060ADD R3,R3,R3,LSL #1:ADD R3,R3,#1 44070LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2] 44080LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F 44090MOV R3,R3,LSR #bits-8 44100ADD R3,R3,R3,LSL #1:ADD R3,R3,#2 44110] 44120ENDIF 44130[OPT Z 44140LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2] 44150SUBS R0,R0,#1 44160BNE histlp 44170MOVS PC,R14 44180] 44190ENDIF 44200IFequal% THEN 44210[OPT Z 44230.histequal% 44240LDR R0,[R9]:LDR R0,[R0] 44250LDR R1,[R9,#8] 44260LDR R2,[R9,#16] 44270.equallp 44280LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F 44290MOV R3,R3,LSR #bits-8 44300] 44310IFcol=2 THEN 44320[OPT Z 44330LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F 44340MOV R3,R3,LSR #bits-8 44350ADD R3,R3,R3,LSL #1 44360LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4 44370LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F 44380MOV R3,R3,LSR #bits-8 44390ADD R3,R3,R3,LSL #1:ADD R3,R3,#1 44400LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4 44410LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F 44420MOV R3,R3,LSR #bits-8 44430ADD R3,R3,R3,LSL #1:ADD R3,R3,#2 44440] 44450ENDIF 44460[OPT Z 44470LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4 44480SUBS R0,R0,#1 44490BNE equallp 44500MOVS PC,R14 44510] 44520ENDIF 44530CASE r$ OF 44540WHEN "FN800","FN801","FN1000","FN1001" 44550[OPT Z 44580.rlexpand% 44590LDR R0,[R9] 44600LDR R1,[R0] 44610LDR R2,[R9,#8]:LDR R2,[R2] 44620LDR R3,[R9,#16] 44630LDR R4,[R3] 44640CMP R4,#1:MOVLTS PC,R14 44650LDR R5,[R9,#24]:LDR R5,[R5] 44660.rle 44670STRB R2,[R1],#1 44680SUB R4,R4,#1 44690CMP R1,R5 44700TEQNE R4,#0 44710BNE rle 44720.rlexit 44730STR R1,[R0] 44740STR R4,[R3] 44750MOVS PC,R14 44760] 44770WHEN "FN902" 44780[OPT Z 44790.unpack% 44800LDR R0,[R9] 44810LDR R0,[R0] 44820LDR R1,plbuff 44830ADD R2,R0,#768 44840.unpackloop 44850LDR R3,[R0],#4 44860MOV R5,#0 44870.bitloop 44880MOV R6,R3,LSR R5 44890AND R6,R6,#15 44900ADD R5,R5,#4 44910MOV R7,R3,LSR R5 44920AND R7,R7,#15 44930ADD R5,R5,#4 44940STRB R7,[R1],#1 44950STRB R6,[R1],#1 44960CMP R5,#32 44970BNE bitloop 44980CMP R2,R0 44990BNE unpackloop 45000MOV PC,R14 45010.plbuff EQUD plbuff% 45020] 45030WHEN "FN1601","FN1501","FN1850","FN1851" 45040[OPT Z 45060.readiff% 45070MOV R1,#c% 45080LDR R8,[R9]:LDR R8,[R8] 45090LDR R7,[R9,#8]:LDR R7,[R7]:ADD R7,R7,R8 45100STMFD SP !,{R14} 45110] 45120IFr$="FN1850" OR r$="FN1851" THEN 45130[OPT Z 45140BL bytefromcache% 45150] 45160IFsy%>250 THEN 45170[OPT Z 45180BL bytefromcache% 45190] 45200ENDIF 45210ENDIF 45220[OPT Z 45230.rle 45240BL bytefromcache% 45250CMP R0,#128 45260BCC rle1 45270RSB R2,R0,#256 45280BL bytefromcache% 45290.rle0 STRB R0,[R8],#1 45300SUBS R2,R2,#1 45310BPL rle0 45320B rle2 45330.rle1 45340ADD R3,R0,#1 45350MOV R2,R8 45360ADD R8,R8,R3 45370BL multibytefromcache% 45380.rle2 45390CMP R8,R7 45400BCC rle 45410LDMFD SP !,{R14} 45420MOVS PC,R14 45430] 45440WHEN "FN1900","FN1100","FN400" 45450[OPT Z 45470.readline% 45480LDR R2,[R9]:LDR R2,[R2] 45490LDR R3,[R9,#8] 45500LDR R0,[R3] 45510LDR R4,[R9,#16] 45520LDR R5,[R4] 45530LDR R6,[R9,#24]:LDR R6,[R6]:ADD R6,R6,R2 45540STMFD SP !,{R14} 45550.rle 45560CMP R5,#1 45570BGE rle1 45580BL bytefromcache% 45590MOV R5,#1 45600] 45610IFflag=1900 THEN 45620[OPT Z 45630CMP R0,#192 45640ANDCS R5,R0,#63:BLCS bytefromcache% 45650] 45660ENDIF 45670IFflag=1100 THEN 45680[OPT Z 45690CMP R0,#128 45700BNE rle1 45710BL bytefromcache% 45720TEQ R0,#0 45730MOVEQ R0,#128 45740BEQ rle1 45750ADD R5,R0,#1 45760BL bytefromcache% 45770] 45780ENDIF 45790IFflag=400 THEN 45800[OPT Z 45810MOV R1,R0 45820BL bytefromcache% 45830ORR R1,R1,R0,LSL #8 45840BL bytefromcache% 45850ORR R1,R1,R0,LSL #16 45860BL bytefromcache% 45870ADD R5,R0,#1 45880MOV R0,R1 45890] 45900ENDIF 45910IFflag=200 THEN 45920[OPT Z 45930ADD R5,R0,#1 45940BL bytefromcache% 45950] 45960ENDIF 45970[OPT Z 45980.rle1 45990STRB R0,[R2],#1 46000] 46010IFflag=400 THEN 46020[OPT Z 46030MOV R1,R0,LSR #8 46040STRB R1,[R2],#1 46050MOV R1,R0,LSR #16 46060STRB R1,[R2],#1 46070] 46080ENDIF 46090[OPT Z 46100SUB R5,R5,#1 46110TEQ R2,R6 46120BNE rle 46130.rlexit 46140STR R0,[R3]:STR R5,[R4] 46150LDMFD SP !,{PC}^ 46160] 46170WHEN "FN2401" 46180[OPT Z 46190.bm_rle8 46200MOV R1,#c% 46210LDR R8,[R9]:LDR R8,[R8] 46220LDR R7,[R9,#8]:LDR R7,[R7]:ADD R7,R7,R8 46230STMFD SP !,{R14} 46240.rle 46250BL bytefromcache% 46260TEQ r0,#0 46270BEQ rlecopy 46290MOV r4,r0 46300BL bytefromcache% 46310.rle1 46320STRB r0,[r8],#1 46330SUBS r4,r4,#1 46340BGT rle1 46350B rle 46360.rlecopy 46380BL bytefromcache% 46390CMP r0,#3 46400BLT rlespecial 46410MOV r4,r0 46420.rle2 46440BL bytefromcache% 46450STRB r0,[r8],#1 46460BL bytefromcache% 46470SUBS r4,r4,#1 46480STRGTB r0,[r8],#1 46490SUBGTS r4,r4,#1 46500BGT rle2 46510B rle 46520.rlespecial 46630LDMFD SP !,{R14} 46640MOVS PC,R14 46650] 46660WHEN "FN2402" 46670[OPT Z 46680.bm_rle4 46690MOV R1,#c% 46700LDR R8,[R9]:LDR R8,[R8] 46710LDR R7,[R9,#8]:LDR R7,[R7]:ADD R7,R7,R8 46720STMFD SP !,{R14} 46730MOV r2,#0 46740MOV r3,#0 46750.rle 46760BL bytefromcache% 46770TEQ r0,#0 46780BEQ rlecopy 46800MOV r4,r0 46810BL bytefromcache% 46820.rle1 46830BL bmrle4_insert 46840CMP r3,#8 46850MOVGE r5,r2,LSR#24 46860STRGEB r5,[r8],#1 46870MOVGE r2,r2,LSL#8 46880SUBGE r3,r3,#8 46890CMP r4,#0 46900BGT rle1 46910B rle 46920.rlecopy 46940BL bytefromcache% 46950CMP r0,#3 46960BLT rlespecial 46970MOV r4,r0 46980.rle2 47000BL bytefromcache% 47010BL bmrle4_insert 47020BL bytefromcache% 47030CMP r4,#0 47040BLGT bmrle4_insert 47050B rle4 47060.rle3 47070MOV r5,r2,LSR#24 47080STRB r5,[r8],#1 47090MOV r2,r2,LSL#8 47100SUB r3,r3,#8 47110.rle4 47120CMP r3,#8 47130BGE rle3 47140CMP r4,#0 47150BGT rle2 47160B rle 47170.rlespecial 47270CMP r3,#0 47280MOVGT r5,r2,LSR#24 47290STRGTB r5,[r8],#1 47310LDMFD SP !,{R14} 47320MOVS PC,R14 47330.bmrle4_insert 47340RSB r5,r3,#32 47350MOV r2,r2,LSR r5 47360MOV r2,r2,LSL r5 47370SUB r5,r5,#8 47380ORR r2,r2,r0,LSL r5 47390SUBS r4,r4,#2 47400ADDMI r3,r3,#4 47410ADDPL r3,r3,#8 47420MOVS PC,R14 47430] 47440ENDCASE 47450IFcachebytes% THEN 47460[OPT Z 47470.bytefromcache% 47480STMFD SP !,{R1,R2} 47490LDR R1,incacheptr 47500LDR R2,numlefttogo 47510LDRB R0,[R1],#1 47520SUBS R2,R2,#1 47530STRNE R1,incacheptr 47540STRNE R2,numlefttogo 47550LDMFD SP !,{R1,R2} 47560MOVNE PC,R14 47570STMFD SP !,{R0,R1,R2,R3,R4} 47580LDR R2,valdatacache 47590STR R2,incacheptr 47600LDR R3,valcache 47610STR R3,numlefttogo 47620MOV R0,#4 47630MOV R1,#c% 47640SWI "OS_GBPB" 47650LDMFD SP !,{R0,R1,R2,R3,R4} 47660MOV PC,R14 47670.valdatacache DCD datacache% 47680.valcache DCD cache% 47690.incacheptr DCD datacache% 47700.numlefttogo DCD cache% 47710.multibytefromcache% 47720CMP R3,#0 47730MOVEQ PC,R14 47740STMFD SP !,{R0,R14} 47750.multibytefromcachel 47760BL bytefromcache% 47770STRB R0,[R2],#1 47780SUBS R3,R3,#1 47790BNE multibytefromcachel 47800LDMFD SP !,{R0,R14} 47810MOV PC,R14 47820] 47830ENDIF 47840IFplanar%<0 THEN 47850C%=7:IFflag=2600 C%=15 47860[OPT Z 47870.plancnv% 47880LDR R0,sxloc 47890LDR R1,[R9]:LDR R1,[R1] 47900LDR R3,[R9,#8]:LDR R3,[R3] 47910LDR R4,[R9,#16]:LDR R4,[R4] 47920] 47930IFflag=3500 THEN 47940[OPT Z 47950MOV R9,#0 47960] 47970ELSE 47980[OPT Z 47990MOV R9,#C% 48000] 48010ENDIF 48020[OPT Z 48030.planelp 48040MOV R7,#0 48050MOV R5,R3 48060] 48070FORN%=1TOplanes% 48080[OPT Z 48090LDR R6,[R5],R4 48100] 48110IFflag=2600 THEN 48120[OPT Z 48130MOV R6,R6,LSL #8 48140BIC R6,R6,#&FF000000 48150ORR R6,R6,R6,LSR #16 48160] 48170ENDIF 48180IFflag=3500 THEN 48190[OPT Z 48200MOV R6,R6,LSR R9 48210ANDS R6,R6,#1 48220ORR R7,R7,R6,LSL #(planes%-N%) 48230ORRNE R7,R7,#(planes%-1) 48240] 48250ELSE 48260[OPT Z 48270MOV R6,R6,LSR R9 48280AND R6,R6,#1 48290ORR R7,R7,R6,LSL #(N%-1) 48300] 48310ENDIF 48320NEXT 48330[OPT Z 48340STRB R7,[R1],#1 48350] 48360IFflag=3500 THEN 48370[OPT Z 48380ADD R9,R9,#1 48390CMP R9,#C%+1 48400MOVEQ R9,#0 48410] 48420ELSE 48430[OPT Z 48440SUBS R9,R9,#1:MOVMI R9,#C% 48450] 48460ENDIF 48470CASE flag OF 48480WHEN 2600 48490[OPT Z 48500MOVMI R3,R5 48510] 48520WHEN 3500 48530[OPT Z 48540ADDEQ R3,R3,#1 48550] 48560OTHERWISE 48570[OPT Z 48580ADDMI R3,R3,#1 48590] 48600ENDCASE 48610[OPT Z 48620SUBS R0,R0,#1:BNE planelp 48630MOVS PC,R14 48640] 48650ENDIF 48660NEXT 48670cputime%=TIME 48680IFcache% THEN 48690IFflag=3600 THEN 48700pcdblk%!12=cacherows%:PROCrefillpcd:IFcache%>=filesize% rowstogo%=-1 48710ELSE 48720IFstriprows%>0ANDcompression>1 THEN 48740SYS12,4,c%,datacache%,cache% 48750IFcachebytes% !incacheptr=datacache%:!numlefttogo=cache% 48760ELSE 48770PROCrefill:IFcache%>=filesize% rowstogo%=-1 48780ENDIF 48790ENDIF 48800ENDIF 48810CASE ncol OF 48820WHEN 2^24-1:size%=1 48830WHEN 2^15-1:size%=1 48840WHEN 63,255,256:size%=1 48850WHEN 15:size%=2 48860WHEN 3:size%=4 48870WHEN 1:size%=8:IFm$="C" size%=2 48880IFm$="D" size%=4 48890IFm$="T" size%=2 48900ENDCASE 48920CASE flag OF 48930WHEN 501:IFinfo% PRINT"Reading interlaced GIF" 48940sz%=sx%*sy%:plbuff%=FNdim(sz%+100) 48950FORY%=0TOsy%-1STEP8:X%=plbuff%+Y%*sx%:CALL LZWdecode%,table%(0),c%,X%,sx%:NEXT 48960FORY%=4TOsy%-1STEP8:X%=plbuff%+Y%*sx%:CALL LZWdecode%,table%(0),c%,X%,sx%:NEXT 48970FORY%=2TOsy%-1STEP4:X%=plbuff%+Y%*sx%:CALL LZWdecode%,table%(0),c%,X%,sx%:NEXT 48980FORY%=1TOsy%-1STEP2:X%=plbuff%+Y%*sx%:CALL LZWdecode%,table%(0),c%,X%,sx%:NEXT 48990datacache%=plbuff%:buff%=plbuff%:rowbytes%=sx%:rowstogo%=-1 49000ENDCASE 49010IFgamma<>1 AND gamma<>0 THEN 49020k=1/gamma:FORC%=0TO255 49030IFr%(C%) r%(C%)=((r%(C%)/F)^k)*F 49040IFg%(C%) g%(C%)=((g%(C%)/F)^k)*F 49050IFb%(C%) b%(C%)=((b%(C%)/F)^k)*F 49060NEXT 49070ENDIF 49080rmax=F:gmax=F:bmax=F 49090IFcol=0 THEN 49100IFinput<9 THEN 49110FORC%=0TO255:r%(C%)=r%(C%)*rwt+g%(C%)*gwt+b%(C%)*bwt:NEXT 49120ELSE 49130IFinput<400 THEN 49140rmax=F*rwt:gmax=F*gwt:bmax=F*bwt 49150FORC%=0TO255:r%(C%)=r%(C%)*rwt:g%(C%)=g%(C%)*gwt:b%(C%)=b%(C%)*bwt:NEXT 49160ENDIF 49170ENDIF 49180ENDIF 49190IFNOTorder% PROCadjustpalette(1/ydiv%/xdiv%,0) 49210IFrange% THEN 49220IFinfo% PRINT"Scanning data to compute parameters for '-range'" 49230IForder% THEN 49240Y%=0:REPEAT SYShour%,Y%*100DIVsy% 49250W%=EVAL(r$+"(xp%())"):CALLmaxmin%,xp%(1,0),totvals2%:Y%+=1 49260UNTILY%=sy% OR!min<255 AND!max+255>=F 49270ELSE 49280Y%=0:ysamp%=1:REPEAT SYShour%,Y%*100DIVy% 49290PROCscaledpixelrow(cl%()):CALLmaxmin%,cl%(1,0),totvals%:Y%+=1 49300UNTILY%=y% OR !min<255 AND !max+255>=F 49310ENDIF 49320IF!max+255>=F AND!min<255 range%=FALSE:range$="No point in '-range' on this image" 49330IFrange% PROCadjustpalette(F/(!max-!min),!min/ydiv%/xdiv%):range$="Input image maximum "+STR$(!max/F*100)+"% minimum "+STR$(!min/F*100)+"%" 49340PROCrewind:IFinfo% PRINTrange$ 49350ENDIF 49360IFhist% ORequal% THEN 49370IFequal% IFinfo% PRINT"Scanning data to compute parameters for '-equal'" 49380IForder% THEN 49390FORyr%=0TOsy%-1:SYShour%,yr%*100DIVsy% 49400W%=EVAL(r$+"(xp%())"):CALLhisto%,xp%(1,0),vals%(0,0),sx% 49410NEXT 49420ELSE 49430ysamp%=1:FORyr%=0TOy%-1:SYShour%,yr%*100DIVy% 49440PROCscaledpixelrow(cl%()):CALLhisto%,cl%(1,0),vals%(0,0),x% 49450NEXT 49460ENDIF 49470IFinfo% PRINT"Done. Now processing the picture" 49480ENDIF 49490IFinput<400 THEN 49500FORC%=0TO255 49510IFr%(C%)<0 r%(C%)=0 49520IFg%(C%)<0 g%(C%)=0 49530IFb%(C%)<0 b%(C%)=0 49540IFr%(C%)>rmax r%(C%)=rmax 49550IFg%(C%)>gmax g%(C%)=gmax 49560IFb%(C%)>bmax b%(C%)=bmax 49570NEXT 49580ENDIF 49590IFhist% THEN 49600M%=0:ZM%=-1:FORC%=0TOcol 49610FORZ%=0TO256:IFvals%(Z%,C%)>M% M%=vals%(Z%,C%):ZM%=Z% 49620NEXT:NEXT 49630IFZM%=-1 OR okinfo%=0 THEN=100 49640IF col>0 THEN 49650MODE66:ht=500 49660IFMODE<>66 MODE16:ht=400 49670LINE0,6,2000,6 49680ELSE 49690MODE18:ht=400:LINE0,6,1024,6 49700ENDIF 49710M=M%/(ht*2-8):FORC%=0TOcol:CASE C% OF 49720WHEN 0:GCOL1 49730WHEN 1:GCOL2 49740WHEN 2:GCOL4 49750ENDCASE 49760IF col>0 THEN 49770FORZ%=0TO256:IFvals%(Z%,C%) X%=Z%*3+C%<<1:LINEX%,8,X%,vals%(Z%,C%)/M+8 49780NEXT 49790ELSE 49800FORZ%=0TO256:IFvals%(Z%,C%) X%=Z%<<2:RECTANGLE FILLX%,8,2,vals%(Z%,C%)/M 49810NEXT 49820ENDIF 49830NEXT 49840PROCclose:SYS"Hourglass_Off" 49850=100 49860ENDIF 49870IFm>=0 oname$="p"+STR$m+m$ ELSEoname$=m$ 49880IFm=-6 ORm=-7 ORm=-8 oname$=pnm$ 49890IFrange% oname$+="r" 49900IFequal% oname$+="e" 49910IFsharpen% oname$+="s"+STR$sharpen% 49920IFblack% oname$+="b"+STR$black% 49930IFgamma<>1 A%=@%:@%=&1020100:oname$+="g"+STR$gamma:@%=A% 49940IFbright%=16 oname$+="b" 49950xsp%=x%:ysp%=y%:IFrotate% SWAP xsp%,ysp% 49960CASE m OF 49970WHEN -1:xwords%=xsp%:sz%=xwords%*ysp%:Y%=ysp% 49980PROCgetoutput(sz%,0,xwords%,Y%):base%=ram% 49990WHEN -3,-5:xwords%=xsp%*2:sz%=xwords%*ysp%:Y%=ysp% 50000PROCgetoutput(sz%,0,xwords%,Y%):base%=ram% 50010WHEN -4:xwords%=xsp%*3:sz%=xwords%*ysp%:Y%=ysp% 50020PROCgetoutput(sz%,0,xwords%,Y%):base%=ram% 50030WHEN -6:xwords%=xsp%*2+3ANDNOT3:sz%=xwords%*ysp%:Y%=ysp% 50040A%=Y%:PROCgetoutput(sz%,64,xwords%,Y%) 50050ram%!4=0:ram%!8=16:ram%!12=16:SYS&2e,&109,ram% 50060SYS&2e,&10f,ram%,oname$,0,xsp%*2,Y%,28 50070base%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords% 50080ram%!12=ram%!12-Y%*xwords%+A%*xwords% 50090base%!(10*4)=5<<27 OR nx<<1 OR ny<<14 OR 1:base%+=base%!(8*4) 50100WHEN -7:xwords%=xsp%*3+3ANDNOT3:sz%=xwords%*ysp%:Y%=ysp% 50110A%=Y%:PROCgetoutput(sz%,64,xwords%,Y%) 50120ram%!4=0:ram%!8=16:ram%!12=16:SYS&2e,&109,ram% 50130SYS&2e,&10f,ram%,oname$,0,xsp%*3,Y%,28 50140base%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords% 50150ram%!12=ram%!12-Y%*xwords%+A%*xwords% 50160base%!(10*4)=panic<<27 OR nx<<1 OR ny<<14 OR 1:base%+=base%!(8*4) 50170no magic number yet for new format 24bpp sprites 50180WHEN -8:xwords%=xsp%*4:sz%=xwords%*ysp%:Y%=ysp% 50190A%=Y%:PROCgetoutput(sz%,64,xwords%,Y%) 50200ram%!4=0:ram%!8=16:ram%!12=16:SYS&2e,&109,ram% 50210SYS&2e,&10f,ram%,oname$,0,xsp%*4,Y%,28 50220base%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords% 50230ram%!12=ram%!12-Y%*xwords%+A%*xwords% 50240base%!(10*4)=6<<27 OR nx<<1 OR ny<<14 OR 1:base%+=base%!(8*4) 50250OTHERWISE:xwords%=xsp%/size%+3.9999ANDNOT3:sz%=xwords%*ysp%:X%=xsp%:Y%=ysp% 50260IFncol=1 THEN 50270CASE m$ OF 50280WHEN"C":!rowinc=xwords%:xwords%=xwords%*4:sz%=xwords%*ysp%:X%=xsp%*4:Y%=ysp%*4 50290WHEN"T":!rowinc=xwords%:xwords%=xwords%*3:sz%=xwords%*ysp%:X%=xsp%*4:Y%=ysp%*3 50300WHEN"D":!rowinc=xwords%:xwords%=xwords%*2:sz%=xwords%*ysp%:X%=xsp%*2:Y%=ysp%*2 50310ENDCASE 50320ENDIF 50330A%=Y%:PROCgetoutput(sz%,2048+64,xwords%,Y%) 50340ram%!4=0:ram%!8=16:ram%!12=16:SYS&2e,&109,ram% 50350SYS&2e,&10f,ram%,oname$,(ncol<63)AND1,X%,Y%,spm 50360base%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords% 50370ram%!12=ram%!12-Y%*xwords%+A%*xwords% 50380pal%=base%+11*4:base%+=base%!(8*4) 50390CASE ncol OF 50400WHEN 256 50410!(pal%-8)+=2048:!(pal%-12)+=2048:base%+=2048:!(ram%+12)+=2048:!(pal%-44)+=2048 50420FORZ%=0TO255:B%=Z%ORZ%<<8ORZ%<<16:B%=B%<<8 50430pal%!(Z%*8)=B%:pal%!(Z%*8+4)=B%:NEXT 50440WHEN 255 50450!(pal%-8)+=2048:!(pal%-12)+=2048:base%+=2048:!(ram%+12)+=2048:!(pal%-44)+=2048 50460FORZ%=0TO255:B%=palette%!(Z%<<2)<<8 50470pal%!(Z%*8)=B%:pal%!(Z%*8+4)=B%:NEXT 50480WHEN 15 50490CASE m$ OF 50500WHEN "R" 50510FORZ%=0TO15:PROCcol(Z%,palette%!(Z%<<2)AND&F0F0F0):NEXT 50520WHEN "D" 50530FORZ%=0TO7:A%=0:IFZ%AND1 A%+=&F0 50540IFZ%AND2 A%+=&F000 50550IFZ%AND4 A%+=&F00000 50560PROCcol(Z%,A%):NEXT 50570WHEN "T" 50580FORZ%=0TO15:A%=Z%<<4:PROCcol(Z%,A%ORA%<<8ORA%<<16):NEXT 50590OTHERWISE 50600FORZ%=0TO15:A%=(Z%AND7)/7*15+.2<<4:PROCcol(Z%,A%ORA%<<8ORA%<<16):NEXT 50610ENDCASE 50620WHEN 3 50630CASEm$ OF 50640WHEN "C" 50650PROCcol(0,0):PROCcol(1,&F0F000):PROCcol(2,&F000F0):PROCcol(3,&F0F0) 50660WHEN "R" 50670FORZ%=0TO3:PROCcol(Z%,palette%!(Z%<<2)AND&F0F0F0):NEXT 50680OTHERWISE 50690FORZ%=0TO3:A%=Z%*5<<4:PROCcol(Z%,A%ORA%<<8ORA%<<16):NEXT 50700ENDCASE 50710WHEN 1:PROCcol(0,0):PROCcol(1,&F0F0F0) 50720ENDCASE 50730ENDCASE 50750IFflex% THEN 50770ELSE 50780IFworkspace%<0 THEN 50790P%=END:[OPT 0:STR r13,P%+16:MOVS Pc,r14:]:CALLEND 50800END=END+32*1024+HIMEM-P%!16 50810ELSE 50830ENDIF 50840ENDIF 50850LOCAL ERROR 50860ON ERROR LOCAL:RESTORE ERROR:PROCSave:ERROR ERR,REPORT$+" internal ("+STR$ERL+")" 50870SYS"Hourglass_LEDs",3 50880ysamp%=1:nl%()=0:step%=4*(col+1) 50890addr%=base%*size%:rowstep%=xwords%*size%:colstep%=1:dist%=xsp%-1 50900IFm=-3ORm=-5ORm=-6 dist%=dist%*2 50910IFm=-4ORm=-7 dist%=dist%*3 50920IFm=-8 dist%=dist%*4 50930IFrotate% THEN 50940odist%=dist%:SWAP colstep%,rowstep%:SWAP hflip%,vflip% 50950IFrotate%=1 THEN 50960addr%+=(ysp%-1)*colstep%:colstep%=-colstep%:dist%=(ysp%-1)*colstep% 50970ELSE 50980addr%+=dist%:rowstep%=-rowstep%:dist%=(ysp%-1)*colstep% 50990ENDIF 51000IFm=-3ORm=-5ORm=-6 colstep%=colstep%/2:rowstep%=rowstep%*2 51010IFm=-4ORm=-7 colstep%=colstep%/3:rowstep%=rowstep%*3 51020IFm=-8 colstep%=colstep%/4:rowstep%=rowstep%*4 51030ENDIF 51040IFhflip% THEN 51050addr%+=dist%:dist%=-dist%:colstep%=-colstep% 51060ENDIF 51070IFvflip% THEN 51080IFrotate% THEN 51090addr%+=odist%*rotate%:rowstep%=-rowstep% 51100ELSE 51110addr%+=(ysp%-1)*rowstep%:rowstep%=-rowstep% 51120ENDIF 51130ENDIF 51140outlim%=(base%+xwords%*Y%)*size%-1:oddcolstep%=-colstep%:oddstep%=-step% 51150IForder% PROCadjustpalette(1/ydiv%/xdiv%,0) 51160IFsy%=y% AND sx%=x% AND range%=FALSE AND sharpen%=FALSE AND equal%=FALSE THEN 51170IFdither% THEN 51180FORyr%=0 TO y%-1:SYShour%,yr%*100DIVy%:IFaddr%>outlim% PROCflushoutput 51190W%=EVAL(r$+"(cl%())"):cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep% 51200IFyr%AND1 THEN 51210CALLfs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B% 51220ELSE 51230A%+=dist%:CALLfs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B% 51240ENDIF 51250NEXT 51260ELSE 51270I%=step%:FORyr%=0TOy%-1:SYShour%,yr%*100DIVy%:IFaddr%>outlim% PROCflushoutput 51280W%=EVAL(r$+"(cl%())"):B%=x%:A%=addr%:addr%+=rowstep%:CALLfs%,colstep%,cl%(1,0),I%,A%,I%,B% 51290NEXT 51300ENDIF 51310ELSE 51320IFequal% THEN 51330PROCrewind:Havg%=SUM(vals%())/256/(col+1):DIM new%(256,col) 51340FORB%=0TOcol:R%=0:Hint%=0:FORZ%=0TO256:L%=R%:Hint%+=vals%(Z%,B%) 51350WHILEHint%>Havg%:Hint%-=Havg%:R%+=1:ENDWHILE 51360new%(Z%,B%)=(L%+R%)/2*F/256 51370NEXT:NEXT 51380ENDIF 51390IFsharpen% THEN 51400IForder% THEN 51410yread%=sy%-1:W%=EVAL(r$+"(rm1%())"):IFequal% PROCfit2(rm1%()) 51420FORB%=0TOcol:rm1%(0,B%)=rm1%(1,B%):rm1%(sx%+1,B%)=rm1%(sx%,B%):NEXT 51430ELSE 51440yread%=y%-1:PROCscaledpixelrow(rm1%()):IFequal% PROCfit(rm1%()) 51450FORB%=0TOcol:rm1%(0,B%)=rm1%(1,B%):rm1%(x%+1,B%)=rm1%(x%,B%):NEXT 51460ENDIF 51470rm2%()=rm1%() 51480ENDIF 51490IForder% THEN 51500FORyr%=0 TO y%-1 51510SYShour%,yr%*100DIVy%:IFaddr%>outlim% PROCflushoutput 51520IFsy%=y% THEN 51530PROCsharppixelrow(cl%()) 51540ELSE 51550ysamp%-=1:IFysamp%=0 PROCsharppixelrow(xl%()):ysamp%=ymul% 51560IFydiv%=1 THEN 51570cl%()=xl%() 51580ELSE 51590IFysamp%>=ydiv% THEN 51600ysamp%-=ydiv%:cl%()=xl%()*ydiv% 51610ELSE 51620cl%()=xl%()*ysamp%:Y%=ydiv%-ysamp%:ysamp%=0 51630REPEAT 51640IFysamp%=0 PROCsharppixelrow(xl%()):ysamp%=ymul% 51650IFysamp%>Y% THEN 51660ysamp%-=Y%:xl2%()=xl%()*Y%:cl%()=cl%()+xl2%():Y%=0 51670ELSE 51680Y%-=ysamp%:xl2%()=xl%()*ysamp%:cl%()=cl%()+xl2%():ysamp%=0 51690ENDIF 51700UNTIL Y%=0 51710ENDIF 51720ysamp%+=1 51730ENDIF 51740ENDIF 51750cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep% 51760IFyr%AND1 THEN 51770CALLfs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B% 51780ELSE 51790A%+=dist%:CALLfs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B% 51800ENDIF 51810NEXT 51820ELSE 51830FORyr%=0 TO y%-1 51840SYShour%,yr%*100DIVy%:IFaddr%>outlim% PROCflushoutput 51850IFsharpen% THEN 51860IFyread% yread%-=1:PROCscaledpixelrow(rm%()):IFequal% PROCfit(rm%()) 51870FORB%=0TOcol:rm%(0,B%)=rm%(1,B%):rm%(x%+1,B%)=rm%(x%,B%):NEXT 51880CALL sharp%,cl%(1,0),rm%(1,0),rm1%(1,0),rm2%(1,0),totvals% 51890SWAP rm2%(),rm1%():rm1%()=rm%() 51900ELSE 51910PROCscaledpixelrow(cl%()):IFequal% PROCfit(cl%()) 51920ENDIF 51930cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep% 51940IFyr%AND1 THEN 51950CALLfs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B% 51960ELSE 51970A%+=dist%:CALLfs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B% 51980ENDIF 51990NEXT 52000ENDIF 52010ENDIF 52020cputime%=TIME-cputime% 52030PROCSave 52040=0 52050DEF PROCsrchdevlist 52060[OPT Z 52090CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 52100MOV R0,R4,LSR #(bits-k%):CMP R0,#1<<k%:MOVCS R0,#(1<<k%)-1 52110CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 52120MOV R3,R5,LSR #(bits-k%):CMP R3,#1<<k%:MOVCS R3,#(1<<k%)-1:ORR R0,R0,R3,LSL #k% 52130CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 52140MOV R3,R6,LSR #(bits-k%):CMP R3,#1<<k%:MOVCS R3,#(1<<k%)-1:ORR R0,R0,R3,LSL #k%*2 52170STMFD SP !,{R8,R9,R10,R11} 52180LDR r3,ictloc 52190LDR r2,[r3,r0,LSL #2] 52210MOV r14,r2,lsr #24 52220CMP r14,#4 52230ADDCC r2,r3,r0,lsl #2 52240BICCS r2,r2,#&ff000000 52250LDRB r0,[r2],#1 52260SUBS r14,r14,#1 52270BEQ gotit 52290ADD r3,r0,r0,lsl #1 52300ADD r3,r7,r3,lsl #2 52310LDMIA r3,{r8,r9,r10} 52320SUBS r8,r8,r4 52330RSBMI r8,r8,#0 52340MOV r8,r8,lsr #bits/2 52350SUBS r9,r9,r5 52360RSBMI r9,r9,#0 52370MOV r9,r9,lsr #bits/2 52380SUBS r10,r10,r6 52390RSBMI r10,r10,#0 52400MOV r10,r10,lsr #bits/2 52410MUL r3,r8,r8 52420MUL r11,r9,r9 52430ADD r11,r11,r11,LSL #2 52440ADD r3,r3,r3,LSL #1 52450ADD r3,r3,r11,LSL #1 52460MLA r11,r10,r10,r3 52480.srchlist 52490LDRB r3,[r2],#1 52500ADD R8,R3,R3,LSL #1 52510ADD R8,R7,R8,LSL #2 52520LDMIA R8,{R8,R9,R10} 52530SUBS R9,R5,R9 52540RSBMI R9,R9,#0 52550MOV R3,R9,LSR #bits/2 52560MUL R9,R3,R3 52570ADD r9,r9,r9,LSL #2 52580CMP R11,R9,LSL #1 52590BCC srchquick 52600SUBS R8,R4,R8 52610RSBMI R8,R8,#0 52620MOV R3,R8,LSR #bits/2 52630MUL R8,r3,r3 52640ADD r8,r8,r8,LSL #1 52650ADD r8,r8,r9,LSL #1 52660SUBS R10,R6,R10 52670RSBMI R10,R10,#0 52680MOV R3,R10,LSR #bits/2 52690MLA R10,R3,R3,R8 52700CMP R10,R11 52710MOVCC R11,R10 52720LDRCCB R0,[r2,#-1] 52730.srchquick 52740SUBS R14,R14,#1 52750BNE srchlist 52760.gotit 52770ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2 52780LDMIA R3,{R8,R9,R10} 52790SUB R4,R4,R8:SUB R5,R5,R9:SUB R6,R6,R10 52800LDMFD r13!,{R8,R9,R10,R11} 52810] 52820ENDPROC 52830DEF PROCgetoutput(A%,E%,B%,RETURN C%) 52840IFA%>max% AND rotate%=FALSE AND vflip%=FALSE THEN 52850C%=max%DIVB%+1:A%=xwords%*C%+E%:first%=TRUE:o%=OPENOUTf$ 52860ELSE 52870A%+=E% 52880ENDIF 52890IFspritearea%<0 THEN 52900ram%=FNcreatearea(A%):IFram%=-1 ram%=FNdim(A%) 52910ELSE 52920ram%=spritearea% 52930ENDIF 52940!ram%=A% 52950ENDPROC 52970DEF FNcreatearea(size%) 52980LOCAL ERROR 52990areanumber%=0 53000ON ERROR LOCAL:=-1 53010SYS &20066,0,-1,size%,-1,%10000000,size%,0,0,"ChangeFSI sprite" TO ,areanumber%,,areabase%;V% 53020IFV%AND1 THENareanumber%=0:=-1 53080SYS "OS_ReadDynamicArea",areanumber% TO ,areasize% 53090IF areasize%<size% PROCremovearea:ERROR 42,"Couldn't create area" 53100=areabase% 53120DEF PROCremovearea 53130IFareanumber% SYS "OS_DynamicArea",1,areanumber%:areanumber%=0 53140ENDPROC 53160DEF FNcachedim(size%) 53170LOCAL ERROR 53180cacheareanumber%=0 53190ON ERROR LOCAL:=-1 53200SYS &20066,0,-1,size%,-1,%10000000,size%,0,0,"ChangeFSI cache" TO ,cacheareanumber%,,cacheareabase%;V% 53210IFV%AND1 THENcacheareanumber%=0:=-1 53220SYS "OS_ReadDynamicArea",cacheareanumber% TO ,cacheareasize% 53230IF cacheareasize%<size% PROCremovecachearea:ERROR 42,"Couldn't create area" 53240=cacheareabase% 53260DEF PROCremovecachearea 53270IFcacheareanumber% SYS "OS_DynamicArea",1,cacheareanumber%:cacheareanumber%=0 53280ENDPROC 53300DEF PROCflushoutput 53310IFspritearea%<0 ANDoksave% THEN 53320A%=base%:IFfirst% A%=ram%+4:first%=FALSE 53330SYS12,2,o%,A%,addr%DIVsize%-A% 53340ENDIF 53350addr%=base%*size% 53360ENDPROC 53370DEF PROCclose 53380IFc% IFflag=3600 SYS"PhotoCD_Close",pcdh%,1 53390IFc% CLOSE#c%:c%=0:IFscrapf% scrapf%=FALSE:OSCLI"Remove <Wimp$Scrap>" 53400IFcc% CLOSE#cc%:cc%=0 53410IFccc% CLOSE#ccc%:ccc%=0 53420PROCremovecachearea 53430ENDPROC 53440DEF PROCSave 53450PROCclose 53460CASE m OF 53470WHEN -1:IFspritearea%<0 ANDoksave% THEN 53480IFo% PROCflushoutput ELSESYS"OS_File",10,f$,&004,,ram%,ram%+sz% 53490ENDIF 53500WHEN -2:o%=OPENOUTf$:BPUT#o%,pnm$ 53510CASE pnm$ OF 53520WHEN "P1" 53530BPUT#o%,"# "+f$+".pbm (options "+oname$+")" 53540BPUT#o%,STR$xsp%+" "+STR$ysp% 53550FORY%=0TOysp%-1:B%=base%+Y%*xwords% 53560FORX%=0TOxsp%-1:IFB%?(X%>>3)AND(1<<(X%AND7)) BPUT#o%,"1"; ELSEBPUT#o%,"0"; 53570NEXT 53580BPUT#o%,"" 53590NEXT 53600WHEN "P4" 53610BPUT#o%,"# "+f$+".pbm (options "+oname$+") binary encoded" 53620BPUT#o%,STR$xsp%+" "+STR$ysp% 53630FORX%=0TO255:code%?X%=X%<<7 OR X%<<5AND&40 OR X%<<3AND&20 OR X%<<1AND&10 OR X%>>1AND8 OR X%>>3AND4 ORX%>>5AND2 ORX%>>7:NEXT 53640FORY%=0TOysp%-1:B%=base%+Y%*xwords% 53650FORX%=0TOxsp%-1STEP8:BPUT#o%,code%?(B%?(X%>>3)):NEXT 53660NEXT 53670WHEN "P2" 53680BPUT#o%,"# "+f$+".pgm (options "+oname$+")" 53690BPUT#o%,STR$xsp%+" "+STR$ysp% 53700BPUT#o%,"15" 53710FORY%=0TOysp%-1:B%=base%+Y%*xwords% 53720FORX%=0TOxsp%-1:C%=B%?(X%>>1):IFX%AND1 C%=C%>>4 ELSEC%=C%AND15 53730BPUT#o%," "+STR$C%; 53740NEXT 53750BPUT#o%,"" 53760NEXT 53770WHEN "P5" 53780BPUT#o%,"# "+f$+".pgm (options "+oname$+") binary encoded" 53790BPUT#o%,STR$xsp%+" "+STR$ysp% 53800BPUT#o%,"15" 53810FORY%=0TOysp%-1:B%=base%+Y%*xwords% 53820FORX%=0TOxsp%-1:C%=B%?(X%>>1):IFX%AND1 C%=C%>>4 ELSEC%=C%AND15 53830BPUT#o%,C% 53840NEXT 53850NEXT 53860ENDCASE 53870CLOSE#o%:o%=0 53880IFpnm$="P2"ORpnm$="P1" OSCLI"Settype "+f$+" &FFF" 53890WHEN -3:o%=OPENOUTf$:BPUT#o%,pnm$ 53900BPUT#o%,"# "+f$+".pcm (options "+oname$+") binary encoded 15bpp (5bits r,g,b)" 53910BPUT#o%,STR$xsp%+" "+STR$ysp% 53920BPUT#o%,"31" 53930SYS12,2,o%,ram%,xsp%*ysp%*2 53940CLOSE#o%:o%=0 53950WHEN -4:o%=OPENOUTf$:IFpnm$="IRLAM"THEN 53960BPUT#o%,"Irlam 24: "+STR$xsp%+" "+STR$ysp% 53970FORY%=0TOysp%-1:B%=ram%+Y%*xwords% 53980FORX%=0TOxsp%*3-1STEP3:BPUT#o%,B%?X%:NEXT 53990B%+=1:FORX%=0TOxsp%*3-1STEP3:BPUT#o%,B%?X%:NEXT 54000B%+=1:FORX%=0TOxsp%*3-1STEP3:BPUT#o%,B%?X%:NEXT 54010NEXT 54020ELSE 54030BPUT#o%,pnm$ 54040IFpnm$="P6" THEN 54050BPUT#o%,"# "+f$+".ppm (options "+oname$+") binary encoded 24bpp r,g,b" 54060ELSE 54070BPUT#o%,"# "+f$+".ppm (options "+oname$+") "+STR$(p6bits*3)+"bpp r,g,b" 54080ENDIF 54090BPUT#o%,STR$xsp%+" "+STR$ysp% 54100BPUT#o%,STR$(2^p6bits-1) 54110IFpnm$="P6" THEN 54120SYS12,2,o%,ram%,xsp%*ysp%*3 54130ELSE 54140FORY%=0TOysp%-1:B%=ram%+Y%*xwords% 54150FORX%=0TOxsp%-1:C%=B%!(X%*3):BPUT#o%," "+STR$(C%AND255)+" "+STR$((C%>>8)AND&FF)+" "+STR$((C%>>16)AND255); 54160NEXT 54170BPUT#o%,"" 54180NEXT 54190ENDIF 54200ENDIF 54210CLOSE#o%:o%=0 54220IFpnm$="P3" OSCLI"Settype "+f$+" &FFF" 54230WHEN -5:o%=OPENOUTf$:BPUT#o%,pnm$ 54240BPUT#o%,"# "+f$+".pcm (options "+oname$+") binary encoded 15bpp (5bits y,u,v)" 54250BPUT#o%,STR$xsp%+" "+STR$ysp% 54260BPUT#o%,"31 27 21" 54270SYS12,2,o%,ram%,xsp%*ysp%*2 54280CLOSE#o%:o%=0 54290OTHERWISE 54300IFncol=1ANDm$="T" THEN 54310FORX%=(xsp%*4-1)DIV8*8+6TO6STEP-8 54320SYS&2e,&12e,ram%,oname$,X% 54330SYS&2e,&12e,ram%,oname$,X% 54340NEXT 54350ENDIF 54360IFspritearea%<0 ANDoksave% THEN 54370IFo% PROCflushoutput ELSESYS&2e,&10c,ram%,f$ 54380ENDIF 54390ENDCASE 54400IFo% CLOSE#o%:o%=0:OSCLI"settype "+f$+" &ff9":PROCremovearea 54410SYS"Hourglass_Off" 54420ENDPROC 54430DEFPROCdefpal 54440FORC%=0TO255 54450r%(C%)=(C%AND7 OR (C%AND16)>>1)/15*F 54460g%(C%)=(C%AND3 OR (C%AND&60)>>3)/15*F 54470b%(C%)=(C%AND3 OR (C%AND8)>>1 OR (C%AND128)>>4)/15*F 54480NEXT 54490ENDPROC 54500DEFPROCdefpal2 54510r%(0)=F:g%(0)=F:b%(0)=F 54520ENDPROC 54530DEFPROCdefpal4 54540r%()=15,10,5,0:FORC%=0TO3:r%(C%)=r%(C%)/15*F:NEXT 54550g%()=r%():b%()=r%() 54560ENDPROC 54570DEFPROCdefpal16 54580r%()=15,13,11,9,7,5,3,0,0,14, 0,13,14,5,15, 0 54590g%()=15,13,11,9,7,5,3,0,4,14,12, 0,14,8,11,10 54600b%()=15,13,11,9,7,5,3,0,9, 0, 0, 0,11,0, 0,15 54610FORC%=0TO15:r%(C%)=r%(C%)/15*F:g%(C%)=g%(C%)/15*F:b%(C%)=b%(C%)/15*F:NEXT 54620ENDPROC 54630DEFPROCipal63 54640PTR#c%=&38:DIM rpal%(15),gpal%(15),bpal%(15) 54650FORC%=0TO15:D%=BGET#c% 54660rpal%(C%)=BGET#c%>>4 AND 7 54670gpal%(C%)=BGET#c%>>4 AND 3 54680bpal%(C%)=BGET#c%>>4 AND 7 54690D%=FNW:NEXT 54700FORC%=0TO255 54710r%(C%)=(rpal%(C%AND15)OR(C%AND16)>>1)/15*F 54720g%(C%)=(gpal%(C%AND15)OR(C%AND&60)>>3)/15*F 54730b%(C%)=(bpal%(C%AND15)OR(C%AND128)>>4)/15*F 54740NEXT 54750ENDPROC 54760DEFPROCipal(D%) 54770PTR#c%=&38 54780FORC%=0TOD%-1:D%=BGET#c% 54790r%(C%)=(BGET#c%>>4)/15*F 54800g%(C%)=(BGET#c%>>4)/15*F 54810b%(C%)=(BGET#c%>>4)/15*F 54820D%=FNW:NEXT 54830ENDPROC 54840DEF PROCnewropal(D%) 54850PTR#c%=&38 54860FORC%=0TOD%-1:D%=FNW 54870r%(C%)=(D%AND255)/255*F 54880g%(C%)=(D%>>8AND255)/255*F 54890b%(C%)=(D%>>16AND255)/255*F 54900D%=FNW:NEXT 54910ENDPROC 54920DEF PROCnopal 54930FORC%=0TO255:r%(C%)=C%/255*F:NEXT:g%()=r%():b%()=r%() 54940ENDPROC 54950DEF PROCcol(A%,B%) 54960B%=B%<<8ORB%<<4OR&10:pal%!(A%*8)=B%:pal%!(A%*8+4)=B% 54970ENDPROC 54980DEF FNbits(A%) 54990IFA%=1 THEN="1 bit per pixel" ELSE=STR$A%+" bits per pixel" 55000DEF FNfits 55010LOCALZ%,s$ 55020FORZ%=1TO80:s$+=CHR$BGET#c%:NEXT 55030=s$ 55040DEF FNuc(a$) 55050LOCALZ%,z$,b$ 55060FORZ%=1TOLENa$ 55070z$=MID$(a$,Z%,1) 55080IFz$>="a"IFz$<="z" z$=CHR$(ASCz$-32) 55090b$+=z$:NEXT 55100=b$ 55110DEF FNdim(A%) 55120LOCAL B% 55130IFflex% THEN 55140B%=nextlocation%:A%=A%+3ANDNOT3:nextlocation%+=A% 55150SYS"Wimp_SlotSize",-1,-1 TO currentslot% 55160IFcurrentslot%+&8000<nextlocation% THEN 55170SYS "Wimp_SlotSize",nextlocation%-&8000,-1 TO currentslot% 55180IFcurrentslot%+&8000<nextlocation% ERROR 42,"Can't get enough memory to process image" 55190ENDIF 55200ELSE 55210IFworkspace%<0 THEN 55220DIM B% A% 55230ELSE 55240B%=workspace%:workspace%+=A%+3ANDNOT3:IFworkspace%>worklimit% ERROR42,"Not enough workspace" 55250ENDIF 55260ENDIF 55270=B% 55290DEF FNW=FNW1(c%) 55300DEF FNW1(c%)=BGET#c% OR BGET#c%<<8 OR BGET#c%<<16 OR BGET#c%<<24 55320DEF FNHW=BGET#c% OR BGET#c%<<8 55340DEF FNbeHW=BGET#c%<<8 OR BGET#c% 55360DEF FNbeW=BGET#c%<<24 OR BGET#c%<<16 OR BGET#c%<<8 OR BGET#c% 55380DEF FNtiff(T%) 55390CASE T% OF 55400WHEN 1,7:=BGET#c% 55410WHEN 2:LOCALs$,t$:REPEATs$+=t$:t$=CHR$BGET#c%:UNTILt$=CHR$0:=s$ 55420WHEN 3:IFbigendian THEN=BGET#c%<<8 OR BGET#c% ELSE=BGET#c% OR BGET#c%<<8 55430WHEN 4,9:IFbigendian THEN=FNbeW ELSE=FNW1(c%) 55440WHEN 6:=(BGET#c%<<24)>>24 55450WHEN 8:=(FNtiff(3)<<16)>>16 55460ENDCASE 55470ERROR 42,"Silly TIFF tag:"+STR$T% 55480DEF PROCnextstrip 55490rowstogo%=striprows% 55500stripptr+=1:PTR#c%=st%(stripptr) 55510IFcompression=5 THEN 55520!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk% 55530!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0 55540ENDIF 55550IFcompression=5 OR compression=32773 THEN 55560!incacheptr=datacache%:!numlefttogo=cache% 55570SYS12,4,c%,datacache%,cache% 55580ENDIF 55590ENDPROC 55600DEF PROCwatford(wtsx%,RETURN rep%,RETURN wt%,X%,c%) 55610CALLrlexpand%,wtsx%,rep%,wt%,X% 55620REPEAT C%=BGET#c%:CASE C%>>6 OF 55630WHEN 0:?X%=C%:X%+=1:wt%=C% 55640WHEN 1:wt%-=1:rep%=C%AND63:CALLrlexpand%,wtsx%,rep%,wt%,X% 55650WHEN 2:rep%=C%AND63:CALLrlexpand%,wtsx%,rep%,wt%,X% 55660WHEN 3:wt%+=1:rep%=C%AND63:CALLrlexpand%,wtsx%,rep%,wt%,X% 55670ENDCASE 55680UNTILX%=wtsx% 55690ENDPROC 55700DEF PROCwatfordcache(wtsx%,RETURN rep%,RETURN wt%,X%) 55710CALLrlexpand%,wtsx%,rep%,wt%,X% 55720REPEAT C%=USRbytefromcache%:CASE C%>>6 OF 55730WHEN 0:?X%=C%:X%+=1:wt%=C% 55740WHEN 1:wt%-=1:rep%=C%AND63:CALLrlexpand%,wtsx%,rep%,wt%,X% 55750WHEN 2:rep%=C%AND63:CALLrlexpand%,wtsx%,rep%,wt%,X% 55760WHEN 3:wt%+=1:rep%=C%AND63:CALLrlexpand%,wtsx%,rep%,wt%,X% 55770ENDCASE 55780UNTILX%=wtsx% 55790ENDPROC 55800DEF PROCreduce(RETURN A%,RETURN B%) 55810LOCAL C%,D%:C%=A%:D%=B% 55820REPEAT IFC%<D% SWAP C%,D% 55830C%=C%MODD% 55840UNTILC%=0 55850A%=A%DIVD%:B%=B%DIVD% 55860ENDPROC 55870DEF PROCreadpixelrow(z%()) 55880IFrows% THEN 55890rows%-=1:IFsx%=x% THEN 55900W%=EVAL(r$+"(z%())") 55910ELSE 55920W%=EVAL(r$+"(xp%())"):CALLxsample%,xmul%,xdiv%,z%(1,0),xp%(1,0),x% 55930ENDIF 55940ELSE 55950z%()=0 55960ENDIF 55970ENDPROC 55980DEF PROCsharppixelrow(z%()) 55990IFrows% THEN 56000rows%-=1:IFsx%=x% THEN 56010IFsharpen% PROCsharp(z%()) ELSEW%=EVAL(r$+"(z%())"):IFequal% PROCfit2(z%()) 56020ELSE 56030IFsharpen% PROCsharp(xp%()) ELSEW%=EVAL(r$+"(xp%())"):IFequal% PROCfit2(xp%()) 56040CALLxsample%,xmul%,xdiv%,z%(1,0),xp%(1,0),x% 56050ENDIF 56060ELSE 56070z%()=0 56080ENDIF 56090ENDPROC 56100DEF PROCsharp(z%()) 56110yread%-=1:IFyread% W%=EVAL(r$+"(rm%())"):IFequal% PROCfit2(rm%()) 56120FORB%=0TOcol:rm%(0,B%)=rm%(1,B%):rm%(sx%+1,B%)=rm%(sx%,B%):NEXT 56130CALL sharp%,z%(1,0),rm%(1,0),rm1%(1,0),rm2%(1,0),totvals2% 56140SWAP rm2%(),rm1%():rm1%()=rm%() 56150ENDPROC 56160DEF PROCscaledpixelrow(z%()) 56170IFsy%=y% THEN 56180PROCreadpixelrow(z%()) 56190ELSE 56200ysamp%-=1:IFysamp%=0 PROCreadpixelrow(xl%()):ysamp%=ymul% 56210IFydiv%=1 THEN 56220z%()=xl%() 56230ELSE 56240IFysamp%>=ydiv% THEN 56250ysamp%-=ydiv%:z%()=xl%()*ydiv% 56260ELSE 56270LOCALY%:z%()=xl%()*ysamp%:Y%=ydiv%-ysamp%:ysamp%=0 56280REPEAT 56290IFysamp%=0 PROCreadpixelrow(xl%()):ysamp%=ymul% 56300IFysamp%>Y% THEN 56310ysamp%-=Y%:xl2%()=xl%()*Y%:z%()=z%()+xl2%():Y%=0 56320ELSE 56330Y%-=ysamp%:xl2%()=xl%()*ysamp%:z%()=z%()+xl2%():ysamp%=0 56340ENDIF 56350UNTIL Y%=0 56360ENDIF 56370ysamp%+=1 56380ENDIF 56390ENDIF 56400ENDPROC 56410DEF PROCfit(z%()) 56420CALLhistequal%,z%(1,0),new%(0,0),x% 56430ENDPROC 56440DEF PROCfit2(z%()) 56450CALLhistequal%,z%(1,0),new%(0,0),sx% 56460ENDPROC 56470DEF PROCadjustpalette(mul,sub) 56480IFmul=1 AND sub=0 ENDPROC 56490FORC%=0TO255 56500r%(C%)=(r%(C%)-sub)*mul+1:g%(C%)=(g%(C%)-sub)*mul+1:b%(C%)=(b%(C%)-sub)*mul+1 56510NEXT 56520IFham THEN 56530FORC%=0TO15*4STEP4:ltable!C%=(ltable!C%-sub)*mul+1:NEXT 56540ENDIF 56550IFinput>400 THEN 56560FORC%=0TO255 56570rpal%(C%)=(rpal%(C%)-sub)*mul+1:gpal%(C%)=(gpal%(C%)-sub)*mul+1 56580bpal%(C%)=(bpal%(C%)-sub)*mul+1:table%(C%)=(table%(C%)-sub)*mul+1 56590NEXT 56600ENDIF 56610ENDPROC 56620DEF PROCcachesize(A%) 56630SYS&20023,"ChangeFSI$Cache",A%,-1 TO,,Z 56640IFZ<>0 THEN 56650SYS35,"ChangeFSI$Cache",A%,20 TO,,Z:A%?Z=13:cache%=VAL$A% 56660IFINSTR($A%,"K")ORINSTR($A%,"k") cache%=cache%*1024 56670ELSE 56680cache%=128*1024 56690ENDIF 56700ENDPROC 56710DEF PROCrefill 56720IFstriprows%>0 PROCnextstrip 56730SYS12,4,c%,datacache%,cache%:rowstogo%=cacherows%:buff%=datacache% 56740IFinput=24 IFrbo%>=0 rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo% 56750ENDPROC 56760DEF PROCrefillpcd 56770IFpcdblk%!4>=sy% ENDPROC 56780IFpcdblk%!12>=sy% pcdblk%!12=sy% 56800SYS"PhotoCD_GetBlock",pcdh%,,pcdblk%,datacache%,pcdindex%,,,pcdcache%,pcdcachesize% 56810rowstogo%=cacherows%:buff%=datacache%:pcdblk%!4+=cacherows%:pcdblk%!12+=cacherows% 56820rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo% 56830ENDPROC 56850DEF FN8(z%()) 56860CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),buff%:buff%+=rowbytes% 56870rowstogo%-=1:IFrowstogo%=0 PROCrefill 56880=TRUE 56900DEF FN16(z%()) 56910CALLmappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),buff%,buff% 56920buff%+=rowbytes%:rowstogo%-=1:IFrowstogo%=0 PROCrefill 56930=TRUE 56950DEF FN24(z%()) 56960CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 56970rb%+=rowbytes%:gb%+=rowbytes%:bb%+=rowbytes% 56980rowstogo%-=1:IFrowstogo%=0 PROCrefill 56990=TRUE 57010DEF FN300(z%()) 57020SYS12,4,cc%,pbuff%,sx%:CALLmappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),pbuff%,buff% 57030buff%+=rowbytes%:rowstogo%-=1:IFrowstogo%=0 PROCrefill 57040=TRUE 57060DEF FN400(z%()) 57070CALLreadline%,plbytes%,rep%,pix%,plbuff% 57080CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 57090=TRUE 57110DEF FN500(z%()) 57120CALL LZWdecode%,table%(0),c%,plbuff%,sx% 57130CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 57140=TRUE 57160DEF FN800(z%()) 57170PROCwatfordcache(wtsx%,rep%,wt%,plbuff%) 57180CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 57190=TRUE 57210DEF FN801(z%()) 57220PROCwatford(wtsx1%,rep1%,wt1%,buff%,c%) 57230PROCwatford(wtsx2%,rep2%,wt2%,wtsx1%,cc%) 57240PROCwatford(wtsx3%,rep3%,wt3%,wtsx2%,ccc%) 57250CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 57260=TRUE 57280DEF FN901(z%()) 57290SYS12,4,c%,rb%,sx%:SYS12,4,cc%,gb%,sx%:SYS12,4,ccc%,bb%,sx% 57300CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 57310=TRUE 57330DEF FN902(z%()) 57340CALLunpack%,buff%:CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 57350buff%+=rowbytes%:rowstogo%-=1:IFrowstogo%=0 PROCrefill 57360=TRUE 57380DEF FN1000(z%()) 57390X%=buff%:IFrep%>0 C%=?pa%:CALLrlexpand%,pasx%,rep%,C%,X%:pa%+=1 57400IFrep2%>0 C%=?pa%:CALLrlexpand%,pasx%,rep2%,C%,X%:pa%+=1 57410REPEAT C%=BGET#c%:IFC%=0 THEN 57420rep%=BGET#c%:C%=?pa%:CALLrlexpand%,pasx%,rep%,C%,X%:IFrep%=0 pa%+=1 57430ELSE 57440rep2%=C%AND15:rep%=C%>>4:IFrep% C%=?pa%:CALLrlexpand%,pasx%,rep%,C%,X%:IFrep%=0 pa%+=1 57450IFX%<pasx% IFrep2% C%=?pa%:CALLrlexpand%,pasx%,rep2%,C%,X%:IFrep2%=0 pa%+=1 57460ENDIF 57470UNTILX%=pasx% 57480CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),buff% 57490=TRUE 57510DEF FN1001(z%()) 57520X%=buff%:IFrep%>0 C%=?pa%:CALLrlexpand%,pasx%,rep%,C%,X%:pa%+=1 57530REPEAT rep%=BGET#c%:C%=?pa%:CALLrlexpand%,pasx%,rep%,C%,X%:IFrep%=0 pa%+=1 57540UNTILX%=pasx%:CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),buff% 57550=TRUE 57570DEF FN1100(z%()) 57580CALLreadline%,plbytes%,rep%,pix%,plbuff% 57590CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 57600=TRUE 57620DEF FN1400(z%()) 57630IFvrep% THEN 57640vrep%-=1 57650ELSE 57660G%=buff%:FORX%=1TOplanes%:G%+=rowbytes%:F%=G%-rowbytes% 57670REPEAT C%=BGET#c%:IFC%=0 THEN 57680C%=BGET#c%:IFC%=0 THEN 57690C%=BGET#c%:vrep%=BGET#c%-1 57700ELSE 57710D%=F%:SYS12,4,c%,F%,patlen%:F%+=patlen% 57720IFC%>1 FORN%=2TOC%:FORE%=0TOpatlen%-1:F%?E%=D%?E%:NEXT:F%+=patlen%:NEXT 57730ENDIF 57740ELSE 57750IFC%=128 THEN 57760C%=BGET#c%:SYS12,4,c%,F%,C%:F%+=C% 57770ELSE 57780?F%=(C%AND&80)<>0:FORE%=F%+1TOF%+(C%AND&7F):?E%=?F%:NEXT:F%+=C%AND&7F 57790ENDIF 57800ENDIF:UNTILF%>=G%:NEXT 57810CALLplancnv%,rowbytes%,buff%,pbuff% 57820ENDIF 57830CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff% 57840=TRUE 57860DEF FN1501(z%()) 57870CALLreadiff%,rowbytes%,plbuff%:rowstogo%-=1:IFrowstogo%=0 PROCnextstrip 57880CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 57890=TRUE 57910DEF FN1505(z%()) 57920CALL LZWdecode%,table%(0),c%,plbuff%,rowbytes% 57930rowstogo%-=1:IFrowstogo%=0 PROCnextstrip 57940CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 57950=TRUE 57970DEF FN1515(z%()) 57980CALL LZWdecode%,table%(0),c%,plbuff%,rowbytes% 57990rowstogo%-=1:IFrowstogo%=0 PROCnextstrip 58000CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 58010=TRUE 58030DEF FN1600(z%()) 58040CALLplancnv%,realrowbytes%,buff%,pbuff%:buff%+=rowbytes% 58050CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff% 58060rowstogo%-=1:IFrowstogo%=0 PROCrefill 58070=TRUE 58090DEF FN1601(z%()) 58100FORX%=0TOplanes%-1:F%=plbuff%+X%*rowbytes%:CALLreadiff%,rowbytes%,F%:NEXT 58110IFmasking% CALLreadiff%,rowbytes%,pbuff% 58120CALLplancnv%,rowbytes%,plbuff%,pbuff% 58130CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff% 58140=TRUE 58160DEF FN1850(z%()) 58170CALLreadiff%,rowbytes%,plbuff% 58180CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 58190=TRUE 58210DEF FN1851(z%()) 58220CALLreadiff%,rowbytes%,plbuff% 58230CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 58240=TRUE 58260DEF FN1900(z%()) 58270CALLreadline%,plbytes%,rep%,pix%,plbuff% 58280CALLplancnv%,rowbytes%,plbuff%,pbuff% 58290CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff% 58300=TRUE 58320DEF FN2000(z%()) 58330X%=buff%:REPEAT 58340C%=BGET#c%:IFC%<128 THEN 58350C%+=1:SYS12,4,c%,X%,C%:X%+=C% 58360ELSE 58370F%=X%:?F%=BGET#c%:FORC%=C%TO128STEP-1:?X%=?F%:X%+=1:NEXT 58380ENDIF 58390UNTILX%=buff%+rowbytes% 58400CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),buff% 58410=TRUE 58430DEF FN2001(z%()) 58440X%=buff%:REPEAT 58450C%=BGET#c%:IFC%<128 THEN 58460C%=(C%+1)*2:SYS12,4,c%,X%,C%:X%+=C% 58470ELSE 58480F%=X%:SYS12,4,c%,X%,2:FORC%=C%TO128STEP-1:!X%=!F%:X%+=2:NEXT 58490ENDIF 58500UNTILX%=buff%+rowbytes% 58510CALLmappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),buff%,buff% 58520=TRUE 58540DEF FN2002(z%()) 58550X%=buff%:REPEAT 58560C%=BGET#c%:IFC%<128 THEN 58570C%=(C%+1)*step24:SYS12,4,c%,X%,C%:X%+=C% 58580ELSE 58590F%=X%:SYS12,4,c%,X%,step24:FORC%=C%TO128STEP-1:!X%=!F%:X%+=step24:NEXT 58600ENDIF 58610UNTILX%=buff%+rowbytes% 58620CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 58630=TRUE 58650DEF FN2250(z%()) 58660CALLmappix%,z%(1,0),rpal%(0),r%(0),gpal%(0),g%(0),bpal%(0),b%(0),table%(0),buff% 58670buff%+=rowbytes%:rowstogo%-=1:IFrowstogo%=0 PROCrefill 58680=TRUE 58700DEF FN2300(z%()) 58710IFclrfirst% FORX%=0TOsx%-1:rb%?X%=?back%:gb%?X%=back%?1:bb%?X%=back%?2:NEXT 58720IFvrep% THEN 58730vrep%-=1 58740ELSE 58750LOCAL ERROR 58760ON ERROR LOCAL vrep%=-1:CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%:=TRUE 58770E%=FALSE:REPEAT C%=BGET#c%:D%=BGET#c%:IFC%AND&40 D%=FNHW 58780CASE C%AND&3f OF 58790WHEN 1:E%=TRUE:vrep%=D%-1:IFvrep%<0 vrep%=FALSE 58800WHEN 2:ccol%=back%?D%:cbuf%=rb%+sx%*D%:IFD%=255 cbuf%=alpha% 58810WHEN 3:FORX%=0TOD%-1:cbuf%?X%=ccol%:NEXT:cbuf%+=D% 58820WHEN 5:SYS12,4,c%,cbuf%,D%+1:cbuf%+=D%+1:IFD%+1AND1 IFBGET#c% 58830WHEN 6:C%=FNHW:FORX%=0TOD%:cbuf%?X%=C%:NEXT:cbuf%+=D%+1 58840ENDCASE 58850UNTILE% 58860ENDIF 58870CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 58880=TRUE 58900DEF FN2401(z%()) 58910CALLbm_rle8,rowbytes%,plbuff% 58920CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 58930=TRUE 58950DEF FN2402(z%()) 58960CALLbm_rle4,rowbytes%,plbuff% 58970CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 58980=TRUE 59000DEF FN3000(z%()) 59010CALLmappix%,z%(1,0),rpal%(0),r%(0),gpal%(0),g%(0),bpal%(0),b%(0),table%(0),buff% 59020buff%+=rowbytes%:rowstogo%-=1:IFrowstogo%=0 PROCrefill 59030=TRUE 59040DEF FN3500(z%()) 59050=TRUE 59060DEF FN3600(z%()) 59070CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 59080rb%+=rowbytes%:gb%+=rowbytes%:bb%+=rowbytes% 59090rowstogo%-=1:IFrowstogo%=0 PROCrefillpcd 59100=TRUE 59110DEF FN3708(z%()) 59120A%=jpegspace%:jpegy%-=1:B%=jpegy%:rb%=USR(jpeg%+4) 59130CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb% 59140=TRUE 59150DEF FN3724(z%()) 59160A%=jpegspace%:jpegy%-=1:B%=jpegy%:rb%=USR(jpeg%+4):gb%=rb%+1:bb%=rb%+2 59170CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 59180=TRUE 59190DEF PROCrewind 59200rows%=sy%:CASE flag OF 59210WHEN 0:PTR#c%=st% 59220WHEN 100:PTR#c%=4 59230WHEN 200:PTR#c%=st%:rep%=0 59240WHEN 300:PTR#c%=st%:PTR#cc%=stcc% 59250WHEN 400:PTR#c%=st%:rep%=0 59260WHEN 500:FORI%=0TOclearcode%-1:table%(I%)=I%:NEXT:PTR#c%=st% 59270!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk% 59280!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0 59290WHEN 501:buff%=datacache% 59300WHEN 600:PTR#c%=&380 59310WHEN 700:PTR#c%=st% 59320WHEN 800:PTR#c%=0:rep%=0:wt%=0 59330WHEN 801:PTR#c%=0:PTR#cc%=0:PTR#ccc%=0:rep1%=0:wt1%=0:rep2%=0:wt2%=0:rep3%=0:wt3%=0 59340WHEN 900:PTR#c%=0 59350WHEN 901:PTR#c%=0:PTR#cc%=0:PTR#ccc%=0 59360WHEN 902:PTR#c%=st% 59370WHEN 1000:PTR#c%=st%:pa%=ctable%:rep%=0:rep2%=0 59380WHEN 1100:PTR#c%=st%:rep%=0 59390WHEN 1200:PTR#c%=1600 59400WHEN 1300:PTR#c%=0 59410WHEN 1301:PTR#c%=0:PTR#cc%=0:PTR#ccc%=0 59420WHEN 1400:PTR#c%=st%:vrep%=0 59430WHEN 1500:PTR#c%=st%(0):rowstogo%=striprows%:stripptr=0 59440IFcompression=5 THEN 59450!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk% 59460!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0 59470ENDIF 59480WHEN 1600:PTR#c%=st% 59490WHEN 1700:PTR#c%=16 59500WHEN 1800,1850:PTR#c%=st% 59510WHEN 1900:PTR#c%=128:rep%=-1 59520WHEN 2000:PTR#c%=st% 59530WHEN 2100:PTR#c%=7 59540WHEN 2200:PTR#c%=st% 59550WHEN 2250:PTR#c%=st% 59560WHEN 2300:PTR#c%=st%:vrep%=0 59570WHEN 2400:PTR#c%=st% 59580WHEN 2500:PTR#c%=st% 59590WHEN 2600:PTR#c%=st% 59600WHEN 2700:PTR#c%=st% 59610WHEN 2800:PTR#c%=st% 59620WHEN 2900:PTR#c%=st% 59630WHEN 3000:PTR#c%=0 59640WHEN 3600:pcdblk%!4=0 59650WHEN 3700:jpegy%=sy% 59660ENDCASE 59670IFcache% THEN 59680IFflag=3600 THEN 59690pcdblk%!12=cacherows%:PROCrefillpcd:IFcache%>=filesize% rowstogo%=-1 59700ELSE 59710IFcache%<filesize% SYS12,4,c%,datacache%,cache%:rowstogo%=cacherows% 59720ENDIF 59730buff%=datacache% 59740IFcachebytes% !incacheptr=datacache%:!numlefttogo=cache% 59750IFinput=24 IFrbo%>=0 rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo% 59760ENDIF 59770IFflag=1500 IFcompression=5 rowstogo%=striprows% 59780ENDPROC
� > ChangeFSI �areanumber%=0 �ș"OS_GetEnv" � A$ ��A$," -wimp") � �� z%(1),p%(2),s%(3),m$(22) �"A%=�"<ChangeFSI$Dir>.Messages" �(B%=-1:� B%+=1:m$(B%)=�#A%:��#A%:�#A% �startfile%=�A$,6)<>"-wimp " �� taskid%4:$taskid%="TASK" �7ș "Wimp_Initialise",200,!taskid%,m$(20) � version% �Wimp = (1<<18) + (3<<6) �%CreateW = Wimp+1:OpenW = Wimp+5 �%CloseW = Wimp+6:RedrawW = Wimp+8 &UpdateW = Wimp+9:GetR% = Wimp+10 &GetW = Wimp+11:SetI = Wimp+13 &GetI = Wimp+14:GetP = Wimp+15 "&Drag = Wimp+16:CrMenu = Wimp+20 ,DcMenu = Wimp+21 68ș "OS_SWINumberFromString",,"Wimp_PollIdle" � Poll% @7ș "OS_SWINumberFromString",,"XOS_SpriteOp" � spop% J?ș "OS_SWINumberFromString",,"OS_ReadMonotonicTime" � Time% TJș "OS_SWINumberFromString",,"ColourTrans_ReturnColourNumber" � ctran% ^Sș "XOS_SWINumberFromString",,"DragASprite_Start" � dstart%;f%:�f%� 1 dstart%=0 h5ș "OS_Byte",161,&1C � ,,f%:�(f% � 2)=0 dstart%=0 rnextlocation%=� |,ș "Wimp_SlotSize",-1,-1 � originalslot% ��locale_initialise �� version%>=300 � �Y� q% 255,ifactors% 15,factors% 15,pixtrans% 255,paltemp% 1023,buffer% 255,idata% 1023 �� �a� z% 1223,q% 255,ifactors% 15,factors% 15,pixtrans% 255,paltemp% 1023,buffer% 255,idata% 2599 �� �scrap%=� �!� version%<300 sidata%=idata% �)sprite%=�:sar%=�:saved%=�:z$=�12,�13) �ș "OS_Byte",161,&8C � ,,f% �f% � 1 � 7ș"Wimp_OpenTemplate",,"<ChangeFSI$Dir>.3dTemplate" � &6ș"Wimp_OpenTemplate",,"<ChangeFSI$Dir>.Templates" 0� D� � N6� � ș"Wimp_CloseTemplate":� 0,�$+" (code "+Þ+")" b�version%>=300 � l� z% �largest_buffer v#indsize%=�size_indirect("Info") �� info_wind% indsize% �Kș"Wimp_LoadTemplate",,z%,info_wind%,info_wind%+indsize%,-1,"Info"+z$,0 �� �Kș"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Info"+z$,0 � ,,idata% �� �4ș CreateW,,z% � infow%:$!(z%+88+7*32+20)=m$(21) ��version%>=300 � �)indsize%=�size_indirect("Processing") �� proc_wind% indsize% �Nș"Wimp_LoadTemplate",,z%,proc_wind%,proc_wind%+indsize%,-1,"Processing",0 �� �Nș"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Processing",0 � ,,idata% � ș CreateW,,z% � proc% Ip%(0)=!(z%+88+8*32+20):p%(1)=!(z%+88+9*32+20):p%(2)=!(z%+88+10*32+20) *�version%>=300 � 4%indsize%=�size_indirect("Output") >� outp_wind% indsize% HMș"Wimp_LoadTemplate",,z%,outp_wind%,outp_wind%+indsize%,-1,"Output"+z$,0 R� \Mș"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Output"+z$,0 � ,,idata% f� pPș CreateW,,z% � output%:admode%=!(z%+88+17*32+20):adspcl%=!(z%+88+16*32+20) ��version%>=300 � �&indsize%=�size_indirect("Scaling") �� scal_wind% indsize% �Nș"Wimp_LoadTemplate",,z%,scal_wind%,scal_wind%+indsize%,-1,"Scaling"+z$,0 �� �Nș"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Scaling"+z$,0 � ,,idata% �� �6ș CreateW,,z% � scalew%:adscale%=!(z%+88+1*32+20) �3s%(0)=!(z%+88+10*32+20):s%(1)=!(z%+88+11*32+20) �3s%(2)=!(z%+88+12*32+20):s%(3)=!(z%+88+13*32+20) ��version%>=300 � �#indsize%=�size_indirect("Save") � save_wind% indsize% Kș"Wimp_LoadTemplate",,z%,save_wind%,save_wind%+indsize%,-1,"Save"+z$,0 � $Kș"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Save"+z$,0 � ,,idata% .� 83ș CreateW,,z% � save%:adsave%=!(z%+88+1*32+20) L�version%>=300 � V%indsize%=�size_indirect("Sprite") `� sprt_wind% indsize% jMș"Wimp_LoadTemplate",,z%,sprt_wind%,sprt_wind%+indsize%,-1,"Sprite"+z$,0 t� ~Mș"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Sprite"+z$,0 � ,,idata% �� �Pș CreateW,,z% � sinfo%:adsname%=!(z%+88+5*32+20):adsbytes%=!(z%+88+8*32+20) �Hadsx%=!(z%+88+7*32+20):adsy%=!(z%+88+9*32+20):adsm%=!(z%+88+6*32+20) ��version%>=300 � �%indsize%=�size_indirect("Source") �� src_wind% indsize% �Kș"Wimp_LoadTemplate",,z%,src_wind%,src_wind%+indsize%,-1,"Source"+z$,0 �� �Mș"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Source"+z$,0 � ,,idata% �� �5ș CreateW,,z% � srcinfo%:adsrc%=!(z%+88+0*32+20) �version%>=300 � $indsize%=�size_indirect("Range") � range_wind% indsize% (Nș"Wimp_LoadTemplate",,z%,range_wind%,range_wind%+indsize%,-1,"Range"+z$,0 2� <Lș"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Range"+z$,0 � ,,idata% F� P5ș CreateW,,z% � raninfo%:adran%=!(z%+88+0*32+20) d�version%>=300 � n#indsize%=�size_indirect("Zoom") x� zoom_wind% indsize% �Kș"Wimp_LoadTemplate",,z%,zoom_wind%,zoom_wind%+indsize%,-1,"Zoom"+z$,0 �� �Kș"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Zoom"+z$,0 � ,,idata% �� �Hș CreateW,,z% � zoom%:z%(0)=!(z%+88+4*32+20):z%(1)=!(z%+88+5*32+20) ��version%>=300 � �"indsize%=�size_indirect("Pic") �� pic_wind% indsize% �Hș"Wimp_LoadTemplate",,z%,pic_wind%,pic_wind%+indsize%,-1,"Pic"+z$,0 �� �?ș"Wimp_LoadTemplate",,z%,idata%,sidata%+2600,-1,"Pic"+z$,0 �� (ș CreateW,,z% � pic%:adtitle%=z%!72 � � "ș"Wimp_CloseTemplate" ,@!q%=-1:q%!4=0:q%!8=0:q%!12=68:q%!16=68:q%!20=%11000000000010 6:$(q%+24)="!"+m$(20):ș"Wimp_CreateIcon",,q% � iconbar% @)A%=�"<ChangeFSI$Dir>.Choices":�A%=0 � JDfast%=�:statescale%=%10000000100:stateproc%=0:stateoutput%=&a008 TC$p%(0)="":$p%(1)="2"+decimal_point$+"2":$p%(2)="24":$adspcl%="" ^=$admode%="28":$s%(0)="1":$s%(1)="4":$s%(2)="1":$s%(3)="4" h� r2�#A%,fast%,statescale%,stateproc%,stateoutput% |/�#A%,$p%(0),$p%(1),$p%(2),$admode%,$adspcl% �5$p%(1)=�locale_convert($p%(1),".",decimal_point$) �$�#A%,$s%(0),$s%(1),$s%(2),$s%(3) ��#A% �� �q%!12=1<<21 �=!q%=scalew%:�I%=0�9:�statescale%>>I%�1 q%!8=1<<21 �q%!8=0 �q%!4=I%:ș SetI,,q%:� �3�I%=10�13:�statescale%>>I%�1 q%!8=1<<21 �q%!8=0 �q%!4=I%+6:ș SetI,,q%:� �:!q%=proc%:�I%=0�7:�stateproc%>>I%�1 q%!8=1<<21 �q%!8=0 �q%!4=I%:ș SetI,,q%:� �?!q%=output%:�I%=0�15:�stateoutput%>>I%�1 q%!8=1<<21 �q%!8=0 �q%!4=I%:ș SetI,,q%:� )�showscaletofit:$z%(0)="1":$z%(1)="1" ș "OS_UpdateMEMC" � oldmemc &?� � ș"OS_UpdateMEMC",oldmemc,&700:�errorbox:ș CrMenu,,-1 0ș Drag,,-1 :1�sprite% ș "Wimp_SlotSize",originalslot%,-1 DBF$="":�startfile% startfile%=�:F$=�A$,�A$,"-wimp")+6):�callFSI N� Xș Poll%,1,q% � A% bȎ A% � l%� 1 :�sprite% �redraw_window(!q%) vB� 2 :�open_window(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,q%!28) �2� 3 :ș &400c3,,q%:nextlocation%=�:�removearea �:ș "Wimp_SlotSize",originalslot%,-1:saved%=�:sprite%=� �5� 6 :�checkmouse(!q%,q%!4,q%!8,q%!12,q%!16,q%!20) �F� 7 :ș GetP,,q%:dw%=q%!12:di%=q%!16:�dstart% ș"DragASprite_Stop" �<q%!12=0:q%!16=1:q%!20=dw%:q%!24=di%:q%!28=!q%:q%!32=q%!4 �2q%!36=!sar%+3:q%!40=&ff9:$adsave%=�ZS(adsave%) �foo%=�$adsave%,"."):ȕfoo% �2$adsave%=�$adsave%,foo%+1):foo%=�$adsave%,".") �� �2$(q%+44)=$adsave%+�0:!q%=44+(�$adsave%+1+3��3) �3ș "Wimp_SendMessage",17,q%,dw%,di%:myref%=q%!8 �� 8 :�key(!q%,q%!4,q%!24) �� 9 :�menuselect(q%) � 17,18:�receive(q%) � � � � *Q%=� 4�=&4000000 >S� � � � �:�"Set ChangeFSI$ReturnCode "+�$+" (code "+Þ+")":�removearea:�:�=Q%:� H1foo%=0:A%=�ChangeFSI(A$,-1,-1,0,-1,-1,foo%,�) R+�removearea:*unset ChangeFSI$ReturnCode \ �:�=Q% f� p� �� �locale_initialise �� p% �(ș "Territory_ReadSymbols",-1,0 � p% �decimal_point$=�?p% �� �� �locale_convert(n$,f$,t$) �� f$=t$ :=n$ �� i% �i%=�n$,f$) �$� i%<>0 :=�n$,i%-1)+t$+�n$,i%+1) �=n$ � �size_indirect(name$) � size% 5ș "Wimp_LoadTemplate",,0,,,,name$+z$,0 � ,,size% $ =size% 8� �winsize_indirect(name$) B� size% L4ș "Wimp_LoadTemplate",,0,,,,name$+z$,0 � ,size% V =size% �� �largest_buffer �#� largest_tem%,size%,here%,name � � name 12 �$$name="*":here%=0:largest_tem%=0 �;ș "Wimp_LoadTemplate", ,0,,,,name,0 � ,size%,,,,,here% �ȕ here% �+� largest_tem%<size% largest_tem%=size% �$name= "*" �?ș "Wimp_LoadTemplate", ,0,,,,name,here% � ,size%,,,,,here% �� �=largest_tem% � �receive(q%) Ȏ q%!16 � � 0:�checkandfinish � 1:�q%!20<>save% � (A!q%=60:q%!12=q%!8:q%!16=2:q%!36=-1:$(q%+44)="<Wimp$Scrap>"+�0 2/ș"Wimp_SendMessage",17,q%,q%!4:scrap%=q%!8 <� F8� 2:șspop%,&10C,sar%,�ZS(q%+44):$adsave%=�ZS(q%+44) P7q%!12=q%!8:q%!16=3:ș "Wimp_SendMessage",18,q%,q%!4 Z� q%!36<>-1 saved%=� dș CrMenu,,-1 n1� 3:F$=�ZS(q%+44):�scrap% scrap%=scrap%=q%!12 x6q%!12=q%!8:q%!16=4:ș"Wimp_SendMessage",17,q%,q%!4 ��callFSI �� 5:Ȏ q%!40 � �� &ff0,&c85 �6q%!12=q%!8:q%!16=4:ș"Wimp_SendMessage",17,q%,q%!4 �F$=�ZS(q%+44):�callFSI �� �B�9,&400C1:�sprite% �getmodeinfo:ș&400d1,pic%,0,-32767,32767,0 ��showscaletofit �H� 10:ș"XOS_ReadVarVal","ChangeFSI$Dir",paltemp%,256,0,3 �,,bootlen% �paltemp%?bootlen%=13 ��#q%!20,"Run "+$paltemp% �� �� � �callFSI A$=�deducemode:A%=47 " �geticonstate(output%,12) � ,A$+=$adspcl% 6� @ �geticonstate(output%,13) � J>�geticonstate(output%,2)��geticonstate(output%,8) A$+="R" T� ^ș53,�A$,3 �,,A% h�A%=63 � r&�geticonstate(output%,3) A$="27t" |&�geticonstate(output%,9) A$="12t" �� ��A%=255 A$+="d" �� �� �� �/A$="garbage "+F$+" <ChangeFSI$Dir>.Foo "+A$ �>�geticonstate(scalew%,1) A$+=" "+�tofitx+": "+�tofity+":" �(�geticonstate(scalew%,5) A$+=" 1:2" �,�geticonstate(scalew%,4) A$+=" 1:2 1:1" �,�geticonstate(scalew%,3) A$+=" 1:1 1:2" ��geticonstate(scalew%,9) � �%�$s%(0) A$+=" "+$s%(0) �A$+=" 1" �A$+=":"+$s%(1) %�$s%(2) A$+=" "+$s%(2) �A$+=" 1" A$+=":"+$s%(3) � &,�geticonstate(scalew%,0) A$+=" -nosize" 0.�geticonstate(scalew%,18) A$+=" -noscale" :+�geticonstate(scalew%,19) A$+=" -lock" D�geticonstate(scalew%,6) � N>�geticonstate(scalew%,16) A$+=" -rotate" �A$+=" -rotate-" X� b+�geticonstate(scalew%,7) A$+=" -hflip" l+�geticonstate(scalew%,8) A$+=" -vflip" v)�geticonstate(proc%,0) A$+=" -range" �)�geticonstate(proc%,1) A$+=" -equal" �,�geticonstate(proc%,2) A$+=" -nodither" �*�geticonstate(proc%,3) A$+=" -invert" �,�geticonstate(proc%,4) A$+=" -brighten" �0�geticonstate(proc%,5) A$+=" -black"+$p%(0) �T�geticonstate(proc%,6) A$+=" -gamma"+�locale_convert($p%(1),decimal_point$,".") �2�geticonstate(proc%,7) A$+=" -sharpen"+$p%(2) �%info$="":range$=m$(19):cputime%=0 �6�sprite% !q%=pic%:ș &400c3,,q%:saved%=�:sprite%=� �nextlocation%=� �3ș "Wimp_SlotSize",originalslot%,-1:�removearea �1�fast% ș "OS_UpdateMEMC",&300,&700 � oldmemc �4A%=�ChangeFSI(A$,-1,-1,nextlocation%,0,0,sar%,0) *�fast% ș "OS_UpdateMEMC",oldmemc,&700 %�scrap% scrap%=�:ș"OS_File",6,F$ �A%<2 � sar%<>0 � &ș spop%,&10d,sar%,pixtrans%,255,1 *6n$=�ZS(pixtrans%):ș spop%,&128,sar%,n$ �,,,x,y,,m 4.$adsx%=�x:$adsy%=�y:$adsm%=�m:$adsname%=n$ >&$adsbytes%=�sar%!12:$adran%=range$ HT$adsrc%=info$+m$(0)+�(cputime%�100)+decimal_point$+�"0"+�(cputime%�100),2)+m$(1) R'A%=�F$:ȕ�"."+F$,A%,1)<>".":A%-=1:� \$adsave%=�"."+F$,A%+1) fș&35,m,4 �,,nx:x=x<<nx pș&35,m,5 �,,ny:y=y<<ny z#saved%=�:sprite%=�:�getmodeinfo �pic%=�create_window(x,y,F$) ��popup(pic%,-1) �� �� �� �checkandfinish �7�saved% ��sprite% �removearea:ș "Wimp_CloseDown":� �-!buffer%=�:$(buffer%+4)=m$(2)+F$+m$(3)+�0 �5ș "Wimp_ReportError",buffer%,%10111,m$(20) � ,A% �+�A%=1 �removearea:ș "Wimp_CloseDown":� �� �� �key(handle%,icon%,key%) �key%=&1b ș CrMenu,,-1:� Ȏ handle% � � zoom%:Ȏ key% � $C� 13:�dozoom(icon%-4,0):�icon%=4 ș &400d2,zoom%,5,,,-1,�$z%(0) .�icon%=5 ș CrMenu,,-1 8� B"� &18e,&18f:�dozoom(icon%-4,0) L0ș &400d2,zoom%,icon%�1,,,-1,�$z%(icon%�5):� V� `� save% j�key%=13 �savesprite:� t � output% ~�showscaletofit ��key%=13 ș CrMenu,,-1:� ��key%=&18e �key%=&18f � �5icon%=icon%�1:key%=admode%:�icon%=16 key%=adspcl% �)ș &400d2,output%,icon%,,,-1,�$key%:� �� �� proc%:Ȏ key% � �A� &18e,13:icon%+=1:�icon%>10 icon%=8:�key%=13 ș CrMenu,,-1:� �.ș &400d2,proc%,icon%,,,-1,�$p%(icon%-8):� �%� &18f:icon%-=1:�icon%<8 icon%=10 �.ș &400d2,proc%,icon%,,,-1,�$p%(icon%-8):� �� �� scalew%:Ȏ key% � B� &18e,13:icon%+=1:�icon%>13 icon%=10:�key%=13 ș CrMenu,,-1:� 1ș &400d2,scalew%,icon%,,,-1,�$s%(icon%-10):� &� &18f:icon%-=1:�icon%<10 icon%=13 1ș &400d2,scalew%,icon%,,,-1,�$s%(icon%-10):� (� 2� <ș "Wimp_ProcessKey",key% F� Z� �savesprite dș spop%,&10C,sar%,$adsave% nș CrMenu,,-1 x� �7� �checkmouse(mousex%,mousey%,b%,handle%,icon%,ob%) ��b%�2 � �Ȏ handle% � �|� pic%:�domenu(pic%,m$(4)+">sinfo%,"+m$(5)+">srcinfo%,"+m$(6)+">raninfo%,"+m$(7)+">zoom%,"+m$(8)+">save%,"+m$(9),m$(20)) ��� -2:�domenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20)) �� �rmenuhandle%=handle% �� ��b%�4 � �Ȏ handle% � �� zoom%:Ȏ icon% � �� 0:�dozoom(0,1) � 1:�dozoom(0,-1) � 2:�dozoom(1,1) � 3:�dozoom(1,-1) "� ,� 6� @�b%�1 � JȎ handle% � T� zoom%:Ȏ icon% � ^� 0:�dozoom(0,-1) h� 1:�dozoom(0,1) r� 2:�dozoom(1,-1) |� 3:�dozoom(1,1) �� �� �� ��b%�5 � �Ȏ handle% � �� output%:Ȏ icon% � �'� 0,1,2,3:�killcurrent(�(25+icon%)) �!� 4:�killcurrent("S16,90,90") �!� 5:�killcurrent("S32,90,90") �� 6:�killcurrent("0") �� 7:�killcurrent("8") �� 8:�killcurrent("12") �� 9:�killcurrent("15") "� 10:�killcurrent("S16,90,45") "� 11:�killcurrent("S32,90,45") � &3�geticonstate(output%,15) $admode%=�deducemode 02!q%=output%:q%!4=17:q%!8=0:q%!12=0:ș SetI,,q% :�showscaletofit D� save%:Ȏ icon% � N� 2:�savesprite X� bM� -2:�sprite% �getw(pic%):�open_window(pic%,x0%,y0%,x1%,y1%,scx%,scy%,-1) l� v� � �b%�&50 � �Ȏ handle% � �� save%:Ȏ icon% � �� 0:�getw(save%) � !q%=save%:q%!4=0:ș GetI,,q% �!q%=save%:q%!4=5 �.q%!8+=bx%:q%!12+=by%:q%!16+=bx%:q%!20+=by% �3q%!24=0:q%!28=0:q%!32=&7FFFFFFF:q%!36=&7FFFFFFF �P�dstart% ș dstart%,%11000101,1,"file_ff9",q%+8,q%+24 �ș "Wimp_DragBox",,q% �� �� �� �� � �dozoom(s%,a%) �s%=0 � /$z%(0)=�(�$z%(0)+a%):�$z%(0)="0" $z%(0)="1" *� 4/$z%(1)=�(�$z%(1)+a%):�$z%(1)="0" $z%(1)="1" >� H2!q%=zoom%:q%!4=4+s%:q%!8=0:q%!12=0:ș SetI,,q% R/!q%=pic%:ș GetW,,q%:f%=q%!28:ș &400c3,,q% \pic%=�create_window(x,y,F$) f�popup(pic%,f%) p� �'� �domenu(handle%,menu$,menutitle$) �menuhandle%=handle% �%menuptr%=buffer%:indirect%=idata% �i%=0 �menuptr%!20=44 �$menuptr%=menutitle$ �;menuptr%?12=7:menuptr%?13=2:menuptr%?14=7:menuptr%?15=0 �!menuptr%!16=200:menuptr%!24=0 �menuptr%+=28 �%� i1%=i%+1:i%=�menu$+",",",",i1%) �8item$=�menu$,i1%,i%-i1%):�menuitem(item$):� item$="" �#menuptr%!-24=(menuptr%!-24)�&80 �`�handle%=101 ș CrMenu,,buffer%,mousex%-64,96+8*44 �ș CrMenu,,buffer%,mousex%-32,mousey%+16 � � �menuitem(text$) $� text$="" � .*flg%=0:submenu%=-1:I%=�text$,":"):�I%� 8)flg%=��text$,I%+1):text$=�text$,I%-1) B� LI%=�text$,">"):�I%� V-submenu%=��text$,I%+1):text$=�text$,I%-1) `� jmenuptr%!0=flg% tmenuptr%!4=submenu% ~A�text$=m$(9)�F$="" menuptr%!8=&07400021 �menuptr%!8=&07000021 �2�text$*16+8>buffer%!16 buffer%!16=�text$*16+8 ��text$>12 � �2menuptr%!8=menuptr%!8 � 256:menuptr%!16=�text$ �>menuptr%!12=indirect%:$indirect%=text$:indirect%+=�text$+1 �� �$(menuptr%+12)=text$ �� �menuptr%+=24 �� �� �menuselect(menus%) �,ș GetP,,paltemp%:adjust%=paltemp%!8 � 1 -ș DcMenu,,buffer%,menus%,�200," ")�,,,a$ � a$="" �� Ȏ menuhandle% � � pic% (Ȏ a$ � 2� m$(9):�callFSI <� F � 101 PȎ a$ � Z� m$(14):fast%=�fast% d� m$(9):�callFSI n� m$(15) xFstatescale%=0:�I%=0�9:statescale%+=�geticonstate(scalew%,I%)<<I%:� �<�I%=10�13:statescale%+=�geticonstate(scalew%,I%+6)<<I%:� �Bstateproc%=0:�I%=0�7:stateproc%+=�geticonstate(proc%,I%)<<I%:� �Istateoutput%=0:�I%=0�15:stateoutput%+=�geticonstate(output%,I%)<<I%:� �!A%=�"<ChangeFSI$Dir>.Choices" �2�#A%,fast%,statescale%,stateproc%,stateoutput% �S�#A%,$p%(0),�locale_convert($p%(1),decimal_point$,"."),$p%(2),$admode%,$adspcl% �$�#A%,$s%(0),$s%(1),$s%(2),$s%(3) ��#A% �� m$(16):�checkandfinish �� �� �0�adjust% �checkmouse(0,0,2,rmenuhandle%,0,0) �� � �create_window(x,y,title$) +x=x*�$z%(0)��$z%(1):y=y*�$z%(0)��$z%(1) " !z%=0:z%!4=-y:z%!8=x:z%!12=0 ,$z%!40=0:z%!44=-y:z%!48=x:z%!52=0 6%�x<128 � y<128 z%?35=0 �z%?35=255 @)$adtitle%="":ș CreateW,,z% � handle% J$adtitle%=title$ T=handle% h� �popup(handle%,f%) r1ș "OS_ReadModeVariable",-1,4 � ,,modexshift% |1ș "OS_ReadModeVariable",-1,5 � ,,modeyshift% �0ș "OS_ReadModeVariable",-1,11 � ,,rightscr% �.ș "OS_ReadModeVariable",-1,12 � ,,topscr% �Arightscr%=rightscr%<<modexshift%:topscr%=topscr%<<modeyshift% ��getw(handle%) �9xo%=rightscr%/2-(x0%+x1%)/2:yo%=topscr%/2-(y0%+y1%)/2 �F�open_window(handle%,x0%+xo%,y0%+yo%,x1%+xo%,y1%+yo%,scx%,scy%,f%) �� �>� �open_window(handle%,x0%,y0%,x1%,y1%,scx%,scy%,bhandle%) ��handle%=-1�� �q%!0=handle%:q%!28=bhandle% �)q%!4=x0%:q%!8=y0%:q%!12=x1%:q%!16=y1% �q%!20=scx%:q%!24=scy% ș OpenW,,q% � &� �getw(handle%) 0!q%=handle%:ș GetW,,q% :+�info(q%+4):bhandle%=q%!28:flags%=q%!32 D� X� �info(q%) b=x0%=!q%:y0%=q%!4:x1%=q%!8:y1%=q%!12:scx%=q%!16:scy%=q%!20 lbx%=x0%-scx%:by%=y1%-scy% v� �� �redraw_window(handle%) �� handle%=pic% � �?!factors%=!ifactors%*�$z%(0):factors%!4=ifactors%!4*�$z%(0) �Cfactors%!8=ifactors%!8*�$z%(1):factors%!12=ifactors%!12*�$z%(1) �A�reduce(!factors%,factors%!8):�reduce(factors%!4,factors%!12) �!q%=handle% �ș RedrawW,,q% � more% �,�info(q%+4):by%=by%-�(y*�$z%(0)��$z%(1)) �ȕ more% �0ș spop%,&134,sar%,n$,bx%,by%,,factors%,spx% �ș GetR%,0,q% � more% �� � � "� �geticonstate(handle%,icon%) *&!q%=handle%:q%!4=icon%:ș GetI,,q% 4=q%!24>>21 � 1 H� �getmodeinfo R>ș"XWimp_ReadPixTrans",&100,sar%,n$,,,,ifactors%,pixtrans% \#ș spop%,&118,sar%,n$ � ,,sptr% f� sptr%!32=44 � p palptr%=0 z� �� grab%=0 � 2048-8 � 8 �(paltemp%!(grab%>>1)=sptr%!(grab%+44) �� �palptr%=paltemp% �� ��Q%=0�255:pixtrans%?Q%=Q%:� ��sptr%!32=44+2048 � �5�Q%=0�255:șctran%,palptr%!(Q%<<2)�pixtrans%?Q%:� �� �:ș "ColourTrans_SelectTable",m,palptr%,-1,-1,pixtrans% �� �6spx%=-1:�Q%=0�255:�pixtrans%?Q%<>Q% spx%=pixtrans% �� � � �deducemode $� m,x,y . �geticonstate(output%,15) � 8ș&35,-1,9 �,,m:�m>3 � B#ș&35,-1,4 �,,x:ș&35,-1,5 �,,y Lx=180/(2^x):y=180/(2^y) V="S"+�(2^m)+","+�x+","+�y `� j=�� t� ~� � =$admode% �� �=0 �� �showscaletofit �� m,x,y �$admode%=�deducemode ��?admode%=�"S" � �)�$admode%,5)>��$admode%,8) x=6 �x=0 � �$admode%,2)>16 x+=5 �x+=4 �/ș&35,-1,11 �,,tofitx:ș&35,-1,12 �,,tofity �� m=�$admode% -ș&35,m,11 �,,tofitx:ș&35,m,12 �,,tofity /ș&35,m,4 �,,x:ș&35,m,5 �,,y:�y>x x=6 �x=0 ș&35,m,9 �,,y:x+=y (� 2?tofitx+=1:tofity+=1:$adscale%=m$(17)+�tofitx+m$(18)+�tofity <=q%!12=1<<21:!q%=output%:�I%=0�11:�I%=x q%!8=1<<21 �q%!8=0 Fq%!4=I%:ș SetI,,q%:� P� d� �killcurrent(m$) n"q%!12=1<<21:!q%=output%:q%!8=0 xq%!4=17:ș SetI,,q% �$admode%=m$ �� �+ݤZS(I%)�A$:�A$+=�?I%:I%+=1:�?I%<14:=A$ �� �errorbox �ș Drag,,-1 �2!buffer%=�:$(buffer%+4)=�$+" (code "+Þ+")"+�0 �2ș "Wimp_ReportError",buffer%,%11,m$(20) � ,A% �+�A%=2 �removearea:ș "Wimp_CloseDown":� �� �S� �ChangeFSI(A$,spritearea%,workspace%,worklimit%,oksave%,okinfo%,� ram%,fast%) �M� A$(),r%(),g%(),b%(),rpal%(),gpal%(),bpal%(),table%(),cl%(),xl%(),xl2%() �D� xp%(),rm%(),rm1%(),rm2%(),vals%(),nl%(),A%(),B%(),new%(),st%() �$ȕ�A$,1)<>" "��A$<>0 A$=�A$,2):� �ȕ�A$,1)=" " A$=�A$,2):� �ȕ�A$,1)=" " A$=�A$):� �uc(�A$,5))="-QUIT" � .A$=�A$,7):ȕ�A$,1)<>" "��A$<>0 A$=�A$,2):� ȕ�A$,1)=" " A$=�A$,2):� &� 0 � A$(100):ARG%=0:B%=�A$," ") :ȕ B%<>0 D+ARG%+=1:A$(ARG%)=�A$,B%-1):A$=�A$,B%+1) Nȕ �A$,1)=" ":A$=�A$,2):� XB%=�A$," ") b� l�A$<>"" ARG%+=1:A$(ARG%)=A$ vXinvert%=�:range%=�:sharpen%=�:info%=�:cache%=�:cacheareanumber%=0:dither%=�:black%=� �Chist%=�:equal%=�:vflip%=�:hflip%=�:scale%=�:scaleo%=�:scrapf%=� �6gamma=1:rotate%=�:max%=20000000:bright%=15:lock%=� �rwt=.299:gwt=.587:bwt=.114 � �ARG%<3 � �J�"ChangeFSI interactive input (read FSIinfo for command line details)" �?�"Source file: "s$,"Destination file: "f$,"Output mode: "m$ �/�"(X)Scale (e.g. 2:1): "xs$:�"Y Scale: "ys$ �8�"Info on input picture?"a$:�uc(�a$,1))="Y" info%=� �;�"Invert picture colours?"a$:�uc(�a$,1))="Y" invert%=� �=�"Compute histogram of input?"a$:�uc(�a$,1))="Y" hist%=� �@�"Apply histogram equalisation?"a$:�uc(�a$,1))="Y" equal%=� �G�"Expand input dynamic range?"a$:�uc(�a$,1))="Y" range%=�:equal%=� �=�"Sharpen picture by (e.g. 12 for harsh, 24 for soft) "a$ �a$<>"" sharpen%=�a$ +�"Rotate?"a$:�uc(�a$,1))="Y" rotate%=1 scale%=�:scaleo%=�:fast%=� � * � A%=ARG% 46�uc(A$(ARG%))="-INFO" info%=�:A$(ARG%)="":ARG%-=1 >6�uc(A$(ARG%))="-HIST" hist%=�:A$(ARG%)="":ARG%-=1 H6�uc(A$(ARG%))="-LOCK" lock%=�:A$(ARG%)="":ARG%-=1 RA�uc(A$(ARG%))="-EQUAL" equal%=�:range%=�:A$(ARG%)="":ARG%-=1 \A�uc(A$(ARG%))="-RANGE" range%=�:equal%=�:A$(ARG%)="":ARG%-=1 f:�uc(A$(ARG%))="-INVERT" invert%=�:A$(ARG%)="":ARG%-=1 pD�uc(A$(ARG%))="-NOSCALE" scale%=�:scaleo%=�:A$(ARG%)="":ARG%-=1 z9�uc(A$(ARG%))="-NOSIZE" scale%=�:A$(ARG%)="":ARG%-=1 �<�uc(A$(ARG%))="-NODITHER" dither%=�:A$(ARG%)="":ARG%-=1 �=�uc(A$(ARG%))="-BRIGHTEN" bright%=16:A$(ARG%)="":ARG%-=1 �:�uc(A$(ARG%))="-ROTATE" rotate%=1:A$(ARG%)="":ARG%-=1 �<�uc(A$(ARG%))="-ROTATE-" rotate%=-1:A$(ARG%)="":ARG%-=1 �8�uc(A$(ARG%))="-VFLIP" vflip%=�:A$(ARG%)="":ARG%-=1 �8�uc(A$(ARG%))="-HFLIP" hflip%=�:A$(ARG%)="":ARG%-=1 �8�uc(A$(ARG%))="-NOMODE" fast%=�:A$(ARG%)="":ARG%-=1 �!�uc(�A$(ARG%),6))="-BLACK" � �Fblack%=32:�A$(ARG%)>6 black%=��A$(ARG%),7):�black%>128 black%=128 �A$(ARG%)="":ARG%-=1 �� �!�uc(�A$(ARG%),6))="-GAMMA" � �.gamma=2.2:�A$(ARG%)>6 gamma=��A$(ARG%),7) A$(ARG%)="":ARG%-=1 � #�uc(�A$(ARG%),8))="-SHARPEN" � $2sharpen%=�:�A$(ARG%)>8 sharpen%=��A$(ARG%),9) .A$(ARG%)="":ARG%-=1 8� BC�uc(�A$(ARG%),4))="-RED" rwt=��A$(ARG%),5):A$(ARG%)="":ARG%-=1 LE�uc(�A$(ARG%),6))="-GREEN" gwt=��A$(ARG%),7):A$(ARG%)="":ARG%-=1 VD�uc(�A$(ARG%),5))="-BLUE" bwt=��A$(ARG%),6):A$(ARG%)="":ARG%-=1 `�uc(�A$(ARG%),4))="-MAX" � jDmax%=��A$(ARG%),5):�A$(ARG%),"K")��A$(ARG%),"k") max%=max%*1024 tA$(ARG%)="":ARG%-=1 ~� ��A%=ARG% �2s$=A$(1):f$=A$(2):m$=A$(3):xs$=A$(4):ys$=A$(5) �� ��okinfo% �info%=� ��workspace%>=0 � �flex%=� �� �<�worklimit%=0 �flex%=� �flex%=�:nextlocation%=worklimit% �� �"pnm$=�uc(m$):Ȏ �pnm$+",",3) � ��"AIM":m=-1:m$="" �"�"P1,","P4,":m=-2:m$="":spm=18 #�"P2,","P5,":m=-2:m$="T":spm=20 =�"P3,","P6,":m=-4:pnm$=�pnm$,2):p6bits=8:I%=��m$,4):m$="" �I%>0�I%<8 p6bits=I% �"P15":m=-3:m$="" (�"C15":m=-5:m$="" 2�"IRL":m=-4:m$="":p6bits=8 <�"S16":m=-6:m$="" F�"S24":m=-7:m$="":p6bits=8 P�"S32":m=-8:m$="":p6bits=8 Z5:m=�m$:spm=m:m$=�uc(�m$,1)):�"CDRT",m$)=0 m$="" d� n�xs$="" � �xs$,1)="-" � x#xmul%=1:xdiv%=1:ymul%=1:ydiv%=1 �� ��ys$="" ys$=xs$ �'xmul%=�xs$:xdiv%=��xs$,�xs$,":")+1) �'ymul%=�ys$:ydiv%=��ys$,�ys$,":")+1) �� �&flag=-1:ș8,5,s$ � r0,,r2:dir=r0=2 � �dir � �Cpanic=�:ș8,5,s$+".raw" � r0,,r2:�r0=1 s$+=".raw":dir=�:panic=� �1�panic ș8,5,s$+".red" � r0,,r2:�r0=1 panic=� �!�panic � 42,"Directory given" �� �>ftype=r2>>8 � &FFF:bits=28:F=2^bits:c%=0:cc%=0:ccc%=0:o%=0 � �dir � >c%=�(s$+".red"):�c%=0 � 42,"Red file "+s$+".red not found" Ecc%=�(s$+".green"):�cc%=0 �42,"Green file "+s$+".green not found" Dccc%=�(s$+".blue"):�ccc%=0 �42,"Blue file "+s$+".blue not found" "� ,-c%=�s$:�c%=0 � 42,"File "+s$+" not found" 6� @� � J� � � � �:�close:� �,�$ T � r%(255) ^� g%(255),b%(255) hș&66f4d �;pcd% rȎ ftype � |� &FF9:flag=0 �.�"."+�uc(s$),".HIP.")���uc(s$),":HIP.") � � flag=300:I%=��uc(s$),"HIP.") �?�s$,I%)="LOP.":cc%=�s$:�cc%=0 �42,"Can't find Lop file "+s$ �� �+� &FF0:�#c%=0:S$="":�I%=1�4:S$+=��#c%:� �&�S$="II*"+�0 flag=1500:bigendian=� �)�S$="MM"+�0+"*" flag=1500:bigendian=� �!� &DFA:flag=800:�dir flag=801 �� &DE2:flag=1000 � � &BE8:�(pcd%�1)=0 flag=3600 �� &7A0:flag=1200 �� &69d:flag=2000 �� &699:flag=700 � &698:flag=100 � &697:flag=1900 � &691:flag=2600 &� &690:flag=2500 0� &666:flag=666 :� &601:flag=3000 D� &371:flag=3100 N#� &300:flag=1300:�dir flag=1301 X� 4:flag=900:�dir flag=901 b� 6:flag=950 l� v�flag=-1 � �%�#c%=0:S$="":�I%=1�22:S$+=��#c%:� ��S$,7)="FSIfile" flag=2100 �)�flag=-1 �S$,8)="SIMPLE " flag=2800 �C�flag=-1 �uc(�S$,8))="MERCSOFT"��uc(�S$,8))="SNAPSHOT"flag=902 �-�flag=-1 �uc(�S$,8))="MERCSOF1" flag=903 �4�flag=-1 �uc(�S$,13))="IRLAM YUV 411" flag=2250 �&�flag=-1 �S$,5)="Irlam" flag=2200 �.�flag=-1 �S$,2)="BM" flag=2400:riffoff%=0 �X�flag=-1 �S$,4)="RIFF" � �S$,9,8)="RDIBdata" � �S$,21,2)="BM" flag=2400:riffoff%=20 �$�flag=-1 �S$,4)="GIF8" flag=500 �%�flag=-1 �S$,5)="AV_VO" flag=600 �2�flag=-1 �S$,4)=�&59+�&A6+�&6A+�&95 flag=1100 �*�flag=-1 �S$,4)=�0+�1+�0+�8 flag=1400 !*�flag=-1 �S$,4)=�0+�1+�0+�1 flag=2900 !%�flag=-1 �S$,4)="RIX3" flag=2700 !3�flag=-1 �S$,4)="II*"+�0 flag=1500:bigendian=� ! 6�flag=-1 �S$,4)="MM"+�0+"*" flag=1500:bigendian=� !*(�flag=-1 �S$,2)=�&52+�&CC flag=2300 !4D�flag=-1 �S$,2)="P4"��S$,2)="P5"��S$,2)="P6" flag=3300:info$="" !>$�flag=-1 �S$,3)="P15" flag=3400 !H$�flag=-1 �S$,3)="PIC" flag=3500 !R)�flag=-1 �uc(�S$,3))="P13" flag=3450 !\6�flag=-1 �S$,4)="FORM" �S$,9,4)="ILBM" flag=1600 !f�flag=-1 � !p#�S$,7,4)="JFIF" � ftype=&C85 � !z*jpegblk%=�dim(20):�cachesize(jpegblk%) !��cache%<�#c% � !��#c%:X%=�"Run:djpeg" !� �X% � !�7�#X%:ș"Wimp_StartTask","djpeg "+s$+" <Wimp$Scrap>" !�� !�0ș"XOS_CLI","djpeg "+s$+" <Wimp$Scrap>" � ;V !��V �1 � !�Bș"Wimp_StartTask","<ChangeFSI$Dir>.djpeg "+s$+" <Wimp$Scrap>" !�� !�� !�"c%=�"<Wimp$Scrap>":�c%=0 �=100 !�>scrapf%=�:flag=3300:info$="JPEG (JFIF) file converted to " !�� " flag=3700 "� "� "$� ".�flag=-1 � "8&�#c%=&10:S$="":�I%=1�9:S$+=��#c%:� "B�S$="MILLIPEDE" flag=200 "L� "V�flag=-1 � "`&�#c%=&41:S$="":�I%=1�8:S$+=��#c%:� "j%�S$,4)="PNTG" flag=1800:st%=&280 "t� "~�flag=-1 � "�&�#c%=196:S$="":�I%=1�8:S$+=��#c%:� "�%�S$,4)="PNTG" flag=1800:st%=&2e2 "�� "��flag=-1 � "�&�#c%=522:S$="":�I%=1�8:S$+=��#c%:� "�2�S$=�0+�&11+�2+�&ff+�&c+�0+�&ff+�&fe flag=1850 "�� "��flag=-1 � "��#c%=0:�#c%=10 � "�+C%=�#c%:�C%<6 � C%<>1 ��#c%=1 flag=1900 "�� "�� # M�flag=-1 �"."+�uc(s$),".PCX.")���uc(s$),":PCX.")��s$,4)="/PCX" flag=1900 # B�flag=-1 �"."+�uc(s$),".IMAGE.")���uc(s$),":IMAGE.") flag=400 #)�flag=-1 �uc(�s$,4))=".RAW" flag=100 #)�flag=-1 �uc(�s$,3))="TGA" flag=2000 #()�flag=-1 �uc(�s$,3))="VDA" flag=2000 #2>�flag=-1 �"."+�uc(s$),".PIC.")���uc(s$),":PIC.") flag=700 #<M�flag=-1 �"."+�uc(s$),".IMG.")���uc(s$),":IMG.")��s$,4)="/IMG" flag=1400 #FM�flag=-1 �"."+�uc(s$),".DSP.")���uc(s$),":DSP.")��s$,4)="/DSP" flag=1700 #P*�flag=-1 �uc(�s$,4))="/RGB" flag=3200 #Z<�flag=-1 �(�uc(�s$,4))="/PCD"�ftype=&be8)�((pcd%�1)=1) � #do�#c%:ș"Wimp_StartTask","<ChangeFSI$Dir>.hpcdtoppm -3 -a "+s$+" <Wimp$Scrap> { > <ChangeFSI$Dir>.pcdtemp }" #nMc%=�"<Wimp$Scrap>":scrapf%=�:flag=3300:info$="PhotoCD file converted to " #x� #�� #�c�flag=-1 �close:� 42,"Sorry: format not recognised - please try again or contact your supplier" #�Bstep24=1:input=8:ham=0:planar%=0:bigendianbits=�:r$="FN"+�flag #�9compression=0:hpredict%=1:striprows%=-1:cachebytes%=� #��xdiv%=0 � ydiv%=0 scale%=� #� Ȏ flag � #�� 0 #�@quant%=4:�#c%=4:F%=�W+&1C:�#c%=F%:st%=�W+F%-&20:K%=�W+F%-&20 #�sm=�W:�sm<256 � #�ș53,sm,3 � ,,I% #�Ȏ I% � #�%� 1:�st%=F%+12 �defpal2 ��ipal(2) #�5�#c%=F%-16:sx%=(�W+1)*32:rowbytes%=sx%>>3:input=1 $sy%=�W+1:I%=�W:sx%-=31-�W $%� 3:�st%=F%+12 �defpal4 ��ipal(4) $5�#c%=F%-16:sx%=(�W+1)*16:rowbytes%=sx%>>2:input=2 $"!sy%=�W+1:I%=�W:sx%-=(31-�W)�2 $,(� 15:�st%=F%+12 �defpal16 ��ipal(16) $64�#c%=F%-16:sx%=(�W+1)*8:rowbytes%=sx%>>1:input=4 $@!sy%=�W+1:I%=�W:sx%-=(31-�W)�4 $J� 63,255:�st%=F%+12 � $T�defpal $^� $h�K%>st% K%=st% $r�K%-12-F%=2048 �I%=255 � $|�#c%=&38 $��C%=0�255:D%=�#c% $�9r%(C%)=�#c%/255*F:g%(C%)=�#c%/255*F:b%(C%)=�#c%/255*F $�D%=�W:� $�� $��ipal63 $�� $�� $�G�#c%=F%-16:sx%=(�W+1)*4:rowbytes%=sx%:sy%=�W+1:I%=�W:sx%-=(31-�W)�8 $�) �42,"Not understood RISC OS sprite" $�� $�@r$="FN8":ș53,sm,4 � ,,nx:ș53,sm,5 � ,,ny:nx=1<<nx:ny=1<<ny $�-�scale% xmul%=xmul%*nx/2:ymul%=ymul%*ny/2 $�Sinfo$="RISC OS sprite, mode "+�sm+" "+�sx%+" by "+�sy%+" pixels, "+�bits(input) %� %bpp%=sm>>>27:Ȏbpp% � %9� 1:bpp%=1:r$="FN8":�st%=F%+12 �defpal2 ��newropal(2) %&9� 2:bpp%=2:r$="FN8":�st%=F%+12 �defpal4 ��newropal(4) %0;� 3:bpp%=4:r$="FN8":�st%=F%+12 �defpal16 ��newropal(16) %::� 4:bpp%=8:r$="FN8":�st%=F%+12 �defpal ��newropal(256) %D&� 5:bpp%=16:r$="FN16":�st%=F%+12 � %N$� rpal%(255),gpal%(255):step24=2 %X �C%=0�255 %b"gpal%(C%)=(C%>>5)<<8 � (C%�31) %l+rpal%(C%)=((C%>>2)�31)<<16 � (C%�3)<<11 %v� %�1�C%=0�31:r%(C%)=C%/31*F:�:g%()=r%():b%()=r%() %�-� 6:bpp%=32:r$="FN24":�st%=F%+12 �nopal � %�!rbo%=0:gbo%=1:bbo%=2:step24=4 %�-� 8:bpp%=24:r$="FN24":�st%=F%+12 �nopal � %�rbo%=0:gbo%=1:bbo%=2 %�8 �42,"Not understood new format RISC OS sprite bpp" %�� %�(nx=(sm>>1) �&1fff:ny=(sm>>14) �&1fff %�G�scale% xdiv%=xdiv%*nx:ydiv%=ydiv%*ny:xmul%=xmul%*90:ymul%=ymul%*90 %�Z�#c%=F%-16:rowbytes%=(�W+1)*4:sy%=�W+1:I%=�W:sx%=(rowbytes%*8-(31-�W))/bpp%:input=bpp% %�Jinfo$="New RISC OS sprite, "+�sx%+" by "+�sy%+" pixels, "+�bits(input) %��bpp%=32 input=24 %�� &�#c%=st%:cache%=� & � 100 &Equant%=8:�#c%=0:sx%=�HW:sy%=�HW:�nopal:input=24:rowbytes%=sx%*3+2 & 5rbo%=2:gbo%=2+sx%:bbo%=2+2*sx%:r$="FN24":cache%=� &*Jinfo$="QRT .raw image, "+�sx%+" by "+�sy%+" pixels, 24 bits per pixel" &4 � 200 &>Gquant%=8:�#c%=5:sx%=�HW:sy%=�HW:sx%=(�HW-sx%+2)/2:sy%=(�HW-sy%+2)/2 &H$�#c%=&1a:cadsoft%=�#c%:�#c%=&200 &R!�C%=0�255:r%(C%)=�#c%/255*F:� &\!�C%=0�255:g%(C%)=�#c%/255*F:� &f!�C%=0�255:b%(C%)=�#c%/255*F:� &p-�#c%=&600:st%=&600:cache%=�:�cadsoft%=2 � &zCrep%=0:r$="FN1100":plbuff%=�dim(sx%):plbytes%=sx%:cachebytes%=� &�� &�r$="FN8":rowbytes%=sx% &�� &�[info$="Cadsoft type "+�cadsoft%+" image, "+�sx%+" by "+�sy%+" pixels, 8 bits per pixel" &� � 300 &�Iquant%=5:�#c%=&2c:st%=�W+(&38-&2c):�#cc%=&2c:stcc%=�W1(cc%)+(&38-&2c) &�7�#c%=&1c:sx%=(�W+1)*4:sy%=�W+1:�#c%=st%:�#cc%=stcc% &�;� rpal%(255),gpal%(255):input=16:cache%=�:rowbytes%=sx% &� �C%=0�255 &�.rpal%(C%)=C%�7 � (C%�64)<<2 � (C%�&38)<<13 &�Sgpal%(C%)=(C%�4)<<1�C%�16 � ((C%�3)<<1�(C%�&60)>>2)<<8 � (C%�8�(C%�128)>>3)<<16 &�� &�1�C%=0�31:r%(C%)=C%/31*F:�:g%()=r%():b%()=r%() '*pbuff%=�dim(sx%):�scale% ymul%=ymul%*2 'Ginfo$="ArVis image, "+�sx%+" by "+�sy%+" pixels, 15 bits per pixel" ' � 400 '$Equant%=8:�#c%=0:sx%=�beHW:sy%=�beHW:X%=�beHW:st%=�#c%+X%:�#c%=st% '.Vplbuff%=�dim(sx%*3):plbytes%=sx%*3:rb%=plbuff%:gb%=plbuff%+1:bb%=plbuff%+2:rbo%=-1 '8:�nopal:input=24:rep%=0:cachebytes%=�:cache%=�:step24=3 'B^info$="RT image. run length encoded image, "+�sx%+" by "+�sy%+" pixels, 24 bits per pixel" 'L � 500 'V,compression=5:�#c%=6:GIFsx=�HW:GIFsy=�HW '`8GIF=�#c%:GIFback=�#c%:GIFext=�#c%:quant%=(GIF � 7)+1 'j�GIF � &80 � 't�C%=0�(1<<quant%)-1 '~9r%(C%)=�#c%/255*F:g%(C%)=�#c%/255*F:b%(C%)=�#c%/255*F '�� '�� '�>I%=�#c%:�I%<>�"," � 42,"GIF file without , in right place" '�,GIFleft=�HW:GIFright=�HW:sx%=�HW:sy%=�HW '��GIFsx<sx% � GIFsy<sy% � '��info% � '�)�"GIF file with bigger image inside:" '�;�"Screen ";GIFsx"x by "GIFsy"y; image "sx%"x by "sy%"y" '�/�"Continue with monitor's size [Y or y]?"A$ '�&�A$="Y"�A$="y" sx%=GIFsx:sy%=GIFsy '�(�"Continuing with ";sx%"x by "sy%"y" '�� ( � ( )GIF=�#c%:�GIF � &40 flag=501:r$="FN8" (Jsetcodes%=�#c%:clearcode%=1<<setcodes%:st%=�#c%:cache%=�:cachebytes%=� (E� table%(1<<12):stk%=�dim(1<<13):buf%=�dim(280):plbuff%=�dim(sx%) ((&�I%=0�clearcode%-1:table%(I%)=I%:� (2Ainfo$="GIF file, "+�sx%+" by "+�sy%+" pixels, "+�bits(quant%) (< � 600 (Fquant%=8:�#c%=&5c:�C%=0�255 (P9r%(C%)=�#c%/255*F:g%(C%)=�#c%/255*F:b%(C%)=�#c%/255*F (Z� (d�#c%=&36e:sy%=�HW:sx%=�HW (n5st%=&380:�#c%=st%:rowbytes%=sx%:r$="FN8":cache%=� (xEinfo$=".PIC image, "+�sx%+" by "+�sy%+" pixels, 8 bits per pixel" (� � 700 (�$quant%=8:�#c%=0:a$=�#c%:st%=�#c% (� sx%=�a$:sy%=�(�a$,�a$," "))) (�6�nopal:input=24:step24=3:rowbytes%=sx%*3:r$="FN24" (�!rbo%=0:gbo%=1:bbo%=2:cache%=� (�Jinfo$="MTV .pic image, "+�sx%+" by "+�sy%+" pixels, 24 bits per pixel" (� � 800 (�)sx%=512:sy%=256:�scale% ymul%=ymul%*2 (�4plbuff%=�dim(sx%):rep%=0:wt%=0:wtsx%=plbuff%+sx% (�cache%=�:cachebytes%=� (�@�C%=0�255:r%(C%)=(C%�63)/63*F:�:g%()=r%():b%()=r%():quant%=6 (�Jinfo$="Watford digitiser picture, 512 by 256 pixels, 6 bits per pixel" (� � 801 );sx%=512:sy%=256:input=24:quant%=6:�scale% ymul%=ymul%*2 )0rep1%=0:wt1%=0:rep2%=0:wt2%=0:rep3%=0:wt3%=0 )=buff%=�dim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+2*sx% )":wtsx1%=buff%+sx%:wtsx2%=buff%+2*sx%:wtsx3%=buff%+3*sx% ),7�C%=0�255:r%(C%)=(C%�63)/63*F:�:g%()=r%():b%()=r%() )6Rinfo$="Triple Watford digitiser picture, 512 by 256 pixels, 18 bits per pixel" )@ � 900 )J'quant%=8:st%=0:�#c%=0:�#c%=65536 � )T7sx%=256:sy%=256:�scale% ymul%=ymul%*2:xmul%=xmul%*2 )^� )hsx%=512:sy%=512 )r� )|S�C%=0�255:r%(C%)=C%/255*F:�:g%()=r%():b%()=r%():rowbytes%=sx%:r$="FN8":cache%=� )�?info$="AIM .raw image, 256 by 256 pixels, 8 bits per pixel" )� � 901 )�quant%=4:�#c%=65536 � )�7sx%=256:sy%=256:�scale% ymul%=ymul%*2:xmul%=xmul%*2 )�� )�sx%=512:sy%=512 )�� )�=buff%=�dim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+sx%*2 )�3�C%=0�255:r%(C%)=C%/255*F:�:g%()=r%():b%()=r%() )�Oinput=24:info$="Hawk V9 Triple image, 256 by 256 pixels, 24 bits per pixel" )� � 902 )�Bquant%=4:�#c%=8:sx%=�W:rowbytes%=sx%*3/2:sy%=�W:st%=20:�#c%=20 )��scale% ymul%=ymul%*2 *Mplbuff%=�dim(sx%*3):rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2:rbo%=-1 *@�C%=0�255:r%(C%)=(C%�&F)/&F*F:�:g%()=r%():b%()=r%():cache%=� *binput=24:info$="Hawk V9/Snapshot Colour image, "+�sx%+" by "+�sy%+" pixels, 12 bits per pixel" *& � 903 *0\quant%=5:�#c%=8:sx%=�W:rowbytes%=sx%*2:sy%=�W:st%=20:�#c%=20:cache%=�:r$="FN16":flag=700 *:-� rpal%(255),gpal%(255):input=16:step24=2 *D �C%=0�255 *N"gpal%(C%)=(C%>>5)<<8 � (C%�31) *X+rpal%(C%)=((C%>>2)�31)<<16 � (C%�3)<<11 *b� *l1�C%=0�31:r%(C%)=C%/31*F:�:g%()=r%():b%()=r%() *v_input=16:info$="Hawk V9 mk II Colour image, "+�sx%+" by "+�sy%+" pixels, 16 bits per pixel" *� � 950 *�@quant%=8:�#c%=0:sx%=512:rowbytes%=512:sy%=512:st%=0:flag=900 *�E�C%=0�255:r%(C%)=C%/255*F:�:g%()=r%():b%()=r%():r$="FN8":cache%=� *�Finfo$="Wild Vision V12 image, 512 by 512 pixels, 8 bits per pixel" *� � 1000 *�Tquant%=4:sx%=640:sy%=256:�defpal:st%=�W:r$="FN"+�(1000+�W):�scale% ymul%=ymul%*2 *�%buff%=�dim(sx%):ctable%=�dim(st%) *�"ș12,4,c%,ctable%,st%:st%=�#c% *�.pa%=ctable%:rep%=0:rep2%=0:pasx%=buff%+sx% *�Ainfo$="ProArtisan image, 640 by 256 pixels, 8 bits per pixel" *� � 1100 *�@quant%=1:�#c%=4:sx%=�beW:sy%=�beW:input=�beW:bigendianbits=� +S%=�beW:S%=�beW +Icache%=�:�S%=2 cachebytes%=�:info$="Byte Encoded " �info$="":r$="FN8" +C%=�beW + D%=�beW +*Ȏ C% � +4 � 1,2 +>$�I%=0�D%/3-1:r%(I%)=�#c%/255*F:� +H$�I%=0�D%/3-1:g%(I%)=�#c%/255*F:� +R$�I%=0�D%/3-1:b%(I%)=�#c%/255*F:� +\ +fȎ input � +p� 1:r%(0)=F:g%(0)=F:b%(0)=F +z� 4,8:�nopal +�� 24:�nopal +�� +�� +�Ȏ input � +� � 1:rowbytes%=(sx%+15>>4)<<1 +�� 4:rowbytes%=(sx%+3>>2)<<1 +�� 8:rowbytes%=(sx%+1>>1)<<1 +�J� 24:rowbytes%=(3*sx%+1>>1)<<1:r$="FN24":rbo%=0:gbo%=1:bbo%=2:step24=3 +��S%=1 bbo%=0:rbo%=2 +�&:� 42,"Can't do this Sun pixrect" +�� +�Mst%=D%+&20:rep%=0:�cachebytes% plbuff%=�dim(rowbytes%):plbytes%=rowbytes% +�Binfo$+="Sun image, "+�sx%+" by "+�sy%+" pixels, "+�bits(input) , � 1200 ,>quant%=8:sx%=800:sy%=800:st%=1600:�#c%=st%:vflip%=� vflip% ,*�nopal:r$="FN8":rowbytes%=sx%:cache%=� ,$Iinfo$="TimeStep satellite image, 800 by 800 pixels, 8 bits per pixel" ,. � 1300 ,8?quant%=8:sx%=128:sy%=256:st%=0:�#c%=0:�scale% xmul%=xmul%*2 ,B*�nopal:r$="FN8":rowbytes%=sx%:cache%=� ,L@info$="satellite image, 128 by 256 pixels, 8 bits per pixel" ,V � 1301 ,`;input=24:quant%=8:sx%=128:sy%=256:�scale% xmul%=xmul%*2 ,jObuff%=�dim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+2*sx%:�nopal:r$="FN901" ,tHinfo$="Triple satellite image, 128 by 256 pixels, 24 bits per pixel" ,~ � 1400 ,�%planar%=�:�#c%=0:Z%=�HW:�Z%>255 � ,�+st%=�beHW*2:planes%=�beHW:patlen%=�beHW ,�+pw%=�beHW:ph%=�beHW:sx%=�beHW:sy%=�beHW ,�� ,�Cst%=�HW*2:input=�HW:patlen%=�HW:pw%=�HW:ph%=�HW:sx%=�HW:sy%=�HW ,�� ,� �scale% � ,�#xmul%=xmul%*pw%:xdiv%=xdiv%*282 ,�#ymul%=ymul%*ph%:ydiv%=ydiv%*282 ,�� ,�Wrowbytes%=sx%+7>>3:pbuff%=�dim(sx%):plbytes%=rowbytes%*planes%:buff%=�dim(plbytes%) ,��#c%=st%:vrep%=0 - M�C%=0�(1<<planes%)-1:r%(C%)=F-C%/((1<<planes%)-1)*F:�:g%()=r%():b%()=r%() - Binfo$="IMG file, "+�sx%+" by "+�sy%+" pixels, "+�bits(planes%) - � 1500 -"�#c%=4:dir%=�tiff(4):�#c%=dir% -(6rgb=�:greyunit=100:planar%=1:fillorder=1:resunit=2 -2)xnum%=90:xdenom%=1:ynum%=90:ydenom%=1 -<E%=�tiff(3):�Z%=1�E% -F'T%=�tiff(3):D%=�tiff(3):C%=�tiff(4) -Pa�C%>1 V%=�tiff(4) ��D%=2 �#c%=dir%+2+Z%*12 ��D%<4 V%=�tiff(D%):�#c%=dir%+2+Z%*12 �V%=�tiff(4) -dȎ T% � -n� 256:sx%=V% -x� 257:sy%=V% -�� 258:�C%>1 � -��D%*C%>6 � -��#c%=V%:quant%=�tiff(D%) -�(input=quant%:�I%=1�C%-1:V%=�tiff(D%) -�P�V%<>quant% �42,"Can't do RGB TIFF with different numbers of bits per pixel" -� input+=V% -��:�nopal -�� -� quant%=V% � &FF:input=quant% -�5�I%=0�(1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:� -�g%()=r%():b%()=r%() -�� -��#c%=dir%+2+Z%*12 .� .quant%=V%:input=quant% .5�I%=0�(1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:� ."g%()=r%():b%()=r%() .,� .6� 259:compression=V% .@/� 262:photometric=V%:�V%=0 invert%=�invert% .J� 266:fillorder=V% .T!� 273:stc%=C%:stv%=V%:std%=D% .^1� 277:sampperpix%=V%:input=quant%*V%:rgb=V%=3 .h� 278:striprows%=V% .r-� 279:stcbyte%=C%:stvbyte%=V%:stdbyte%=D% .|1� 282:�#c%=V%:xnum%=�tiff(4):xdenom%=�tiff(4) .��#c%=dir%+2+Z%*12 .�1� 283:�#c%=V%:ynum%=�tiff(4):ydenom%=�tiff(4) .��#c%=dir%+2+Z%*12 .�,� 284:planar%=V%:�planar%=2 input=quant% .�� 290:greyunit=10^V% .�<� 291:�#c%=V%:�I%=0�C%-1:r%(I%)=�tiff(D%)/greyunit/2*F:� .�g%()=r%():b%()=r%() .��#c%=dir%+2+Z%*12 .�� 296:resunit=V% .�� 317:hpredict%=V% .�8� 320:�#c%=V%:�I%=0�C%/3-1:r%(I%)=�tiff(3)/65535*F:� .�*�I%=0�C%/3-1:g%(I%)=�tiff(3)/65535*F:� .�*�I%=0�C%/3-1:b%(I%)=�tiff(3)/65535*F:� /�#c%=dir%+2+Z%*12 / /J�info% �"Ignoring tag ";T%" datatype "D%" count "C%" value/pointer "V% /&� /0� /:� st%(stc%):�stc%>1 � /D0�#c%=stv%:�I%=0�stc%-1:st%(I%)=�tiff(std%):� /X� /bst%(0)=stv% /l� /vȎ compression � /�� 0,1:info$="" /�)� 2:info$="CCITT Group 3 compressed " /�+� 5:info$="LZW compressed ":r$="FN1505" /�n�hpredict%=2 �info$+="horizontal differenced " ��hpredict%>2 info$+=" unknown predictor ("+�hpredict%+") " /�'setcodes%=8:clearcode%=1<<setcodes% /�3� table%(1<<12):stk%=�dim(1<<13):buf%=�dim(280) /�&�I%=0�clearcode%-1:table%(I%)=I%:� /�4� 32773:info$="PackBits compressed ":r$="FN1501" /� � 6:info$="JPEG compressed " /�2 info$="Compress "+�compression+" - unknown " /�� /�Binfo$+="TIFF file, "+�sx%+" by "+�sy%+" pixels, "+�bits(input) /�Sbigendianbits=fillorder=1:�#c%=st%(0):stripptr=0:�striprows%>=sy% striprows%=-1 0Ȏ input � 0� 1:rowbytes%=sx%+7>>3 0� 2:rowbytes%=sx%+3>>2 0 � 4:rowbytes%=sx%+1>>1 0*� 8:rowbytes%=sx% 04� 24:rowbytes%=3*sx% 0>+ � 42,"Can't do "+�bits(input)+" TIFF" 0H� 0R.�planar%=2 rowbytes%=rowbytes%*sampperpix% 0\I�planar%<>1 � rgb<>0 �42,"Can't do this style of TIFF yet" �planar%=� 0f� compression<2 � 0pScache%=�:stripptr=-1:r$="FN8":�input=24 rbo%=0:gbo%=1:bbo%=2:step24=3:r$="FN24" 0z� 0�'�compression=5 �compression=32773 � 0�-cache%=�:cachebytes%=rowbytes%*striprows% 0�0plbuff%=�dim(rowbytes%):rowstogo%=striprows% 0�\�input=24 rb%=plbuff%:gb%=plbuff%+1:bb%=plbuff%+2:r$="FN"+�(��r$,3)+10):step24=3:rbo%=-1 0�� 0�.buff%=�dim(rowbytes%):rowstogo%=striprows% 0�N�input=24 rb%=buff%:gb%=buff%+1:bb%=buff%+2:r$="FN"+�(��r$,3)+10):step24=3 0�� 0�� 0� �scale% � 0�S%=resunit:�S%=2 S%=90 0��S%=3 S%=35 0�,xdiv%=xdiv%*xnum%:xmul%=xmul%*xdenom%*S% 1,ydiv%=ydiv%*ynum%:ymul%=ymul%*ydenom%*S% 1� 1�r$="FN1500" r$="FN8" 1$ � 1600 1.�#c%=12:camg=0:planar%=�:� 18&S$=��#c%+��#c%+��#c%+��#c%:S%=�beW 1BȎ S$ � 1LC� "BMHD":sx%=�beHW:sy%=�beHW:S%=�W:planes%=�#c%:masking%=�#c%=1 1V6compression=�#c%:S%=�#c%+�HW:U%=�#c%:V%=�#c%:S%=�W 1`)�scale% ymul%=ymul%*V%:ydiv%=ydiv%*U% 1jK�I%=0�(1<<planes%)-1:r%(I%)=I%/((1<<planes%)-1)*F:�:g%()=r%():b%()=r%() 1tB� "CMAP":S%=�#c%+S%:�I%=0�(1<<planes%)-1:r%(I%)=(�#c%>>4)/15*F 1~1g%(I%)=(�#c%>>4)/15*F:b%(I%)=(�#c%>>4)/15*F:� 1�G�#c%=S%:�info% �"Warning: truncated IFF CMAP information to 4 bits" 1�;� "CAMG":camg=�beW:�info% �"Amiga viewport mode ";~camg 1�� "BODY":st%=�#c% 1�4 � info% �"Ignoring IFF property "S$" size ";S% 1��#c%=�#c%+S% 1�� 1�9�S$="BODY":�compression info$="Compressed " �info$="" 1�+ham=(camg � &800)<>0:�ham info$+="HAM " 1�4half=(camg � &80)<>0:�half info$+="half-bright " 1�n�half half%=1<<planes%-1:�I%=0�half%-1:r%(I%+half%)=r%(I%)/2:g%(I%+half%)=g%(I%)/2:b%(I%+half%)=b%(I%)/2:� 1�Cinfo$+="IFF file, "+�sx%+" by "+�sy%+" pixels, "+�bits(planes%) 2 +�masking% info$+=" with mask (ignored)" 2 7rowbytes%=(sx%+15>>4)<<1:plbytes%=rowbytes%*planes% 29pbuff%=�dim(sx%):r$="FN"+�(1600+compression):cache%=� 2�compression � 2((cachebytes%=�:plbuff%=�dim(plbytes%) 22� 2<Qrealrowbytes%=rowbytes%:rowbytes%=plbytes%:�masking% rowbytes%+=realrowbytes% 2F� 2P�#c%=st% 2Z � 1700 2dBsx%=640:rowbytes%=80:sy%=350:planes%=4:plbytes%=4*80:planar%=� 2n3buff%=�dim(80*4):pbuff%=�dim(640):G=F/3:H=F*2/3 2x(r%()=0,0,0,0,F,F,F,H,G,G,G,G,F,F,F,F 2�(g%()=0,0,F,F,0,0,F,H,G,G,F,F,G,G,F,F 2�(b%()=0,F,0,F,0,F,0,H,G,F,G,F,G,F,G,F 2�Vmasking%=�:r$="FN1600":st%=16:�#c%=16:cache%=�:realrowbytes%=80:rowbytes%=plbytes% 2�Sinfo$="PC EGA '.dsp' file, 640 by 350 pixels, 4 bits per pixel (fixed palette)" 2� � 1800 2�?sx%=72*8:sy%=720:quant%=1:input=1:�#c%=st%:plbuff%=�dim(72) 2�cache%=�:cachebytes%=� 2�Qr%(0)=F:g%(0)=F:b%(0)=F:bigendianbits=�:rowbytes%=72:r$="FN1501":rowstogo%=-1 2�G�scale% xmul%=xmul%*90:xdiv%=xdiv%*72:ymul%=ymul%*90:ydiv%=ydiv%*72 2�>info$="MacPaint file, 576 by 720 bits, creator id "+�S$,4) 2� � 1850 2��#c%=552 2�done%=� 3� 3code%=�beHW:Ȏ code% � 3� &01:�#c%=�#c%+�beHW 3" � &1E 3, � &98 36Crowbytes%=�beHW:�(rowbytes% �&8000)=0 �42,"PICT without Pixmap" 3@3sy%=�beHW:sx%=�beHW:sy%=�beHW-sy%:sx%=�beHW-sx% 3J<junk%=�HW:packtype%=�beHW:junk%=�W:resx%=�beW:resy%=�beW 3TF�beHW<>0 �#c%:�42,"ChangeFSI expected Mac PICT2 pixeltype=Chunky" 3^&bpp%=�beHW:junk%=�beHW:junk%=�beHW 3h$junk%=�beW:junk%=�beW:junk%=�beW 3rjunk%=�beW:junk%=�beHW 3|_C%=�beHW:�I%=0�C%:J%=�beHW:r%(J%)=�beHW/65535*F:g%(J%)=�beHW/65535*F:b%(J%)=�beHW/65535*F:� 3�done%=� 3�R� &9A:junk%=�W:rowbytes%=�beHW:�(rowbytes% �&8000)=0 �42,"PICT without Pixmap" 3�3sy%=�beHW:sx%=�beHW:sy%=�beHW-sy%:sx%=�beHW-sx% 3�<junk%=�HW:packtype%=�beHW:junk%=�W:resx%=�beW:resy%=�beW 3�J�beHW<>16 �#c%:�42,"ChangeFSI expected Mac PICT2 pixeltype=RGBDirect" 3�'bpp%=�beHW:comps%=�beHW:junk%=�beHW 3�junk%=�beW:junk%=�beW 3�junk%=�beHW:junk%=�beHW 3�V�bpp%>16 �nopal �J%=2^(bpp%�3):�I%=0�J%-1:r%(I%)=I%/(J%-1)*F:�:g%()=r%():b%()=r%() 3�/�bpp%=32 � comps%=3 bpp%=24:rowbytes%=3*sx% 3�done%=� 3�C:�#c%:�42,"ChangeFSI can't understand Mac PICT2 code "+�~code% 3�� 4� done% 43junk%=�beHW:junk%=�beHW:junk%=�beHW:junk%=�beHW 43junk%=�beHW:junk%=�beHW:junk%=�beHW:junk%=�beHW 4&junk%=�beHW 40Ncache%=�:cachebytes%=�:bigendianbits=�:st%=�#c%:rowbytes%=rowbytes%��&8000 4:Y�scale% xmul%=xmul%*90*65536:xdiv%=xdiv%*resx%:ymul%=ymul%*90*65536:ydiv%=ydiv%*resy% 4D@info$="Mac PICT2, "+�sx%+" by "+�sy%+" pixels, "+�bits(bpp%) 4N%plbuff%=�dim(rowbytes%):�bpp%>8 � 4XTrbo%=-1:rb%=plbuff%+sx%:gb%=plbuff%+sx%*2:bb%=plbuff%+sx%*3:r$="FN1851":input=24 4b;�comps%=3 rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2 4l� 4v � 1900 4��#c%=1:C%=�#c% 4�?E%=�#c%:�E%<>1 � 42,"ZSoft .PCX file with unknown encoding" 4�7E%=�#c%:sx%=�HW:sy%=�HW:sx%=�HW+1-sx%:sy%=�HW+1-sy% 4�N�scale% xmul%=xmul%*90:xdiv%=xdiv%*�HW:ymul%=ymul%*90:ydiv%=ydiv%*�HW ��W 4�H�#c%=65:planes%=�#c%:planar%=planes%>1:rowbytes%=�HW:bpp%=E%*planes% 4�pcxpal=16:�bpp%>4 � C%=5 � 4�*�#c%=�#c%-769:�#c%=12 pcxpal=�#c%-768 4�� 4�5�#c%=pcxpal:E%=0:�C%=0�(1<<bpp%)*3-1:E%=E%��#c%:� 4�3�info% �".PCX palette mask established at ";~E% 4��E%=0 � 4�E�C%=0�(1<<bpp%)-1:r%(C%)=C%/((1<<bpp%)-1)*F:�:g%()=r%():b%()=r%() 4�� 5!�#c%=pcxpal:�C%=0�(1<<bpp%)-1 5Er%(C%)=(�#c%�E%)/E%*F:g%(C%)=(�#c%�E%)/E%*F:b%(C%)=(�#c%�E%)/E%*F 5� 5 � 5*�rewind 54Lplbytes%=rowbytes%*planes%:plbuff%=�dim(plbytes%):cache%=�:cachebytes%=� 5>E�planar% pbuff%=�dim(sx%) �input=bpp%:bigendianbits=�:r$="FN1100" 5HFinfo$="ZSoft .PCX file, "+�sx%+" by "+�sy%+" pixels, "+�bits(bpp%) 5R � 2000 5\8�#c%=0:L%=�#c%:C%=�#c%:I%=�#c%:J%=�HW:K%=�HW:M%=�#c% 5fCsx%=�W:sx%=�HW:sy%=�HW:B%=�#c%:ID%=�#c%:�ID%�&10 hflip%=�hflip% 5p �(ID% �&20)=0 vflip%=�vflip% 5z�#c%=�#c%+L%:Ȏ C% � 5�� 1:�M%=&18 � 5��C%=J%�K%-1 5�9b%(C%)=�#c%/255*F:g%(C%)=�#c%/255*F:r%(C%)=�#c%/255*F 5�� 5�� 5�� 5� �nopal 5�� 5�st%=�#c% 5�Ȏ I% � 5�� 1,2,3:cache%=�:�B%>8 � 5��B%>16 � 5�Linput=24:bbo%=0:gbo%=1:rbo%=2:step24=B%�8:r$="FN24":rowbytes%=step24*sx% 6� 6rowbytes%=sx%*2 67� rpal%(255),gpal%(255):input=16:step24=2:r$="FN16" 6$ �C%=0�255 6.&gpal%(C%)=(C%>>5)<<8 � (C%�31)<<16 68%rpal%(C%)=(C%>>2)�31 � (C%�3)<<11 6B� 6L1�C%=0�31:r%(C%)=C%/31*F:�:g%()=r%():b%()=r%() 6V� 6`� 6jr$="FN8":rowbytes%=sx% 6t� 6~Iinfo$="Truevision TGA image, "+�sx%+" by "+�sy%+" pixels, "+�bits(B%) 6�D� 9,10,11:step24=B%�8:rowbytes%=step24*sx%:buff%=�dim(rowbytes%) 6��B%>8 � 6��B%>16 � 6�:input=24:bb%=buff%:gb%=buff%+1:rb%=buff%+2:r$="FN2002" 6�� 6�9� rpal%(255),gpal%(255):input=16:step24=2:r$="FN2001" 6� �C%=0�255 6�&gpal%(C%)=(C%>>5)<<8 � (C%�31)<<16 6�%rpal%(C%)=(C%>>2)�31 � (C%�3)<<11 6�� 6�1�C%=0�31:r%(C%)=C%/31*F:�:g%()=r%():b%()=r%() 6�� 7 � 7 Minfo$="Truevision TGA RLE image, "+�sx%+" by "+�sy%+" pixels, "+�bits(B%) 7� 7 � 2100 7(?quant%=6:sx%=512:rowbytes%=2*sx%:sy%=256:cache%=�:r$="FN16" 72-� rpal%(255),gpal%(255):input=16:step24=2 7< �C%=0�255 7F gpal%(C%)=C%>>3 � (C%�7)<<11 7P%rpal%(C%)=(C%�7)<<8 � (C%>>3)<<16 7Z� 7d'�C%=0�31:r%(C%)=C%/31*F:�:b%()=r%() 7n�C%=0�63:g%(C%)=C%/63*F:� 7x�scale% ymul%=ymul%*2 7�Hinfo$="Pineapple image, 512 by 256 pixels, 16 bits per pixel":�#c%=7 7� � 2200 7�9quant%=8:step24=1:�#c%=0:s$=�#c%:E%=�s$,":"):st%=�#c% 7�7sx%=��s$,E%+1):sy%=��s$,E%+2+��sx%):�nopal:input=24 7�Arowbytes%=sx%*3:rbo%=0:gbo%=sx%:bbo%=2*sx%:cache%=�:r$="FN24" 7�Ginfo$="Irlam image, "+�sx%+" by "+�sy%+" pixels, 24 bits per pixel" 7� � 2250 7�H�#c%=16:sx%=�W:sy%=�W:� rpal%(255),gpal%(255),bpal%(255),table%(255) 7��C%=0�255:D%=C%�1 7�table%(C%)=(D%-16)/219*F 7��D%�128 D%-=256 7�)r%(C%)=�(D%/160*F):b%(C%)=�(D%/126*F) 7�>g%(C%)=�(-D%/160*rwt/gwt*F):gpal%(C%)=�(-D%/126*bwt/gwt*F) 8� 8,table%()=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 85st%=32:�#c%=32:cache%=�:rowbytes%=2*sx%:input=411 8"<info$="Irlam YUV 4:1:1 file "+�sx%+" by "+�sy%+" pixels" 8, � 2300 869�#c%=6:sx%=�HW:sy%=�HW:D%=�#c%:ncolors%=�#c%:input=24 8@;vflip%=�vflip%:quant%=�#c%:ncmap%=�#c%:cmaplen%=1<<�#c% 8J!�nopal:back%=�dim(4):!back%=0 8Tclrfirst%=D%�1 8^�(D%�2)=0 � 8h$�I%=0�ncolors%-1:back%?I%=�#c%:� 8r�(ncolors%�1)=0 �#c% 8|� 8��D%�4 alpha%=�dim(sx%) 8��ncmap%>0 � 8�)�I%=0�cmaplen%-1:r%(I%)=�HW/&FF00*F:� 8�)�I%=0�cmaplen%-1:g%(I%)=�HW/&FF00*F:� 8�)�I%=0�cmaplen%-1:b%(I%)=�HW/&FF00*F:� 8�� 8��D%�8 � 8�%�#c%=�HW+�#c%:�#c%�1 �#c%=�#c%+1 8�� 8�Hst%=�#c%:buff%=�dim(sx%*3):rb%=buff%:gb%=buff%+1*sx%:bb%=buff%+2*sx% 8��rewind 8�Pinfo$="Utah rle image, "+�sx%+" by "+�sy%+" pixels, "+�bits(ncolors%*quant%) 8� � 2400 92�#c%=riffoff%+&0a:st%=�W:pal%=�W:sx%=�W:sy%=�W 9 Ȏ pal% � 9� 12 9&-�#c%=riffoff%+&18:input=�HW:compression=0 90� 40 9:.�#c%=riffoff%+&1c:input=�HW:compression=�W 9D%�#c%=riffoff%+&26:xppm=�W:yppm=�W 9N� (xppm<>0 � yppm<>0) � 9X%xdiv%=xdiv%*xppm:xmul%=xmul%*3543 9b%ydiv%=ydiv%*yppm:ymul%=ymul%*3543 9l� 9v 9�+� 42,"Unknown .BMP variant ("+�pal%+")" 9�� 9�"bigendianbits=�:vflip%=�vflip% 9�Ȏ input � 9�� 1:rowbytes%=sx%+7>>3 9�� 4:rowbytes%=sx%+1>>1 9�� 8:rowbytes%=sx% 9�+� 16:rowbytes%=sx%*2:r$="FN16":step24=2 9�� rpal%(255),gpal%(255) 9� �C%=0�255 9�"gpal%(C%)=(C%>>5)<<8 � (C%�31) 9�+rpal%(C%)=((C%>>2)�31)<<16 � (C%�3)<<11 9�� :1�C%=0�31:r%(C%)=C%/31*F:�:g%()=r%():b%()=r%() :� 24:rowbytes%=sx%*3 :+rbo%=0:gbo%=1:bbo%=2:step24=3:r$="FN24" : 3�C%=0�255:r%(C%)=C%/255*F:�:g%()=r%():b%()=r%() :*4 � 42,".BMP file of unusual depth ("+�input+")" :4� :>�input<=8 � :H"�#c%=riffoff%+14+pal%:r$="FN8" :R�C%=0�2^input-1 :\?b%(C%)=�#c%/255*F:g%(C%)=�#c%/255*F:r%(C%)=�#c%/255*F:�#c% :f� :p� :zȎ compression � :�� 0:info$="Uncompressed " :�,� 1:info$="RLE8 compressed ":r$="FN2401" :�,� 2:info$="RLE4 compressed ":r$="FN2402" :�C � 42,".BMP compression type not supported ("+�compression+")" :�� :�rowbytes%=rowbytes%+3��3 :�:� compression<>0 cachebytes%=�:plbuff%=�dim(rowbytes%) :�cache%=�:�#c%=riffoff%+st% :�Oinfo$+="Windows 3.0 .BMP image, "+�sx%+" by "+�sy%+" pixels, "+�bits(input) :� � 2500 :�2�#c%=0:s$="":C%=�#c%:ȕC%<>0 s$+=�C%:C%=�#c%:� :�7s$+=" version "+äW:sx%=�W:sy%=�W:input=�W:cache%=� :�_info$="!Translator Clear format made by "+s$+", "+�sx%+" by "+�sy%+" pixels, "+�bits(input) ;�input>8 � ;K�nopal:input=24:step24=3:rowbytes%=3*sx%:rbo%=0:gbo%=1:bbo%=2:r$="FN24" ;� ;$�C%=0�2^input-1 ;.9r%(C%)=�#c%/255*F:g%(C%)=�#c%/255*F:b%(C%)=�#c%/255*F ;8� ;B"input=8:r$="FN8":rowbytes%=sx% ;L� ;Vst%=�#c% ;` � 2600 ;j�#c%=0:C%=�#c% ;tD%=�#c%:Ȏ D% � ;~!� 0:sx%=320:sy%=200:planes%=4 ;�!� 1:sx%=640:sy%=200:planes%=2 ;�!� 2:sx%=640:sy%=400:planes%=1 ;�? �42,"ChangeFSI knows nothing of "+�C%+" type Degas files" ;�� ;�]�I%=0�(1<<input)-1:D%=�beHW:r%(I%)=(D%>>8�7)/7*F:g%(I%)=(D%>>4�7)/7*F:b%(I%)=(D%�7)/7*F:� ;�<cache%=�:planar%=�:masking%=�:st%=34:�#c%=34:r$="FN1600" ;�Hrowbytes%=(sx%+15>>4)<<1:plbytes%=rowbytes%*planes%:pbuff%=�dim(sx%) ;�j�C%�128 r$="FN1601":flag=1600:cachebytes%=�:plbuff%=�dim(plbytes%) �realrowbytes%=2:rowbytes%=plbytes% ;�Cinfo$="Degas file "+�sx%+" by "+�sy%+" pixels, "+�bits(planes%) ;� � 2700 ;��#c%=4:sx%=�HW:sy%=�HW ;�Ȏ �HW � <