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 �
<