Home » Archimedes archive » Apps » Acorn Applications Update (1994)(Acorn Computers).adf » !ChangeFSI/ChangeFSI
!ChangeFSI/ChangeFSI
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 » Apps » Acorn Applications Update (1994)(Acorn Computers).adf |
Filename: | !ChangeFSI/ChangeFSI |
Read OK: | ✔ |
File size: | 2379F bytes |
Load address: | FFFFFB45 |
Exec address: | 296F1210 |
File contents
10REM > ChangeFSI 130DEF FNChangeFSIVersion="0.95 (17th Feb 94)" 140areanumber%=0 150SYS"OS_GetEnv" TO A$ 160IFINSTR(A$," -wimp") THEN 170DIM z%(1),p%(2),s%(3),m$(21) 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",,"OS_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% 400IF version%>=300 THEN 410DIM q% 255,ifactors% 15,factors% 15,pixtrans% 255,paltemp% 1023,buffer% 255,idata% 1023 420ELSE 430DIM z% 1223,q% 255,ifactors% 15,factors% 15,pixtrans% 255,paltemp% 1023,buffer% 255,idata% 2399 440ENDIF 460scrap%=FALSE 470IF version%<300 sidata%=idata% 480sprite%=FALSE:sar%=FALSE:saved%=TRUE:z$=STRING$(12,CHR$13) 500SYS "OS_Byte",161,&8C TO ,,f% 510IFf% AND 1 THEN 520SYS"Wimp_OpenTemplate",,"<ChangeFSI$Dir>.3dTemplate" 530ELSE 540SYS"Wimp_OpenTemplate",,"<ChangeFSI$Dir>.Templates" 550ENDIF 570LOCAL ERROR 580ON ERROR SYS"Wimp_CloseTemplate":ERROR 0,REPORT$+" (code "+STR$ERL+")" 600IFversion%>=300 THEN 610DIM z% FNlargest_buffer 620indsize%=FNsize_indirect("Info") 630DIM info_wind% indsize% 640SYS"Wimp_LoadTemplate",,z%,info_wind%,info_wind%+indsize%,-1,"Info"+z$,0 650ELSE 660SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2500,-1,"Info"+z$,0 TO ,,idata% 670ENDIF 680SYS CreateW,,z% TO infow%:$!(z%+88+7*32+20)=FNChangeFSIVersion 700IFversion%>=300 THEN 710indsize%=FNsize_indirect("Processing") 720DIM proc_wind% indsize% 730SYS"Wimp_LoadTemplate",,z%,proc_wind%,proc_wind%+indsize%,-1,"Processing",0 740ELSE 750SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2400,-1,"Processing",0 TO ,,idata% 760ENDIF 770SYS CreateW,,z% TO proc% 780p%(0)=!(z%+88+8*32+20):p%(1)=!(z%+88+9*32+20):p%(2)=!(z%+88+10*32+20) 800IFversion%>=300 THEN 810indsize%=FNsize_indirect("Output") 820DIM outp_wind% indsize% 830SYS"Wimp_LoadTemplate",,z%,outp_wind%,outp_wind%+indsize%,-1,"Output"+z$,0 840ELSE 850SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2400,-1,"Output"+z$,0 TO ,,idata% 860ENDIF 870SYS CreateW,,z% TO output%:admode%=!(z%+88+17*32+20):adspcl%=!(z%+88+16*32+20) 890IFversion%>=300 THEN 900indsize%=FNsize_indirect("Scaling") 910DIM scal_wind% indsize% 920SYS"Wimp_LoadTemplate",,z%,scal_wind%,scal_wind%+indsize%,-1,"Scaling"+z$,0 930ELSE 940SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2400,-1,"Scaling"+z$,0 TO ,,idata% 950ENDIF 960SYS CreateW,,z% TO scalew%:adscale%=!(z%+88+1*32+20) 970s%(0)=!(z%+88+10*32+20):s%(1)=!(z%+88+11*32+20) 980s%(2)=!(z%+88+12*32+20):s%(3)=!(z%+88+13*32+20) 1000IFversion%>=300 THEN 1010indsize%=FNsize_indirect("Save") 1020DIM save_wind% indsize% 1030SYS"Wimp_LoadTemplate",,z%,save_wind%,save_wind%+indsize%,-1,"Save"+z$,0 1040ELSE 1050SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2400,-1,"Save"+z$,0 TO ,,idata% 1060ENDIF 1070SYS CreateW,,z% TO save%:adsave%=!(z%+88+1*32+20) 1090IFversion%>=300 THEN 1100indsize%=FNsize_indirect("Sprite") 1110DIM sprt_wind% indsize% 1120SYS"Wimp_LoadTemplate",,z%,sprt_wind%,sprt_wind%+indsize%,-1,"Sprite"+z$,0 1130ELSE 1140SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2400,-1,"Sprite"+z$,0 TO ,,idata% 1150ENDIF 1160SYS CreateW,,z% TO sinfo%:adsname%=!(z%+88+5*32+20):adsbytes%=!(z%+88+8*32+20) 1170adsx%=!(z%+88+7*32+20):adsy%=!(z%+88+9*32+20):adsm%=!(z%+88+6*32+20) 1190IFversion%>=300 THEN 1200indsize%=FNsize_indirect("Source") 1210DIM src_wind% indsize% 1220SYS"Wimp_LoadTemplate",,z%,src_wind%,src_wind%+indsize%,-1,"Source"+z$,0 1230ELSE 1240SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2400,-1,"Source"+z$,0 TO ,,idata% 1250ENDIF 1260SYS CreateW,,z% TO srcinfo%:adsrc%=!(z%+88+0*32+20) 1280IFversion%>=300 THEN 1290indsize%=FNsize_indirect("Range") 1300DIM range_wind% indsize% 1310SYS"Wimp_LoadTemplate",,z%,range_wind%,range_wind%+indsize%,-1,"Range"+z$,0 1320ELSE 1330SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2400,-1,"Range"+z$,0 TO ,,idata% 1340ENDIF 1350SYS CreateW,,z% TO raninfo%:adran%=!(z%+88+0*32+20) 1370IFversion%>=300 THEN 1380indsize%=FNsize_indirect("Zoom") 1390DIM zoom_wind% indsize% 1400SYS"Wimp_LoadTemplate",,z%,zoom_wind%,zoom_wind%+indsize%,-1,"Zoom"+z$,0 1410ELSE 1420SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2400,-1,"Zoom"+z$,0 TO ,,idata% 1430ENDIF 1440SYS CreateW,,z% TO zoom%:z%(0)=!(z%+88+4*32+20):z%(1)=!(z%+88+5*32+20) 1460IFversion%>=300 THEN 1470indsize%=FNsize_indirect("Pic") 1480DIM pic_wind% indsize% 1490SYS"Wimp_LoadTemplate",,z%,pic_wind%,pic_wind%+indsize%,-1,"Pic"+z$,0 1500ELSE 1510SYS"Wimp_LoadTemplate",,z%,idata%,sidata%+2400,-1,"Pic"+z$,0 1520ENDIF 1530SYS CreateW,,z% TO pic%:adtitle%=z%!72 1550RESTORE ERROR 1560SYS"Wimp_CloseTemplate" 1570!q%=-1:q%!4=0:q%!8=0:q%!12=68:q%!16=68:q%!20=%11000000000010 1580$(q%+24)="!"+m$(20):SYS"Wimp_CreateIcon",,q% TO iconbar% 1590A%=OPENIN"<ChangeFSI$Dir>.Choices":IFA%=0 THEN 1600fast%=FALSE:statescale%=%10000000100:stateproc%=0:stateoutput%=&a008 1610$p%(0)="":$p%(1)="2.2":$p%(2)="24":$adspcl%="" 1620$admode%="28":$s%(0)="1":$s%(1)="4":$s%(2)="1":$s%(3)="4" 1630ELSE 1640INPUT#A%,fast%,statescale%,stateproc%,stateoutput% 1650INPUT#A%,$p%(0),$p%(1),$p%(2),$admode%,$adspcl% 1660INPUT#A%,$s%(0),$s%(1),$s%(2),$s%(3) 1670CLOSE#A% 1680ENDIF 1690q%!12=1<<21 1700!q%=scalew%:FORI%=0TO9:IFstatescale%>>I%AND1 q%!8=1<<21 ELSEq%!8=0 1710q%!4=I%:SYS SetI,,q%:NEXT 1720FORI%=10TO13:IFstatescale%>>I%AND1 q%!8=1<<21 ELSEq%!8=0 1730q%!4=I%+6:SYS SetI,,q%:NEXT 1740!q%=proc%:FORI%=0TO7:IFstateproc%>>I%AND1 q%!8=1<<21 ELSEq%!8=0 1750q%!4=I%:SYS SetI,,q%:NEXT 1760!q%=output%:FORI%=0TO15:IFstateoutput%>>I%AND1 q%!8=1<<21 ELSEq%!8=0 1770q%!4=I%:SYS SetI,,q%:NEXT 1780PROCshowscaletofit:$z%(0)="1":$z%(1)="1" 1790SYS "OS_UpdateMEMC" TO oldmemc 1810ON ERROR SYS"OS_UpdateMEMC",oldmemc,&700:PROCerrorbox:SYS CrMenu,,-1 1820SYS Drag,,-1 1830IFNOTsprite% SYS "Wimp_SlotSize",originalslot%,-1 1840F$="":IFstartfile% startfile%=FALSE:F$=MID$(A$,INSTR(A$,"-wimp")+6):PROCcallFSI 1850REPEAT 1860SYS Poll%,1,q% TO A% 1870CASE A% OF 1880WHEN 1 :IFsprite% PROCredraw_window(!q%) 1890WHEN 2 :PROCopen_window(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,q%!28) 1900WHEN 3 :SYS &400c3,,q%:nextlocation%=HIMEM:PROCremovearea 1910SYS "Wimp_SlotSize",originalslot%,-1:saved%=TRUE:sprite%=FALSE 1920WHEN 6 :PROCcheckmouse(!q%,q%!4,q%!8,q%!12,q%!16,q%!20) 1930WHEN 7 :SYS GetP,,q%:dw%=q%!12:di%=q%!16:IFdstart% SYS"DragASprite_Stop" 1940q%!12=0:q%!16=1:q%!20=dw%:q%!24=di%:q%!28=!q%:q%!32=q%!4 1950q%!36=!sar%+3:q%!40=&ff9:$adsave%=FNZS(adsave%) 1960foo%=INSTR($adsave%,"."):WHILEfoo% 1970$adsave%=MID$($adsave%,foo%+1):foo%=INSTR($adsave%,".") 1980ENDWHILE 1990$(q%+44)=$adsave%+CHR$0:!q%=44+(LEN$adsave%+1+3ANDNOT3) 2000SYS "Wimp_SendMessage",17,q%,dw%,di%:myref%=q%!8 2010WHEN 8 :PROCkey(!q%,q%!4,q%!24) 2020WHEN 9 :PROCmenuselect(q%) 2030WHEN 17,18:PROCreceive(q%) 2040ENDCASE 2050UNTIL FALSE 2060ELSE 2070Q%=HIMEM 2080END=&4000000 2090ON ERROR ON ERROR OFF:OSCLI"Set ChangeFSI$ReturnCode "+REPORT$+" (code "+STR$ERL+")":PROCremovearea:CLEAR:END=Q%:END 2100foo%=0:A%=FNChangeFSI(A$,-1,-1,0,-1,-1,foo%,TRUE) 2110PROCremovearea:*unset ChangeFSI$ReturnCode 2120CLEAR:END=Q% 2130ENDIF 2140END 2160DEF FNsize_indirect(name$) 2170LOCAL size% 2180SYS "Wimp_LoadTemplate",,0,,,,name$+z$,0 TO ,,size% 2190=size% 2210DEF FNwinsize_indirect(name$) 2220LOCAL size% 2230SYS "Wimp_LoadTemplate",,0,,,,name$+z$,0 TO ,size% 2240=size% 2290DEF FNlargest_buffer 2300LOCAL largest_tem%,size%,here%,name 2310DIM name 12 2320$name="*":here%=0:largest_tem%=0 2330SYS "Wimp_LoadTemplate", ,0,,,,name,0 TO ,size%,,,,,here% 2340WHILE here% 2350IF largest_tem%<size% largest_tem%=size% 2360$name= "*" 2370SYS "Wimp_LoadTemplate", ,0,,,,name,here% TO ,size%,,,,,here% 2380ENDWHILE 2390=largest_tem% 2410DEF PROCreceive(q%) 2420CASE q%!16 OF 2430WHEN 0:PROCcheckandfinish 2440WHEN 1:IFq%!20<>save% THEN 2450!q%=60:q%!12=q%!8:q%!16=2:q%!36=-1:$(q%+44)="<Wimp$Scrap>"+CHR$0 2460SYS"Wimp_SendMessage",17,q%,q%!4:scrap%=q%!8 2470ENDIF 2480WHEN 2:SYSspop%,&10C,sar%,FNZS(q%+44):$adsave%=FNZS(q%+44) 2490q%!12=q%!8:q%!16=3:SYS "Wimp_SendMessage",18,q%,q%!4 2500IF q%!36<>-1 saved%=TRUE 2510SYS CrMenu,,-1 2520WHEN 3:F$=FNZS(q%+44):IFscrap% scrap%=scrap%=q%!12 2530q%!12=q%!8:q%!16=4:SYS"Wimp_SendMessage",17,q%,q%!4 2540PROCcallFSI 2550WHEN 5:CASE q%!40 OF 2560WHEN &ff0,&c85 2570q%!12=q%!8:q%!16=4:SYS"Wimp_SendMessage",17,q%,q%!4 2580F$=FNZS(q%+44):PROCcallFSI 2590ENDCASE 2600WHEN9,&400C1:IFsprite% PROCgetmodeinfo:SYS&400d1,pic%,0,-32767,32767,0 2610PROCshowscaletofit 2620WHEN 10:SYS"XOS_ReadVarVal","ChangeFSI$Dir",paltemp%,256,0,3 TO,,bootlen% 2630paltemp%?bootlen%=13 2640BPUT#q%!20,"Run "+$paltemp% 2650ENDCASE 2660ENDPROC 2680DEF PROCcallFSI 2690A$=FNdeducemode:A%=47 2700IFFNgeticonstate(output%,12) THEN 2710A$+=$adspcl% 2720ELSE 2730IFFNgeticonstate(output%,13) THEN 2740IFFNgeticonstate(output%,2)ORFNgeticonstate(output%,8) A$+="R" 2750ELSE 2760SYS53,VALA$,3 TO,,A% 2770IFA%=63 THEN 2780IFFNgeticonstate(output%,3) A$="27t" 2790IFFNgeticonstate(output%,9) A$="12t" 2800ELSE 2810IFA%=255 A$+="d" 2820ENDIF 2830ENDIF 2840ENDIF 2850A$="garbage "+F$+" <ChangeFSI$Dir>.Foo "+A$ 2860IFFNgeticonstate(scalew%,1) A$+=" "+STR$tofitx+": "+STR$tofity+":" 2870IFFNgeticonstate(scalew%,5) A$+=" 1:2" 2880IFFNgeticonstate(scalew%,4) A$+=" 1:2 1:1" 2890IFFNgeticonstate(scalew%,3) A$+=" 1:1 1:2" 2900IFFNgeticonstate(scalew%,9) THEN 2910IFVAL$s%(0) A$+=" "+$s%(0) ELSEA$+=" 1" 2920A$+=":"+$s%(1) 2930IFVAL$s%(2) A$+=" "+$s%(2) ELSEA$+=" 1" 2940A$+=":"+$s%(3) 2950ENDIF 2960IFFNgeticonstate(scalew%,0) A$+=" -nosize" 2970IFFNgeticonstate(scalew%,18) A$+=" -noscale" 2980IFFNgeticonstate(scalew%,19) A$+=" -lock" 2990IFFNgeticonstate(scalew%,6) THEN 3000IFFNgeticonstate(scalew%,16) A$+=" -rotate" ELSEA$+=" -rotate-" 3010ENDIF 3020IFFNgeticonstate(scalew%,7) A$+=" -hflip" 3030IFFNgeticonstate(scalew%,8) A$+=" -vflip" 3040IFFNgeticonstate(proc%,0) A$+=" -range" 3050IFFNgeticonstate(proc%,1) A$+=" -equal" 3060IFFNgeticonstate(proc%,2) A$+=" -nodither" 3070IFFNgeticonstate(proc%,3) A$+=" -invert" 3080IFFNgeticonstate(proc%,4) A$+=" -brighten" 3090IFFNgeticonstate(proc%,5) A$+=" -black"+$p%(0) 3100IFFNgeticonstate(proc%,6) A$+=" -gamma"+$p%(1) 3110IFFNgeticonstate(proc%,7) A$+=" -sharpen"+$p%(2) 3120info$="":range$=m$(19):cputime%=0 3130IFsprite% !q%=pic%:SYS &400c3,,q%:saved%=TRUE:sprite%=FALSE 3140nextlocation%=HIMEM 3150SYS "Wimp_SlotSize",originalslot%,-1:PROCremovearea 3160IFfast% SYS "OS_UpdateMEMC",&300,&700 TO oldmemc 3170A%=FNChangeFSI(A$,-1,-1,nextlocation%,0,0,sar%,0) 3180IFfast% SYS "OS_UpdateMEMC",oldmemc,&700 3190IFscrap% scrap%=FALSE:SYS"OS_File",6,F$ 3200IFA%<2 AND sar%<>0 THEN 3210SYS spop%,&10d,sar%,pixtrans%,255,1 3220n$=FNZS(pixtrans%):SYS spop%,&128,sar%,n$ TO,,,x,y,,m 3230$adsx%=STR$x:$adsy%=STR$y:$adsm%=STR$m:$adsname%=n$ 3240$adsbytes%=STR$sar%!12:$adran%=range$ 3250$adsrc%=info$+m$(0)+STR$(cputime%/100)+m$(1) 3260A%=LENF$:WHILEMID$("."+F$,A%,1)<>".":A%-=1:ENDWHILE 3270$adsave%=MID$("."+F$,A%+1) 3280SYS&35,m,4 TO,,nx:x=x<<nx 3290SYS&35,m,5 TO,,ny:y=y<<ny 3300saved%=FALSE:sprite%=TRUE:PROCgetmodeinfo 3310pic%=FNcreate_window(x,y,F$) 3320PROCpopup(pic%,-1) 3330ENDIF 3340ENDPROC 3360DEF PROCcheckandfinish 3370IFsaved% ORNOTsprite% PROCremovearea:SYS "Wimp_CloseDown":END 3380!buffer%=ERR:$(buffer%+4)=m$(2)+F$+m$(3)+CHR$0 3390SYS "Wimp_ReportError",buffer%,%10111,m$(20) TO ,A% 3400IFA%=1 PROCremovearea:SYS "Wimp_CloseDown":END 3410ENDPROC 3430DEF PROCkey(handle%,icon%,key%) 3440IFkey%=&1b SYS CrMenu,,-1:ENDPROC 3450CASE handle% OF 3460WHEN zoom%:CASE key% OF 3470WHEN 13:PROCdozoom(icon%-4,0):IFicon%=4 SYS &400d2,zoom%,5,,,-1,LEN$z%(0) 3480IFicon%=5 SYS CrMenu,,-1 3490ENDPROC 3500WHEN &18e,&18f:PROCdozoom(icon%-4,0) 3510SYS &400d2,zoom%,icon%EOR1,,,-1,LEN$z%(icon%EOR5):ENDPROC 3520ENDCASE 3530WHEN save% 3540IFkey%=13 PROCsavesprite:ENDPROC 3550WHEN output% 3560PROCshowscaletofit 3570IFkey%=13 SYS CrMenu,,-1:ENDPROC 3580IFkey%=&18e ORkey%=&18f THEN 3590icon%=icon%EOR1:key%=admode%:IFicon%=16 key%=adspcl% 3600SYS &400d2,output%,icon%,,,-1,LEN$key%:ENDPROC 3610ENDIF 3620WHEN proc%:CASE key% OF 3630WHEN &18e,13:icon%+=1:IFicon%>10 icon%=8:IFkey%=13 SYS CrMenu,,-1:ENDPROC 3640SYS &400d2,proc%,icon%,,,-1,LEN$p%(icon%-8):ENDPROC 3650WHEN &18f:icon%-=1:IFicon%<8 icon%=10 3660SYS &400d2,proc%,icon%,,,-1,LEN$p%(icon%-8):ENDPROC 3670ENDCASE 3680WHEN scalew%:CASE key% OF 3690WHEN &18e,13:icon%+=1:IFicon%>13 icon%=10:IFkey%=13 SYS CrMenu,,-1:ENDPROC 3700SYS &400d2,scalew%,icon%,,,-1,LEN$s%(icon%-10):ENDPROC 3710WHEN &18f:icon%-=1:IFicon%<10 icon%=13 3720SYS &400d2,scalew%,icon%,,,-1,LEN$s%(icon%-10):ENDPROC 3730ENDCASE 3740ENDCASE 3750SYS "Wimp_ProcessKey",key% 3760ENDPROC 3780DEF PROCsavesprite 3790SYS spop%,&10C,sar%,$adsave% 3800SYS CrMenu,,-1 3810ENDPROC 3830DEF PROCcheckmouse(mousex%,mousey%,b%,handle%,icon%,ob%) 3840IFb%AND2 THEN 3850CASE handle% OF 3860WHEN pic%:PROCdomenu(pic%,m$(4)+">sinfo%,"+m$(5)+">srcinfo%,"+m$(6)+">raninfo%,"+m$(7)+">zoom%,"+m$(8)+">save%,"+m$(9),m$(20)) 3870WHEN -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)) 3880ENDCASE 3890rmenuhandle%=handle% 3900ENDIF 3910IFb%AND4 THEN 3920CASE handle% OF 3930WHEN zoom%:CASE icon% OF 3940WHEN 0:PROCdozoom(0,1) 3950WHEN 1:PROCdozoom(0,-1) 3960WHEN 2:PROCdozoom(1,1) 3970WHEN 3:PROCdozoom(1,-1) 3980ENDCASE 3990ENDCASE 4000ENDIF 4010IFb%AND1 THEN 4020CASE handle% OF 4030WHEN zoom%:CASE icon% OF 4040WHEN 0:PROCdozoom(0,-1) 4050WHEN 1:PROCdozoom(0,1) 4060WHEN 2:PROCdozoom(1,-1) 4070WHEN 3:PROCdozoom(1,1) 4080ENDCASE 4090ENDCASE 4100ENDIF 4110IFb%AND5 THEN 4120CASE handle% OF 4130WHEN output%:CASE icon% OF 4140WHEN 0,1,2,3:PROCkillcurrent(STR$(25+icon%)) 4150WHEN 4:PROCkillcurrent("S16,90,90") 4160WHEN 5:PROCkillcurrent("S32,90,90") 4170WHEN 6:PROCkillcurrent("0") 4180WHEN 7:PROCkillcurrent("8") 4190WHEN 8:PROCkillcurrent("12") 4200WHEN 9:PROCkillcurrent("15") 4210WHEN 10:PROCkillcurrent("S16,90,45") 4220WHEN 11:PROCkillcurrent("S32,90,45") 4230ENDCASE 4240IFFNgeticonstate(output%,15) $admode%=FNdeducemode 4250!q%=output%:q%!4=17:q%!8=0:q%!12=0:SYS SetI,,q% 4260PROCshowscaletofit 4270WHEN save%:CASE icon% OF 4280WHEN 2:PROCsavesprite 4290ENDCASE 4300WHEN -2:IFsprite% PROCgetw(pic%):PROCopen_window(pic%,x0%,y0%,x1%,y1%,scx%,scy%,-1) 4310ENDCASE 4320ENDIF 4330IFb%AND&50 THEN 4340CASE handle% OF 4350WHEN save%:CASE icon% OF 4360WHEN 0:PROCgetw(save%) 4370!q%=save%:q%!4=0:SYS GetI,,q% 4380!q%=save%:q%!4=5 4390q%!8+=bx%:q%!12+=by%:q%!16+=bx%:q%!20+=by% 4400q%!24=0:q%!28=0:q%!32=&7FFFFFFF:q%!36=&7FFFFFFF 4410IFdstart% SYS dstart%,%11000101,1,"file_ff9",q%+8,q%+24 ELSESYS "Wimp_DragBox",,q% 4420ENDCASE 4430ENDCASE 4440ENDIF 4450ENDPROC 4470DEF PROCdozoom(s%,a%) 4480IFs%=0 THEN 4490$z%(0)=STR$(VAL$z%(0)+a%):IF$z%(0)="0" $z%(0)="1" 4500ELSE 4510$z%(1)=STR$(VAL$z%(1)+a%):IF$z%(1)="0" $z%(1)="1" 4520ENDIF 4530!q%=zoom%:q%!4=4+s%:q%!8=0:q%!12=0:SYS SetI,,q% 4540!q%=pic%:SYS GetW,,q%:f%=q%!28:SYS &400c3,,q% 4550pic%=FNcreate_window(x,y,F$) 4560PROCpopup(pic%,f%) 4570ENDPROC 4590DEF PROCdomenu(handle%,menu$,menutitle$) 4600menuhandle%=handle% 4610menuptr%=buffer%:indirect%=idata% 4620i%=0 4630menuptr%!20=44 4640$menuptr%=menutitle$ 4650menuptr%?12=7:menuptr%?13=2:menuptr%?14=7:menuptr%?15=0 4660menuptr%!16=200:menuptr%!24=0 4670menuptr%+=28 4680REPEAT i1%=i%+1:i%=INSTR(menu$+",",",",i1%) 4690item$=MID$(menu$,i1%,i%-i1%):PROCmenuitem(item$):UNTIL item$="" 4700menuptr%!-24=(menuptr%!-24)OR&80 4710IFhandle%=101 SYS CrMenu,,buffer%,mousex%-64,96+8*44 ELSESYS CrMenu,,buffer%,mousex%-32,mousey%+16 4720ENDPROC 4740DEF PROCmenuitem(text$) 4750IF text$="" ENDPROC 4760flg%=0:submenu%=-1:I%=INSTR(text$,":"):IFI%THEN 4770flg%=EVALMID$(text$,I%+1):text$=LEFT$(text$,I%-1) 4780ENDIF 4790I%=INSTR(text$,">"):IFI%THEN 4800submenu%=EVALMID$(text$,I%+1):text$=LEFT$(text$,I%-1) 4810ENDIF 4820menuptr%!0=flg% 4830menuptr%!4=submenu% 4840IFtext$=m$(9)ANDF$="" menuptr%!8=&07400021 ELSEmenuptr%!8=&07000021 4850IFLENtext$*16+8>buffer%!16 buffer%!16=LENtext$*16+8 4860IFLENtext$>12 THEN 4870menuptr%!8=menuptr%!8 OR 256:menuptr%!16=LENtext$ 4880menuptr%!12=indirect%:$indirect%=text$:indirect%+=LENtext$+1 4890ELSE 4900$(menuptr%+12)=text$ 4910ENDIF 4920menuptr%+=24 4930ENDPROC 4950DEF PROCmenuselect(menus%) 4960SYS GetP,,paltemp%:adjust%=paltemp%!8 AND 1 4970SYS DcMenu,,buffer%,menus%,STRING$(200," ")TO,,,a$ 4980IF a$="" THENENDPROC 4990CASE menuhandle% OF 5000WHEN pic% 5010CASE a$ OF 5020WHEN m$(9):PROCcallFSI 5030ENDCASE 5040WHEN 101 5050CASE a$ OF 5060WHEN m$(14):fast%=NOTfast% 5070WHEN m$(9):PROCcallFSI 5080WHEN m$(15) 5090statescale%=0:FORI%=0TO9:statescale%+=FNgeticonstate(scalew%,I%)<<I%:NEXT 5100FORI%=10TO13:statescale%+=FNgeticonstate(scalew%,I%+6)<<I%:NEXT 5110stateproc%=0:FORI%=0TO7:stateproc%+=FNgeticonstate(proc%,I%)<<I%:NEXT 5120stateoutput%=0:FORI%=0TO15:stateoutput%+=FNgeticonstate(output%,I%)<<I%:NEXT 5130A%=OPENOUT"<ChangeFSI$Dir>.Choices" 5140PRINT#A%,fast%,statescale%,stateproc%,stateoutput% 5150PRINT#A%,$p%(0),$p%(1),$p%(2),$admode%,$adspcl% 5160PRINT#A%,$s%(0),$s%(1),$s%(2),$s%(3) 5170CLOSE#A% 5180WHEN m$(16):PROCcheckandfinish 5190ENDCASE 5200ENDCASE 5210IFadjust% PROCcheckmouse(0,0,2,rmenuhandle%,0,0) 5220ENDPROC 5240DEF FNcreate_window(x,y,title$) 5250x=x*VAL$z%(0)DIVVAL$z%(1):y=y*VAL$z%(0)DIVVAL$z%(1) 5260!z%=0:z%!4=-y:z%!8=x:z%!12=0 5270z%!40=0:z%!44=-y:z%!48=x:z%!52=0 5280IFx<128 OR y<128 z%?35=0 ELSEz%?35=255 5290$adtitle%="":SYS CreateW,,z% TO handle% 5300$adtitle%=title$ 5310=handle% 5330DEF PROCpopup(handle%,f%) 5340SYS "OS_ReadModeVariable",-1,4 TO ,,modexshift% 5350SYS "OS_ReadModeVariable",-1,5 TO ,,modeyshift% 5360SYS "OS_ReadModeVariable",-1,11 TO ,,rightscr% 5370SYS "OS_ReadModeVariable",-1,12 TO ,,topscr% 5380rightscr%=rightscr%<<modexshift%:topscr%=topscr%<<modeyshift% 5390PROCgetw(handle%) 5400xo%=rightscr%/2-(x0%+x1%)/2:yo%=topscr%/2-(y0%+y1%)/2 5410PROCopen_window(handle%,x0%+xo%,y0%+yo%,x1%+xo%,y1%+yo%,scx%,scy%,f%) 5420ENDPROC 5440DEF PROCopen_window(handle%,x0%,y0%,x1%,y1%,scx%,scy%,bhandle%) 5450IFhandle%=-1THENENDPROC 5460q%!0=handle%:q%!28=bhandle% 5470q%!4=x0%:q%!8=y0%:q%!12=x1%:q%!16=y1% 5480q%!20=scx%:q%!24=scy% 5490SYS OpenW,,q% 5500ENDPROC 5520DEF PROCgetw(handle%) 5530!q%=handle%:SYS GetW,,q% 5540PROCinfo(q%+4):bhandle%=q%!28:flags%=q%!32 5550ENDPROC 5570DEF PROCinfo(q%) 5580x0%=!q%:y0%=q%!4:x1%=q%!8:y1%=q%!12:scx%=q%!16:scy%=q%!20 5590bx%=x0%-scx%:by%=y1%-scy% 5600ENDPROC 5620DEF PROCredraw_window(handle%) 5630IF handle%=pic% THEN 5640!factors%=!ifactors%*VAL$z%(0):factors%!4=ifactors%!4*VAL$z%(0) 5650factors%!8=ifactors%!8*VAL$z%(1):factors%!12=ifactors%!12*VAL$z%(1) 5660PROCreduce(!factors%,factors%!8):PROCreduce(factors%!4,factors%!12) 5670!q%=handle% 5680SYS RedrawW,,q% TO more% 5690PROCinfo(q%+4):by%=by%-INT(y*VAL$z%(0)DIVVAL$z%(1)) 5700WHILE more% 5710SYS spop%,&134,sar%,n$,bx%,by%,,factors%,spx% 5720SYS GetR%,0,q% TO more% 5730ENDWHILE 5740ENDIF 5750ENDPROC 5770DEF FNgeticonstate(handle%,icon%) 5780!q%=handle%:q%!4=icon%:SYS GetI,,q% 5790=q%!24>>21 AND 1 5810DEF PROCgetmodeinfo 5820SYS"Wimp_ReadPixTrans",&100,sar%,n$,,,,ifactors%,pixtrans% 5830SYS spop%,&118,sar%,n$ TO ,,sptr% 5840IF sptr%!32=44 THEN 5850palptr%=0 5860ELSE 5870FOR grab%=0 TO 2048-8 STEP 8 5880paltemp%!(grab%>>1)=sptr%!(grab%+44) 5890NEXT 5900palptr%=paltemp% 5910ENDIF 5920FORQ%=0TO255:pixtrans%?Q%=Q%:NEXT 5930IFsptr%!32=44+2048 THEN 5940FORQ%=0TO255:SYSctran%,palptr%!(Q%<<2)TOpixtrans%?Q%:NEXT 5950ELSE 5960SYS "ColourTrans_SelectTable",m,palptr%,-1,-1,pixtrans% 5970ENDIF 5980spx%=-1:FORQ%=0TO255:IFpixtrans%?Q%<>Q% spx%=pixtrans% 5990NEXT 6000ENDPROC 6020DEF FNdeducemode 6030LOCAL m,x,y 6040IFFNgeticonstate(output%,15) THEN 6050SYS&35,-1,9 TO,,m:IFm>3 THEN 6060SYS&35,-1,4 TO,,x:SYS&35,-1,5 TO,,y 6070x=180/(2^x):y=180/(2^y) 6080="S"+STR$(2^m)+","+STR$x+","+STR$y 6090ELSE 6100=STR$MODE 6110ENDIF 6120ELSE 6130=$admode% 6140ENDIF 6150=0 6170DEF PROCshowscaletofit 6180LOCAL m,x,y 6190$admode%=FNdeducemode 6200IF?admode%=ASC"S" THEN 6210IFVALMID$($admode%,5)>VALMID$($admode%,8) x=6 ELSEx=0 6220IFVALMID$($admode%,2)>16 x+=5 ELSEx+=4 6230SYS&35,-1,11 TO,,tofitx:SYS&35,-1,12 TO,,tofity 6240ELSE 6250m=VAL$admode% 6260SYS&35,m,11 TO,,tofitx:SYS&35,m,12 TO,,tofity 6270SYS&35,m,4 TO,,x:SYS&35,m,5 TO,,y:IFy>x x=6 ELSEx=0 6280SYS&35,m,9 TO,,y:x+=y 6290ENDIF 6300tofitx+=1:tofity+=1:$adscale%=m$(17)+STR$tofitx+m$(18)+STR$tofity 6310q%!12=1<<21:!q%=output%:FORI%=0TO11:IFI%=x q%!8=1<<21 ELSEq%!8=0 6320q%!4=I%:SYS SetI,,q%:NEXT 6330ENDPROC 6350DEF PROCkillcurrent(m$) 6360q%!12=1<<21:!q%=output%:q%!8=0 6370q%!4=17:SYS SetI,,q% 6380$admode%=m$ 6390ENDPROC 6410DEFFNZS(I%)LOCALA$:REPEATA$+=CHR$?I%:I%+=1:UNTIL?I%<14:=A$ 6430DEF PROCerrorbox 6440SYS Drag,,-1 6450!buffer%=ERR:$(buffer%+4)=REPORT$+" (code "+STR$ERL+")"+CHR$0 6460SYS "Wimp_ReportError",buffer%,%11,m$(20) TO ,A% 6470IFA%=2 PROCremovearea:SYS "Wimp_CloseDown":END 6480ENDPROC 6710DEF FNChangeFSI(A$,spritearea%,workspace%,worklimit%,oksave%,okinfo%,RETURN ram%,fast%) 6720LOCAL A$(),r%(),g%(),b%(),rpal%(),gpal%(),bpal%(),table%(),cl%(),xl%(),xl2%() 6730LOCAL xp%(),rm%(),rm1%(),rm2%(),vals%(),nl%(),A%(),B%(),new%(),st%() 6740WHILELEFT$(A$,1)<>" "ANDLENA$<>0 A$=MID$(A$,2):ENDWHILE 6750WHILELEFT$(A$,1)=" " A$=MID$(A$,2):ENDWHILE 6760WHILERIGHT$(A$,1)=" " A$=LEFT$(A$):ENDWHILE 6770IFFNuc(LEFT$(A$,5))="-QUIT" THEN 6780A$=MID$(A$,7):WHILELEFT$(A$,1)<>" "ANDLENA$<>0 A$=MID$(A$,2):ENDWHILE 6790WHILELEFT$(A$,1)=" " A$=MID$(A$,2):ENDWHILE 6800ENDIF 6810DIM A$(100):ARG%=0:B%=INSTR(A$," ") 6820WHILE B%<>0 6830ARG%+=1:A$(ARG%)=LEFT$(A$,B%-1):A$=MID$(A$,B%+1) 6840WHILE LEFT$(A$,1)=" ":A$=MID$(A$,2):ENDWHILE 6850B%=INSTR(A$," ") 6860ENDWHILE 6870IFA$<>"" ARG%+=1:A$(ARG%)=A$ 6880invert%=FALSE:range%=FALSE:sharpen%=FALSE:info%=FALSE:cache%=FALSE:cacheareanumber%=0:dither%=TRUE:black%=FALSE 6890hist%=FALSE:equal%=FALSE:vflip%=FALSE:hflip%=FALSE:scale%=TRUE:scaleo%=TRUE:scrapf%=FALSE 6900gamma=1:rotate%=FALSE:max%=20000000:bright%=15:lock%=FALSE 6910rwt=.299:gwt=.587:bwt=.114 6920IFARG%<3 THEN 6930PRINT"ChangeFSI interactive input (read FSIinfo for command line details)" 6940INPUT"Source file: "s$,"Destination file: "f$,"Output mode: "m$ 6950INPUT"(X)Scale (e.g. 2:1): "xs$:INPUT"Y Scale: "ys$ 6960INPUT"Info on input picture?"a$:IFFNuc(LEFT$(a$,1))="Y" info%=TRUE 6970INPUT"Invert picture colours?"a$:IFFNuc(LEFT$(a$,1))="Y" invert%=TRUE 6980INPUT"Compute histogram of input?"a$:IFFNuc(LEFT$(a$,1))="Y" hist%=TRUE 6990INPUT"Apply histogram equalisation?"a$:IFFNuc(LEFT$(a$,1))="Y" equal%=TRUE 7000INPUT"Expand input dynamic range?"a$:IFFNuc(LEFT$(a$,1))="Y" range%=TRUE:equal%=FALSE 7010INPUT"Sharpen picture by (e.g. 12 for harsh, 24 for soft) "a$ 7020IFa$<>"" sharpen%=VALa$ 7030INPUT"Rotate?"a$:IFFNuc(LEFT$(a$,1))="Y" rotate%=1 7040scale%=FALSE:scaleo%=FALSE:fast%=FALSE 7050ELSE 7060REPEAT A%=ARG% 7070IFFNuc(A$(ARG%))="-INFO" info%=TRUE:A$(ARG%)="":ARG%-=1 7080IFFNuc(A$(ARG%))="-HIST" hist%=TRUE:A$(ARG%)="":ARG%-=1 7090IFFNuc(A$(ARG%))="-LOCK" lock%=TRUE:A$(ARG%)="":ARG%-=1 7100IFFNuc(A$(ARG%))="-EQUAL" equal%=TRUE:range%=FALSE:A$(ARG%)="":ARG%-=1 7110IFFNuc(A$(ARG%))="-RANGE" range%=TRUE:equal%=FALSE:A$(ARG%)="":ARG%-=1 7120IFFNuc(A$(ARG%))="-INVERT" invert%=TRUE:A$(ARG%)="":ARG%-=1 7130IFFNuc(A$(ARG%))="-NOSCALE" scale%=FALSE:scaleo%=FALSE:A$(ARG%)="":ARG%-=1 7140IFFNuc(A$(ARG%))="-NOSIZE" scale%=FALSE:A$(ARG%)="":ARG%-=1 7150IFFNuc(A$(ARG%))="-NODITHER" dither%=FALSE:A$(ARG%)="":ARG%-=1 7160IFFNuc(A$(ARG%))="-BRIGHTEN" bright%=16:A$(ARG%)="":ARG%-=1 7170IFFNuc(A$(ARG%))="-ROTATE" rotate%=1:A$(ARG%)="":ARG%-=1 7180IFFNuc(A$(ARG%))="-ROTATE-" rotate%=-1:A$(ARG%)="":ARG%-=1 7190IFFNuc(A$(ARG%))="-VFLIP" vflip%=TRUE:A$(ARG%)="":ARG%-=1 7200IFFNuc(A$(ARG%))="-HFLIP" hflip%=TRUE:A$(ARG%)="":ARG%-=1 7210IFFNuc(A$(ARG%))="-NOMODE" fast%=FALSE:A$(ARG%)="":ARG%-=1 7220IFFNuc(LEFT$(A$(ARG%),6))="-BLACK" THEN 7230black%=32:IFLENA$(ARG%)>6 black%=VALMID$(A$(ARG%),7):IFblack%>128 black%=128 7240A$(ARG%)="":ARG%-=1 7250ENDIF 7260IFFNuc(LEFT$(A$(ARG%),6))="-GAMMA" THEN 7270gamma=2.2:IFLENA$(ARG%)>6 gamma=VALMID$(A$(ARG%),7) 7280A$(ARG%)="":ARG%-=1 7290ENDIF 7300IFFNuc(LEFT$(A$(ARG%),8))="-SHARPEN" THEN 7310sharpen%=TRUE:IFLENA$(ARG%)>8 sharpen%=VALMID$(A$(ARG%),9) 7320A$(ARG%)="":ARG%-=1 7330ENDIF 7340IFFNuc(LEFT$(A$(ARG%),4))="-RED" rwt=VALMID$(A$(ARG%),5):A$(ARG%)="":ARG%-=1 7350IFFNuc(LEFT$(A$(ARG%),6))="-GREEN" gwt=VALMID$(A$(ARG%),7):A$(ARG%)="":ARG%-=1 7360IFFNuc(LEFT$(A$(ARG%),5))="-BLUE" bwt=VALMID$(A$(ARG%),6):A$(ARG%)="":ARG%-=1 7370IFFNuc(LEFT$(A$(ARG%),4))="-MAX" THEN 7380max%=VALMID$(A$(ARG%),5):IFINSTR(A$(ARG%),"K")ORINSTR(A$(ARG%),"k") max%=max%*1024 7390A$(ARG%)="":ARG%-=1 7400ENDIF 7410UNTILA%=ARG% 7420s$=A$(1):f$=A$(2):m$=A$(3):xs$=A$(4):ys$=A$(5) 7430ENDIF 7440IFokinfo% ELSEinfo%=FALSE 7450IFworkspace%>=0 THEN 7460flex%=FALSE 7470ELSE 7480IFworklimit%=0 THENflex%=FALSE ELSEflex%=TRUE:nextlocation%=worklimit% 7490ENDIF 7500pnm$=FNuc(m$):CASE LEFT$(pnm$+",",3) OF 7510WHEN"AIM":m=-1:m$="" 7520WHEN"P1,","P4,":m=-2:m$="":spm=18 7530WHEN"P2,","P5,":m=-2:m$="T":spm=20 7540WHEN"P3,","P6,":m=-4:pnm$=LEFT$(pnm$,2):p6bits=8:I%=VALMID$(m$,4):m$="" 7550IFI%>0IFI%<8 p6bits=I% 7560WHEN"P15":m=-3:m$="" 7570WHEN"C15":m=-5:m$="" 7580WHEN"IRL":m=-4:m$="":p6bits=8 7590WHEN"S16":m=-6:m$="" 7600WHEN"S24":m=-7:m$="":p6bits=8 7610WHEN"S32":m=-8:m$="":p6bits=8 7620OTHERWISE:m=VALm$:spm=m:m$=FNuc(RIGHT$(m$,1)):IFINSTR("CDRT",m$)=0 m$="" 7630ENDCASE 7640IFxs$="" OR LEFT$(xs$,1)="-" THEN 7650xmul%=1:xdiv%=1:ymul%=1:ydiv%=1 7660ELSE 7670IFys$="" ys$=xs$ 7680xmul%=VALxs$:xdiv%=VALMID$(xs$,INSTR(xs$,":")+1) 7690ymul%=VALys$:ydiv%=VALMID$(ys$,INSTR(ys$,":")+1) 7700ENDIF 7710flag=-1:SYS8,5,s$ TO r0,,r2:dir=r0=2 7720IFdir THEN 7730panic=TRUE:SYS8,5,s$+".raw" TO r0,,r2:IFr0=1 s$+=".raw":dir=FALSE:panic=FALSE 7740IFpanic SYS8,5,s$+".red" TO r0,,r2:IFr0=1 panic=FALSE 7750IFpanic ERROR 42,"Directory given" 7760ENDIF 7770ftype=r2>>8 AND &FFF:bits=28:F=2^bits:c%=0:cc%=0:ccc%=0:o%=0 7780IFdir THEN 7790c%=OPENIN(s$+".red"):IFc%=0 ERROR 42,"Red file "+s$+".red not found" 7800cc%=OPENIN(s$+".green"):IFcc%=0 ERROR42,"Green file "+s$+".green not found" 7810ccc%=OPENIN(s$+".blue"):IFccc%=0 ERROR42,"Blue file "+s$+".blue not found" 7820ELSE 7830c%=OPENINs$:IFc%=0 ERROR 42,"File "+s$+" not found" 7840ENDIF 7850LOCAL ERROR 7860ON ERROR LOCAL RESTORE ERROR:PROCclose:ERROR ERR,REPORT$ 7870DIM r%(255) 7880DIM g%(255),b%(255) 7890SYS&66f4d TO;pcd% 7900CASE ftype OF 7910WHEN &FF9:flag=0 7920IFINSTR("."+FNuc(s$),".HIP.")ORINSTR(FNuc(s$),":HIP.") THEN 7930flag=300:I%=INSTR(FNuc(s$),"HIP.") 7940MID$(s$,I%)="LOP.":cc%=OPENINs$:IFcc%=0 ERROR42,"Can't find Lop file "+s$ 7950ENDIF 7960WHEN &FF0:PTR#c%=0:S$="":FORI%=1TO4:S$+=CHR$BGET#c%:NEXT 7970IFS$="II*"+CHR$0 flag=1500:bigendian=FALSE 7980IFS$="MM"+CHR$0+"*" flag=1500:bigendian=TRUE 7990WHEN &DFA:flag=800:IFdir flag=801 8000WHEN &DE2:flag=1000 8010WHEN &BE8:IF(pcd%AND1)=0 flag=3600 8020WHEN &7A0:flag=1200 8030WHEN &69d:flag=2000 8040WHEN &699:flag=700 8050WHEN &698:flag=100 8060WHEN &697:flag=1900 8070WHEN &691:flag=2600 8080WHEN &690:flag=2500 8090WHEN &666:flag=666 8100WHEN &601:flag=3000 8110WHEN &371:flag=3100 8120WHEN &300:flag=1300:IFdir flag=1301 8130WHEN 4:flag=900:IFdir flag=901 8140WHEN 6:flag=950 8150ENDCASE 8160IFflag=-1 THEN 8170PTR#c%=0:S$="":FORI%=1TO16:S$+=CHR$BGET#c%:NEXT 8180IFLEFT$(S$,7)="FSIfile" flag=2100 8190IFflag=-1 IFLEFT$(S$,8)="SIMPLE " flag=2800 8200IFflag=-1 IFFNuc(LEFT$(S$,8))="MERCSOFT"ORFNuc(LEFT$(S$,8))="SNAPSHOT"flag=902 8210IFflag=-1 IFFNuc(LEFT$(S$,8))="MERCSOF1" flag=903 8220IFflag=-1 IFFNuc(LEFT$(S$,13))="IRLAM YUV 411" flag=2250 8230IFflag=-1 IFLEFT$(S$,5)="Irlam" flag=2200 8240IFflag=-1 IFLEFT$(S$,2)="BM" flag=2400 8250IFflag=-1 IFLEFT$(S$,4)="GIF8" flag=500 8260IFflag=-1 IFLEFT$(S$,5)="AV_VO" flag=600 8270IFflag=-1 IFLEFT$(S$,4)=CHR$&59+CHR$&A6+CHR$&6A+CHR$&95 flag=1100 8280IFflag=-1 IFLEFT$(S$,4)=CHR$0+CHR$1+CHR$0+CHR$8 flag=1400 8290IFflag=-1 IFLEFT$(S$,4)=CHR$0+CHR$1+CHR$0+CHR$1 flag=2900 8300IFflag=-1 IFLEFT$(S$,4)="RIX3" flag=2700 8310IFflag=-1 IFLEFT$(S$,4)="II*"+CHR$0 flag=1500:bigendian=FALSE 8320IFflag=-1 IFLEFT$(S$,4)="MM"+CHR$0+"*" flag=1500:bigendian=TRUE 8330IFflag=-1 IFLEFT$(S$,2)=CHR$&52+CHR$&CC flag=2300 8340IFflag=-1 IFLEFT$(S$,2)="P4"ORLEFT$(S$,2)="P5"ORLEFT$(S$,2)="P6" flag=3300:info$="" 8350IFflag=-1 IFLEFT$(S$,3)="P15" flag=3400 8360IFflag=-1 IFLEFT$(S$,3)="PIC" flag=3500 8370IFflag=-1 IFFNuc(LEFT$(S$,3))="P13" flag=3450 8380IFflag=-1 IFLEFT$(S$,4)="FORM" IFMID$(S$,9,4)="ILBM" flag=1600 8390IFflag=-1 THEN 8400IFMID$(S$,7,4)="JFIF" OR ftype=&C85 THEN 8410jpegblk%=FNdim(20):PROCcachesize(jpegblk%) 8420IFcache%<EXT#c% THEN 8430CLOSE#c%:X%=OPENIN"Run:djpeg" 8440IFX% THEN 8450CLOSE#X%:SYS"Wimp_StartTask","djpeg "+s$+" <Wimp$Scrap>" 8460ELSE 8470SYS"XOS_CLI","djpeg "+s$+" <Wimp$Scrap>" TO ;V 8480IFV AND1 THEN 8490SYS"Wimp_StartTask","<ChangeFSI$Dir>.djpeg "+s$+" <Wimp$Scrap>" 8500ENDIF 8510ENDIF 8520c%=OPENIN"<Wimp$Scrap>":IFc%=0 THEN=100 8530scrapf%=TRUE:flag=3300:info$="JPEG (JFIF) file converted to " 8540ELSE 8550flag=3700 8560ENDIF 8570ENDIF 8580ENDIF 8590IFflag=-1 THEN 8600PTR#c%=&10:S$="":FORI%=1TO9:S$+=CHR$BGET#c%:NEXT 8610IFS$="MILLIPEDE" flag=200 8620ENDIF 8630IFflag=-1 THEN 8640PTR#c%=&41:S$="":FORI%=1TO8:S$+=CHR$BGET#c%:NEXT 8650IFLEFT$(S$,4)="PNTG" flag=1800:st%=&280 8660ENDIF 8670IFflag=-1 THEN 8680PTR#c%=196:S$="":FORI%=1TO8:S$+=CHR$BGET#c%:NEXT 8690IFLEFT$(S$,4)="PNTG" flag=1800:st%=&2e2 8700ENDIF 8710IFflag=-1 THEN 8720PTR#c%=522:S$="":FORI%=1TO8:S$+=CHR$BGET#c%:NEXT 8730IFS$=CHR$0+CHR$&11+CHR$2+CHR$&ff+CHR$&c+CHR$0+CHR$&ff+CHR$&fe flag=1850 8740ENDIF 8750IFflag=-1 THEN 8760PTR#c%=0:IFBGET#c%=10 THEN 8770C%=BGET#c%:IFC%<6 AND C%<>1 ANDBGET#c%=1 flag=1900 8780ENDIF 8790ENDIF 8800IFflag=-1 IFINSTR("."+FNuc(s$),".PCX.")ORINSTR(FNuc(s$),":PCX.")ORRIGHT$(s$,4)="/PCX" flag=1900 8810IFflag=-1 IFINSTR("."+FNuc(s$),".IMAGE.")ORINSTR(FNuc(s$),":IMAGE.") flag=400 8820IFflag=-1 IFFNuc(RIGHT$(s$,4))=".RAW" flag=100 8830IFflag=-1 IFFNuc(RIGHT$(s$,3))="TGA" flag=2000 8840IFflag=-1 IFFNuc(RIGHT$(s$,3))="VDA" flag=2000 8850IFflag=-1 IFINSTR("."+FNuc(s$),".PIC.")ORINSTR(FNuc(s$),":PIC.") flag=700 8860IFflag=-1 IFINSTR("."+FNuc(s$),".IMG.")ORINSTR(FNuc(s$),":IMG.")ORRIGHT$(s$,4)="/IMG" flag=1400 8870IFflag=-1 IFINSTR("."+FNuc(s$),".DSP.")ORINSTR(FNuc(s$),":DSP.")ORRIGHT$(s$,4)="/DSP" flag=1700 8880IFflag=-1 IFFNuc(RIGHT$(s$,4))="/RGB" flag=3200 8890IFflag=-1 AND(FNuc(RIGHT$(s$,4))="/PCD"ORftype=&be8)AND((pcd%AND1)=1) THEN 8900CLOSE#c%:SYS"Wimp_StartTask","<ChangeFSI$Dir>.hpcdtoppm -3 -a "+s$+" <Wimp$Scrap> { > <ChangeFSI$Dir>.pcdtemp }" 8910c%=OPENIN"<Wimp$Scrap>":scrapf%=TRUE:flag=3300:info$="PhotoCD file converted to " 8920ENDIF 8930ENDIF 8940IFflag=-1 PROCclose:ERROR 42,"Sorry: format not recognised - please try again or contact your supplier" 8950step24=1:input=8:ham=0:planar%=0:bigendianbits=FALSE:r$="FN"+STR$flag 8960compression=0:hpredict%=1:striprows%=-1:cachebytes%=FALSE 8970IFxdiv%=0 AND ydiv%=0 scale%=FALSE 8980CASE flag OF 8990WHEN 0 9000quant%=4:PTR#c%=4:F%=FNW+&1C:PTR#c%=F%:st%=FNW+F%-&20:K%=FNW+F%-&20 9010sm=FNW:IFsm<256 THEN 9020SYS53,sm,3 TO ,,I% 9030CASE I% OF 9040WHEN 1:IFst%=F%+12 PROCdefpal2 ELSEPROCipal(2) 9050PTR#c%=F%-16:sx%=(FNW+1)*32:rowbytes%=sx%>>3:input=1 9060sy%=FNW+1:I%=FNW:sx%-=31-FNW 9070WHEN 3:IFst%=F%+12 PROCdefpal4 ELSEPROCipal(4) 9080PTR#c%=F%-16:sx%=(FNW+1)*16:rowbytes%=sx%>>2:input=2 9090sy%=FNW+1:I%=FNW:sx%-=(31-FNW)DIV2 9100WHEN 15:IFst%=F%+12 PROCdefpal16 ELSEPROCipal(16) 9110PTR#c%=F%-16:sx%=(FNW+1)*8:rowbytes%=sx%>>1:input=4 9120sy%=FNW+1:I%=FNW:sx%-=(31-FNW)DIV4 9130WHEN 63,255:IFst%=F%+12 THEN 9140PROCdefpal 9150ELSE 9160IFK%>st% K%=st% 9170IFK%-12-F%=2048 ORI%=255 THEN 9180PTR#c%=&38 9190FORC%=0TO255:D%=BGET#c% 9200r%(C%)=BGET#c%/255*F:g%(C%)=BGET#c%/255*F:b%(C%)=BGET#c%/255*F 9210D%=FNW:NEXT 9220ELSE 9230PROCipal63 9240ENDIF 9250ENDIF 9260PTR#c%=F%-16:sx%=(FNW+1)*4:rowbytes%=sx%:sy%=FNW+1:I%=FNW:sx%-=(31-FNW)DIV8 9270OTHERWISE ERROR42,"Not understood RISC OS sprite" 9280ENDCASE 9290r$="FN8":SYS53,sm,4 TO ,,nx:SYS53,sm,5 TO ,,ny:nx=1<<nx:ny=1<<ny 9300IFscale% xmul%=xmul%*nx/2:ymul%=ymul%*ny/2 9310info$="RISC OS sprite, mode "+STR$sm+" "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 9320ELSE 9330bpp%=sm>>>27:CASEbpp% OF 9340WHEN 1:bpp%=1:r$="FN8":IFst%=F%+12 PROCdefpal2 ELSEPROCnewropal(2) 9350WHEN 2:bpp%=2:r$="FN8":IFst%=F%+12 PROCdefpal4 ELSEPROCnewropal(4) 9360WHEN 3:bpp%=4:r$="FN8":IFst%=F%+12 PROCdefpal16 ELSEPROCnewropal(16) 9370WHEN 4:bpp%=8:r$="FN8":IFst%=F%+12 PROCdefpal ELSEPROCnewropal(256) 9380WHEN 5:bpp%=16:r$="FN16":IFst%=F%+12 ELSE 9390DIM rpal%(255),gpal%(255):step24=2 9400FORC%=0TO255 9410gpal%(C%)=(C%>>5)<<8 OR (C%AND31) 9420rpal%(C%)=((C%>>2)AND31)<<16 OR (C%AND3)<<11 9430NEXT 9440FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 9450WHEN 6:bpp%=32:r$="FN24":IFst%=F%+12 PROCnopal ELSE 9460rbo%=0:gbo%=1:bbo%=2:step24=4 9470WHEN 8:bpp%=24:r$="FN24":IFst%=F%+12 PROCnopal ELSE 9480rbo%=0:gbo%=1:bbo%=2 9490OTHERWISE ERROR42,"Not understood new format RISC OS sprite bpp" 9500ENDCASE 9510nx=(sm>>1) AND&1fff:ny=(sm>>14) AND&1fff 9520IFscale% xdiv%=xdiv%*nx:ydiv%=ydiv%*ny:xmul%=xmul%*90:ymul%=ymul%*90 9530PTR#c%=F%-16:rowbytes%=(FNW+1)*4:sy%=FNW+1:I%=FNW:sx%=(rowbytes%*8-(31-FNW))/bpp%:input=bpp% 9540info$="New RISC OS sprite, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 9550IFbpp%=32 input=24 9560ENDIF 9570PTR#c%=st%:cache%=TRUE 9580WHEN 100 9590quant%=8:PTR#c%=0:sx%=FNHW:sy%=FNHW:PROCnopal:input=24:rowbytes%=sx%*3+2 9600rbo%=2:gbo%=2+sx%:bbo%=2+2*sx%:r$="FN24":cache%=TRUE 9610info$="QRT .raw image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 9620WHEN 200 9630quant%=8:PTR#c%=5:sx%=FNHW:sy%=FNHW:sx%=(FNHW-sx%+2)/2:sy%=(FNHW-sy%+2)/2 9640PTR#c%=&1a:cadsoft%=BGET#c%:PTR#c%=&200 9650FORC%=0TO255:r%(C%)=BGET#c%/255*F:NEXT 9660FORC%=0TO255:g%(C%)=BGET#c%/255*F:NEXT 9670FORC%=0TO255:b%(C%)=BGET#c%/255*F:NEXT 9680PTR#c%=&600:st%=&600:cache%=TRUE:IFcadsoft%=2 THEN 9690rep%=0:r$="FN1100":plbuff%=FNdim(sx%):plbytes%=sx%:cachebytes%=TRUE 9700ELSE 9710r$="FN8":rowbytes%=sx% 9720ENDIF 9730info$="Cadsoft type "+STR$cadsoft%+" image, "+STR$sx%+" by "+STR$sy%+" pixels, 8 bits per pixel" 9740WHEN 300 9750quant%=5:PTR#c%=&2c:st%=FNW+(&38-&2c):PTR#cc%=&2c:stcc%=FNW1(cc%)+(&38-&2c) 9760PTR#c%=&1c:sx%=(FNW+1)*4:sy%=FNW+1:PTR#c%=st%:PTR#cc%=stcc% 9770DIM rpal%(255),gpal%(255):input=16:cache%=TRUE:rowbytes%=sx% 9780FORC%=0TO255 9790rpal%(C%)=C%AND7 OR (C%AND64)<<2 OR (C%AND&38)<<13 9800gpal%(C%)=(C%AND4)<<1ORC%AND16 OR ((C%AND3)<<1OR(C%AND&60)>>2)<<8 OR (C%AND8OR(C%AND128)>>3)<<16 9810NEXT 9820FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 9830pbuff%=FNdim(sx%):IFscale% ymul%=ymul%*2 9840info$="ArVis image, "+STR$sx%+" by "+STR$sy%+" pixels, 15 bits per pixel" 9850WHEN 400 9860quant%=8:PTR#c%=0:sx%=FNbeHW:sy%=FNbeHW:X%=FNbeHW:st%=PTR#c%+X%:PTR#c%=st% 9870plbuff%=FNdim(sx%*3):plbytes%=sx%*3:rb%=plbuff%:gb%=plbuff%+1:bb%=plbuff%+2:rbo%=-1 9880PROCnopal:input=24:rep%=0:cachebytes%=TRUE:cache%=TRUE:step24=3 9890info$="RT image. run length encoded image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 9900WHEN 500 9910compression=5:PTR#c%=6:GIFsx=FNHW:GIFsy=FNHW 9920GIF=BGET#c%:GIFback=BGET#c%:GIFext=BGET#c%:quant%=(GIF AND 7)+1 9930IFGIF AND &80 THEN 9940FORC%=0TO(1<<quant%)-1 9950r%(C%)=BGET#c%/255*F:g%(C%)=BGET#c%/255*F:b%(C%)=BGET#c%/255*F 9960NEXT 9970ENDIF 9980I%=BGET#c%:IFI%<>ASC"," ERROR 42,"GIF file without , in right place" 9990GIFleft=FNHW:GIFright=FNHW:sx%=FNHW:sy%=FNHW 10000IFGIFsx<sx% OR GIFsy<sy% THEN 10010IFinfo% THEN 10020PRINT"GIF file with bigger image inside:" 10030PRINT"Screen ";GIFsx"x by "GIFsy"y; image "sx%"x by "sy%"y" 10040INPUT"Continue with monitor's size [Y or y]?"A$ 10050IFA$="Y"ORA$="y" sx%=GIFsx:sy%=GIFsy 10060PRINT"Continuing with ";sx%"x by "sy%"y" 10070ENDIF 10080ENDIF 10090GIF=BGET#c%:IFGIF AND &40 flag=501:r$="FN8" 10100setcodes%=BGET#c%:clearcode%=1<<setcodes%:st%=PTR#c%:cache%=TRUE:cachebytes%=TRUE 10110DIM table%(1<<12):stk%=FNdim(1<<13):buf%=FNdim(280):plbuff%=FNdim(sx%) 10120FORI%=0TOclearcode%-1:table%(I%)=I%:NEXT 10130info$="GIF file, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(quant%) 10140WHEN 600 10150quant%=8:PTR#c%=&5c:FORC%=0TO255 10160r%(C%)=BGET#c%/255*F:g%(C%)=BGET#c%/255*F:b%(C%)=BGET#c%/255*F 10170NEXT 10180PTR#c%=&36e:sy%=FNHW:sx%=FNHW 10190st%=&380:PTR#c%=st%:rowbytes%=sx%:r$="FN8":cache%=TRUE 10200info$=".PIC image, "+STR$sx%+" by "+STR$sy%+" pixels, 8 bits per pixel" 10210WHEN 700 10220quant%=8:PTR#c%=0:a$=GET$#c%:st%=PTR#c% 10230sx%=VALa$:sy%=VAL(MID$(a$,INSTR(a$," "))) 10240PROCnopal:input=24:step24=3:rowbytes%=sx%*3:r$="FN24" 10250rbo%=0:gbo%=1:bbo%=2:cache%=TRUE 10260info$="MTV .pic image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 10270WHEN 800 10280sx%=512:sy%=256:IFscale% ymul%=ymul%*2 10290plbuff%=FNdim(sx%):rep%=0:wt%=0:wtsx%=plbuff%+sx% 10300cache%=TRUE:cachebytes%=TRUE 10310FORC%=0TO255:r%(C%)=(C%AND63)/63*F:NEXT:g%()=r%():b%()=r%():quant%=6 10320info$="Watford digitiser picture, 512 by 256 pixels, 6 bits per pixel" 10330WHEN 801 10340sx%=512:sy%=256:input=24:quant%=6:IFscale% ymul%=ymul%*2 10350rep1%=0:wt1%=0:rep2%=0:wt2%=0:rep3%=0:wt3%=0 10360buff%=FNdim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+2*sx% 10370wtsx1%=buff%+sx%:wtsx2%=buff%+2*sx%:wtsx3%=buff%+3*sx% 10380FORC%=0TO255:r%(C%)=(C%AND63)/63*F:NEXT:g%()=r%():b%()=r%() 10390info$="Triple Watford digitiser picture, 512 by 256 pixels, 18 bits per pixel" 10400WHEN 900 10410quant%=8:st%=0:PTR#c%=0:IFEXT#c%=65536 THEN 10420sx%=256:sy%=256:IFscale% ymul%=ymul%*2:xmul%=xmul%*2 10430ELSE 10440sx%=512:sy%=512 10450ENDIF 10460FORC%=0TO255:r%(C%)=C%/255*F:NEXT:g%()=r%():b%()=r%():rowbytes%=sx%:r$="FN8":cache%=TRUE 10470info$="AIM .raw image, 256 by 256 pixels, 8 bits per pixel" 10480WHEN 901 10490quant%=4:IFEXT#c%=65536 THEN 10500sx%=256:sy%=256:IFscale% ymul%=ymul%*2:xmul%=xmul%*2 10510ELSE 10520sx%=512:sy%=512 10530ENDIF 10540buff%=FNdim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+sx%*2 10550FORC%=0TO255:r%(C%)=C%/255*F:NEXT:g%()=r%():b%()=r%() 10560input=24:info$="Hawk V9 Triple image, 256 by 256 pixels, 24 bits per pixel" 10570WHEN 902 10580quant%=4:PTR#c%=8:sx%=FNW:rowbytes%=sx%*3/2:sy%=FNW:st%=20:PTR#c%=20 10590IFscale% ymul%=ymul%*2 10600plbuff%=FNdim(sx%*3):rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2:rbo%=-1 10610FORC%=0TO255:r%(C%)=(C%AND&F)/&F*F:NEXT:g%()=r%():b%()=r%():cache%=TRUE 10620input=24:info$="Hawk V9/Snapshot Colour image, "+STR$sx%+" by "+STR$sy%+" pixels, 12 bits per pixel" 10630WHEN 903 10640quant%=5:PTR#c%=8:sx%=FNW:rowbytes%=sx%*2:sy%=FNW:st%=20:PTR#c%=20:cache%=TRUE:r$="FN16":flag=700 10650DIM rpal%(255),gpal%(255):input=16:step24=2 10660FORC%=0TO255 10670gpal%(C%)=(C%>>5)<<8 OR (C%AND31) 10680rpal%(C%)=((C%>>2)AND31)<<16 OR (C%AND3)<<11 10690NEXT 10700FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 10710input=16:info$="Hawk V9 mk II Colour image, "+STR$sx%+" by "+STR$sy%+" pixels, 16 bits per pixel" 10720WHEN 950 10730quant%=8:PTR#c%=0:sx%=512:rowbytes%=512:sy%=512:st%=0:flag=900 10740FORC%=0TO255:r%(C%)=C%/255*F:NEXT:g%()=r%():b%()=r%():r$="FN8":cache%=TRUE 10750info$="Wild Vision V12 image, 512 by 512 pixels, 8 bits per pixel" 10760WHEN 1000 10770quant%=4:sx%=640:sy%=256:PROCdefpal:st%=FNW:r$="FN"+STR$(1000+FNW):IFscale% ymul%=ymul%*2 10790buff%=FNdim(sx%):ctable%=FNdim(st%) 10800SYS12,4,c%,ctable%,st%:st%=PTR#c% 10810pa%=ctable%:rep%=0:rep2%=0:pasx%=buff%+sx% 10820info$="ProArtisan image, 640 by 256 pixels, 8 bits per pixel" 10830WHEN 1100 10840quant%=1:PTR#c%=4:sx%=FNbeW:sy%=FNbeW:input=FNbeW:bigendianbits=TRUE 10850S%=FNbeW:S%=FNbeW 10860cache%=TRUE:IFS%=2 cachebytes%=TRUE:info$="Byte Encoded " ELSEinfo$="":r$="FN8" 10870C%=FNbeW 10880D%=FNbeW 10890CASE C% OF 10900WHEN 1,2 10910FORI%=0TOD%/3-1:r%(I%)=BGET#c%/255*F:NEXT 10920FORI%=0TOD%/3-1:g%(I%)=BGET#c%/255*F:NEXT 10930FORI%=0TOD%/3-1:b%(I%)=BGET#c%/255*F:NEXT 10940OTHERWISE 10950CASE input OF 10960WHEN 1:r%(0)=F:g%(0)=F:b%(0)=F 10970WHEN 4,8:PROCnopal 10980WHEN 24:PROCnopal 10990ENDCASE 11000ENDCASE 11010CASE input OF 11020WHEN 1:rowbytes%=(sx%+15>>4)<<1 11030WHEN 4:rowbytes%=(sx%+3>>2)<<1 11040WHEN 8:rowbytes%=(sx%+1>>1)<<1 11050WHEN 24:rowbytes%=(3*sx%+1>>1)<<1:r$="FN24":rbo%=0:gbo%=1:bbo%=2:step24=3 11060IFS%=1 bbo%=0:rbo%=2 11070OTHERWISE:ERROR 42,"Can't do this Sun pixrect" 11080ENDCASE 11090st%=D%+&20:rep%=0:IFcachebytes% plbuff%=FNdim(rowbytes%):plbytes%=rowbytes% 11100info$+="Sun image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 11110WHEN 1200 11120quant%=8:sx%=800:sy%=800:st%=1600:PTR#c%=st%:vflip%=NOT vflip% 11130PROCnopal:r$="FN8":rowbytes%=sx%:cache%=TRUE 11140info$="TimeStep satellite image, 800 by 800 pixels, 8 bits per pixel" 11150WHEN 1300 11160quant%=8:sx%=128:sy%=256:st%=0:PTR#c%=0:IFscale% xmul%=xmul%*2 11170PROCnopal:r$="FN8":rowbytes%=sx%:cache%=TRUE 11180info$="satellite image, 128 by 256 pixels, 8 bits per pixel" 11190WHEN 1301 11200input=24:quant%=8:sx%=128:sy%=256:IFscale% xmul%=xmul%*2 11210buff%=FNdim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+2*sx%:PROCnopal:r$="FN901" 11220info$="Triple satellite image, 128 by 256 pixels, 24 bits per pixel" 11230WHEN 1400 11240planar%=TRUE:PTR#c%=0:Z%=FNHW:IFZ%>255 THEN 11250st%=FNbeHW*2:planes%=FNbeHW:patlen%=FNbeHW 11260pw%=FNbeHW:ph%=FNbeHW:sx%=FNbeHW:sy%=FNbeHW 11270ELSE 11280st%=FNHW*2:input=FNHW:patlen%=FNHW:pw%=FNHW:ph%=FNHW:sx%=FNHW:sy%=FNHW 11290ENDIF 11300IFscale% THEN 11310xmul%=xmul%*pw%:xdiv%=xdiv%*282 11320ymul%=ymul%*ph%:ydiv%=ydiv%*282 11330ENDIF 11340rowbytes%=sx%+7>>3:pbuff%=FNdim(sx%):plbytes%=rowbytes%*planes%:buff%=FNdim(plbytes%) 11350PTR#c%=st%:vrep%=0 11360FORC%=0TO(1<<planes%)-1:r%(C%)=F-C%/((1<<planes%)-1)*F:NEXT:g%()=r%():b%()=r%() 11370info$="IMG file, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(planes%) 11380WHEN 1500 11390PTR#c%=4:dir%=FNtiff(4):PTR#c%=dir% 11400rgb=FALSE:greyunit=100:planar%=1:fillorder=1:resunit=2 11410xnum%=90:xdenom%=1:ynum%=90:ydenom%=1 11420E%=FNtiff(3):FORZ%=1TOE% 11430T%=FNtiff(3):D%=FNtiff(3):C%=FNtiff(4) 11440IFC%>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) 11460CASE T% OF 11470WHEN 256:sx%=V% 11480WHEN 257:sy%=V% 11490WHEN 258:IFC%>1 THEN 11500IFD%*C%>6 THEN 11510PTR#c%=V%:quant%=FNtiff(D%) 11520input=quant%:FORI%=1TOC%-1:V%=FNtiff(D%) 11530IFV%<>quant% ERROR42,"Can't do RGB TIFF with different numbers of bits per pixel" 11540input+=V% 11550NEXT:PROCnopal 11560ELSE 11570quant%=V% AND &FF:input=quant% 11580FORI%=0TO(1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:NEXT 11590g%()=r%():b%()=r%() 11600ENDIF 11610PTR#c%=dir%+2+Z%*12 11620ELSE 11630quant%=V%:input=quant% 11640FORI%=0TO(1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:NEXT 11650g%()=r%():b%()=r%() 11660ENDIF 11670WHEN 259:compression=V% 11680WHEN 262:photometric=V%:IFV%=0 invert%=NOTinvert% 11690WHEN 266:fillorder=V% 11700WHEN 273:stc%=C%:stv%=V%:std%=D% 11710WHEN 277:sampperpix%=V%:input=quant%*V%:rgb=V%=3 11720WHEN 278:striprows%=V% 11730WHEN 279:stcbyte%=C%:stvbyte%=V%:stdbyte%=D% 11740WHEN 282:PTR#c%=V%:xnum%=FNtiff(4):xdenom%=FNtiff(4) 11750PTR#c%=dir%+2+Z%*12 11760WHEN 283:PTR#c%=V%:ynum%=FNtiff(4):ydenom%=FNtiff(4) 11770PTR#c%=dir%+2+Z%*12 11780WHEN 284:planar%=V%:IFplanar%=2 input=quant% 11790WHEN 290:greyunit=10^V% 11800WHEN 291:PTR#c%=V%:FORI%=0TOC%-1:r%(I%)=FNtiff(D%)/greyunit/2*F:NEXT 11810g%()=r%():b%()=r%() 11820PTR#c%=dir%+2+Z%*12 11830WHEN 296:resunit=V% 11840WHEN 317:hpredict%=V% 11850WHEN 320:PTR#c%=V%:FORI%=0TOC%/3-1:r%(I%)=FNtiff(3)/65535*F:NEXT 11860FORI%=0TOC%/3-1:g%(I%)=FNtiff(3)/65535*F:NEXT 11870FORI%=0TOC%/3-1:b%(I%)=FNtiff(3)/65535*F:NEXT 11880PTR#c%=dir%+2+Z%*12 11890OTHERWISE 11900IFinfo% PRINT"Ignoring tag ";T%" datatype "D%" count "C%" value/pointer "V% 11910ENDCASE 11920NEXT 11930DIM st%(stc%):IFstc%>1 THEN 11940PTR#c%=stv%:FORI%=0TOstc%-1:st%(I%)=FNtiff(std%):NEXT 11960ELSE 11970st%(0)=stv% 11980ENDIF 11990CASE compression OF 12000WHEN 0,1:info$="" 12010WHEN 2:info$="CCITT Group 3 compressed " 12020WHEN 5:info$="LZW compressed ":r$="FN1505" 12030IFhpredict%=2 THENinfo$+="horizontal differenced " ELSEIFhpredict%>2 info$+=" unknown predictor ("+STR$hpredict%+") " 12040setcodes%=8:clearcode%=1<<setcodes% 12050DIM table%(1<<12):stk%=FNdim(1<<13):buf%=FNdim(280) 12060FORI%=0TOclearcode%-1:table%(I%)=I%:NEXT 12070WHEN 32773:info$="PackBits compressed ":r$="FN1501" 12080WHEN 6:info$="JPEG compressed " 12090OTHERWISE info$="Compress "+STR$compression+" - unknown " 12100ENDCASE 12110info$+="TIFF file, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 12120bigendianbits=fillorder=1:PTR#c%=st%(0):stripptr=0:IFstriprows%>=sy% striprows%=-1 12130CASE input OF 12140WHEN 1:rowbytes%=sx%+7>>3 12150WHEN 2:rowbytes%=sx%+3>>2 12160WHEN 4:rowbytes%=sx%+1>>1 12170WHEN 8:rowbytes%=sx% 12180WHEN 24:rowbytes%=3*sx% 12190OTHERWISE ERROR 42,"Can't do "+FNbits(input)+" TIFF" 12200ENDCASE 12210IFplanar%=2 rowbytes%=rowbytes%*sampperpix% 12220IFplanar%<>1 AND rgb<>0 ERROR42,"Can't do this style of TIFF yet" ELSEplanar%=FALSE 12230IF compression<2 THEN 12240cache%=TRUE:stripptr=-1:r$="FN8":IFinput=24 rbo%=0:gbo%=1:bbo%=2:step24=3:r$="FN24" 12250ELSE 12260IFcompression=5 ORcompression=32773 THEN 12270cache%=TRUE:cachebytes%=rowbytes%*striprows% 12280plbuff%=FNdim(rowbytes%):rowstogo%=striprows% 12290IFinput=24 rb%=plbuff%:gb%=plbuff%+1:bb%=plbuff%+2:r$="FN"+STR$(VALMID$(r$,3)+10):step24=3:rbo%=-1 12300ELSE 12310buff%=FNdim(rowbytes%):rowstogo%=striprows% 12320IFinput=24 rb%=buff%:gb%=buff%+1:bb%=buff%+2:r$="FN"+STR$(VALMID$(r$,3)+10):step24=3 12330ENDIF 12340ENDIF 12350IFscale% THEN 12360S%=resunit:IFS%=2 S%=90 12370IFS%=3 S%=35 12380xdiv%=xdiv%*xnum%:xmul%=xmul%*xdenom%*S% 12390ydiv%=ydiv%*ynum%:ymul%=ymul%*ydenom%*S% 12400ENDIF 12410IFr$="FN1500" r$="FN8" 12420WHEN 1600 12430PTR#c%=12:camg=0:planar%=TRUE:REPEAT 12440S$=CHR$BGET#c%+CHR$BGET#c%+CHR$BGET#c%+CHR$BGET#c%:S%=FNbeW 12450CASE S$ OF 12460WHEN "BMHD":sx%=FNbeHW:sy%=FNbeHW:S%=FNW:planes%=BGET#c%:masking%=BGET#c%=1 12470compression=BGET#c%:S%=BGET#c%+FNHW:U%=BGET#c%:V%=BGET#c%:S%=FNW 12480IFscale% ymul%=ymul%*V%:ydiv%=ydiv%*U% 12490FORI%=0TO(1<<planes%)-1:r%(I%)=I%/((1<<planes%)-1)*F:NEXT:g%()=r%():b%()=r%() 12500WHEN "CMAP":S%=PTR#c%+S%:FORI%=0TO(1<<planes%)-1:r%(I%)=(BGET#c%>>4)/15*F 12510g%(I%)=(BGET#c%>>4)/15*F:b%(I%)=(BGET#c%>>4)/15*F:NEXT 12520PTR#c%=S%:IFinfo% PRINT"Warning: truncated IFF CMAP information to 4 bits" 12530WHEN "CAMG":camg=FNbeW:IFinfo% PRINT"Amiga viewport mode ";~camg 12540WHEN "BODY":st%=PTR#c% 12550OTHERWISE IF info% PRINT"Ignoring IFF property "S$" size ";S% 12560PTR#c%=PTR#c%+S% 12570ENDCASE 12580UNTILS$="BODY":IFcompression info$="Compressed " ELSEinfo$="" 12600ham=(camg AND &800)<>0:IFham info$+="HAM " 12610half=(camg AND &80)<>0:IFhalf info$+="half-bright " 12620IFhalf 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 12630info$+="IFF file, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(planes%) 12640IFmasking% info$+=" with mask (ignored)" 12650rowbytes%=(sx%+15>>4)<<1:plbytes%=rowbytes%*planes% 12660pbuff%=FNdim(sx%):r$="FN"+STR$(1600+compression):cache%=TRUE 12670IFcompression THEN 12680cachebytes%=TRUE:plbuff%=FNdim(plbytes%) 12690ELSE 12700realrowbytes%=rowbytes%:rowbytes%=plbytes%:IFmasking% rowbytes%+=realrowbytes% 12710ENDIF 12720PTR#c%=st% 12730WHEN 1700 12740sx%=640:rowbytes%=80:sy%=350:planes%=4:plbytes%=4*80:planar%=TRUE 12750buff%=FNdim(80*4):pbuff%=FNdim(640):G=F/3:H=F*2/3 12760r%()=0,0,0,0,F,F,F,H,G,G,G,G,F,F,F,F 12770g%()=0,0,F,F,0,0,F,H,G,G,F,F,G,G,F,F 12780b%()=0,F,0,F,0,F,0,H,G,F,G,F,G,F,G,F 12790masking%=FALSE:r$="FN1600":st%=16:PTR#c%=16:cache%=TRUE:realrowbytes%=80:rowbytes%=plbytes% 12800info$="PC EGA '.dsp' file, 640 by 350 pixels, 4 bits per pixel (fixed palette)" 12810WHEN 1800 12820sx%=72*8:sy%=720:quant%=1:input=1:PTR#c%=st%:plbuff%=FNdim(72) 12830cache%=TRUE:cachebytes%=TRUE 12840r%(0)=F:g%(0)=F:b%(0)=F:bigendianbits=TRUE:rowbytes%=72:r$="FN1501":rowstogo%=-1 12850IFscale% xmul%=xmul%*90:xdiv%=xdiv%*72:ymul%=ymul%*90:ydiv%=ydiv%*72 12860info$="MacPaint file, 576 by 720 bits, creator id "+RIGHT$(S$,4) 12870WHEN 1850 12880PTR#c%=552 12890code%=FNbeHW:IFcode%=1 PTR#c%=PTR#c%+FNbeHW:code%=FNbeHW 12900CASE code% OF 12910WHEN &98:rowbytes%=FNbeHW:IF(rowbytes% AND&8000)=0 ERROR42,"PICT without Pixmap" 12920sy%=FNbeHW:sx%=FNbeHW:sy%=FNbeHW-sy%:sx%=FNbeHW-sx% 12930junk%=FNHW:packtype%=FNbeHW:junk%=FNW:resx%=FNbeW:resy%=FNbeW 12940IFFNbeHW<>0 CLOSE#c%:ERROR42,"ChangeFSI expected Mac PICT2 pixeltype=Chunky" 12950bpp%=FNbeHW:junk%=FNbeHW:junk%=FNbeHW 12960junk%=FNbeW:junk%=FNbeW:junk%=FNbeW 12970junk%=FNbeW:junk%=FNbeHW 12980C%=FNbeHW:FORI%=0TOC%:J%=FNbeHW:r%(J%)=FNbeHW/65535*F:g%(J%)=FNbeHW/65535*F:b%(J%)=FNbeHW/65535*F:NEXT 12990WHEN &9A:junk%=FNW:rowbytes%=FNbeHW:IF(rowbytes% AND&8000)=0 ERROR42,"PICT without Pixmap" 13000sy%=FNbeHW:sx%=FNbeHW:sy%=FNbeHW-sy%:sx%=FNbeHW-sx% 13010junk%=FNHW:packtype%=FNbeHW:junk%=FNW:resx%=FNbeW:resy%=FNbeW 13020IFFNbeHW<>16 CLOSE#c%:ERROR42,"ChangeFSI expected Mac PICT2 pixeltype=RGBDirect" 13030bpp%=FNbeHW:comps%=FNbeHW:junk%=FNbeHW 13040junk%=FNbeW:junk%=FNbeW 13050junk%=FNbeHW:junk%=FNbeHW 13060IFbpp%>16 PROCnopal ELSEJ%=2^(bpp%DIV3):FORI%=0TOJ%-1:r%(I%)=I%/(J%-1)*F:NEXT:g%()=r%():b%()=r%() 13070IFbpp%=32 AND comps%=3 bpp%=24:rowbytes%=3*sx% 13080OTHERWISE:CLOSE#c%:ERROR42,"ChangeFSI can't understand Mac PICT2 code "+STR$~code% 13090ENDCASE 13100junk%=FNbeHW:junk%=FNbeHW:junk%=FNbeHW:junk%=FNbeHW 13110junk%=FNbeHW:junk%=FNbeHW:junk%=FNbeHW:junk%=FNbeHW 13120junk%=FNbeHW 13130cache%=TRUE:cachebytes%=TRUE:bigendianbits=TRUE:st%=PTR#c%:rowbytes%=rowbytes%ANDNOT&8000 13140IFscale% xmul%=xmul%*90*65536:xdiv%=xdiv%*resx:ymul%=ymul%*90*65536:ydiv%=ydiv%*resy 13150info$="Mac PICT2, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(bpp%) 13160plbuff%=FNdim(rowbytes%):IFbpp%>8 THEN 13170rbo%=-1:rb%=plbuff%+sx%:gb%=plbuff%+sx%*2:bb%=plbuff%+sx%*3:r$="FN1851":input=24 13180IFcomps%=3 rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2 13190ENDIF 13200WHEN 1900 13210PTR#c%=1:C%=BGET#c% 13220E%=BGET#c%:IFE%<>1 ERROR 42,"ZSoft .PCX file with unknown encoding" 13230E%=BGET#c%:sx%=FNHW:sy%=FNHW:sx%=FNHW+1-sx%:sy%=FNHW+1-sy% 13240IFscale% xmul%=xmul%*90:xdiv%=xdiv%*FNHW:ymul%=ymul%*90:ydiv%=ydiv%*FNHW ELSEIFFNW 13250PTR#c%=65:planes%=BGET#c%:planar%=planes%>1:rowbytes%=FNHW:bpp%=E%*planes% 13260pcxpal=16:IFbpp%>4 AND C%=5 THEN 13270PTR#c%=EXT#c%-769:IFBGET#c%=12 pcxpal=EXT#c%-768 13280ENDIF 13290PTR#c%=pcxpal:E%=0:FORC%=0TO(1<<bpp%)*3-1:E%=E%ORBGET#c%:NEXT 13300IFinfo% PRINT".PCX palette mask established at ";~E% 13310IFE%=0 THEN 13320FORC%=0TO(1<<bpp%)-1:r%(C%)=C%/((1<<bpp%)-1)*F:NEXT:g%()=r%():b%()=r%() 13330ELSE 13340PTR#c%=pcxpal:FORC%=0TO(1<<bpp%)-1 13350r%(C%)=(BGET#c%ANDE%)/E%*F:g%(C%)=(BGET#c%ANDE%)/E%*F:b%(C%)=(BGET#c%ANDE%)/E%*F 13360NEXT 13370ENDIF 13380PROCrewind 13390plbytes%=rowbytes%*planes%:plbuff%=FNdim(plbytes%):cache%=TRUE:cachebytes%=TRUE 13400IFplanar% pbuff%=FNdim(sx%) ELSEinput=bpp%:bigendianbits=TRUE:r$="FN1100" 13410info$="ZSoft .PCX file, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(bpp%) 13420WHEN 2000 13430PTR#c%=0:L%=BGET#c%:C%=BGET#c%:I%=BGET#c%:J%=FNHW:K%=FNHW:M%=BGET#c% 13440sx%=FNW:sx%=FNHW:sy%=FNHW:B%=BGET#c%:ID%=BGET#c%:IFID%AND&10 hflip%=NOThflip% 13450IF(ID% AND&20)=0 vflip%=NOTvflip% 13460PTR#c%=PTR#c%+L%:CASE C% OF 13470WHEN 1:IFM%=&18 THEN 13480FORC%=J%TOK%-1 13490b%(C%)=BGET#c%/255*F:g%(C%)=BGET#c%/255*F:r%(C%)=BGET#c%/255*F 13500NEXT 13510ELSE 13520ENDIF 13530OTHERWISE PROCnopal 13540ENDCASE 13550st%=PTR#c% 13560CASE I% OF 13570WHEN 1,2,3:cache%=TRUE:IFB%>8 THEN 13580IFB%>16 THEN 13590input=24:bbo%=0:gbo%=1:rbo%=2:step24=B%DIV8:r$="FN24":rowbytes%=step24*sx% 13600ELSE 13610rowbytes%=sx%*2 13620DIM rpal%(255),gpal%(255):input=16:step24=2:r$="FN16" 13630FORC%=0TO255 13640gpal%(C%)=(C%>>5)<<8 OR (C%AND31)<<16 13650rpal%(C%)=(C%>>2)AND31 OR (C%AND3)<<11 13660NEXT 13670FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 13680ENDIF 13690ELSE 13700r$="FN8":rowbytes%=sx% 13710ENDIF 13720info$="Truevision TGA image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(B%) 13730WHEN 9,10,11:step24=B%DIV8:rowbytes%=step24*sx%:buff%=FNdim(rowbytes%) 13740IFB%>8 THEN 13750IFB%>16 THEN 13760input=24:bb%=buff%:gb%=buff%+1:rb%=buff%+2:r$="FN2002" 13770ELSE 13780DIM rpal%(255),gpal%(255):input=16:step24=2:r$="FN2001" 13790FORC%=0TO255 13800gpal%(C%)=(C%>>5)<<8 OR (C%AND31)<<16 13810rpal%(C%)=(C%>>2)AND31 OR (C%AND3)<<11 13820NEXT 13830FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 13840ENDIF 13850ENDIF 13860info$="Truevision TGA RLE image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(B%) 13870ENDCASE 13880WHEN 2100 13890quant%=6:sx%=512:rowbytes%=2*sx%:sy%=256:cache%=TRUE:r$="FN16" 13900DIM rpal%(255),gpal%(255):input=16:step24=2 13910FORC%=0TO255 13920gpal%(C%)=C%>>3 OR (C%AND7)<<11 13930rpal%(C%)=(C%AND7)<<8 OR (C%>>3)<<16 13940NEXT 13950FORC%=0TO31:r%(C%)=C%/31*F:NEXT:b%()=r%() 13960FORC%=0TO63:g%(C%)=C%/63*F:NEXT 13970IFscale% ymul%=ymul%*2 13980info$="Pineapple image, 512 by 256 pixels, 16 bits per pixel":PTR#c%=7 13990WHEN 2200 14000quant%=8:step24=1:PTR#c%=0:s$=GET$#c%:E%=INSTR(s$,":"):st%=PTR#c% 14010sx%=VALMID$(s$,E%+1):sy%=VALMID$(s$,E%+2+LENSTR$sx%):PROCnopal:input=24 14020rowbytes%=sx%*3:rbo%=0:gbo%=sx%:bbo%=2*sx%:cache%=TRUE:r$="FN24" 14030info$="Irlam image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 14040WHEN 2250 14050PTR#c%=16:sx%=FNW:sy%=FNW:DIM rpal%(255),gpal%(255),bpal%(255),table%(255) 14060FORC%=0TO255:D%=C%OR1 14070table%(C%)=(D%-16)/219*F 14080IFD%AND128 D%-=256 14090r%(C%)=INT(D%/160*F):b%(C%)=INT(D%/126*F) 14100g%(C%)=INT(-D%/160*rwt/gwt*F):gpal%(C%)=INT(-D%/126*bwt/gwt*F) 14110NEXT 14120table%()=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 14130st%=32:PTR#c%=32:cache%=TRUE:rowbytes%=2*sx%:input=411 14140info$="Irlam YUV 4:1:1 file "+STR$sx%+" by "+STR$sy%+" pixels" 14150WHEN 2300 14160PTR#c%=6:sx%=FNHW:sy%=FNHW:D%=BGET#c%:ncolors%=BGET#c%:input=24 14170vflip%=NOTvflip%:quant%=BGET#c%:ncmap%=BGET#c%:cmaplen%=1<<BGET#c% 14180PROCnopal:back%=FNdim(4):!back%=0 14190clrfirst%=D%AND1 14200IF(D%AND2)=0 THEN 14210FORI%=0TOncolors%-1:back%?I%=BGET#c%:NEXT 14220IF(ncolors%AND1)=0 IFBGET#c% 14230ENDIF 14240IFD%AND4 alpha%=FNdim(sx%) 14250IFncmap%>0 THEN 14260FORI%=0TOcmaplen%-1:r%(I%)=FNHW/&FF00*F:NEXT 14270FORI%=0TOcmaplen%-1:g%(I%)=FNHW/&FF00*F:NEXT 14280FORI%=0TOcmaplen%-1:b%(I%)=FNHW/&FF00*F:NEXT 14290ENDIF 14300IFD%AND8 THEN 14310PTR#c%=FNHW+PTR#c%:IFPTR#c%AND1 PTR#c%=PTR#c%+1 14320ENDIF 14330st%=PTR#c%:buff%=FNdim(sx%*3):rb%=buff%:gb%=buff%+1*sx%:bb%=buff%+2*sx% 14340PROCrewind 14350info$="Utah rle image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(ncolors%*quant%) 14360WHEN 2400 14370PTR#c%=&0a:st%=FNW:pal%=FNW:sx%=FNW:sy%=FNW 14380PTR#c%=&1c:input=BGET#c%:bigendianbits=TRUE:vflip%=NOTvflip% 14390CASE input OF 14400WHEN 1:rowbytes%=sx%+7>>3 14410WHEN 4:rowbytes%=sx%+1>>1 14420WHEN 8:rowbytes%=sx% 14430OTHERWISE ERROR 42,".BMP file of unusual depth ("+STR$input+")" 14440ENDCASE 14450rowbytes%=rowbytes%+3ANDNOT3 14460PTR#c%=&36:FORC%=0TO2^input-1 14470b%(C%)=BGET#c%/255*F:g%(C%)=BGET#c%/255*F:r%(C%)=BGET#c%/255*F:IFBGET#c% 14480NEXT 14490r$="FN8":st%=PTR#c%:cache%=TRUE 14500info$="Windows 3.0 .BMP image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 14510WHEN 2500 14520PTR#c%=0:s$="":C%=BGET#c%:WHILEC%<>0 s$+=CHR$C%:C%=BGET#c%:ENDWHILE 14530s$+=" version "+STR$FNW:sx%=FNW:sy%=FNW:input=FNW:cache%=TRUE 14540info$="!Translator Clear format made by "+s$+", "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 14550IFinput>8 THEN 14560PROCnopal:input=24:step24=3:rowbytes%=3*sx%:rbo%=0:gbo%=1:bbo%=2:r$="FN24" 14570ELSE 14580FORC%=0TO2^input-1 14590r%(C%)=BGET#c%/255*F:g%(C%)=BGET#c%/255*F:b%(C%)=BGET#c%/255*F 14600NEXT 14610input=8:r$="FN8":rowbytes%=sx% 14620ENDIF 14630st%=PTR#c% 14640WHEN 2600 14650PTR#c%=0:C%=BGET#c% 14660D%=BGET#c%:CASE D% OF 14670WHEN 0:sx%=320:sy%=200:planes%=4 14680WHEN 1:sx%=640:sy%=200:planes%=2 14690WHEN 2:sx%=640:sy%=400:planes%=1 14700OTHERWISE ERROR42,"ChangeFSI knows nothing of "+STR$C%+" type Degas files" 14710ENDCASE 14720FORI%=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 14730cache%=TRUE:planar%=TRUE:masking%=FALSE:st%=34:PTR#c%=34:r$="FN1600" 14740rowbytes%=(sx%+15>>4)<<1:plbytes%=rowbytes%*planes%:pbuff%=FNdim(sx%) 14750IFC%AND128 r$="FN1601":flag=1600:cachebytes%=TRUE:plbuff%=FNdim(plbytes%) ELSErealrowbytes%=2:rowbytes%=plbytes% 14760info$="Degas file "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(planes%) 14770WHEN 2700 14780PTR#c%=4:sx%=FNHW:sy%=FNHW 14790CASE FNHW OF 14800WHEN &AF:rowbytes%=sx%:cache%=TRUE:r$="FN8":st%=&30A 14810OTHERWISE CLOSE#c%:ERROR 42,"Panic in ColoRIX reading - ChangeFSI largely ignorant of format!" 14820ENDCASE 14830FORC%=0TO2^input-1 14840r%(C%)=BGET#c%/63*F:g%(C%)=BGET#c%/63*F:b%(C%)=BGET#c%/63*F 14850NEXT 14860PTR#c%=st% 14870info$="ColoRIX file "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 14880WHEN 2800 14890PTR#c%=0:REPEAT s$=FNfits:CASE LEFT$(s$,8) OF 14900WHEN "SIMPLE ":IFMID$(s$,30,1)<>"T" ERROR42,"ChangeFSI can only read Simple FITS format" 14910WHEN "BITPIX ":input=VALMID$(s$,10) 14920WHEN "NAXIS ":IFVALMID$(s$,10)<>2 ERROR42,"ChangeFSI can only read 2d FITS images" 14930WHEN "NAXIS1 ":sx%=VALMID$(s$,10) 14940WHEN "NAXIS2 ":sy%=VALMID$(s$,10) 14950WHEN "END " 14960OTHERWISE IFinfo% PRINT"Ignoring FITS record "s$ 14970ENDCASE 14980UNTILLEFT$(s$,8)="END " 14990st%=(PTR#c%DIV2880 + 1)*2880:cache%=TRUE:PTR#c%=st% 15000CASE input OF 15010WHEN 8:r$="FN8":rowbytes%=sx%:PROCnopal 15020WHEN 16:rowbytes%=2*sx%:DIM rpal%(255),gpal%(255):step24=2:r$="FN16" 15030FORC%=0TO255 15040gpal%(C%)=C%<<8 15050rpal%(C%)=C% 15060NEXT:cheat%=0:IFinvert% cheat%=F 15070FORC%=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 15080OTHERWISE ERROR 42,"ChangeFSI can't read a FITS image with this number of bits per pixel" 15090ENDCASE 15100info$="FITS file "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 15110WHEN 2900 15120PTR#c%=4:sx%=FNbeHW:sy%=FNbeHW:PTR#c%=&42:input=FNbeHW:C%=FNbeHW 15130rowbytes%=FNbeHW:C%=FNbeW:st%=FNbeW:PTR#c%=st%:r$="FN8":PROCnopal 15140DIM rpal%(15),gpal%(15),bpal%(15) 15150rpal%()=&e6,&23,&e6,&7f,&17,&00,&a1,&45,&e6,&4a,&e6,&73,&6e,&47,&8a,0 15160gpal%()=&e6,&78,&00,&23,&a1,&73,&2e,&2e,&c8,&a6,&75,&40,&b8,&78,&55,0 15170bpal%()=&b8,&e6,&00,&a1,&17,&2e,&0c,&2e,&00,&c6,&00,&e6,&00,&00,&00,0 15180FORC%=&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 15190info$="Apollo GPR file "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 15200WHEN 3000 15210sx%=720:sy%=EXT#c%/1440:DIM rpal%(255),gpal%(255),bpal%(255),table%(255) 15230IFFALSE THEN 15240FORC%=0TO255 15250table%(C%)=(C%-16)/219*F 15260r%(C%)=(C%-128)/186*0.624*F:rpal%(C%)=(C%-128)/160*0.952*F 15270g%(C%)=-(C%-128)/186*0.64*F:gpal%(C%)=-(C%-128)/160*0.277*F 15280b%(C%)=(C%-128)/186*1.73*F:bpal%(C%)=-(C%-128)/160*1.11*F 15290NEXT 15300ELSE 15320FORC%=0TO255 15330table%(C%)=(C%-16)/219*F 15340r%(C%)=INT((C%-128)/160*F):b%(C%)=INT((C%-128)/126*F) 15350g%(C%)=INT(-(C%-128)/160*rwt/gwt*F):gpal%(C%)=INT(-(C%-128)/126*bwt/gwt*F) 15360NEXT 15370ENDIF 15380table%()=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 15390st%=0:PTR#c%=0:cache%=TRUE:rowbytes%=1440:input=422:gamma=1 15400IFscale% ymul%=ymul%*2 15410info$="CCIR601 4:2:2 file "+STR$sx%+" by "+STR$sy%+" pixels" 15420WHEN 3100 15430quant%=8:PTR#c%=0:a$=GET$#c%:st%=PTR#c% 15440sx%=VALa$:sy%=VAL(MID$(a$,INSTR(a$," "))) 15450PROCnopal:input=24:step24=3:rowbytes%=sx%*3 15460rbo%=0:gbo%=1:bbo%=2:cache%=TRUE:flag=700:r$="FN24" 15470info$="!RayShade 'RGB' image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 15480WHEN 3200 15490quant%=8:PTR#c%=0:st%=0 15500sx%=VALMID$(s$,INSTR(s$,"_")+1,1) 15510CASE sx% OF 15520WHEN 5:sx%=768:sy%=512 15530WHEN 2:sx%=3072:sy%=2048 15540WHEN 1:sx%=1536:sy%=1024 15550ENDCASE 15560PROCnopal:input=24:step24=3:rowbytes%=sx%*3 15570rbo%=0:gbo%=1:bbo%=2:cache%=TRUE:flag=700:r$="FN24" 15580info$="Kodak /RGB image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 15590WHEN 3300 15600PTR#c%=0:input=VALMID$(FNGET,2) 15610s$=FNGET:sx%=VALs$:sy%=VALMID$(s$,INSTR(s$," ")):IFsy%=0 sy%=VALFNGET 15620cache%=TRUE:CASE input OF 15630WHEN 4:input=1:r$="FN8":r%(0)=F:g%()=r%():b%()=r%():bigendianbits=TRUE 15640rowbytes%=(sx%+7)DIV8 15650WHEN 5:input=8:r$="FN8":E%=VALFNGET 15660FORC%=0TOE%:r%(C%)=C%/E%*F:NEXT:g%()=r%():b%()=r%() 15670rowbytes%=sx% 15680WHEN 6:input=24:r$="FN24":E%=VALFNGET:step24=3:rbo%=0:gbo%=1:bbo%=2 15690FORC%=0TOE%:r%(C%)=C%/E%*F:NEXT:g%()=r%():b%()=r%() 15700rowbytes%=sx%*3 15710ENDCASE 15720st%=PTR#c%:flag=700 15730info$+="pbm image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 15740DEF FNGET REPEATs$=GET$#c%:UNTILLEFT$(s$,1)<>"#":=s$ 15750WHEN 3400 15760PTR#c%=0:s$=FNGET:input=16:quant%=5 15770s$=FNGET:sx%=VALs$:sy%=VALMID$(s$,INSTR(s$," ")):s$=FNGET 15780DIM rpal%(255),gpal%(255):input=16:step24=2 15790FORC%=0TO255 15800gpal%(C%)=(C%>>5)<<8 OR (C%AND31) 15810rpal%(C%)=((C%>>2)AND31)<<16 OR (C%AND3)<<11 15820NEXT 15830cache%=TRUE:r$="FN16" 15840FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 15850rowbytes%=sx%*2:st%=PTR#c%:flag=700 15860info$="p15 image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 15870WHEN 3450 15880PTR#c%=0:info$=FNGET 15890ybits%=VALMID$(info$,INSTR(info$," ")):ymax%=(1<<ybits%)-1 15900ubits%=VALMID$(info$,INSTR(info$,"Y ")+1):umax%=(1<<(ubits%-1))-1 15910vbits%=VALMID$(info$,INSTR(info$,"U ")+1):vmax%=(1<<(vbits%-1))-1 15920s$=FNGET:sx%=VALs$:sy%=VALMID$(s$,INSTR(s$," ")) 15930DIM rpal%(255),gpal%(255),bpal%(255),table%(255) 15940FORC%=0TOymax%:table%(C%)=C%/ymax%*F:NEXT 15950D%=(1<<ubits%)-1 15960FORC%=0TOD%:d=C%/umax%:IFd>1 d=-(D%-C%)/umax% 15970b%(C%)=INT(d*(1-bwt)*F):gpal%(C%)=INT(-d*(1-bwt)*bwt/gwt*F) 15980NEXT 15990D%=(1<<vbits%)-1 16000FORC%=0TOD%:d=C%/vmax%:IFd>1 d=-(D%-C%)/vmax% 16010r%(C%)=INT(d*(1-rwt)*F):g%(C%)=INT(-d*(1-rwt)*rwt/gwt*F) 16020NEXT 16030rowbytes%=sx%*2:st%=PTR#c%:cache%=TRUE:r$="FN2250":input=555 16040info$+=", "+STR$sx%+" by "+STR$sy%+" pixels" 16050WHEN 3500 16060quant%=1:PTR#c%=6:E%=FNHW:sx%=FNHW:sx%=FNHW:sy%=FNHW:st%=FNHW:st%=FNW 16070input=1:r%(0)=F:g%(0)=F:b%(0)=F:rowbytes%=sx%/8+1ANDNOT1 16080IFE%=1 THEN 16090st%+=PTR#c%:PTR#c%=st% 16100cache%=TRUE:r$="FN8" 16110info$="Pocketbook bitmap, "+STR$sx%+" by "+STR$sy%+" pixels, 1 bit per pixel" 16120ELSE 16130planar%=TRUE:planes%=2 16140ENDIF 16150WHEN 3600 16160pcdblk%=FNdim(40):SYS&20023,"ChangeFSI$PCDindex",pcdblk%,20 TO,,Z 16170IFZ THENpcdblk%?Z=13:pcdindex%=VAL$pcdblk% ELSEpcdindex%=3 16180SYS"PhotoCD_Open",1,c%,1 TO pcdh%:SYS"PhotoCD_GetCount",pcdh% TO,Z 16190IF(Z>>pcdindex%)=0 CLOSE#c%:ERROR42,"Desired resolution unavailable" 16200SYS"PhotoCD_GetRotation",pcdh% TO,,pcdtr% 16210SYS"PhotoCD_GetSize",pcdh%,,pcdindex% TO,,,,sx%,sy% 16220pcdblk%!0=0:pcdblk%!8=sx%:pcdblk%!4=0 16230pcdblk%!16=0:pcdblk%!20=2:pcdblk%!24=1:pcdblk%!28=3 16250CASE pcdtr% OF 16260WHEN 0 16270WHEN &80000000:hflip%=NOThflip% 16280WHEN 90 16290CASE rotate% OF 16300WHEN 0:rotate%=1 16310WHEN -1:rotate%=0 16320WHEN 1:rotate%=0:vflip%=NOTvflip%:hflip%=NOThflip% 16330ENDCASE 16340WHEN &8000005A 16350CASE rotate% OF 16360WHEN 0:rotate%=1:vflip%=NOTvflip% 16370WHEN -1:rotate%=0:vflip%=NOTvflip% 16380WHEN 1:rotate%=0:hflip%=NOThflip% 16390ENDCASE 16400WHEN 180:hflip%=NOThflip%:vflip%=NOTvflip% 16410WHEN &800000B4:vflip%=NOTvflip% 16420WHEN 270 16430CASE rotate% OF 16440WHEN 0:rotate%=-1 16450WHEN 1:rotate%=0 16460WHEN -1:rotate%=0:vflip%=NOTvflip%:hflip%=NOThflip% 16470ENDCASE 16480WHEN &8000010E 16490CASE rotate% OF 16500WHEN 0:rotate%=-1:vflip%=NOTvflip% 16510WHEN 1:rotate%=0:vflip%=NOTvflip% 16520WHEN -1:rotate%=0:hflip%=NOThflip% 16530ENDCASE 16540OTHERWISE PANIC 16550ENDCASE 16570input=24:step24=3:rbo%=0:gbo%=1:bbo%=2:pcdcachesize%=32*1024 16580rowbytes%=sx%*3:PROCnopal:cache%=TRUE:pcdcache%=FNdim(pcdcachesize%) 16590info$="PhotoCD image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 16600WHEN 3700 16610A%=OPENIN"<ChangeFSI$Dir>.CFSI-jpeg":jpeg%=FNdim(EXT#A%) 16620SYS12,4,A%,jpeg%,EXT#A%:CLOSE#A% 16630datacache%=FNcachedim(EXT#c%):IFdatacache%=-1 datacache%=FNdim(EXT#c%) 16640PTR#c%=0:SYS12,4,c%,datacache%,EXT#c% 16650A%=datacache%:B%=jpegblk%:C%=jpegblk%+4:D%=jpegblk%+8:E%=jpegblk%+12:CALLjpeg%+8 16660B%=jpegblk%!12:jpegspace%=FNdim(B%) 16670C%=datacache%:A%=jpegspace%:D%=EXT#c% 16680CALLjpeg%:cache%=FALSE:IF!A% ERROR42,"JPEG code error: "+STR$!A% 16690sx%=A%!20:sy%=A%!24:input=8*A%?28:PROCnopal:step24=4 16700info$="JFIF image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 16710jpegy%=sy%:r$="FN"+STR$INT(3700+input) 16720WHEN 666 16830st%=0:PTR#c%=0:sx%=160:sy%=128:input=8:cache%=TRUE:rowbytes%=sx% 16840FORC%=0TO255:r%(C%)=C%/255*F:NEXT:g%()=r%():b%()=r%():r$="FN8" 16850info$="The number of the beast, 160 by "+STR$sy%+" pixels, 8 bits per pixel" 16860ENDCASE 16870IFinfo% PRINTinfo$ 16880SYS"Hourglass_On",1:hour%=&406c4 16890IFinvert% r%()=F-r%():g%()=F-g%():b%()=F-b%() 16900CASE m OF 16910WHEN -1:x%=256:y%=256:ncol=256:IFscaleo% xdiv%=xdiv%*2:ydiv%=ydiv%*2 16920WHEN -2:x%=sx%:y%=sy%:IFspm=18 ncol=1 ELSEncol=15 16930WHEN -3,-5,-6:x%=sx%:y%=sy%:ncol=2^15-1 16940WHEN -4,-7,-8:x%=sx%:y%=sy%:ncol=2^24-1 16950OTHERWISE 16960SYS53,m,4 TO ,,nx:SYS53,m,5 TO ,,ny:nx=1<<nx:ny=1<<ny 16970SYS53,m,11 TO ,,x%:SYS53,m,12 TO ,,y%:x%+=1:y%+=1 16980SYS53,m,3 TO ,,ncol:IFscaleo% THEN 16990IFrotate% THEN 17000xdiv%=xdiv%*ny:ydiv%=ydiv%*nx 17010IFxdiv% ymul%=ymul%*2 17020IFydiv% xmul%=xmul%*2 17030ELSE 17040xdiv%=xdiv%*nx:ydiv%=ydiv%*ny 17050IFxdiv% xmul%=xmul%*2 17060IFydiv% ymul%=ymul%*2 17070ENDIF 17080ENDIF 17090SYS&62A51,m TO r0;V:IF(V AND1)=0 THEN 17110IFr0=1 THEN 17120ncol=255:IFm$<>"D" m$="R" 17130ENDIF 17140ENDIF 17150ENDCASE 17160IFm=-6 OR m=-7 OR m=-8 THEN 17170nx=VALMID$(pnm$,5):ny=VALMID$(pnm$,INSTR(pnm$,",",5)+1) 17180IFscaleo% THEN 17190IFrotate% THEN 17200IFxdiv% ymul%=ymul%*nx 17210IFydiv% xmul%=xmul%*ny 17220ELSE 17230IFxdiv% xmul%=xmul%*nx 17240IFydiv% ymul%=ymul%*ny 17250ENDIF 17260xdiv%=xdiv%*90:ydiv%=ydiv%*90 17270ENDIF 17280ENDIF 17290IFrotate% SWAP x%,y% 17310IFxdiv%=0 xdiv%=sx% 17320IFydiv%=0 ydiv%=sy% 17330IFxs$="=" xmul%=x%:xdiv%=sx% 17340IFys$="=" ymul%=y%:ydiv%=sy% 17350IFlock% THEN 17360IFxmul%/xdiv%>ymul%/ydiv% xmul%=ymul%:xdiv%=ydiv% ELSEymul%=xmul%:ydiv%=xdiv% 17370ENDIF 17380IFncol=1 THEN 17390CASE m$ OF 17400WHEN"C":xdiv%=xdiv%*4:ydiv%=ydiv%*4 17410DIM A%(16),B%(16) 17420A%()=0,&00000001,&08000001,&08000101,&08080101,&08080103,&0C080103,&0C080303,&0C0C0303,&0C0E0303,&0C0E0703,&0E0E0703,&0E0E0707,&0E0F0707,&0E0F0F07,&0F0F0F07,&0F0F0F0F 17430B%()=0,&00000008,&01000008,&01000808,&01010808,&0101080C,&0301080C,&03010C0C,&03030C0C,&03070C0C,&03070E0C,&07070E0C,&07070E0E,&070F0E0E,&070F0F0E,&0F0F0F0E,&0F0F0F0F 17440even_gard=FNdim(17*32*4):odd_gard=FNdim(17*32*4) 17450FORI%=0TO16:FORJ%=0TO16:even_gard!(J%*32*4+I%*4)=A%(I%)ORB%(J%)<<4:NEXT:NEXT 17460FORI%=0TO16:FORJ%=0TO16:odd_gard!(I%*32*4+J%*4)=B%(I%)ORA%(J%)<<4:NEXT:NEXT 17470WHEN"T":xdiv%=xdiv%*3:ydiv%=ydiv%*3 17480DIM A%(9),B%(9) 17490A%()=0,&0001,&4001,&4041,&4043,&40C3,&60C3,&61C3,&71C3,&71C7 17500B%()=0,&0004,&1004,&1104,&1106,&1186,&3186,&31C6,&71C6,&71C7 17510even_gard=FNdim(10*16*4):odd_gard=FNdim(10*16*4) 17520FORI%=0TO9:FORJ%=0TO9:even_gard!(J%*16*4+I%*4)=A%(I%)ORB%(J%)<<3:NEXT:NEXT 17530FORI%=0TO9:FORJ%=0TO9:odd_gard!(I%*16*4+J%*4)=B%(I%)ORA%(J%)<<3:NEXT:NEXT 17540WHEN"D":xdiv%=xdiv%*2:ydiv%=ydiv%*2 17550DIM A%(4),B%(4) 17560A%()=0,&1,&21,&31,&33 17570B%()=0,&2,&12,&32,&33 17580even_gard=FNdim(5*8):odd_gard=FNdim(5*8) 17590FORI%=0TO4:FORJ%=0TO4:even_gard?(J%*8+I%)=A%(I%)ORB%(J%)<<2:NEXT:NEXT 17600FORI%=0TO4:FORJ%=0TO4:odd_gard?(I%*8+J%)=B%(I%)ORA%(J%)<<2:NEXT:NEXT 17610ENDCASE 17620ENDIF 17630PROCreduce(xmul%,xdiv%):PROCreduce(ymul%,ydiv%) 17640IFinfo% PRINT"Size ratios are x ";xmul%":"xdiv%" y "ymul%":"ydiv% 17650x%=sx%*xmul%/xdiv%+.9999:y%=sy%*ymul%/ydiv%+.9999:rows%=sy% 17660order%=x%*y%>sx%*sy% 17670code%=FNdim(8192):SP=13 17680IFcache% THEN 17690PROCcachesize(code%) 17700IFcachebytes% THEN 17710filesize%=EXT#c%-PTR#c%:IFcache%>filesize% cache%=filesize% 17720IFcachebytes%>0 IFcache%>cachebytes% cache%=cachebytes% 17730cacherows%=cache% 17740ELSE 17750filesize%=sy%*rowbytes%:IFcache%<rowbytes% cache%=rowbytes% 17760IFcache%>filesize% cache%=filesize% 17770cacherows%=striprows%:IFcacherows%<1 cacherows%=cache%DIVrowbytes% 17780cache%=cacherows%*rowbytes% 17790ENDIF 17800datacache%=FNcachedim(cache%):IFdatacache%=-1 datacache%=FNdim(cache%) 17810ENDIF 17820IFncol=255 IFm$<>"D" m$="R" 17830IFm$="R" OR(ncol=63 ANDm$="") THEN 17840SYS53,-1,3 TO,,J%:IFncol=255 AND MODE=m J%=ncol 17850IFncol=63 AND(m$=""ORm$="R") J%=ncol 17860IFJ%<>ncol PROCclose:ERROR42,"You must be in a "+STR$(ncol+1)+" colour mode to do this" 17870J%=ncol:IFJ%=63 J%=255 17880palette%=FNdim((J%+1)*4) 17890IFncol=255 THEN 17900SYS"ColourTrans_ReadPalette",-1,-1,palette%,256*4 17910FORI%=0TO255:palette%!(I%<<2)=palette%!(I%<<2)>>>8:NEXT 17920ELSE 17930IFncol=63 THEN 17940FORI%=0TO255 17950palette%!(I%<<2)=(I%AND7 OR (I%AND16)>>1)*17 17960palette%?(I%<<2 OR1)=(I%AND3 OR (I%AND&60)>>3)*17 17970palette%?(I%<<2 OR2)=(I%AND3 OR (I%AND8)>>1 OR (I%AND128)>>4)*17 17980NEXT 17990ELSE 18000FORI%=0TOncol:SYS"OS_ReadPalette",I%,16 TO ,,i%:palette%!(I%<<2)=i%>>>8:NEXT 18010ENDIF 18020ENDIF 18030t%=TRUE:k%=palette%+1:nk%=palette%+2 18040FORI%=0TOncol*4STEP4 18050IFpalette%?I%<>k%?I% OR palette%?I%<>nk%?I% t%=FALSE 18060NEXT 18070IFncol>16 IFt% m$="D" 18080IFncol=15 IFt% m$="T" 18090IFm$="R" THEN 18100IF sx%*xmul%/xdiv%*sy%*ymul%/ydiv%<200000 k%=3 ELSEk%=4 18110nk%=8-k% 18120t%=1<<nk% 18130mask%=t%-1 18140td2%=1<<nk%-1 18150step%=1<<(8-k%) 18160ncol%=ncol+1:IFncol%=64 ncol%=256 18170ict%=FNdim(2^(k%*3)*4-1) 18180IFcache%<8192*6 scratch%=FNdim(8192*6):scratchsz%=8192*6 ELSEscratch%=datacache%:scratchsz%=cache% 18190IFinfo% PRINT"Begin table generation with ";scratchsz%" bytes." 18200FORZ%=0TO2STEP2 18210P%=code% 18220[OPT Z% 18230.make% 18240STMFD r13!,{r14} 18250LDR r4,ict 18260MOV r2,#step%/2 18270.blueloop 18280MOV r1,#step%/2 18290.greenloop 18300MOV r0,#step%/2 18310.redloop 18330MOV r3,r0,LSR #nk% 18340MOV r14,r1,LSR #nk% 18350MOV r5,r2,LSR #nk% 18360ORR r3,r3,r14,LSL #k% 18370ORR r3,r3,r5,LSL #k%*2 18380BL devious 18390ADD r0,r0,#step%*2 18400CMP r0,#256 18410BCC redloop 18420ADD r1,r1,#step% 18430CMP r1,#256 18440BCC greenloop 18450ADD r2,r2,#step% 18460CMP r2,#256 18470BCC blueloop 18480LDMFD r13!,{pc}^ 18490.ct DCD palette% 18500.min DCD code%+8192-256*2*4 18510.ict DCD ict% 18520.fsaad DCD scratch% 18530.fsalim DCD scratch%+scratchsz% 18540.devious 18550STMFD r13!,{r0,r1,r2,r3,r4,r8,r14} 18560BIC r0,r0,#(mask%<<1)+1 18570BIC r1,r1,#mask% 18580BIC r2,r2,#mask% 18610MOV r5,#0 18620LDR r6,ct 18630MOV r9,#&ff0000 18640MOV r14,#&ff0000 18650LDR r12,min 18660.devloop 18670LDR r7,[r6,r5,LSL #2] 18680MOV r8,r7,lsr #16 18690BIC r10,r8,#mask% 18700ADD r11,r2,#t% 18710CMP r10,r2 18720BEQ blueequal 18730SUBCC r10,r2,r8 18740SUBCC r11,r11,r8 18750SUBCS r10,r8,r11 18760SUBCS r11,r8,r2 18770MUL r3,r10,r10 18780.doneblue 18790MUL r4,r11,r11 18800MOV r8,r7,lsr #8 18810AND r8,r8,#255 18820BIC r10,r8,#mask% 18830ADD r11,r1,#t% 18840CMP r10,r1 18850BEQ greenequal 18860SUBCC r10,r1,r8 18870SUBCC r11,r11,r8 18880SUBCS r10,r8,r11 18890SUBCS r11,r8,r1 18900MLA r3,r10,r10,r3 18910.donegreen 18920MLA r4,r11,r11,r4 18930AND r8,r7,#255 18950BIC r10,r8,#mask% 18960ADD r11,r0,#t% 18970CMP r10,r0 18980BEQ redequal0 18990SUBCC r10,r0,r8 19000SUBCC r11,r11,r8 19010SUBCS r10,r8,r11 19020SUBCS r11,r8,r0 19030MLA r7,r10,r10,r3 19040STR r7,[r12,r5,LSL #2] 19050.donered0 19060MLA r7,r11,r11,r4 19070CMP r7,r9 19080MOVCC r9,r7 19100ADD r7,r0,#t% 19110BIC r10,r8,#mask% 19120ADD r11,r7,#t% 19130CMP r10,r7 19140BEQ redequal1 19150SUBCC r10,r7,r8 19160SUBCC r11,r11,r8 19170SUBCS r10,r8,r11 19180SUBCS r11,r8,r7 19190MLA r3,r10,r10,r3 19200.donered1 19210ADD r7,r5,#ncol% 19220STR r3,[r12,r7,LSL #2] 19230MLA r7,r11,r11,r4 19240CMP r7,r14 19250MOVCC r14,r7 19260ADD r5,r5,#1 19270CMP r5,#ncol% 19280BCC devloop 19290LDMFD r13!,{r0,r1,r2,r3,r4} 19310LDR r5,fsaad 19320MOV r7,r5 19330MOV r10,#0 19340.calcnum0 19350LDMIA r12!,{r8,r11} 19360CMP r8,r9 19370STRLEB r10,[r7],#1 19380ADD r10,r10,#1 19390CMP r11,r9 19400STRLEB r10,[r7],#1 19410ADD r10,r10,#1 19420LDMIA r12!,{r8,r11} 19430CMP r8,r9 19440STRLEB r10,[r7],#1 19450ADD r10,r10,#1 19460CMP r11,r9 19470STRLEB r10,[r7],#1 19480ADD r10,r10,#1 19490CMP r10,#ncol% 19500BCC calcnum0 19510SUBS r10,r7,r5 19520SWIEQ 256+ASC"A" 19530CMP r10,#4 ;if<4 then 19540MOVCC r7,r5 ;reset list pointer 19550LDRCCB r5,[r7] ;first possible 19560LDRCCB r8,[r7,#1] ;second possible 19570ORRCC r5,r5,r8,lsl #8 19580LDRCCB r8,[r7,#2] ;third possible 19590ORRCC r5,r5,r8,lsl #16 19600ADD r5,r5,r10,lsl #24 19610BIC r10,r3,#1 19620STR r5,[r4,r10,LSL #2] 19630MOV r5,r7 19640MOV r10,#0 19650.calcnum1 19660LDMIA r12!,{r8,r11} 19670CMP r8,r14 19680STRLEB r10,[r7],#1 19690ADD r10,r10,#1 19700CMP r11,r14 19710STRLEB r10,[r7],#1 19720ADD r10,r10,#1 19730LDMIA r12!,{r8,r11} 19740CMP r8,r14 19750STRLEB r10,[r7],#1 19760ADD r10,r10,#1 19770CMP r11,r14 19780STRLEB r10,[r7],#1 19790ADD r10,r10,#1 19800CMP r10,#ncol% 19810BCC calcnum1 19820SUBS r10,r7,r5 19830SWIEQ 256+ASC"B" 19840CMP r10,#4 ;if<4 then 19850MOVCC r7,r5 19860LDRCCB r5,[r7] 19870LDRCCB r8,[r7,#1] 19880ORRCC r5,r5,r8,lsl #8 19890LDRCCB r8,[r7,#2] 19900ORRCC r5,r5,r8,lsl #16 19910ADD r5,r5,r10,lsl #24 19920ORR r10,r3,#1 19930STR r5,[r4,r10,LSL #2] 19940STR r7,fsaad 19950LDR r8,fsalim 19960CMP r7,r8 19970SWICS 256+ASC"!" 19980LDMFD r13!,{r8,pc}^ 19990.redequal0 20000STR r3,[r12,r5,LSL #2] 20010TST r8,#td2% 20020SUBNE r11,r8,r0 20030SUBEQ r11,r11,r8 20040B donered0 20050.redequal1 20060TST r8,#td2% 20070SUBNE r11,r8,r7 20080SUBEQ r11,r11,r8 20090B donered1 20100.greenequal 20110TST r8,#td2% 20120SUBNE r11,r8,r1 20130SUBEQ r11,r11,r8 20140B donegreen 20150.blueequal 20160MOV r3,#0 20170TST r8,#td2% 20180SUBNE r11,r8,r2 20190SUBEQ r11,r11,r8 20200B doneblue 20210] 20220NEXT 20230I%=TIME:CALLmake% 20240IFinfo% PRINT"Generated 'r'";k%" tables for ";ncol%" colours using ";!fsaad-scratch%" bytes, taking "TIME-I%" cS" 20250safesubict%=FNdim(!fsaad-scratch%) 20260FORI%=0TO!fsaad-scratch%+4STEP4:safesubict%!I%=scratch%!I%:NEXT 20270FORI%=0TO2^(k%*3)*4-1STEP4:IF(ict%!I%>>>24)>3 ict%!I%=ict%!I%-scratch%+safesubict% 20280NEXT 20290ENDIF 20300ENDIF 20310IFfast% IFMODE<>0 MODE0 20330CASE m OF 20340WHEN -1:col=0 20350WHEN -3,-4,-5,-6,-7,-8:col=2 20360OTHERWISE 20370IFm$="D" IFncol=3 m$="" 20380col=0:IFncol>15 ORm$="C" ORm$="D" ORm$="R" col=2 20390IFncol=63 OR ncol=255 IFm$="D" col=0:ncol=256 20400ENDCASE 20410IFncol=1 THEN 20420CASE m$ OF 20430WHEN"C":col=0:x%=x%+1ANDNOT1 20440WHEN"D":col=0:x%=x%+3ANDNOT3 20450WHEN"T":col=0:x%=x%+1ANDNOT1 20460ENDCASE 20470ENDIF 20480IFsharpen%=TRUE sharpen%=24 20490DIM cl%(x%+7,col) 20500DIM xl%(x%+7,col),xp%(sx%+7,col) 20510DIM xl2%(x%+7,col) 20520IFsharpen% THEN 20530IForder% THEN 20540DIM rm%(sx%+7,col),rm1%(sx%+7,col),rm2%(sx%+7,col) 20550ELSE 20560DIM rm%(x%+7,col),rm1%(x%+7,col),rm2%(x%+7,col) 20570ENDIF 20580ENDIF 20590IFhist%ORequal% DIM vals%(256,col) 20600DIM nl%(x%+7,col) 20610totvals%=x%*(col+1) 20620totvals2%=sx%*(col+1) 20630FORZ=0TO2STEP2:P%=code% 20640CASE ncol OF 20650WHEN 2^24-1 20660[OPT Z 20670.div255 20680] 20690FORI%=0TO2^p6bits-1 20700[OPT Z 20710EQUD I%/(2^p6bits-1)*F 20720] 20730NEXT 20740[OPT Z 20750.fs% 20760STMFD SP !,{R14} 20770LDR R1,[R9,#5*8]:LDR R1,[R1] 20780LDR R10,[R9,#4*8] 20790LDR R11,[R9,#3*8] 20800LDR R12,[R9,#2*8]:LDR R12,[R12] 20810LDR R8,[R9,#8]:LDR R8,[R8] 20820LDR R9,[R9]:LDR R9,[R9] 20830LDR R4,[R10] 20840LDR R5,[R10,#4] 20850LDR R6,[R10,#8] 20860ADR R7,div255 20870.fsloop 20880ADD R10,R10,R8 20890CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 20900SUB R0,R4,R4,LSR #p6bits:ADD R0,R0,#1<<(bits-p6bits-1):MOV R0,R0,LSR #(bits-p6bits) 20910LDR R2,[R7,R0,LSL #2]:SUB R4,R4,R2 20920CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 20930SUB R3,R5,R5,LSR #p6bits:ADD R3,R3,#1<<(bits-p6bits-1):MOV R3,R3,LSR #(bits-p6bits):ORR R0,R0,R3,LSL #8 20940LDR R2,[R7,R3,LSL #2]:SUB R5,R5,R2 20950CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 20960SUB R3,R6,R6,LSR #p6bits:ADD R3,R3,#1<<(bits-p6bits-1):MOV R3,R3,LSR #(bits-p6bits):ORR R0,R0,R3,LSL #16 20970LDR R2,[R7,R3,LSL #2]:SUB R6,R6,R2 20980STRB R0,[R12]:MOV R0,R0,LSR #8:STRB R0,[R12,#1]:MOV R0,R0,LSR #8 20990STRB R0,[R12,#2] 21000] 21010IFm=-8 THEN 21020[OPT Z 21030ADD R12,R12,R1,LSL #2 21040] 21050ELSE 21060[OPT Z 21070ADD R12,R12,R1,LSL #1:ADD R12,R12,R1 21080] 21090ENDIF 21100IFdither% THEN 21110[OPT Z 21120ADD R0,R11,#4 21130ADD R2,R4,R4,LSL #1 21140LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 21150STR R3,[R11,-R8] 21160ADD R2,R4,R4,LSL #2 21170LDR R3,[R11]:ADD R3,R3,R2,ASR #4 21180STR R3,[R11] 21190MOV R3,R4,ASR #4 21200STR R3,[R11,R8]! 21210RSB R2,R4,R4,LSL #3 21220LDR R4,[R10] 21230ADD R4,R4,R2,ASR #4 21240ADD R2,R5,R5,LSL #1 21250LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 21260STR R3,[R0,-R8] 21270MOV R3,R5,ASR #4 21280STR R3,[R0,R8] 21290ADD R2,R5,R5,LSL #2 21300LDR R3,[R0]:ADD R3,R3,R2,ASR #4 21310STR R3,[R0],#4 21320RSB R2,R5,R5,LSL #3 21330LDR R5,[R10,#4] 21340ADD R5,R5,R2,ASR #4 21350ADD R2,R6,R6,LSL #1 21360LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 21370STR R3,[R0,-R8] 21380ADD R2,R6,R6,LSL #2 21390LDR R3,[R0]:ADD R3,R3,R2,ASR #4 21400STR R3,[R0] 21410MOV R3,R6,ASR #4 21420STR R3,[R0,R8] 21430RSB R2,R6,R6,LSL #3 21440LDR R6,[R10,#8] 21450ADD R6,R6,R2,ASR #4 21460] 21470ELSE 21480[OPT Z 21490LDMIA R10,{R4,R5,R6} 21500] 21510ENDIF 21520[OPT Z 21530SUBS R9,R9,#1:BNE fsloop 21540LDMFD SP !,{PC}^ 21550] 21560WHEN 2^15-1 21570[OPT Z 21580.div31 21590] 21600FORI%=0TO31 21610[OPT Z 21620EQUD I%/31*F 21630] 21640NEXT 21650[OPT Z 21660.fs% 21670STMFD SP !,{R14} 21680LDR R1,[R9,#5*8]:LDR R1,[R1] 21690LDR R10,[R9,#4*8] 21700LDR R11,[R9,#3*8] 21710LDR R12,[R9,#2*8]:LDR R12,[R12] 21720LDR R8,[R9,#8]:LDR R8,[R8] 21730LDR R9,[R9]:LDR R9,[R9] 21740LDR R4,[R10] 21750LDR R5,[R10,#4] 21760LDR R6,[R10,#8] 21770ADR R7,div31 21780.fsloop 21790ADD R10,R10,R8 21800CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 21810SUB R0,R4,R4,LSR #5:ADD R0,R0,#1<<(bits-6):MOV R0,R0,LSR #(bits-5) 21820LDR R2,[R7,R0,LSL #2]:SUB R4,R4,R2 21830CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 21840SUB R3,R5,R5,LSR #5:ADD R3,R3,#1<<(bits-6):MOV R3,R3,LSR #(bits-5):ORR R0,R0,R3,LSL #5 21850LDR R2,[R7,R3,LSL #2]:SUB R5,R5,R2 21860CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 21870SUB R3,R6,R6,LSR #5:ADD R3,R3,#1<<(bits-6):MOV R3,R3,LSR #(bits-5):ORR R0,R0,R3,LSL #10 21880LDR R2,[R7,R3,LSL #2]:SUB R6,R6,R2 21890STRB R0,[R12]:MOV R0,R0,LSR #8:STRB R0,[R12,#1]:ADD R12,R12,R1,LSL #1 21900] 21910IFdither% THEN 21920[OPT Z 21930ADD R0,R11,#4 21940ADD R2,R4,R4,LSL #1 21950LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 21960STR R3,[R11,-R8] 21970ADD R2,R4,R4,LSL #2 21980LDR R3,[R11]:ADD R3,R3,R2,ASR #4 21990STR R3,[R11] 22000MOV R3,R4,ASR #4 22010STR R3,[R11,R8]! 22020RSB R2,R4,R4,LSL #3 22030LDR R4,[R10] 22040ADD R4,R4,R2,ASR #4 22050ADD R2,R5,R5,LSL #1 22060LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 22070STR R3,[R0,-R8] 22080MOV R3,R5,ASR #4 22090STR R3,[R0,R8] 22100ADD R2,R5,R5,LSL #2 22110LDR R3,[R0]:ADD R3,R3,R2,ASR #4 22120STR R3,[R0],#4 22130RSB R2,R5,R5,LSL #3 22140LDR R5,[R10,#4] 22150ADD R5,R5,R2,ASR #4 22160ADD R2,R6,R6,LSL #1 22170LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 22180STR R3,[R0,-R8] 22190ADD R2,R6,R6,LSL #2 22200LDR R3,[R0]:ADD R3,R3,R2,ASR #4 22210STR R3,[R0] 22220MOV R3,R6,ASR #4 22230STR R3,[R0,R8] 22240RSB R2,R6,R6,LSL #3 22250LDR R6,[R10,#8] 22260ADD R6,R6,R2,ASR #4 22270] 22280ELSE 22290[OPT Z 22300LDMIA R10,{R4,R5,R6} 22310] 22320ENDIF 22330[OPT Z 22340SUBS R9,R9,#1:BNE fsloop 22350LDMFD SP !,{PC}^ 22360] 22370WHEN 256 22380[OPT Z 22390.div255 22400] 22410FORI%=0TO255 22420[OPT Z 22430EQUD I%/255*F 22440] 22450NEXT 22460[OPT Z 22480.fs% 22490STMFD SP !,{R14} 22500LDR R10,[R9,#4*8] 22510ADR R7,div255 22520LDR R1,[R9,#5*8]:LDR R1,[R1] 22530LDR R11,[R9,#3*8] 22540LDR R12,[R9,#2*8]:LDR R12,[R12] 22550LDR R8,[R9,#8]:LDR R8,[R8] 22560LDR R9,[R9]:LDR R9,[R9] 22570LDR R4,[R10],R8 22580.fsloop 22590CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 22600SUB R0,R4,R4,LSR #8:ADD R0,R0,#1<<(bits-9):MOV R0,R0,LSR #(bits-8):STRB R0,[R12],R1 22610LDR R2,[R7,R0,LSL #2] 22620] 22630IFdither% THEN 22640[OPT Z 22650SUB R4,R4,R2 22660MOVCS R4,#0 22670ADD R2,R4,R4,LSL #1 22680LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 22690STR R3,[R11,-R8] 22700ADD R2,R4,R4,LSL #2 22710LDR R3,[R11]:ADD R3,R3,R2,ASR #4 22720STR R3,[R11] 22730MOV R3,R4,ASR #4 22740STR R3,[R11,R8]! 22750RSB R2,R4,R4,LSL #3 22760LDR R4,[R10],R8 22770ADD R4,R4,R2,ASR #4 22780] 22790ELSE 22800[OPT Z 22810LDR R4,[R10],R8 22820] 22830ENDIF 22840[OPT Z 22850SUBS R9,R9,#1:BNE fsloop 22860LDMFD SP !,{PC}^ 22870] 22880WHEN 63,255 22890div15=P%:FORI%=0TO255*4STEP4 22900[OPT Z 22910EQUD (palette%!I%AND&FF)/255*F 22920EQUD (palette%!I%>>8AND&FF)/255*F 22930EQUD (palette%!I%>>16AND&FF)/255*F 22940] 22950NEXT 22960IFm$="R" THEN 22970[OPT Z 22980.ictloc EQUD ict% 22990] 23000ENDIF 23010[OPT Z 23020EQUD div15 23030.fs% 23040STMFD SP !,{R14} 23050LDR R1,[R9,#5*8]:LDR R1,[R1] 23060LDR R10,[R9,#4*8] 23070LDR R11,[R9,#3*8] 23080LDR R12,[R9,#2*8]:LDR R12,[R12] 23090LDR R8,[R9,#8]:LDR R8,[R8] 23100LDR R9,[R9]:LDR R9,[R9] 23110LDR R4,[R10] 23120LDR R5,[R10,#4] 23130LDR R6,[R10,#8] 23140LDR R7,fs%-4 23150.fsloop 23160ADD R10,R10,R8 23170] 23180CASE m$ OF 23190WHEN"T" 23200[OPT Z 23210CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 23220MOV R0,R4,LSR #(bits-4):CMP R0,#15:MOVCS R0,#15 23230CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 23240MOV R3,R5,LSR #(bits-4):CMP R3,#15:MOVCS R3,#15:ORR R0,R0,R3,LSL #4 23250CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 23260MOV R3,R6,LSR #(bits-4):CMP R3,#15:MOVCS R3,#15:ORR R0,R0,R3,LSL #8 23270LDR R3,colmatchloc 23280LDRB R0,[R3,R0] 23290ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2 23300LDR R2,[R3],#4:SUB R4,R4,R2 23310LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3 23320] 23330WHEN"R" 23340PROCsrchdevlist 23350OTHERWISE 23360[OPT Z 23370CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 23380CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 23390CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 23400STMFD SP !,{R7,R8,R9} 23410MVN R2,#0 23420MOV R3,#&30<<23 23430.srch RSB R7,R3,#&20<<23 23440MOV R8,R6,LSR #bits-8 23450SUB R8,R8,R8,LSR #4 23460ADDS R7,R7,R8,LSL #23 23470MOVVSS R7,#&7F000000 23480MOVMI R7,#0 23490AND R7,R7,#&60000000 23500ADD R7,R7,R3 23510ADD R14,R7,R7,LSR #4 23520ADD R7,R14,R14,LSR #8 23530ADD R7,R7,R7,LSR #16 23540SUBS R8,R6,R14,LSR #31-bits 23550RSBLT R8,R8,#0 23560MOV R8,R8,LSR #bits/2 23570MUL R9,R8,R8 23580RSB R7,R3,#&20<<23 23590MOV R8,R5,LSR #bits-8 23600SUB R8,R8,R8,LSR #4 23610ADDS R7,R7,R8,LSL #23 23620MOVVSS R7,#&7F000000 23630MOVMI R7,#0 23640AND R7,R7,#&60000000 23650ADD R7,R3,R7 23660ADD R7,R7,R7,LSR #4 23670ORR R14,R14,R7,LSR #8 23680ADD R7,R7,R7,LSR #8 23690ADD R7,R7,R7,LSR #16 23700SUBS R8,R5,R7,LSR #31-bits 23710RSBLT R8,R8,#0 23720MOV R8,R8,LSR #bits/2 23730MUL R7,R8,R8 23740ADD R7,R7,R7,LSL #2 23750ADD R9,R9,R7,LSL #1 23760RSB R7,R3,#&20<<23 23770MOV R8,R4,LSR #bits-8 23780SUB R8,R8,R8,LSR #4 23790ADDS R7,R7,R8,LSL #23 23800MOVVSS R7,#&7F000000 23810MOVMI R7,#0 23820AND R7,R7,#&60000000 23830ADD R7,R3,R7 23840ADD R7,R7,R7,LSR #4 23850ORR R14,R14,R7,LSR #16 23860ADD R7,R7,R7,LSR #8 23870ADD R7,R7,R7,LSR #16 23880SUBS R8,R4,R7,LSR #31-bits 23890RSBLT R8,R8,#0 23900MOV R8,R8,LSR #bits/2 23910MUL R7,R8,R8 23920ADD R7,R7,R7,LSL #1 23930ADD R9,R9,R7 23940CMP R9,R2 23950MOVLS R2,R9 23960MOVLS R0,R14 23970SUBS R3,R3,#&10<<23 23980BGE srch 23990AND R7,R0,#&40000000 24000MOV R8,R7,LSR #23 24010AND R7,R0,#&600000 24020ORR R8,R8,R7,LSR #16 24030AND R7,R0,#&4000 24040ORR R8,R8,R7,LSR #10 24050AND R7,R0,#&20000000 24060ORR R8,R8,R7,LSR #26 24070AND R7,R0,#&3800 24080ORR R0,R8,R7,LSR #11 24090LDMFD SP !,{R7,R8,R9} 24100ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2 24110LDR R2,[R3],#4:SUB R4,R4,R2 24120LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3 24130] 24140ENDCASE 24150[OPT Z 24160STRB R0,[R12],R1 24170] 24180IFdither% THEN 24190[OPT Z 24200ADD R0,R11,#4 24210ADD R2,R4,R4,LSL #1 24220LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 24230STR R3,[R11,-R8] 24240ADD R2,R4,R4,LSL #2 24250LDR R3,[R11]:ADD R3,R3,R2,ASR #4 24260STR R3,[R11] 24270MOV R3,R4,ASR #4 24280STR R3,[R11,R8]! 24290RSB R2,R4,R4,LSL #3 24300LDR R4,[R10] 24310ADD R4,R4,R2,ASR #4 24320ADD R2,R5,R5,LSL #1 24330LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 24340STR R3,[R0,-R8] 24350MOV R3,R5,ASR #4 24360STR R3,[R0,R8] 24370ADD R2,R5,R5,LSL #2 24380LDR R3,[R0]:ADD R3,R3,R2,ASR #4 24390STR R3,[R0],#4 24400RSB R2,R5,R5,LSL #3 24410LDR R5,[R10,#4] 24420ADD R5,R5,R2,ASR #4 24430ADD R2,R6,R6,LSL #1 24440LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 24450STR R3,[R0,-R8] 24460ADD R2,R6,R6,LSL #2 24470LDR R3,[R0]:ADD R3,R3,R2,ASR #4 24480STR R3,[R0] 24490MOV R3,R6,ASR #4 24500STR R3,[R0,R8] 24510RSB R2,R6,R6,LSL #3 24520LDR R6,[R10,#8] 24530ADD R6,R6,R2,ASR #4 24540] 24550ELSE 24560[OPT Z 24570LDMIA R10,{R4,R5,R6} 24580] 24590ENDIF 24600[OPT Z 24610SUBS R9,R9,#1:BNE fsloop 24620LDMFD SP !,{PC}^ 24630] 24640WHEN 15 24650divtable=P%:CASE m$ OF 24660WHEN "D" 24670WHEN "R" 24680FORI%=0TO15*4STEP4 24690[OPT Z 24700EQUD (palette%!I%>>4AND&F)/bright%*F 24710EQUD (palette%!I%>>12AND&F)/bright%*F 24720EQUD (palette%!I%>>20AND&F)/bright%*F 24730] 24740NEXT 24750[OPT Z 24760.ictloc EQUD ict% 24770] 24780WHEN "T" 24790FORI%=0TO15 24800[OPT Z 24810EQUD I%/bright%*F 24820] 24830NEXT 24840OTHERWISE 24850FORI%=0TO7 24860[OPT Z 24870EQUD I%/(bright%DIV2)*F 24880] 24890NEXT 24900ENDCASE 24910[OPT Z 24920.fs% 24930STMFD SP !,{R14} 24940LDR R1,[R9,#5*8]:LDR R1,[R1] 24950LDR R10,[R9,#4*8] 24960LDR R11,[R9,#3*8] 24970LDR R12,[R9,#2*8]:LDR R12,[R12] 24980LDR R8,[R9,#8]:LDR R8,[R8] 24990LDR R9,[R9]:LDR R9,[R9] 25000] 25010IFm$="D" ORm$="R" THEN 25020[OPT Z 25030LDR R4,[R10] 25040LDR R5,[R10,#4] 25050LDR R6,[R10,#8] 25060] 25070ELSE 25080[OPT Z 25090LDR R4,[R10],R8 25100] 25110ENDIF 25120IFm$<>"D" THEN 25130[OPT Z 25140ADR R7,divtable 25150] 25160ENDIF 25170[OPT Z 25180.fsloop 25190] 25200CASE m$ OF 25210WHEN"R" 25220[OPT Z 25230ADD R10,R10,R8 25240] 25250PROCsrchdevlist 25260[OPT Z 25270MOV r3,r0 25280] 25290WHEN "D" 25300[OPT Z 25310ADD R10,R10,R8 25320MOV R3,#0 25330CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 25340CMP R4,#F>>1 25350SUBCS R4,R4,#F:ORRCS R3,R3,#1 25360CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 25370CMP R5,#F>>1 25380SUBCS R5,R5,#F:ORRCS R3,R3,#2 25390CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 25400CMP R6,#F>>1 25410SUBCS R6,R6,#F:ORRCS R3,R3,#4 25420] 25430WHEN "T" 25440[OPT Z 25450CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 25460RSB R3,R4,R4,LSL #4:ADD R3,R3,#F>>1:MOV R3,R3,LSR #bits 25470LDR R2,[R7,R3,LSL #2] 25480SUB R4,R4,R2 25490] 25500OTHERWISE 25510[OPT Z 25520CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 25530RSB R3,R4,R4,LSL #3:ADD R3,R3,#F>>1:MOV R3,R3,LSR #bits 25540LDR R2,[R7,R3,LSL #2] 25550SUB R4,R4,R2 25560] 25570ENDCASE 25580[OPT Z 25590MOV R2,R12,LSR #1 25600TST R12,#1 25610LDRB R0,[R2] 25620ANDEQ R0,R0,#&F0:ORREQ R0,R0,R3 25630ANDNE R0,R0,#&0F:ORRNE R0,R0,R3,LSL #4 25640STRB R0,[R2] 25650ADD R12,R12,R1 25660] 25670IFm$="D" ORm$="R" THEN 25680IFdither% THEN 25690[OPT Z 25700ADD R0,R11,#4 25710ADD R2,R4,R4,LSL #1 25720LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 25730STR R3,[R11,-R8] 25740ADD R2,R4,R4,LSL #2 25750LDR R3,[R11]:ADD R3,R3,R2,ASR #4 25760STR R3,[R11] 25770MOV R3,R4,ASR #4 25780STR R3,[R11,R8]! 25790RSB R2,R4,R4,LSL #3 25800LDR R4,[R10] 25810ADD R4,R4,R2,ASR #4 25820ADD R2,R5,R5,LSL #1 25830LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 25840STR R3,[R0,-R8] 25850MOV R3,R5,ASR #4 25860STR R3,[R0,R8] 25870ADD R2,R5,R5,LSL #2 25880LDR R3,[R0]:ADD R3,R3,R2,ASR #4 25890STR R3,[R0],#4 25900RSB R2,R5,R5,LSL #3 25910LDR R5,[R10,#4] 25920ADD R5,R5,R2,ASR #4 25930ADD R2,R6,R6,LSL #1 25940LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 25950STR R3,[R0,-R8] 25960ADD R2,R6,R6,LSL #2 25970LDR R3,[R0]:ADD R3,R3,R2,ASR #4 25980STR R3,[R0] 25990MOV R3,R6,ASR #4 26000STR R3,[R0,R8] 26010RSB R2,R6,R6,LSL #3 26020LDR R6,[R10,#8] 26030ADD R6,R6,R2,ASR #4 26040] 26050ELSE 26060[OPT Z 26070LDMIA R10,{R4,R5,R6} 26080] 26090ENDIF 26100ELSE 26110IFdither% THEN 26120[OPT Z 26130ADD R2,R4,R4,LSL #1 26140LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 26150STR R3,[R11,-R8] 26160ADD R2,R4,R4,LSL #2 26170LDR R3,[R11]:ADD R3,R3,R2,ASR #4 26180STR R3,[R11] 26190MOV R3,R4,ASR #4 26200STR R3,[R11,R8]! 26210RSB R2,R4,R4,LSL #3 26220LDR R4,[R10],R8 26230ADD R4,R4,R2,ASR #4 26240] 26250ELSE 26260[OPT Z 26270LDR R4,[R10],R8 26280] 26290ENDIF 26300ENDIF 26310[OPT Z 26320SUBS R9,R9,#1:BNE fsloop 26330LDMFD SP !,{PC}^ 26340] 26350WHEN 3 26360divtable=P%:CASE m$ OF 26370WHEN "C" 26380WHEN "R" 26390FORI%=0TO3*4STEP4 26400[OPT Z 26410EQUD (palette%!I%>>4AND&F)/bright%*F 26420EQUD (palette%!I%>>12AND&F)/bright%*F 26430EQUD (palette%!I%>>20AND&F)/bright%*F 26440] 26450NEXT 26460OTHERWISE 26470[OPT Z 26480EQUD 0 26490EQUD 1/(bright%DIV4)*F 26500EQUD 2/(bright%DIV4)*F 26510EQUD F 26520] 26530ENDCASE 26540[OPT Z 26550.fs% 26560STMFD SP !,{R14} 26570LDR R1,[R9,#5*8]:LDR R1,[R1] 26580LDR R10,[R9,#4*8] 26590LDR R11,[R9,#3*8] 26600LDR R12,[R9,#2*8] 26610LDR R12,[R12] 26620LDR R8,[R9,#8] 26630LDR R8,[R8] 26640LDR R9,[R9] 26650LDR R9,[R9] 26660] 26670IFm$="C" ORm$="R" THEN 26680[OPT Z 26690LDR R4,[R10] 26700LDR R5,[R10,#4] 26710LDR R6,[R10,#8] 26720] 26730ELSE 26740[OPT Z 26750LDR R4,[R10],R8 26760] 26770ENDIF 26780[OPT Z 26790.fsloop 26800] 26810IFm$<>"C"THEN 26820[OPT Z 26830ADR R7,divtable 26840] 26850ENDIF 26860CASE m$ OF 26870WHEN"C" 26880[OPT Z 26890ADD R10,R10,R8 26900CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 26910CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 26920CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 26930MOV R3,#0 26940CMP R4,#F>>1:ORRCS R3,R3,#1 26950CMP R5,#F>>1:ORRCS R3,R3,#2 26960CMP R6,#F>>1:ORRCS R3,R3,#4 26970CMP R3,#6:MOVEQ R3,#1:BEQ octcyan 26980BCS octwhite 26990CMP R3,#4:BEQ octblue 27000MOVCS R3,#2:BCS octmagenta 27010CMP R3,#2:BEQ octgreen 27020BCS octyellow 27030CMP R3,#0:BEQ octblack 27040.octred 27050RSB R0,R4,#F 27060CMP R5,R0 27070BLT octred1 27080CMP R5,R6 27090MOVGE R3,#3 27100MOVLT R3,#2 27110B octconvert 27120.octred1 27130CMP R0,R6 27140MOVGE R3,#0 27150MOVLT R3,#2 27160B octconvert 27170.octgreen 27180RSB R0,R5,#F 27190CMP R0,R4 27200BLT octgreen1 27210CMP R0,R6 27220MOVGE R3,#0 27230MOVLT R3,#1 27240B octconvert 27250.octgreen1 27260CMP R4,R6 27270MOVGE R3,#3 27280MOVLT R3,#1 27290B octconvert 27300.octblue 27310RSB R0,R6,#F 27320CMP R0,R4 27330BLT octblue1 27340CMP R0,R5 27350MOVGE R3,#0 27360MOVLT R3,#1 27370B octconvert 27380.octblue1 27390CMP R4,R5 27400MOVGE R3,#2 27410MOVLT R3,#1 27420B octconvert 27430.octwhite 27440CMP R4,R5 27450BLT octwhite1 27460CMP R5,R6 27470MOVGE R3,#3 27480MOVLT R3,#2 27490B octconvert 27500.octwhite1 27510CMP R4,R6 27520MOVGE R3,#3 27530MOVLT R3,#1 27540.octconvert 27550CMP R3,#1 27560.octcyan 27570SUBEQ R5,R5,#F 27580SUBEQ R6,R6,#F 27590.octmagenta 27600CMP R3,#2 27610SUBEQ R4,R4,#F 27620SUBEQ R6,R6,#F 27630.octyellow 27640CMP R3,#3 27650SUBEQ R4,R4,#F 27660SUBEQ R5,R5,#F 27670.octblack 27680MOV R2,R12,LSR #2 27690AND R7,R12,#3:MOV R7,R7,LSL #1 27700MOV R14,#3 27710LDRB R0,[R2]:BIC R0,R0,R14,LSL R7:ORR R0,R0,R3,LSL R7:STRB R0,[R2] 27720ADD R12,R12,R1 27730] 27740WHEN"R" 27750[OPT Z 27760ADD R10,R10,R8 27770CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 27780CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 27790CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 27800STMFD SP !,{R8,R9,R10} 27810MVN R2,#0 27820MOV R3,#3 27830.srch ADD R14,R3,R3,LSL #1 27840ADD R14,R7,R14,LSL #2 27850LDMIA R14,{R8,R9,R10} 27860SUBS R8,R4,R8 27870RSBMI R8,R8,#0 27880SUBS R9,R5,R9 27890RSBMI R9,R9,#0 27900SUBS R10,R6,R10 27910RSBMI R10,R10,#0 27920MOV R14,R8,LSR #bits/2 27930MUL R8,R14,R14 27940MOV R14,R9,LSR #bits/2 27950MUL R9,R14,R14 27960MOV R14,R10,LSR #bits/2 27970MUL R10,R14,R14 27980ADD R9,R9,R9,LSL #2 27990ADD R8,R8,R8,LSL #1 28000ADD R14,R8,R9,LSL #1 28010ADD R14,R14,R10 28020CMP R14,R2 28030MOVCC R2,R14 28040MOVCC R0,R3 28050SUBS R3,R3,#1 28060BPL srch 28070LDMFD SP !,{R8,R9,R10} 28080ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2 28090LDR R2,[R3],#4:SUB R4,R4,R2 28100LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3 28110MOV R3,R0 28120MOV R2,R12,LSR #2 28130AND R7,R12,#3:MOV R7,R7,LSL #1 28140MOV R14,#3 28150LDRB R0,[R2]:BIC R0,R0,R14,LSL R7:ORR R0,R0,R3,LSL R7:STRB R0,[R2] 28160ADD R12,R12,R1 28170] 28180OTHERWISE 28190[OPT Z 28200CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 28210RSB R3,R4,R4,LSL #2:ADD R3,R3,#F>>1:MOV R3,R3,LSR#bits 28220LDR R2,[R7,R3,LSL #2] 28230SUB R4,R4,R2 28240MOV R2,R12,LSR #2 28250AND R5,R12,#3:MOV R5,R5,LSL #1 28260MOV R6,#3 28270LDRB R0,[R2]:BIC R0,R0,R6,LSL R5:ORR R0,R0,R3,LSL R5:STRB R0,[R2] 28280ADD R12,R12,R1 28290] 28300ENDCASE 28310IFm$="C" ORm$="R" THEN 28320IFdither% THEN 28330[OPT Z 28340ADD R0,R11,#4 28350ADD R2,R4,R4,LSL #1 28360LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 28370STR R3,[R11,-R8] 28380ADD R2,R4,R4,LSL #2 28390LDR R3,[R11]:ADD R3,R3,R2,ASR #4 28400STR R3,[R11] 28410MOV R3,R4,ASR #4 28420STR R3,[R11,R8]! 28430RSB R2,R4,R4,LSL #3 28440LDR R4,[R10] 28450ADD R4,R4,R2,ASR #4 28460ADD R2,R5,R5,LSL #1 28470LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 28480STR R3,[R0,-R8] 28490MOV R3,R5,ASR #4 28500STR R3,[R0,R8] 28510ADD R2,R5,R5,LSL #2 28520LDR R3,[R0]:ADD R3,R3,R2,ASR #4 28530STR R3,[R0],#4 28540RSB R2,R5,R5,LSL #3 28550LDR R5,[R10,#4] 28560ADD R5,R5,R2,ASR #4 28570ADD R2,R6,R6,LSL #1 28580LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 28590STR R3,[R0,-R8] 28600ADD R2,R6,R6,LSL #2 28610LDR R3,[R0]:ADD R3,R3,R2,ASR #4 28620STR R3,[R0] 28630MOV R3,R6,ASR #4 28640STR R3,[R0,R8] 28650RSB R2,R6,R6,LSL #3 28660LDR R6,[R10,#8] 28670ADD R6,R6,R2,ASR #4 28680] 28690ELSE 28700[OPT Z 28710LDMIA R10,{R4,R5,R6} 28720] 28730ENDIF 28740ELSE 28750IFdither% THEN 28760[OPT Z 28770ADD R2,R4,R4,LSL #1 28780LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 28790STR R3,[R11,-R8] 28800ADD R2,R4,R4,LSL #2 28810LDR R3,[R11]:ADD R3,R3,R2,ASR #4 28820STR R3,[R11] 28830MOV R3,R4,ASR #4 28840STR R3,[R11,R8]! 28850RSB R2,R4,R4,LSL #3 28860LDR R4,[R10],R8 28870ADD R4,R4,R2,ASR #4 28880] 28890ELSE 28900[OPT Z 28910LDR R4,[R10],R8 28920] 28930ENDIF 28940ENDIF 28950[OPT Z 28960SUBS R9,R9,#1:BNE fsloop 28970LDMFD SP !,{PC}^ 28980] 28990WHEN 1 29000CASE m$ OF 29010WHEN"C" 29020[OPT Z 29030.divtable EQUD 0 29040EQUD (1-black%/256*2)/16*F 29050EQUD (2-black%/256*4)/16*F 29060EQUD (3-black%/256*5)/16*F 29070EQUD (4-black%/256*6)/16*F 29080EQUD (5-black%/256*7)/16*F 29090EQUD (6-black%/256*8)/16*F 29100EQUD (7-black%/256*8)/16*F 29110EQUD (8-black%/256*8)/16*F 29120EQUD (9-black%/256*8)/16*F 29130EQUD (10-black%/256*8)/16*F 29140EQUD (11-black%/256*7)/16*F 29150EQUD (12-black%/256*6)/16*F 29160EQUD (13-black%/256*5)/16*F 29170EQUD (14-black%/256*4)/16*F 29180EQUD (15-black%/256*2)/16*F 29190EQUD F 29200.evenrow_gard DCD even_gard 29210.oddrow_gard DCD odd_gard 29220.rowinc DCD 0 29230.fs% 29240STMFD SP !,{R14} 29250LDR R1,[R9,#5*8]:LDR R1,[R1] 29260LDR R10,[R9,#4*8] 29270LDR R11,[R9,#3*8] 29280LDR R12,[R9,#2*8] 29290LDR R12,[R12] 29300LDR R8,[R9,#8] 29310LDR R8,[R8] 29320LDR R9,[R9] 29330LDR R9,[R9] 29340LDR R4,[R10],R8 29350TEQ R8,#0 29360LDRPL R6,evenrow_gard 29370LDRMI R6,oddrow_gard 29380MOV R1,R1,LSL #1 29390LDR R7,rowinc 29400ADR R14,divtable 29410.fsloop 29420CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 29430ADD R5,R4,#F>>5 29440MOVS R5,R5,LSR #bits-4 29450LDRNE R0,[R14,R5,LSL #2] 29460SUBNE R4,R4,R0 29470] 29480IFdither% THEN 29490[OPT Z 29500ADD R2,R4,R4,LSL #1 29510LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 29520STR R3,[R11,-R8] 29530ADD R2,R4,R4,LSL #2 29540LDR R3,[R11]:ADD R3,R3,R2,ASR #4 29550STR R3,[R11] 29560MOV R3,R4,ASR #4 29570STR R3,[R11,R8]! 29580RSB R2,R4,R4,LSL #3 29590LDR R4,[R10],R8 29600ADDS R4,R4,R2,ASR #4 29610] 29620ELSE 29630[OPT Z 29640LDR R4,[R10],R8 29650] 29660ENDIF 29670[OPT Z 29680CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 29690ADD R3,R4,#F>>5 29700MOVS R3,R3,LSR #bits-4 29710LDRNE R0,[R14,R3,LSL #2] 29720SUBNE R4,R4,R0 29730ORR R5,R5,R3,LSL #5:LDR R3,[R6,R5,LSL #2] 29740MOV R2,R12,LSR #1:STRB R3,[R2],R7:MOV R3,R3,LSR #8:STRB R3,[R2],R7 29750MOV R3,R3,LSR #8:STRB R3,[R2],R7:MOV R3,R3,LSR #8:STRB R3,[R2] 29760ADD R12,R12,R1 29770] 29780IFdither% THEN 29790[OPT Z 29800ADD R2,R4,R4,LSL #1 29810LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 29820STR R3,[R11,-R8] 29830ADD R2,R4,R4,LSL #2 29840LDR R3,[R11]:ADD R3,R3,R2,ASR #4 29850STR R3,[R11] 29860MOV R3,R4,ASR #4 29870STR R3,[R11,R8]! 29880RSB R2,R4,R4,LSL #3 29890LDR R4,[R10],R8 29900ADD R4,R4,R2,ASR #4 29910] 29920ELSE 29930[OPT Z 29940LDR R4,[R10],R8 29950] 29960ENDIF 29970[OPT Z 29980SUBS R9,R9,#2:BNE fsloop 29990LDMFD SP !,{PC}^ 30000] 30010WHEN"T" 30020[OPT Z 30030.divtable EQUD 0 30040EQUD (1-black%/256*2)/9*F 30050EQUD (2-black%/256*4)/9*F 30060EQUD (3-black%/256*5)/9*F 30070EQUD (4-black%/256*6)/9*F 30080EQUD (5-black%/256*6)/9*F 30090EQUD (6-black%/256*5)/9*F 30100EQUD (7-black%/256*4)/9*F 30110EQUD (8-black%/256*2)/9*F 30120EQUD F 30130.evenrow_gard DCD even_gard 30140.oddrow_gard DCD odd_gard 30150.rowinc DCD 0 30160.fs% 30170STMFD SP !,{R14} 30180LDR R1,[R9,#5*8]:LDR R1,[R1] 30190LDR R10,[R9,#4*8] 30200LDR R11,[R9,#3*8] 30210LDR R12,[R9,#2*8] 30220LDR R12,[R12] 30230LDR R8,[R9,#8] 30240LDR R8,[R8] 30250LDR R9,[R9] 30260LDR R9,[R9] 30270LDR R4,[R10],R8 30280TEQ R8,#0 30290LDRPL R6,evenrow_gard 30300LDRMI R6,oddrow_gard 30310MOV R1,R1,LSL #1 30320LDR R7,rowinc 30330ADR R14,divtable 30340.fsloop 30350CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 30360ADD R5,R4,#F>>4 30370ADD R5,R5,R5,LSL #3 30380MOVS R5,R5,LSR #bits 30390LDRNE R0,[R14,R5,LSL #2] 30400SUBNE R4,R4,R0 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 30540ADDS R4,R4,R2,ASR #4 30550] 30560ELSE 30570[OPT Z 30580LDR R4,[R10],R8 30590] 30600ENDIF 30610[OPT Z 30620CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 30630ADD R3,R4,#F>>4 30640ADD R3,R3,R3,LSL #3 30650MOVS R3,R3,LSR #bits 30660LDRNE R0,[R14,R3,LSL #2] 30670SUBNE R4,R4,R0 30680ORR R5,R5,R3,LSL #4:LDR R5,[R6,R5,LSL #2] 30690MOV R2,R12,LSR #1 30700AND R3,R5,#&3F 30710STRB R3,[R2],R7 30720MOV R3,R5,LSR #6:AND R3,R3,#&3F 30730STRB R3,[R2],R7 30740MOV R3,R5,LSR #12:STRB R3,[R2] 30750ADD R12,R12,R1 30760] 30770IFdither% THEN 30780[OPT Z 30790ADD R2,R4,R4,LSL #1 30800LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 30810STR R3,[R11,-R8] 30820ADD R2,R4,R4,LSL #2 30830LDR R3,[R11]:ADD R3,R3,R2,ASR #4 30840STR R3,[R11] 30850MOV R3,R4,ASR #4 30860STR R3,[R11,R8]! 30870RSB R2,R4,R4,LSL #3 30880LDR R4,[R10],R8 30890ADD R4,R4,R2,ASR #4 30900] 30910ELSE 30920[OPT Z 30930LDR R4,[R10],R8 30940] 30950ENDIF 30960[OPT Z 30970SUBS R9,R9,#2:BNE fsloop 30980LDMFD SP !,{PC}^ 30990] 31000WHEN"D" 31010[OPT Z 31020.divtable EQUD 0 31030EQUD (1-black%/256*2)/4*F 31040EQUD (2-black%/256*4)/4*F 31050EQUD (3-black%/256*2)/4*F 31060EQUD F 31070.evenrow_gard DCD even_gard 31080.oddrow_gard DCD odd_gard 31090.rowinc DCD 0 31100.fs% 31110STMFD SP !,{R14} 31120LDR R1,[R9,#5*8]:LDR R1,[R1] 31130LDR R10,[R9,#4*8] 31140LDR R11,[R9,#3*8] 31150LDR R12,[R9,#2*8] 31160LDR R12,[R12] 31170LDR R8,[R9,#8] 31180LDR R8,[R8] 31190LDR R9,[R9] 31200LDR R9,[R9] 31210LDR R4,[R10],R8 31220TEQ R8,#0 31230LDRPL R6,evenrow_gard 31240LDRMI R6,oddrow_gard 31250MOV R1,R1,LSL #1 31260LDR R7,rowinc 31270ADR R14,divtable 31280.fsloop 31290CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 31300ADD R5,R4,#F>>3 31310MOVS R5,R5,LSR #bits-2 31320LDRNE R0,[R14,R5,LSL #2] 31330SUBNE R4,R4,R0 31340] 31350IFdither% THEN 31360[OPT Z 31370ADD R2,R4,R4,LSL #1 31380LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 31390STR R3,[R11,-R8] 31400ADD R2,R4,R4,LSL #2 31410LDR R3,[R11]:ADD R3,R3,R2,ASR #4 31420STR R3,[R11] 31430MOV R3,R4,ASR #4 31440STR R3,[R11,R8]! 31450RSB R2,R4,R4,LSL #3 31460LDR R4,[R10],R8 31470ADDS R4,R4,R2,ASR #4 31480] 31490ELSE 31500[OPT Z 31510LDR R4,[R10],R8 31520] 31530ENDIF 31540[OPT Z 31550CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 31560ADD R3,R4,#F>>3 31570MOVS R3,R3,LSR #bits-2 31580LDRNE R0,[R14,R3,LSL #2] 31590SUBNE R4,R4,R0 31600ORR R5,R5,R3,LSL #3:LDRB R5,[R6,R5] 31610MOV R2,R12,LSR #2 31620TST R12,#2 31630AND R3,R5,#&F:LDRB R0,[R2] 31640ANDEQ R0,R0,#&F0:ORREQ R0,R0,R3 31650ANDNE R0,R0,#&0F:ORRNE R0,R0,R3,LSL #4 31660STRB R0,[R2],R7 31670MOV R3,R5,LSR #4:LDRB R0,[R2] 31680ANDEQ R0,R0,#&F0:ORREQ R0,R0,R3 31690ANDNE R0,R0,#&0F:ORRNE R0,R0,R3,LSL #4 31700STRB R0,[R2] 31710ADD R12,R12,R1 31720] 31730IFdither% THEN 31740[OPT Z 31750ADD R2,R4,R4,LSL #1 31760LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 31770STR R3,[R11,-R8] 31780ADD R2,R4,R4,LSL #2 31790LDR R3,[R11]:ADD R3,R3,R2,ASR #4 31800STR R3,[R11] 31810MOV R3,R4,ASR #4 31820STR R3,[R11,R8]! 31830RSB R2,R4,R4,LSL #3 31840LDR R4,[R10],R8 31850ADD R4,R4,R2,ASR #4 31860] 31870ELSE 31880[OPT Z 31890LDR R4,[R10],R8 31900] 31910ENDIF 31920[OPT Z 31930SUBS R9,R9,#2:BNE fsloop 31940LDMFD SP !,{PC}^ 31950] 31960OTHERWISE 31970[OPT Z 31980.fs% 31990STMFD SP !,{R14} 32000LDR R1,[R9,#5*8]:LDR R1,[R1] 32010LDR R10,[R9,#4*8] 32020LDR R11,[R9,#3*8] 32030LDR R12,[R9,#2*8] 32040LDR R12,[R12] 32050LDR R8,[R9,#8] 32060LDR R8,[R8] 32070LDR R9,[R9] 32080LDR R9,[R9] 32090LDR R4,[R10],R8 32100MOV R7,#1 32110.fsloop 32120CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 32130] 32140IFblack% THEN 32150[OPT Z 32160MOV R2,R12,LSR #3 32170AND R5,R12,#7:MOV R6,#1 32180LDRB R0,[R2,#-(x%+7>>3)] 32190SUB R3,R4,#F 32200CMP R7,#0 32210ADDNE R4,R4,#black%<<(bits-8) 32220ADDEQ R3,R3,#black%<<(bits-8) 32230TST R0,R6,LSL R5 32240ADDNE R4,R4,#black%<<(bits-8) 32250ADDEQ R3,R3,#black%<<(bits-8) 32260MOVS R0,R3:RSBMI R0,R3,#0 32270CMP R4,R0 32280MOVCC R3,#0 32290MOVCS R4,R3:MOVCS R3,#1 32300MOV R7,R3 32310] 32320ELSE 32330[OPT Z 32340ADD R3,R4,#F>>1:MOV R3,R3,LSR #bits 32350SUB R4,R4,R3,LSL #bits 32360MOV R2,R12,LSR #3 32370AND R5,R12,#7:MOV R6,#1 32380] 32390ENDIF 32400[OPT Z 32410LDRB R0,[R2]:BIC R0,R0,R6,LSL R5:ORR R0,R0,R3,LSL R5 32420STRB R0,[R2] 32430ADD R12,R12,R1 32440] 32450IFdither% THEN 32460[OPT Z 32470ADD R2,R4,R4,LSL #1 32480LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 32490STR R3,[R11,-R8] 32500ADD R2,R4,R4,LSL #2 32510LDR R3,[R11]:ADD R3,R3,R2,ASR #4 32520STR R3,[R11] 32530MOV R3,R4,ASR #4 32540STR R3,[R11,R8]! 32550RSB R2,R4,R4,LSL #3 32560LDR R4,[R10],R8 32570ADD R4,R4,R2,ASR #4 32580] 32590ELSE 32600[OPT Z 32610LDR R4,[R10],R8 32620] 32630ENDIF 32640[OPT Z 32650SUBS R9,R9,#1:BNE fsloop 32660LDMFD SP !,{PC}^ 32670] 32680ENDCASE 32690ENDCASE 32700[OPT Z 32710.sxloc DCD sx% 32720] 32730CASE col OF 32740WHEN 0 32750IFinput<=8 THEN 32760[OPT Z 32770.mappix% 32780LDR R0,sxloc 32790LDR R1,[R9]:LDR R1,[R1] 32800LDR R2,[R9,#3*8] 32810LDR R5,[R9,#4*8] 32820MOV R8,#0 32830.mappixlp 32840LDRB R6,[R1],#step24 32850] 32860ENDIF 32870CASE input OF 32880WHEN 8 32890IFham THEN 32900[OPT Z 32910ADR R9,ltable 32920MOVS R7,R6,LSR #4:AND R6,R6,#15 32930LDREQ R10,[R2,R6,LSL #2]:MOVEQ R11,R10:MOVEQ R12,R10 32940CMP R7,#1:LDREQ R12,[R9,R6,LSL #2] 32950CMP R7,#2:LDREQ R10,[R9,R6,LSL #2] 32960CMP R7,#3:LDREQ R11,[R9,R6,LSL #2] 32970ADD R3,R10,R11 32980ADD R3,R3,R12 32990MOV R3,R3,LSR #2 33000STMIA R5!,{R3} 33010SUBS R0,R0,#1:BNE mappixlp 33020MOVS PC,R14 33030.ltable 33040] 33050FORI%=0TO15 33060[OPT Z 33070EQUD I%/15*F 33080] 33090NEXT 33100ELSE 33110IFhpredict%=2 THEN 33120[OPT Z 33130ADD R6,R6,R8 33140AND R6,R6,#255 33150MOV R8,R6 33160] 33170ENDIF 33180[OPT Z 33190LDR R7,[R2,R6,LSL #2]:STR R7,[R5],#4 33200SUBS R0,R0,#1:BNE mappixlp 33210MOVS PC,R14 33220] 33230ENDIF 33240WHEN 4 33250IFbigendianbits THEN 33260[OPT Z 33270MOV R10,R6,LSR #4 33280LDR R7,[R2,R10,LSL #2] 33290AND R10,R6,#&F 33300] 33310ELSE 33320[OPT Z 33330AND R10,R6,#&F 33340LDR R7,[R2,R10,LSL #2] 33350MOV R10,R6,LSR #4 33360] 33370ENDIF 33380[OPT Z 33390LDR R8,[R2,R10,LSL #2]:STMIA R5!,{R7,R8} 33400SUBS R0,R0,#2:BHI mappixlp 33410MOVS PC,R14 33420] 33430WHEN 2 33440IFbigendianbits THEN 33450[OPT Z 33460MOV R10,R6,LSR #6 33470LDR R7,[R2,R10,LSL #2] 33480AND R10,R6,#&30 33490LDR R8,[R2,R10,LSR #2] 33500AND R10,R6,#&C 33510LDR R9,[R2,R10] 33520AND R10,R6,#&3 33530] 33540ELSE 33550[OPT Z 33560AND R10,R6,#&3 33570LDR R7,[R2,R10,LSL #2] 33580AND R10,R6,#&C 33590LDR R8,[R2,R10] 33600AND R10,R6,#&30 33610LDR R9,[R2,R10,LSR #2] 33620MOV R10,R6,LSR #6 33630] 33640ENDIF 33650[OPT Z 33660LDR R10,[R2,R10,LSL #2]:STMIA R5!,{R7,R8,R9,R10} 33670SUBS R0,R0,#4:BHI mappixlp 33680MOVS PC,R14 33690] 33700WHEN 1 33710IFbigendianbits THEN 33720[OPT Z 33730AND R10,R6,#&80 33740LDR R7,[R2,R10,LSR #5] 33750AND R10,R6,#&40 33760LDR R8,[R2,R10,LSR #4] 33770AND R10,R6,#&20 33780LDR R9,[R2,R10,LSR #3] 33790AND R10,R6,#&10 33800LDR R10,[R2,R10,LSR #2]:STMIA R5!,{R7,R8,R9,R10} 33810AND R10,R6,#&8 33820LDR R7,[R2,R10,LSR #1] 33830AND R10,R6,#&4 33840LDR R8,[R2,R10] 33850AND R10,R6,#&2 33860LDR R9,[R2,R10,LSL #1] 33870AND R10,R6,#&1 33880] 33890ELSE 33900[OPT Z 33910AND R10,R6,#&1 33920LDR R7,[R2,R10,LSL #2] 33930AND R10,R6,#&2 33940LDR R8,[R2,R10,LSL #1] 33950AND R10,R6,#&4 33960LDR R9,[R2,R10] 33970AND R10,R6,#&8 33980LDR R10,[R2,R10,LSR #1]:STMIA R5!,{R7,R8,R9,R10} 33990AND R10,R6,#&10 34000LDR R7,[R2,R10,LSR #2] 34010AND R10,R6,#&20 34020LDR R8,[R2,R10,LSR #3] 34030AND R10,R6,#&40 34040LDR R9,[R2,R10,LSR #4] 34050MOV R10,R6,LSR #7 34060] 34070ENDIF 34080[OPT Z 34090LDR R10,[R2,R10,LSL #2]:STMIA R5!,{R7,R8,R9,R10} 34100SUBS R0,R0,#8:BHI mappixlp 34110MOVS PC,R14 34120] 34130WHEN 16 34140[OPT Z 34150.mappix% 34160LDR R0,sxloc 34170LDR R1,[R9]:LDR R1,[R1] 34180LDR R2,[R9,#8]:LDR R2,[R2] 34190LDR R3,[R9,#4*8] 34200LDR R4,[R9,#3*8] 34210LDR R5,[R9,#2*8] 34220LDR R6,[R9,#5*8] 34230LDR R7,[R9,#6*8] 34240LDR R8,[R9,#7*8] 34250CMP R1,R2 34260ADDEQ R2,R2,#1 34270.mappixlp 34280LDRB R9,[R1],#step24:LDRB R10,[R2],#step24 34290LDR R9,[R6,R9,LSL #2]:LDR R10,[R7,R10,LSL #2]:ORR R9,R9,R10 34300AND R10,R9,#255:LDR R10,[R3,R10,LSL #2] 34310MOV R11,R9,LSR #8:AND R11,R11,#255:LDR R11,[R4,R11,LSL #2] 34320MOV R12,R9,LSR #16:LDR R12,[R5,R12,LSL #2] 34330ADD R10,R10,R11:ADD R10,R10,R12:STMIA R8!,{R10} 34340SUBS R0,R0,#1:BNE mappixlp 34350MOVS PC,R14 34360] 34370WHEN 24 34380[OPT Z 34390.mappix% 34400LDR R0,sxloc 34410LDR R1,[R9,#2*8]:LDR R1,[R1] 34420LDR R2,[R9,#8]:LDR R2,[R2] 34430LDR R3,[R9]:LDR R3,[R3] 34440LDR R4,[R9,#5*8] 34450LDR R5,[R9,#4*8] 34460LDR R6,[R9,#3*8] 34470LDR R7,[R9,#6*8] 34480.mappixlp 34490LDRB R8,[R1],#step24:LDR R8,[R4,R8,LSL #2] 34500LDRB R9,[R2],#step24:LDR R9,[R5,R9,LSL #2]:ADD R8,R8,R9 34510LDRB R9,[R3],#step24:LDR R9,[R6,R9,LSL #2]:ADD R8,R8,R9:STR R8,[R7],#4 34520SUBS R0,R0,#1:BNE mappixlp 34530MOVS PC,R14 34540] 34550WHEN 411 34560[OPT Z 34570.mappix% 34580LDR R0,sxloc 34590LDR R1,[R9]:LDR R1,[R1] 34600LDR R4,[R9,#1*8] 34610LDR R7,[R9,#8*8] 34620.mappixlp 34630LDRB R8,[R1],#2 34640LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4 34650SUBS R0,R0,#1:BNE mappixlp 34660MOVS PC,R14 34670] 34680WHEN 422 34690[OPT Z 34700.mappix% 34710LDR R0,sxloc 34720LDR R1,[R9]:LDR R1,[R1] 34730ADD R1,R1,#1 34740LDR R4,[R9,#1*8] 34750LDR R7,[R9,#8*8] 34760.mappixlp 34770LDRB R8,[R1],#2 34780LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4 34790SUBS R0,R0,#1:BNE mappixlp 34800MOVS PC,R14 34810] 34820WHEN 555 34830[OPT Z 34840.mappix% 34850LDR R0,sxloc 34860LDR R1,[R9]:LDR R1,[R1] 34870ADD R1,R1,#1 34880LDR R4,[R9,#1*8] 34890LDR R7,[R9,#8*8] 34900.mappixlp 34910LDRB R8,[R1],#2 34920AND R8,R8,#ymax% 34930LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4 34940SUBS R0,R0,#1:BNE mappixlp 34950MOVS PC,R14 34960] 34970ENDCASE 34980IFxmul%=2 AND xdiv%=1 THEN 34990[OPT Z 35010.xsample% 35020LDR R0,[R9]:LDR R0,[R0] 35030LDR R1,[R9,#8] 35040LDR R2,[R9,#2*8] 35050.xsamplelp 35060LDMIA R1,{R5,R6} 35070ADD R6,R6,R5 35080MOV R6,R6,LSR #1 35090STMIA R2!,{R5,R6} 35100ADD R1,R1,#4 35110SUBS R0,R0,#2:BPL xsamplelp 35120MOVS PC,R14 35130] 35140ELSE 35150[OPT Z 35170.xsample% 35180LDR R0,[R9]:LDR R0,[R0] 35190LDR R1,[R9,#8] 35200LDR R2,[R9,#2*8] 35210LDR R3,[R9,#3*8]:LDR R3,[R3] 35220LDR R4,[R9,#4*8]:LDR R4,[R4] 35230MOV R11,R4 35240.xsamplelp 35250LDMIA R1,{R5} 35260SUBS R11,R11,#1:MOVEQ R11,R4:ADDEQ R1,R1,#4 35270SUBS R12,R3,#1 35280BEQ xdonediv 35290.xdivlp 35300CMP R12,R11 35310BCC xdivlp2 35320LDMIA R1!,{R8}:MLA R5,R8,R11,R5 35330SUBS R12,R12,R11:MOV R11,R4 35340BNE xdivlp 35350B xdonediv 35360.xdivlp2 35370LDMIA R1,{R8} 35380SUBS R11,R11,#1:MOVEQ R11,R4:ADDEQ R1,R1,#4 35390ADD R5,R5,R8 35400SUBS R12,R12,#1:BNE xdivlp 35410.xdonediv 35420STMIA R2!,{R5} 35430SUBS R0,R0,#1:BPL xsamplelp 35440MOVS PC,R14 35450] 35460ENDIF 35470WHEN 2 35480IFinput<=8 THEN 35490[OPT Z 35500.mappix% 35510LDR R0,sxloc 35520LDR R1,[R9]:LDR R1,[R1] 35530LDR R2,[R9,#3*8] 35540LDR R3,[R9,#2*8] 35550LDR R4,[R9,#8] 35560LDR R5,[R9,#4*8] 35570MOV R10,#0 35580.mappixlp 35590LDRB R6,[R1],#step24 35600] 35610ENDIF 35620CASE input OF 35630WHEN 8 35640IFham THEN 35650[OPT Z 35660ADR R9,ltable 35670MOVS R7,R6,LSR #4:AND R6,R6,#15 35680LDREQ R10,[R2,R6,LSL #2]:LDREQ R11,[R3,R6,LSL #2]:LDREQ R12,[R4,R6,LSL #2] 35690CMP R7,#1:LDREQ R12,[R9,R6,LSL #2] 35700CMP R7,#2:LDREQ R10,[R9,R6,LSL #2] 35710CMP R7,#3:LDREQ R11,[R9,R6,LSL #2] 35720STMIA R5!,{R10,R11,R12} 35730SUBS R0,R0,#1:BNE mappixlp 35740MOVS PC,R14 35750.ltable 35760] 35770FORI%=0TO15 35780[OPT Z 35790EQUD I%/15*F 35800] 35810NEXT 35820ELSE 35830IFhpredict%=2 THEN 35840[OPT Z 35850ADD R6,R6,R10 35860AND R6,R6,#255 35870MOV R10,R6 35880] 35890ENDIF 35900[OPT Z 35910LDR R7,[R2,R6,LSL #2]:LDR R8,[R3,R6,LSL #2]:LDR R9,[R4,R6,LSL #2] 35920STMIA R5!,{R7,R8,R9} 35930SUBS R0,R0,#1:BNE mappixlp 35940MOVS PC,R14 35950] 35960ENDIF 35970WHEN 4 35980IFbigendianbits THEN 35990[OPT Z 36000MOV R10,R6,LSR #4 36010LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 36020STMIA R5!,{R7,R8,R9} 36030AND R10,R6,#&F 36040] 36050ELSE 36060[OPT Z 36070AND R10,R6,#&F 36080LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 36090STMIA R5!,{R7,R8,R9} 36100MOV R10,R6,LSR #4 36110] 36120ENDIF 36130[OPT Z 36140LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 36150STMIA R5!,{R7,R8,R9} 36160SUBS R0,R0,#2:BHI mappixlp 36170MOVS PC,R14 36180] 36190WHEN 2 36200IFbigendianbits THEN 36210[OPT Z 36220MOV R10,R6,LSR #6 36230LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 36240STMIA R5!,{R7,R8,R9} 36250AND R10,R6,#&30 36260LDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2] 36270STMIA R5!,{R7,R8,R9} 36280AND R10,R6,#&C 36290LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10] 36300STMIA R5!,{R7,R8,R9} 36310AND R10,R6,#&3 36320] 36330ELSE 36340[OPT Z 36350AND R10,R6,#&3 36360LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 36370STMIA R5!,{R7,R8,R9} 36380AND R10,R6,#&C 36390LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10] 36400STMIA R5!,{R7,R8,R9} 36410AND R10,R6,#&30 36420LDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2] 36430STMIA R5!,{R7,R8,R9} 36440MOV R10,R6,LSR #6 36450] 36460ENDIF 36470[OPT Z 36480LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 36490STMIA R5!,{R7,R8,R9} 36500SUBS R0,R0,#4:BHI mappixlp 36510MOVS PC,R14 36520] 36530WHEN 1 36540IFbigendianbits THEN 36550[OPT Z 36560AND R10,R6,#&80 36570LDR R7,[R2,R10,LSR #5]:LDR R8,[R3,R10,LSR #5]:LDR R9,[R4,R10,LSR #5] 36580STMIA R5!,{R7,R8,R9} 36590AND R10,R6,#&40 36600LDR R7,[R2,R10,LSR #4]:LDR R8,[R3,R10,LSR #4]:LDR R9,[R4,R10,LSR #4] 36610STMIA R5!,{R7,R8,R9} 36620AND R10,R6,#&20 36630LDR R7,[R2,R10,LSR #3]:LDR R8,[R3,R10,LSR #3]:LDR R9,[R4,R10,LSR #3] 36640STMIA R5!,{R7,R8,R9} 36650AND R10,R6,#&10 36660LDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2] 36670STMIA R5!,{R7,R8,R9} 36680AND R10,R6,#&8 36690LDR R7,[R2,R10,LSR #1]:LDR R8,[R3,R10,LSR #1]:LDR R9,[R4,R10,LSR #1] 36700STMIA R5!,{R7,R8,R9} 36710AND R10,R6,#&4 36720LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10] 36730STMIA R5!,{R7,R8,R9} 36740AND R10,R6,#&2 36750LDR R7,[R2,R10,LSL #1]:LDR R8,[R3,R10,LSL #1]:LDR R9,[R4,R10,LSL #1] 36760STMIA R5!,{R7,R8,R9} 36770AND R10,R6,#&1 36780] 36790ELSE 36800[OPT Z 36810AND R10,R6,#&1 36820LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 36830STMIA R5!,{R7,R8,R9} 36840AND R10,R6,#&2 36850LDR R7,[R2,R10,LSL #1]:LDR R8,[R3,R10,LSL #1]:LDR R9,[R4,R10,LSL #1] 36860STMIA R5!,{R7,R8,R9} 36870AND R10,R6,#&4 36880LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10] 36890STMIA R5!,{R7,R8,R9} 36900AND R10,R6,#&8 36910LDR R7,[R2,R10,LSR #1]:LDR R8,[R3,R10,LSR #1]:LDR R9,[R4,R10,LSR #1] 36920STMIA R5!,{R7,R8,R9} 36930AND R10,R6,#&10 36940LDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2] 36950STMIA R5!,{R7,R8,R9} 36960AND R10,R6,#&20 36970LDR R7,[R2,R10,LSR #3]:LDR R8,[R3,R10,LSR #3]:LDR R9,[R4,R10,LSR #3] 36980STMIA R5!,{R7,R8,R9} 36990AND R10,R6,#&40 37000LDR R7,[R2,R10,LSR #4]:LDR R8,[R3,R10,LSR #4]:LDR R9,[R4,R10,LSR #4] 37010STMIA R5!,{R7,R8,R9} 37020MOV R10,R6,LSR #7 37030] 37040ENDIF 37050[OPT Z 37060LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 37070STMIA R5!,{R7,R8,R9} 37080SUBS R0,R0,#8:BHI mappixlp 37090MOVS PC,R14 37100] 37110WHEN 16 37120[OPT Z 37130.mappix% 37140LDR R0,sxloc 37150LDR R1,[R9]:LDR R1,[R1] 37160LDR R2,[R9,#8]:LDR R2,[R2] 37170LDR R3,[R9,#4*8] 37180LDR R4,[R9,#3*8] 37190LDR R5,[R9,#2*8] 37200LDR R6,[R9,#5*8] 37210LDR R7,[R9,#6*8] 37220LDR R8,[R9,#7*8] 37230CMP R1,R2 37240ADDEQ R2,R2,#1 37250.mappixlp 37260LDRB R9,[R1],#step24:LDRB R10,[R2],#step24 37270LDR R9,[R6,R9,LSL #2]:LDR R10,[R7,R10,LSL #2]:ORR R9,R9,R10 37280AND R10,R9,#255:LDR R10,[R3,R10,LSL #2] 37290MOV R11,R9,LSR #8:AND R11,R11,#255:LDR R11,[R4,R11,LSL #2] 37300MOV R12,R9,LSR #16:LDR R12,[R5,R12,LSL #2] 37310STMIA R8!,{R10,R11,R12} 37320SUBS R0,R0,#1:BNE mappixlp 37330MOVS PC,R14 37340] 37350WHEN 24 37360[OPT Z 37370.mappix% 37380LDR R0,sxloc 37390LDR R1,[R9,#2*8]:LDR R1,[R1] 37400LDR R2,[R9,#8]:LDR R2,[R2] 37410LDR R3,[R9]:LDR R3,[R3] 37420LDR R4,[R9,#5*8] 37430LDR R5,[R9,#4*8] 37440LDR R6,[R9,#3*8] 37450LDR R7,[R9,#6*8] 37460.mappixlp 37470LDRB R8,[R1],#step24:LDR R9,[R4,R8,LSL #2] 37480LDRB R8,[R2],#step24:LDR R10,[R5,R8,LSL #2] 37490LDRB R8,[R3],#step24:LDR R11,[R6,R8,LSL #2] 37500STMIA R7!,{R9,R10,R11} 37510SUBS R0,R0,#1:BNE mappixlp 37520MOVS PC,R14 37530] 37540WHEN 411 37560[OPT Z 37570.mappix% 37580LDR R0,sxloc 37590LDR R1,[R9]:LDR R1,[R1] 37600LDR R2,[R9,#1*8] 37610LDR R3,[R9,#2*8] 37620LDR R5,[R9,#4*8] 37630LDR R6,[R9,#5*8] 37640LDR R7,[R9,#6*8] 37650LDR R9,[R9,#8*8] 37660STMFD SP !,{R14} 37670.mappixlp 37680LDMIA R1!,{R4,R10} 37690AND R8,R4,#&C000 37700MOV R8,R8,LSR #8 37710AND R14,R4,#&C0000000 37720ORR R8,R8,R14,LSR #16+8+2 37730AND R14,R10,#&C000 37740ORR R8,R8,R14,LSR #8+4 37750ORR R8,R8,R10,LSR #16+8+6 37760AND R11,R4,#&3000 37770MOV R11,R11,LSR #6 37780AND R14,R4,#&30000000 37790ORR R11,R11,R14,LSR #16+6+2 37800AND R14,R10,#&3000 37810ORR R11,R11,R14,LSR #6+4 37820AND R14,R10,#&30000000 37830ORR R11,R11,R14,LSR #16+6+6 37850AND R12,R4,#&FF 37860LDR R12,[R2,R12,LSL #2] 37870LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12 37880MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 37890LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12 37900LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12 37910MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 37920AND R12,R4,#&FF 37930LDR R12,[R2,R12,LSL #2] 37940LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14 37950MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 37970MOV R4,R4,LSR #16 37980AND R12,R4,#&FF 37990LDR R12,[R2,R12,LSL #2] 38000LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12 38010MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 38020LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12 38030LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12 38040MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 38050AND R12,R4,#&FF 38060LDR R12,[R2,R12,LSL #2] 38070LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14 38080MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 38100AND R12,R10,#&FF 38110LDR R12,[R2,R12,LSL #2] 38120LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12 38130MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 38140LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12 38150LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12 38160MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 38170AND R12,R10,#&FF 38180LDR R12,[R2,R12,LSL #2] 38190LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14 38200MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 38220MOV R10,R10,LSR #16 38230AND R12,R10,#&FF 38240LDR R12,[R2,R12,LSL #2] 38250LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12 38260MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 38270LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12 38280LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12 38290MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 38300AND R12,R10,#&FF 38310LDR R12,[R2,R12,LSL #2] 38320LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14 38330MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 38350SUBS R0,R0,#4:BNE mappixlp 38360LDMFD SP !,{PC}^ 38370] 38380WHEN 423 38390[OPT Z 38400.mappix% 38410LDR R0,sxloc 38420LDR R1,[R9]:LDR R1,[R1] 38430LDR R2,[R9,#1*8] 38440LDR R3,[R9,#2*8] 38450LDR R4,[R9,#3*8] 38460LDR R5,[R9,#4*8] 38470LDR R6,[R9,#5*8] 38480LDR R7,[R9,#6*8] 38490LDR R8,[R9,#7*8] 38500LDR R9,[R9,#8*8] 38510STMFD SP !,{R14} 38520.mappixlp 38530LDR R10,[R1],#4 38540AND R11,R10,#&FF00 38550LDR R11,[R2,R11,LSR #6] 38560AND R12,R10,#&FF:LDR R12,[R7,R12,LSL #2]:ADD R14,R12,R11 38570AND R12,R10,#&FF0000:LDR R12,[R8,R12,LSR #14]:ADDS R14,R14,R12 38580MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 38590AND R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11 38600AND R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12 38610MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 38620AND R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADD R14,R12,R11 38630AND R12,R10,#&FF0000:LDR R12,[R4,R12,LSR #14]:ADDS R14,R14,R12 38640MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 38650AND R11,R10,#&FF000000 38660LDR R11,[R2,R11,LSR #22] 38670AND R12,R10,#&FF:LDR R12,[R7,R12,LSL #2]:ADD R14,R12,R11 38680AND R12,R10,#&FF0000:LDR R12,[R8,R12,LSR #14]:ADDS R14,R14,R12 38690MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 38700AND R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11 38710AND R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12 38720MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 38730AND R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADD R14,R12,R11 38740AND R12,R10,#&FF0000:LDR R12,[R4,R12,LSR #14]:ADDS R14,R14,R12 38750MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 38760SUBS R0,R0,#2:BNE mappixlp 38770LDMFD SP !,{PC}^ 38780] 38790WHEN 422 38800[OPT Z 38810.mappix% 38820LDR R0,sxloc 38830LDR R1,[R9]:LDR R1,[R1] 38840LDR R2,[R9,#1*8] 38850LDR R3,[R9,#2*8] 38860LDR R5,[R9,#4*8] 38870LDR R6,[R9,#5*8] 38880LDR R7,[R9,#6*8] 38890LDR R9,[R9,#8*8] 38900STMFD SP !,{R14} 38910.mappixlp 38920LDR R10,[R1],#4 38930AND R11,R10,#&FF00 38940LDR R11,[R2,R11,LSR #6] 38950AND R12,R10,#&FF0000:LDR R12,[R7,R12,LSR #14]:ADDS R14,R12,R11 38960MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 38970AND R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11 38980AND R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12 38990MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39000AND R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADDS R14,R12,R11 39010MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39020AND R11,R10,#&FF000000 39030LDR R11,[R2,R11,LSR #22] 39040AND R12,R10,#&FF0000:LDR R12,[R7,R12,LSR #14]:ADDS R14,R12,R11 39050MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39060AND R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11 39070AND R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12 39080MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39090AND R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADDS R14,R12,R11 39100MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39110SUBS R0,R0,#2:BNE mappixlp 39120LDMFD SP !,{PC}^ 39130] 39140WHEN 555 39160[OPT Z 39170.mappix% 39180LDR R0,sxloc 39190LDR R1,[R9]:LDR R1,[R1] 39200LDR R2,[R9,#1*8] 39210LDR R3,[R9,#2*8] 39220LDR R5,[R9,#4*8] 39230LDR R6,[R9,#5*8] 39240LDR R7,[R9,#6*8] 39250LDR R9,[R9,#8*8] 39260STMFD SP !,{R14} 39270.mappixlp 39280LDR R10,[R1],#2 39290AND R11,R10,#ymax% 39300LDR R11,[R2,R11,LSL #2] 39310AND R8,R10,#((1<<vbits%)-1)<<(ybits%+ubits%) 39320AND R10,R10,#((1<<ubits%)-1)<<ybits% 39340LDR R12,[R7,R8,LSR #ybits%+ubits%-2]:ADDS R14,R12,R11 39350MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39360LDR R12,[R5,R8,LSR #ybits%+ubits%-2]:ADD R14,R12,R11 39370LDR R12,[R6,R10,LSR #ybits%-2]:ADDS R14,R14,R12 39380MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39390LDR R12,[R3,R10,LSR #ybits%-2]:ADDS R14,R12,R11 39400MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 39410SUBS R0,R0,#1:BNE mappixlp 39420LDMFD SP !,{PC}^ 39430] 39440ENDCASE 39450IFxmul%=2 AND xdiv%=1 THEN 39460[OPT Z 39480.xsample% 39490LDR R0,[R9]:LDR R0,[R0] 39500LDR R1,[R9,#8] 39510LDR R2,[R9,#2*8] 39520.xsamplelp 39530LDMIA R1,{R5,R6,R7,R8,R9,R10} 39540ADD R8,R8,R5 39550MOV R8,R8,LSR #1 39560ADD R9,R9,R6 39570MOV R9,R9,LSR #1 39580ADD R10,R10,R7 39590MOV R10,R10,LSR #1 39600STMIA R2!,{R5,R6,R7,R8,R9,R10} 39610ADD R1,R1,#12 39620SUBS R0,R0,#2:BPL xsamplelp 39630MOVS PC,R14 39640] 39650ELSE 39660[OPT Z 39680.xsample% 39690LDR R0,[R9]:LDR R0,[R0] 39700LDR R1,[R9,#8] 39710LDR R2,[R9,#2*8] 39720LDR R3,[R9,#3*8]:LDR R3,[R3] 39730LDR R4,[R9,#4*8]:LDR R4,[R4] 39740MOV R11,R4 39750.xsamplelp 39760LDMIA R1,{R5,R6,R7} 39770SUBS R11,R11,#1:MOVEQ R11,R4:ADDEQ R1,R1,#12 39780SUBS R12,R3,#1 39790BEQ xdonediv 39800.xdivlp 39810CMP R12,R11 39820BCC xdivlp2 39830LDMIA R1!,{R8,R9,R10}:MLA R5,R8,R11,R5:MLA R6,R9,R11,R6:MLA R7,R10,R11,R7 39840SUBS R12,R12,R11:MOV R11,R4 39850BNE xdivlp 39860B xdonediv 39870.xdivlp2 39880LDMIA R1,{R8,R9,R10} 39890SUBS R11,R11,#1:MOVEQ R11,R4:ADDEQ R1,R1,#12 39900ADD R5,R5,R8:ADD R6,R6,R9:ADD R7,R7,R10 39910SUBS R12,R12,#1:BNE xdivlp 39920.xdonediv 39930STMIA R2!,{R5,R6,R7} 39940SUBS R0,R0,#1:BPL xsamplelp 39950MOVS PC,R14 39960] 39970ENDIF 39980ENDCASE 39990IFcompression=5 THEN 40000[OPT Z 40020.firstcode DCD 0 40030.oldcode DCD 0 40040.codesize DCD setcodes%+1 40050.stack DCD stk% 40060.sp DCD stk% 40070.maxcode DCD clearcode%+2 40080.maxcodesize DCD 2*clearcode% 40090.LZWdecode% 40100LDR R2,firstcode:LDR R3,oldcode:LDR R4,stack:LDR R5,codesize 40110LDR R6,sp:LDR R7,maxcode:LDR R8,maxcodesize 40120LDR R10,[R9]:LDR R10,[R10] 40130LDR R11,[R9,#8]:LDR R11,[R11] 40140LDR R12,[R9,#24] 40150STMFD SP !,{R14} 40160.lzwloop 40170CMP R6,R4 40180BHI lzwunstack 40190.lzwengine 40200BL getcode 40210CMP R0,#clearcode% 40220BEQ lzwclear 40240MOV R1,R0 40250CMP R0,R7 40260STRCSB R2,[R6],#1 40270MOVCS R0,R3 40280CMP R0,#clearcode% 40290BCC lzwdonepush 40300.lzwpushtable 40310LDR R14,[R12,R0,LSL #2] 40320STRB R14,[R6],#1 40330MOV R0,R14,LSR #16 40340CMP R0,#clearcode% 40350BCS lzwpushtable 40360.lzwdonepush 40370LDR R2,[R12,R0,LSL #2] 40380BIC R2,R2,#&FF0000 40390BIC R2,R2,#&FF000000 40400STRB R2,[R6],#1 40410CMP R7,#4096 40420BCS lzwnocode 40430ORR R0,R2,R3,LSL #16 40440STR R0,[R12,R7,LSL #2] 40450ADD R7,R7,#1 40460CMP R7,R8 40470BCC lzwnocode 40480CMP R8,#4096 40490ADDCC R5,R5,#1 40500MOVCC R8,R8,LSL #1 40510] 40520IFflag=1500 THEN 40530[OPT Z 40540ORRCC R8,R8,#1 40550] 40560ENDIF 40570[OPT Z 40580.lzwnocode 40590MOV R3,R1 40600CMP R6,R4 40610BLS lzwengine 40620.lzwunstack 40630LDRB R0,[R6,#-1]! 40640.lzwloopend 40650STRB R0,[R11],#1 40660SUBS R10,R10,#1 40670BNE lzwloop 40680STR R2,firstcode:STR R3,oldcode:STR R5,codesize 40690STR R6,sp:STR R7,maxcode:STR R8,maxcodesize 40700LDMFD SP !,{PC}^ 40710.lzwclear 40720MOV R0,#0 40730MOV R3,R12 40740.lzwdefaulttable 40750STR R0,[R3],#4 40760ADD R0,R0,#1:CMP R0,#clearcode% 40770BCC lzwdefaulttable 40780MOV R5,#setcodes%+1 40790MOV R7,#clearcode% 40800MOV R8,R7,LSL #1 40810] 40820IFflag=1500 THEN 40830[OPT Z 40840SUB R8,R8,#1 40850] 40860ENDIF 40870[OPT Z 40880ADD R7,R7,#2 40890BL getcode 40900MOV R2,R0 40910MOV R3,R0 40920MOV R6,R4 40930B lzwloopend 40950.curbit DCD 0 40960.lastbit DCD 0 40970.buf DCD buf% 40980.getcode 40990STMFD SP !,{R6,R7,R8} 41000ADR R6,curbit 41010LDMIA R6,{R6,R7,R8} 41020ADD R1,R5,R6 41030CMP R1,R7 41040BCS needmoredata 41050.simplecode 41060ADD R7,R8,R6,LSR #3 41070BIC R7,R7,#3 41080LDMIA R7,{R0,R7} 41090] 41100IFflag=1500 THEN 41110[OPT Z 41120EOR R1,R0,R0,ROR #16 41130BIC R1,R1,#&FF0000 41140MOV R0,R0,ROR #8 41150EOR R0,R0,R1,LSR #8 41160EOR R1,R7,R7,ROR #16 41170BIC R1,R1,#&FF0000 41180MOV R7,R7,ROR #8 41190EOR R7,R7,R1,LSR #8 41200ANDS R1,R6,#31:MOVNE R0,R0,LSL R1:RSBNE R1,R1,#32:ORRNE R0,R0,R7,LSR R1 41210RSB R1,R5,#32 41220MOV R0,R0,LSR R1 41230] 41240ELSE 41250[OPT Z 41260ANDS R1,R6,#31:MOVNE R0,R0,LSR R1:RSBNE R1,R1,#32:ORRNE R0,R0,R7,LSL R1 41270MVN R1,#0:BIC R0,R0,R1,LSL R5 41280] 41290ENDIF 41300[OPT Z 41310ADD R6,R6,R5 41320STR R6,curbit 41330LDMFD SP !,{R6,R7,R8} 41340MOV PC,R14 41350.needmoredata 41360STMFD SP !,{R2,R3,R4,R14} 41370MOV R3,R7,LSR #3 41380SUB R0,R3,#2 41390LDRB R0,[R8,R0] 41400STRB R0,[R8] 41410SUB R0,R3,#1 41420LDRB R0,[R8,R0] 41430STRB R0,[R8,#1] 41440LDR R1,[R9,#16] 41450LDR R1,[R1] 41460] 41470IFflag=1500 THEN 41480[OPT Z 41490MOV R0,#256 41500MOV R3,#256 41510] 41520ELSE 41530[OPT Z 41540BL bytefromcache% 41550MOVS R3,R0 41560BEQ simplecode1 41570] 41580ENDIF 41590[OPT Z 41600SUB R6,R6,R7 41610ADD R6,R6,#16 41620ADD R0,R0,#2 41630MOV R7,R0,LSL #3 41640STR R7,lastbit 41650ADD R2,R8,#2 41660BL multibytefromcache% 41670.simplecode1 41680LDMFD SP !,{R2,R3,R4,R14} 41690B simplecode 41700] 41710ENDIF 41720IFrange% THEN 41730[OPT Z 41750.maxmin% 41760LDR R0,[R9]:LDR R0,[R0] 41770LDR R1,[R9,#8] 41780LDR R2,min 41790LDR R3,max 41800.maxminlp 41810LDR R4,[R1],#4 41820CMP R4,R3:MOVCS R3,R4 41830CMP R4,R2:MOVCC R2,R4 41840SUBS R0,R0,#1:BNE maxminlp 41850STR R2,min 41860STR R3,max 41870MOVS PC,R14 41880.min DCD F 41890.max DCD 0 41900] 41910ENDIF 41920IFsharpen% THEN 41930sharp=(col+1)*4:IFsharpen%<>8 sharpmul%=F/(sharpen%-8) 41940[OPT Z 41960.sharp% 41970LDR R0,[R9]:LDR R0,[R0] 41980LDR R1,[R9,#8] 41990LDR R2,[R9,#16] 42000LDR R3,[R9,#24] 42010LDR R4,[R9,#32] 42020] 42030CASE sharpen% OF 42040WHEN 8,9,12,16,24 42050OTHERWISE 42060[OPT Z 42070MOV R8,#sharpmul% AND &FF 42080ORR R8,R8,#sharpmul% AND &FF00 42090MOV R9,#(sharpmul% >> 16) AND &FF 42100ORR R9,R9,#(sharpmul% >> 16) AND &FF00 42110] 42120ENDCASE 42130[OPT Z 42140.sharplp 42150LDR R5,[R1,#-sharp] 42160LDR R6,[R1,#sharp]:ADD R5,R5,R6 42170LDR R6,[R1],#4:ADD R5,R5,R6 42180LDR R6,[R3,#-sharp]:ADD R5,R5,R6 42190LDR R6,[R3,#sharp]:ADD R5,R5,R6 42200LDR R6,[R3],#4:ADD R5,R5,R6 42210LDR R6,[R2,#-sharp]:ADD R5,R5,R6 42220LDR R6,[R2,#sharp]:ADD R5,R5,R6 42230LDR R6,[R2],#4 42240MOV R6,R6,LSR #1 42250MOV R7,#sharpen% 42260MUL R7,R6,R7 42270SUBS R5,R7,R5,LSR #1 42280MOVCC R5,#0 42290] 42300CASE sharpen% OF 42310WHEN 8,9 42320[OPT Z 42330MOV R6,R5,LSL #1 42340] 42350WHEN 10 42360[OPT Z 42370MOV R6,R5 42380] 42390WHEN 12 42400[OPT Z 42410MOV R6,R5,LSR #1 42420] 42430WHEN 16 42440[OPT Z 42450MOV R6,R5,LSR #2 42460] 42470WHEN 24 42480[OPT Z 42490MOV R6,R5,LSR #3 42500] 42510OTHERWISE 42520[OPT Z 42530MOV R6,R5,LSR #16 42540EOR R5,R5,R6,LSL #16 42550MUL R7,R8,R5 42560MUL R5,R9,R5 42570MUL R10,R6,R8 42580MUL R6,R9,R6 42590ADDS R10,R5,R10 42600ADDCS R6,R6,#&10000 42610ADDS R7,R7,R10,LSL #16 42620ADC R6,R6,R10,LSR #16 42630MOV R6,R6,LSL #(32-27) 42640ORRS R6,R6,R7,LSR #27 42650ADDCS R6,R6,#1 42660] 42670ENDCASE 42680[OPT Z 42690CMP R6,#F:MOVCS R6,#F 42700STR R6,[R4],#4 42710SUBS R0,R0,#1 42720BNE sharplp 42730MOVS PC,R14 42740] 42750ENDIF 42760IFhist%ORequal% THEN 42770[OPT Z 42790.histo% 42800LDR R0,[R9]:LDR R0,[R0] 42810LDR R1,[R9,#8] 42820LDR R2,[R9,#16] 42830.histlp 42840LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F 42850MOV R3,R3,LSR #bits-8 42860] 42870IFcol=2 THEN 42880[OPT Z 42890ADD R3,R3,R3,LSL #1 42900LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2] 42910LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F 42920MOV R3,R3,LSR #bits-8 42930ADD R3,R3,R3,LSL #1:ADD R3,R3,#1 42940LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2] 42950LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F 42960MOV R3,R3,LSR #bits-8 42970ADD R3,R3,R3,LSL #1:ADD R3,R3,#2 42980] 42990ENDIF 43000[OPT Z 43010LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2] 43020SUBS R0,R0,#1 43030BNE histlp 43040MOVS PC,R14 43050] 43060ENDIF 43070IFequal% THEN 43080[OPT Z 43100.histequal% 43110LDR R0,[R9]:LDR R0,[R0] 43120LDR R1,[R9,#8] 43130LDR R2,[R9,#16] 43140.equallp 43150LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F 43160MOV R3,R3,LSR #bits-8 43170] 43180IFcol=2 THEN 43190[OPT Z 43200LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F 43210MOV R3,R3,LSR #bits-8 43220ADD R3,R3,R3,LSL #1 43230LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4 43240LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F 43250MOV R3,R3,LSR #bits-8 43260ADD R3,R3,R3,LSL #1:ADD R3,R3,#1 43270LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4 43280LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F 43290MOV R3,R3,LSR #bits-8 43300ADD R3,R3,R3,LSL #1:ADD R3,R3,#2 43310] 43320ENDIF 43330[OPT Z 43340LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4 43350SUBS R0,R0,#1 43360BNE equallp 43370MOVS PC,R14 43380] 43390ENDIF 43400CASE r$ OF 43410WHEN "FN800","FN801","FN1000","FN1001" 43420[OPT Z 43450.rlexpand% 43460LDR R0,[R9] 43470LDR R1,[R0] 43480LDR R2,[R9,#8]:LDR R2,[R2] 43490LDR R3,[R9,#16] 43500LDR R4,[R3] 43510CMP R4,#1:MOVLTS PC,R14 43520LDR R5,[R9,#24]:LDR R5,[R5] 43530.rle 43540STRB R2,[R1],#1 43550SUB R4,R4,#1 43560CMP R1,R5 43570TEQNE R4,#0 43580BNE rle 43590.rlexit 43600STR R1,[R0] 43610STR R4,[R3] 43620MOVS PC,R14 43630] 43640WHEN "FN902" 43650[OPT Z 43660.unpack% 43670LDR R0,[R9] 43680LDR R0,[R0] 43690LDR R1,plbuff 43700ADD R2,R0,#768 43710.unpackloop 43720LDR R3,[R0],#4 43730MOV R5,#0 43740.bitloop 43750MOV R6,R3,LSR R5 43760AND R6,R6,#15 43770ADD R5,R5,#4 43780MOV R7,R3,LSR R5 43790AND R7,R7,#15 43800ADD R5,R5,#4 43810STRB R7,[R1],#1 43820STRB R6,[R1],#1 43830CMP R5,#32 43840BNE bitloop 43850CMP R2,R0 43860BNE unpackloop 43870MOV PC,R14 43880.plbuff EQUD plbuff% 43890] 43900WHEN "FN1601","FN1501","FN1850","FN1851" 43910[OPT Z 43930.readiff% 43940MOV R1,#c% 43950LDR R8,[R9]:LDR R8,[R8] 43960LDR R7,[R9,#8]:LDR R7,[R7]:ADD R7,R7,R8 43970STMFD SP !,{R14} 43980] 43990IFr$="FN1850" OR r$="FN1851" THEN 44000[OPT Z 44010BL bytefromcache% 44020] 44030IFsy%>250 THEN 44040[OPT Z 44050BL bytefromcache% 44060] 44070ENDIF 44080ENDIF 44090[OPT Z 44100.rle 44110BL bytefromcache% 44120CMP R0,#128 44130BCC rle1 44140RSB R2,R0,#256 44150BL bytefromcache% 44160.rle0 STRB R0,[R8],#1 44170SUBS R2,R2,#1 44180BPL rle0 44190B rle2 44200.rle1 44210ADD R3,R0,#1 44220MOV R2,R8 44230ADD R8,R8,R3 44240BL multibytefromcache% 44250.rle2 44260CMP R8,R7 44270BCC rle 44280LDMFD SP !,{R14} 44290MOVS PC,R14 44300] 44310WHEN "FN1900","FN1100","FN400" 44320[OPT Z 44340.readline% 44350LDR R2,[R9]:LDR R2,[R2] 44360LDR R3,[R9,#8] 44370LDR R0,[R3] 44380LDR R4,[R9,#16] 44390LDR R5,[R4] 44400LDR R6,[R9,#24]:LDR R6,[R6]:ADD R6,R6,R2 44410STMFD SP !,{R14} 44420.rle 44430CMP R5,#1 44440BGE rle1 44450BL bytefromcache% 44460MOV R5,#1 44470] 44480IFflag=1900 THEN 44490[OPT Z 44500CMP R0,#192 44510ANDCS R5,R0,#63:BLCS bytefromcache% 44520] 44530ENDIF 44540IFflag=1100 THEN 44550[OPT Z 44560CMP R0,#128 44570BNE rle1 44580BL bytefromcache% 44590TEQ R0,#0 44600MOVEQ R0,#128 44610BEQ rle1 44620ADD R5,R0,#1 44630BL bytefromcache% 44640] 44650ENDIF 44660IFflag=400 THEN 44670[OPT Z 44680MOV R1,R0 44690BL bytefromcache% 44700ORR R1,R1,R0,LSL #8 44710BL bytefromcache% 44720ORR R1,R1,R0,LSL #16 44730BL bytefromcache% 44740ADD R5,R0,#1 44750MOV R0,R1 44760] 44770ENDIF 44780IFflag=200 THEN 44790[OPT Z 44800ADD R5,R0,#1 44810BL bytefromcache% 44820] 44830ENDIF 44840[OPT Z 44850.rle1 44860STRB R0,[R2],#1 44870] 44880IFflag=400 THEN 44890[OPT Z 44900MOV R1,R0,LSR #8 44910STRB R1,[R2],#1 44920MOV R1,R0,LSR #16 44930STRB R1,[R2],#1 44940] 44950ENDIF 44960[OPT Z 44970SUB R5,R5,#1 44980TEQ R2,R6 44990BNE rle 45000.rlexit 45010STR R0,[R3]:STR R5,[R4] 45020LDMFD SP !,{PC}^ 45030] 45040ENDCASE 45050IFcachebytes% THEN 45060[OPT Z 45070.bytefromcache% 45080STMFD SP !,{R1,R2} 45090LDR R1,incacheptr 45100LDR R2,numlefttogo 45110LDRB R0,[R1],#1 45120SUBS R2,R2,#1 45130STRNE R1,incacheptr 45140STRNE R2,numlefttogo 45150LDMFD SP !,{R1,R2} 45160MOVNE PC,R14 45170STMFD SP !,{R0,R1,R2,R3,R4} 45180LDR R2,valdatacache 45190STR R2,incacheptr 45200LDR R3,valcache 45210STR R3,numlefttogo 45220MOV R0,#4 45230MOV R1,#c% 45240SWI "OS_GBPB" 45250LDMFD SP !,{R0,R1,R2,R3,R4} 45260MOV PC,R14 45270.valdatacache DCD datacache% 45280.valcache DCD cache% 45290.incacheptr DCD datacache% 45300.numlefttogo DCD cache% 45310.multibytefromcache% 45320CMP R3,#0 45330MOVEQ PC,R14 45340STMFD SP !,{R0,R14} 45350.multibytefromcachel 45360BL bytefromcache% 45370STRB R0,[R2],#1 45380SUBS R3,R3,#1 45390BNE multibytefromcachel 45400LDMFD SP !,{R0,R14} 45410MOV PC,R14 45420] 45430ENDIF 45440IFplanar%<0 THEN 45450C%=7:IFflag=2600 C%=15 45460[OPT Z 45470.plancnv% 45480LDR R0,sxloc 45490LDR R1,[R9]:LDR R1,[R1] 45500LDR R3,[R9,#8]:LDR R3,[R3] 45510LDR R4,[R9,#16]:LDR R4,[R4] 45520MOV R9,#C% 45530.planelp 45540MOV R7,#0 45550MOV R5,R3 45560] 45570FORN%=1TOplanes% 45580[OPT Z 45590LDR R6,[R5],R4 45600] 45610IFflag=2600 THEN 45620[OPT Z 45630MOV R6,R6,LSL #8 45640BIC R6,R6,#&FF000000 45650ORR R6,R6,R6,LSR #16 45660] 45670ENDIF 45680[OPT Z 45690MOV R6,R6,LSR R9 45700AND R6,R6,#1 45710ORR R7,R7,R6,LSL #(N%-1) 45720] 45730NEXT 45740[OPT Z 45750STRB R7,[R1],#1 45760SUBS R9,R9,#1:MOVMI R9,#C% 45770] 45780IFflag=2600 THEN 45790[OPT Z 45800MOVMI R3,R5 45810] 45820ELSE 45830[OPT Z 45840ADDMI R3,R3,#1 45850] 45860ENDIF 45870[OPT Z 45880SUBS R0,R0,#1:BNE planelp 45890MOVS PC,R14 45900] 45910ENDIF 45920NEXT 45930cputime%=TIME 45940IFcache% THEN 45950IFflag=3600 THEN 45960pcdblk%!12=cacherows%:PROCrefillpcd:IFcache%>=filesize% rowstogo%=-1 45970ELSE 45980IFstriprows%>0ANDcompression>1 THEN 46000SYS12,4,c%,datacache%,cache% 46010IFcachebytes% !incacheptr=datacache%:!numlefttogo=cache% 46020ELSE 46030PROCrefill:IFcache%>=filesize% rowstogo%=-1 46040ENDIF 46050ENDIF 46060ENDIF 46070CASE ncol OF 46080WHEN 2^24-1:size%=1 46090WHEN 2^15-1:size%=1 46100WHEN 63,255,256:size%=1 46110WHEN 15:size%=2 46120WHEN 3:size%=4 46130WHEN 1:size%=8:IFm$="C" size%=2 46140IFm$="D" size%=4 46150IFm$="T" size%=2 46160ENDCASE 46180CASE flag OF 46190WHEN 501:IFinfo% PRINT"Reading interlaced GIF" 46200sz%=sx%*sy%:plbuff%=FNdim(sz%+100) 46210FORY%=0TOsy%-1STEP8:X%=plbuff%+Y%*sx%:CALL LZWdecode%,table%(0),c%,X%,sx%:NEXT 46220FORY%=4TOsy%-1STEP8:X%=plbuff%+Y%*sx%:CALL LZWdecode%,table%(0),c%,X%,sx%:NEXT 46230FORY%=2TOsy%-1STEP4:X%=plbuff%+Y%*sx%:CALL LZWdecode%,table%(0),c%,X%,sx%:NEXT 46240FORY%=1TOsy%-1STEP2:X%=plbuff%+Y%*sx%:CALL LZWdecode%,table%(0),c%,X%,sx%:NEXT 46250datacache%=plbuff%:buff%=plbuff%:rowbytes%=sx%:rowstogo%=-1 46260ENDCASE 46270IFgamma<>1 AND gamma<>0 THEN 46280k=1/gamma:FORC%=0TO255 46290IFr%(C%) r%(C%)=((r%(C%)/F)^k)*F 46300IFg%(C%) g%(C%)=((g%(C%)/F)^k)*F 46310IFb%(C%) b%(C%)=((b%(C%)/F)^k)*F 46320NEXT 46330ENDIF 46340rmax=F:gmax=F:bmax=F 46350IFcol=0 THEN 46360IFinput<9 THEN 46370FORC%=0TO255:r%(C%)=r%(C%)*rwt+g%(C%)*gwt+b%(C%)*bwt:NEXT 46380ELSE 46390IFinput<400 THEN 46400rmax=F*rwt:gmax=F*gwt:bmax=F*bwt 46410FORC%=0TO255:r%(C%)=r%(C%)*rwt:g%(C%)=g%(C%)*gwt:b%(C%)=b%(C%)*bwt:NEXT 46420ENDIF 46430ENDIF 46440ENDIF 46450IFNOTorder% PROCadjustpalette(1/ydiv%/xdiv%,0) 46470IFrange% THEN 46480IFinfo% PRINT"Scanning data to compute parameters for '-range'" 46490IForder% THEN 46500Y%=0:REPEAT SYShour%,Y%*100DIVsy% 46510W%=EVAL(r$+"(xp%())"):CALLmaxmin%,xp%(1,0),totvals2%:Y%+=1 46520UNTILY%=sy% OR!min<255 AND!max+255>=F 46530ELSE 46540Y%=0:ysamp%=1:REPEAT SYShour%,Y%*100DIVy% 46550PROCscaledpixelrow(cl%()):CALLmaxmin%,cl%(1,0),totvals%:Y%+=1 46560UNTILY%=y% OR !min<255 AND !max+255>=F 46570ENDIF 46580IF!max+255>=F AND!min<255 range%=FALSE:range$="No point in '-range' on this image" 46590IFrange% PROCadjustpalette(F/(!max-!min),!min/ydiv%/xdiv%):range$="Input image maximum "+STR$(!max/F*100)+"% minimum "+STR$(!min/F*100)+"%" 46600PROCrewind:IFinfo% PRINTrange$ 46610ENDIF 46620IFhist% ORequal% THEN 46630IFequal% IFinfo% PRINT"Scanning data to compute parameters for '-equal'" 46640IForder% THEN 46650FORyr%=0TOsy%-1:SYShour%,yr%*100DIVsy% 46660W%=EVAL(r$+"(xp%())"):CALLhisto%,xp%(1,0),vals%(0,0),sx% 46670NEXT 46680ELSE 46690ysamp%=1:FORyr%=0TOy%-1:SYShour%,yr%*100DIVy% 46700PROCscaledpixelrow(cl%()):CALLhisto%,cl%(1,0),vals%(0,0),x% 46710NEXT 46720ENDIF 46730IFinfo% PRINT"Done. Now processing the picture" 46740ENDIF 46750IFinput<400 THEN 46760FORC%=0TO255 46770IFr%(C%)<0 r%(C%)=0 46780IFg%(C%)<0 g%(C%)=0 46790IFb%(C%)<0 b%(C%)=0 46800IFr%(C%)>rmax r%(C%)=rmax 46810IFg%(C%)>gmax g%(C%)=gmax 46820IFb%(C%)>bmax b%(C%)=bmax 46830NEXT 46840ENDIF 46850IFhist% THEN 46860M%=0:ZM%=-1:FORC%=0TOcol 46870FORZ%=0TO256:IFvals%(Z%,C%)>M% M%=vals%(Z%,C%):ZM%=Z% 46880NEXT:NEXT 46890IFZM%=-1 OR okinfo%=0 THEN=100 46900IF col>0 THEN 46910MODE66:ht=500 46920IFMODE<>66 MODE16:ht=400 46930LINE0,6,2000,6 46940ELSE 46950MODE18:ht=400:LINE0,6,1024,6 46960ENDIF 46970M=M%/(ht*2-8):FORC%=0TOcol:CASE C% OF 46980WHEN 0:GCOL1 46990WHEN 1:GCOL2 47000WHEN 2:GCOL4 47010ENDCASE 47020IF col>0 THEN 47030FORZ%=0TO256:IFvals%(Z%,C%) X%=Z%*3+C%<<1:LINEX%,8,X%,vals%(Z%,C%)/M+8 47040NEXT 47050ELSE 47060FORZ%=0TO256:IFvals%(Z%,C%) X%=Z%<<2:RECTANGLE FILLX%,8,2,vals%(Z%,C%)/M 47070NEXT 47080ENDIF 47090NEXT 47100PROCclose:SYS"Hourglass_Off" 47110=100 47120ENDIF 47130IFm>=0 oname$="p"+STR$m+m$ ELSEoname$=m$ 47140IFm=-6 ORm=-7 ORm=-8 oname$=pnm$ 47150IFrange% oname$+="r" 47160IFequal% oname$+="e" 47170IFsharpen% oname$+="s"+STR$sharpen% 47180IFblack% oname$+="b"+STR$black% 47190IFgamma<>1 A%=@%:@%=&1020100:oname$+="g"+STR$gamma:@%=A% 47200IFbright%=16 oname$+="b" 47210xsp%=x%:ysp%=y%:IFrotate% SWAP xsp%,ysp% 47220CASE m OF 47230WHEN -1:xwords%=xsp%:sz%=xwords%*ysp%:Y%=ysp% 47240PROCgetoutput(sz%,0,xwords%,Y%):base%=ram% 47250WHEN -3,-5:xwords%=xsp%*2:sz%=xwords%*ysp%:Y%=ysp% 47260PROCgetoutput(sz%,0,xwords%,Y%):base%=ram% 47270WHEN -4:xwords%=xsp%*3:sz%=xwords%*ysp%:Y%=ysp% 47280PROCgetoutput(sz%,0,xwords%,Y%):base%=ram% 47290WHEN -6:xwords%=xsp%*2+3ANDNOT3:sz%=xwords%*ysp%:Y%=ysp% 47300A%=Y%:PROCgetoutput(sz%,64,xwords%,Y%) 47310ram%!4=0:ram%!8=16:ram%!12=16:SYS&2e,&109,ram% 47320SYS&2e,&10f,ram%,oname$,0,xsp%*2,Y%,28 47330base%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords% 47340ram%!12=ram%!12-Y%*xwords%+A%*xwords% 47350base%!(10*4)=5<<27 OR nx<<1 OR ny<<14 OR 1:base%+=base%!(8*4) 47360WHEN -7:xwords%=xsp%*3+3ANDNOT3:sz%=xwords%*ysp%:Y%=ysp% 47370A%=Y%:PROCgetoutput(sz%,64,xwords%,Y%) 47380ram%!4=0:ram%!8=16:ram%!12=16:SYS&2e,&109,ram% 47390SYS&2e,&10f,ram%,oname$,0,xsp%*3,Y%,28 47400base%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords% 47410ram%!12=ram%!12-Y%*xwords%+A%*xwords% 47420base%!(10*4)=panic<<27 OR nx<<1 OR ny<<14 OR 1:base%+=base%!(8*4) 47430no magic number yet for new format 24bpp sprites 47440WHEN -8:xwords%=xsp%*4:sz%=xwords%*ysp%:Y%=ysp% 47450A%=Y%:PROCgetoutput(sz%,64,xwords%,Y%) 47460ram%!4=0:ram%!8=16:ram%!12=16:SYS&2e,&109,ram% 47470SYS&2e,&10f,ram%,oname$,0,xsp%*4,Y%,28 47480base%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords% 47490ram%!12=ram%!12-Y%*xwords%+A%*xwords% 47500base%!(10*4)=6<<27 OR nx<<1 OR ny<<14 OR 1:base%+=base%!(8*4) 47510OTHERWISE:xwords%=xsp%/size%+3.9999ANDNOT3:sz%=xwords%*ysp%:X%=xsp%:Y%=ysp% 47520IFncol=1 THEN 47530CASE m$ OF 47540WHEN"C":!rowinc=xwords%:xwords%=xwords%*4:sz%=xwords%*ysp%:X%=xsp%*4:Y%=ysp%*4 47550WHEN"T":!rowinc=xwords%:xwords%=xwords%*3:sz%=xwords%*ysp%:X%=xsp%*4:Y%=ysp%*3 47560WHEN"D":!rowinc=xwords%:xwords%=xwords%*2:sz%=xwords%*ysp%:X%=xsp%*2:Y%=ysp%*2 47570ENDCASE 47580ENDIF 47590A%=Y%:PROCgetoutput(sz%,2048+64,xwords%,Y%) 47600ram%!4=0:ram%!8=16:ram%!12=16:SYS&2e,&109,ram% 47610SYS&2e,&10f,ram%,oname$,(ncol<63)AND1,X%,Y%,spm 47620base%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords% 47630ram%!12=ram%!12-Y%*xwords%+A%*xwords% 47640pal%=base%+11*4:base%+=base%!(8*4) 47650CASE ncol OF 47660WHEN 256 47670!(pal%-8)+=2048:!(pal%-12)+=2048:base%+=2048:!(ram%+12)+=2048:!(pal%-44)+=2048 47680FORZ%=0TO255:B%=Z%ORZ%<<8ORZ%<<16:B%=B%<<8 47690pal%!(Z%*8)=B%:pal%!(Z%*8+4)=B%:NEXT 47700WHEN 255 47710!(pal%-8)+=2048:!(pal%-12)+=2048:base%+=2048:!(ram%+12)+=2048:!(pal%-44)+=2048 47720FORZ%=0TO255:B%=palette%!(Z%<<2)<<8 47730pal%!(Z%*8)=B%:pal%!(Z%*8+4)=B%:NEXT 47740WHEN 15 47750CASE m$ OF 47760WHEN "R" 47770FORZ%=0TO15:PROCcol(Z%,palette%!(Z%<<2)AND&F0F0F0):NEXT 47780WHEN "D" 47790FORZ%=0TO7:A%=0:IFZ%AND1 A%+=&F0 47800IFZ%AND2 A%+=&F000 47810IFZ%AND4 A%+=&F00000 47820PROCcol(Z%,A%):NEXT 47830WHEN "T" 47840FORZ%=0TO15:A%=Z%<<4:PROCcol(Z%,A%ORA%<<8ORA%<<16):NEXT 47850OTHERWISE 47860FORZ%=0TO15:A%=(Z%AND7)/7*15+.2<<4:PROCcol(Z%,A%ORA%<<8ORA%<<16):NEXT 47870ENDCASE 47880WHEN 3 47890CASEm$ OF 47900WHEN "C" 47910PROCcol(0,0):PROCcol(1,&F0F000):PROCcol(2,&F000F0):PROCcol(3,&F0F0) 47920WHEN "R" 47930FORZ%=0TO3:PROCcol(Z%,palette%!(Z%<<2)AND&F0F0F0):NEXT 47940OTHERWISE 47950FORZ%=0TO3:A%=Z%*5<<4:PROCcol(Z%,A%ORA%<<8ORA%<<16):NEXT 47960ENDCASE 47970WHEN 1:PROCcol(0,0):PROCcol(1,&F0F0F0) 47980ENDCASE 47990ENDCASE 48010IFflex% THEN 48030ELSE 48040IFworkspace%<0 THEN 48050P%=END:[OPT 0:STR r13,P%+16:MOVS Pc,r14:]:CALLEND 48060END=END+32*1024+HIMEM-P%!16 48070ELSE 48090ENDIF 48100ENDIF 48110LOCAL ERROR 48120ON ERROR LOCAL:RESTORE ERROR:PROCSave:ERROR ERR,REPORT$+" internal ("+STR$ERL+")" 48130SYS"Hourglass_LEDs",3 48140ysamp%=1:nl%()=0:step%=4*(col+1) 48150addr%=base%*size%:rowstep%=xwords%*size%:colstep%=1:dist%=xsp%-1 48160IFm=-3ORm=-5ORm=-6 dist%=dist%*2 48170IFm=-4ORm=-7 dist%=dist%*3 48180IFm=-8 dist%=dist%*4 48190IFrotate% THEN 48200odist%=dist%:SWAP colstep%,rowstep%:SWAP hflip%,vflip% 48210IFrotate%=1 THEN 48220addr%+=(ysp%-1)*colstep%:colstep%=-colstep%:dist%=(ysp%-1)*colstep% 48230ELSE 48240addr%+=dist%:rowstep%=-rowstep%:dist%=(ysp%-1)*colstep% 48250ENDIF 48260IFm=-3ORm=-5ORm=-6 colstep%=colstep%/2:rowstep%=rowstep%*2 48270IFm=-4ORm=-7 colstep%=colstep%/3:rowstep%=rowstep%*3 48280IFm=-8 colstep%=colstep%/4:rowstep%=rowstep%*4 48290ENDIF 48300IFhflip% THEN 48310addr%+=dist%:dist%=-dist%:colstep%=-colstep% 48320ENDIF 48330IFvflip% THEN 48340IFrotate% THEN 48350addr%+=odist%*rotate%:rowstep%=-rowstep% 48360ELSE 48370addr%+=(ysp%-1)*rowstep%:rowstep%=-rowstep% 48380ENDIF 48390ENDIF 48400outlim%=(base%+xwords%*Y%)*size%-1:oddcolstep%=-colstep%:oddstep%=-step% 48410IForder% PROCadjustpalette(1/ydiv%/xdiv%,0) 48420IFsy%=y% AND sx%=x% AND range%=FALSE AND sharpen%=FALSE AND equal%=FALSE THEN 48430IFdither% THEN 48440FORyr%=0 TO y%-1:SYShour%,yr%*100DIVy%:IFaddr%>outlim% PROCflushoutput 48450W%=EVAL(r$+"(cl%())"):cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep% 48460IFyr%AND1 THEN 48470CALLfs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B% 48480ELSE 48490A%+=dist%:CALLfs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B% 48500ENDIF 48510NEXT 48520ELSE 48530I%=step%:FORyr%=0TOy%-1:SYShour%,yr%*100DIVy%:IFaddr%>outlim% PROCflushoutput 48540W%=EVAL(r$+"(cl%())"):B%=x%:A%=addr%:addr%+=rowstep%:CALLfs%,colstep%,cl%(1,0),I%,A%,I%,B% 48550NEXT 48560ENDIF 48570ELSE 48580IFequal% THEN 48590PROCrewind:Havg%=SUM(vals%())/256/(col+1):DIM new%(256,col) 48600FORB%=0TOcol:R%=0:Hint%=0:FORZ%=0TO256:L%=R%:Hint%+=vals%(Z%,B%) 48610WHILEHint%>Havg%:Hint%-=Havg%:R%+=1:ENDWHILE 48620new%(Z%,B%)=(L%+R%)/2*F/256 48630NEXT:NEXT 48640ENDIF 48650IFsharpen% THEN 48660IForder% THEN 48670yread%=sy%-1:W%=EVAL(r$+"(rm1%())"):IFequal% PROCfit2(rm1%()) 48680FORB%=0TOcol:rm1%(0,B%)=rm1%(1,B%):rm1%(sx%+1,B%)=rm1%(sx%,B%):NEXT 48690ELSE 48700yread%=y%-1:PROCscaledpixelrow(rm1%()):IFequal% PROCfit(rm1%()) 48710FORB%=0TOcol:rm1%(0,B%)=rm1%(1,B%):rm1%(x%+1,B%)=rm1%(x%,B%):NEXT 48720ENDIF 48730rm2%()=rm1%() 48740ENDIF 48750IForder% THEN 48760FORyr%=0 TO y%-1 48770SYShour%,yr%*100DIVy%:IFaddr%>outlim% PROCflushoutput 48780IFsy%=y% THEN 48790PROCsharppixelrow(cl%()) 48800ELSE 48810ysamp%-=1:IFysamp%=0 PROCsharppixelrow(xl%()):ysamp%=ymul% 48820IFydiv%=1 THEN 48830cl%()=xl%() 48840ELSE 48850IFysamp%>=ydiv% THEN 48860ysamp%-=ydiv%:cl%()=xl%()*ydiv% 48870ELSE 48880cl%()=xl%()*ysamp%:Y%=ydiv%-ysamp%:ysamp%=0 48890REPEAT 48900IFysamp%=0 PROCsharppixelrow(xl%()):ysamp%=ymul% 48910IFysamp%>Y% THEN 48920ysamp%-=Y%:xl2%()=xl%()*Y%:cl%()=cl%()+xl2%():Y%=0 48930ELSE 48940Y%-=ysamp%:xl2%()=xl%()*ysamp%:cl%()=cl%()+xl2%():ysamp%=0 48950ENDIF 48960UNTIL Y%=0 48970ENDIF 48980ysamp%+=1 48990ENDIF 49000ENDIF 49010cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep% 49020IFyr%AND1 THEN 49030CALLfs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B% 49040ELSE 49050A%+=dist%:CALLfs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B% 49060ENDIF 49070NEXT 49080ELSE 49090FORyr%=0 TO y%-1 49100SYShour%,yr%*100DIVy%:IFaddr%>outlim% PROCflushoutput 49110IFsharpen% THEN 49120IFyread% yread%-=1:PROCscaledpixelrow(rm%()):IFequal% PROCfit(rm%()) 49130FORB%=0TOcol:rm%(0,B%)=rm%(1,B%):rm%(x%+1,B%)=rm%(x%,B%):NEXT 49140CALL sharp%,cl%(1,0),rm%(1,0),rm1%(1,0),rm2%(1,0),totvals% 49150SWAP rm2%(),rm1%():rm1%()=rm%() 49160ELSE 49170PROCscaledpixelrow(cl%()):IFequal% PROCfit(cl%()) 49180ENDIF 49190cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep% 49200IFyr%AND1 THEN 49210CALLfs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B% 49220ELSE 49230A%+=dist%:CALLfs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B% 49240ENDIF 49250NEXT 49260ENDIF 49270ENDIF 49280cputime%=TIME-cputime% 49290PROCSave 49300=0 49310DEF PROCsrchdevlist 49320[OPT Z 49350CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 49360MOV R0,R4,LSR #(bits-k%):CMP R0,#1<<k%:MOVCS R0,#(1<<k%)-1 49370CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 49380MOV R3,R5,LSR #(bits-k%):CMP R3,#1<<k%:MOVCS R3,#(1<<k%)-1:ORR R0,R0,R3,LSL #k% 49390CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 49400MOV R3,R6,LSR #(bits-k%):CMP R3,#1<<k%:MOVCS R3,#(1<<k%)-1:ORR R0,R0,R3,LSL #k%*2 49430STMFD SP !,{R8,R9,R10,R11} 49440LDR r3,ictloc 49450LDR r2,[r3,r0,LSL #2] 49470MOV r14,r2,lsr #24 49480CMP r14,#4 49490ADDCC r2,r3,r0,lsl #2 49500BICCS r2,r2,#&ff000000 49510LDRB r0,[r2],#1 49520SUBS r14,r14,#1 49530BEQ gotit 49550ADD r3,r0,r0,lsl #1 49560ADD r3,r7,r3,lsl #2 49570LDMIA r3,{r8,r9,r10} 49580SUBS r8,r8,r4 49590RSBMI r8,r8,#0 49600MOV r8,r8,lsr #bits/2 49610SUBS r9,r9,r5 49620RSBMI r9,r9,#0 49630MOV r9,r9,lsr #bits/2 49640SUBS r10,r10,r6 49650RSBMI r10,r10,#0 49660MOV r10,r10,lsr #bits/2 49670MUL r3,r8,r8 49680MUL r11,r9,r9 49690ADD r11,r11,r11,LSL #2 49700ADD r3,r3,r3,LSL #1 49710ADD r3,r3,r11,LSL #1 49720MLA r11,r10,r10,r3 49740.srchlist 49750LDRB r3,[r2],#1 49760ADD R8,R3,R3,LSL #1 49770ADD R8,R7,R8,LSL #2 49780LDMIA R8,{R8,R9,R10} 49790SUBS R9,R5,R9 49800RSBMI R9,R9,#0 49810MOV R3,R9,LSR #bits/2 49820MUL R9,R3,R3 49830ADD r9,r9,r9,LSL #2 49840CMP R11,R9,LSL #1 49850BCC srchquick 49860SUBS R8,R4,R8 49870RSBMI R8,R8,#0 49880MOV R3,R8,LSR #bits/2 49890MUL R8,r3,r3 49900ADD r8,r8,r8,LSL #1 49910ADD r8,r8,r9,LSL #1 49920SUBS R10,R6,R10 49930RSBMI R10,R10,#0 49940MOV R3,R10,LSR #bits/2 49950MLA R10,R3,R3,R8 49960CMP R10,R11 49970MOVCC R11,R10 49980LDRCCB R0,[r2,#-1] 49990.srchquick 50000SUBS R14,R14,#1 50010BNE srchlist 50020.gotit 50030ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2 50040LDMIA R3,{R8,R9,R10} 50050SUB R4,R4,R8:SUB R5,R5,R9:SUB R6,R6,R10 50060LDMFD r13!,{R8,R9,R10,R11} 50070] 50080ENDPROC 50090DEF PROCgetoutput(A%,E%,B%,RETURN C%) 50100IFA%>max% AND rotate%=FALSE AND vflip%=FALSE THEN 50110C%=max%DIVB%+1:A%=xwords%*C%+E%:first%=TRUE:o%=OPENOUTf$ 50120ELSE 50130A%+=E% 50140ENDIF 50150IFspritearea%<0 THEN 50160ram%=FNcreatearea(A%):IFram%=-1 ram%=FNdim(A%) 50170ELSE 50180ram%=spritearea% 50190ENDIF 50200!ram%=A% 50210ENDPROC 50230DEF FNcreatearea(size%) 50240LOCAL ERROR 50250ON ERROR LOCAL:=-1 50260SYS &20066,0,-1,size%,-1,%10000000,size%,0,0,"ChangeFSI sprite" TO ,areanumber%,,areabase%;V% 50270IFV%AND1 THENareanumber%=0:=-1 50330SYS "OS_ReadDynamicArea",areanumber% TO ,areasize% 50340IF areasize%<size% PROCremovearea:ERROR 42,"Couldn't create area" 50350=areabase% 50370DEF PROCremovearea 50380IFareanumber% SYS "OS_DynamicArea",1,areanumber%:areanumber%=0 50390ENDPROC 50410DEF FNcachedim(size%) 50420LOCAL ERROR 50430ON ERROR LOCAL:VDU4,30:PRINTREPORT$:VDU5=-1 50440SYS &20066,0,-1,size%,-1,%10000000,size%,0,0,"ChangeFSI cache" TO ,cacheareanumber%,,cacheareabase%;V% 50450IFV%AND1 THENcacheareanumber%=0:=-1 50460SYS "OS_ReadDynamicArea",cacheareanumber% TO ,cacheareasize% 50470IF cacheareasize%<size% PROCremovecachearea:ERROR 42,"Couldn't create area" 50480=cacheareabase% 50500DEF PROCremovecachearea 50510IFcacheareanumber% SYS "OS_DynamicArea",1,cacheareanumber%:cacheareanumber%=0 50520ENDPROC 50540DEF PROCflushoutput 50550IFspritearea%<0 ANDoksave% THEN 50560A%=base%:IFfirst% A%=ram%+4:first%=FALSE 50570SYS12,2,o%,A%,addr%DIVsize%-A% 50580ENDIF 50590addr%=base%*size% 50600ENDPROC 50610DEF PROCclose 50620IFc% IFflag=3600 SYS"PhotoCD_Close",pcdh%,1 50630IFc% CLOSE#c%:c%=0:IFscrapf% scrapf%=FALSE:OSCLI"Remove <Wimp$Scrap>" 50640IFcc% CLOSE#cc%:cc%=0 50650IFccc% CLOSE#ccc%:ccc%=0 50660PROCremovecachearea 50670ENDPROC 50680DEF PROCSave 50690PROCclose 50700CASE m OF 50710WHEN -1:IFspritearea%<0 ANDoksave% THEN 50720IFo% PROCflushoutput ELSESYS"OS_File",10,f$,&004,,ram%,ram%+sz% 50730ENDIF 50740WHEN -2:o%=OPENOUTf$:BPUT#o%,pnm$ 50750CASE pnm$ OF 50760WHEN "P1" 50770BPUT#o%,"# "+f$+".pbm (options "+oname$+")" 50780BPUT#o%,STR$xsp%+" "+STR$ysp% 50790FORY%=0TOysp%-1:B%=base%+Y%*xwords% 50800FORX%=0TOxsp%-1:IFB%?(X%>>3)AND(1<<(X%AND7)) BPUT#o%,"1"; ELSEBPUT#o%,"0"; 50810NEXT 50820BPUT#o%,"" 50830NEXT 50840WHEN "P4" 50850BPUT#o%,"# "+f$+".pbm (options "+oname$+") binary encoded" 50860BPUT#o%,STR$xsp%+" "+STR$ysp% 50870FORX%=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 50880FORY%=0TOysp%-1:B%=base%+Y%*xwords% 50890FORX%=0TOxsp%-1STEP8:BPUT#o%,code%?(B%?(X%>>3)):NEXT 50900NEXT 50910WHEN "P2" 50920BPUT#o%,"# "+f$+".pgm (options "+oname$+")" 50930BPUT#o%,STR$xsp%+" "+STR$ysp% 50940BPUT#o%,"15" 50950FORY%=0TOysp%-1:B%=base%+Y%*xwords% 50960FORX%=0TOxsp%-1:C%=B%?(X%>>1):IFX%AND1 C%=C%>>4 ELSEC%=C%AND15 50970BPUT#o%," "+STR$C%; 50980NEXT 50990BPUT#o%,"" 51000NEXT 51010WHEN "P5" 51020BPUT#o%,"# "+f$+".pgm (options "+oname$+") binary encoded" 51030BPUT#o%,STR$xsp%+" "+STR$ysp% 51040BPUT#o%,"15" 51050FORY%=0TOysp%-1:B%=base%+Y%*xwords% 51060FORX%=0TOxsp%-1:C%=B%?(X%>>1):IFX%AND1 C%=C%>>4 ELSEC%=C%AND15 51070BPUT#o%,C% 51080NEXT 51090NEXT 51100ENDCASE 51110CLOSE#o%:o%=0 51120IFpnm$="P2"ORpnm$="P1" OSCLI"Settype "+f$+" &FFF" 51130WHEN -3:o%=OPENOUTf$:BPUT#o%,pnm$ 51140BPUT#o%,"# "+f$+".pcm (options "+oname$+") binary encoded 15bpp (5bits r,g,b)" 51150BPUT#o%,STR$xsp%+" "+STR$ysp% 51160BPUT#o%,"31" 51170SYS12,2,o%,ram%,xsp%*ysp%*2 51180CLOSE#o%:o%=0 51190WHEN -4:o%=OPENOUTf$:IFpnm$="IRLAM"THEN 51200BPUT#o%,"Irlam 24: "+STR$xsp%+" "+STR$ysp% 51210FORY%=0TOysp%-1:B%=ram%+Y%*xwords% 51220FORX%=0TOxsp%*3-1STEP3:BPUT#o%,B%?X%:NEXT 51230B%+=1:FORX%=0TOxsp%*3-1STEP3:BPUT#o%,B%?X%:NEXT 51240B%+=1:FORX%=0TOxsp%*3-1STEP3:BPUT#o%,B%?X%:NEXT 51250NEXT 51260ELSE 51270BPUT#o%,pnm$ 51280IFpnm$="P6" THEN 51290BPUT#o%,"# "+f$+".ppm (options "+oname$+") binary encoded 24bpp r,g,b" 51300ELSE 51310BPUT#o%,"# "+f$+".ppm (options "+oname$+") "+STR$(p6bits*3)+"bpp r,g,b" 51320ENDIF 51330BPUT#o%,STR$xsp%+" "+STR$ysp% 51340BPUT#o%,STR$(2^p6bits-1) 51350IFpnm$="P6" THEN 51360SYS12,2,o%,ram%,xsp%*ysp%*3 51370ELSE 51380FORY%=0TOysp%-1:B%=ram%+Y%*xwords% 51390FORX%=0TOxsp%-1:C%=B%!(X%*3):BPUT#o%," "+STR$(C%AND255)+" "+STR$((C%>>8)AND&FF)+" "+STR$((C%>>16)AND255); 51400NEXT 51410BPUT#o%,"" 51420NEXT 51430ENDIF 51440ENDIF 51450CLOSE#o%:o%=0 51460IFpnm$="P3" OSCLI"Settype "+f$+" &FFF" 51470WHEN -5:o%=OPENOUTf$:BPUT#o%,pnm$ 51480BPUT#o%,"# "+f$+".pcm (options "+oname$+") binary encoded 15bpp (5bits y,u,v)" 51490BPUT#o%,STR$xsp%+" "+STR$ysp% 51500BPUT#o%,"31 27 21" 51510SYS12,2,o%,ram%,xsp%*ysp%*2 51520CLOSE#o%:o%=0 51530OTHERWISE 51540IFncol=1ANDm$="T" THEN 51550FORX%=(xsp%*4-1)DIV8*8+6TO6STEP-8 51560SYS&2e,&12e,ram%,oname$,X% 51570SYS&2e,&12e,ram%,oname$,X% 51580NEXT 51590ENDIF 51600IFspritearea%<0 ANDoksave% THEN 51610IFo% PROCflushoutput ELSESYS&2e,&10c,ram%,f$ 51620ENDIF 51630ENDCASE 51640IFo% CLOSE#o%:o%=0:OSCLI"settype "+f$+" &ff9":PROCremovearea 51650SYS"Hourglass_Off" 51660ENDPROC 51670DEFPROCdefpal 51680FORC%=0TO255 51690r%(C%)=(C%AND7 OR (C%AND16)>>1)/15*F 51700g%(C%)=(C%AND3 OR (C%AND&60)>>3)/15*F 51710b%(C%)=(C%AND3 OR (C%AND8)>>1 OR (C%AND128)>>4)/15*F 51720NEXT 51730ENDPROC 51740DEFPROCdefpal2 51750r%(0)=F:g%(0)=F:b%(0)=F 51760ENDPROC 51770DEFPROCdefpal4 51780r%()=15,10,5,0:FORC%=0TO3:r%(C%)=r%(C%)/15*F:NEXT 51790g%()=r%():b%()=r%() 51800ENDPROC 51810DEFPROCdefpal16 51820r%()=15,13,11,9,7,5,3,0,0,14, 0,13,14,5,15, 0 51830g%()=15,13,11,9,7,5,3,0,4,14,12, 0,14,8,11,10 51840b%()=15,13,11,9,7,5,3,0,9, 0, 0, 0,11,0, 0,15 51850FORC%=0TO15:r%(C%)=r%(C%)/15*F:g%(C%)=g%(C%)/15*F:b%(C%)=b%(C%)/15*F:NEXT 51860ENDPROC 51870DEFPROCipal63 51880PTR#c%=&38:DIM rpal%(15),gpal%(15),bpal%(15) 51890FORC%=0TO15:D%=BGET#c% 51900rpal%(C%)=BGET#c%>>4 AND 7 51910gpal%(C%)=BGET#c%>>4 AND 3 51920bpal%(C%)=BGET#c%>>4 AND 7 51930D%=FNW:NEXT 51940FORC%=0TO255 51950r%(C%)=(rpal%(C%AND15)OR(C%AND16)>>1)/15*F 51960g%(C%)=(gpal%(C%AND15)OR(C%AND&60)>>3)/15*F 51970b%(C%)=(bpal%(C%AND15)OR(C%AND128)>>4)/15*F 51980NEXT 51990ENDPROC 52000DEFPROCipal(D%) 52010PTR#c%=&38 52020FORC%=0TOD%-1:D%=BGET#c% 52030r%(C%)=(BGET#c%>>4)/15*F 52040g%(C%)=(BGET#c%>>4)/15*F 52050b%(C%)=(BGET#c%>>4)/15*F 52060D%=FNW:NEXT 52070ENDPROC 52080DEF PROCnewropal(D%) 52090PTR#c%=&38 52100FORC%=0TOD%-1:D%=FNW 52110r%(C%)=(D%AND255)/255*F 52120g%(C%)=(D%>>8AND255)/255*F 52130b%(C%)=(D%>>16AND255)/255*F 52140D%=FNW:NEXT 52150ENDPROC 52160DEF PROCnopal 52170FORC%=0TO255:r%(C%)=C%/255*F:NEXT:g%()=r%():b%()=r%() 52180ENDPROC 52190DEF PROCcol(A%,B%) 52200B%=B%<<8ORB%<<4OR&10:pal%!(A%*8)=B%:pal%!(A%*8+4)=B% 52210ENDPROC 52220DEF FNbits(A%) 52230IFA%=1 THEN="1 bit per pixel" ELSE=STR$A%+" bits per pixel" 52240DEF FNfits 52250LOCALZ%,s$ 52260FORZ%=1TO80:s$+=CHR$BGET#c%:NEXT 52270=s$ 52280DEF FNuc(a$) 52290LOCALZ%,z$,b$ 52300FORZ%=1TOLENa$ 52310z$=MID$(a$,Z%,1) 52320IFz$>="a"IFz$<="z" z$=CHR$(ASCz$-32) 52330b$+=z$:NEXT 52340=b$ 52350DEF FNdim(A%) 52360LOCAL B% 52370IFflex% THEN 52380B%=nextlocation%:A%=A%+3ANDNOT3:nextlocation%+=A% 52390SYS"Wimp_SlotSize",-1,-1 TO currentslot% 52400IFcurrentslot%+&8000<nextlocation% THEN 52410SYS "Wimp_SlotSize",nextlocation%-&8000,-1 TO currentslot% 52420IFcurrentslot%+&8000<nextlocation% ERROR 42,"Can't get enough memory to process image" 52430ENDIF 52440ELSE 52450IFworkspace%<0 THEN 52460DIM B% A% 52470ELSE 52480B%=workspace%:workspace%+=A%+3ANDNOT3:IFworkspace%>worklimit% ERROR42,"Not enough workspace" 52490ENDIF 52500ENDIF 52510=B% 52530DEF FNW=FNW1(c%) 52540DEF FNW1(c%)=BGET#c% OR BGET#c%<<8 OR BGET#c%<<16 OR BGET#c%<<24 52560DEF FNHW=BGET#c% OR BGET#c%<<8 52580DEF FNbeHW=BGET#c%<<8 OR BGET#c% 52600DEF FNbeW=BGET#c%<<24 OR BGET#c%<<16 OR BGET#c%<<8 OR BGET#c% 52620DEF FNtiff(T%) 52630CASE T% OF 52640WHEN 1,7:=BGET#c% 52650WHEN 2:LOCALs$,t$:REPEATs$+=t$:t$=CHR$BGET#c%:UNTILt$=CHR$0:=s$ 52660WHEN 3:IFbigendian THEN=BGET#c%<<8 OR BGET#c% ELSE=BGET#c% OR BGET#c%<<8 52670WHEN 4,9:IFbigendian THEN=FNbeW ELSE=FNW1(c%) 52680WHEN 6:=(BGET#c%<<24)>>24 52690WHEN 8:=(FNtiff(3)<<16)>>16 52700ENDCASE 52710ERROR 42,"Silly TIFF tag:"+STR$T% 52720DEF PROCnextstrip 52730rowstogo%=striprows% 52740stripptr+=1:PTR#c%=st%(stripptr) 52750IFcompression=5 THEN 52760!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk% 52770!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0 52780ENDIF 52790IFcompression=5 OR compression=32773 THEN 52800!incacheptr=datacache%:!numlefttogo=cache% 52810SYS12,4,c%,datacache%,cache% 52820ENDIF 52830ENDPROC 52840DEF PROCwatford(wtsx%,RETURN rep%,RETURN wt%,X%,c%) 52850CALLrlexpand%,wtsx%,rep%,wt%,X% 52860REPEAT C%=BGET#c%:CASE C%>>6 OF 52870WHEN 0:?X%=C%:X%+=1:wt%=C% 52880WHEN 1:wt%-=1:rep%=C%AND63:CALLrlexpand%,wtsx%,rep%,wt%,X% 52890WHEN 2:rep%=C%AND63:CALLrlexpand%,wtsx%,rep%,wt%,X% 52900WHEN 3:wt%+=1:rep%=C%AND63:CALLrlexpand%,wtsx%,rep%,wt%,X% 52910ENDCASE 52920UNTILX%=wtsx% 52930ENDPROC 52940DEF PROCwatfordcache(wtsx%,RETURN rep%,RETURN wt%,X%) 52950CALLrlexpand%,wtsx%,rep%,wt%,X% 52960REPEAT C%=USRbytefromcache%:CASE C%>>6 OF 52970WHEN 0:?X%=C%:X%+=1:wt%=C% 52980WHEN 1:wt%-=1:rep%=C%AND63:CALLrlexpand%,wtsx%,rep%,wt%,X% 52990WHEN 2:rep%=C%AND63:CALLrlexpand%,wtsx%,rep%,wt%,X% 53000WHEN 3:wt%+=1:rep%=C%AND63:CALLrlexpand%,wtsx%,rep%,wt%,X% 53010ENDCASE 53020UNTILX%=wtsx% 53030ENDPROC 53040DEF PROCreduce(RETURN A%,RETURN B%) 53050LOCAL C%,D%:C%=A%:D%=B% 53060REPEAT IFC%<D% SWAP C%,D% 53070C%=C%MODD% 53080UNTILC%=0 53090A%=A%DIVD%:B%=B%DIVD% 53100ENDPROC 53110DEF PROCreadpixelrow(z%()) 53120IFrows% THEN 53130rows%-=1:IFsx%=x% THEN 53140W%=EVAL(r$+"(z%())") 53150ELSE 53160W%=EVAL(r$+"(xp%())"):CALLxsample%,xmul%,xdiv%,z%(1,0),xp%(1,0),x% 53170ENDIF 53180ELSE 53190z%()=0 53200ENDIF 53210ENDPROC 53220DEF PROCsharppixelrow(z%()) 53230IFrows% THEN 53240rows%-=1:IFsx%=x% THEN 53250IFsharpen% PROCsharp(z%()) ELSEW%=EVAL(r$+"(z%())"):IFequal% PROCfit2(z%()) 53260ELSE 53270IFsharpen% PROCsharp(xp%()) ELSEW%=EVAL(r$+"(xp%())"):IFequal% PROCfit2(xp%()) 53280CALLxsample%,xmul%,xdiv%,z%(1,0),xp%(1,0),x% 53290ENDIF 53300ELSE 53310z%()=0 53320ENDIF 53330ENDPROC 53340DEF PROCsharp(z%()) 53350yread%-=1:IFyread% W%=EVAL(r$+"(rm%())"):IFequal% PROCfit2(rm%()) 53360FORB%=0TOcol:rm%(0,B%)=rm%(1,B%):rm%(sx%+1,B%)=rm%(sx%,B%):NEXT 53370CALL sharp%,z%(1,0),rm%(1,0),rm1%(1,0),rm2%(1,0),totvals2% 53380SWAP rm2%(),rm1%():rm1%()=rm%() 53390ENDPROC 53400DEF PROCscaledpixelrow(z%()) 53410IFsy%=y% THEN 53420PROCreadpixelrow(z%()) 53430ELSE 53440ysamp%-=1:IFysamp%=0 PROCreadpixelrow(xl%()):ysamp%=ymul% 53450IFydiv%=1 THEN 53460z%()=xl%() 53470ELSE 53480IFysamp%>=ydiv% THEN 53490ysamp%-=ydiv%:z%()=xl%()*ydiv% 53500ELSE 53510LOCALY%:z%()=xl%()*ysamp%:Y%=ydiv%-ysamp%:ysamp%=0 53520REPEAT 53530IFysamp%=0 PROCreadpixelrow(xl%()):ysamp%=ymul% 53540IFysamp%>Y% THEN 53550ysamp%-=Y%:xl2%()=xl%()*Y%:z%()=z%()+xl2%():Y%=0 53560ELSE 53570Y%-=ysamp%:xl2%()=xl%()*ysamp%:z%()=z%()+xl2%():ysamp%=0 53580ENDIF 53590UNTIL Y%=0 53600ENDIF 53610ysamp%+=1 53620ENDIF 53630ENDIF 53640ENDPROC 53650DEF PROCfit(z%()) 53660CALLhistequal%,z%(1,0),new%(0,0),x% 53670ENDPROC 53680DEF PROCfit2(z%()) 53690CALLhistequal%,z%(1,0),new%(0,0),sx% 53700ENDPROC 53710DEF PROCadjustpalette(mul,sub) 53720IFmul=1 AND sub=0 ENDPROC 53730FORC%=0TO255 53740r%(C%)=(r%(C%)-sub)*mul+1:g%(C%)=(g%(C%)-sub)*mul+1:b%(C%)=(b%(C%)-sub)*mul+1 53750NEXT 53760IFham THEN 53770FORC%=0TO15*4STEP4:ltable!C%=(ltable!C%-sub)*mul+1:NEXT 53780ENDIF 53790IFinput>400 THEN 53800FORC%=0TO255 53810rpal%(C%)=(rpal%(C%)-sub)*mul+1:gpal%(C%)=(gpal%(C%)-sub)*mul+1 53820bpal%(C%)=(bpal%(C%)-sub)*mul+1:table%(C%)=(table%(C%)-sub)*mul+1 53830NEXT 53840ENDIF 53850ENDPROC 53860DEF PROCcachesize(A%) 53870SYS&20023,"ChangeFSI$Cache",A%,-1 TO,,Z 53880IFZ<>0 THEN 53890SYS35,"ChangeFSI$Cache",A%,20 TO,,Z:A%?Z=13:cache%=VAL$A% 53900IFINSTR($A%,"K")ORINSTR($A%,"k") cache%=cache%*1024 53910ELSE 53920cache%=128*1024 53930ENDIF 53940ENDPROC 53950DEF PROCrefill 53960IFstriprows%>0 PROCnextstrip 53970SYS12,4,c%,datacache%,cache%:rowstogo%=cacherows%:buff%=datacache% 53980IFinput=24 IFrbo%>=0 rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo% 53990ENDPROC 54000DEF PROCrefillpcd 54010IFpcdblk%!4>=sy% ENDPROC 54020IFpcdblk%!12>=sy% pcdblk%!12=sy% 54040SYS"PhotoCD_GetBlock",pcdh%,,pcdblk%,datacache%,pcdindex%,,,pcdcache%,pcdcachesize% 54050rowstogo%=cacherows%:buff%=datacache%:pcdblk%!4+=cacherows%:pcdblk%!12+=cacherows% 54060rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo% 54070ENDPROC 54090DEF FN8(z%()) 54100CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),buff%:buff%+=rowbytes% 54110rowstogo%-=1:IFrowstogo%=0 PROCrefill 54120=TRUE 54140DEF FN16(z%()) 54150CALLmappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),buff%,buff% 54160buff%+=rowbytes%:rowstogo%-=1:IFrowstogo%=0 PROCrefill 54170=TRUE 54190DEF FN24(z%()) 54200CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 54210rb%+=rowbytes%:gb%+=rowbytes%:bb%+=rowbytes% 54220rowstogo%-=1:IFrowstogo%=0 PROCrefill 54230=TRUE 54250DEF FN300(z%()) 54260SYS12,4,cc%,pbuff%,sx%:CALLmappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),pbuff%,buff% 54270buff%+=rowbytes%:rowstogo%-=1:IFrowstogo%=0 PROCrefill 54280=TRUE 54300DEF FN400(z%()) 54310CALLreadline%,plbytes%,rep%,pix%,plbuff% 54320CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 54330=TRUE 54350DEF FN500(z%()) 54360CALL LZWdecode%,table%(0),c%,plbuff%,sx% 54370CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 54380=TRUE 54400DEF FN800(z%()) 54410PROCwatfordcache(wtsx%,rep%,wt%,plbuff%) 54420CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 54430=TRUE 54450DEF FN801(z%()) 54460PROCwatford(wtsx1%,rep1%,wt1%,buff%,c%) 54470PROCwatford(wtsx2%,rep2%,wt2%,wtsx1%,cc%) 54480PROCwatford(wtsx3%,rep3%,wt3%,wtsx2%,ccc%) 54490CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 54500=TRUE 54520DEF FN901(z%()) 54530SYS12,4,c%,rb%,sx%:SYS12,4,cc%,gb%,sx%:SYS12,4,ccc%,bb%,sx% 54540CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 54550=TRUE 54570DEF FN902(z%()) 54580CALLunpack%,buff%:CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 54590buff%+=rowbytes%:rowstogo%-=1:IFrowstogo%=0 PROCrefill 54600=TRUE 54620DEF FN1000(z%()) 54630X%=buff%:IFrep%>0 C%=?pa%:CALLrlexpand%,pasx%,rep%,C%,X%:pa%+=1 54640IFrep2%>0 C%=?pa%:CALLrlexpand%,pasx%,rep2%,C%,X%:pa%+=1 54650REPEAT C%=BGET#c%:IFC%=0 THEN 54660rep%=BGET#c%:C%=?pa%:CALLrlexpand%,pasx%,rep%,C%,X%:IFrep%=0 pa%+=1 54670ELSE 54680rep2%=C%AND15:rep%=C%>>4:IFrep% C%=?pa%:CALLrlexpand%,pasx%,rep%,C%,X%:IFrep%=0 pa%+=1 54690IFX%<pasx% IFrep2% C%=?pa%:CALLrlexpand%,pasx%,rep2%,C%,X%:IFrep2%=0 pa%+=1 54700ENDIF 54710UNTILX%=pasx% 54720CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),buff% 54730=TRUE 54750DEF FN1001(z%()) 54760X%=buff%:IFrep%>0 C%=?pa%:CALLrlexpand%,pasx%,rep%,C%,X%:pa%+=1 54770REPEAT rep%=BGET#c%:C%=?pa%:CALLrlexpand%,pasx%,rep%,C%,X%:IFrep%=0 pa%+=1 54780UNTILX%=pasx%:CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),buff% 54790=TRUE 54810DEF FN1100(z%()) 54820CALLreadline%,plbytes%,rep%,pix%,plbuff% 54830CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 54840=TRUE 54860DEF FN1400(z%()) 54870IFvrep% THEN 54880vrep%-=1 54890ELSE 54900G%=buff%:FORX%=1TOplanes%:G%+=rowbytes%:F%=G%-rowbytes% 54910REPEAT C%=BGET#c%:IFC%=0 THEN 54920C%=BGET#c%:IFC%=0 THEN 54930C%=BGET#c%:vrep%=BGET#c%-1 54940ELSE 54950D%=F%:SYS12,4,c%,F%,patlen%:F%+=patlen% 54960IFC%>1 FORN%=2TOC%:FORE%=0TOpatlen%-1:F%?E%=D%?E%:NEXT:F%+=patlen%:NEXT 54970ENDIF 54980ELSE 54990IFC%=128 THEN 55000C%=BGET#c%:SYS12,4,c%,F%,C%:F%+=C% 55010ELSE 55020?F%=(C%AND&80)<>0:FORE%=F%+1TOF%+(C%AND&7F):?E%=?F%:NEXT:F%+=C%AND&7F 55030ENDIF 55040ENDIF:UNTILF%>=G%:NEXT 55050CALLplancnv%,rowbytes%,buff%,pbuff% 55060ENDIF 55070CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff% 55080=TRUE 55100DEF FN1501(z%()) 55110CALLreadiff%,rowbytes%,plbuff%:rowstogo%-=1:IFrowstogo%=0 PROCnextstrip 55120CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 55130=TRUE 55150DEF FN1505(z%()) 55160CALL LZWdecode%,table%(0),c%,plbuff%,rowbytes% 55170rowstogo%-=1:IFrowstogo%=0 PROCnextstrip 55180CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 55190=TRUE 55210DEF FN1515(z%()) 55220CALL LZWdecode%,table%(0),c%,plbuff%,rowbytes% 55230rowstogo%-=1:IFrowstogo%=0 PROCnextstrip 55240CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 55250=TRUE 55270DEF FN1600(z%()) 55280CALLplancnv%,realrowbytes%,buff%,pbuff%:buff%+=rowbytes% 55290CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff% 55300rowstogo%-=1:IFrowstogo%=0 PROCrefill 55310=TRUE 55330DEF FN1601(z%()) 55340FORX%=0TOplanes%-1:F%=plbuff%+X%*rowbytes%:CALLreadiff%,rowbytes%,F%:NEXT 55350IFmasking% CALLreadiff%,rowbytes%,pbuff% 55360CALLplancnv%,rowbytes%,plbuff%,pbuff% 55370CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff% 55380=TRUE 55400DEF FN1850(z%()) 55410CALLreadiff%,rowbytes%,plbuff% 55420CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 55430=TRUE 55450DEF FN1851(z%()) 55460CALLreadiff%,rowbytes%,plbuff% 55470CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 55480=TRUE 55500DEF FN1900(z%()) 55510CALLreadline%,plbytes%,rep%,pix%,plbuff% 55520CALLplancnv%,rowbytes%,plbuff%,pbuff% 55530CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff% 55540=TRUE 55560DEF FN2000(z%()) 55570X%=buff%:REPEAT 55580C%=BGET#c%:IFC%<128 THEN 55590C%+=1:SYS12,4,c%,X%,C%:X%+=C% 55600ELSE 55610F%=X%:?F%=BGET#c%:FORC%=C%TO128STEP-1:?X%=?F%:X%+=1:NEXT 55620ENDIF 55630UNTILX%=buff%+rowbytes% 55640CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),buff% 55650=TRUE 55670DEF FN2001(z%()) 55680X%=buff%:REPEAT 55690C%=BGET#c%:IFC%<128 THEN 55700C%=(C%+1)*2:SYS12,4,c%,X%,C%:X%+=C% 55710ELSE 55720F%=X%:SYS12,4,c%,X%,2:FORC%=C%TO128STEP-1:!X%=!F%:X%+=2:NEXT 55730ENDIF 55740UNTILX%=buff%+rowbytes% 55750CALLmappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),buff%,buff% 55760=TRUE 55780DEF FN2002(z%()) 55790X%=buff%:REPEAT 55800C%=BGET#c%:IFC%<128 THEN 55810C%=(C%+1)*step24:SYS12,4,c%,X%,C%:X%+=C% 55820ELSE 55830F%=X%:SYS12,4,c%,X%,step24:FORC%=C%TO128STEP-1:!X%=!F%:X%+=step24:NEXT 55840ENDIF 55850UNTILX%=buff%+rowbytes% 55860CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 55870=TRUE 55890DEF FN2250(z%()) 55900CALLmappix%,z%(1,0),rpal%(0),r%(0),gpal%(0),g%(0),bpal%(0),b%(0),table%(0),buff% 55910buff%+=rowbytes%:rowstogo%-=1:IFrowstogo%=0 PROCrefill 55920=TRUE 55940DEF FN2300(z%()) 55950IFclrfirst% FORX%=0TOsx%-1:rb%?X%=?back%:gb%?X%=back%?1:bb%?X%=back%?2:NEXT 55960IFvrep% THEN 55970vrep%-=1 55980ELSE 55990LOCAL ERROR 56000ON ERROR LOCAL vrep%=-1:CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%:=TRUE 56010E%=FALSE:REPEAT C%=BGET#c%:D%=BGET#c%:IFC%AND&40 D%=FNHW 56020CASE C%AND&3f OF 56030WHEN 1:E%=TRUE:vrep%=D%-1:IFvrep%<0 vrep%=FALSE 56040WHEN 2:ccol%=back%?D%:cbuf%=rb%+sx%*D%:IFD%=255 cbuf%=alpha% 56050WHEN 3:FORX%=0TOD%-1:cbuf%?X%=ccol%:NEXT:cbuf%+=D% 56060WHEN 5:SYS12,4,c%,cbuf%,D%+1:cbuf%+=D%+1:IFD%+1AND1 IFBGET#c% 56070WHEN 6:C%=FNHW:FORX%=0TOD%:cbuf%?X%=C%:NEXT:cbuf%+=D%+1 56080ENDCASE 56090UNTILE% 56100ENDIF 56110CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 56120=TRUE 56140DEF FN3000(z%()) 56150CALLmappix%,z%(1,0),rpal%(0),r%(0),gpal%(0),g%(0),bpal%(0),b%(0),table%(0),buff% 56160buff%+=rowbytes%:rowstogo%-=1:IFrowstogo%=0 PROCrefill 56170=TRUE 56180DEF FN3500(z%()) 56190=TRUE 56200DEF FN3600(z%()) 56210CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 56220rb%+=rowbytes%:gb%+=rowbytes%:bb%+=rowbytes% 56230rowstogo%-=1:IFrowstogo%=0 PROCrefillpcd 56240=TRUE 56250DEF FN3708(z%()) 56260A%=jpegspace%:jpegy%-=1:B%=jpegy%:rb%=USR(jpeg%+4) 56270CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb% 56280=TRUE 56290DEF FN3724(z%()) 56300A%=jpegspace%:jpegy%-=1:B%=jpegy%:rb%=USR(jpeg%+4):gb%=rb%+1:bb%=rb%+2 56310CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 56320=TRUE 56330DEF PROCrewind 56340rows%=sy%:CASE flag OF 56350WHEN 0:PTR#c%=st% 56360WHEN 100:PTR#c%=4 56370WHEN 200:PTR#c%=st%:rep%=0 56380WHEN 300:PTR#c%=st%:PTR#cc%=stcc% 56390WHEN 400:PTR#c%=st%:rep%=0 56400WHEN 500:FORI%=0TOclearcode%-1:table%(I%)=I%:NEXT:PTR#c%=st% 56410!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk% 56420!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0 56430WHEN 501:buff%=datacache% 56440WHEN 600:PTR#c%=&380 56450WHEN 700:PTR#c%=st% 56460WHEN 800:PTR#c%=0:rep%=0:wt%=0 56470WHEN 801:PTR#c%=0:PTR#cc%=0:PTR#ccc%=0:rep1%=0:wt1%=0:rep2%=0:wt2%=0:rep3%=0:wt3%=0 56480WHEN 900:PTR#c%=0 56490WHEN 901:PTR#c%=0:PTR#cc%=0:PTR#ccc%=0 56500WHEN 902:PTR#c%=st% 56510WHEN 1000:PTR#c%=st%:pa%=ctable%:rep%=0:rep2%=0 56520WHEN 1100:PTR#c%=st%:rep%=0 56530WHEN 1200:PTR#c%=1600 56540WHEN 1300:PTR#c%=0 56550WHEN 1301:PTR#c%=0:PTR#cc%=0:PTR#ccc%=0 56560WHEN 1400:PTR#c%=st%:vrep%=0 56570WHEN 1500:PTR#c%=st%(0):rowstogo%=striprows%:stripptr=0 56580IFcompression=5 THEN 56590!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk% 56600!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0 56610ENDIF 56620WHEN 1600:PTR#c%=st% 56630WHEN 1700:PTR#c%=16 56640WHEN 1800,1850:PTR#c%=st% 56650WHEN 1900:PTR#c%=128:rep%=-1 56660WHEN 2000:PTR#c%=st% 56670WHEN 2100:PTR#c%=7 56680WHEN 2200:PTR#c%=st% 56690WHEN 2250:PTR#c%=st% 56700WHEN 2300:PTR#c%=st%:vrep%=0 56710WHEN 2400:PTR#c%=st% 56720WHEN 2500:PTR#c%=st% 56730WHEN 2600:PTR#c%=st% 56740WHEN 2700:PTR#c%=st% 56750WHEN 2800:PTR#c%=st% 56760WHEN 2900:PTR#c%=st% 56770WHEN 3000:PTR#c%=0 56780WHEN 3600:pcdblk%!4=0 56790WHEN 3700:jpegy%=sy% 56800ENDCASE 56810IFcache% THEN 56820IFflag=3600 THEN 56830pcdblk%!4=0:PROCrefillpcd 56840ELSE 56850IFcache%<filesize% SYS12,4,c%,datacache%,cache%:rowstogo%=cacherows% 56860ENDIF 56870buff%=datacache% 56880IFcachebytes% !incacheptr=datacache%:!numlefttogo=cache% 56890IFinput=24 IFrbo%>=0 rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo% 56900ENDIF 56910IFflag=1500 IFcompression=5 rowstogo%=striprows% 56920ENDPROC
� > ChangeFSI �,� �ChangeFSIVersion="0.95 (17th Feb 94)" �areanumber%=0 �ș"OS_GetEnv" � A$ ��A$," -wimp") � �� z%(1),p%(2),s%(3),m$(21) �"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% @6ș "OS_SWINumberFromString",,"OS_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% �� 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% 2399 �� �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" &� :� � D6� � ș"Wimp_CloseTemplate":� 0,�$+" (code "+Þ+")" X�version%>=300 � b� z% �largest_buffer l#indsize%=�size_indirect("Info") v� info_wind% indsize% �Kș"Wimp_LoadTemplate",,z%,info_wind%,info_wind%+indsize%,-1,"Info"+z$,0 �� �Kș"Wimp_LoadTemplate",,z%,idata%,sidata%+2500,-1,"Info"+z$,0 � ,,idata% �� �?ș CreateW,,z% � infow%:$!(z%+88+7*32+20)=�ChangeFSIVersion ��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%+2400,-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 � *%indsize%=�size_indirect("Output") 4� outp_wind% indsize% >Mș"Wimp_LoadTemplate",,z%,outp_wind%,outp_wind%+indsize%,-1,"Output"+z$,0 H� RMș"Wimp_LoadTemplate",,z%,idata%,sidata%+2400,-1,"Output"+z$,0 � ,,idata% \� fPș CreateW,,z% � output%:admode%=!(z%+88+17*32+20):adspcl%=!(z%+88+16*32+20) z�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%+2400,-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%+2400,-1,"Save"+z$,0 � ,,idata% $� .3ș CreateW,,z% � save%:adsave%=!(z%+88+1*32+20) B�version%>=300 � L%indsize%=�size_indirect("Sprite") V� sprt_wind% indsize% `Mș"Wimp_LoadTemplate",,z%,sprt_wind%,sprt_wind%+indsize%,-1,"Sprite"+z$,0 j� tMș"Wimp_LoadTemplate",,z%,idata%,sidata%+2400,-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%+2400,-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 (� 2Lș"Wimp_LoadTemplate",,z%,idata%,sidata%+2400,-1,"Range"+z$,0 � ,,idata% <� F5ș CreateW,,z% � raninfo%:adran%=!(z%+88+0*32+20) Z�version%>=300 � d#indsize%=�size_indirect("Zoom") n� zoom_wind% indsize% xKș"Wimp_LoadTemplate",,z%,zoom_wind%,zoom_wind%+indsize%,-1,"Zoom"+z$,0 �� �Kș"Wimp_LoadTemplate",,z%,idata%,sidata%+2400,-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%+2400,-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 ,:$(q%+24)="!"+m$(20):ș"Wimp_CreateIcon",,q% � iconbar% 6)A%=�"<ChangeFSI$Dir>.Choices":�A%=0 � @Dfast%=�:statescale%=%10000000100:stateproc%=0:stateoutput%=&a008 J2$p%(0)="":$p%(1)="2.2":$p%(2)="24":$adspcl%="" T=$admode%="28":$s%(0)="1":$s%(1)="4":$s%(2)="1":$s%(3)="4" ^� h2�#A%,fast%,statescale%,stateproc%,stateoutput% r/�#A%,$p%(0),$p%(1),$p%(2),$admode%,$adspcl% |$�#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 ș Drag,,-1 &1�sprite% ș "Wimp_SlotSize",originalslot%,-1 0BF$="":�startfile% startfile%=�:F$=�A$,�A$,"-wimp")+6):�callFSI :� Dș Poll%,1,q% � A% NȎ A% � X%� 1 :�sprite% �redraw_window(!q%) bB� 2 :�open_window(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,q%!28) l2� 3 :ș &400c3,,q%:nextlocation%=�:�removearea v:ș "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%=� �=&4000000 *S� � � � �:�"Set ChangeFSI$ReturnCode "+�$+" (code "+Þ+")":�removearea:�:�=Q%:� 41foo%=0:A%=�ChangeFSI(A$,-1,-1,0,-1,-1,foo%,�) >+�removearea:*unset ChangeFSI$ReturnCode H �:�=Q% R� \� p� �size_indirect(name$) z� size% �5ș "Wimp_LoadTemplate",,0,,,,name$+z$,0 � ,,size% � =size% �� �winsize_indirect(name$) �� size% �4ș "Wimp_LoadTemplate",,0,,,,name$+z$,0 � ,size% � =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% 8$name= "*" B?ș "Wimp_LoadTemplate", ,0,,,,name,here% � ,size%,,,,,here% L� V=largest_tem% j� �receive(q%) tȎ 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 �/ș"Wimp_SendMessage",17,q%,q%!4:scrap%=q%!8 �� �8� 2:șspop%,&10C,sar%,�ZS(q%+44):$adsave%=�ZS(q%+44) �7q%!12=q%!8:q%!16=3:ș "Wimp_SendMessage",18,q%,q%!4 �� q%!36<>-1 saved%=� �ș CrMenu,,-1 �1� 3:F$=�ZS(q%+44):�scrap% scrap%=scrap%=q%!12 �6q%!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 2�showscaletofit <H� 10:ș"XOS_ReadVarVal","ChangeFSI$Dir",paltemp%,256,0,3 �,,bootlen% Fpaltemp%?bootlen%=13 P�#q%!20,"Run "+$paltemp% Z� d� x� �callFSI �A$=�deducemode:A%=47 � �geticonstate(output%,12) � �A$+=$adspcl% �� � �geticonstate(output%,13) � �>�geticonstate(output%,2)��geticonstate(output%,8) A$+="R" �� �ș53,�A$,3 �,,A% ��A%=63 � �&�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+":" 6(�geticonstate(scalew%,5) A$+=" 1:2" @,�geticonstate(scalew%,4) A$+=" 1:2 1:1" J,�geticonstate(scalew%,3) A$+=" 1:1 1:2" T�geticonstate(scalew%,9) � ^%�$s%(0) A$+=" "+$s%(0) �A$+=" 1" hA$+=":"+$s%(1) r%�$s%(2) A$+=" "+$s%(2) �A$+=" 1" |A$+=":"+$s%(3) �� �,�geticonstate(scalew%,0) A$+=" -nosize" �.�geticonstate(scalew%,18) A$+=" -noscale" �+�geticonstate(scalew%,19) A$+=" -lock" ��geticonstate(scalew%,6) � �>�geticonstate(scalew%,16) A$+=" -rotate" �A$+=" -rotate-" �� �+�geticonstate(scalew%,7) A$+=" -hflip" �+�geticonstate(scalew%,8) A$+=" -vflip" �)�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) 0�geticonstate(proc%,6) A$+=" -gamma"+$p%(1) &2�geticonstate(proc%,7) A$+=" -sharpen"+$p%(2) 0%info$="":range$=m$(19):cputime%=0 :6�sprite% !q%=pic%:ș &400c3,,q%:saved%=�:sprite%=� Dnextlocation%=� N3ș "Wimp_SlotSize",originalslot%,-1:�removearea X1�fast% ș "OS_UpdateMEMC",&300,&700 � oldmemc b4A%=�ChangeFSI(A$,-1,-1,nextlocation%,0,0,sar%,0) l*�fast% ș "OS_UpdateMEMC",oldmemc,&700 v%�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 �.$adsx%=�x:$adsy%=�y:$adsm%=�m:$adsname%=n$ �&$adsbytes%=�sar%!12:$adran%=range$ �-$adsrc%=info$+m$(0)+�(cputime%/100)+m$(1) �'A%=�F$:ȕ�"."+F$,A%,1)<>".":A%-=1:� �$adsave%=�"."+F$,A%+1) �ș&35,m,4 �,,nx:x=x<<nx �ș&35,m,5 �,,ny:y=y<<ny �#saved%=�:sprite%=�:�getmodeinfo �pic%=�create_window(x,y,F$) ��popup(pic%,-1) � � � �checkandfinish *7�saved% ��sprite% �removearea:ș "Wimp_CloseDown":� 4-!buffer%=�:$(buffer%+4)=m$(2)+F$+m$(3)+�0 >5ș "Wimp_ReportError",buffer%,%10111,m$(20) � ,A% H+�A%=1 �removearea:ș "Wimp_CloseDown":� R� f� �key(handle%,icon%,key%) p�key%=&1b ș CrMenu,,-1:� zȎ handle% � �� zoom%:Ȏ key% � �C� 13:�dozoom(icon%-4,0):�icon%=4 ș &400d2,zoom%,5,,,-1,�$z%(0) ��icon%=5 ș CrMenu,,-1 �� �"� &18e,&18f:�dozoom(icon%-4,0) �0ș &400d2,zoom%,icon%�1,,,-1,�$z%(icon%�5):� �� �� save% ��key%=13 �savesprite:� � � 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:� 8.ș &400d2,proc%,icon%,,,-1,�$p%(icon%-8):� B%� &18f:icon%-=1:�icon%<8 icon%=10 L.ș &400d2,proc%,icon%,,,-1,�$p%(icon%-8):� V� `� scalew%:Ȏ key% � jB� &18e,13:icon%+=1:�icon%>13 icon%=10:�key%=13 ș CrMenu,,-1:� t1ș &400d2,scalew%,icon%,,,-1,�$s%(icon%-10):� ~&� &18f:icon%-=1:�icon%<10 icon%=13 �1ș &400d2,scalew%,icon%,,,-1,�$s%(icon%-10):� �� �� �ș "Wimp_ProcessKey",key% �� �� �savesprite �ș spop%,&10C,sar%,$adsave% �ș CrMenu,,-1 �� �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)) (� 2rmenuhandle%=handle% <� F�b%�4 � PȎ handle% � Z� zoom%:Ȏ icon% � d� 0:�dozoom(0,1) n� 1:�dozoom(0,-1) x� 2:�dozoom(1,1) �� 3:�dozoom(1,-1) �� �� �� ��b%�1 � �Ȏ handle% � �� zoom%:Ȏ icon% � �� 0:�dozoom(0,-1) �� 1:�dozoom(0,1) �� 2:�dozoom(1,-1) �� 3:�dozoom(1,1) �� �� � �b%�5 � Ȏ handle% � "� output%:Ȏ icon% � ,'� 0,1,2,3:�killcurrent(�(25+icon%)) 6!� 4:�killcurrent("S16,90,90") @!� 5:�killcurrent("S32,90,90") J� 6:�killcurrent("0") T� 7:�killcurrent("8") ^� 8:�killcurrent("12") h� 9:�killcurrent("15") r"� 10:�killcurrent("S16,90,45") |"� 11:�killcurrent("S32,90,45") �� �3�geticonstate(output%,15) $admode%=�deducemode �2!q%=output%:q%!4=17:q%!8=0:q%!12=0:ș SetI,,q% ��showscaletofit �� save%:Ȏ icon% � �� 2:�savesprite �� �M� -2:�sprite% �getw(pic%):�open_window(pic%,x0%,y0%,x1%,y1%,scx%,scy%,-1) �� �� � �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% 03q%!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% D� N� X� b� v� �dozoom(s%,a%) ��s%=0 � �/$z%(0)=�(�$z%(0)+a%):�$z%(0)="0" $z%(0)="1" �� �/$z%(1)=�(�$z%(1)+a%):�$z%(1)="0" $z%(1)="1" �� �2!q%=zoom%:q%!4=4+s%:q%!8=0:q%!12=0:ș SetI,,q% �/!q%=pic%:ș GetW,,q%:f%=q%!28:ș &400c3,,q% �pic%=�create_window(x,y,F$) ��popup(pic%,f%) �� �'� �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 4!menuptr%!16=200:menuptr%!24=0 >menuptr%+=28 H%� i1%=i%+1:i%=�menu$+",",",",i1%) R8item$=�menu$,i1%,i%-i1%):�menuitem(item$):� item$="" \#menuptr%!-24=(menuptr%!-24)�&80 f`�handle%=101 ș CrMenu,,buffer%,mousex%-64,96+8*44 �ș CrMenu,,buffer%,mousex%-32,mousey%+16 p� �� �menuitem(text$) �� text$="" � �*flg%=0:submenu%=-1:I%=�text$,":"):�I%� �)flg%=��text$,I%+1):text$=�text$,I%-1) �� �I%=�text$,">"):�I%� �-submenu%=��text$,I%+1):text$=�text$,I%-1) �� �menuptr%!0=flg% �menuptr%!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$ .� 8menuptr%+=24 B� V� �menuselect(menus%) `,ș GetP,,paltemp%:adjust%=paltemp%!8 � 1 j-ș DcMenu,,buffer%,menus%,�200," ")�,,,a$ t� a$="" �� ~Ȏ menuhandle% � � � pic% �Ȏ a$ � �� m$(9):�callFSI �� � � 101 �Ȏ a$ � �� m$(14):fast%=�fast% �� m$(9):�callFSI �� m$(15) �Fstatescale%=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% /�#A%,$p%(0),$p%(1),$p%(2),$admode%,$adspcl% ($�#A%,$s%(0),$s%(1),$s%(2),$s%(3) 2�#A% <� m$(16):�checkandfinish F� P� Z0�adjust% �checkmouse(0,0,2,rmenuhandle%,0,0) d� x � �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 �%�x<128 � y<128 z%?35=0 �z%?35=255 �)$adtitle%="":ș CreateW,,z% � handle% �$adtitle%=title$ �=handle% �� �popup(handle%,f%) �1ș "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%) J�handle%=-1�� Tq%!0=handle%:q%!28=bhandle% ^)q%!4=x0%:q%!8=y0%:q%!12=x1%:q%!16=y1% hq%!20=scx%:q%!24=scy% rș OpenW,,q% |� �� �getw(handle%) �!q%=handle%:ș GetW,,q% �+�info(q%+4):bhandle%=q%!28:flags%=q%!32 �� �� �info(q%) �=x0%=!q%:y0%=q%!4:x1%=q%!8:y1%=q%!12:scx%=q%!16:scy%=q%!20 �bx%=x0%-scx%:by%=y1%-scy% �� �� �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% 0ș RedrawW,,q% � more% :,�info(q%+4):by%=by%-�(y*�$z%(0)��$z%(1)) Dȕ more% N0ș spop%,&134,sar%,n$,bx%,by%,,factors%,spx% Xș GetR%,0,q% � more% b� l� v� �"� �geticonstate(handle%,icon%) �&!q%=handle%:q%!4=icon%:ș GetI,,q% �=q%!24>>21 � 1 �� �getmodeinfo �=ș"Wimp_ReadPixTrans",&100,sar%,n$,,,,ifactors%,pixtrans% �#ș spop%,&118,sar%,n$ � ,,sptr% �� sptr%!32=44 � � palptr%=0 �� �� grab%=0 � 2048-8 � 8 �(paltemp%!(grab%>>1)=sptr%!(grab%+44) � palptr%=paltemp% � �Q%=0�255:pixtrans%?Q%=Q%:� *�sptr%!32=44+2048 � 45�Q%=0�255:șctran%,palptr%!(Q%<<2)�pixtrans%?Q%:� >� H:ș "ColourTrans_SelectTable",m,palptr%,-1,-1,pixtrans% R� \6spx%=-1:�Q%=0�255:�pixtrans%?Q%<>Q% spx%=pixtrans% f� p� �� �deducemode �� m,x,y � �geticonstate(output%,15) � �ș&35,-1,9 �,,m:�m>3 � �#ș&35,-1,4 �,,x:ș&35,-1,5 �,,y �x=180/(2^x):y=180/(2^y) �="S"+�(2^m)+","+�x+","+�y �� �=�� �� �� � =$admode% �� =0 � �showscaletofit $� m,x,y .$admode%=�deducemode 8�?admode%=�"S" � B)�$admode%,5)>��$admode%,8) x=6 �x=0 L �$admode%,2)>16 x+=5 �x+=4 V/ș&35,-1,11 �,,tofitx:ș&35,-1,12 �,,tofity `� jm=�$admode% t-ș&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 �� �?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 �q%!4=I%:ș SetI,,q%:� �� �� �killcurrent(m$) �"q%!12=1<<21:!q%=output%:q%!8=0 �q%!4=17:ș SetI,,q% �$admode%=m$ �� +ݤZS(I%)�A$:�A$+=�?I%:I%+=1:�?I%<14:=A$ � �errorbox (ș Drag,,-1 22!buffer%=�:$(buffer%+4)=�$+" (code "+Þ+")"+�0 <2ș "Wimp_ReportError",buffer%,%11,m$(20) � ,A% F+�A%=2 �removearea:ș "Wimp_CloseDown":� P� 6S� �ChangeFSI(A$,spritearea%,workspace%,worklimit%,oksave%,okinfo%,� ram%,fast%) @M� A$(),r%(),g%(),b%(),rpal%(),gpal%(),bpal%(),table%(),cl%(),xl%(),xl2%() JD� xp%(),rm%(),rm1%(),rm2%(),vals%(),nl%(),A%(),B%(),new%(),st%() T$ȕ�A$,1)<>" "��A$<>0 A$=�A$,2):� ^ȕ�A$,1)=" " A$=�A$,2):� hȕ�A$,1)=" " A$=�A$):� r�uc(�A$,5))="-QUIT" � |.A$=�A$,7):ȕ�A$,1)<>" "��A$<>0 A$=�A$,2):� �ȕ�A$,1)=" " A$=�A$,2):� �� � � A$(100):ARG%=0:B%=�A$," ") �ȕ B%<>0 �+ARG%+=1:A$(ARG%)=�A$,B%-1):A$=�A$,B%+1) �ȕ �A$,1)=" ":A$=�A$,2):� �B%=�A$," ") �� ��A$<>"" ARG%+=1:A$(ARG%)=A$ �Xinvert%=�: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$ 08�"Info on input picture?"a$:�uc(�a$,1))="Y" info%=� :;�"Invert picture colours?"a$:�uc(�a$,1))="Y" invert%=� D=�"Compute histogram of input?"a$:�uc(�a$,1))="Y" hist%=� N@�"Apply histogram equalisation?"a$:�uc(�a$,1))="Y" equal%=� XG�"Expand input dynamic range?"a$:�uc(�a$,1))="Y" range%=�:equal%=� b=�"Sharpen picture by (e.g. 12 for harsh, 24 for soft) "a$ l�a$<>"" sharpen%=�a$ v+�"Rotate?"a$:�uc(�a$,1))="Y" rotate%=1 �scale%=�:scaleo%=�:fast%=� �� � � A%=ARG% �6�uc(A$(ARG%))="-INFO" info%=�:A$(ARG%)="":ARG%-=1 �6�uc(A$(ARG%))="-HIST" hist%=�:A$(ARG%)="":ARG%-=1 �6�uc(A$(ARG%))="-LOCK" lock%=�:A$(ARG%)="":ARG%-=1 �A�uc(A$(ARG%))="-EQUAL" equal%=�:range%=�:A$(ARG%)="":ARG%-=1 �A�uc(A$(ARG%))="-RANGE" range%=�:equal%=�:A$(ARG%)="":ARG%-=1 �:�uc(A$(ARG%))="-INVERT" invert%=�:A$(ARG%)="":ARG%-=1 �D�uc(A$(ARG%))="-NOSCALE" scale%=�:scaleo%=�:A$(ARG%)="":ARG%-=1 �9�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 4!�uc(�A$(ARG%),6))="-BLACK" � >Fblack%=32:�A$(ARG%)>6 black%=��A$(ARG%),7):�black%>128 black%=128 HA$(ARG%)="":ARG%-=1 R� \!�uc(�A$(ARG%),6))="-GAMMA" � f.gamma=2.2:�A$(ARG%)>6 gamma=��A$(ARG%),7) pA$(ARG%)="":ARG%-=1 z� �#�uc(�A$(ARG%),8))="-SHARPEN" � �2sharpen%=�:�A$(ARG%)>8 sharpen%=��A$(ARG%),9) �A$(ARG%)="":ARG%-=1 �� �C�uc(�A$(ARG%),4))="-RED" rwt=��A$(ARG%),5):A$(ARG%)="":ARG%-=1 �E�uc(�A$(ARG%),6))="-GREEN" gwt=��A$(ARG%),7):A$(ARG%)="":ARG%-=1 �D�uc(�A$(ARG%),5))="-BLUE" bwt=��A$(ARG%),6):A$(ARG%)="":ARG%-=1 ��uc(�A$(ARG%),4))="-MAX" � �Dmax%=��A$(ARG%),5):�A$(ARG%),"K")��A$(ARG%),"k") max%=max%*1024 �A$(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%=� .� 8<�worklimit%=0 �flex%=� �flex%=�:nextlocation%=worklimit% B� L"pnm$=�uc(m$):Ȏ �pnm$+",",3) � V�"AIM":m=-1:m$="" `"�"P1,","P4,":m=-2:m$="":spm=18 j#�"P2,","P5,":m=-2:m$="T":spm=20 t=�"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$="" ��"IRL":m=-4:m$="":p6bits=8 ��"S16":m=-6:m$="" ��"S24":m=-7:m$="":p6bits=8 ��"S32":m=-8:m$="":p6bits=8 �5:m=�m$:spm=m:m$=�uc(�m$,1)):�"CDRT",m$)=0 m$="" �� ��xs$="" � �xs$,1)="-" � �#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 � 2Cpanic=�:ș8,5,s$+".raw" � r0,,r2:�r0=1 s$+=".raw":dir=�:panic=� <1�panic ș8,5,s$+".red" � r0,,r2:�r0=1 panic=� F!�panic � 42,"Directory given" P� Z>ftype=r2>>8 � &FFF:bits=28:F=2^bits:c%=0:cc%=0:ccc%=0:o%=0 d �dir � n>c%=�(s$+".red"):�c%=0 � 42,"Red file "+s$+".red not found" xEcc%=�(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" �� �� � �� � � � �:�close:� �,�$ � � r%(255) �� g%(255),b%(255) �ș&66f4d �;pcd% �Ȏ 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=� 6!� &DFA:flag=800:�dir flag=801 @� &DE2:flag=1000 J � &BE8:�(pcd%�1)=0 flag=3600 T� &7A0:flag=1200 ^� &69d:flag=2000 h� &699:flag=700 r� &698:flag=100 |� &697:flag=1900 �� &691:flag=2600 �� &690:flag=2500 �� &666:flag=666 �� &601:flag=3000 �� &371:flag=3100 �#� &300:flag=1300:�dir flag=1301 �� 4:flag=900:�dir flag=901 �� 6:flag=950 �� ��flag=-1 � �%�#c%=0:S$="":�I%=1�16: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 0#�flag=-1 �S$,2)="BM" flag=2400 :$�flag=-1 �S$,4)="GIF8" flag=500 D%�flag=-1 �S$,5)="AV_VO" flag=600 N2�flag=-1 �S$,4)=�&59+�&A6+�&6A+�&95 flag=1100 X*�flag=-1 �S$,4)=�0+�1+�0+�8 flag=1400 b*�flag=-1 �S$,4)=�0+�1+�0+�1 flag=2900 l%�flag=-1 �S$,4)="RIX3" flag=2700 v3�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 �D�flag=-1 �S$,2)="P4"��S$,2)="P5"��S$,2)="P6" flag=3300:info$="" �$�flag=-1 �S$,3)="P15" flag=3400 �$�flag=-1 �S$,3)="PIC" flag=3500 �)�flag=-1 �uc(�S$,3))="P13" flag=3450 �6�flag=-1 �S$,4)="FORM" �S$,9,4)="ILBM" flag=1600 ��flag=-1 � �#�S$,7,4)="JFIF" � ftype=&C85 � �*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>" !4� !>� !H"c%=�"<Wimp$Scrap>":�c%=0 �=100 !R>scrapf%=�:flag=3300:info$="JPEG (JFIF) file converted to " !\� !f flag=3700 !p� !z� !�� !��flag=-1 � !�&�#c%=&10:S$="":�I%=1�9:S$+=��#c%:� !��S$="MILLIPEDE" flag=200 !�� !��flag=-1 � !�&�#c%=&41:S$="":�I%=1�8:S$+=��#c%:� !�%�S$,4)="PNTG" flag=1800:st%=&280 !�� !��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 � "8�#c%=0:�#c%=10 � "B+C%=�#c%:�C%<6 � C%<>1 ��#c%=1 flag=1900 "L� "V� "`M�flag=-1 �"."+�uc(s$),".PCX.")���uc(s$),":PCX.")��s$,4)="/PCX" flag=1900 "jB�flag=-1 �"."+�uc(s$),".IMAGE.")���uc(s$),":IMAGE.") flag=400 "t)�flag=-1 �uc(�s$,4))=".RAW" flag=100 "~)�flag=-1 �uc(�s$,3))="TGA" flag=2000 "�)�flag=-1 �uc(�s$,3))="VDA" flag=2000 "�>�flag=-1 �"."+�uc(s$),".PIC.")���uc(s$),":PIC.") flag=700 "�M�flag=-1 �"."+�uc(s$),".IMG.")���uc(s$),":IMG.")��s$,4)="/IMG" flag=1400 "�M�flag=-1 �"."+�uc(s$),".DSP.")���uc(s$),":DSP.")��s$,4)="/DSP" flag=1700 "�*�flag=-1 �uc(�s$,4))="/RGB" flag=3200 "�<�flag=-1 �(�uc(�s$,4))="/PCD"�ftype=&be8)�((pcd%�1)=1) � "�o�#c%:ș"Wimp_StartTask","<ChangeFSI$Dir>.hpcdtoppm -3 -a "+s$+" <Wimp$Scrap> { > <ChangeFSI$Dir>.pcdtemp }" "�Mc%=�"<Wimp$Scrap>":scrapf%=�:flag=3300:info$="PhotoCD file converted to " "�� "�� "�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 #2sm=�W:�sm<256 � #<ș53,sm,3 � ,,I% #FȎ I% � #P%� 1:�st%=F%+12 �defpal2 ��ipal(2) #Z5�#c%=F%-16:sx%=(�W+1)*32:rowbytes%=sx%>>3:input=1 #dsy%=�W+1:I%=�W:sx%-=31-�W #n%� 3:�st%=F%+12 �defpal4 ��ipal(4) #x5�#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) #�4�#c%=F%-16:sx%=(�W+1)*8:rowbytes%=sx%>>1:input=4 #�!sy%=�W+1:I%=�W:sx%-=(31-�W)�4 #�� 63,255:�st%=F%+12 � #��defpal #�� #��K%>st% K%=st% #��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 $6) �42,"Not understood RISC OS sprite" $@� $J@r$="FN8":ș53,sm,4 � ,,nx:ș53,sm,5 � ,,ny:nx=1<<nx:ny=1<<ny $T-�scale% xmul%=xmul%*nx/2:ymul%=ymul%*ny/2 $^Sinfo$="RISC OS sprite, mode "+�sm+" "+�sx%+" by "+�sy%+" pixels, "+�bits(input) $h� $rbpp%=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) $�;� 3:bpp%=4:r$="FN8":�st%=F%+12 �defpal16 ��newropal(16) $�:� 4:bpp%=8:r$="FN8":�st%=F%+12 �defpal ��newropal(256) $�&� 5:bpp%=16:r$="FN16":�st%=F%+12 � $�$� rpal%(255),gpal%(255):step24=2 $� �C%=0�255 $�"gpal%(C%)=(C%>>5)<<8 � (C%�31) $�+rpal%(C%)=((C%>>2)�31)<<16 � (C%�3)<<11 $�� $�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 %0G�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% %DJinfo$="New RISC OS sprite, "+�sx%+" by "+�sy%+" pixels, "+�bits(input) %N�bpp%=32 input=24 %X� %b�#c%=st%:cache%=� %l � 100 %vEquant%=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" %� � 200 %�Gquant%=8:�#c%=5:sx%=�HW:sy%=�HW:sx%=(�HW-sx%+2)/2:sy%=(�HW-sy%+2)/2 %�$�#c%=&1a:cadsoft%=�#c%:�#c%=&200 %�!�C%=0�255:r%(C%)=�#c%/255*F:� %�!�C%=0�255:g%(C%)=�#c%/255*F:� %�!�C%=0�255:b%(C%)=�#c%/255*F:� %�-�#c%=&600:st%=&600:cache%=�:�cadsoft%=2 � %�Crep%=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% &4 �C%=0�255 &>.rpal%(C%)=C%�7 � (C%�64)<<2 � (C%�&38)<<13 &HSgpal%(C%)=(C%�4)<<1�C%�16 � ((C%�3)<<1�(C%�&60)>>2)<<8 � (C%�8�(C%�128)>>3)<<16 &R� &\1�C%=0�31:r%(C%)=C%/31*F:�:g%()=r%():b%()=r%() &f*pbuff%=�dim(sx%):�scale% ymul%=ymul%*2 &pGinfo$="ArVis image, "+�sx%+" by "+�sy%+" pixels, 15 bits per pixel" &z � 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 &�:�nopal:input=24:rep%=0:cachebytes%=�:cache%=�:step24=3 &�^info$="RT image. run length encoded image, "+�sx%+" by "+�sy%+" pixels, 24 bits per pixel" &� � 500 &�,compression=5:�#c%=6:GIFsx=�HW:GIFsy=�HW &�8GIF=�#c%:GIFback=�#c%:GIFext=�#c%:quant%=(GIF � 7)+1 &��GIF � &80 � &��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" '8/�"Continue with monitor's size [Y or y]?"A$ 'B&�A$="Y"�A$="y" sx%=GIFsx:sy%=GIFsy 'L(�"Continuing with ";sx%"x by "sy%"y" 'V� '`� 'j)GIF=�#c%:�GIF � &40 flag=501:r$="FN8" 'tJsetcodes%=�#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%:� '�Ainfo$="GIF file, "+�sx%+" by "+�sy%+" pixels, "+�bits(quant%) '� � 600 '�quant%=8:�#c%=&5c:�C%=0�255 '�9r%(C%)=�#c%/255*F:g%(C%)=�#c%/255*F:b%(C%)=�#c%/255*F '�� '��#c%=&36e:sy%=�HW:sx%=�HW '�5st%=&380:�#c%=st%:rowbytes%=sx%:r$="FN8":cache%=� '�Einfo$=".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 (24plbuff%=�dim(sx%):rep%=0:wt%=0:wtsx%=plbuff%+sx% (<cache%=�:cachebytes%=� (F@�C%=0�255:r%(C%)=(C%�63)/63*F:�:g%()=r%():b%()=r%():quant%=6 (PJinfo$="Watford digitiser picture, 512 by 256 pixels, 6 bits per pixel" (Z � 801 (d;sx%=512:sy%=256:input=24:quant%=6:�scale% ymul%=ymul%*2 (n0rep1%=0:wt1%=0:rep2%=0:wt2%=0:rep3%=0:wt3%=0 (x=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%() (�Rinfo$="Triple Watford digitiser picture, 512 by 256 pixels, 18 bits per pixel" (� � 900 (�'quant%=8:st%=0:�#c%=0:�#c%=65536 � (�7sx%=256:sy%=256:�scale% ymul%=ymul%*2:xmul%=xmul%*2 (�� (�sx%=512:sy%=512 (�� (�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 )63�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" )J � 902 )TBquant%=4:�#c%=8:sx%=�W:rowbytes%=sx%*3/2:sy%=�W:st%=20:�#c%=20 )^�scale% ymul%=ymul%*2 )hMplbuff%=�dim(sx%*3):rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2:rbo%=-1 )r@�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 )�\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 )� �C%=0�255 )�"gpal%(C%)=(C%>>5)<<8 � (C%�31) )�+rpal%(C%)=((C%>>2)�31)<<16 � (C%�3)<<11 )�� )�1�C%=0�31:r%(C%)=C%/31*F:�:g%()=r%():b%()=r%() )�_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%) *0"ș12,4,c%,ctable%,st%:st%=�#c% *:.pa%=ctable%:rep%=0:rep2%=0:pasx%=buff%+sx% *DAinfo$="ProArtisan image, 640 by 256 pixels, 8 bits per pixel" *N � 1100 *X@quant%=1:�#c%=4:sx%=�beW:sy%=�beW:input=�beW:bigendianbits=� *bS%=�beW:S%=�beW *lIcache%=�:�S%=2 cachebytes%=�:info$="Byte Encoded " �info$="":r$="FN8" *vC%=�beW *�D%=�beW *�Ȏ C% � *� � 1,2 *�$�I%=0�D%/3-1:r%(I%)=�#c%/255*F:� *�$�I%=0�D%/3-1:g%(I%)=�#c%/255*F:� *�$�I%=0�D%/3-1:b%(I%)=�#c%/255*F:� *� *�Ȏ input � *�� 1:r%(0)=F:g%(0)=F:b%(0)=F *�� 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 +4�S%=1 bbo%=0:rbo%=2 +>&:� 42,"Can't do this Sun pixrect" +H� +RMst%=D%+&20:rep%=0:�cachebytes% plbuff%=�dim(rowbytes%):plbytes%=rowbytes% +\Binfo$+="Sun image, "+�sx%+" by "+�sy%+" pixels, "+�bits(input) +f � 1200 +p>quant%=8:sx%=800:sy%=800:st%=1600:�#c%=st%:vflip%=� vflip% +z*�nopal:r$="FN8":rowbytes%=sx%:cache%=� +�Iinfo$="TimeStep satellite image, 800 by 800 pixels, 8 bits per pixel" +� � 1300 +�?quant%=8:sx%=128:sy%=256:st%=0:�#c%=0:�scale% xmul%=xmul%*2 +�*�nopal:r$="FN8":rowbytes%=sx%:cache%=� +�@info$="satellite image, 128 by 256 pixels, 8 bits per pixel" +� � 1301 +�;input=24:quant%=8:sx%=128:sy%=256:�scale% xmul%=xmul%*2 +�Obuff%=�dim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+2*sx%:�nopal:r$="FN901" +�Hinfo$="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 ,8#ymul%=ymul%*ph%:ydiv%=ydiv%*282 ,B� ,LWrowbytes%=sx%+7>>3:pbuff%=�dim(sx%):plbytes%=rowbytes%*planes%:buff%=�dim(plbytes%) ,V�#c%=st%:vrep%=0 ,`M�C%=0�(1<<planes%)-1:r%(C%)=F-C%/((1<<planes%)-1)*F:�:g%()=r%():b%()=r%() ,jBinfo$="IMG file, "+�sx%+" by "+�sy%+" pixels, "+�bits(planes%) ,t � 1500 ,~"�#c%=4:dir%=�tiff(4):�#c%=dir% ,�6rgb=�:greyunit=100:planar%=1:fillorder=1:resunit=2 ,�)xnum%=90:xdenom%=1:ynum%=90:ydenom%=1 ,�E%=�tiff(3):�Z%=1�E% ,�'T%=�tiff(3):D%=�tiff(3):C%=�tiff(4) ,�a�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) ,�Ȏ T% � ,�� 256:sx%=V% ,�� 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 -(� -2 quant%=V% � &FF:input=quant% -<5�I%=0�(1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:� -Fg%()=r%():b%()=r%() -P� -Z�#c%=dir%+2+Z%*12 -d� -nquant%=V%:input=quant% -x5�I%=0�(1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:� -�g%()=r%():b%()=r%() -�� -�� 259:compression=V% -�/� 262:photometric=V%:�V%=0 invert%=�invert% -�� 266:fillorder=V% -�!� 273:stc%=C%:stv%=V%:std%=D% -�1� 277:sampperpix%=V%:input=quant%*V%:rgb=V%=3 -�� 278:striprows%=V% -�-� 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 .6� 296:resunit=V% .@� 317:hpredict%=V% .J8� 320:�#c%=V%:�I%=0�C%/3-1:r%(I%)=�tiff(3)/65535*F:� .T*�I%=0�C%/3-1:g%(I%)=�tiff(3)/65535*F:� .^*�I%=0�C%/3-1:b%(I%)=�tiff(3)/65535*F:� .h�#c%=dir%+2+Z%*12 .r .|J�info% �"Ignoring tag ";T%" datatype "D%" count "C%" value/pointer "V% .�� .�� .�� st%(stc%):�stc%>1 � .�0�#c%=stv%:�I%=0�stc%-1:st%(I%)=�tiff(std%):� .�� .�st%(0)=stv% .�� .�Ȏ 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" /0 � 6:info$="JPEG compressed " /:2 info$="Compress "+�compression+" - unknown " /D� /NBinfo$+="TIFF file, "+�sx%+" by "+�sy%+" pixels, "+�bits(input) /XSbigendianbits=fillorder=1:�#c%=st%(0):stripptr=0:�striprows%>=sy% striprows%=-1 /bȎ input � /l� 1:rowbytes%=sx%+7>>3 /v� 2:rowbytes%=sx%+3>>2 /�� 4:rowbytes%=sx%+1>>1 /�� 8:rowbytes%=sx% /�� 24:rowbytes%=3*sx% /�+ � 42,"Can't do "+�bits(input)+" TIFF" /�� /�.�planar%=2 rowbytes%=rowbytes%*sampperpix% /�I�planar%<>1 � rgb<>0 �42,"Can't do this style of TIFF yet" �planar%=� /�� compression<2 � /�Scache%=�:stripptr=-1:r$="FN8":�input=24 rbo%=0:gbo%=1:bbo%=2:step24=3:r$="FN24" /�� /�'�compression=5 �compression=32773 � /�-cache%=�:cachebytes%=rowbytes%*striprows% /�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*� 04� 0> �scale% � 0HS%=resunit:�S%=2 S%=90 0R�S%=3 S%=35 0\,xdiv%=xdiv%*xnum%:xmul%=xmul%*xdenom%*S% 0f,ydiv%=ydiv%*ynum%:ymul%=ymul%*ydenom%*S% 0p� 0z�r$="FN1500" r$="FN8" 0� � 1600 0��#c%=12:camg=0:planar%=�:� 0�&S$=��#c%+��#c%+��#c%+��#c%:S%=�beW 0�Ȏ S$ � 0�C� "BMHD":sx%=�beHW:sy%=�beHW:S%=�W:planes%=�#c%:masking%=�#c%=1 0�6compression=�#c%:S%=�#c%+�HW:U%=�#c%:V%=�#c%:S%=�W 0�)�scale% ymul%=ymul%*V%:ydiv%=ydiv%*U% 0�K�I%=0�(1<<planes%)-1:r%(I%)=I%/((1<<planes%)-1)*F:�:g%()=r%():b%()=r%() 0�B� "CMAP":S%=�#c%+S%:�I%=0�(1<<planes%)-1:r%(I%)=(�#c%>>4)/15*F 0�1g%(I%)=(�#c%>>4)/15*F:b%(I%)=(�#c%>>4)/15*F:� 0�G�#c%=S%:�info% �"Warning: truncated IFF CMAP information to 4 bits" 0�;� "CAMG":camg=�beW:�info% �"Amiga viewport mode ";~camg 0�� "BODY":st%=�#c% 14 � info% �"Ignoring IFF property "S$" size ";S% 1�#c%=�#c%+S% 1� 1$9�S$="BODY":�compression info$="Compressed " �info$="" 18+ham=(camg � &800)<>0:�ham info$+="HAM " 1B4half=(camg � &80)<>0:�half info$+="half-bright " 1Ln�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:� 1VCinfo$+="IFF file, "+�sx%+" by "+�sy%+" pixels, "+�bits(planes%) 1`+�masking% info$+=" with mask (ignored)" 1j7rowbytes%=(sx%+15>>4)<<1:plbytes%=rowbytes%*planes% 1t9pbuff%=�dim(sx%):r$="FN"+�(1600+compression):cache%=� 1~�compression � 1�(cachebytes%=�:plbuff%=�dim(plbytes%) 1�� 1�Qrealrowbytes%=rowbytes%:rowbytes%=plbytes%:�masking% rowbytes%+=realrowbytes% 1�� 1��#c%=st% 1� � 1700 1�Bsx%=640:rowbytes%=80:sy%=350:planes%=4:plbytes%=4*80:planar%=� 1�3buff%=�dim(80*4):pbuff%=�dim(640):G=F/3:H=F*2/3 1�(r%()=0,0,0,0,F,F,F,H,G,G,G,G,F,F,F,F 1�(g%()=0,0,F,F,0,0,F,H,G,G,F,F,G,G,F,F 1�(b%()=0,F,0,F,0,F,0,H,G,F,G,F,G,F,G,F 1�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) 2cache%=�:cachebytes%=� 2(Qr%(0)=F:g%(0)=F:b%(0)=F:bigendianbits=�:rowbytes%=72:r$="FN1501":rowstogo%=-1 22G�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) 2F � 1850 2P�#c%=552 2Z4code%=�beHW:�code%=1 �#c%=�#c%+�beHW:code%=�beHW 2dȎ code% � 2nI� &98:rowbytes%=�beHW:�(rowbytes% �&8000)=0 �42,"PICT without Pixmap" 2x3sy%=�beHW:sx%=�beHW:sy%=�beHW-sy%:sx%=�beHW-sx% 2�<junk%=�HW:packtype%=�beHW:junk%=�W:resx%=�beW:resy%=�beW 2�F�beHW<>0 �#c%:�42,"ChangeFSI expected Mac PICT2 pixeltype=Chunky" 2�&bpp%=�beHW:junk%=�beHW:junk%=�beHW 2�$junk%=�beW:junk%=�beW:junk%=�beW 2�junk%=�beW:junk%=�beHW 2�_C%=�beHW:�I%=0�C%:J%=�beHW:r%(J%)=�beHW/65535*F:g%(J%)=�beHW/65535*F:b%(J%)=�beHW/65535*F:� 2�R� &9A:junk%=�W:rowbytes%=�beHW:�(rowbytes% �&8000)=0 �42,"PICT without Pixmap" 2�3sy%=�beHW:sx%=�beHW:sy%=�beHW-sy%:sx%=�beHW-sx% 2�<junk%=�HW:packtype%=�beHW:junk%=�W:resx%=�beW:resy%=�beW 2�J�beHW<>16 �#c%:�42,"ChangeFSI expected Mac PICT2 pixeltype=RGBDirect" 2�'bpp%=�beHW:comps%=�beHW:junk%=�beHW 2�junk%=�beW:junk%=�beW 2�junk%=�beHW:junk%=�beHW 3V�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% 3C:�#c%:�42,"ChangeFSI can't understand Mac PICT2 code "+�~code% 3"� 3,3junk%=�beHW:junk%=�beHW:junk%=�beHW:junk%=�beHW 363junk%=�beHW:junk%=�beHW:junk%=�beHW:junk%=�beHW 3@junk%=�beHW 3JNcache%=�:cachebytes%=�:bigendianbits=�:st%=�#c%:rowbytes%=rowbytes%��&8000 3TW�scale% xmul%=xmul%*90*65536:xdiv%=xdiv%*resx:ymul%=ymul%*90*65536:ydiv%=ydiv%*resy 3^@info$="Mac PICT2, "+�sx%+" by "+�sy%+" pixels, "+�bits(bpp%) 3h%plbuff%=�dim(rowbytes%):�bpp%>8 � 3rTrbo%=-1:rb%=plbuff%+sx%:gb%=plbuff%+sx%*2:bb%=plbuff%+sx%*3:r$="FN1851":input=24 3|;�comps%=3 rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2 3�� 3� � 1900 3��#c%=1:C%=�#c% 3�?E%=�#c%:�E%<>1 � 42,"ZSoft .PCX file with unknown encoding" 3�7E%=�#c%:sx%=�HW:sy%=�HW:sx%=�HW+1-sx%:sy%=�HW+1-sy% 3�N�scale% xmul%=xmul%*90:xdiv%=xdiv%*�HW:ymul%=ymul%*90:ydiv%=ydiv%*�HW ��W 3�H�#c%=65:planes%=�#c%:planar%=planes%>1:rowbytes%=�HW:bpp%=E%*planes% 3�pcxpal=16:�bpp%>4 � C%=5 � 3�*�#c%=�#c%-769:�#c%=12 pcxpal=�#c%-768 3�� 3�5�#c%=pcxpal:E%=0:�C%=0�(1<<bpp%)*3-1:E%=E%��#c%:� 3�3�info% �".PCX palette mask established at ";~E% 3��E%=0 � 4E�C%=0�(1<<bpp%)-1:r%(C%)=C%/((1<<bpp%)-1)*F:�:g%()=r%():b%()=r%() 4� 4!�#c%=pcxpal:�C%=0�(1<<bpp%)-1 4&Er%(C%)=(�#c%�E%)/E%*F:g%(C%)=(�#c%�E%)/E%*F:b%(C%)=(�#c%�E%)/E%*F 40� 4:� 4D�rewind 4NLplbytes%=rowbytes%*planes%:plbuff%=�dim(plbytes%):cache%=�:cachebytes%=� 4XE�planar% pbuff%=�dim(sx%) �input=bpp%:bigendianbits=�:r$="FN1100" 4bFinfo$="ZSoft .PCX file, "+�sx%+" by "+�sy%+" pixels, "+�bits(bpp%) 4l � 2000 4v8�#c%=0:L%=�#c%:C%=�#c%:I%=�#c%:J%=�HW:K%=�HW:M%=�#c% 4�Csx%=�W:sx%=�HW:sy%=�HW:B%=�#c%:ID%=�#c%:�ID%�&10 hflip%=�hflip% 4� �(ID% �&20)=0 vflip%=�vflip% 4��#c%=�#c%+L%:Ȏ C% � 4�� 1:�M%=&18 � 4��C%=J%�K%-1 4�9b%(C%)=�#c%/255*F:g%(C%)=�#c%/255*F:r%(C%)=�#c%/255*F 4�� 4�� 4�� 4� �nopal 4�� 4�st%=�#c% 4�Ȏ I% � 5� 1,2,3:cache%=�:�B%>8 � 5�B%>16 � 5Linput=24:bbo%=0:gbo%=1:rbo%=2:step24=B%�8:r$="FN24":rowbytes%=step24*sx% 5 � 5*rowbytes%=sx%*2 547� rpal%(255),gpal%(255):input=16:step24=2:r$="FN16" 5> �C%=0�255 5H&gpal%(C%)=(C%>>5)<<8 � (C%�31)<<16 5R%rpal%(C%)=(C%>>2)�31 � (C%�3)<<11 5\� 5f1�C%=0�31:r%(C%)=C%/31*F:�:g%()=r%():b%()=r%() 5p� 5z� 5�r$="FN8":rowbytes%=sx% 5�� 5�Iinfo$="Truevision TGA image, "+�sx%+" by "+�sy%+" pixels, "+�bits(B%) 5�D� 9,10,11:step24=B%�8:rowbytes%=step24*sx%:buff%=�dim(rowbytes%) 5��B%>8 � 5��B%>16 � 5�:input=24:bb%=buff%:gb%=buff%+1:rb%=buff%+2:r$="FN2002" 5�� 5�9� rpal%(255),gpal%(255):input=16:step24=2:r$="FN2001" 5� �C%=0�255 5�&gpal%(C%)=(C%>>5)<<8 � (C%�31)<<16 5�%rpal%(C%)=(C%>>2)�31 � (C%�3)<<11 5�� 61�C%=0�31:r%(C%)=C%/31*F:�:g%()=r%():b%()=r%() 6� 6� 6$Minfo$="Truevision TGA RLE image, "+�sx%+" by "+�sy%+" pixels, "+�bits(B%) 6.� 68 � 2100 6B?quant%=6:sx%=512:rowbytes%=2*sx%:sy%=256:cache%=�:r$="FN16" 6L-� rpal%(255),gpal%(255):input=16:step24=2 6V �C%=0�255 6` gpal%(C%)=C%>>3 � (C%�7)<<11 6j%rpal%(C%)=(C%�7)<<8 � (C%>>3)<<16 6t� 6~'�C%=0�31:r%(C%)=C%/31*F:�:b%()=r%() 6��C%=0�63:g%(C%)=C%/63*F:� 6��scale% ymul%=ymul%*2 6�Hinfo$="Pineapple image, 512 by 256 pixels, 16 bits per pixel":�#c%=7 6� � 2200 6�9quant%=8:step24=1:�#c%=0:s$=�#c%:E%=�s$,":"):st%=�#c% 6�7sx%=��s$,E%+1):sy%=��s$,E%+2+��sx%):�nopal:input=24 6�Arowbytes%=sx%*3:rbo%=0:gbo%=sx%:bbo%=2*sx%:cache%=�:r$="FN24" 6�Ginfo$="Irlam image, "+�sx%+" by "+�sy%+" pixels, 24 bits per pixel" 6� � 2250 6�H�#c%=16:sx%=�W:sy%=�W:� rpal%(255),gpal%(255),bpal%(255),table%(255) 6��C%=0�255:D%=C%�1 6�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) 7� 7(,table%()=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 725st%=32:�#c%=32:cache%=�:rowbytes%=2*sx%:input=411 7<<info$="Irlam YUV 4:1:1 file "+�sx%+" by "+�sy%+" pixels" 7F � 2300 7P9�#c%=6:sx%=�HW:sy%=�HW:D%=�#c%:ncolors%=�#c%:input=24 7Z;vflip%=�vflip%:quant%=�#c%:ncmap%=�#c%:cmaplen%=1<<�#c% 7d!�nopal:back%=�dim(4):!back%=0 7nclrfirst%=D%�1 7x�(D%�2)=0 � 7�$�I%=0�ncolors%-1:back%?I%=�#c%:� 7��(ncolors%�1)=0 �#c% 7�� 7��D%�4 alpha%=�dim(sx%) 7��ncmap%>0 � 7�)�I%=0�cmaplen%-1:r%(I%)=�HW/&FF00*F:� 7�)�I%=0�cmaplen%-1:g%(I%)=�HW/&FF00*F:� 7�)�I%=0�cmaplen%-1:b%(I%)=�HW/&FF00*F:� 7�� 7��D%�8 � 7�%�#c%=�HW+�#c%:�#c%�1 �#c%=�#c%+1 7�� 7�Hst%=�#c%:buff%=�dim(sx%*3):rb%=buff%:gb%=buff%+1*sx%:bb%=buff%+2*sx% 8�rewind 8Pinfo$="Utah rle image, "+�sx%+" by "+�sy%+" pixels, "+�bits(ncolors%*quant%) 8 � 2400 8")�#c%=&0a:st%=�W:pal%=�W:sx%=�W:sy%=�W 8,6�#c%=&1c:input=�#c%:bigendianbits=�:vflip%=�vflip% 86Ȏ input � 8@� 1:rowbytes%=sx%+7>>3 8J� 4:rowbytes%=sx%+1>>1 8T� 8:rowbytes%=sx% 8^4 � 42,".BMP file of unusual depth ("+�input+")" 8h� 8rrowbytes%=rowbytes%+3��3 8|�#c%=&36:�C%=0�2^input-1 8�?b%(C%)=�#c%/255*F:g%(C%)=�#c%/255*F:r%(C%)=�#c%/255*F:�#c% 8�� 8�r$="FN8":st%=�#c%:cache%=� 8�Ninfo$="Windows 3.0 .BMP image, "+�sx%+" by "+�sy%+" pixels, "+�bits(input) 8� � 2500 8�2�#c%=0:s$="":C%=�#c%:ȕC%<>0 s$+=�C%:C%=�#c%:� 8�7s$+=" version "+äW:sx%=�W:sy%=�W:input=�W:cache%=� 8�_info$="!Translator Clear format made by "+s$+", "+�sx%+" by "+�sy%+" pixels, "+�bits(input) 8��input>8 � 8�K�nopal:input=24:step24=3:rowbytes%=3*sx%:rbo%=0:gbo%=1:bbo%=2:r$="FN24" 8�� 8��C%=0�2^input-1 8�9r%(C%)=�#c%/255*F:g%(C%)=�#c%/255*F:b%(C%)=�#c%/255*F 9� 9"input=8:r$="FN8":rowbytes%=sx% 9� 9&st%=�#c% 90 � 2600 9:�#c%=0:C%=�#c% 9DD%=�#c%:Ȏ D% � 9N!� 0:sx%=320:sy%=200:planes%=4 9X!� 1:sx%=640:sy%=200:planes%=2 9b!� 2:sx%=640:sy%=400:planes%=1 9l? �42,"ChangeFSI knows nothing of "+�C%+" type Degas files" 9v� 9�]�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:� 9�<cache%=�:planar%=�:masking%=�:st%=34:�#c%=34:r$="FN1600" 9�Hrowbytes%=(sx%+15>>4)<<1:plbytes%=rowbytes%*planes%:pbuff%=�dim(sx%) 9�j�C%�128 r$="FN1601":flag=1600:cachebytes%=�:plbuff%=�dim(plbytes%) �realrowbytes%=2:rowbytes%=plbytes% 9�Cinfo$="Degas file "+�sx%+" by "+�sy%+" pixels, "+�bits(planes%) 9� � 2700 9��#c%=4:sx%=�HW:sy%=�HW 9�Ȏ �HW � 9�2� &AF:rowbytes%=sx%:cache%=�:r$="FN8":st%=&30A 9�R �#c%:� 42,"Panic in ColoRIX reading - ChangeFSI largely ignorant of format!" 9�� 9��C%=0�2^input-1 9�6r%(C%)=�#c%/63*F:g%(C%)=�#c%/63*F:b%(C%)=�#c%/63*F :� :�#c%=st% :Cinfo$="ColoRIX file "+�sx%+" by "+�sy%+" pixels, "+�bits(input) : � 2800 :*!�#c%=0:� s$=�fits:Ȏ �s$,8) � :4Q� "SIMPLE ":�s$,30,1)<>"T" �42,"ChangeFSI can only read Simple FITS format" :>� "BITPIX ":input=��s$,10) :HJ� "NAXIS ":�s$,10)<>2 �42,"ChangeFSI can only read 2d FITS images" :R� "NAXIS1 ":sx%=��s$,10) :\� "NAXIS2 ":sy%=��s$,10) :f� "END " :p' �info% �"Ignoring FITS record "s$ :z� :���s$,8)="END " :�.st%=(�#c%�2880 + 1)*2880:cache%=�:�#c%=st% :�Ȏ input � :�%� 8:r$="FN8":rowbytes%=sx%:�nopal :�C� 16:rowbytes%=2*sx%:� rpal%(255),gpal%(255):step24=2:r$="FN16" :� �C%=0�255 :�gpal%(C%)=C%<<8 :�rpal%(C%)=C% :� �:cheat%=0:�invert% cheat%=F :�e�C%=0�255:r%(C%)=cheat%+C%/65535*F:g%(C%)=((C%�&80)<<8)/65535*F:b%(C%)=cheat%:�:rwt=1:gwt=1:bwt=1 :�Q � 42,"ChangeFSI can't read a FITS image with this number of bits per pixel" :�� :�@info$="FITS file "+�sx%+" by "+�sy%+" pixels, "+�bits(input) ; � 2900 ;<�#c%=4:sx%=�beHW:sy%=�beHW:�#c%=&42:input=�beHW:C%=�beHW ;=rowbytes%=�beHW:C%=�beW:st%=�beW:�#c%=st%:r$="FN8":�nopal ;$#� rpal%(15),gpal%(15),bpal%(15) ;.Irpal%()=&e6,&23,&e6,&7f,&17,&00,&a1,&45,&e6,&4a,&e6,&73,&6e,&47,&8a,0 ;8Igpal%()=&e6,&78,&00,&23,&a1,&73,&2e,&2e,&c8,&a6,&75,&40,&b8,&78,&55,0 ;BIbpal%()=&b8,&e6,&00,&a1,&17,&2e,&0c,&2e,&00,&c6,&00,&e6,&00,&00,&00,0 ;Lk�C%=&80�&8F:r%(C%)=rpal%(C%-&80)/255*F:g%(C%)=gpal%(C%-&80)/255*F:b%(C%)=bpal%(C%-&80)/255*F:�:cache%=� ;VFinfo$="Apollo GPR file "+�sx%+" by "+�sy%+" pixels, "+�bits(input) ;` � 3000 ;jHsx%=720:sy%=�#c%/1440:� rpal%(255),gpal%(255),bpal%(255),table%(255) ;~� � ;� �C%=0�255 ;�table%(C%)=(C%-16)/219*F ;�>r%(C%)=(C%-128)/186*0.624*F:rpal%(C%)=(C%-128)/160*0.952*F ;�?g%(C%)=-(C%-128)/186*0.64*F:gpal%(C%)=-(C%-128)/160*0.277*F ;�=b%(C%)=(C%-128)/186*1.73*F:bpal%(C%)=-(C%-128)/160*1.11*F ;�� ;�� ;� �C%=0�255 ;�table%(C%)=(C%-16)/219*F ;�5r%(C%)=�((C%-128)/160*F):b%(C%)=�((C%-128)/126*F) ;�Jg%(C%)=�(-(C%-128)/160*rwt/gwt*F):gpal%(C%)=�(-(C%-128)/126*bwt/gwt*F) <