Home » Personal collection » Acorn hard disk » zipped_disks » 2000_apps_2 » apps2/!ChangeFSI/ChangeFSI
apps2/!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 » Personal collection » Acorn hard disk » zipped_disks » 2000_apps_2 |
Filename: | apps2/!ChangeFSI/ChangeFSI |
Read OK: | ✔ |
File size: | 28885 bytes |
Load address: | 0000 |
Exec address: | 0000 |
Duplicates
There are 3 duplicate copies of this file in the archive:
- Personal collection » Acorn ADFS disks » Greaseweazled » adfs_1.6M_Apps2.adf » !ChangeFSI/ChangeFSI
- Personal collection » Acorn hard disk » apps » ImagePrcss » !ChangeFSI/ChangeFSI
- Personal collection » Acorn hard disk » apps » web » !ChangeFSI/ChangeFSI
- Personal collection » Acorn hard disk » zipped_disks » 2000_apps_2 » apps2/!ChangeFSI/ChangeFSI
File contents
10REM > ChangeFSI 140areanumber%=0 150SYS"OS_GetEnv" TO A$ 160task%=INSTR(A$," -wimp"):IFtask% THEN 170DIM z%(1),p%(3),s%(3),m$(30) 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% 230IF version%>=350 THEN 240SYS"OS_Memory",8+(2<<8) TO ,r1,r2:vramsize%=r1*r2 250IF vramsize%>0 vram%=TRUE ELSEvram%=FALSE 260ELSE 270vram%=FALSE 280ENDIF 290Wimp = (1<<18) + (3<<6) 300CreateW = Wimp+1:OpenW = Wimp+5 :CloseW = Wimp+6:RedrawW = Wimp+8 310UpdateW = Wimp+9:GetR% = Wimp+10:GetW = Wimp+11:SetI = Wimp+13 320GetI = Wimp+14:GetP = Wimp+15:Drag = Wimp+16:CrMenu = Wimp+20 330DcMenu = Wimp+21 340SYS "OS_SWINumberFromString",,"Wimp_PollIdle" TO Poll% 350SYS "OS_SWINumberFromString",,"XOS_SpriteOp" TO spopx% 360SYS "OS_SWINumberFromString",,"OS_SpriteOp" TO spop% 370SYS "OS_SWINumberFromString",,"OS_ReadMonotonicTime" TO Time% 380SYS "OS_SWINumberFromString",,"ColourTrans_ReturnColourNumber" TO ctran% 390SYS "OS_SWINumberFromString",,"Wimp_SetCaretPosition" TO Caretpos% 400SYS "OS_SWINumberFromString",,"Wimp_GetCaretPosition" TO Getcaret% 410SYS "XOS_SWINumberFromString",,"DragASprite_Start" TO dstart%;f%:IFf%AND 1 dstart%=0 420SYS "XOS_SWINumberFromString",,"JPEG_PlotScaled" TO jpegpaint%;f%:IFf%AND 1 jpegpaint%=0 430SYS "OS_Byte",161,&1C TO ,,f%:IF(f%AND2)=0 dstart%=0 440nextlocation%=HIMEM 450SYS "Wimp_SlotSize",-1,-1 TO originalslot% 460PROClocale_initialise 480IF version%>=300 THEN 490DIM q% 255,ifactors% 15,factors% 15,pixtrans% 255,paltemp% 1023,buffer% 255,idata% 1023 500ELSE 510DIM z% 1699,q% 255,ifactors% 15,factors% 15,pixtrans% 255,paltemp% 1023,buffer% 255,idata% 2399 520eidata%=idata%+2400 530ENDIF 550scrap%=FALSE:sprite%=FALSE:sar%=FALSE:saved%=TRUE:z$=STRING$(12,CHR$13) 570SYS "OS_Byte",161,&8C TO ,,f% 580IFf% AND 1 THEN 590SYS"Wimp_OpenTemplate",,"<ChangeFSI$Dir>.3dTemplate" 600ELSE 610SYS"Wimp_OpenTemplate",,"<ChangeFSI$Dir>.Templates" 620ENDIF 640LOCAL ERROR 650ON ERROR SYS"Wimp_CloseTemplate":ERROR 0,REPORT$+" (code "+STR$ERL+")" 670IFversion%>=300 THEN 690name=q% 700$name="*":here%=0:largest_tem%=0 710SYS "Wimp_LoadTemplate", ,0,,,,name,0 TO ,size%,,,,,here% 720WHILE here% 730IF largest_tem%<size% largest_tem%=size% 740$name="*" 750SYS "Wimp_LoadTemplate", ,0,,,,name,here% TO ,size%,,,,,here% 760ENDWHILE 770DIM z% largest_tem% 780ENDIF 800PROCdotemplate("Info") 810SYS CreateW,,z% TO infow%:$!(z%+88+7*32+20)=m$(21) 830PROCdotemplate("Processing") 840SYS CreateW,,z% TO proc% 850p%(0)=!(z%+88+8*32+20):p%(1)=!(z%+88+9*32+20):p%(2)=!(z%+88+10*32+20):p%(3)=!(z%+88+12*32+20) 870PROCdotemplate("Output") 880SYS CreateW,,z% TO output%:admode%=!(z%+88+20*32+20):adspcl%=!(z%+88+19*32+20):oldmode%=!(z%+88+34*32+20) 900PROCdotemplate("Scaling") 910SYS CreateW,,z% TO scalew%:adscale%=!(z%+88+1*32+20) 920s%(0)=!(z%+88+10*32+20):s%(1)=!(z%+88+11*32+20):s%(2)=!(z%+88+12*32+20):s%(3)=!(z%+88+13*32+20) 940PROCdotemplate("Save") 950SYS CreateW,,z% TO save%:adsave%=!(z%+88+1*32+20):adsavesprite%=!(z%+88+0*32+20) 970PROCdotemplate("Sprite") 980SYS CreateW,,z% TO sinfo%:adsname%=!(z%+88+5*32+20):adsbytes%=!(z%+88+8*32+20) 990adsx%=!(z%+88+7*32+20):adsy%=!(z%+88+9*32+20):adsm%=!(z%+88+6*32+20) 1010PROCdotemplate("Source") 1020SYS CreateW,,z% TO srcinfo%:adsrc%=!(z%+88+0*32+20) 1040PROCdotemplate("Range") 1050SYS CreateW,,z% TO raninfo%:adran%=!(z%+88+0*32+20) 1070PROCdotemplate("Zoom") 1080SYS CreateW,,z% TO zoom%:z%(0)=!(z%+88+4*32+20):z%(1)=!(z%+88+5*32+20) 1100PROCdotemplate("JPEGOutput") 1110SYS CreateW,,z% TO jpego%:adjpegq%=!(z%+88+5*32+20) 1130PROCdotemplate("Pic") 1140SYS CreateW,,z% TO pic%:adtitle%=z%!72 1160RESTORE ERROR 1170SYS"Wimp_CloseTemplate" 1180!q%=-1:q%!4=0:q%!8=0:q%!12=68:q%!16=68:q%!20=%11000000000010 1190$(q%+24)="!"+m$(20):SYS"Wimp_CreateIcon",,q% TO iconbar% 1200A%=OPENIN"<ChangeFSI$Dir>.Choices":IFA%=0 THEN 1210fast%=FALSE:dest%=1:statescale%=%10000000100:stateproc%=0:stateoutput%=&4052008:statejpeg%=&2 1220$p%(0)="":$p%(1)="2"+decimal_point$+"2":$p%(2)="24":$p%(3)="4":$adspcl%="" 1230$admode%="28":$s%(0)="1":$s%(1)="4":$s%(2)="1":$s%(3)="4" 1240$adjpegq%="75":$oldmode%="" 1250ELSE 1260INPUT#A%,fast%,dest%,statescale%,stateproc%,stateoutput%,statejpeg%,$adjpegq%,$oldmode% 1270INPUT#A%,$p%(0),$p%(1),$p%(2),$p%(3),$admode%,$adspcl% 1280$p%(1)=FNlocale_convert($p%(1),".",decimal_point$) 1290INPUT#A%,$s%(0),$s%(1),$s%(2),$s%(3) 1300CLOSE#A% 1310ENDIF 1320q%!12=1<<21 1330!q%=scalew%:FORI%=0TO9:IFstatescale%>>I%AND1 q%!8=1<<21 ELSEq%!8=0 1340q%!4=I%:SYS SetI,,q%:NEXT 1350FORI%=10TO13:IFstatescale%>>I%AND1 q%!8=1<<21 ELSEq%!8=0 1360q%!4=I%+6:SYS SetI,,q%:NEXT 1370!q%=proc%:FORI%=0TO7:IFstateproc%>>I%AND1 q%!8=1<<21 ELSEq%!8=0 1380q%!4=I%:SYS SetI,,q%:NEXT 1390!q%=output%:FORI%=0TO26:IFstateoutput%>>I%AND1 q%!8=1<<21 ELSEq%!8=0 1400q%!4=I%:SYS SetI,,q%:NEXT 1410!q%=jpego%:FORI%=0TO3:IFstatejpeg%>>I%AND1 q%!8=1<<21 ELSEq%!8=0 1420q%!4=I%:SYS SetI,,q%:NEXT 1430IFstateoutput%>>17AND1 q%!8=1<<22 ELSEq%!8=0 1440!q%=output%:q%!12=1<<22:q%!4=7:SYS SetI,,q%:q%!4=8:SYS SetI,,q%:q%!4=13:SYS SetI,,q%:q%!4=14:SYS SetI,,q% 1450PROCshowscaletofit:$z%(0)="1":$z%(1)="1" 1460SYS "OS_UpdateMEMC" TO oldmemc 1470jpegsave%=FALSE 1480ON ERROR SYS"OS_UpdateMEMC",oldmemc,&700:PROCerrorbox:SYS CrMenu,,-1 1490SYS Drag,,-1 1500IFNOTsprite% SYS "Wimp_SlotSize",originalslot%,-1 1510F$="":IFstartfile% startfile%=FALSE:F$=MID$(A$,INSTR(A$,"-wimp")+6):PROCcallFSI 1520REPEAT 1530SYS Poll%,1,q% TO A% 1540CASE A% OF 1550WHEN 1 :IFsprite% PROCredraw_window(!q%) 1560WHEN 2 :PROCopen_window(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,q%!28) 1570WHEN 3 :SYS &400c3,,q%:nextlocation%=HIMEM:PROCremovearea 1580SYS "Wimp_SlotSize",originalslot%,-1:saved%=TRUE:sprite%=FALSE 1590WHEN 6 :PROCcheckmouse(!q%,q%!4,q%!8,q%!12,q%!16,q%!20) 1600WHEN 7 :SYS GetP,,q%:dw%=q%!12:di%=q%!16:IFdstart% SYS"DragASprite_Stop" 1610q%!12=0:q%!16=1:q%!20=dw%:q%!24=di%:q%!28=!q%:q%!32=q%!4:q%!36=!sar%+3 1620IFjpegsave% THENq%!40=&c85 ELSEq%!40=&ff9 1630temp$=FNZS(adsave%):foo%=INSTR(temp$,"."):WHILEfoo% 1640temp$=MID$(temp$,foo%+1):foo%=INSTR(temp$,".") 1650ENDWHILE 1660$(q%+44)=temp$+CHR$0:!q%=44+(LENtemp$+1+3ANDNOT3) 1670SYS "Wimp_SendMessage",17,q%,dw%,di%:myref%=q%!8 1680WHEN 8 :PROCkey(!q%,q%!4,q%!24) 1690WHEN 9 :PROCmenuselect(q%) 1700WHEN 17,18:PROCreceive(q%) 1710ENDCASE 1720UNTIL FALSE 1730ELSE 1740Q%=HIMEM 1750END=&4000000 1760ON ERROR ON ERROR OFF:OSCLI"Set ChangeFSI$ReturnCode "+REPORT$+" (code "+STR$ERL+")":PROCremovearea:CLEAR:END=Q%:END 1770foo%=0:A%=FNChangeFSI(A$,-1,-1,0,-1,-1,foo%,TRUE) 1780PROCremovearea:*unset ChangeFSI$ReturnCode 1790CLEAR:END=Q% 1800ENDIF 1810END 1830DEF PROCdotemplate(a$) 1840LOCAL A% 1850IFversion%>300 THEN 1860SYS "Wimp_LoadTemplate",,0,,,,a$+z$,0 TO ,,indsize% 1870DIM A% indsize% 1880SYS"Wimp_LoadTemplate",,z%,A%,A%+indsize%,-1,a$+z$,0 1890ELSE 1900SYS"Wimp_LoadTemplate",,z%,idata%,eidata%,-1,a$+z$,0 TO ,,idata% 1910ENDIF 1920ENDPROC 1940DEF PROClocale_initialise 1950LOCAL p% 1960LOCAL ERROR 1970ON ERROR LOCAL decimal_point$=".":ENDPROC 1980SYS "Territory_ReadSymbols",-1,0 TO p% 1990decimal_point$=CHR$?p% 2000ENDPROC 2020DEF FNlocale_convert(n$,f$,t$) 2030IF f$=t$ THEN=n$ 2040LOCAL i% 2050i%=INSTR(n$,f$) 2060IF i%<>0 THEN=LEFT$(n$,i%-1)+t$+MID$(n$,i%+1) 2070=n$ 2090DEF PROCreceive(q%) 2100CASE q%!16 OF 2110WHEN 0:PROCremovearea:SYS "Wimp_CloseDown":END 2120WHEN 1:IFq%!20<>save% THEN 2130!q%=60:q%!12=q%!8:q%!16=2:q%!36=-1:$(q%+44)="<Wimp$Scrap>"+CHR$0 2140SYS"Wimp_SendMessage",17,q%,q%!4:scrap%=q%!8 2150ENDIF 2160WHEN 2:IFjpegsave% THEN 2170SYS"OS_File",10,FNZS(q%+44),&c85,,sar%,sar%+jpegsize% 2180ELSE 2190SYSspop%,&10C,sar%,FNZS(q%+44) 2200ENDIF 2210$adsave%=FNZS(q%+44) 2220q%!12=q%!8:q%!16=3:SYS "Wimp_SendMessage",18,q%,q%!4 2230IF q%!36<>-1 saved%=TRUE 2240SYS CrMenu,,-1 2250WHEN 3:F$=FNZS(q%+44):IFscrap% scrap%=scrap%=q%!12 2260q%!12=q%!8:q%!16=4:SYS"Wimp_SendMessage",17,q%,q%!4 2270PROCcallFSI 2280WHEN 5:CASE q%!40 OF 2290WHEN &ff0,&c85 2300q%!12=q%!8:q%!16=4:SYS"Wimp_SendMessage",17,q%,q%!4 2310F$=FNZS(q%+44):PROCcallFSI 2320ENDCASE 2330WHEN 8:IFsaved%ORNOTsprite% ENDPROC 2340!buffer%=ERR:$(buffer%+4)=m$(2)+F$+m$(3)+CHR$0 2350SYS"Wimp_ReportError",buffer%,%10111,m$(20) TO ,A% 2360q%!12=q%!8:IFA%<>1 SYS"Wimp_SendMessage",19,q%,0 2370WHEN9,&400C1:IFsprite% PROCgetmodeinfo:SYS&400d1,pic%,0,-32767,32767,0 2380PROCshowscaletofit 2390WHEN 10:SYS"XOS_ReadVarVal","ChangeFSI$Dir",paltemp%,256,0,3 TO,,bootlen% 2400paltemp%?bootlen%=13 2410BPUT#q%!20,"Run "+$paltemp% 2420ENDCASE 2430ENDPROC 2450DEF PROCcallFSI 2460IF FNcheckvalues THENENDPROC 2470A$=FNdeducemode:A%=47 2480jpegsave%=FALSE:IFdest%=0 THEN 2490jpegsave%=TRUE:A$="JPEG":IFFNgeticonstate(jpego%,2) A$="JPEGMONO" 2500A$+=$adjpegq% 2510ELSE 2520IFFNgeticonstate(output%,15) THEN 2530A$+=$adspcl% 2540ELSE 2550IFFNgeticonstate(output%,16) THEN 2560IFFNgeticonstate(output%,5)ORFNgeticonstate(output%,11) A$+="R" 2570ELSE 2580SYS53,VALA$,3 TO,,A% 2590IFA%=63 THEN 2600IFFNgeticonstate(output%,6) A$="27t" 2610IFFNgeticonstate(output%,12) A$="12t" 2620ELSE 2630IFA%=255 A$+="d" 2640ENDIF 2650ENDIF 2660ENDIF 2670ENDIF 2680A$="garbage "+F$+" <ChangeFSI$Dir>.Foo "+A$ 2690PROCChangeFSISuffix 2700info$="":range$=m$(19):cputime%=0 2710IFsprite% !q%=pic%:SYS &400c3,,q%:saved%=TRUE:sprite%=FALSE 2720nextlocation%=HIMEM 2730SYS "Wimp_SlotSize",originalslot%,-1:PROCremovearea 2740IFfast% SYS "OS_UpdateMEMC",&300,&700 TO oldmemc 2750A%=FNChangeFSI(A$,-1,-1,nextlocation%,0,0,sar%,0) 2760IFfast% SYS "OS_UpdateMEMC",oldmemc,&700 2770IFscrap% scrap%=FALSE:SYS"OS_File",6,F$ 2780IFA%<2 AND sar%<>0 THEN 2790$adsx%=STR$xsp%:$adsy%=STR$ysp%:IFjpegsave% THEN 2800$adsm%="JPEG":$adsname%="JPEG" 2810$adsbytes%=STR$jpegsize% 2820x=xsp%*2:y=ysp%*2 2830SYS&35,-1,4 TO,,nx:SYS&35,-1,5 TO,,ny 2840!ifactors%=1:ifactors%!4=1:ifactors%!8=nx:ifactors%!12=ny 2850$adsavesprite%="file_c85" 2860IF LEFT$(F$,7)="<Wimp$S" F$="JPEGImage" 2870ELSE 2880SYS spopx%,&10d,sar%,pixtrans%,255,1 2890n$=FNZS(pixtrans%):SYS spopx%,&128,sar%,n$ TO,,,x,y,,m 2900$adsm%=STR$m:$adsname%=n$ 2910$adsbytes%=STR$sar%!12 2920SYS&35,m,4 TO,,nx:x=x<<nx 2930SYS&35,m,5 TO,,ny:y=y<<ny:PROCgetmodeinfo 2940$adsavesprite%="file_ff9" 2950IF LEFT$(F$,7)="<Wimp$S" F$="SpriteFile" 2960ENDIF 2970!q%=save%:q%!4=0:q%!8=0:q%!12=0:SYS SetI,,q% 2980$adran%=range$:$adsrc%=info$+m$(0)+STR$(cputime%DIV100)+decimal_point$+RIGHT$("0"+STR$(cputime%MOD100),2)+m$(1) 2990saved%=FALSE:sprite%=TRUE 3030A%=LENF$:WHILEMID$("."+F$,A%,1)<>".":A%-=1:ENDWHILE 3040$adsave%=MID$("."+F$,A%+1) 3060pic%=FNcreate_window(x,y,F$) 3070PROCpopup(pic%,-1) 3080ENDIF 3090ENDPROC 3110DEF FNcheckvalues 3120LOCAL e,error$,flag% 3140IF dest%=0 AND VAL$adjpegq%>100 THEN 3150e=1:error$=m$(22)+m$(25)+m$(23)+m$(27)+m$(24) 3160ENDIF 3180IF LEFT$($admode%,1)<"A" AND dest%=1 THEN 3190SYS &35,VAL$admode%,0 TO ;flag% 3210IF LEN$admode%=0 flag%=2 3220IF VAL$admode%>127 AND VAL$admode%<256 flag%=2 3230IF (flag%AND2)>0 THEN 3240e=2:error$=m$(22)+m$(26)+m$(23)+m$(13)+m$(24) 3250ENDIF 3260ENDIF 3270IF e THEN 3280SYS Drag,,-1:!buffer%=e:$(buffer%+4)=error$+CHR$0 3290SYS "Wimp_ReportError",buffer%,%01,m$(20) TO ,A% 3300IFA%=2 PROCremovearea:SYS "Wimp_CloseDown":END 3310ENDIF 3320=e 3340DEF PROCChangeFSISuffix 3350safe%=TRUE 3360IFFNgeticonstate(scalew%,1) A$+=" "+STR$tofitx+": "+STR$tofity+":":safe%=FALSE 3370IFFNgeticonstate(scalew%,5) A$+=" 1:2":safe%=FALSE 3380IFFNgeticonstate(scalew%,4) A$+=" 1:2 1:1":safe%=FALSE 3390IFFNgeticonstate(scalew%,3) A$+=" 1:1 1:2":safe%=FALSE 3400IFFNgeticonstate(scalew%,9) THEN 3410safe%=FALSE 3420IFVAL$s%(0) A$+=" "+$s%(0) ELSEA$+=" 1" 3430A$+=":"+$s%(1) 3440IFVAL$s%(2) A$+=" "+$s%(2) ELSEA$+=" 1" 3450A$+=":"+$s%(3) 3460ENDIF 3470IFFNgeticonstate(scalew%,0) A$+=" -nosize" 3480IFFNgeticonstate(scalew%,18) A$+=" -noscale" 3490IFFNgeticonstate(scalew%,19) A$+=" -lock" 3500IFFNgeticonstate(scalew%,6) THEN 3510safe%=FALSE:IFFNgeticonstate(scalew%,16) A$+=" -rotate" ELSEA$+=" -rotate-" 3520ENDIF 3530IFFNgeticonstate(scalew%,7) A$+=" -hflip":safe%=FALSE 3540IFFNgeticonstate(scalew%,8) A$+=" -vflip":safe%=FALSE 3550IFFNgeticonstate(proc%,0) A$+=" -range":safe%=FALSE 3560IFFNgeticonstate(proc%,1) A$+=" -equal":safe%=FALSE 3570IFFNgeticonstate(proc%,2) A$+=" -nodither" 3580IFFNgeticonstate(proc%,3) A$+=" -invert":safe%=FALSE 3590IFFNgeticonstate(proc%,4) A$+=" -brighten" 3600IFFNgeticonstate(proc%,5) A$+=" -black"+$p%(0) 3610IFFNgeticonstate(proc%,6) A$+=" -gamma"+FNlocale_convert($p%(1),decimal_point$,"."):safe%=FALSE 3620IFFNgeticonstate(proc%,7) A$+=" -sharpen"+$p%(2):safe%=FALSE 3630IFFNgeticonstate(proc%,11) A$+=" -smooth"+$p%(3) 3640ENDPROC 3660DEF PROCcheckandfinish 3670IFsaved% ORNOTsprite% PROCremovearea:SYS "Wimp_CloseDown":END 3680!buffer%=ERR:$(buffer%+4)=m$(2)+F$+m$(3)+CHR$0 3690SYS "Wimp_ReportError",buffer%,%10111,m$(20) TO ,A% 3700IFA%=1 PROCremovearea:SYS "Wimp_CloseDown":END 3710ENDPROC 3730DEF PROCkey(handle%,icon%,key%) 3740IFkey%=&1b SYS CrMenu,,-1:ENDPROC 3750CASE handle% OF 3760WHEN zoom%:CASE key% OF 3770WHEN 13:PROCdozoom(icon%-4,0):IFicon%=4 SYS &400d2,zoom%,5,,,-1,LEN$z%(0) 3780IFicon%=5 SYS CrMenu,,-1 3790ENDPROC 3800WHEN &18e,&18f:PROCdozoom(icon%-4,0) 3810SYS &400d2,zoom%,icon%EOR1,,,-1,LEN$z%(icon%EOR5):ENDPROC 3820ENDCASE 3830WHEN save% 3840IFkey%=13 PROCsavesprite:ENDPROC 3850WHEN output% 3860IF icon%=34 AND FNgeticonstate(output%, 24) THEN$admode% = $oldmode%:!q%=output%:q%!4=20:q%!8=0:q%!12=0:SYS SetI,,q% 3870PROCshowscaletofit 3880IFkey%=13 SYS CrMenu,,-1:ENDPROC 3890IFkey%=&18e THEN 3900CASE icon% OF 3910WHEN 19:icon%=34:key%=oldmode% 3920WHEN 34:icon%=22:key%=adjpegq% 3930WHEN 22:icon%=19:key%=adspcl% 3940ENDCASE 3950ENDIF 3960IFkey%=&18f THEN 3970CASE icon% OF 3980WHEN 22:icon%=34:key%=oldmode% 3990WHEN 34:icon%=19:key%=adspcl% 4000WHEN 19:icon%=22:key%=adjpegq% 4010ENDCASE 4020ENDIF 4030IFkey%>1024 SYS &400d2,output%,icon%,,,-1,LEN$key%:ENDPROC 4040WHEN proc%:CASE key% OF 4050WHEN &18e,13:icon%+=1:IFicon%>10 icon%=8:IFkey%=13 SYS CrMenu,,-1:ENDPROC 4060SYS &400d2,proc%,icon%,,,-1,LEN$p%(icon%-8):ENDPROC 4070WHEN &18f:icon%-=1:IFicon%<8 icon%=10 4080SYS &400d2,proc%,icon%,,,-1,LEN$p%(icon%-8):ENDPROC 4090ENDCASE 4100WHEN scalew%:CASE key% OF 4110WHEN &18e,13:icon%+=1:IFicon%>13 icon%=10:IFkey%=13 SYS CrMenu,,-1:ENDPROC 4120SYS &400d2,scalew%,icon%,,,-1,LEN$s%(icon%-10):ENDPROC 4130WHEN &18f:icon%-=1:IFicon%<10 icon%=13 4140SYS &400d2,scalew%,icon%,,,-1,LEN$s%(icon%-10):ENDPROC 4150ENDCASE 4160ENDCASE 4170SYS "Wimp_ProcessKey",key% 4180ENDPROC 4200DEF PROCsavesprite 4210IF F$=$adsave% THEN 4220SYS Drag,,-1:!buffer%=3:$(buffer%+4)=m$(28)+CHR$0 4230SYS "Wimp_ReportError",buffer%,%11,m$(20) TO ,A% 4240IFA%=2 THEN 4250SYS CrMenu,,-1 4260ENDPROC 4270ENDIF 4280ENDIF 4290IFjpegsave% THEN 4300SYS"OS_File",10,$adsave%,&c85,,sar%,sar%+jpegsize% 4310ELSE 4320SYS spop%,&10C,sar%,$adsave% 4330ENDIF 4340SYS CrMenu,,-1 4350ENDPROC 4370DEF PROCcheckmouse(mousex%,mousey%,b%,handle%,icon%,ob%) 4380LOCAL moved%:moved%=FALSE 4390IFb%AND2 THEN 4400CASE handle% OF 4410WHEN pic%:PROCdomenu(pic%,m$(4)+">sinfo%,"+m$(5)+">srcinfo%,"+m$(6)+">raninfo%,"+m$(7)+">zoom%,"+m$(8)+">save%,"+m$(9),m$(20)) 4420WHEN -2:PROCdomenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%:dest%,"+m$(27)+">jpego%:1-dest%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20)) 4430ENDCASE 4440rmenuhandle%=handle% 4450ENDIF 4460IFb%AND4 THEN 4470CASE handle% OF 4480WHEN zoom%:CASE icon% OF 4490WHEN 0:PROCdozoom(0,1) 4500WHEN 1:PROCdozoom(0,-1) 4510WHEN 2:PROCdozoom(1,1) 4520WHEN 3:PROCdozoom(1,-1) 4530ENDCASE 4540ENDCASE 4550ENDIF 4560IFb%AND1 THEN 4570CASE handle% OF 4580WHEN zoom%:CASE icon% OF 4590WHEN 0:PROCdozoom(0,-1) 4600WHEN 1:PROCdozoom(0,1) 4610WHEN 2:PROCdozoom(1,-1) 4620WHEN 3:PROCdozoom(1,1) 4630ENDCASE 4640ENDCASE 4650ENDIF 4660IFb%AND5 THEN 4670CASE handle% OF 4680WHEN output%:IF dest%=0 dest%=1:PROCdomenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%:dest%,"+m$(27)+">jpego%:1-dest%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20)):SYS Getcaret%,,q%:moved%=TRUE 4690CASE icon% OF 4700WHEN 3,4,5,6:PROCkillcurrent(STR$(22+icon%)):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:SYS SetI,,q%:q%!4=24:SYS SetI,,q% 4710WHEN 7:PROCkillcurrent("S16,90,90"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:SYS SetI,,q%:q%!4=24:SYS SetI,,q% 4720WHEN 8:PROCkillcurrent("S32,90,90"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:SYS SetI,,q%:q%!4=24:SYS SetI,,q% 4730WHEN 9:PROCkillcurrent("0"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:SYS SetI,,q%:q%!4=24:SYS SetI,,q% 4740WHEN 10:PROCkillcurrent("8"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:SYS SetI,,q%:q%!4=24:SYS SetI,,q% 4750WHEN 11:PROCkillcurrent("12"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:SYS SetI,,q%:q%!4=24:SYS SetI,,q% 4760WHEN 12:PROCkillcurrent("15"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:SYS SetI,,q%:q%!4=24:SYS SetI,,q% 4770WHEN 13:PROCkillcurrent("S16,90,45"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:SYS SetI,,q%:q%!4=24:SYS SetI,,q% 4780WHEN 14:PROCkillcurrent("S32,90,45"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:SYS SetI,,q%:q%!4=24:SYS SetI,,q% 4790WHEN 15:PROCkillcurrent(FNdeducemode):SYS SetI,,q%:SYS Caretpos%,output%,19,,,-1,LEN($adspcl%):!q%=output%:q%!4=7:q%!8=0:q%!12=1<<22:SYS SetI,,q%:q%!4=8:SYS SetI,,q%:q%!4=13:SYS SetI,,q%:q%!4=14:SYS SetI,,q% 4800WHEN 16:PROCkillcurrent(FNdeducemode):!q%=output%:q%!4=7:q%!8=0:q%!12=1<<22:SYS SetI,,q%:q%!4=8:SYS SetI,,q%:q%!4=13:SYS SetI,,q%:q%!4=14:SYS SetI,,q% 4810WHEN 17:PROCkillcurrent(FNdeducemode):!q%=output%:q%!4=7:q%!8=1<<22:q%!12=1<<22:SYS SetI,,q%:q%!4=8:SYS SetI,,q%:q%!4=13:SYS SetI,,q%:q%!4=14:SYS SetI,,q% 4820IF LEFT$($admode%,1) = "S" THEN 4830IF RIGHT$($admode%,2) = "45" THEN 4840PROCkillcurrent("15"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:SYS SetI,,q%:q%!4=24:SYS SetI,,q% 4850ELSE 4860PROCkillcurrent("28"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:SYS SetI,,q%:q%!4=24:SYS SetI,,q% 4870ENDIF 4880ENDIF 4890WHEN 18:!q%=output%:q%!4=24:q%!8=0:q%!12=1<<21:SYS SetI,,q% 4900WHEN 24:!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:SYS SetI,,q%:PROCkillcurrent(FNdeducemode):SYS Caretpos%,output%,34,,,-1,LEN($oldmode%) 4910WHEN 34:IF moved% SYS Caretpos%,output%,q%!4,q%!8,q%!12,q%!16,q%!20 4920WHEN 19:IF moved% SYS Caretpos%,output%,q%!4,q%!8,q%!12,q%!16,q%!20 4930ENDCASE 4940IFFNgeticonstate(output%,18) $admode%=FNdeducemode 4950!q%=output%:q%!4=20:q%!8=0:q%!12=0:SYS SetI,,q% 4960PROCshowscaletofit 4970WHEN save%:CASE icon% OF 4980WHEN 2:PROCsavesprite 4990ENDCASE 5000WHEN -2:IFsprite% PROCgetw(pic%):PROCopen_window(pic%,x0%,y0%,x1%,y1%,scx%,scy%,-1) 5010WHEN jpego%:IF dest%=1 THEN 5020SYS Getcaret%,,q% 5030dest%=0:PROCdomenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%:dest%,"+m$(27)+">jpego%:1-dest%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20)) 5040IF icon%=5 SYS Caretpos%,jpego%,q%!4,q%!8,q%!12,q%!16,q%!20 5050ENDIF 5060CASE icon% OF 5070WHEN 3:IF b%AND4 THEN$adjpegq%=STR$(VAL$adjpegq%-1) ELSE$adjpegq%=STR$(VAL$adjpegq%+1) 5080IF VAL$adjpegq%<0 $adjpegq%="0" 5090IF VAL$adjpegq%>100 $adjpegq%="100" 5100!q%=jpego%:q%!4=5:q%!8=0:q%!12=0:SYS SetI,,q% 5110SYS Caretpos%,jpego%,5,,,-1,LEN$adjpegq% 5120WHEN 4:IF b%AND4 THEN$adjpegq%=STR$(VAL$adjpegq%+1) ELSE$adjpegq%=STR$(VAL$adjpegq%-1) 5130IF VAL$adjpegq%<0 $adjpegq%="0" 5140IF VAL$adjpegq%>100 $adjpegq%="100" 5150!q%=jpego%:q%!4=5:q%!8=0:q%!12=0:SYS SetI,,q% 5160SYS Caretpos%,jpego%,5,,,-1,LEN$adjpegq% 5170WHEN 5 5180ENDCASE 5190ENDCASE 5200ENDIF 5210IFb%AND&50 THEN 5220CASE handle% OF 5230WHEN save%:CASE icon% OF 5240WHEN 0:PROCgetw(save%) 5250!q%=save%:q%!4=0:SYS GetI,,q% 5260!q%=save%:q%!4=5:q%!8+=bx%:q%!12+=by%:q%!16+=bx%:q%!20+=by% 5270q%!24=0:q%!28=0:q%!32=&7FFFFFFF:q%!36=&7FFFFFFF 5280t$="file_ff9":IFjpegsave% t$="file_c85" 5290IFdstart% SYS dstart%,%11000101,1,t$,q%+8,q%+24 ELSESYS "Wimp_DragBox",,q% 5300ENDCASE 5310ENDCASE 5320ENDIF 5330ENDPROC 5350DEF PROCdozoom(s%,a%) 5360IFs%=0 THEN 5370$z%(0)=STR$(VAL$z%(0)+a%):IF$z%(0)="0" $z%(0)="1" 5380ELSE 5390$z%(1)=STR$(VAL$z%(1)+a%):IF$z%(1)="0" $z%(1)="1" 5400ENDIF 5410!q%=zoom%:q%!4=4+s%:q%!8=0:q%!12=0:SYS SetI,,q% 5420!q%=pic%:SYS GetW,,q%:f%=q%!28:SYS &400c3,,q% 5430pic%=FNcreate_window(x,y,F$) 5440PROCpopup(pic%,f%) 5450ENDPROC 5470DEF PROCdomenu(handle%,menu$,menutitle$) 5480menuhandle%=handle% 5490menuptr%=buffer%:indirect%=idata% 5500i%=0 5510menuptr%!20=44 5520$menuptr%=menutitle$ 5530menuptr%?12=7:menuptr%?13=2:menuptr%?14=7:menuptr%?15=0 5540menuptr%!16=200:menuptr%!24=0 5550menuptr%+=28 5560REPEAT i1%=i%+1:i%=INSTR(menu$+",",",",i1%) 5570item$=MID$(menu$,i1%,i%-i1%):PROCmenuitem(item$):UNTIL item$="" 5580menuptr%!-24=(menuptr%!-24)OR&80 5590IFhandle%=101 SYS CrMenu,,buffer%,mousex%-64,96+9*44 ELSESYS CrMenu,,buffer%,mousex%-32,mousey%+16 5600ENDPROC 5620DEF PROCmenuitem(text$) 5630IF text$="" ENDPROC 5640flg%=0:submenu%=-1:I%=INSTR(text$,":"):IFI%THEN 5650flg%=EVALMID$(text$,I%+1):text$=LEFT$(text$,I%-1) 5660ENDIF 5670I%=INSTR(text$,">"):IFI%THEN 5680submenu%=EVALMID$(text$,I%+1):text$=LEFT$(text$,I%-1) 5690ENDIF 5700menuptr%!0=flg% 5710menuptr%!4=submenu% 5720IF(text$=m$(9)AND(F$="" OR F$="SpriteFile" OR F$="JPEGImage")) OR (text$=m$(14)ANDvram%) THEN 5730menuptr%!8=&07400021 5740ELSE 5750menuptr%!8=&07000021 5760ENDIF 5770IFLENtext$*16+8>buffer%!16 buffer%!16=LENtext$*16+8 5780IFLENtext$>12 THEN 5790menuptr%!8=menuptr%!8 OR 256:menuptr%!20=LENtext$+1:menuptr%!16=0 5800menuptr%!12=indirect%:$indirect%=text$:indirect%+=LENtext$+2 5810ELSE 5820$(menuptr%+12)=text$ 5830ENDIF 5840menuptr%+=24 5850ENDPROC 5870DEF PROCmenuselect(menus%) 5880SYS GetP,,paltemp%:adjust%=paltemp%!8 AND 1 5890SYS DcMenu,,buffer%,menus%,STRING$(200," ")TO,,,a$ 5900IF a$="" THENENDPROC 5910CASE menuhandle% OF 5920WHEN pic% 5930CASE a$ OF 5940WHEN m$(9):PROCcallFSI 5950ENDCASE 5960WHEN 101 5970CASE a$ OF 5980WHEN m$(14):fast%=NOTfast% 5990WHEN m$(27):dest%=0 6000WHEN m$(13):dest%=1 6010WHEN m$(9):PROCcallFSI 6020WHEN m$(15) 6030statescale%=0:FORI%=0TO9:statescale%+=FNgeticonstate(scalew%,I%)<<I%:NEXT 6040FORI%=10TO13:statescale%+=FNgeticonstate(scalew%,I%+6)<<I%:NEXT 6050stateproc%=0:FORI%=0TO7:stateproc%+=FNgeticonstate(proc%,I%)<<I%:NEXT 6060stateoutput%=0:FORI%=0TO26:stateoutput%+=FNgeticonstate(output%,I%)<<I%:NEXT 6070statejpeg%=0:FORI%=0TO3:statejpeg%+=FNgeticonstate(jpego%,I%)<<I%:NEXT 6080A%=OPENOUT"<ChangeFSI$Dir>.Choices" 6090PRINT#A%,fast%,dest%,statescale%,stateproc%,stateoutput%,statejpeg%,$adjpegq%,$oldmode% 6100PRINT#A%,$p%(0),FNlocale_convert($p%(1),decimal_point$,"."),$p%(2),$p%(3),$admode%,$adspcl% 6110PRINT#A%,$s%(0),$s%(1),$s%(2),$s%(3) 6120CLOSE#A% 6130WHEN m$(16):PROCcheckandfinish 6140ENDCASE 6150ENDCASE 6160IFadjust% PROCcheckmouse(0,0,2,rmenuhandle%,0,0) 6170ENDPROC 6190DEF FNcreate_window(x,y,title$) 6200x=x*VAL$z%(0)DIVVAL$z%(1):y=y*VAL$z%(0)DIVVAL$z%(1) 6210!z%=0:z%!4=-y:z%!8=x:z%!12=0 6220z%!40=0:z%!44=-y:z%!48=x:z%!52=0 6230IFx<128 OR y<128 z%?35=0 ELSEz%?35=255 6240$adtitle%="":SYS CreateW,,z% TO handle% 6250$adtitle%=title$ 6260=handle% 6280DEF PROCpopup(handle%,f%) 6290SYS "OS_ReadModeVariable",-1,4 TO ,,modexshift% 6300SYS "OS_ReadModeVariable",-1,5 TO ,,modeyshift% 6310SYS "OS_ReadModeVariable",-1,11 TO ,,rightscr% 6320SYS "OS_ReadModeVariable",-1,12 TO ,,topscr% 6330rightscr%=rightscr%<<modexshift%:topscr%=topscr%<<modeyshift% 6340PROCgetw(handle%) 6350xo%=rightscr%/2-(x0%+x1%)/2:yo%=topscr%/2-(y0%+y1%)/2 6360PROCopen_window(handle%,x0%+xo%,y0%+yo%,x1%+xo%,y1%+yo%,scx%,scy%,f%) 6370ENDPROC 6390DEF PROCopen_window(handle%,x0%,y0%,x1%,y1%,scx%,scy%,bhandle%) 6400IFhandle%=-1THENENDPROC 6410q%!0=handle%:q%!28=bhandle% 6420q%!4=x0%:q%!8=y0%:q%!12=x1%:q%!16=y1% 6430q%!20=scx%:q%!24=scy% 6440SYS OpenW,,q% 6450ENDPROC 6470DEF PROCgetw(handle%) 6480!q%=handle%:SYS GetW,,q% 6490PROCinfo(q%+4):bhandle%=q%!28:flags%=q%!32 6500ENDPROC 6520DEF PROCinfo(q%) 6530x0%=!q%:y0%=q%!4:x1%=q%!8:y1%=q%!12:scx%=q%!16:scy%=q%!20 6540bx%=x0%-scx%:by%=y1%-scy% 6550ENDPROC 6570DEF PROCredraw_window(handle%) 6580IF handle%=pic% THEN 6590!factors%=!ifactors%*VAL$z%(0):factors%!4=ifactors%!4*VAL$z%(0) 6600factors%!8=ifactors%!8*VAL$z%(1):factors%!12=ifactors%!12*VAL$z%(1) 6610PROCreduce(!factors%,factors%!8):PROCreduce(factors%!4,factors%!12) 6620!q%=handle% 6630SYS RedrawW,,q% TO more% 6640PROCinfo(q%+4):by%=by%-INT(y*VAL$z%(0)DIVVAL$z%(1)) 6650WHILE more% 6660IFjpegsave% THEN 6670IFjpegpaint% SYS jpegpaint%,sar%,bx%,by%,factors%,jpegsize%,1 TO;V%:IF(V%AND1)=0 ELSECLG 6680ELSE 6690SYS spopx%,&134,sar%,n$,bx%,by%,,factors%,spx% 6700ENDIF 6710SYS GetR%,0,q% TO more% 6720ENDWHILE 6730ENDIF 6740ENDPROC 6760DEF FNgeticonstate(handle%,icon%) 6770!q%=handle%:q%!4=icon%:SYS GetI,,q% 6780=q%!24>>21 AND 1 6800DEF PROCgetmodeinfo 6810IFjpegsave% THEN 6820SYS&35,-1,4 TO,,nx:SYS&35,-1,5 TO,,ny 6830!ifactors%=1:ifactors%!4=1:ifactors%!8=nx:ifactors%!12=ny 6840ENDPROC 6850ENDIF 6860SYS"XWimp_ReadPixTrans",&100,sar%,n$,,,,ifactors%,pixtrans% 6870SYS spopx%,&118,sar%,n$ TO ,,sptr% 6880IF sptr%!32=44 THEN 6890palptr%=0 6900ELSE 6910FOR grab%=0 TO 2048-8 STEP 8:paltemp%!(grab%>>1)=sptr%!(grab%+44):NEXT 6920palptr%=paltemp% 6930ENDIF 6940FORQ%=0TO255:pixtrans%?Q%=Q%:NEXT 6950IFsptr%!32=44+2048 THEN 6960FORQ%=0TO255:SYSctran%,palptr%!(Q%<<2)TOpixtrans%?Q%:NEXT 6970ELSE 6980SYS "ColourTrans_SelectTable",m,palptr%,-1,-1,pixtrans% 6990ENDIF 7000spx%=-1:FORQ%=0TO255:IFpixtrans%?Q%<>Q% spx%=pixtrans% 7010NEXT 7020ENDPROC 7040DEF FNdeducemode 7050LOCAL m,x,y 7060IFFNgeticonstate(output%,21) THEN 7070IFFNgeticonstate(output%,17) THEN="JPEG8" ELSE="JPEG24" 7080ELSE 7090IFFNgeticonstate(output%,18) THEN 7100SYS &6,135 TO ,,m 7120SYS&35,-1,9 TO,,m 7130IFm>3 THEN 7140SYS&35,-1,4 TO,,x:SYS&35,-1,5 TO,,y 7150x=180/(2^x):y=180/(2^y) 7160="S"+STR$(2^m)+","+STR$x+","+STR$y 7170ELSE 7180=STR$MODE 7190ENDIF 7200ELSE 7210IF FNgeticonstate(output%,24) THEN 7220=$oldmode% 7230ELSE 7240=$admode% 7250ENDIF 7260ENDIF 7270ENDIF 7290DEF PROCshowscaletofit 7300LOCAL m,x,y 7310$admode%=FNdeducemode 7320CASE ?admode% OF 7330WHEN ASC"S" 7340IFVALMID$($admode%,5)>VALMID$($admode%,8) x=6 ELSEx=0 7350IFVALMID$($admode%,2)>16 x+=5 ELSEx+=4 7360SYS&35,-1,11 TO,,tofitx:SYS&35,-1,12 TO,,tofity 7370WHEN ASC"J" 7380SYS&35,-1,11 TO,,tofitx:SYS&35,-1,12 TO,,tofity 7400x=12 7410OTHERWISE 7420m=VAL$admode% 7430SYS&35,m,11 TO,,tofitx:SYS&35,m,12 TO,,tofity 7440SYS&35,m,4 TO,,x:SYS&35,m,5 TO,,y:IFy>x x=6 ELSEx=0 7450SYS&35,m,9 TO,,y:x+=y 7460ENDCASE 7470tofitx+=1:tofity+=1:$adscale%=m$(17)+STR$tofitx+m$(18)+STR$tofity 7480q%!12=1<<21:!q%=output%:FORI%=0TO11:IFI%=x q%!8=1<<21 ELSEq%!8=0 7490q%!4=I%+3:SYS SetI,,q%:NEXT:IFx=12 q%!8=0:q%!4=24:SYS SetI,,q% 7500ENDPROC 7520DEF PROCkillcurrent(m$) 7530q%!12=1<<21:!q%=output%:q%!8=0 7540q%!4=20:SYS SetI,,q% 7550$admode%=m$ 7570ENDPROC 7590DEFFNZS(I%)LOCALA$:REPEATA$+=CHR$?I%:I%+=1:UNTIL?I%<14:=A$ 7610DEF PROCerrorbox 7620SYS Drag,,-1:!buffer%=ERR:$(buffer%+4)=REPORT$+" (code "+STR$ERL+")"+CHR$0 7630SYS "Wimp_ReportError",buffer%,%11,m$(20) TO ,A% 7640IFA%=2 PROCremovearea:SYS "Wimp_CloseDown":END 7650ENDPROC 7880DEF FNChangeFSI(A$,spritearea%,workspace%,worklimit%,oksave%,okinfo%,RETURN ram%,fast%) 7890LOCAL A$(),r%(),g%(),b%(),rpal%(),gpal%(),bpal%(),table%(),cl%(),xl%(),xl2%() 7900LOCAL xp%(),rm%(),rm1%(),rm2%(),vals%(),nl%(),A%(),B%(),new%(),st%(),jpq%(),m 7910WHILELEFT$(A$,1)<>" "ANDLENA$<>0 A$=MID$(A$,2):ENDWHILE 7920WHILELEFT$(A$,1)=" " A$=MID$(A$,2):ENDWHILE 7930WHILERIGHT$(A$,1)=" " A$=LEFT$(A$):ENDWHILE 7940IFFNuc(LEFT$(A$,5))="-QUIT" THEN 7950A$=MID$(A$,7):WHILELEFT$(A$,1)<>" "ANDLENA$<>0 A$=MID$(A$,2):ENDWHILE 7960WHILELEFT$(A$,1)=" " A$=MID$(A$,2):ENDWHILE 7970ENDIF 7980DIM A$(100):ARG%=0:B%=INSTR(A$," ") 7990WHILE B%<>0 8000ARG%+=1:A$(ARG%)=LEFT$(A$,B%-1):A$=MID$(A$,B%+1) 8010WHILE LEFT$(A$,1)=" ":A$=MID$(A$,2):ENDWHILE 8020B%=INSTR(A$," ") 8030ENDWHILE 8040IFA$<>"" ARG%+=1:A$(ARG%)=A$ 8050invert%=FALSE:range%=FALSE:sharpen%=FALSE:info%=FALSE:cache%=FALSE:cacheareanumber%=0:dither%=TRUE:black%=FALSE 8060hist%=FALSE:equal%=FALSE:vflip%=FALSE:hflip%=FALSE:scale%=TRUE:scaleo%=TRUE:scrapf%=FALSE 8070gamma=1:rotate%=FALSE:max%=20000000:bright%=15:lock%=FALSE 8080rwt=.299:gwt=.587:bwt=.114 8090IFARG%<3 THEN 8100PRINT"ChangeFSI interactive input (read FSIinfo for command line details)" 8110INPUT"Source file: "s$,"Destination file: "f$,"Output mode: "m$ 8120INPUT"(X)Scale (e.g. 2:1): "xs$:INPUT"Y Scale: "ys$ 8130INPUT"Info on input picture?"a$:IFFNuc(LEFT$(a$,1))="Y" info%=TRUE 8140INPUT"Invert picture colours?"a$:IFFNuc(LEFT$(a$,1))="Y" invert%=TRUE 8150INPUT"Compute histogram of input?"a$:IFFNuc(LEFT$(a$,1))="Y" hist%=TRUE 8160INPUT"Apply histogram equalisation?"a$:IFFNuc(LEFT$(a$,1))="Y" equal%=TRUE 8170INPUT"Expand input dynamic range?"a$:IFFNuc(LEFT$(a$,1))="Y" range%=TRUE:equal%=FALSE 8180INPUT"Sharpen picture by (e.g. 12 for harsh, 24 for soft) "a$ 8190IFa$<>"" sharpen%=VALa$ 8200INPUT"Rotate?"a$:IFFNuc(LEFT$(a$,1))="Y" rotate%=1 8210scale%=FALSE:scaleo%=FALSE:fast%=FALSE 8220ELSE 8230REPEAT A%=ARG% 8240IFFNuc(A$(ARG%))="-INFO" info%=TRUE:A$(ARG%)="":ARG%-=1 8250IFFNuc(A$(ARG%))="-HIST" hist%=TRUE:A$(ARG%)="":ARG%-=1 8260IFFNuc(A$(ARG%))="-LOCK" lock%=TRUE:A$(ARG%)="":ARG%-=1 8270IFFNuc(A$(ARG%))="-EQUAL" equal%=TRUE:range%=FALSE:A$(ARG%)="":ARG%-=1 8280IFFNuc(A$(ARG%))="-RANGE" range%=TRUE:equal%=FALSE:A$(ARG%)="":ARG%-=1 8290IFFNuc(A$(ARG%))="-INVERT" invert%=TRUE:A$(ARG%)="":ARG%-=1 8300IFFNuc(A$(ARG%))="-NOSCALE" scale%=FALSE:scaleo%=FALSE:A$(ARG%)="":ARG%-=1 8310IFFNuc(A$(ARG%))="-NOSIZE" scale%=FALSE:A$(ARG%)="":ARG%-=1 8320IFFNuc(A$(ARG%))="-NODITHER" dither%=FALSE:A$(ARG%)="":ARG%-=1 8330IFFNuc(A$(ARG%))="-BRIGHTEN" bright%=16:A$(ARG%)="":ARG%-=1 8340IFFNuc(A$(ARG%))="-ROTATE" rotate%=1:A$(ARG%)="":ARG%-=1 8350IFFNuc(A$(ARG%))="-ROTATE-" rotate%=-1:A$(ARG%)="":ARG%-=1 8360IFFNuc(A$(ARG%))="-VFLIP" vflip%=TRUE:A$(ARG%)="":ARG%-=1 8370IFFNuc(A$(ARG%))="-HFLIP" hflip%=TRUE:A$(ARG%)="":ARG%-=1 8380IFFNuc(A$(ARG%))="-NOMODE" fast%=FALSE:A$(ARG%)="":ARG%-=1 8390IFFNuc(LEFT$(A$(ARG%),6))="-BLACK" THEN 8400black%=32:IFLENA$(ARG%)>6 black%=VALMID$(A$(ARG%),7):IFblack%>128 black%=128 8410A$(ARG%)="":ARG%-=1 8420ENDIF 8430IFFNuc(LEFT$(A$(ARG%),6))="-GAMMA" THEN 8440gamma=2.2:IFLENA$(ARG%)>6 gamma=VALMID$(A$(ARG%),7) 8450A$(ARG%)="":ARG%-=1 8460ENDIF 8470IFFNuc(LEFT$(A$(ARG%),8))="-SHARPEN" THEN 8480sharpen%=24:IFLENA$(ARG%)>8 sharpen%=VALMID$(A$(ARG%),9) 8490A$(ARG%)="":ARG%-=1 8500ENDIF 8510IFFNuc(LEFT$(A$(ARG%),7))="-SMOOTH" THEN 8520sharpen%=-1:IFLENA$(ARG%)>7 sharpen%=-VALMID$(A$(ARG%),8) 8530A$(ARG%)="":ARG%-=1:IFsharpen%<-23 sharpen%=-23 8540ENDIF 8550IFFNuc(LEFT$(A$(ARG%),4))="-RED" rwt=VALMID$(A$(ARG%),5):A$(ARG%)="":ARG%-=1 8560IFFNuc(LEFT$(A$(ARG%),6))="-GREEN" gwt=VALMID$(A$(ARG%),7):A$(ARG%)="":ARG%-=1 8570IFFNuc(LEFT$(A$(ARG%),5))="-BLUE" bwt=VALMID$(A$(ARG%),6):A$(ARG%)="":ARG%-=1 8580IFFNuc(LEFT$(A$(ARG%),4))="-MAX" THEN 8590max%=VALMID$(A$(ARG%),5):IFINSTR(A$(ARG%),"K")ORINSTR(A$(ARG%),"k") max%=max%*1024 8600A$(ARG%)="":ARG%-=1 8610ENDIF 8620UNTILA%=ARG% 8630s$=A$(1):f$=A$(2):m$=A$(3):xs$=A$(4):ys$=A$(5) 8640ENDIF 8650IFokinfo% ELSEinfo%=FALSE 8660IFworkspace%>=0 THEN 8670flex%=FALSE 8680ELSE 8690IFworklimit%=0 THENflex%=FALSE ELSEflex%=TRUE:nextlocation%=worklimit% 8700ENDIF 8710pnm$=FNuc(m$):CASE LEFT$(pnm$+",",3) OF 8720WHEN"AIM":m=-1:m$="" 8730WHEN"P1,","P4,":m=-2:m$="":spm=18 8740WHEN"P2,","P5,":m=-2:m$="T":spm=20 8750WHEN"P3,","P6,":m=-4:pnm$=LEFT$(pnm$,2):p6bits=8:I%=VALMID$(m$,4):m$="" 8760IFI%>0IFI%<8 p6bits=I% 8770WHEN"P15":m=-3:m$="" 8780WHEN"C15":m=-5:m$="" 8790WHEN"IRL":m=-4:m$="":p6bits=8 8800WHEN"S16":m=-6:m$="" 8810WHEN"S24":m=-7:m$="":p6bits=8 8820WHEN"S32":m=-8:m$="":p6bits=8 8830WHEN"JPE":m$="":p6bits=8:IFLEFT$(pnm$,8)="JPEGMONO" m=-9:jpegquality%=VALMID$(pnm$,9) ELSEm=-10:jpegquality%=VALMID$(pnm$,5) 8840OTHERWISE:m=VALm$:spm=m:m$=FNuc(RIGHT$(m$,1)):IFINSTR("CDRT",m$)=0 m$="" 8850ENDCASE 8860IFxs$="" OR LEFT$(xs$,1)="-" THEN 8870xmul%=1:xdiv%=1:ymul%=1:ydiv%=1 8880ELSE 8890IFys$="" ys$=xs$ 8900xmul%=VALxs$:xdiv%=VALMID$(xs$,INSTR(xs$,":")+1) 8910ymul%=VALys$:ydiv%=VALMID$(ys$,INSTR(ys$,":")+1) 8920ENDIF 8930flag=-1:SYS8,5,s$ TO r0,,r2:dir=r0=2 8940IFdir THEN 8950panic=TRUE:SYS8,5,s$+".raw" TO r0,,r2:IFr0=1 s$+=".raw":dir=FALSE:panic=FALSE 8960IFpanic SYS8,5,s$+".red" TO r0,,r2:IFr0=1 panic=FALSE 8970IFpanic ERROR 42,"Directory given" 8980ENDIF 8990ftype=r2>>8 AND &FFF:bits=28:F=2^bits:c%=0:cc%=0:ccc%=0:o%=0 9000IFdir THEN 9010c%=OPENIN(s$+".red"):IFc%=0 ERROR 42,"Red file "+s$+".red not found" 9020cc%=OPENIN(s$+".green"):IFcc%=0 ERROR42,"Green file "+s$+".green not found" 9030ccc%=OPENIN(s$+".blue"):IFccc%=0 ERROR42,"Blue file "+s$+".blue not found" 9040ELSE 9050c%=OPENINs$:IFc%=0 ERROR 42,"File "+s$+" not found" 9060ENDIF 9070LOCAL ERROR 9080ON ERROR LOCAL RESTORE ERROR:TRACE OFF:PROCclose:ERROR ERR,REPORT$ 9110colourindex=255 9120SYS&66f4d TO;pcd% 9130CASE ftype OF 9140WHEN &FF9:flag=0 9150IFINSTR("."+FNuc(s$),".HIP.")ORINSTR(FNuc(s$),":HIP.") THEN 9160flag=300:I%=INSTR(FNuc(s$),"HIP.") 9170MID$(s$,I%)="LOP.":cc%=OPENINs$:IFcc%=0 ERROR42,"Can't find Lop file "+s$ 9180ENDIF 9190WHEN &FF0:PTR#c%=0:S$="":FORI%=1TO4:S$+=CHR$BGET#c%:NEXT 9200IFS$="II*"+CHR$0 flag=1500:bigendian=FALSE 9210IFS$="MM"+CHR$0+"*" flag=1500:bigendian=TRUE 9220WHEN &DFA:flag=800:IFdir flag=801 9230WHEN &DE2:flag=1000 9240WHEN &CBE:flag=3800 9250WHEN &BE8:IF(pcd%AND1)=0 flag=3600 9260WHEN &7A0:flag=1200 9270WHEN &69d:flag=2000 9280WHEN &699:flag=700 9290WHEN &698:flag=100 9300WHEN &697:flag=1900 9310WHEN &691:flag=2600 9320WHEN &690:flag=2500 9330WHEN &666:flag=666 9340WHEN &601:flag=3000 9350WHEN &371:flag=3100 9360WHEN &300:flag=1300:IFdir flag=1301 9370WHEN 4:flag=900:IFdir flag=901 9380WHEN 6:flag=950 9390ENDCASE 9400IFflag=-1 THEN 9410PTR#c%=0:S$="":FORI%=1TO22:S$+=CHR$BGET#c%:NEXT 9420IFLEFT$(S$,7)="FSIfile" flag=2100 9430IFflag=-1 IFLEFT$(S$,8)="SIMPLE " flag=2800 9440IFflag=-1 IFFNuc(LEFT$(S$,8))="MERCSOFT"ORFNuc(LEFT$(S$,8))="SNAPSHOT"flag=902 9450IFflag=-1 IFFNuc(LEFT$(S$,8))="MERCSOF1" flag=903 9460IFflag=-1 IFFNuc(LEFT$(S$,13))="IRLAM YUV 411" flag=2250 9470IFflag=-1 IFLEFT$(S$,5)="Irlam" flag=2200 9480IFflag=-1 IFLEFT$(S$,2)="BM" flag=2400:riffoff%=0 9490IFflag=-1 IFLEFT$(S$,4)="RIFF" AND MID$(S$,9,8)="RDIBdata" AND MID$(S$,21,2)="BM" flag=2400:riffoff%=20 9500IFflag=-1 IFLEFT$(S$,4)="GIF8" flag=500 9510IFflag=-1 IFLEFT$(S$,5)="AV_VO" flag=600 9520IFflag=-1 IFLEFT$(S$,4)=CHR$&59+CHR$&A6+CHR$&6A+CHR$&95 flag=1100 9530IFflag=-1 IFLEFT$(S$,4)=CHR$0+CHR$1+CHR$0+CHR$8 flag=1400 9540IFflag=-1 IFLEFT$(S$,4)=CHR$0+CHR$1+CHR$0+CHR$1 flag=2900 9550IFflag=-1 IFLEFT$(S$,4)="RIX3" flag=2700 9560IFflag=-1 IFLEFT$(S$,4)="II*"+CHR$0 flag=1500:bigendian=FALSE 9570IFflag=-1 IFLEFT$(S$,4)="MM"+CHR$0+"*" flag=1500:bigendian=TRUE 9580IFflag=-1 IFLEFT$(S$,2)=CHR$&52+CHR$&CC flag=2300 9590IFflag=-1 IFLEFT$(S$,2)="P4"ORLEFT$(S$,2)="P5"ORLEFT$(S$,2)="P6" flag=3300:info$="" 9600IFflag=-1 IFLEFT$(S$,3)="P15" flag=3400 9610IFflag=-1 IFLEFT$(S$,3)="PIC" flag=3500 9620IFflag=-1 IFLEFT$(S$,3)="T-I" flag=3800 9630IFflag=-1 IFFNuc(LEFT$(S$,3))="P13" flag=3450 9640IFflag=-1 IFLEFT$(S$,4)="FORM" IFMID$(S$,9,4)="ILBM" flag=1600 9650IFflag=-1 IFLEFT$(S$,8)="ALPIAR12" flag=3900:colourindex=4095 9660IFflag=-1 IFLEFT$(S$,8)="ALPIAR16" flag=3905:colourindex=65535 9670IFflag=-1 THEN 9680IFMID$(S$,7,4)="JFIF" OR ftype=&C85 THEN 9690jpegblk%=FNdim(20):PROCcachesize(jpegblk%) 9700IFcache%<EXT#c% THEN 9710CLOSE#c%:c%=0:X%=OPENIN"Run:djpeg" 9720IFX% THEN 9730CLOSE#X%:PROCsubtask("djpeg "+s$+" <Wimp$Scrap>") 9740ELSE 9750SYS"XOS_CLI","djpeg "+s$+" <Wimp$Scrap>" TO ;V 9760IFV AND1 THEN 9770PROCsubtask("<ChangeFSI$Dir>.djpeg "+s$+" <Wimp$Scrap>") 9780ENDIF 9790ENDIF 9800c%=OPENIN"<Wimp$Scrap>":IFc%=0 THEN=100 9810scrapf%=TRUE:flag=3300:info$="JPEG (JFIF) file converted to " 9820ELSE 9830flag=3700 9840ENDIF 9850ENDIF 9860ENDIF 9870IFflag=-1 THEN 9880IFLEFT$(S$,5)="btpc " THEN 9890CLOSE#c%:c%=0:PROCsubtask("<ChangeFSI$Dir>.btpc "+s$+" <Wimp$Scrap>") 9900c%=OPENIN"<Wimp$Scrap>":IFc%=0 THEN=100 9910scrapf%=TRUE:flag=3300:info$="BTPC file converted to " 9920ENDIF 9930ENDIF 9940IFflag=-1 THEN 9950PTR#c%=&10:S$="":FORI%=1TO9:S$+=CHR$BGET#c%:NEXT 9960IFS$="MILLIPEDE" flag=200 9970ENDIF 9980IFflag=-1 THEN 9990PTR#c%=&41:S$="":FORI%=1TO8:S$+=CHR$BGET#c%:NEXT 10000IFLEFT$(S$,4)="PNTG" flag=1800:st%=&280 10010ENDIF 10020IFflag=-1 THEN 10030PTR#c%=196:S$="":FORI%=1TO8:S$+=CHR$BGET#c%:NEXT 10040IFLEFT$(S$,4)="PNTG" flag=1800:st%=&2e2 10050ENDIF 10060IFflag=-1 THEN 10070PTR#c%=522:S$="":FORI%=1TO8:S$+=CHR$BGET#c%:NEXT 10080IFS$=CHR$0+CHR$&11+CHR$2+CHR$&ff+CHR$&c+CHR$0+CHR$&ff+CHR$&fe flag=1850 10090ENDIF 10100IFflag=-1 THEN 10110PTR#c%=0:IFBGET#c%=10 THEN 10120C%=BGET#c%:IFC%<6 AND C%<>1 ANDBGET#c%=1 flag=1900 10130ENDIF 10140ENDIF 10150IFflag=-1 IFINSTR("."+FNuc(s$),".PCX.")ORINSTR(FNuc(s$),":PCX.")ORRIGHT$(s$,4)="/PCX" flag=1900 10160IFflag=-1 IFINSTR("."+FNuc(s$),".IMAGE.")ORINSTR(FNuc(s$),":IMAGE.") flag=400 10170IFflag=-1 IFFNuc(RIGHT$(s$,4))=".RAW" flag=100 10180IFflag=-1 IFFNuc(RIGHT$(s$,3))="TGA" flag=2000 10190IFflag=-1 IFFNuc(RIGHT$(s$,3))="VDA" flag=2000 10200IFflag=-1 IFINSTR("."+FNuc(s$),".PIC.")ORINSTR(FNuc(s$),":PIC.") flag=700 10210IFflag=-1 IFINSTR("."+FNuc(s$),".IMG.")ORINSTR(FNuc(s$),":IMG.")ORRIGHT$(s$,4)="/IMG" flag=1400 10220IFflag=-1 IFINSTR("."+FNuc(s$),".DSP.")ORINSTR(FNuc(s$),":DSP.")ORRIGHT$(s$,4)="/DSP" flag=1700 10230IFflag=-1 IFFNuc(RIGHT$(s$,4))="/RGB" flag=3200 10240IFflag=-1 AND(FNuc(RIGHT$(s$,4))="/PCD"ORftype=&be8)AND((pcd%AND1)=1) THEN 10250CLOSE#c%:c%=0:PROCsubtask("<ChangeFSI$Dir>.hpcdtoppm -3 -a "+s$+" <Wimp$Scrap> { > <ChangeFSI$Dir>.pcdtemp }") 10260c%=OPENIN"<Wimp$Scrap>":scrapf%=TRUE:flag=3300:info$="PhotoCD file converted to " 10270ENDIF 10280ENDIF 10290IFflag=-1 PROCclose:ERROR 42,"Sorry: format not recognised - please try again or contact your supplier" 10300step24=1:input=8:ham=0:planar%=0:bigendianbits=FALSE:r$="FN"+STR$flag 10310compression=0:hpredict%=1:striprows%=-1:cachebytes%=FALSE 10320IFxdiv%=0 AND ydiv%=0 scale%=FALSE 10330DIM r%(colourindex) 10340DIM g%(colourindex),b%(colourindex) 10350CASE flag OF 10360WHEN 0 10370quant%=4:PTR#c%=4:F%=FNW+&1C:PTR#c%=F%:st%=FNW+F%-&20:K%=FNW+F%-&20 10380sm=FNW:IFsm<256 THEN 10390SYS53,sm,3 TO ,,I% 10400CASE I% OF 10410WHEN 1:IFst%=F%+12 PROCdefpal2 ELSEPROCipal(2) 10420PTR#c%=F%-16:sx%=(FNW+1)*32:rowbytes%=sx%>>3:input=1 10430sy%=FNW+1:I%=FNW:sx%-=31-FNW 10440WHEN 3:IFst%=F%+12 PROCdefpal4 ELSEPROCipal(4) 10450PTR#c%=F%-16:sx%=(FNW+1)*16:rowbytes%=sx%>>2:input=2 10460sy%=FNW+1:I%=FNW:sx%-=(31-FNW)DIV2 10470WHEN 15:IFst%=F%+12 PROCdefpal16 ELSEPROCipal(16) 10480PTR#c%=F%-16:sx%=(FNW+1)*8:rowbytes%=sx%>>1:input=4 10490sy%=FNW+1:I%=FNW:sx%-=(31-FNW)DIV4 10500WHEN 63,255:IFst%=F%+12 THEN 10510PROCdefpal 10520ELSE 10530IFK%>st% K%=st% 10540IFK%-12-F%=2048 ORI%=255 THEN 10550PTR#c%=&38 10560FORC%=0TO255:D%=BGET#c% 10570r%(C%)=BGET#c%/255*F:g%(C%)=BGET#c%/255*F:b%(C%)=BGET#c%/255*F 10580D%=FNW:NEXT 10590ELSE 10600PROCipal63 10610ENDIF 10620ENDIF 10630PTR#c%=F%-16:sx%=(FNW+1)*4:rowbytes%=sx%:sy%=FNW+1:I%=FNW:sx%-=(31-FNW)DIV8 10640OTHERWISE ERROR42,"Not understood RISC OS sprite" 10650ENDCASE 10660r$="FN8":SYS53,sm,4 TO ,,nx:SYS53,sm,5 TO ,,ny:nx=1<<nx:ny=1<<ny 10670IFscale% xmul%=xmul%*nx/2:ymul%=ymul%*ny/2 10680info$="RISC OS sprite, mode "+STR$sm+" "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 10690ELSE 10700bpp%=sm>>>27:CASEbpp% OF 10710WHEN 1:bpp%=1:r$="FN8":IFst%=F%+12 PROCdefpal2 ELSEPROCnewropal(2) 10720WHEN 2:bpp%=2:r$="FN8":IFst%=F%+12 PROCdefpal4 ELSEPROCnewropal(4) 10730WHEN 3:bpp%=4:r$="FN8":IFst%=F%+12 PROCdefpal16 ELSEPROCnewropal(16) 10740WHEN 4:bpp%=8:r$="FN8":IFst%=F%+12 PROCdefpal ELSEPROCnewropal(256) 10750WHEN 5:bpp%=16:r$="FN16":IFst%=F%+12 ELSE 10760DIM rpal%(255),gpal%(255):step24=2 10770FORC%=0TO255 10780gpal%(C%)=(C%>>5)<<8 OR (C%AND31) 10790rpal%(C%)=((C%>>2)AND31)<<16 OR (C%AND3)<<11 10800NEXT 10810FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 10820WHEN 6:bpp%=32:r$="FN24":IFst%=F%+12 PROCnopal ELSE 10830rbo%=0:gbo%=1:bbo%=2:step24=4 10840WHEN 8:bpp%=24:r$="FN24":IFst%=F%+12 PROCnopal ELSE 10850rbo%=0:gbo%=1:bbo%=2 10860OTHERWISE ERROR42,"Not understood new format RISC OS sprite bpp" 10870ENDCASE 10880nx=(sm>>1) AND&1fff:ny=(sm>>14) AND&1fff 10890IFscale% xdiv%=xdiv%*nx:ydiv%=ydiv%*ny:xmul%=xmul%*90:ymul%=ymul%*90 10900PTR#c%=F%-16:rowbytes%=(FNW+1)*4:sy%=FNW+1:I%=FNW:sx%=(rowbytes%*8-(31-FNW))/bpp%:input=bpp% 10910info$="New RISC OS sprite, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 10920IFbpp%=32 input=24 10930ENDIF 10940PTR#c%=st%:cache%=TRUE 10950WHEN 100 10960quant%=8:PTR#c%=0:sx%=FNHW:sy%=FNHW:PROCnopal:input=24:rowbytes%=sx%*3+2 10970rbo%=2:gbo%=2+sx%:bbo%=2+2*sx%:r$="FN24":cache%=TRUE 10980info$="QRT .raw image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 10990WHEN 200 11000quant%=8:PTR#c%=5:sx%=FNHW:sy%=FNHW:sx%=(FNHW-sx%+2)/2:sy%=(FNHW-sy%+2)/2 11010PTR#c%=&1a:cadsoft%=BGET#c%:PTR#c%=&200 11020FORC%=0TO255:r%(C%)=BGET#c%/255*F:NEXT:FORC%=0TO255:g%(C%)=BGET#c%/255*F:NEXT 11030FORC%=0TO255:b%(C%)=BGET#c%/255*F:NEXT 11040PTR#c%=&600:st%=&600:cache%=TRUE:IFcadsoft%=2 THEN 11050rep%=0:r$="FN1100":plbuff%=FNdim(sx%):plbytes%=sx%:cachebytes%=TRUE 11060ELSE 11070r$="FN8":rowbytes%=sx% 11080ENDIF 11090info$="Cadsoft type "+STR$cadsoft%+" image, "+STR$sx%+" by "+STR$sy%+" pixels, 8 bits per pixel" 11100WHEN 300 11110quant%=5:PTR#c%=&2c:st%=FNW+(&38-&2c):PTR#cc%=&2c:stcc%=FNW1(cc%)+(&38-&2c) 11120PTR#c%=&1c:sx%=(FNW+1)*4:sy%=FNW+1:PTR#c%=st%:PTR#cc%=stcc% 11130DIM rpal%(255),gpal%(255):input=16:cache%=TRUE:rowbytes%=sx% 11140FORC%=0TO255 11150rpal%(C%)=C%AND7 OR (C%AND64)<<2 OR (C%AND&38)<<13 11160gpal%(C%)=(C%AND4)<<1ORC%AND16 OR ((C%AND3)<<1OR(C%AND&60)>>2)<<8 OR (C%AND8OR(C%AND128)>>3)<<16 11170NEXT 11180FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 11190pbuff%=FNdim(sx%):IFscale% ymul%=ymul%*2 11200info$="ArVis image, "+STR$sx%+" by "+STR$sy%+" pixels, 15 bits per pixel" 11210WHEN 400 11220quant%=8:PTR#c%=0:sx%=FNbeHW:sy%=FNbeHW:X%=FNbeHW:st%=PTR#c%+X%:PTR#c%=st% 11230plbuff%=FNdim(sx%*3):plbytes%=sx%*3:rb%=plbuff%:gb%=plbuff%+1:bb%=plbuff%+2:rbo%=-1 11240PROCnopal:input=24:rep%=0:cachebytes%=TRUE:cache%=TRUE:step24=3 11250info$="RT image. run length encoded image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 11260WHEN 500 11270compression=5:PTR#c%=6:GIFsx=FNHW:GIFsy=FNHW 11280GIF=BGET#c%:GIFback=BGET#c%:GIFext=BGET#c%:quant%=(GIF AND 7)+1 11290IFGIF AND &80 THEN 11300FORC%=0TO(1<<quant%)-1 11310r%(C%)=BGET#c%/255*F:g%(C%)=BGET#c%/255*F:b%(C%)=BGET#c%/255*F 11320NEXT 11330ENDIF 11340I%=BGET#c%:WHILE I%=ASC"!" 11360IF BGET#c% 11370REPEAT 11380GIFgcesz=BGET#c%:PTR#c%=PTR#c%+GIFgcesz 11410UNTIL GIFgcesz=0:I%=BGET#c% 11420ENDWHILE 11430IFI%<>ASC"," ERROR 42,"GIF file without , in right place" 11450IFGIFext<>0 AND GIFext<>49 THEN 11460IFGIFext>49 THEN 11480xdiv%=xdiv%*64:xmul%=xmul%*(GIFext+15) 11490ELSE 11500ydiv%=ydiv%*(GIFext+15):ymul%=ymul%*64 11510ENDIF 11520ENDIF 11530GIFleft=FNHW:GIFright=FNHW:sx%=FNHW:sy%=FNHW 11540IFGIFsx<sx% OR GIFsy<sy% THEN 11550IFinfo% THEN 11560PRINT"GIF file with bigger image inside:" 11570PRINT"Screen ";GIFsx"x by "GIFsy"y; image "sx%"x by "sy%"y" 11580INPUT"Continue with monitor's size [Y or y]?"A$ 11590IFA$="Y"ORA$="y" sx%=GIFsx:sy%=GIFsy 11600PRINT"Continuing with ";sx%"x by "sy%"y" 11610ENDIF 11620ENDIF 11630GIF=BGET#c%:IFGIF AND &40 flag=501:r$="FN8" 11640setcodes%=BGET#c%:clearcode%=1<<setcodes%:st%=PTR#c%:cache%=TRUE:cachebytes%=TRUE 11650DIM table%(1<<12):stk%=FNdim(1<<13):buf%=FNdim(280):plbuff%=FNdim(sx%) 11660FORI%=0TOclearcode%-1:table%(I%)=I%:NEXT 11670info$="GIF file, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(quant%) 11680WHEN 600 11690quant%=8:PTR#c%=&5c:FORC%=0TO255 11700r%(C%)=BGET#c%/255*F:g%(C%)=BGET#c%/255*F:b%(C%)=BGET#c%/255*F 11710NEXT 11720PTR#c%=&36e:sy%=FNHW:sx%=FNHW 11730st%=&380:PTR#c%=st%:rowbytes%=sx%:r$="FN8":cache%=TRUE 11740info$=".PIC image, "+STR$sx%+" by "+STR$sy%+" pixels, 8 bits per pixel" 11750WHEN 700 11760quant%=8:PTR#c%=0:a$=GET$#c%:st%=PTR#c% 11770sx%=VALa$:sy%=VAL(MID$(a$,INSTR(a$," "))) 11780PROCnopal:input=24:step24=3:rowbytes%=sx%*3:r$="FN24" 11790rbo%=0:gbo%=1:bbo%=2:cache%=TRUE 11800info$="MTV .pic image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 11810WHEN 800 11820sx%=512:sy%=256:IFscale% ymul%=ymul%*2 11830plbuff%=FNdim(sx%):rep%=0:wt%=0:wtsx%=plbuff%+sx% 11840cache%=TRUE:cachebytes%=TRUE 11850FORC%=0TO255:r%(C%)=(C%AND63)/63*F:NEXT:g%()=r%():b%()=r%():quant%=6 11860info$="Watford digitiser picture, 512 by 256 pixels, 6 bits per pixel" 11870WHEN 801 11880sx%=512:sy%=256:input=24:quant%=6:IFscale% ymul%=ymul%*2 11890rep1%=0:wt1%=0:rep2%=0:wt2%=0:rep3%=0:wt3%=0 11900buff%=FNdim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+2*sx% 11910wtsx1%=buff%+sx%:wtsx2%=buff%+2*sx%:wtsx3%=buff%+3*sx% 11920FORC%=0TO255:r%(C%)=(C%AND63)/63*F:NEXT:g%()=r%():b%()=r%() 11930info$="Triple Watford digitiser picture, 512 by 256 pixels, 18 bits per pixel" 11940WHEN 900 11950quant%=8:st%=0:PTR#c%=0:IFEXT#c%=65536 THEN 11960sx%=256:sy%=256:IFscale% ymul%=ymul%*2:xmul%=xmul%*2 11970ELSE 11980sx%=512:sy%=512 11990ENDIF 12000FORC%=0TO255:r%(C%)=C%/255*F:NEXT:g%()=r%():b%()=r%():rowbytes%=sx%:r$="FN8":cache%=TRUE 12010info$="AIM .raw image, 256 by 256 pixels, 8 bits per pixel" 12020WHEN 901 12030quant%=4:IFEXT#c%=65536 THEN 12040sx%=256:sy%=256:IFscale% ymul%=ymul%*2:xmul%=xmul%*2 12050ELSE 12060sx%=512:sy%=512 12070ENDIF 12080buff%=FNdim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+sx%*2 12090FORC%=0TO255:r%(C%)=C%/255*F:NEXT:g%()=r%():b%()=r%() 12100input=24:info$="Hawk V9 Triple image, 256 by 256 pixels, 24 bits per pixel" 12110WHEN 902 12120quant%=4:PTR#c%=8:sx%=FNW:rowbytes%=sx%*3/2:sy%=FNW:st%=20:PTR#c%=20 12130IFscale% ymul%=ymul%*2 12140plbuff%=FNdim(sx%*3):rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2:rbo%=-1 12150FORC%=0TO255:r%(C%)=(C%AND&F)/&F*F:NEXT:g%()=r%():b%()=r%():cache%=TRUE 12160input=24:info$="Hawk V9/Snapshot Colour image, "+STR$sx%+" by "+STR$sy%+" pixels, 12 bits per pixel" 12170WHEN 903 12180quant%=5:PTR#c%=8:sx%=FNW:rowbytes%=sx%*2:sy%=FNW:st%=20:PTR#c%=20:cache%=TRUE:r$="FN16":flag=700 12190DIM rpal%(255),gpal%(255):input=16:step24=2 12200FORC%=0TO255 12210gpal%(C%)=(C%>>5)<<8 OR (C%AND31) 12220rpal%(C%)=((C%>>2)AND31)<<16 OR (C%AND3)<<11 12230NEXT 12240FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 12250input=16:info$="Hawk V9 mk II Colour image, "+STR$sx%+" by "+STR$sy%+" pixels, 16 bits per pixel" 12260WHEN 950 12270quant%=8:PTR#c%=0:sx%=512:rowbytes%=512:sy%=512:st%=0:flag=900 12280FORC%=0TO255:r%(C%)=C%/255*F:NEXT:g%()=r%():b%()=r%():r$="FN8":cache%=TRUE 12290info$="Wild Vision V12 image, 512 by 512 pixels, 8 bits per pixel" 12300WHEN 1000 12310quant%=4:sx%=640:sy%=256:PROCdefpal:st%=FNW:r$="FN"+STR$(1000+FNW):IFscale% ymul%=ymul%*2 12330buff%=FNdim(sx%):ctable%=FNdim(st%) 12340SYS12,4,c%,ctable%,st%:st%=PTR#c% 12350pa%=ctable%:rep%=0:rep2%=0:pasx%=buff%+sx% 12360info$="ProArtisan image, 640 by 256 pixels, 8 bits per pixel" 12370WHEN 1100 12380quant%=1:PTR#c%=4:sx%=FNbeW:sy%=FNbeW:input=FNbeW:bigendianbits=TRUE 12390S%=FNbeW:S%=FNbeW 12400cache%=TRUE:IFS%=2 cachebytes%=TRUE:info$="Byte Encoded " ELSEinfo$="":r$="FN8" 12410C%=FNbeW 12420D%=FNbeW 12430CASE C% OF 12440WHEN 1,2 12450FORI%=0TOD%/3-1:r%(I%)=BGET#c%/255*F:NEXT 12460FORI%=0TOD%/3-1:g%(I%)=BGET#c%/255*F:NEXT 12470FORI%=0TOD%/3-1:b%(I%)=BGET#c%/255*F:NEXT 12480OTHERWISE 12490CASE input OF 12500WHEN 1:r%(0)=F:g%(0)=F:b%(0)=F 12510WHEN 4,8:PROCnopal 12520WHEN 24:PROCnopal 12530ENDCASE 12540ENDCASE 12550CASE input OF 12560WHEN 1:rowbytes%=(sx%+15>>4)<<1 12570WHEN 4:rowbytes%=(sx%+3>>2)<<1 12580WHEN 8:rowbytes%=(sx%+1>>1)<<1 12590WHEN 24:rowbytes%=(3*sx%+1>>1)<<1:r$="FN24":rbo%=0:gbo%=1:bbo%=2:step24=3 12600IFS%=1 bbo%=0:rbo%=2 12610OTHERWISE:ERROR 42,"Can't do this Sun pixrect" 12620ENDCASE 12630st%=D%+&20:rep%=0:IFcachebytes% plbuff%=FNdim(rowbytes%):plbytes%=rowbytes% 12640info$+="Sun image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 12650WHEN 1200 12660quant%=8:sx%=800:sy%=800:st%=1600:PTR#c%=st%:vflip%=NOT vflip% 12670PROCnopal:r$="FN8":rowbytes%=sx%:cache%=TRUE 12680info$="TimeStep satellite image, 800 by 800 pixels, 8 bits per pixel" 12690WHEN 1300 12700quant%=8:sx%=128:sy%=256:st%=0:PTR#c%=0:IFscale% xmul%=xmul%*2 12710PROCnopal:r$="FN8":rowbytes%=sx%:cache%=TRUE 12720info$="satellite image, 128 by 256 pixels, 8 bits per pixel" 12730WHEN 1301 12740input=24:quant%=8:sx%=128:sy%=256:IFscale% xmul%=xmul%*2 12750buff%=FNdim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+2*sx%:PROCnopal:r$="FN901" 12760info$="Triple satellite image, 128 by 256 pixels, 24 bits per pixel" 12770WHEN 1400 12780planar%=TRUE:PTR#c%=0:Z%=FNHW:IFZ%>255 THEN 12790st%=FNbeHW*2:planes%=FNbeHW:patlen%=FNbeHW 12800pw%=FNbeHW:ph%=FNbeHW:sx%=FNbeHW:sy%=FNbeHW 12810ELSE 12820st%=FNHW*2:input=FNHW:patlen%=FNHW:pw%=FNHW:ph%=FNHW:sx%=FNHW:sy%=FNHW 12830ENDIF 12840IFscale% THEN 12850xmul%=xmul%*pw%:xdiv%=xdiv%*282 12860ymul%=ymul%*ph%:ydiv%=ydiv%*282 12870ENDIF 12880rowbytes%=sx%+7>>3:pbuff%=FNdim(sx%):plbytes%=rowbytes%*planes%:buff%=FNdim(plbytes%) 12890PTR#c%=st%:vrep%=0 12900FORC%=0TO(1<<planes%)-1:r%(C%)=F-C%/((1<<planes%)-1)*F:NEXT:g%()=r%():b%()=r%() 12910info$="IMG file, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(planes%) 12920WHEN 1500 12930PTR#c%=4:dir%=FNtiff(4):PTR#c%=dir% 12940rgb=FALSE:greyunit=100:planar%=1:fillorder=1:resunit=2 12950xnum%=90:xdenom%=1:ynum%=90:ydenom%=1 12960E%=FNtiff(3):FORZ%=1TOE% 12970T%=FNtiff(3):D%=FNtiff(3):C%=FNtiff(4) 12980IFC%>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) 12990PRINT"Read tag ";T%" datatype "D%" count "C%" value/pointer "V% 13000CASE T% OF 13010WHEN 256:sx%=V% 13020WHEN 257:sy%=V% 13030WHEN 258:IFC%>1 THEN 13040IFD%*C%>6 THEN 13050PTR#c%=V%:quant%=FNtiff(D%) 13060input=quant%:FORI%=1TOC%-1:V%=FNtiff(D%) 13070IFV%<>quant% ERROR42,"Can't do RGB TIFF with different numbers of bits per pixel" 13080input+=V% 13090NEXT:PROCnopal 13100ELSE 13110quant%=V% AND &FF:input=quant% 13120FORI%=0TO(1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:NEXT 13130g%()=r%():b%()=r%() 13140ENDIF 13150PTR#c%=dir%+2+Z%*12 13160ELSE 13170quant%=V%:input=quant% 13180FORI%=0TO(1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:NEXT 13190g%()=r%():b%()=r%() 13200ENDIF 13210WHEN 259:compression=V% 13220WHEN 262:photometric=V%:IFV%=0 invert%=NOTinvert% 13230WHEN 266:fillorder=V% 13240WHEN 273:stc%=C%:stv%=V%:std%=D% 13250WHEN 277:sampperpix%=V%:input=quant%*V%:rgb=V%=3 13260WHEN 278:striprows%=V% 13270WHEN 279:stcbyte%=C%:stvbyte%=V%:stdbyte%=D% 13280WHEN 282:PTR#c%=V%:xnum%=FNtiff(4):xdenom%=FNtiff(4) 13290PTR#c%=dir%+2+Z%*12 13300WHEN 283:PTR#c%=V%:ynum%=FNtiff(4):ydenom%=FNtiff(4) 13310PTR#c%=dir%+2+Z%*12 13320WHEN 284:planar%=V%:IFplanar%=2 input=quant% 13330WHEN 290:greyunit=10^V% 13340WHEN 291:PTR#c%=V%:FORI%=0TOC%-1:r%(I%)=FNtiff(D%)/greyunit/2*F:NEXT 13350g%()=r%():b%()=r%() 13360PTR#c%=dir%+2+Z%*12 13370WHEN 296:resunit=V% 13380WHEN 317:hpredict%=V% 13390WHEN 320:PTR#c%=V%:FORI%=0TOC%/3-1:r%(I%)=FNtiff(3)/65535*F:NEXT 13400FORI%=0TOC%/3-1:g%(I%)=FNtiff(3)/65535*F:NEXT 13410FORI%=0TOC%/3-1:b%(I%)=FNtiff(3)/65535*F:NEXT 13420PTR#c%=dir%+2+Z%*12 13430OTHERWISE 13440IFinfo% PRINT"Ignoring tag ";T%" datatype "D%" count "C%" value/pointer "V% 13450ENDCASE 13460NEXT 13470DIM st%(stc%):IFstc%>1 THEN 13480PTR#c%=stv%:FORI%=0TOstc%-1:st%(I%)=FNtiff(std%):NEXT 13500ELSE 13510st%(0)=stv% 13520ENDIF 13530CASE compression OF 13540WHEN 0,1:info$="" 13550WHEN 2:info$="CCITT Group 3 compressed " 13560WHEN 5:info$="LZW compressed ":r$="FN1505" 13570IFhpredict%=2 THENinfo$+="horizontal differenced " ELSEIFhpredict%>2 info$+=" unknown predictor ("+STR$hpredict%+") " 13580setcodes%=8:clearcode%=1<<setcodes% 13590DIM table%(1<<12):stk%=FNdim(1<<13):buf%=FNdim(280) 13600FORI%=0TOclearcode%-1:table%(I%)=I%:NEXT 13610WHEN 32773:info$="PackBits compressed ":r$="FN1501" 13620WHEN 6:info$="JPEG compressed " 13630OTHERWISE info$="Compress "+STR$compression+" - unknown " 13640ENDCASE 13650info$+="TIFF file, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 13660bigendianbits=fillorder=1:PTR#c%=st%(0):stripptr=0:IFstriprows%>=sy% striprows%=-1 13670CASE input OF 13680WHEN 1:rowbytes%=sx%+7>>3 13690WHEN 2:rowbytes%=sx%+3>>2 13700WHEN 4:rowbytes%=sx%+1>>1 13710WHEN 8:rowbytes%=sx% 13720WHEN 24:rowbytes%=3*sx% 13730WHEN 32:rowbytes%=4*sx%:IFphotometric<>5 ERROR 42,"32 bpp TIFF but not CMYK" 13740OTHERWISE ERROR 42,"Can't do "+FNbits(input)+" TIFF" 13750ENDCASE 13760IFplanar%=2 rowbytes%=rowbytes%*sampperpix% 13770IFplanar%<>1 AND rgb<>0 ERROR42,"Can't do this style of TIFF yet" ELSEplanar%=FALSE 13780IF compression<2 THEN 13790cache%=TRUE:stripptr=-1:r$="FN8":IFinput=24 rbo%=0:gbo%=1:bbo%=2:step24=3:r$="FN24" 13800IFinput=32 rbo%=0:gbo%=1:bbo%=2:step24=4:r$="FN24":r%()=F-r%():g%()=F-g%():b%()=F-b%():input=24 13810ELSE 13820IFcompression=5 ORcompression=32773 THEN 13830cache%=TRUE:cachebytes%=rowbytes%*striprows% 13840plbuff%=FNdim(rowbytes%):rowstogo%=striprows% 13850IFinput=24 rb%=plbuff%:gb%=plbuff%+1:bb%=plbuff%+2:r$="FN"+STR$(VALMID$(r$,3)+10):step24=3:rbo%=-1 13860ELSE 13870buff%=FNdim(rowbytes%):rowstogo%=striprows% 13880IFinput=24 rb%=buff%:gb%=buff%+1:bb%=buff%+2:r$="FN"+STR$(VALMID$(r$,3)+10):step24=3 13890ENDIF 13900ENDIF 13910IFscale% THEN 13920S%=resunit:IFS%=2 S%=90 13930IFS%=3 S%=35 13940xdiv%=xdiv%*xnum%:xmul%=xmul%*xdenom%*S% 13950ydiv%=ydiv%*ynum%:ymul%=ymul%*ydenom%*S% 13960ENDIF 13970IFr$="FN1500" r$="FN8" 13980WHEN 1600 13990PTR#c%=12:camg=0:planar%=TRUE:REPEAT 14000S$=CHR$BGET#c%+CHR$BGET#c%+CHR$BGET#c%+CHR$BGET#c%:S%=FNbeW 14010CASE S$ OF 14020WHEN "BMHD":sx%=FNbeHW:sy%=FNbeHW:S%=FNW:planes%=BGET#c%:masking%=BGET#c%=1 14030compression=BGET#c%:S%=BGET#c%+FNHW:U%=BGET#c%:V%=BGET#c%:S%=FNW 14040IFscale% ymul%=ymul%*V%:ydiv%=ydiv%*U% 14050FORI%=0TO(1<<planes%)-1:r%(I%)=I%/((1<<planes%)-1)*F:NEXT:g%()=r%():b%()=r%() 14060WHEN "CMAP":S%=PTR#c%+S%:FORI%=0TO(1<<planes%)-1:r%(I%)=(BGET#c%>>4)/15*F 14070g%(I%)=(BGET#c%>>4)/15*F:b%(I%)=(BGET#c%>>4)/15*F:NEXT 14080PTR#c%=S%:IFinfo% PRINT"Warning: truncated IFF CMAP information to 4 bits" 14090WHEN "CAMG":camg=FNbeW:IFinfo% PRINT"Amiga viewport mode ";~camg 14100WHEN "BODY":st%=PTR#c% 14110OTHERWISE IF info% PRINT"Ignoring IFF property "S$" size ";S% 14120PTR#c%=PTR#c%+S% 14130ENDCASE 14140UNTILS$="BODY":IFcompression info$="Compressed " ELSEinfo$="" 14160ham=(camg AND &800)<>0:IFham info$+="HAM " 14170half=(camg AND &80)<>0:IFhalf info$+="half-bright " 14180IFhalf 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 14190info$+="IFF file, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(planes%) 14200IFmasking% info$+=" with mask (ignored)" 14210rowbytes%=(sx%+15>>4)<<1:plbytes%=rowbytes%*planes% 14220pbuff%=FNdim(sx%):r$="FN"+STR$(1600+compression):cache%=TRUE 14230IFcompression THEN 14240cachebytes%=TRUE:plbuff%=FNdim(plbytes%) 14250ELSE 14260realrowbytes%=rowbytes%:rowbytes%=plbytes%:IFmasking% rowbytes%+=realrowbytes% 14270ENDIF 14280PTR#c%=st% 14290WHEN 1700 14300sx%=640:rowbytes%=80:sy%=350:planes%=4:plbytes%=4*80:planar%=TRUE 14310buff%=FNdim(80*4):pbuff%=FNdim(640):G=F/3:H=F*2/3 14320r%()=0,0,0,0,F,F,F,H,G,G,G,G,F,F,F,F 14330g%()=0,0,F,F,0,0,F,H,G,G,F,F,G,G,F,F 14340b%()=0,F,0,F,0,F,0,H,G,F,G,F,G,F,G,F 14350masking%=FALSE:r$="FN1600":st%=16:PTR#c%=16:cache%=TRUE:realrowbytes%=80:rowbytes%=plbytes% 14360info$="PC EGA '.dsp' file, 640 by 350 pixels, 4 bits per pixel (fixed palette)" 14370WHEN 1800 14380sx%=72*8:sy%=720:quant%=1:input=1:PTR#c%=st%:plbuff%=FNdim(72) 14390cache%=TRUE:cachebytes%=TRUE 14400r%(0)=F:g%(0)=F:b%(0)=F:bigendianbits=TRUE:rowbytes%=72:r$="FN1501":rowstogo%=-1 14410IFscale% xmul%=xmul%*90:xdiv%=xdiv%*72:ymul%=ymul%*90:ydiv%=ydiv%*72 14420info$="MacPaint file, 576 by 720 bits, creator id "+RIGHT$(S$,4) 14430WHEN 1850 14440PTR#c%=552 14450done%=FALSE 14460REPEAT 14470code%=FNbeHW:CASE code% OF 14480WHEN &01:PTR#c%=PTR#c%+FNbeHW 14490WHEN &1E 14500WHEN &98 14510rowbytes%=FNbeHW:IF(rowbytes% AND&8000)=0 ERROR42,"PICT without Pixmap" 14520sy%=FNbeHW:sx%=FNbeHW:sy%=FNbeHW-sy%:sx%=FNbeHW-sx% 14530junk%=FNHW:packtype%=FNbeHW:junk%=FNW:resx%=FNbeW:resy%=FNbeW 14540IFFNbeHW<>0 CLOSE#c%:ERROR42,"ChangeFSI expected Mac PICT2 pixeltype=Chunky" 14550bpp%=FNbeHW:junk%=FNbeHW:junk%=FNbeHW 14560junk%=FNbeW:junk%=FNbeW:junk%=FNbeW 14570junk%=FNbeW:junk%=FNbeHW 14580C%=FNbeHW:FORI%=0TOC%:J%=FNbeHW:r%(J%)=FNbeHW/65535*F:g%(J%)=FNbeHW/65535*F:b%(J%)=FNbeHW/65535*F:NEXT 14590done%=TRUE 14600WHEN &9A:junk%=FNW:rowbytes%=FNbeHW:IF(rowbytes% AND&8000)=0 ERROR42,"PICT without Pixmap" 14610sy%=FNbeHW:sx%=FNbeHW:sy%=FNbeHW-sy%:sx%=FNbeHW-sx% 14620junk%=FNHW:packtype%=FNbeHW:junk%=FNW:resx%=FNbeW:resy%=FNbeW 14630IFFNbeHW<>16 CLOSE#c%:ERROR42,"ChangeFSI expected Mac PICT2 pixeltype=RGBDirect" 14640bpp%=FNbeHW:comps%=FNbeHW:junk%=FNbeHW 14650junk%=FNbeW:junk%=FNbeW 14660junk%=FNbeHW:junk%=FNbeHW 14670IFbpp%>16 PROCnopal ELSEJ%=2^(bpp%DIV3):FORI%=0TOJ%-1:r%(I%)=I%/(J%-1)*F:NEXT:g%()=r%():b%()=r%() 14680IFbpp%=32 AND comps%=3 bpp%=24:rowbytes%=3*sx% 14690done%=TRUE 14700OTHERWISE:CLOSE#c%:ERROR42,"ChangeFSI can't understand Mac PICT2 code "+STR$~code% 14710ENDCASE 14720UNTIL done% 14730junk%=FNbeHW:junk%=FNbeHW:junk%=FNbeHW:junk%=FNbeHW 14740junk%=FNbeHW:junk%=FNbeHW:junk%=FNbeHW:junk%=FNbeHW 14750junk%=FNbeHW 14760cache%=TRUE:cachebytes%=TRUE:bigendianbits=TRUE:st%=PTR#c%:rowbytes%=rowbytes%ANDNOT&8000 14770IFscale% xmul%=xmul%*90*65536:xdiv%=xdiv%*resx%:ymul%=ymul%*90*65536:ydiv%=ydiv%*resy% 14780info$="Mac PICT2, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(bpp%) 14790plbuff%=FNdim(rowbytes%):IFbpp%>8 THEN 14800rbo%=-1:rb%=plbuff%+sx%:gb%=plbuff%+sx%*2:bb%=plbuff%+sx%*3:r$="FN1851":input=24 14810IFcomps%=3 rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2 14820ENDIF 14830WHEN 1900 14840PTR#c%=1:C%=BGET#c% 14850E%=BGET#c%:IFE%<>1 ERROR 42,"ZSoft .PCX file with unknown encoding" 14860E%=BGET#c%:sx%=FNHW:sy%=FNHW:sx%=FNHW+1-sx%:sy%=FNHW+1-sy% 14870IFscale% xmul%=xmul%*90:xdiv%=xdiv%*FNHW:ymul%=ymul%*90:ydiv%=ydiv%*FNHW ELSEIFFNW 14880PTR#c%=65:planes%=BGET#c%:planar%=planes%>1:rowbytes%=FNHW:bpp%=E%*planes% 14890pcxpal=16:IFbpp%>4 AND C%=5 THEN 14900PTR#c%=EXT#c%-769:IFBGET#c%=12 pcxpal=EXT#c%-768 14910ENDIF 14920PTR#c%=pcxpal:E%=0:FORC%=0TO(1<<bpp%)*3-1:E%=E%ORBGET#c%:NEXT 14930IFinfo% PRINT".PCX palette mask established at ";~E% 14940IFE%=0 THEN 14950FORC%=0TO(1<<bpp%)-1:r%(C%)=C%/((1<<bpp%)-1)*F:NEXT:g%()=r%():b%()=r%() 14960ELSE 14970PTR#c%=pcxpal:FORC%=0TO(1<<bpp%)-1 14980r%(C%)=(BGET#c%ANDE%)/E%*F:g%(C%)=(BGET#c%ANDE%)/E%*F:b%(C%)=(BGET#c%ANDE%)/E%*F 14990NEXT 15000ENDIF 15010PROCrewind 15020plbytes%=rowbytes%*planes%:plbuff%=FNdim(plbytes%):cache%=TRUE:cachebytes%=TRUE 15030IFplanar% pbuff%=FNdim(sx%) ELSEinput=bpp%:bigendianbits=TRUE:r$="FN1100" 15040info$="ZSoft .PCX file, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(bpp%) 15050WHEN 2000 15060PTR#c%=0:L%=BGET#c%:C%=BGET#c%:I%=BGET#c%:J%=FNHW:K%=FNHW:M%=BGET#c% 15070sx%=FNW:sx%=FNHW:sy%=FNHW:B%=BGET#c%:ID%=BGET#c%:IFID%AND&10 hflip%=NOThflip% 15080IF(ID% AND&20)=0 vflip%=NOTvflip% 15090PTR#c%=PTR#c%+L%:CASE C% OF 15100WHEN 1:IFM%=&18 THEN 15110FORC%=J%TOK%-1 15120b%(C%)=BGET#c%/255*F:g%(C%)=BGET#c%/255*F:r%(C%)=BGET#c%/255*F 15130NEXT 15140ELSE 15150ENDIF 15160OTHERWISE PROCnopal 15170ENDCASE 15180st%=PTR#c% 15190CASE I% OF 15200WHEN 1,2,3:cache%=TRUE:IFB%>8 THEN 15210IFB%>16 THEN 15220input=24:bbo%=0:gbo%=1:rbo%=2:step24=B%DIV8:r$="FN24":rowbytes%=step24*sx% 15230ELSE 15240rowbytes%=sx%*2 15250DIM rpal%(255),gpal%(255):input=16:step24=2:r$="FN16" 15260FORC%=0TO255 15270gpal%(C%)=(C%>>5)<<8 OR (C%AND31)<<16 15280rpal%(C%)=(C%>>2)AND31 OR (C%AND3)<<11 15290NEXT 15300FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 15310ENDIF 15320ELSE 15330r$="FN8":rowbytes%=sx% 15340ENDIF 15350info$="Truevision TGA image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(B%) 15360WHEN 9,10,11:step24=B%DIV8:rowbytes%=step24*sx%:buff%=FNdim(rowbytes%) 15370IFB%>8 THEN 15380IFB%>16 THEN 15390input=24:bb%=buff%:gb%=buff%+1:rb%=buff%+2:r$="FN2002" 15400ELSE 15410DIM rpal%(255),gpal%(255):input=16:step24=2:r$="FN2001" 15420FORC%=0TO255 15430gpal%(C%)=(C%>>5)<<8 OR (C%AND31)<<16 15440rpal%(C%)=(C%>>2)AND31 OR (C%AND3)<<11 15450NEXT 15460FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 15470ENDIF 15480ENDIF 15490info$="Truevision TGA RLE image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(B%) 15500ENDCASE 15510WHEN 2100 15520quant%=6:sx%=512:rowbytes%=2*sx%:sy%=256:cache%=TRUE:r$="FN16" 15530DIM rpal%(255),gpal%(255):input=16:step24=2 15540FORC%=0TO255 15550gpal%(C%)=C%>>3 OR (C%AND7)<<11 15560rpal%(C%)=(C%AND7)<<8 OR (C%>>3)<<16 15570NEXT 15580FORC%=0TO31:r%(C%)=C%/31*F:NEXT:b%()=r%() 15590FORC%=0TO63:g%(C%)=C%/63*F:NEXT 15600IFscale% ymul%=ymul%*2 15610info$="Pineapple image, 512 by 256 pixels, 16 bits per pixel":PTR#c%=7 15620WHEN 2200 15630quant%=8:step24=1:PTR#c%=0:s$=GET$#c%:E%=INSTR(s$,":"):st%=PTR#c% 15640sx%=VALMID$(s$,E%+1):sy%=VALMID$(s$,E%+2+LENSTR$sx%):PROCnopal:input=24 15650rowbytes%=sx%*3:rbo%=0:gbo%=sx%:bbo%=2*sx%:cache%=TRUE:r$="FN24" 15660info$="Irlam image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 15670WHEN 2250 15680PTR#c%=16:sx%=FNW:sy%=FNW:DIM rpal%(255),gpal%(255),bpal%(255),table%(255) 15690FORC%=0TO255:D%=C%OR1 15700table%(C%)=(D%-16)/219*F 15710IFD%AND128 D%-=256 15720r%(C%)=INT(D%/160*F):b%(C%)=INT(D%/126*F) 15730g%(C%)=INT(-D%/160*rwt/gwt*F):gpal%(C%)=INT(-D%/126*bwt/gwt*F) 15740NEXT 15750table%()=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 15760st%=32:PTR#c%=32:cache%=TRUE:rowbytes%=2*sx%:input=411 15770info$="Irlam YUV 4:1:1 file "+STR$sx%+" by "+STR$sy%+" pixels" 15780WHEN 2300 15790PTR#c%=6:sx%=FNHW:sy%=FNHW:D%=BGET#c%:ncolors%=BGET#c%:input=24 15800vflip%=NOTvflip%:quant%=BGET#c%:ncmap%=BGET#c%:cmaplen%=1<<BGET#c% 15810PROCnopal:back%=FNdim(4):!back%=0 15820clrfirst%=D%AND1 15830IF(D%AND2)=0 THEN 15840FORI%=0TOncolors%-1:back%?I%=BGET#c%:NEXT 15850IF(ncolors%AND1)=0 IFBGET#c% 15860ENDIF 15870IFD%AND4 alpha%=FNdim(sx%) 15880IFncmap%>0 THEN 15890FORI%=0TOcmaplen%-1:r%(I%)=FNHW/&FF00*F:NEXT 15900FORI%=0TOcmaplen%-1:g%(I%)=FNHW/&FF00*F:NEXT 15910FORI%=0TOcmaplen%-1:b%(I%)=FNHW/&FF00*F:NEXT 15920ENDIF 15930IFD%AND8 THEN 15940PTR#c%=FNHW+PTR#c%:IFPTR#c%AND1 PTR#c%=PTR#c%+1 15950ENDIF 15960st%=PTR#c%:buff%=FNdim(sx%*3):rb%=buff%:gb%=buff%+1*sx%:bb%=buff%+2*sx% 15970PROCrewind 15980info$="Utah rle image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(ncolors%*quant%) 15990WHEN 2400 16000PTR#c%=riffoff%+&0a:st%=FNW:pal%=FNW:sx%=FNW:sy%=FNW 16010CASE pal% OF 16020WHEN 12 16030PTR#c%=riffoff%+&18:input=FNHW:compression=0 16040WHEN 40 16050PTR#c%=riffoff%+&1c:input=FNHW:compression=FNW 16060PTR#c%=riffoff%+&26:xppm=FNW:yppm=FNW 16070IF xppm<>0 AND yppm<>0 AND scale%<>0 THEN 16080xdiv%=xdiv%*xppm:xmul%=xmul%*3543 16090ydiv%=ydiv%*yppm:ymul%=ymul%*3543 16100ENDIF 16110OTHERWISE 16120ERROR 42,"Unknown .BMP variant ("+STR$pal%+")" 16130ENDCASE 16140bigendianbits=TRUE:vflip%=NOTvflip% 16150CASE input OF 16160WHEN 1:rowbytes%=sx%+7>>3 16170WHEN 4:rowbytes%=sx%+1>>1 16180WHEN 8:rowbytes%=sx% 16190WHEN 16:rowbytes%=sx%*2:r$="FN16":step24=2 16200DIM rpal%(255),gpal%(255) 16210rmask%=&7c00:gmask%=42:bmask%=-42 16220IFcompression=3 PTR#c%=riffoff%+14+pal%:rmask%=FNW:gmask%=FNW:bmask%=FNW:compression=0 16230IFrmask%=&7c00 THEN 16240FORC%=0TO255 16250gpal%(C%)=(C%>>5)<<8 OR (C%AND31)<<16 16260rpal%(C%)=(C%>>2)AND31 OR (C%AND3)<<11 16270NEXT 16280FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 16290ENDIF 16300IFrmask%=&f800 THEN 16310FORC%=0TO255 16320gpal%(C%)=(C%>>5)<<8 OR (C%AND31)<<16 16330rpal%(C%)=(C%>>3)AND31 OR (C%AND7)<<11 16340NEXT 16350FORC%=0TO31:r%(C%)=C%/31*F:NEXT:b%()=r%() 16360FORC%=0TO63:g%(C%)=C%/63*F:NEXT 16370ENDIF 16380WHEN 24,32 16390rbo%=2:gbo%=1:bbo%=0:r$="FN24" 16400FORC%=0TO255:r%(C%)=C%/255*F:NEXT:g%()=r%():b%()=r%() 16410r$="FN24":step24=input/8:rowbytes%=sx%*step24 16420rmask%=-1:gmask%=42:bmask%=-42 16430IFcompression=3 PTR#c%=riffoff%+14+pal%:rmask%=FNW:gmask%=FNW:bmask%=FNW:compression=0 16440IFrmask%=&FF THENrbo%=0:gbo%=1:bbo%=2 16450IFgmask%=&FF THENgbo%=0:bbo%=1:rbo%=2 16460IFbmask%=&FF THENbbo%=0:gbo%=1:rbo%=2 16470input=24 16480OTHERWISE ERROR 42,".BMP file of unusual depth ("+STR$input+")" 16490ENDCASE 16500IFinput<=8 THEN 16510PTR#c%=riffoff%+14+pal%:r$="FN8" 16520FORC%=0TO2^input-1 16530b%(C%)=BGET#c%/255*F:g%(C%)=BGET#c%/255*F:r%(C%)=BGET#c%/255*F:IFBGET#c% 16540NEXT 16550ENDIF 16560CASE compression OF 16570WHEN 0:info$="Uncompressed " 16580WHEN 1:info$="RLE8 compressed ":r$="FN2401" 16590WHEN 2:info$="RLE4 compressed ":r$="FN2402" 16600OTHERWISE ERROR 42,".BMP compression type not supported ("+STR$compression+")" 16610ENDCASE 16620rowbytes%=rowbytes%+3ANDNOT3 16630IF compression<>0 cachebytes%=TRUE:plbuff%=FNdim(rowbytes%) 16640cache%=TRUE:PTR#c%=riffoff%+st% 16650info$+="Windows 3.0 .BMP image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 16660WHEN 2500 16670PTR#c%=0:s$="":C%=BGET#c%:WHILEC%<>0 s$+=CHR$C%:C%=BGET#c%:ENDWHILE 16680s$+=" version "+STR$FNW:sx%=FNW:sy%=FNW:input=FNW:cache%=TRUE 16690info$="!Translator Clear format made by "+s$+", "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 16700IFinput>8 THEN 16710PROCnopal:input=24:step24=3:rowbytes%=3*sx%:rbo%=0:gbo%=1:bbo%=2:r$="FN24" 16720ELSE 16730FORC%=0TO2^input-1 16740r%(C%)=BGET#c%/255*F:g%(C%)=BGET#c%/255*F:b%(C%)=BGET#c%/255*F 16750NEXT 16760input=8:r$="FN8":rowbytes%=sx% 16770ENDIF 16780st%=PTR#c% 16790WHEN 2600 16800PTR#c%=0:C%=BGET#c% 16810D%=BGET#c%:CASE D% OF 16820WHEN 0:sx%=320:sy%=200:planes%=4 16830WHEN 1:sx%=640:sy%=200:planes%=2 16840WHEN 2:sx%=640:sy%=400:planes%=1 16850OTHERWISE ERROR42,"ChangeFSI knows nothing of "+STR$C%+" type Degas files" 16860ENDCASE 16870FORI%=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 16880cache%=TRUE:planar%=TRUE:masking%=FALSE:st%=34:PTR#c%=34:r$="FN1600" 16890rowbytes%=(sx%+15>>4)<<1:plbytes%=rowbytes%*planes%:pbuff%=FNdim(sx%) 16900IFC%AND128 r$="FN1601":flag=1600:cachebytes%=TRUE:plbuff%=FNdim(plbytes%) ELSErealrowbytes%=2:rowbytes%=plbytes% 16910info$="Degas file "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(planes%) 16920WHEN 2700 16930PTR#c%=4:sx%=FNHW:sy%=FNHW 16940CASE FNHW OF 16950WHEN &AF:rowbytes%=sx%:cache%=TRUE:r$="FN8":st%=&30A 16960OTHERWISE CLOSE#c%:ERROR 42,"Panic in ColoRIX reading - ChangeFSI largely ignorant of format!" 16970ENDCASE 16980FORC%=0TO2^input-1 16990r%(C%)=BGET#c%/63*F:g%(C%)=BGET#c%/63*F:b%(C%)=BGET#c%/63*F 17000NEXT 17010PTR#c%=st% 17020info$="ColoRIX file "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 17030WHEN 2800 17040PTR#c%=0:REPEAT s$=FNfits:CASE LEFT$(s$,8) OF 17050WHEN "SIMPLE ":IFMID$(s$,30,1)<>"T" ERROR42,"ChangeFSI can only read Simple FITS format" 17060WHEN "BITPIX ":input=VALMID$(s$,10) 17070WHEN "NAXIS ":IFVALMID$(s$,10)<>2 ERROR42,"ChangeFSI can only read 2d FITS images" 17080WHEN "NAXIS1 ":sx%=VALMID$(s$,10) 17090WHEN "NAXIS2 ":sy%=VALMID$(s$,10) 17100WHEN "END " 17110OTHERWISE IFinfo% PRINT"Ignoring FITS record "s$ 17120ENDCASE 17130UNTILLEFT$(s$,8)="END " 17140st%=(PTR#c%DIV2880 + 1)*2880:cache%=TRUE:PTR#c%=st% 17150CASE input OF 17160WHEN 8:r$="FN8":rowbytes%=sx%:PROCnopal 17170WHEN 16:rowbytes%=2*sx%:DIM rpal%(255),gpal%(255):step24=2:r$="FN16" 17180FORC%=0TO255 17190gpal%(C%)=C%<<8 17200rpal%(C%)=C% 17210NEXT:cheat%=0:IFinvert% cheat%=F 17220FORC%=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 17230OTHERWISE ERROR 42,"ChangeFSI can't read a FITS image with this number of bits per pixel" 17240ENDCASE 17250info$="FITS file "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 17260WHEN 2900 17270PTR#c%=4:sx%=FNbeHW:sy%=FNbeHW:PTR#c%=&42:input=FNbeHW:C%=FNbeHW 17280rowbytes%=FNbeHW:C%=FNbeW:st%=FNbeW:PTR#c%=st%:r$="FN8":PROCnopal 17290DIM rpal%(15),gpal%(15),bpal%(15) 17300rpal%()=&e6,&23,&e6,&7f,&17,&00,&a1,&45,&e6,&4a,&e6,&73,&6e,&47,&8a,0 17310gpal%()=&e6,&78,&00,&23,&a1,&73,&2e,&2e,&c8,&a6,&75,&40,&b8,&78,&55,0 17320bpal%()=&b8,&e6,&00,&a1,&17,&2e,&0c,&2e,&00,&c6,&00,&e6,&00,&00,&00,0 17330FORC%=&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 17340info$="Apollo GPR file "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 17350WHEN 3000 17360sx%=720:sy%=EXT#c%/1440:DIM rpal%(255),gpal%(255),bpal%(255),table%(255) 17380IFFALSE THEN 17390FORC%=0TO255 17400table%(C%)=(C%-16)/219*F 17410r%(C%)=(C%-128)/186*0.624*F:rpal%(C%)=(C%-128)/160*0.952*F 17420g%(C%)=-(C%-128)/186*0.64*F:gpal%(C%)=-(C%-128)/160*0.277*F 17430b%(C%)=(C%-128)/186*1.73*F:bpal%(C%)=-(C%-128)/160*1.11*F 17440NEXT 17450ELSE 17470FORC%=0TO255 17480table%(C%)=(C%-16)/219*F 17490r%(C%)=INT((C%-128)/160*F):b%(C%)=INT((C%-128)/126*F) 17500g%(C%)=INT(-(C%-128)/160*rwt/gwt*F):gpal%(C%)=INT(-(C%-128)/126*bwt/gwt*F) 17510NEXT 17520ENDIF 17530table%()=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 17540st%=0:PTR#c%=0:cache%=TRUE:rowbytes%=1440:input=422:gamma=1 17550IFscale% ymul%=ymul%*2 17560info$="CCIR601 4:2:2 file "+STR$sx%+" by "+STR$sy%+" pixels" 17570WHEN 3100 17580quant%=8:PTR#c%=0:a$=GET$#c%:st%=PTR#c% 17590sx%=VALa$:sy%=VAL(MID$(a$,INSTR(a$," "))) 17600PROCnopal:input=24:step24=3:rowbytes%=sx%*3 17610rbo%=0:gbo%=1:bbo%=2:cache%=TRUE:flag=700:r$="FN24" 17620info$="!RayShade 'RGB' image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 17630WHEN 3200 17640quant%=8:PTR#c%=0:st%=0 17650sx%=VALMID$(s$,INSTR(s$,"_")+1,1) 17660CASE sx% OF 17670WHEN 5:sx%=768:sy%=512 17680WHEN 2:sx%=3072:sy%=2048 17690WHEN 1:sx%=1536:sy%=1024 17700ENDCASE 17710PROCnopal:input=24:step24=3:rowbytes%=sx%*3 17720rbo%=0:gbo%=1:bbo%=2:cache%=TRUE:flag=700:r$="FN24" 17730info$="Kodak /RGB image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 17740WHEN 3300 17750PTR#c%=0:input=VALMID$(FNGET,2) 17760s$=FNGET:sx%=VALs$:sy%=VALMID$(s$,INSTR(s$," ")):IFsy%=0 sy%=VALFNGET 17770cache%=TRUE:CASE input OF 17780WHEN 4:input=1:r$="FN8":r%(0)=F:g%()=r%():b%()=r%():bigendianbits=TRUE 17790rowbytes%=(sx%+7)DIV8 17800WHEN 5:input=8:r$="FN8":E%=VALFNGET 17810FORC%=0TOE%:r%(C%)=C%/E%*F:NEXT:g%()=r%():b%()=r%() 17820rowbytes%=sx% 17830WHEN 6:input=24:r$="FN24":E%=VALFNGET:step24=3:rbo%=0:gbo%=1:bbo%=2 17840FORC%=0TOE%:r%(C%)=C%/E%*F:NEXT:g%()=r%():b%()=r%() 17850rowbytes%=sx%*3 17860ENDCASE 17870st%=PTR#c%:flag=700 17880info$+="pbm image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 17890DEF FNGET REPEATs$=GET$#c%:UNTILLEFT$(s$,1)<>"#":=s$ 17900WHEN 3400 17910PTR#c%=0:s$=FNGET:input=16:quant%=5 17920s$=FNGET:sx%=VALs$:sy%=VALMID$(s$,INSTR(s$," ")):s$=FNGET 17930DIM rpal%(255),gpal%(255):input=16:step24=2 17940FORC%=0TO255 17950gpal%(C%)=(C%>>5)<<8 OR (C%AND31) 17960rpal%(C%)=((C%>>2)AND31)<<16 OR (C%AND3)<<11 17970NEXT 17980cache%=TRUE:r$="FN16" 17990FORC%=0TO31:r%(C%)=C%/31*F:NEXT:g%()=r%():b%()=r%() 18000rowbytes%=sx%*2:st%=PTR#c%:flag=700 18010info$="p15 image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 18020WHEN 3450 18030PTR#c%=0:info$=FNGET 18040ybits%=VALMID$(info$,INSTR(info$," ")):ymax%=(1<<ybits%)-1 18050ubits%=VALMID$(info$,INSTR(info$,"Y ")+1):umax%=(1<<(ubits%-1))-1 18060vbits%=VALMID$(info$,INSTR(info$,"U ")+1):vmax%=(1<<(vbits%-1))-1 18070s$=FNGET:sx%=VALs$:sy%=VALMID$(s$,INSTR(s$," ")) 18080DIM rpal%(255),gpal%(255),bpal%(255),table%(255) 18090FORC%=0TOymax%:table%(C%)=C%/ymax%*F:NEXT 18100D%=(1<<ubits%)-1 18110FORC%=0TOD%:d=C%/umax%:IFd>1 d=-(D%-C%)/umax% 18120b%(C%)=INT(d*(1-bwt)*F):gpal%(C%)=INT(-d*(1-bwt)*bwt/gwt*F) 18130NEXT 18140D%=(1<<vbits%)-1 18150FORC%=0TOD%:d=C%/vmax%:IFd>1 d=-(D%-C%)/vmax% 18160r%(C%)=INT(d*(1-rwt)*F):g%(C%)=INT(-d*(1-rwt)*rwt/gwt*F) 18170NEXT 18180rowbytes%=sx%*2:st%=PTR#c%:cache%=TRUE:r$="FN2250":input=555 18190info$+=", "+STR$sx%+" by "+STR$sy%+" pixels" 18200WHEN 3500 18210quant%=1:PTR#c%=6:E%=FNHW:sx%=FNHW:sx%=FNHW:sy%=FNHW:st%=FNHW:st%=FNW 18220rowbytes%=sx%/8+1ANDNOT1:cache%=TRUE:st%+=PTR#c%:PTR#c%=st% 18230CASE E% OF 18240WHEN 1 18250r$="FN8":input=1:r%(0)=F:g%(0)=F:b%(0)=F 18260info$="Pocketbook bitmap, "+STR$sx%+" by "+STR$sy%+" pixels, 1 bit per pixel" 18270WHEN 2 18280planar%=TRUE:planes%=2:r$="FN1600":input=8:cachebytes%=TRUE 18290r%(0)=F:r%(1)=(F/3)*2:r%(2)=F/3:r%(3)=0:g%()=r%():b%()=r%() 18300plbytes%=rowbytes%*planes%:buff%=FNdim(plbytes%*sy%):pbuff%=FNdim(sx%) 18310realrowbytes%=rowbytes%*sy% 18320info$="PocketbookII bitmap, "+STR$sx%+" by "+STR$sy%+" pixels, 2 bits per pixel" 18330OTHERWISE 18340ERROR 42,"Unknown Pocketbook PIC format" 18350ENDCASE 18360WHEN 3600 18370pcdblk%=FNdim(40):SYS&20023,"ChangeFSI$PCDindex",pcdblk%,20 TO,,Z 18380IFZ THENpcdblk%?Z=13:pcdindex%=VAL$pcdblk% ELSEpcdindex%=3 18390SYS"PhotoCD_Open",1,c%,1 TO pcdh%:SYS"PhotoCD_GetCount",pcdh% TO,Z 18400IF(Z>>pcdindex%)=0 CLOSE#c%:ERROR42,"Desired resolution unavailable" 18410SYS"PhotoCD_GetRotation",pcdh% TO,,pcdtr% 18420SYS"PhotoCD_GetSize",pcdh%,,pcdindex% TO,,,,sx%,sy% 18430pcdblk%!0=0:pcdblk%!8=sx%:pcdblk%!4=0 18440pcdblk%!16=0:pcdblk%!20=2:pcdblk%!24=1:pcdblk%!28=3 18460CASE pcdtr% OF 18470WHEN 0 18480WHEN &80000000:hflip%=NOThflip% 18490WHEN 90 18500CASE rotate% OF 18510WHEN 0:rotate%=1 18520WHEN -1:rotate%=0 18530WHEN 1:rotate%=0:vflip%=NOTvflip%:hflip%=NOThflip% 18540ENDCASE 18550WHEN &8000005A 18560CASE rotate% OF 18570WHEN 0:rotate%=1:vflip%=NOTvflip% 18580WHEN -1:rotate%=0:vflip%=NOTvflip% 18590WHEN 1:rotate%=0:hflip%=NOThflip% 18600ENDCASE 18610WHEN 180:hflip%=NOThflip%:vflip%=NOTvflip% 18620WHEN &800000B4:vflip%=NOTvflip% 18630WHEN 270 18640CASE rotate% OF 18650WHEN 0:rotate%=-1 18660WHEN 1:rotate%=0 18670WHEN -1:rotate%=0:vflip%=NOTvflip%:hflip%=NOThflip% 18680ENDCASE 18690WHEN &8000010E 18700CASE rotate% OF 18710WHEN 0:rotate%=-1:vflip%=NOTvflip% 18720WHEN 1:rotate%=0:vflip%=NOTvflip% 18730WHEN -1:rotate%=0:hflip%=NOThflip% 18740ENDCASE 18750OTHERWISE PANIC 18760ENDCASE 18780input=24:step24=3:rbo%=0:gbo%=1:bbo%=2:pcdcachesize%=32*1024 18790rowbytes%=sx%*3:PROCnopal:cache%=TRUE:pcdcache%=FNdim(pcdcachesize%) 18800info$="PhotoCD image, "+STR$sx%+" by "+STR$sy%+" pixels, 24 bits per pixel" 18810WHEN 3700 18820A%=OPENIN"<ChangeFSI$Dir>.CFSIjpeg":jpeg%=FNdim(EXT#A%) 18830SYS12,4,A%,jpeg%,EXT#A%:CLOSE#A% 18840datacache%=FNcachedim(EXT#c%):IFdatacache%=-1 datacache%=FNdim(EXT#c%) 18850PTR#c%=0:SYS12,4,c%,datacache%,EXT#c% 18860A%=datacache%:B%=jpegblk%:C%=jpegblk%+4:D%=jpegblk%+8:E%=jpegblk%+12:CALLjpeg%+8 18870B%=jpegblk%!12:jpegspace%=FNdim(B%) 18880C%=datacache%:A%=jpegspace%:D%=EXT#c% 18890CALLjpeg%:cache%=FALSE:IF!A% ERROR42,"JPEG code error: "+STR$!A% 18900sx%=A%!20:sy%=A%!24:input=8*A%?28:PROCnopal:step24=4 18910info$="JFIF image, "+STR$sx%+" by "+STR$sy%+" pixels, "+FNbits(input) 18920jpegy%=sy%:r$="FN"+STR$INT(3700+input) 18930WHEN 3800 18940PTR#c%=24:sx%=FNW:sy%=FNW 18950IFscale% ymul%=ymul%*2 18960DIM rpal%(255),gpal%(255),bpal%(255),table%(255) 18970FORC%=0TO255 18980IFC%<128 table%(C%)=C%/127*F 18990D%=C%:IFD%AND128 D%-=256 19000r%(C%)=INT(D%/160*F):b%(C%)=INT(D%/126*F) 19010g%(C%)=INT(-D%/160*rwt/gwt*F):gpal%(C%)=INT(-D%/126*bwt/gwt*F) 19020NEXT 19040PTR#c%=52:st%=FNW:PTR#c%=64:cache%=TRUE:rowbytes%=2*sx%:input=411 19050info$="Uncompressed Techno-I YUV file "+STR$sx%+" by "+STR$sy%+" pixels" 19060WHEN 3900 19070PTR#c%=8:sx%=FNW:sy%=FNW:st%=16:quant%=12:step24=6 19080FORC%=0TO4095:r%(C%)=C%/4095*F:NEXT:g%()=r%():b%()=r%() 19090input=48:rowbytes%=sx%*6:cache%=TRUE:r$="FN24":rbo%=0:gbo%=2:bbo%=4 19100info$="Ronald Alpiar format, "+STR$sx%+" by "+STR$sy%+" pixels, 36 bits per pixel" 19110WHEN 3905 19120PTR#c%=8:sx%=FNW:sy%=FNW:st%=16:quant%=16:step24=6 19130FORC%=0TO65535:r%(C%)=C%/65535*F:NEXT:g%()=r%():b%()=r%() 19140input=48:rowbytes%=sx%*6:cache%=TRUE:r$="FN24":rbo%=0:gbo%=2:bbo%=4 19150info$="Ronald Alpiar format, "+STR$sx%+" by "+STR$sy%+" pixels, 48 bits per pixel" 19160WHEN 666 19270st%=0:PTR#c%=0:sx%=160:sy%=128:input=8:cache%=TRUE:rowbytes%=sx% 19280FORC%=0TO255:r%(C%)=C%/255*F:NEXT:g%()=r%():b%()=r%():r$="FN8" 19290info$="The number of the beast, 160 by "+STR$sy%+" pixels, 8 bits per pixel" 19300ENDCASE 19310IFinfo% PRINTinfo$ 19320SYS"Hourglass_On",1:hour%=&406c4 19330IFm=-9 OR m=-10 THEN 19340SYS"XOS_CLI","rmensure CompressJPEG 0 rmload System:Modules.jcompmod" 19350SYS"XOS_CLI","rmensure CompressJPEG 0 IF ""<ChangeFSI$Dir>"" <> """" THEN rmload <ChangeFSI$Dir>.jcompmod" 19360*rmensure CompressJPEG 0 ERROR Can't find CompressJPEG module. 19370ENDIF 19380IFinvert% r%()=F-r%():g%()=F-g%():b%()=F-b%() 19390IFxdiv% PROCreduce(xmul%,xdiv%) 19400IFydiv% PROCreduce(ymul%,ydiv%) 19410CASE m OF 19420WHEN -1:x%=256:y%=256:ncol=256:IFscaleo% xdiv%=xdiv%*2:ydiv%=ydiv%*2 19430WHEN -2:x%=sx%:y%=sy%:IFspm=18 ncol=1 ELSEncol=15 19440WHEN -3,-5,-6:x%=sx%:y%=sy%:ncol=2^15-1 19450WHEN -4,-7,-8:x%=sx%:y%=sy%:ncol=2^24-1 19460WHEN -9,-10:x%=sx%:y%=sy%:ncol=2^24-1:IFm=-9 ncol=256 19470OTHERWISE 19480SYS53,m,4 TO ,,nx:SYS53,m,5 TO ,,ny:nx=1<<nx:ny=1<<ny 19490SYS53,m,11 TO ,,x%:SYS53,m,12 TO ,,y%:x%+=1:y%+=1 19500SYS53,m,3 TO ,,ncol:IFscaleo% THEN 19510IFrotate% THEN 19520xdiv%=xdiv%*ny:ydiv%=ydiv%*nx 19530IFxdiv% ymul%=ymul%*2 19540IFydiv% xmul%=xmul%*2 19550ELSE 19560xdiv%=xdiv%*nx:ydiv%=ydiv%*ny 19570IFxdiv% xmul%=xmul%*2 19580IFydiv% ymul%=ymul%*2 19590ENDIF 19600ENDIF 19610SYS&62A51,m TO r0;V:IF(V AND1)=0 THEN 19630IFr0=1 THEN 19640ncol=255:IFm$<>"D" m$="R" 19650ENDIF 19660ENDIF 19670ENDCASE 19680IFm=-6 OR m=-7 OR m=-8 THEN 19690nx=VALMID$(pnm$,5):ny=VALMID$(pnm$,INSTR(pnm$,",",5)+1) 19700IFscaleo% THEN 19710IFrotate% THEN 19720IFxdiv% ymul%=ymul%*nx 19730IFydiv% xmul%=xmul%*ny 19740ELSE 19750IFxdiv% xmul%=xmul%*nx 19760IFydiv% ymul%=ymul%*ny 19770ENDIF 19780xdiv%=xdiv%*90:ydiv%=ydiv%*90 19790ENDIF 19800ENDIF 19810IFrotate% SWAP x%,y% 19830IFxdiv%=0 xdiv%=sx% 19840IFydiv%=0 ydiv%=sy% 19850IFxs$="=" xmul%=x%:xdiv%=sx% 19860IFys$="=" ymul%=y%:ydiv%=sy% 19870IFlock% THEN 19880IFxmul%/xdiv%>ymul%/ydiv% xmul%=ymul%:xdiv%=ydiv% ELSEymul%=xmul%:ydiv%=xdiv% 19890ENDIF 19900IFncol=1 THEN 19910CASE m$ OF 19920WHEN"C":xdiv%=xdiv%*4:ydiv%=ydiv%*4 19930DIM A%(16),B%(16) 19940A%()=0,&00000001,&08000001,&08000101,&08080101,&08080103,&0C080103,&0C080303,&0C0C0303,&0C0E0303,&0C0E0703,&0E0E0703,&0E0E0707,&0E0F0707,&0E0F0F07,&0F0F0F07,&0F0F0F0F 19950B%()=0,&00000008,&01000008,&01000808,&01010808,&0101080C,&0301080C,&03010C0C,&03030C0C,&03070C0C,&03070E0C,&07070E0C,&07070E0E,&070F0E0E,&070F0F0E,&0F0F0F0E,&0F0F0F0F 19960even_gard=FNdim(17*32*4):odd_gard=FNdim(17*32*4) 19970FORI%=0TO16:FORJ%=0TO16:even_gard!(J%*32*4+I%*4)=A%(I%)ORB%(J%)<<4:NEXT:NEXT 19980FORI%=0TO16:FORJ%=0TO16:odd_gard!(I%*32*4+J%*4)=B%(I%)ORA%(J%)<<4:NEXT:NEXT 19990WHEN"T":xdiv%=xdiv%*3:ydiv%=ydiv%*3 20000DIM A%(9),B%(9) 20010A%()=0,&0001,&4001,&4041,&4043,&40C3,&60C3,&61C3,&71C3,&71C7 20020B%()=0,&0004,&1004,&1104,&1106,&1186,&3186,&31C6,&71C6,&71C7 20030even_gard=FNdim(10*16*4):odd_gard=FNdim(10*16*4) 20040FORI%=0TO9:FORJ%=0TO9:even_gard!(J%*16*4+I%*4)=A%(I%)ORB%(J%)<<3:NEXT:NEXT 20050FORI%=0TO9:FORJ%=0TO9:odd_gard!(I%*16*4+J%*4)=B%(I%)ORA%(J%)<<3:NEXT:NEXT 20060WHEN"D":xdiv%=xdiv%*2:ydiv%=ydiv%*2 20070DIM A%(4),B%(4) 20080A%()=0,&1,&21,&31,&33 20090B%()=0,&2,&12,&32,&33 20100even_gard=FNdim(5*8):odd_gard=FNdim(5*8) 20110FORI%=0TO4:FORJ%=0TO4:even_gard?(J%*8+I%)=A%(I%)ORB%(J%)<<2:NEXT:NEXT 20120FORI%=0TO4:FORJ%=0TO4:odd_gard?(I%*8+J%)=B%(I%)ORA%(J%)<<2:NEXT:NEXT 20130ENDCASE 20140ENDIF 20150REPEAT 20160PROCreduce(xmul%,xdiv%):PROCreduce(ymul%,ydiv%) 20170IFxdiv%*ydiv%*255>2^32 xdiv%=xdiv%ANDNOT1:ydiv%=ydiv%ANDNOT1:xmul%=xmul%ANDNOT1:ymul%=ymul%ANDNOT1 20180UNTILxdiv%*ydiv%*255<2^32 20190IFinfo% PRINT"Size ratios are x ";xmul%":"xdiv%" y "ymul%":"ydiv% 20200x%=sx%*xmul%/xdiv%+.9999:y%=sy%*ymul%/ydiv%+.9999:rows%=sy% 20210order%=x%*y%>sx%*sy% 20220code%=FNdim(8192):SP=13 20230IFcache% THEN 20240PROCcachesize(code%) 20250IFcachebytes% THEN 20260filesize%=EXT#c%-PTR#c%:IFcache%>filesize% cache%=filesize% 20270IFcachebytes%>0 IFcache%>cachebytes% cache%=cachebytes% 20280cacherows%=cache% 20290ELSE 20300filesize%=sy%*rowbytes%:IFcache%<rowbytes% cache%=rowbytes% 20310IFcache%>filesize% cache%=filesize% 20320cacherows%=striprows%:IFcacherows%<1 cacherows%=cache%DIVrowbytes% 20330cache%=cacherows%*rowbytes% 20340ENDIF 20350datacache%=FNcachedim(cache%):IFdatacache%=-1 datacache%=FNdim(cache%) 20360ENDIF 20370IFncol=255 IFm$<>"D" m$="R" 20380IFm$="R" OR(ncol=63 ANDm$="") THEN 20390SYS53,-1,3 TO,,J%:IFncol=255 AND MODE=m J%=ncol 20400IFncol=63 AND(m$=""ORm$="R") J%=ncol 20410IFJ%<>ncol PROCclose:ERROR42,"You must be in a "+STR$(ncol+1)+" colour mode to do this" 20420J%=ncol:IFJ%=63 J%=255 20430palette%=FNdim((J%+1)*4) 20440IFncol=255 THEN 20450SYS"ColourTrans_ReadPalette",-1,-1,palette%,256*4 20460FORI%=0TO255:palette%!(I%<<2)=palette%!(I%<<2)>>>8:NEXT 20470ELSE 20480IFncol=63 THEN 20490FORI%=0TO255 20500palette%!(I%<<2)=(I%AND7 OR (I%AND16)>>1)*17 20510palette%?(I%<<2 OR1)=(I%AND3 OR (I%AND&60)>>3)*17 20520palette%?(I%<<2 OR2)=(I%AND3 OR (I%AND8)>>1 OR (I%AND128)>>4)*17 20530NEXT 20540ELSE 20550FORI%=0TOncol:SYS"OS_ReadPalette",I%,16 TO ,,i%:palette%!(I%<<2)=i%>>>8:NEXT 20560ENDIF 20570ENDIF 20580t%=TRUE:k%=palette%+1:nk%=palette%+2 20590FORI%=0TOncol*4STEP4 20600IFpalette%?I%<>k%?I% OR palette%?I%<>nk%?I% t%=FALSE 20610NEXT 20620IFncol>16 IFt% m$="D" 20630IFncol=15 IFt% m$="T" 20640IFm$="R" THEN 20650IF sx%*xmul%/xdiv%*sy%*ymul%/ydiv%<200000 k%=3 ELSEk%=4 20660nk%=8-k% 20670t%=1<<nk% 20680mask%=t%-1 20690td2%=1<<nk%-1 20700step%=1<<(8-k%) 20710ncol%=ncol+1:IFncol%=64 ncol%=256 20720ict%=FNdim(2^(k%*3)*4-1) 20730IFcache%<8192*6 scratch%=FNdim(8192*6):scratchsz%=8192*6 ELSEscratch%=datacache%:scratchsz%=cache% 20740IFinfo% PRINT"Begin table generation with ";scratchsz%" bytes." 20750FORZ%=0TO2STEP2 20760P%=code% 20770[OPT Z% 20780.make% 20790STMFD r13!,{r14} 20800LDR r4,ict 20810MOV r2,#step%/2 20820.blueloop 20830MOV r1,#step%/2 20840.greenloop 20850MOV r0,#step%/2 20860.redloop 20880MOV r3,r0,LSR #nk% 20890MOV r14,r1,LSR #nk% 20900MOV r5,r2,LSR #nk% 20910ORR r3,r3,r14,LSL #k% 20920ORR r3,r3,r5,LSL #k%*2 20930BL devious 20940ADD r0,r0,#step%*2 20950CMP r0,#256 20960BCC redloop 20970ADD r1,r1,#step% 20980CMP r1,#256 20990BCC greenloop 21000ADD r2,r2,#step% 21010CMP r2,#256 21020BCC blueloop 21030LDMFD r13!,{pc}^ 21040.ct DCD palette% 21050.min DCD code%+8192-256*2*4 21060.ict DCD ict% 21070.fsaad DCD scratch% 21080.fsalim DCD scratch%+scratchsz% 21090.devious 21100STMFD r13!,{r0,r1,r2,r3,r4,r8,r14} 21110BIC r0,r0,#(mask%<<1)+1 21120BIC r1,r1,#mask% 21130BIC r2,r2,#mask% 21160MOV r5,#0 21170LDR r6,ct 21180MOV r9,#&ff0000 21190MOV r14,#&ff0000 21200LDR r12,min 21210.devloop 21220LDR r7,[r6,r5,LSL #2] 21230MOV r8,r7,lsr #16 21240BIC r10,r8,#mask% 21250ADD r11,r2,#t% 21260CMP r10,r2 21270BEQ blueequal 21280SUBCC r10,r2,r8 21290SUBCC r11,r11,r8 21300SUBCS r10,r8,r11 21310SUBCS r11,r8,r2 21320MUL r3,r10,r10 21330.doneblue 21340MUL r4,r11,r11 21350MOV r8,r7,lsr #8 21360AND r8,r8,#255 21370BIC r10,r8,#mask% 21380ADD r11,r1,#t% 21390CMP r10,r1 21400BEQ greenequal 21410SUBCC r10,r1,r8 21420SUBCC r11,r11,r8 21430SUBCS r10,r8,r11 21440SUBCS r11,r8,r1 21460MUL r8,r10,r10 21470ADD r8,r8,r8,LSL #2 21480ADD r3,r3,r8,LSL #1 21490.donegreen 21500MUL r8,r11,r11 21510ADD r8,r8,r8,LSL #2 21520ADD r4,r4,r8,LSL #1 21540AND r8,r7,#255 21560BIC r10,r8,#mask% 21570ADD r11,r0,#t% 21580CMP r10,r0 21590BEQ redequal0 21600SUBCC r10,r0,r8 21610SUBCC r11,r11,r8 21620SUBCS r10,r8,r11 21630SUBCS r11,r8,r0 21650MUL r7,r10,r10 21660ADD r7,r7,r7,LSL #1 21670ADD r7,r3,r7 21680STR r7,[r12,r5,LSL #2] 21690.donered0 21700MUL r7,r11,r11 21710ADD r7,r7,r7,LSL #1 21720ADD r7,r4,r7 21740CMP r7,r9 21750MOVCC r9,r7 21770ADD r7,r0,#t% 21780BIC r10,r8,#mask% 21790ADD r11,r7,#t% 21800CMP r10,r7 21810BEQ redequal1 21820SUBCC r10,r7,r8 21830SUBCC r11,r11,r8 21840SUBCS r10,r8,r11 21850SUBCS r11,r8,r7 21860MUL r7,r10,r10 21870ADD r7,r7,r7,LSL #1 21880ADD r3,r3,r7 21900.donered1 21910ADD r7,r5,#ncol% 21920STR r3,[r12,r7,LSL #2] 21930MUL r7,r11,r11 21940ADD r7,r7,r7,LSL #1 21950ADD r7,r4,r7 21970CMP r7,r14 21980MOVCC r14,r7 21990ADD r5,r5,#1 22000CMP r5,#ncol% 22010BCC devloop 22020LDMFD r13!,{r0,r1,r2,r3,r4} 22040LDR r5,fsaad 22050MOV r7,r5 22060MOV r10,#0 22070.calcnum0 22080LDMIA r12!,{r8,r11} 22090CMP r8,r9 22100STRLEB r10,[r7],#1 22110ADD r10,r10,#1 22120CMP r11,r9 22130STRLEB r10,[r7],#1 22140ADD r10,r10,#1 22150LDMIA r12!,{r8,r11} 22160CMP r8,r9 22170STRLEB r10,[r7],#1 22180ADD r10,r10,#1 22190CMP r11,r9 22200STRLEB r10,[r7],#1 22210ADD r10,r10,#1 22220CMP r10,#ncol% 22230BCC calcnum0 22240SUBS r10,r7,r5 22250SWIEQ 256+ASC"A" 22260CMP r10,#4 ;if<4 then 22270MOVCC r7,r5 ;reset list pointer 22280LDRCCB r5,[r7] ;first possible 22290LDRCCB r8,[r7,#1] ;second possible 22300ORRCC r5,r5,r8,lsl #8 22310LDRCCB r8,[r7,#2] ;third possible 22320ORRCC r5,r5,r8,lsl #16 22330ADD r5,r5,r10,lsl #24 22340BIC r10,r3,#1 22350STR r5,[r4,r10,LSL #2] 22360MOV r5,r7 22370MOV r10,#0 22380.calcnum1 22390LDMIA r12!,{r8,r11} 22400CMP r8,r14 22410STRLEB r10,[r7],#1 22420ADD r10,r10,#1 22430CMP r11,r14 22440STRLEB r10,[r7],#1 22450ADD r10,r10,#1 22460LDMIA r12!,{r8,r11} 22470CMP r8,r14 22480STRLEB r10,[r7],#1 22490ADD r10,r10,#1 22500CMP r11,r14 22510STRLEB r10,[r7],#1 22520ADD r10,r10,#1 22530CMP r10,#ncol% 22540BCC calcnum1 22550SUBS r10,r7,r5 22560SWIEQ 256+ASC"B" 22570CMP r10,#4 ;if<4 then 22580MOVCC r7,r5 22590LDRCCB r5,[r7] 22600LDRCCB r8,[r7,#1] 22610ORRCC r5,r5,r8,lsl #8 22620LDRCCB r8,[r7,#2] 22630ORRCC r5,r5,r8,lsl #16 22640ADD r5,r5,r10,lsl #24 22650ORR r10,r3,#1 22660STR r5,[r4,r10,LSL #2] 22670STR r7,fsaad 22680LDR r8,fsalim 22690CMP r7,r8 22700SWICS 256+ASC"!" 22710LDMFD r13!,{r8,pc}^ 22720.redequal0 22730STR r3,[r12,r5,LSL #2] 22740TST r8,#td2% 22750SUBNE r11,r8,r0 22760SUBEQ r11,r11,r8 22770B donered0 22780.redequal1 22790TST r8,#td2% 22800SUBNE r11,r8,r7 22810SUBEQ r11,r11,r8 22820B donered1 22830.greenequal 22840TST r8,#td2% 22850SUBNE r11,r8,r1 22860SUBEQ r11,r11,r8 22870B donegreen 22880.blueequal 22890MOV r3,#0 22900TST r8,#td2% 22910SUBNE r11,r8,r2 22920SUBEQ r11,r11,r8 22930B doneblue 22940] 22950NEXT 22960I%=TIME:CALLmake% 22970IFinfo% PRINT"Generated 'r'";k%" tables for ";ncol%" colours using ";!fsaad-scratch%" bytes, taking "TIME-I%" cS" 22980safesubict%=FNdim(!fsaad-scratch%) 22990FORI%=0TO!fsaad-scratch%+4STEP4:safesubict%!I%=scratch%!I%:NEXT 23000FORI%=0TO2^(k%*3)*4-1STEP4:IF(ict%!I%>>>24)>3 ict%!I%=ict%!I%-scratch%+safesubict% 23010NEXT 23020ENDIF 23030ENDIF 23040IFfast% IFMODE<>0 MODE0 23060CASE m OF 23070WHEN -1,-9:col=0 23080WHEN -3,-4,-5,-6,-7,-8,-10:col=2 23090OTHERWISE 23100IFm$="D" IFncol=3 m$="" 23110col=0:IFncol>15 ORm$="C" ORm$="D" ORm$="R" col=2 23120IFncol=63 OR ncol=255 IFm$="D" col=0:ncol=256 23130ENDCASE 23140IFncol=1 THEN 23150CASE m$ OF 23160WHEN"C":col=0:x%=x%+1ANDNOT1 23170WHEN"D":col=0:x%=x%+3ANDNOT3 23180WHEN"T":col=0:x%=x%+1ANDNOT1 23190ENDCASE 23200ENDIF 23210DIM cl%(x%+7,col) 23220DIM xl%(x%+7,col),xp%(sx%+7,col) 23230DIM xl2%(x%+7,col) 23240IFsharpen% THEN 23250IForder% THEN 23260DIM rm%(sx%+7,col),rm1%(sx%+7,col),rm2%(sx%+7,col) 23270ELSE 23280DIM rm%(x%+7,col),rm1%(x%+7,col),rm2%(x%+7,col) 23290ENDIF 23300ENDIF 23310IFhist%ORequal% DIM vals%(256,col) 23320DIM nl%(x%+7,col) 23330totvals%=x%*(col+1) 23340totvals2%=sx%*(col+1) 23350FORZ=0TO2STEP2:P%=code% 23360CASE ncol OF 23370WHEN 2^24-1 23380[OPT Z 23390.div255 23400] 23410FORI%=0TO2^p6bits-1 23420[OPT Z 23430EQUD I%/(2^p6bits-1)*F 23440] 23450NEXT 23460[OPT Z 23470.fs% 23480STMFD SP !,{R14} 23490LDR R1,[R9,#5*8]:LDR R1,[R1] 23500LDR R10,[R9,#4*8] 23510LDR R11,[R9,#3*8] 23520LDR R12,[R9,#2*8]:LDR R12,[R12] 23530LDR R8,[R9,#8]:LDR R8,[R8] 23540LDR R9,[R9]:LDR R9,[R9] 23550LDR R4,[R10] 23560LDR R5,[R10,#4] 23570LDR R6,[R10,#8] 23580ADR R7,div255 23590.fsloop 23600ADD R10,R10,R8 23610CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 23620SUB R0,R4,R4,LSR #p6bits:ADD R0,R0,#1<<(bits-p6bits-1):MOV R0,R0,LSR #(bits-p6bits) 23630LDR R2,[R7,R0,LSL #2]:SUB R4,R4,R2 23640CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 23650SUB R3,R5,R5,LSR #p6bits:ADD R3,R3,#1<<(bits-p6bits-1):MOV R3,R3,LSR #(bits-p6bits):ORR R0,R0,R3,LSL #8 23660LDR R2,[R7,R3,LSL #2]:SUB R5,R5,R2 23670CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 23680SUB R3,R6,R6,LSR #p6bits:ADD R3,R3,#1<<(bits-p6bits-1):MOV R3,R3,LSR #(bits-p6bits):ORR R0,R0,R3,LSL #16 23690LDR R2,[R7,R3,LSL #2]:SUB R6,R6,R2 23700STRB R0,[R12]:MOV R0,R0,LSR #8:STRB R0,[R12,#1]:MOV R0,R0,LSR #8 23710STRB R0,[R12,#2] 23720] 23730IFm=-8 THEN 23740[OPT Z 23750ADD R12,R12,R1,LSL #2 23760] 23770ELSE 23780[OPT Z 23790ADD R12,R12,R1,LSL #1:ADD R12,R12,R1 23800] 23810ENDIF 23820IFdither% THEN 23830[OPT Z 23840ADD R0,R11,#4 23850ADD R2,R4,R4,LSL #1 23860LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 23870STR R3,[R11,-R8] 23880ADD R2,R4,R4,LSL #2 23890LDR R3,[R11]:ADD R3,R3,R2,ASR #4 23900STR R3,[R11] 23910MOV R3,R4,ASR #4 23920STR R3,[R11,R8]! 23930RSB R2,R4,R4,LSL #3 23940LDR R4,[R10] 23950ADD R4,R4,R2,ASR #4 23960ADD R2,R5,R5,LSL #1 23970LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 23980STR R3,[R0,-R8] 23990MOV R3,R5,ASR #4 24000STR R3,[R0,R8] 24010ADD R2,R5,R5,LSL #2 24020LDR R3,[R0]:ADD R3,R3,R2,ASR #4 24030STR R3,[R0],#4 24040RSB R2,R5,R5,LSL #3 24050LDR R5,[R10,#4] 24060ADD R5,R5,R2,ASR #4 24070ADD R2,R6,R6,LSL #1 24080LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 24090STR R3,[R0,-R8] 24100ADD R2,R6,R6,LSL #2 24110LDR R3,[R0]:ADD R3,R3,R2,ASR #4 24120STR R3,[R0] 24130MOV R3,R6,ASR #4 24140STR R3,[R0,R8] 24150RSB R2,R6,R6,LSL #3 24160LDR R6,[R10,#8] 24170ADD R6,R6,R2,ASR #4 24180] 24190ELSE 24200[OPT Z 24210LDMIA R10,{R4,R5,R6} 24220] 24230ENDIF 24240[OPT Z 24250SUBS R9,R9,#1:BNE fsloop 24260LDMFD SP !,{PC}^ 24270] 24280WHEN 2^15-1 24290[OPT Z 24300.div31 24310] 24320FORI%=0TO31 24330[OPT Z 24340EQUD I%/31*F 24350] 24360NEXT 24370[OPT Z 24380.fs% 24390STMFD SP !,{R14} 24400LDR R1,[R9,#5*8]:LDR R1,[R1] 24410LDR R10,[R9,#4*8] 24420LDR R11,[R9,#3*8] 24430LDR R12,[R9,#2*8]:LDR R12,[R12] 24440LDR R8,[R9,#8]:LDR R8,[R8] 24450LDR R9,[R9]:LDR R9,[R9] 24460LDR R4,[R10] 24470LDR R5,[R10,#4] 24480LDR R6,[R10,#8] 24490ADR R7,div31 24500.fsloop 24510ADD R10,R10,R8 24520CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 24530SUB R0,R4,R4,LSR #5:ADD R0,R0,#1<<(bits-6):MOV R0,R0,LSR #(bits-5) 24540LDR R2,[R7,R0,LSL #2]:SUB R4,R4,R2 24550CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 24560SUB R3,R5,R5,LSR #5:ADD R3,R3,#1<<(bits-6):MOV R3,R3,LSR #(bits-5):ORR R0,R0,R3,LSL #5 24570LDR R2,[R7,R3,LSL #2]:SUB R5,R5,R2 24580CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 24590SUB R3,R6,R6,LSR #5:ADD R3,R3,#1<<(bits-6):MOV R3,R3,LSR #(bits-5):ORR R0,R0,R3,LSL #10 24600LDR R2,[R7,R3,LSL #2]:SUB R6,R6,R2 24610STRB R0,[R12]:MOV R0,R0,LSR #8:STRB R0,[R12,#1]:ADD R12,R12,R1,LSL #1 24620] 24630IFdither% THEN 24640[OPT Z 24650ADD R0,R11,#4 24660ADD R2,R4,R4,LSL #1 24670LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 24680STR R3,[R11,-R8] 24690ADD R2,R4,R4,LSL #2 24700LDR R3,[R11]:ADD R3,R3,R2,ASR #4 24710STR R3,[R11] 24720MOV R3,R4,ASR #4 24730STR R3,[R11,R8]! 24740RSB R2,R4,R4,LSL #3 24750LDR R4,[R10] 24760ADD R4,R4,R2,ASR #4 24770ADD R2,R5,R5,LSL #1 24780LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 24790STR R3,[R0,-R8] 24800MOV R3,R5,ASR #4 24810STR R3,[R0,R8] 24820ADD R2,R5,R5,LSL #2 24830LDR R3,[R0]:ADD R3,R3,R2,ASR #4 24840STR R3,[R0],#4 24850RSB R2,R5,R5,LSL #3 24860LDR R5,[R10,#4] 24870ADD R5,R5,R2,ASR #4 24880ADD R2,R6,R6,LSL #1 24890LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 24900STR R3,[R0,-R8] 24910ADD R2,R6,R6,LSL #2 24920LDR R3,[R0]:ADD R3,R3,R2,ASR #4 24930STR R3,[R0] 24940MOV R3,R6,ASR #4 24950STR R3,[R0,R8] 24960RSB R2,R6,R6,LSL #3 24970LDR R6,[R10,#8] 24980ADD R6,R6,R2,ASR #4 24990] 25000ELSE 25010[OPT Z 25020LDMIA R10,{R4,R5,R6} 25030] 25040ENDIF 25050[OPT Z 25060SUBS R9,R9,#1:BNE fsloop 25070LDMFD SP !,{PC}^ 25080] 25090WHEN 256 25100[OPT Z 25110.div255 25120] 25130FORI%=0TO255 25140[OPT Z 25150EQUD I%/255*F 25160] 25170NEXT 25180[OPT Z 25200.fs% 25210STMFD SP !,{R14} 25220LDR R10,[R9,#4*8] 25230ADR R7,div255 25240LDR R1,[R9,#5*8]:LDR R1,[R1] 25250LDR R11,[R9,#3*8] 25260LDR R12,[R9,#2*8]:LDR R12,[R12] 25270LDR R8,[R9,#8]:LDR R8,[R8] 25280LDR R9,[R9]:LDR R9,[R9] 25290LDR R4,[R10],R8 25300.fsloop 25310CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 25320SUB R0,R4,R4,LSR #8:ADD R0,R0,#1<<(bits-9):MOV R0,R0,LSR #(bits-8):STRB R0,[R12],R1 25330LDR R2,[R7,R0,LSL #2] 25340] 25350IFdither% THEN 25360[OPT Z 25370SUB R4,R4,R2 25380MOVCS R4,#0 25390ADD R2,R4,R4,LSL #1 25400LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 25410STR R3,[R11,-R8] 25420ADD R2,R4,R4,LSL #2 25430LDR R3,[R11]:ADD R3,R3,R2,ASR #4 25440STR R3,[R11] 25450MOV R3,R4,ASR #4 25460STR R3,[R11,R8]! 25470RSB R2,R4,R4,LSL #3 25480LDR R4,[R10],R8 25490ADD R4,R4,R2,ASR #4 25500] 25510ELSE 25520[OPT Z 25530LDR R4,[R10],R8 25540] 25550ENDIF 25560[OPT Z 25570SUBS R9,R9,#1:BNE fsloop 25580LDMFD SP !,{PC}^ 25590] 25600WHEN 63,255 25610div15=P%:FORI%=0TO255*4STEP4 25620[OPT Z 25630EQUD (palette%!I%AND&FF)/255*F 25640EQUD (palette%!I%>>8AND&FF)/255*F 25650EQUD (palette%!I%>>16AND&FF)/255*F 25660] 25670NEXT 25680IFm$="R" THEN 25690[OPT Z 25700.ictloc EQUD ict% 25710] 25720ENDIF 25730[OPT Z 25740EQUD div15 25750.fs% 25760STMFD SP !,{R14} 25770LDR R1,[R9,#5*8]:LDR R1,[R1] 25780LDR R10,[R9,#4*8] 25790LDR R11,[R9,#3*8] 25800LDR R12,[R9,#2*8]:LDR R12,[R12] 25810LDR R8,[R9,#8]:LDR R8,[R8] 25820LDR R9,[R9]:LDR R9,[R9] 25830LDR R4,[R10] 25840LDR R5,[R10,#4] 25850LDR R6,[R10,#8] 25860LDR R7,fs%-4 25870.fsloop 25880ADD R10,R10,R8 25890] 25900CASE m$ OF 25910WHEN"T" 25920[OPT Z 25930CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 25940MOV R0,R4,LSR #(bits-4):CMP R0,#15:MOVCS R0,#15 25950CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 25960MOV R3,R5,LSR #(bits-4):CMP R3,#15:MOVCS R3,#15:ORR R0,R0,R3,LSL #4 25970CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 25980MOV R3,R6,LSR #(bits-4):CMP R3,#15:MOVCS R3,#15:ORR R0,R0,R3,LSL #8 25990LDR R3,colmatchloc 26000LDRB R0,[R3,R0] 26010ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2 26020LDR R2,[R3],#4:SUB R4,R4,R2 26030LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3 26040] 26050WHEN"R" 26060PROCsrchdevlist 26070OTHERWISE 26080[OPT Z 26090CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 26100CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 26110CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 26120STMFD SP !,{R7,R8,R9} 26130MVN R2,#0 26140MOV R3,#&30<<23 26150.srch RSB R7,R3,#&20<<23 26160MOV R8,R6,LSR #bits-8 26170SUB R8,R8,R8,LSR #4 26180ADDS R7,R7,R8,LSL #23 26190MOVVSS R7,#&7F000000 26200MOVMI R7,#0 26210AND R7,R7,#&60000000 26220ADD R7,R7,R3 26230ADD R14,R7,R7,LSR #4 26240ADD R7,R14,R14,LSR #8 26250ADD R7,R7,R7,LSR #16 26260SUBS R8,R6,R7,LSR #31-bits 26270RSBLT R8,R8,#0 26280MOV R8,R8,LSR #bits/2 26290MUL R9,R8,R8 26300RSB R7,R3,#&20<<23 26310MOV R8,R5,LSR #bits-8 26320SUB R8,R8,R8,LSR #4 26330ADDS R7,R7,R8,LSL #23 26340MOVVSS R7,#&7F000000 26350MOVMI R7,#0 26360AND R7,R7,#&60000000 26370ADD R7,R3,R7 26380ADD R7,R7,R7,LSR #4 26390ORR R14,R14,R7,LSR #8 26400ADD R7,R7,R7,LSR #8 26410ADD R7,R7,R7,LSR #16 26420SUBS R8,R5,R7,LSR #31-bits 26430RSBLT R8,R8,#0 26440MOV R8,R8,LSR #bits/2 26450MUL R7,R8,R8 26460ADD R7,R7,R7,LSL #2 26470ADD R9,R9,R7,LSL #1 26480RSB R7,R3,#&20<<23 26490MOV R8,R4,LSR #bits-8 26500SUB R8,R8,R8,LSR #4 26510ADDS R7,R7,R8,LSL #23 26520MOVVSS R7,#&7F000000 26530MOVMI R7,#0 26540AND R7,R7,#&60000000 26550ADD R7,R3,R7 26560ADD R7,R7,R7,LSR #4 26570ORR R14,R14,R7,LSR #16 26580ADD R7,R7,R7,LSR #8 26590ADD R7,R7,R7,LSR #16 26600SUBS R8,R4,R7,LSR #31-bits 26610RSBLT R8,R8,#0 26620MOV R8,R8,LSR #bits/2 26630MUL R7,R8,R8 26640ADD R7,R7,R7,LSL #1 26650ADD R9,R9,R7 26660CMP R9,R2 26670MOVLS R2,R9 26680MOVLS R0,R14 26690SUBS R3,R3,#&10<<23 26700BGE srch 26710AND R7,R0,#&40000000 26720MOV R8,R7,LSR #23 26730AND R7,R0,#&600000 26740ORR R8,R8,R7,LSR #16 26750AND R7,R0,#&4000 26760ORR R8,R8,R7,LSR #10 26770AND R7,R0,#&20000000 26780ORR R8,R8,R7,LSR #26 26790AND R7,R0,#&3800 26800ORR R0,R8,R7,LSR #11 26810LDMFD SP !,{R7,R8,R9} 26820ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2 26830LDR R2,[R3],#4:SUB R4,R4,R2 26840LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3 26850] 26860ENDCASE 26870[OPT Z 26880STRB R0,[R12],R1 26890] 26900IFdither% THEN 26910[OPT Z 26920ADD R0,R11,#4 26930ADD R2,R4,R4,LSL #1 26940LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 26950STR R3,[R11,-R8] 26960ADD R2,R4,R4,LSL #2 26970LDR R3,[R11]:ADD R3,R3,R2,ASR #4 26980STR R3,[R11] 26990MOV R3,R4,ASR #4 27000STR R3,[R11,R8]! 27010RSB R2,R4,R4,LSL #3 27020LDR R4,[R10] 27030ADD R4,R4,R2,ASR #4 27040ADD R2,R5,R5,LSL #1 27050LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 27060STR R3,[R0,-R8] 27070MOV R3,R5,ASR #4 27080STR R3,[R0,R8] 27090ADD R2,R5,R5,LSL #2 27100LDR R3,[R0]:ADD R3,R3,R2,ASR #4 27110STR R3,[R0],#4 27120RSB R2,R5,R5,LSL #3 27130LDR R5,[R10,#4] 27140ADD R5,R5,R2,ASR #4 27150ADD R2,R6,R6,LSL #1 27160LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 27170STR R3,[R0,-R8] 27180ADD R2,R6,R6,LSL #2 27190LDR R3,[R0]:ADD R3,R3,R2,ASR #4 27200STR R3,[R0] 27210MOV R3,R6,ASR #4 27220STR R3,[R0,R8] 27230RSB R2,R6,R6,LSL #3 27240LDR R6,[R10,#8] 27250ADD R6,R6,R2,ASR #4 27260] 27270ELSE 27280[OPT Z 27290LDMIA R10,{R4,R5,R6} 27300] 27310ENDIF 27320[OPT Z 27330SUBS R9,R9,#1:BNE fsloop 27340LDMFD SP !,{PC}^ 27350] 27360WHEN 15 27370divtable=P%:CASE m$ OF 27380WHEN "D" 27390WHEN "R" 27400FORI%=0TO15*4STEP4 27410[OPT Z 27420EQUD (palette%!I%>>4AND&F)/bright%*F 27430EQUD (palette%!I%>>12AND&F)/bright%*F 27440EQUD (palette%!I%>>20AND&F)/bright%*F 27450] 27460NEXT 27470[OPT Z 27480.ictloc EQUD ict% 27490] 27500WHEN "T" 27510FORI%=0TO15 27520[OPT Z 27530EQUD I%/bright%*F 27540] 27550NEXT 27560OTHERWISE 27570FORI%=0TO7 27580[OPT Z 27590EQUD I%/(bright%DIV2)*F 27600] 27610NEXT 27620ENDCASE 27630[OPT Z 27640.fs% 27650STMFD SP !,{R14} 27660LDR R1,[R9,#5*8]:LDR R1,[R1] 27670LDR R10,[R9,#4*8] 27680LDR R11,[R9,#3*8] 27690LDR R12,[R9,#2*8]:LDR R12,[R12] 27700LDR R8,[R9,#8]:LDR R8,[R8] 27710LDR R9,[R9]:LDR R9,[R9] 27720] 27730IFm$="D" ORm$="R" THEN 27740[OPT Z 27750LDR R4,[R10] 27760LDR R5,[R10,#4] 27770LDR R6,[R10,#8] 27780] 27790ELSE 27800[OPT Z 27810LDR R4,[R10],R8 27820] 27830ENDIF 27840IFm$<>"D" THEN 27850[OPT Z 27860ADR R7,divtable 27870] 27880ENDIF 27890[OPT Z 27900.fsloop 27910] 27920CASE m$ OF 27930WHEN"R" 27940[OPT Z 27950ADD R10,R10,R8 27960] 27970PROCsrchdevlist 27980[OPT Z 27990MOV r3,r0 28000] 28010WHEN "D" 28020[OPT Z 28030ADD R10,R10,R8 28040MOV R3,#0 28050CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 28060CMP R4,#F>>1 28070SUBCS R4,R4,#F:ORRCS R3,R3,#1 28080CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 28090CMP R5,#F>>1 28100SUBCS R5,R5,#F:ORRCS R3,R3,#2 28110CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 28120CMP R6,#F>>1 28130SUBCS R6,R6,#F:ORRCS R3,R3,#4 28140] 28150WHEN "T" 28160[OPT Z 28170CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 28180RSB R3,R4,R4,LSL #4:ADD R3,R3,#F>>1:MOV R3,R3,LSR #bits 28190LDR R2,[R7,R3,LSL #2] 28200SUB R4,R4,R2 28210] 28220OTHERWISE 28230[OPT Z 28240CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 28250RSB R3,R4,R4,LSL #3:ADD R3,R3,#F>>1:MOV R3,R3,LSR #bits 28260LDR R2,[R7,R3,LSL #2] 28270SUB R4,R4,R2 28280] 28290ENDCASE 28300[OPT Z 28310MOV R2,R12,LSR #1 28320TST R12,#1 28330LDRB R0,[R2] 28340ANDEQ R0,R0,#&F0:ORREQ R0,R0,R3 28350ANDNE R0,R0,#&0F:ORRNE R0,R0,R3,LSL #4 28360STRB R0,[R2] 28370ADD R12,R12,R1 28380] 28390IFm$="D" ORm$="R" THEN 28400IFdither% THEN 28410[OPT Z 28420ADD R0,R11,#4 28430ADD R2,R4,R4,LSL #1 28440LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 28450STR R3,[R11,-R8] 28460ADD R2,R4,R4,LSL #2 28470LDR R3,[R11]:ADD R3,R3,R2,ASR #4 28480STR R3,[R11] 28490MOV R3,R4,ASR #4 28500STR R3,[R11,R8]! 28510RSB R2,R4,R4,LSL #3 28520LDR R4,[R10] 28530ADD R4,R4,R2,ASR #4 28540ADD R2,R5,R5,LSL #1 28550LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 28560STR R3,[R0,-R8] 28570MOV R3,R5,ASR #4 28580STR R3,[R0,R8] 28590ADD R2,R5,R5,LSL #2 28600LDR R3,[R0]:ADD R3,R3,R2,ASR #4 28610STR R3,[R0],#4 28620RSB R2,R5,R5,LSL #3 28630LDR R5,[R10,#4] 28640ADD R5,R5,R2,ASR #4 28650ADD R2,R6,R6,LSL #1 28660LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 28670STR R3,[R0,-R8] 28680ADD R2,R6,R6,LSL #2 28690LDR R3,[R0]:ADD R3,R3,R2,ASR #4 28700STR R3,[R0] 28710MOV R3,R6,ASR #4 28720STR R3,[R0,R8] 28730RSB R2,R6,R6,LSL #3 28740LDR R6,[R10,#8] 28750ADD R6,R6,R2,ASR #4 28760] 28770ELSE 28780[OPT Z 28790LDMIA R10,{R4,R5,R6} 28800] 28810ENDIF 28820ELSE 28830IFdither% THEN 28840[OPT Z 28850ADD R2,R4,R4,LSL #1 28860LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 28870STR R3,[R11,-R8] 28880ADD R2,R4,R4,LSL #2 28890LDR R3,[R11]:ADD R3,R3,R2,ASR #4 28900STR R3,[R11] 28910MOV R3,R4,ASR #4 28920STR R3,[R11,R8]! 28930RSB R2,R4,R4,LSL #3 28940LDR R4,[R10],R8 28950ADD R4,R4,R2,ASR #4 28960] 28970ELSE 28980[OPT Z 28990LDR R4,[R10],R8 29000] 29010ENDIF 29020ENDIF 29030[OPT Z 29040SUBS R9,R9,#1:BNE fsloop 29050LDMFD SP !,{PC}^ 29060] 29070WHEN 3 29080divtable=P%:CASE m$ OF 29090WHEN "C" 29100WHEN "R" 29110FORI%=0TO3*4STEP4 29120[OPT Z 29130EQUD (palette%!I%>>4AND&F)/bright%*F 29140EQUD (palette%!I%>>12AND&F)/bright%*F 29150EQUD (palette%!I%>>20AND&F)/bright%*F 29160] 29170NEXT 29180OTHERWISE 29190[OPT Z 29200EQUD 0 29210EQUD 1/(bright%DIV4)*F 29220EQUD 2/(bright%DIV4)*F 29230EQUD F 29240] 29250ENDCASE 29260[OPT Z 29270.fs% 29280STMFD SP !,{R14} 29290LDR R1,[R9,#5*8]:LDR R1,[R1] 29300LDR R10,[R9,#4*8] 29310LDR R11,[R9,#3*8] 29320LDR R12,[R9,#2*8] 29330LDR R12,[R12] 29340LDR R8,[R9,#8] 29350LDR R8,[R8] 29360LDR R9,[R9] 29370LDR R9,[R9] 29380] 29390IFm$="C" ORm$="R" THEN 29400[OPT Z 29410LDR R4,[R10] 29420LDR R5,[R10,#4] 29430LDR R6,[R10,#8] 29440] 29450ELSE 29460[OPT Z 29470LDR R4,[R10],R8 29480] 29490ENDIF 29500[OPT Z 29510.fsloop 29520] 29530IFm$<>"C"THEN 29540[OPT Z 29550ADR R7,divtable 29560] 29570ENDIF 29580CASE m$ OF 29590WHEN"C" 29600[OPT Z 29610ADD R10,R10,R8 29620CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 29630CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 29640CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 29650MOV R3,#0 29660CMP R4,#F>>1:ORRCS R3,R3,#1 29670CMP R5,#F>>1:ORRCS R3,R3,#2 29680CMP R6,#F>>1:ORRCS R3,R3,#4 29690CMP R3,#6:MOVEQ R3,#1:BEQ octcyan 29700BCS octwhite 29710CMP R3,#4:BEQ octblue 29720MOVCS R3,#2:BCS octmagenta 29730CMP R3,#2:BEQ octgreen 29740BCS octyellow 29750CMP R3,#0:BEQ octblack 29760.octred 29770RSB R0,R4,#F 29780CMP R5,R0 29790BLT octred1 29800CMP R5,R6 29810MOVGE R3,#3 29820MOVLT R3,#2 29830B octconvert 29840.octred1 29850CMP R0,R6 29860MOVGE R3,#0 29870MOVLT R3,#2 29880B octconvert 29890.octgreen 29900RSB R0,R5,#F 29910CMP R0,R4 29920BLT octgreen1 29930CMP R0,R6 29940MOVGE R3,#0 29950MOVLT R3,#1 29960B octconvert 29970.octgreen1 29980CMP R4,R6 29990MOVGE R3,#3 30000MOVLT R3,#1 30010B octconvert 30020.octblue 30030RSB R0,R6,#F 30040CMP R0,R4 30050BLT octblue1 30060CMP R0,R5 30070MOVGE R3,#0 30080MOVLT R3,#1 30090B octconvert 30100.octblue1 30110CMP R4,R5 30120MOVGE R3,#2 30130MOVLT R3,#1 30140B octconvert 30150.octwhite 30160CMP R4,R5 30170BLT octwhite1 30180CMP R5,R6 30190MOVGE R3,#3 30200MOVLT R3,#2 30210B octconvert 30220.octwhite1 30230CMP R4,R6 30240MOVGE R3,#3 30250MOVLT R3,#1 30260.octconvert 30270CMP R3,#1 30280.octcyan 30290SUBEQ R5,R5,#F 30300SUBEQ R6,R6,#F 30310.octmagenta 30320CMP R3,#2 30330SUBEQ R4,R4,#F 30340SUBEQ R6,R6,#F 30350.octyellow 30360CMP R3,#3 30370SUBEQ R4,R4,#F 30380SUBEQ R5,R5,#F 30390.octblack 30400MOV R2,R12,LSR #2 30410AND R7,R12,#3:MOV R7,R7,LSL #1 30420MOV R14,#3 30430LDRB R0,[R2]:BIC R0,R0,R14,LSL R7:ORR R0,R0,R3,LSL R7:STRB R0,[R2] 30440ADD R12,R12,R1 30450] 30460WHEN"R" 30470[OPT Z 30480ADD R10,R10,R8 30490CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 30500CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 30510CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 30520STMFD SP !,{R8,R9,R10} 30530MVN R2,#0 30540MOV R3,#3 30550.srch ADD R14,R3,R3,LSL #1 30560ADD R14,R7,R14,LSL #2 30570LDMIA R14,{R8,R9,R10} 30580SUBS R8,R4,R8 30590RSBMI R8,R8,#0 30600SUBS R9,R5,R9 30610RSBMI R9,R9,#0 30620SUBS R10,R6,R10 30630RSBMI R10,R10,#0 30640MOV R14,R8,LSR #bits/2 30650MUL R8,R14,R14 30660MOV R14,R9,LSR #bits/2 30670MUL R9,R14,R14 30680MOV R14,R10,LSR #bits/2 30690MUL R10,R14,R14 30700ADD R9,R9,R9,LSL #2 30710ADD R8,R8,R8,LSL #1 30720ADD R14,R8,R9,LSL #1 30730ADD R14,R14,R10 30740CMP R14,R2 30750MOVCC R2,R14 30760MOVCC R0,R3 30770SUBS R3,R3,#1 30780BPL srch 30790LDMFD SP !,{R8,R9,R10} 30800ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2 30810LDR R2,[R3],#4:SUB R4,R4,R2 30820LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3 30830MOV R3,R0 30840MOV R2,R12,LSR #2 30850AND R7,R12,#3:MOV R7,R7,LSL #1 30860MOV R14,#3 30870LDRB R0,[R2]:BIC R0,R0,R14,LSL R7:ORR R0,R0,R3,LSL R7:STRB R0,[R2] 30880ADD R12,R12,R1 30890] 30900OTHERWISE 30910[OPT Z 30920CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 30930RSB R3,R4,R4,LSL #2:ADD R3,R3,#F>>1:MOV R3,R3,LSR#bits 30940LDR R2,[R7,R3,LSL #2] 30950SUB R4,R4,R2 30960MOV R2,R12,LSR #2 30970AND R5,R12,#3:MOV R5,R5,LSL #1 30980MOV R6,#3 30990LDRB R0,[R2]:BIC R0,R0,R6,LSL R5:ORR R0,R0,R3,LSL R5:STRB R0,[R2] 31000ADD R12,R12,R1 31010] 31020ENDCASE 31030IFm$="C" ORm$="R" THEN 31040IFdither% THEN 31050[OPT Z 31060ADD R0,R11,#4 31070ADD R2,R4,R4,LSL #1 31080LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 31090STR R3,[R11,-R8] 31100ADD R2,R4,R4,LSL #2 31110LDR R3,[R11]:ADD R3,R3,R2,ASR #4 31120STR R3,[R11] 31130MOV R3,R4,ASR #4 31140STR R3,[R11,R8]! 31150RSB R2,R4,R4,LSL #3 31160LDR R4,[R10] 31170ADD R4,R4,R2,ASR #4 31180ADD R2,R5,R5,LSL #1 31190LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 31200STR R3,[R0,-R8] 31210MOV R3,R5,ASR #4 31220STR R3,[R0,R8] 31230ADD R2,R5,R5,LSL #2 31240LDR R3,[R0]:ADD R3,R3,R2,ASR #4 31250STR R3,[R0],#4 31260RSB R2,R5,R5,LSL #3 31270LDR R5,[R10,#4] 31280ADD R5,R5,R2,ASR #4 31290ADD R2,R6,R6,LSL #1 31300LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 31310STR R3,[R0,-R8] 31320ADD R2,R6,R6,LSL #2 31330LDR R3,[R0]:ADD R3,R3,R2,ASR #4 31340STR R3,[R0] 31350MOV R3,R6,ASR #4 31360STR R3,[R0,R8] 31370RSB R2,R6,R6,LSL #3 31380LDR R6,[R10,#8] 31390ADD R6,R6,R2,ASR #4 31400] 31410ELSE 31420[OPT Z 31430LDMIA R10,{R4,R5,R6} 31440] 31450ENDIF 31460ELSE 31470IFdither% THEN 31480[OPT Z 31490ADD R2,R4,R4,LSL #1 31500LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 31510STR R3,[R11,-R8] 31520ADD R2,R4,R4,LSL #2 31530LDR R3,[R11]:ADD R3,R3,R2,ASR #4 31540STR R3,[R11] 31550MOV R3,R4,ASR #4 31560STR R3,[R11,R8]! 31570RSB R2,R4,R4,LSL #3 31580LDR R4,[R10],R8 31590ADD R4,R4,R2,ASR #4 31600] 31610ELSE 31620[OPT Z 31630LDR R4,[R10],R8 31640] 31650ENDIF 31660ENDIF 31670[OPT Z 31680SUBS R9,R9,#1:BNE fsloop 31690LDMFD SP !,{PC}^ 31700] 31710WHEN 1 31720CASE m$ OF 31730WHEN"C" 31740[OPT Z 31750.divtable EQUD 0 31760EQUD (1-black%/256*2)/16*F 31770EQUD (2-black%/256*4)/16*F 31780EQUD (3-black%/256*5)/16*F 31790EQUD (4-black%/256*6)/16*F 31800EQUD (5-black%/256*7)/16*F 31810EQUD (6-black%/256*8)/16*F 31820EQUD (7-black%/256*8)/16*F 31830EQUD (8-black%/256*8)/16*F 31840EQUD (9-black%/256*8)/16*F 31850EQUD (10-black%/256*8)/16*F 31860EQUD (11-black%/256*7)/16*F 31870EQUD (12-black%/256*6)/16*F 31880EQUD (13-black%/256*5)/16*F 31890EQUD (14-black%/256*4)/16*F 31900EQUD (15-black%/256*2)/16*F 31910EQUD F 31920.evenrow_gard DCD even_gard 31930.oddrow_gard DCD odd_gard 31940.rowinc DCD 0 31950.fs% 31960STMFD SP !,{R14} 31970LDR R1,[R9,#5*8]:LDR R1,[R1] 31980LDR R10,[R9,#4*8] 31990LDR R11,[R9,#3*8] 32000LDR R12,[R9,#2*8] 32010LDR R12,[R12] 32020LDR R8,[R9,#8] 32030LDR R8,[R8] 32040LDR R9,[R9] 32050LDR R9,[R9] 32060LDR R4,[R10],R8 32070TEQ R8,#0 32080LDRPL R6,evenrow_gard 32090LDRMI R6,oddrow_gard 32100MOV R1,R1,LSL #1 32110LDR R7,rowinc 32120ADR R14,divtable 32130.fsloop 32140CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 32150ADD R5,R4,#F>>5 32160MOVS R5,R5,LSR #bits-4 32170LDRNE R0,[R14,R5,LSL #2] 32180SUBNE R4,R4,R0 32190] 32200IFdither% THEN 32210[OPT Z 32220ADD R2,R4,R4,LSL #1 32230LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 32240STR R3,[R11,-R8] 32250ADD R2,R4,R4,LSL #2 32260LDR R3,[R11]:ADD R3,R3,R2,ASR #4 32270STR R3,[R11] 32280MOV R3,R4,ASR #4 32290STR R3,[R11,R8]! 32300RSB R2,R4,R4,LSL #3 32310LDR R4,[R10],R8 32320ADDS R4,R4,R2,ASR #4 32330] 32340ELSE 32350[OPT Z 32360LDR R4,[R10],R8 32370] 32380ENDIF 32390[OPT Z 32400CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 32410ADD R3,R4,#F>>5 32420MOVS R3,R3,LSR #bits-4 32430LDRNE R0,[R14,R3,LSL #2] 32440SUBNE R4,R4,R0 32450ORR R5,R5,R3,LSL #5:LDR R3,[R6,R5,LSL #2] 32460MOV R2,R12,LSR #1:STRB R3,[R2],R7:MOV R3,R3,LSR #8:STRB R3,[R2],R7 32470MOV R3,R3,LSR #8:STRB R3,[R2],R7:MOV R3,R3,LSR #8:STRB R3,[R2] 32480ADD R12,R12,R1 32490] 32500IFdither% THEN 32510[OPT Z 32520ADD R2,R4,R4,LSL #1 32530LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 32540STR R3,[R11,-R8] 32550ADD R2,R4,R4,LSL #2 32560LDR R3,[R11]:ADD R3,R3,R2,ASR #4 32570STR R3,[R11] 32580MOV R3,R4,ASR #4 32590STR R3,[R11,R8]! 32600RSB R2,R4,R4,LSL #3 32610LDR R4,[R10],R8 32620ADD R4,R4,R2,ASR #4 32630] 32640ELSE 32650[OPT Z 32660LDR R4,[R10],R8 32670] 32680ENDIF 32690[OPT Z 32700SUBS R9,R9,#2:BNE fsloop 32710LDMFD SP !,{PC}^ 32720] 32730WHEN"T" 32740[OPT Z 32750.divtable EQUD 0 32760EQUD (1-black%/256*2)/9*F 32770EQUD (2-black%/256*4)/9*F 32780EQUD (3-black%/256*5)/9*F 32790EQUD (4-black%/256*6)/9*F 32800EQUD (5-black%/256*6)/9*F 32810EQUD (6-black%/256*5)/9*F 32820EQUD (7-black%/256*4)/9*F 32830EQUD (8-black%/256*2)/9*F 32840EQUD F 32850.evenrow_gard DCD even_gard 32860.oddrow_gard DCD odd_gard 32870.rowinc DCD 0 32880.fs% 32890STMFD SP !,{R14} 32900LDR R1,[R9,#5*8]:LDR R1,[R1] 32910LDR R10,[R9,#4*8] 32920LDR R11,[R9,#3*8] 32930LDR R12,[R9,#2*8] 32940LDR R12,[R12] 32950LDR R8,[R9,#8] 32960LDR R8,[R8] 32970LDR R9,[R9] 32980LDR R9,[R9] 32990LDR R4,[R10],R8 33000TEQ R8,#0 33010LDRPL R6,evenrow_gard 33020LDRMI R6,oddrow_gard 33030MOV R1,R1,LSL #1 33040LDR R7,rowinc 33050ADR R14,divtable 33060.fsloop 33070CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 33080ADD R5,R4,#F>>4 33090ADD R5,R5,R5,LSL #3 33100MOVS R5,R5,LSR #bits 33110LDRNE R0,[R14,R5,LSL #2] 33120SUBNE R4,R4,R0 33130] 33140IFdither% THEN 33150[OPT Z 33160ADD R2,R4,R4,LSL #1 33170LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 33180STR R3,[R11,-R8] 33190ADD R2,R4,R4,LSL #2 33200LDR R3,[R11]:ADD R3,R3,R2,ASR #4 33210STR R3,[R11] 33220MOV R3,R4,ASR #4 33230STR R3,[R11,R8]! 33240RSB R2,R4,R4,LSL #3 33250LDR R4,[R10],R8 33260ADDS R4,R4,R2,ASR #4 33270] 33280ELSE 33290[OPT Z 33300LDR R4,[R10],R8 33310] 33320ENDIF 33330[OPT Z 33340CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 33350ADD R3,R4,#F>>4 33360ADD R3,R3,R3,LSL #3 33370MOVS R3,R3,LSR #bits 33380LDRNE R0,[R14,R3,LSL #2] 33390SUBNE R4,R4,R0 33400ORR R5,R5,R3,LSL #4:LDR R5,[R6,R5,LSL #2] 33410MOV R2,R12,LSR #1 33420AND R3,R5,#&3F 33430STRB R3,[R2],R7 33440MOV R3,R5,LSR #6:AND R3,R3,#&3F 33450STRB R3,[R2],R7 33460MOV R3,R5,LSR #12:STRB R3,[R2] 33470ADD R12,R12,R1 33480] 33490IFdither% THEN 33500[OPT Z 33510ADD R2,R4,R4,LSL #1 33520LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 33530STR R3,[R11,-R8] 33540ADD R2,R4,R4,LSL #2 33550LDR R3,[R11]:ADD R3,R3,R2,ASR #4 33560STR R3,[R11] 33570MOV R3,R4,ASR #4 33580STR R3,[R11,R8]! 33590RSB R2,R4,R4,LSL #3 33600LDR R4,[R10],R8 33610ADD R4,R4,R2,ASR #4 33620] 33630ELSE 33640[OPT Z 33650LDR R4,[R10],R8 33660] 33670ENDIF 33680[OPT Z 33690SUBS R9,R9,#2:BNE fsloop 33700LDMFD SP !,{PC}^ 33710] 33720WHEN"D" 33730[OPT Z 33740.divtable EQUD 0 33750EQUD (1-black%/256*2)/4*F 33760EQUD (2-black%/256*4)/4*F 33770EQUD (3-black%/256*2)/4*F 33780EQUD F 33790.evenrow_gard DCD even_gard 33800.oddrow_gard DCD odd_gard 33810.rowinc DCD 0 33820.fs% 33830STMFD SP !,{R14} 33840LDR R1,[R9,#5*8]:LDR R1,[R1] 33850LDR R10,[R9,#4*8] 33860LDR R11,[R9,#3*8] 33870LDR R12,[R9,#2*8] 33880LDR R12,[R12] 33890LDR R8,[R9,#8] 33900LDR R8,[R8] 33910LDR R9,[R9] 33920LDR R9,[R9] 33930LDR R4,[R10],R8 33940TEQ R8,#0 33950LDRPL R6,evenrow_gard 33960LDRMI R6,oddrow_gard 33970MOV R1,R1,LSL #1 33980LDR R7,rowinc 33990ADR R14,divtable 34000.fsloop 34010CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 34020ADD R5,R4,#F>>3 34030MOVS R5,R5,LSR #bits-2 34040LDRNE R0,[R14,R5,LSL #2] 34050SUBNE R4,R4,R0 34060] 34070IFdither% THEN 34080[OPT Z 34090ADD R2,R4,R4,LSL #1 34100LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 34110STR R3,[R11,-R8] 34120ADD R2,R4,R4,LSL #2 34130LDR R3,[R11]:ADD R3,R3,R2,ASR #4 34140STR R3,[R11] 34150MOV R3,R4,ASR #4 34160STR R3,[R11,R8]! 34170RSB R2,R4,R4,LSL #3 34180LDR R4,[R10],R8 34190ADDS R4,R4,R2,ASR #4 34200] 34210ELSE 34220[OPT Z 34230LDR R4,[R10],R8 34240] 34250ENDIF 34260[OPT Z 34270CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 34280ADD R3,R4,#F>>3 34290MOVS R3,R3,LSR #bits-2 34300LDRNE R0,[R14,R3,LSL #2] 34310SUBNE R4,R4,R0 34320ORR R5,R5,R3,LSL #3:LDRB R5,[R6,R5] 34330MOV R2,R12,LSR #2 34340TST R12,#2 34350AND R3,R5,#&F:LDRB R0,[R2] 34360ANDEQ R0,R0,#&F0:ORREQ R0,R0,R3 34370ANDNE R0,R0,#&0F:ORRNE R0,R0,R3,LSL #4 34380STRB R0,[R2],R7 34390MOV R3,R5,LSR #4:LDRB R0,[R2] 34400ANDEQ R0,R0,#&F0:ORREQ R0,R0,R3 34410ANDNE R0,R0,#&0F:ORRNE R0,R0,R3,LSL #4 34420STRB R0,[R2] 34430ADD R12,R12,R1 34440] 34450IFdither% THEN 34460[OPT Z 34470ADD R2,R4,R4,LSL #1 34480LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 34490STR R3,[R11,-R8] 34500ADD R2,R4,R4,LSL #2 34510LDR R3,[R11]:ADD R3,R3,R2,ASR #4 34520STR R3,[R11] 34530MOV R3,R4,ASR #4 34540STR R3,[R11,R8]! 34550RSB R2,R4,R4,LSL #3 34560LDR R4,[R10],R8 34570ADD R4,R4,R2,ASR #4 34580] 34590ELSE 34600[OPT Z 34610LDR R4,[R10],R8 34620] 34630ENDIF 34640[OPT Z 34650SUBS R9,R9,#2:BNE fsloop 34660LDMFD SP !,{PC}^ 34670] 34680OTHERWISE 34690[OPT Z 34700.fs% 34710STMFD SP !,{R14} 34720LDR R1,[R9,#5*8]:LDR R1,[R1] 34730LDR R10,[R9,#4*8] 34740LDR R11,[R9,#3*8] 34750LDR R12,[R9,#2*8] 34760LDR R12,[R12] 34770LDR R8,[R9,#8] 34780LDR R8,[R8] 34790LDR R9,[R9] 34800LDR R9,[R9] 34810LDR R4,[R10],R8 34820MOV R7,#1 34830.fsloop 34840CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 34850] 34860IFblack% THEN 34870[OPT Z 34880MOV R2,R12,LSR #3 34890AND R5,R12,#7:MOV R6,#1 34900LDRB R0,[R2,#-(x%+7>>3)] 34910SUB R3,R4,#F 34920CMP R7,#0 34930ADDNE R4,R4,#black%<<(bits-8) 34940ADDEQ R3,R3,#black%<<(bits-8) 34950TST R0,R6,LSL R5 34960ADDNE R4,R4,#black%<<(bits-8) 34970ADDEQ R3,R3,#black%<<(bits-8) 34980MOVS R0,R3:RSBMI R0,R3,#0 34990CMP R4,R0 35000MOVCC R3,#0 35010MOVCS R4,R3:MOVCS R3,#1 35020MOV R7,R3 35030] 35040ELSE 35050[OPT Z 35060ADD R3,R4,#F>>1:MOV R3,R3,LSR #bits 35070SUB R4,R4,R3,LSL #bits 35080MOV R2,R12,LSR #3 35090AND R5,R12,#7:MOV R6,#1 35100] 35110ENDIF 35120[OPT Z 35130LDRB R0,[R2]:BIC R0,R0,R6,LSL R5:ORR R0,R0,R3,LSL R5 35140STRB R0,[R2] 35150ADD R12,R12,R1 35160] 35170IFdither% THEN 35180[OPT Z 35190ADD R2,R4,R4,LSL #1 35200LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 35210STR R3,[R11,-R8] 35220ADD R2,R4,R4,LSL #2 35230LDR R3,[R11]:ADD R3,R3,R2,ASR #4 35240STR R3,[R11] 35250MOV R3,R4,ASR #4 35260STR R3,[R11,R8]! 35270RSB R2,R4,R4,LSL #3 35280LDR R4,[R10],R8 35290ADD R4,R4,R2,ASR #4 35300] 35310ELSE 35320[OPT Z 35330LDR R4,[R10],R8 35340] 35350ENDIF 35360[OPT Z 35370SUBS R9,R9,#1:BNE fsloop 35380LDMFD SP !,{PC}^ 35390] 35400ENDCASE 35410ENDCASE 35420[OPT Z 35430.sxloc DCD sx% 35440] 35450CASE col OF 35460WHEN 0 35470IFinput<=8 THEN 35480[OPT Z 35490.mappix% 35500LDR R0,sxloc 35510LDR R1,[R9]:LDR R1,[R1] 35520LDR R2,[R9,#3*8] 35530LDR R5,[R9,#4*8] 35540MOV R8,#0 35550.mappixlp 35560LDRB R6,[R1],#step24 35570] 35580ENDIF 35590CASE input OF 35600WHEN 8 35610IFham THEN 35620[OPT Z 35630ADR R9,ltable 35640MOVS R7,R6,LSR #4:AND R6,R6,#15 35650LDREQ R10,[R2,R6,LSL #2]:MOVEQ R11,R10:MOVEQ R12,R10 35660CMP R7,#1:LDREQ R12,[R9,R6,LSL #2] 35670CMP R7,#2:LDREQ R10,[R9,R6,LSL #2] 35680CMP R7,#3:LDREQ R11,[R9,R6,LSL #2] 35690ADD R3,R10,R11 35700ADD R3,R3,R12 35710MOV R3,R3,LSR #2 35720STMIA R5!,{R3} 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,R8 35860AND R6,R6,#255 35870MOV R8,R6 35880] 35890ENDIF 35900[OPT Z 35910LDR R7,[R2,R6,LSL #2]:STR R7,[R5],#4 35920SUBS R0,R0,#1:BNE mappixlp 35930MOVS PC,R14 35940] 35950ENDIF 35960WHEN 4 35970IFbigendianbits THEN 35980[OPT Z 35990MOV R10,R6,LSR #4 36000LDR R7,[R2,R10,LSL #2] 36010AND R10,R6,#&F 36020] 36030ELSE 36040[OPT Z 36050AND R10,R6,#&F 36060LDR R7,[R2,R10,LSL #2] 36070MOV R10,R6,LSR #4 36080] 36090ENDIF 36100[OPT Z 36110LDR R8,[R2,R10,LSL #2]:STMIA R5!,{R7,R8} 36120SUBS R0,R0,#2:BHI mappixlp 36130MOVS PC,R14 36140] 36150WHEN 2 36160IFbigendianbits THEN 36170[OPT Z 36180MOV R10,R6,LSR #6 36190LDR R7,[R2,R10,LSL #2] 36200AND R10,R6,#&30 36210LDR R8,[R2,R10,LSR #2] 36220AND R10,R6,#&C 36230LDR R9,[R2,R10] 36240AND R10,R6,#&3 36250] 36260ELSE 36270[OPT Z 36280AND R10,R6,#&3 36290LDR R7,[R2,R10,LSL #2] 36300AND R10,R6,#&C 36310LDR R8,[R2,R10] 36320AND R10,R6,#&30 36330LDR R9,[R2,R10,LSR #2] 36340MOV R10,R6,LSR #6 36350] 36360ENDIF 36370[OPT Z 36380LDR R10,[R2,R10,LSL #2]:STMIA R5!,{R7,R8,R9,R10} 36390SUBS R0,R0,#4:BHI mappixlp 36400MOVS PC,R14 36410] 36420WHEN 1 36430IFbigendianbits THEN 36440[OPT Z 36450AND R10,R6,#&80 36460LDR R7,[R2,R10,LSR #5] 36470AND R10,R6,#&40 36480LDR R8,[R2,R10,LSR #4] 36490AND R10,R6,#&20 36500LDR R9,[R2,R10,LSR #3] 36510AND R10,R6,#&10 36520LDR R10,[R2,R10,LSR #2]:STMIA R5!,{R7,R8,R9,R10} 36530AND R10,R6,#&8 36540LDR R7,[R2,R10,LSR #1] 36550AND R10,R6,#&4 36560LDR R8,[R2,R10] 36570AND R10,R6,#&2 36580LDR R9,[R2,R10,LSL #1] 36590AND R10,R6,#&1 36600] 36610ELSE 36620[OPT Z 36630AND R10,R6,#&1 36640LDR R7,[R2,R10,LSL #2] 36650AND R10,R6,#&2 36660LDR R8,[R2,R10,LSL #1] 36670AND R10,R6,#&4 36680LDR R9,[R2,R10] 36690AND R10,R6,#&8 36700LDR R10,[R2,R10,LSR #1]:STMIA R5!,{R7,R8,R9,R10} 36710AND R10,R6,#&10 36720LDR R7,[R2,R10,LSR #2] 36730AND R10,R6,#&20 36740LDR R8,[R2,R10,LSR #3] 36750AND R10,R6,#&40 36760LDR R9,[R2,R10,LSR #4] 36770MOV R10,R6,LSR #7 36780] 36790ENDIF 36800[OPT Z 36810LDR R10,[R2,R10,LSL #2]:STMIA R5!,{R7,R8,R9,R10} 36820SUBS R0,R0,#8:BHI mappixlp 36830MOVS PC,R14 36840] 36850WHEN 16 36860[OPT Z 36870.mappix% 36880LDR R0,sxloc 36890LDR R1,[R9]:LDR R1,[R1] 36900LDR R2,[R9,#8]:LDR R2,[R2] 36910LDR R3,[R9,#4*8] 36920LDR R4,[R9,#3*8] 36930LDR R5,[R9,#2*8] 36940LDR R6,[R9,#5*8] 36950LDR R7,[R9,#6*8] 36960LDR R8,[R9,#7*8] 36970CMP R1,R2 36980ADDEQ R2,R2,#1 36990.mappixlp 37000LDRB R9,[R1],#step24:LDRB R10,[R2],#step24 37010LDR R9,[R6,R9,LSL #2]:LDR R10,[R7,R10,LSL #2]:ORR R9,R9,R10 37020AND R10,R9,#255:LDR R10,[R3,R10,LSL #2] 37030MOV R11,R9,LSR #8:AND R11,R11,#255:LDR R11,[R4,R11,LSL #2] 37040MOV R12,R9,LSR #16:LDR R12,[R5,R12,LSL #2] 37050ADD R10,R10,R11:ADD R10,R10,R12:STMIA R8!,{R10} 37060SUBS R0,R0,#1:BNE mappixlp 37070MOVS PC,R14 37080] 37090WHEN 24 37100[OPT Z 37110.mappix% 37120LDR R0,sxloc 37130LDR R1,[R9,#2*8]:LDR R1,[R1] 37140LDR R2,[R9,#8]:LDR R2,[R2] 37150LDR R3,[R9]:LDR R3,[R3] 37160LDR R4,[R9,#5*8] 37170LDR R5,[R9,#4*8] 37180LDR R6,[R9,#3*8] 37190LDR R7,[R9,#6*8] 37200STMFD SP !,{R14} 37210MOV r11,#0:MOV R12,#0:MOV R14,#0 37220.mappixlp 37230LDRB R8,[R1],#step24:LDRB R9,[R2],#step24:LDRB R10,[R3],#step24 37240] 37250IFhpredict%=2 THEN 37260[OPT Z 37270ADD r8,r8,r11 37280AND r8,r8,#255 37290MOV r11,r8 37300ADD r9,r9,r12 37310AND r9,r9,#255 37320MOV r12,r9 37330ADD r10,r10,r14 37340AND r10,r10,#255 37350MOV r14,r10 37360] 37370ENDIF 37380[OPT Z 37390LDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2] 37400ADD R8,R8,R9:ADD R8,R8,R10:STR R8,[R7],#4 37410SUBS R0,R0,#1:BNE mappixlp 37420LDMFD SP !,{PC}^ 37430] 37440WHEN 48 37450[OPT Z 37460.mappix% 37470LDR R0,sxloc 37480LDR R1,[R9,#2*8]:LDR R1,[R1] 37490LDR R2,[R9,#8]:LDR R2,[R2] 37500LDR R3,[R9]:LDR R3,[R3] 37510LDR R4,[R9,#5*8] 37520LDR R5,[R9,#4*8] 37530LDR R6,[R9,#3*8] 37540LDR R7,[R9,#6*8] 37550STMFD SP !,{R14} 37560MOV r11,#colourindex AND 255:ADD r11,r11,#colourindex AND &ff00 37570.mappixlp 37580LDR R8,[R1],#step24:LDR R9,[R2],#step24:LDR R10,[R3],#step24 37590AND r8,r8,r11:AND r9,r9,r11:AND r10,r10,r11 37600LDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2] 37610ADD R8,R8,R9:ADD R8,R8,R10:STR R8,[R7],#4 37620SUBS R0,R0,#1:BNE mappixlp 37630LDMFD SP !,{PC}^ 37640] 37650WHEN 411 37660[OPT Z 37670.mappix% 37680LDR R0,sxloc 37690LDR R1,[R9]:LDR R1,[R1] 37700LDR R4,[R9,#1*8] 37710LDR R7,[R9,#8*8] 37720.mappixlp 37730LDRB R8,[R1],#2 37740LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4 37750SUBS R0,R0,#1:BNE mappixlp 37760MOVS PC,R14 37770] 37780WHEN 422 37790[OPT Z 37800.mappix% 37810LDR R0,sxloc 37820LDR R1,[R9]:LDR R1,[R1] 37830ADD R1,R1,#1 37840LDR R4,[R9,#1*8] 37850LDR R7,[R9,#8*8] 37860.mappixlp 37870LDRB R8,[R1],#2 37880LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4 37890SUBS R0,R0,#1:BNE mappixlp 37900MOVS PC,R14 37910] 37920WHEN 555 37930[OPT Z 37940.mappix% 37950LDR R0,sxloc 37960LDR R1,[R9]:LDR R1,[R1] 37970ADD R1,R1,#1 37980LDR R4,[R9,#1*8] 37990LDR R7,[R9,#8*8] 38000.mappixlp 38010LDRB R8,[R1],#2 38020AND R8,R8,#ymax% 38030LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4 38040SUBS R0,R0,#1:BNE mappixlp 38050MOVS PC,R14 38060] 38070ENDCASE 38080IFxmul%=2 AND xdiv%=1 THEN 38090[OPT Z 38110.xsample% 38120LDR R0,[R9]:LDR R0,[R0] 38130LDR R1,[R9,#8] 38140LDR R2,[R9,#2*8] 38150SUBS R0,R0,#2 38160BEQ xdonediv 38170BMI xdonediv 38180.xsamplelp 38190LDMIA R1,{R5,R6} 38200ADD R6,R6,R5 38210MOV R6,R6,LSR #1 38220STMIA R2!,{R5,R6} 38230ADD R1,R1,#4 38240SUBS R0,R0,#2:BGT xsamplelp 38250.xdonediv 38260LDMIA R1,{R5} 38270MOV R6,R5 38280STMIA R2!,{R5,R6} 38290MOVS PC,R14 38300] 38310ELSE 38320[OPT Z 38340.xsample% 38350LDR R0,[R9]:LDR R0,[R0] 38360LDR R1,[R9,#8] 38370LDR R2,[R9,#2*8] 38380LDR R3,[R9,#3*8]:LDR R3,[R3] 38390LDR R4,[R9,#4*8]:LDR R4,[R4] 38400MOV R11,R4 38410.xsamplelp 38420LDMIA R1,{R5} 38430SUBS R11,R11,#1:MOVEQ R11,R4:ADDEQ R1,R1,#4 38440SUBS R12,R3,#1 38450BEQ xdonediv 38460.xdivlp 38470CMP R12,R11 38480BCC xdivlp2 38490LDMIA R1!,{R8}:MLA R5,R8,R11,R5 38500SUBS R12,R12,R11:MOV R11,R4 38510BNE xdivlp 38520B xdonediv 38530.xdivlp2 38540LDMIA R1,{R8} 38550SUBS R11,R11,#1:MOVEQ R11,R4:ADDEQ R1,R1,#4 38560ADD R5,R5,R8 38570SUBS R12,R12,#1:BNE xdivlp 38580.xdonediv 38590STMIA R2!,{R5} 38600SUBS R0,R0,#1:BPL xsamplelp 38610MOVS PC,R14 38620] 38630ENDIF 38640WHEN 2 38650IFinput<=8 THEN 38660[OPT Z 38670.mappix% 38680LDR R0,sxloc 38690LDR R1,[R9]:LDR R1,[R1] 38700LDR R2,[R9,#3*8] 38710LDR R3,[R9,#2*8] 38720LDR R4,[R9,#8] 38730LDR R5,[R9,#4*8] 38740MOV R10,#0 38750.mappixlp 38760LDRB R6,[R1],#step24 38770] 38780ENDIF 38790CASE input OF 38800WHEN 8 38810IFham THEN 38820[OPT Z 38830ADR R9,ltable 38840MOVS R7,R6,LSR #4:AND R6,R6,#15 38850LDREQ R10,[R2,R6,LSL #2]:LDREQ R11,[R3,R6,LSL #2]:LDREQ R12,[R4,R6,LSL #2] 38860CMP R7,#1:LDREQ R12,[R9,R6,LSL #2] 38870CMP R7,#2:LDREQ R10,[R9,R6,LSL #2] 38880CMP R7,#3:LDREQ R11,[R9,R6,LSL #2] 38890STMIA R5!,{R10,R11,R12} 38900SUBS R0,R0,#1:BNE mappixlp 38910MOVS PC,R14 38920.ltable 38930] 38940FORI%=0TO15 38950[OPT Z 38960EQUD I%/15*F 38970] 38980NEXT 38990ELSE 39000IFhpredict%=2 THEN 39010[OPT Z 39020ADD R6,R6,R10 39030AND R6,R6,#255 39040MOV R10,R6 39050] 39060ENDIF 39070[OPT Z 39080LDR R7,[R2,R6,LSL #2]:LDR R8,[R3,R6,LSL #2]:LDR R9,[R4,R6,LSL #2] 39090STMIA R5!,{R7,R8,R9} 39100SUBS R0,R0,#1:BNE mappixlp 39110MOVS PC,R14 39120] 39130ENDIF 39140WHEN 4 39150IFbigendianbits THEN 39160[OPT Z 39170MOV R10,R6,LSR #4 39180LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 39190STMIA R5!,{R7,R8,R9} 39200AND R10,R6,#&F 39210] 39220ELSE 39230[OPT Z 39240AND R10,R6,#&F 39250LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 39260STMIA R5!,{R7,R8,R9} 39270MOV R10,R6,LSR #4 39280] 39290ENDIF 39300[OPT Z 39310LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 39320STMIA R5!,{R7,R8,R9} 39330SUBS R0,R0,#2:BHI mappixlp 39340MOVS PC,R14 39350] 39360WHEN 2 39370IFbigendianbits THEN 39380[OPT Z 39390MOV R10,R6,LSR #6 39400LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 39410STMIA R5!,{R7,R8,R9} 39420AND R10,R6,#&30 39430LDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2] 39440STMIA R5!,{R7,R8,R9} 39450AND R10,R6,#&C 39460LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10] 39470STMIA R5!,{R7,R8,R9} 39480AND R10,R6,#&3 39490] 39500ELSE 39510[OPT Z 39520AND R10,R6,#&3 39530LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 39540STMIA R5!,{R7,R8,R9} 39550AND R10,R6,#&C 39560LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10] 39570STMIA R5!,{R7,R8,R9} 39580AND R10,R6,#&30 39590LDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2] 39600STMIA R5!,{R7,R8,R9} 39610MOV R10,R6,LSR #6 39620] 39630ENDIF 39640[OPT Z 39650LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 39660STMIA R5!,{R7,R8,R9} 39670SUBS R0,R0,#4:BHI mappixlp 39680MOVS PC,R14 39690] 39700WHEN 1 39710IFbigendianbits THEN 39720[OPT Z 39730AND R10,R6,#&80 39740LDR R7,[R2,R10,LSR #5]:LDR R8,[R3,R10,LSR #5]:LDR R9,[R4,R10,LSR #5] 39750STMIA R5!,{R7,R8,R9} 39760AND R10,R6,#&40 39770LDR R7,[R2,R10,LSR #4]:LDR R8,[R3,R10,LSR #4]:LDR R9,[R4,R10,LSR #4] 39780STMIA R5!,{R7,R8,R9} 39790AND R10,R6,#&20 39800LDR R7,[R2,R10,LSR #3]:LDR R8,[R3,R10,LSR #3]:LDR R9,[R4,R10,LSR #3] 39810STMIA R5!,{R7,R8,R9} 39820AND R10,R6,#&10 39830LDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2] 39840STMIA R5!,{R7,R8,R9} 39850AND R10,R6,#&8 39860LDR R7,[R2,R10,LSR #1]:LDR R8,[R3,R10,LSR #1]:LDR R9,[R4,R10,LSR #1] 39870STMIA R5!,{R7,R8,R9} 39880AND R10,R6,#&4 39890LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10] 39900STMIA R5!,{R7,R8,R9} 39910AND R10,R6,#&2 39920LDR R7,[R2,R10,LSL #1]:LDR R8,[R3,R10,LSL #1]:LDR R9,[R4,R10,LSL #1] 39930STMIA R5!,{R7,R8,R9} 39940AND R10,R6,#&1 39950] 39960ELSE 39970[OPT Z 39980AND R10,R6,#&1 39990LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 40000STMIA R5!,{R7,R8,R9} 40010AND R10,R6,#&2 40020LDR R7,[R2,R10,LSL #1]:LDR R8,[R3,R10,LSL #1]:LDR R9,[R4,R10,LSL #1] 40030STMIA R5!,{R7,R8,R9} 40040AND R10,R6,#&4 40050LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10] 40060STMIA R5!,{R7,R8,R9} 40070AND R10,R6,#&8 40080LDR R7,[R2,R10,LSR #1]:LDR R8,[R3,R10,LSR #1]:LDR R9,[R4,R10,LSR #1] 40090STMIA R5!,{R7,R8,R9} 40100AND R10,R6,#&10 40110LDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2] 40120STMIA R5!,{R7,R8,R9} 40130AND R10,R6,#&20 40140LDR R7,[R2,R10,LSR #3]:LDR R8,[R3,R10,LSR #3]:LDR R9,[R4,R10,LSR #3] 40150STMIA R5!,{R7,R8,R9} 40160AND R10,R6,#&40 40170LDR R7,[R2,R10,LSR #4]:LDR R8,[R3,R10,LSR #4]:LDR R9,[R4,R10,LSR #4] 40180STMIA R5!,{R7,R8,R9} 40190MOV R10,R6,LSR #7 40200] 40210ENDIF 40220[OPT Z 40230LDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2] 40240STMIA R5!,{R7,R8,R9} 40250SUBS R0,R0,#8:BHI mappixlp 40260MOVS PC,R14 40270] 40280WHEN 16 40290[OPT Z 40300.mappix% 40310LDR R0,sxloc 40320LDR R1,[R9]:LDR R1,[R1] 40330LDR R2,[R9,#8]:LDR R2,[R2] 40340LDR R3,[R9,#4*8] 40350LDR R4,[R9,#3*8] 40360LDR R5,[R9,#2*8] 40370LDR R6,[R9,#5*8] 40380LDR R7,[R9,#6*8] 40390LDR R8,[R9,#7*8] 40400CMP R1,R2 40410ADDEQ R2,R2,#1 40420.mappixlp 40430LDRB R9,[R1],#step24:LDRB R10,[R2],#step24 40440LDR R9,[R6,R9,LSL #2]:LDR R10,[R7,R10,LSL #2]:ORR R9,R9,R10 40450AND R10,R9,#255:LDR R10,[R3,R10,LSL #2] 40460MOV R11,R9,LSR #8:AND R11,R11,#255:LDR R11,[R4,R11,LSL #2] 40470MOV R12,R9,LSR #16:LDR R12,[R5,R12,LSL #2] 40480STMIA R8!,{R10,R11,R12} 40490SUBS R0,R0,#1:BNE mappixlp 40500MOVS PC,R14 40510] 40520WHEN 24 40530[OPT Z 40540.mappix% 40550LDR R0,sxloc 40560LDR R1,[R9,#2*8]:LDR R1,[R1] 40570LDR R2,[R9,#8]:LDR R2,[R2] 40580LDR R3,[R9]:LDR R3,[R3] 40590LDR R4,[R9,#5*8] 40600LDR R5,[R9,#4*8] 40610LDR R6,[R9,#3*8] 40620LDR R7,[R9,#6*8] 40630STMFD SP !,{R14} 40640MOV r11,#0:MOV R12,#0:MOV R14,#0 40650.mappixlp 40660LDRB R8,[R1],#step24:LDRB R9,[R2],#step24:LDRB R10,[R3],#step24 40670] 40680IFhpredict%=2 THEN 40690[OPT Z 40700ADD r8,r8,r11 40710AND r8,r8,#255 40720MOV r11,r8 40730ADD r9,r9,r12 40740AND r9,r9,#255 40750MOV r12,r9 40760ADD r10,r10,r14 40770AND r10,r10,#255 40780MOV r14,r10 40790] 40800ENDIF 40810[OPT Z 40820LDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2] 40830STMIA R7!,{R8,R9,R10} 40840SUBS R0,R0,#1:BNE mappixlp 40850LDMFD SP !,{PC}^ 40860] 40870WHEN 48 40880[OPT Z 40890.mappix% 40900LDR R0,sxloc 40910LDR R1,[R9,#2*8]:LDR R1,[R1] 40920LDR R2,[R9,#8]:LDR R2,[R2] 40930LDR R3,[R9]:LDR R3,[R3] 40940LDR R4,[R9,#5*8] 40950LDR R5,[R9,#4*8] 40960LDR R6,[R9,#3*8] 40970LDR R7,[R9,#6*8] 40980STMFD SP !,{R14} 40990MOV r11,#colourindex AND 255:ADD r11,r11,#colourindex AND &ff00 41000.mappixlp 41010LDR R8,[R1],#step24:LDR R9,[R2],#step24:LDR R10,[R3],#step24 41020AND r8,r8,r11:AND r9,r9,r11:AND r10,r10,r11 41030LDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2] 41040STMIA R7!,{R8,R9,R10} 41050SUBS R0,R0,#1:BNE mappixlp 41060LDMFD SP !,{PC}^ 41070] 41080WHEN 411 41100[OPT Z 41110.mappix% 41120LDR R0,sxloc 41130LDR R1,[R9]:LDR R1,[R1] 41140LDR R2,[R9,#1*8] 41150LDR R3,[R9,#2*8] 41160LDR R5,[R9,#4*8] 41170LDR R6,[R9,#5*8] 41180LDR R7,[R9,#6*8] 41190LDR R9,[R9,#8*8] 41200STMFD SP !,{R14} 41210.mappixlp 41220LDMIA R1!,{R4,R10} 41230AND R8,R4,#&C000 41240MOV R8,R8,LSR #8 41250AND R14,R4,#&C0000000 41260ORR R8,R8,R14,LSR #16+8+2 41270AND R14,R10,#&C000 41280ORR R8,R8,R14,LSR #8+4 41290ORR R8,R8,R10,LSR #16+8+6 41300AND R11,R4,#&3000 41310MOV R11,R11,LSR #6 41320AND R14,R4,#&30000000 41330ORR R11,R11,R14,LSR #16+6+2 41340AND R14,R10,#&3000 41350ORR R11,R11,R14,LSR #6+4 41360AND R14,R10,#&30000000 41370ORR R11,R11,R14,LSR #16+6+6 41390AND R12,R4,#&FF 41400LDR R12,[R2,R12,LSL #2] 41410LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12 41420MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 41430LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12 41440LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12 41450MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 41460AND R12,R4,#&FF 41470LDR R12,[R2,R12,LSL #2] 41480LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14 41490MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 41510MOV R4,R4,LSR #16 41520AND R12,R4,#&FF 41530LDR R12,[R2,R12,LSL #2] 41540LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12 41550MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 41560LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12 41570LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12 41580MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 41590AND R12,R4,#&FF 41600LDR R12,[R2,R12,LSL #2] 41610LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14 41620MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 41640AND R12,R10,#&FF 41650LDR R12,[R2,R12,LSL #2] 41660LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12 41670MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 41680LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12 41690LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12 41700MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 41710AND R12,R10,#&FF 41720LDR R12,[R2,R12,LSL #2] 41730LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14 41740MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 41760MOV R10,R10,LSR #16 41770AND R12,R10,#&FF 41780LDR R12,[R2,R12,LSL #2] 41790LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12 41800MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 41810LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12 41820LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12 41830MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 41840AND R12,R10,#&FF 41850LDR R12,[R2,R12,LSL #2] 41860LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14 41870MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 41890SUBS R0,R0,#4:BNE mappixlp 41900LDMFD SP !,{PC}^ 41910] 41920WHEN 423 41930[OPT Z 41940.mappix% 41950LDR R0,sxloc 41960LDR R1,[R9]:LDR R1,[R1] 41970LDR R2,[R9,#1*8] 41980LDR R3,[R9,#2*8] 41990LDR R4,[R9,#3*8] 42000LDR R5,[R9,#4*8] 42010LDR R6,[R9,#5*8] 42020LDR R7,[R9,#6*8] 42030LDR R8,[R9,#7*8] 42040LDR R9,[R9,#8*8] 42050STMFD SP !,{R14} 42060.mappixlp 42070LDR R10,[R1],#4 42080AND R11,R10,#&FF00 42090LDR R11,[R2,R11,LSR #6] 42100AND R12,R10,#&FF:LDR R12,[R7,R12,LSL #2]:ADD R14,R12,R11 42110AND R12,R10,#&FF0000:LDR R12,[R8,R12,LSR #14]:ADDS R14,R14,R12 42120MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 42130AND R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11 42140AND R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12 42150MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 42160AND R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADD R14,R12,R11 42170AND R12,R10,#&FF0000:LDR R12,[R4,R12,LSR #14]:ADDS R14,R14,R12 42180MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 42190AND R11,R10,#&FF000000 42200LDR R11,[R2,R11,LSR #22] 42210AND R12,R10,#&FF:LDR R12,[R7,R12,LSL #2]:ADD R14,R12,R11 42220AND R12,R10,#&FF0000:LDR R12,[R8,R12,LSR #14]:ADDS R14,R14,R12 42230MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 42240AND R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11 42250AND R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12 42260MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 42270AND R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADD R14,R12,R11 42280AND R12,R10,#&FF0000:LDR R12,[R4,R12,LSR #14]:ADDS R14,R14,R12 42290MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 42300SUBS R0,R0,#2:BNE mappixlp 42310LDMFD SP !,{PC}^ 42320] 42330WHEN 422 42340[OPT Z 42350.mappix% 42360LDR R0,sxloc 42370LDR R1,[R9]:LDR R1,[R1] 42380LDR R2,[R9,#1*8] 42390LDR R3,[R9,#2*8] 42400LDR R5,[R9,#4*8] 42410LDR R6,[R9,#5*8] 42420LDR R7,[R9,#6*8] 42430LDR R9,[R9,#8*8] 42440STMFD SP !,{R14} 42450.mappixlp 42460LDR R10,[R1],#4 42470AND R11,R10,#&FF00 42480LDR R11,[R2,R11,LSR #6] 42490AND R12,R10,#&FF0000:LDR R12,[R7,R12,LSR #14]:ADDS R14,R12,R11 42500MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 42510AND R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11 42520AND R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12 42530MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 42540AND R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADDS R14,R12,R11 42550MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 42560AND R11,R10,#&FF000000 42570LDR R11,[R2,R11,LSR #22] 42580AND R12,R10,#&FF0000:LDR R12,[R7,R12,LSR #14]:ADDS R14,R12,R11 42590MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 42600AND R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11 42610AND R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12 42620MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 42630AND R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADDS R14,R12,R11 42640MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 42650SUBS R0,R0,#2:BNE mappixlp 42660LDMFD SP !,{PC}^ 42670] 42680WHEN 555 42700[OPT Z 42710.mappix% 42720LDR R0,sxloc 42730LDR R1,[R9]:LDR R1,[R1] 42740LDR R2,[R9,#1*8] 42750LDR R3,[R9,#2*8] 42760LDR R5,[R9,#4*8] 42770LDR R6,[R9,#5*8] 42780LDR R7,[R9,#6*8] 42790LDR R9,[R9,#8*8] 42800STMFD SP !,{R14} 42810.mappixlp 42820LDR R10,[R1],#2 42830AND R11,R10,#ymax% 42840LDR R11,[R2,R11,LSL #2] 42850AND R8,R10,#((1<<vbits%)-1)<<(ybits%+ubits%) 42860AND R10,R10,#((1<<ubits%)-1)<<ybits% 42880LDR R12,[R7,R8,LSR #ybits%+ubits%-2]:ADDS R14,R12,R11 42890MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 42900LDR R12,[R5,R8,LSR #ybits%+ubits%-2]:ADD R14,R12,R11 42910LDR R12,[R6,R10,LSR #ybits%-2]:ADDS R14,R14,R12 42920MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 42930LDR R12,[R3,R10,LSR #ybits%-2]:ADDS R14,R12,R11 42940MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 42950SUBS R0,R0,#1:BNE mappixlp 42960LDMFD SP !,{PC}^ 42970] 42980ENDCASE 42990IFxmul%=2 AND xdiv%=1 THEN 43000[OPT Z 43020.xsample% 43030LDR R0,[R9]:LDR R0,[R0] 43040LDR R1,[R9,#8] 43050LDR R2,[R9,#2*8] 43060SUBS R0,R0,#2 43070BEQ xdonediv 43080BMI xdonediv 43090.xsamplelp 43100LDMIA R1,{R5,R6,R7,R8,R9,R10} 43110ADD R8,R8,R5 43120MOV R8,R8,LSR #1 43130ADD R9,R9,R6 43140MOV R9,R9,LSR #1 43150ADD R10,R10,R7 43160MOV R10,R10,LSR #1 43170STMIA R2!,{R5,R6,R7,R8,R9,R10} 43180ADD R1,R1,#12 43190SUBS R0,R0,#2:BGT xsamplelp 43200.xdonediv 43210LDMIA R1,{R5,R6,R7} 43220MOV R8,R5 43230MOV R9,R6 43240MOV R10,R7 43250STMIA R2!,{R5,R6,R7,R8,R9,R10} 43260MOVS PC,R14 43270] 43280ELSE 43290[OPT Z 43310.xsample% 43320LDR R0,[R9]:LDR R0,[R0] 43330LDR R1,[R9,#8] 43340LDR R2,[R9,#2*8] 43350LDR R3,[R9,#3*8]:LDR R3,[R3] 43360LDR R4,[R9,#4*8]:LDR R4,[R4] 43370MOV R11,R4 43380.xsamplelp 43390LDMIA R1,{R5,R6,R7} 43400SUBS R11,R11,#1:MOVEQ R11,R4:ADDEQ R1,R1,#12 43410SUBS R12,R3,#1 43420BEQ xdonediv 43430.xdivlp 43440CMP R12,R11 43450BCC xdivlp2 43460LDMIA R1!,{R8,R9,R10}:MLA R5,R8,R11,R5:MLA R6,R9,R11,R6:MLA R7,R10,R11,R7 43470SUBS R12,R12,R11:MOV R11,R4 43480BNE xdivlp 43490B xdonediv 43500.xdivlp2 43510LDMIA R1,{R8,R9,R10} 43520SUBS R11,R11,#1:MOVEQ R11,R4:ADDEQ R1,R1,#12 43530ADD R5,R5,R8:ADD R6,R6,R9:ADD R7,R7,R10 43540SUBS R12,R12,#1:BNE xdivlp 43550.xdonediv 43560STMIA R2!,{R5,R6,R7} 43570SUBS R0,R0,#1:BPL xsamplelp 43580MOVS PC,R14 43590] 43600ENDIF 43610ENDCASE 43620IFcompression=5 THEN 43630[OPT Z 43650.firstcode DCD 0 43660.oldcode DCD 0 43670.codesize DCD setcodes%+1 43680.stack DCD stk% 43690.sp DCD stk% 43700.maxcode DCD clearcode%+2 43710.maxcodesize DCD 2*clearcode% 43720.LZWdecode% 43730LDR R2,firstcode:LDR R3,oldcode:LDR R4,stack:LDR R5,codesize 43740LDR R6,sp:LDR R7,maxcode:LDR R8,maxcodesize 43750LDR R10,[R9]:LDR R10,[R10] 43760LDR R11,[R9,#8]:LDR R11,[R11] 43770LDR R12,[R9,#24] 43780STMFD SP !,{R14} 43790.lzwloop 43800CMP R6,R4 43810BHI lzwunstack 43820.lzwengine 43830BL getcode 43840CMP R0,#clearcode% 43850BEQ lzwclear 43870MOV R1,R0 43880CMP R0,R7 43890STRCSB R2,[R6],#1 43900MOVCS R0,R3 43910CMP R0,#clearcode% 43920BCC lzwdonepush 43930.lzwpushtable 43940LDR R14,[R12,R0,LSL #2] 43950STRB R14,[R6],#1 43960MOV R0,R14,LSR #16 43970CMP R0,#clearcode% 43980BCS lzwpushtable 43990.lzwdonepush 44000LDR R2,[R12,R0,LSL #2] 44010BIC R2,R2,#&FF0000 44020BIC R2,R2,#&FF000000 44030STRB R2,[R6],#1 44040CMP R7,#4096 44050BCS lzwnocode 44060ORR R0,R2,R3,LSL #16 44070STR R0,[R12,R7,LSL #2] 44080ADD R7,R7,#1 44090CMP R7,R8 44100BCC lzwnocode 44110CMP R8,#4096 44120ADDCC R5,R5,#1 44130MOVCC R8,R8,LSL #1 44140] 44150IFflag=1500 THEN 44160[OPT Z 44170ORRCC R8,R8,#1 44180] 44190ENDIF 44200[OPT Z 44210.lzwnocode 44220MOV R3,R1 44230CMP R6,R4 44240BLS lzwengine 44250.lzwunstack 44260LDRB R0,[R6,#-1]! 44270.lzwloopend 44280STRB R0,[R11],#1 44290SUBS R10,R10,#1 44300BNE lzwloop 44310STR R2,firstcode:STR R3,oldcode:STR R5,codesize 44320STR R6,sp:STR R7,maxcode:STR R8,maxcodesize 44330LDMFD SP !,{PC}^ 44340.lzwclear 44350MOV R0,#0 44360MOV R3,R12 44370.lzwdefaulttable 44380STR R0,[R3],#4 44390ADD R0,R0,#1:CMP R0,#clearcode% 44400BCC lzwdefaulttable 44410MOV R5,#setcodes%+1 44420MOV R7,#clearcode% 44430MOV R8,R7,LSL #1 44440] 44450IFflag=1500 THEN 44460[OPT Z 44470SUB R8,R8,#1 44480] 44490ENDIF 44500[OPT Z 44510ADD R7,R7,#2 44520BL getcode 44530MOV R2,R0 44540MOV R3,R0 44550MOV R6,R4 44560B lzwloopend 44580.curbit DCD 0 44590.lastbit DCD 0 44600.buf DCD buf% 44610.getcode 44620STMFD SP !,{R6,R7,R8} 44630ADR R6,curbit 44640LDMIA R6,{R6,R7,R8} 44650ADD R1,R5,R6 44660CMP R1,R7 44670BCS needmoredata 44680.simplecode 44690ADD R7,R8,R6,LSR #3 44700BIC R7,R7,#3 44710LDMIA R7,{R0,R7} 44720] 44730IFflag=1500 THEN 44740[OPT Z 44750EOR R1,R0,R0,ROR #16 44760BIC R1,R1,#&FF0000 44770MOV R0,R0,ROR #8 44780EOR R0,R0,R1,LSR #8 44790EOR R1,R7,R7,ROR #16 44800BIC R1,R1,#&FF0000 44810MOV R7,R7,ROR #8 44820EOR R7,R7,R1,LSR #8 44830ANDS R1,R6,#31:MOVNE R0,R0,LSL R1:RSBNE R1,R1,#32:ORRNE R0,R0,R7,LSR R1 44840RSB R1,R5,#32 44850MOV R0,R0,LSR R1 44860] 44870ELSE 44880[OPT Z 44890ANDS R1,R6,#31:MOVNE R0,R0,LSR R1:RSBNE R1,R1,#32:ORRNE R0,R0,R7,LSL R1 44900MVN R1,#0:BIC R0,R0,R1,LSL R5 44910] 44920ENDIF 44930[OPT Z 44940ADD R6,R6,R5 44950STR R6,curbit 44960LDMFD SP !,{R6,R7,R8} 44970MOV PC,R14 44980.needmoredata 44990STMFD SP !,{R2,R3,R4,R14} 45000MOV R3,R7,LSR #3 45010SUB R0,R3,#2 45020LDRB R0,[R8,R0] 45030STRB R0,[R8] 45040SUB R0,R3,#1 45050LDRB R0,[R8,R0] 45060STRB R0,[R8,#1] 45070LDR R1,[R9,#16] 45080LDR R1,[R1] 45090] 45100IFflag=1500 THEN 45110[OPT Z 45120MOV R0,#256 45130MOV R3,#256 45140] 45150ELSE 45160[OPT Z 45170BL bytefromcache% 45180MOVS R3,R0 45190BEQ simplecode1 45200] 45210ENDIF 45220[OPT Z 45230SUB R6,R6,R7 45240ADD R6,R6,#16 45250ADD R0,R0,#2 45260MOV R7,R0,LSL #3 45270STR R7,lastbit 45280ADD R2,R8,#2 45290BL multibytefromcache% 45300.simplecode1 45310LDMFD SP !,{R2,R3,R4,R14} 45320B simplecode 45330] 45340ENDIF 45350IFrange% THEN 45360[OPT Z 45380.maxmin% 45390LDR R0,[R9]:LDR R0,[R0] 45400LDR R1,[R9,#8] 45410LDR R2,min 45420LDR R3,max 45430.maxminlp 45440LDR R4,[R1],#4 45450CMP R4,R3:MOVCS R3,R4 45460CMP R4,R2:MOVCC R2,R4 45470SUBS R0,R0,#1:BNE maxminlp 45480STR R2,min 45490STR R3,max 45500MOVS PC,R14 45510.min DCD F 45520.max DCD 0 45530] 45540ENDIF 45550IFsharpen% THEN 45560sharp=(col+1)*4:IFsharpen%>0 THEN 45570IF sharpen%<>8 sharpmul%=F/(sharpen%-8) 45580ELSE 45590sharpmul%=F/(8-sharpen%) 45600ENDIF 45610[OPT Z 45630.sharp% 45640LDR R0,[R9]:LDR R0,[R0] 45650LDR R1,[R9,#8] 45660LDR R2,[R9,#16] 45670LDR R3,[R9,#24] 45680LDR R4,[R9,#32] 45690] 45700CASE sharpen% OF 45710WHEN -8 45720WHEN 8,9,12,16,24 45730OTHERWISE 45740[OPT Z 45750MOV R8,#sharpmul% AND &FF 45760ORR R8,R8,#sharpmul% AND &FF00 45770MOV R9,#(sharpmul% >> 16) AND &FF 45780ORR R9,R9,#(sharpmul% >> 16) AND &FF00 45790] 45800ENDCASE 45810[OPT Z 45820.sharplp 45830LDR R5,[R1,#-sharp] 45840LDR R6,[R1,#sharp]:ADD R5,R5,R6 45850LDR R6,[R1],#4:ADD R5,R5,R6 45860LDR R6,[R3,#-sharp]:ADD R5,R5,R6 45870LDR R6,[R3,#sharp]:ADD R5,R5,R6 45880LDR R6,[R3],#4:ADD R5,R5,R6 45890LDR R6,[R2,#-sharp]:ADD R5,R5,R6 45900LDR R6,[R2,#sharp]:ADD R5,R5,R6 45910LDR R6,[R2],#4 45920MOV R6,R6,LSR #1 45930MOV R7,#ABSsharpen% 45940MUL R7,R6,R7 45950] 45960IFsharpen%>0 THEN 45970[OPT Z 45980SUBS R5,R7,R5,LSR #1 45990MOVCC R5,#0 46000] 46010ELSE 46020[OPT Z 46030ADD R5,R7,R5,LSR #1 46040] 46050ENDIF 46060CASE sharpen% OF 46070WHEN 8,9 46080[OPT Z 46090MOV R6,R5,LSL #1 46100] 46110WHEN 10 46120[OPT Z 46130MOV R6,R5 46140] 46150WHEN 12 46160[OPT Z 46170MOV R6,R5,LSR #1 46180] 46190WHEN 16 46200[OPT Z 46210MOV R6,R5,LSR #2 46220] 46230WHEN -8,24 46240[OPT Z 46250MOV R6,R5,LSR #3 46260] 46270OTHERWISE 46280[OPT Z 46290MOV R6,R5,LSR #16 46300EOR R5,R5,R6,LSL #16 46310MUL R7,R8,R5 46320MUL R5,R9,R5 46330MUL R10,R6,R8 46340MUL R6,R9,R6 46350ADDS R10,R5,R10 46360ADDCS R6,R6,#&10000 46370ADDS R7,R7,R10,LSL #16 46380ADC R6,R6,R10,LSR #16 46390MOV R6,R6,LSL #(32-27) 46400ORRS R6,R6,R7,LSR #27 46410ADDCS R6,R6,#1 46420] 46430ENDCASE 46440IFsharpen%>0 THEN 46450[OPT Z 46460CMP R6,#F:MOVCS R6,#F 46470] 46480ENDIF 46490[OPT Z 46500STR R6,[R4],#4 46510SUBS R0,R0,#1 46520BNE sharplp 46530MOVS PC,R14 46540] 46550ENDIF 46560IFhist%ORequal% THEN 46570[OPT Z 46590.histo% 46600LDR R0,[R9]:LDR R0,[R0] 46610LDR R1,[R9,#8] 46620LDR R2,[R9,#16] 46630.histlp 46640LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F 46650MOV R3,R3,LSR #bits-8 46660] 46670IFcol=2 THEN 46680[OPT Z 46690ADD R3,R3,R3,LSL #1 46700LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2] 46710LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F 46720MOV R3,R3,LSR #bits-8 46730ADD R3,R3,R3,LSL #1:ADD R3,R3,#1 46740LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2] 46750LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F 46760MOV R3,R3,LSR #bits-8 46770ADD R3,R3,R3,LSL #1:ADD R3,R3,#2 46780] 46790ENDIF 46800[OPT Z 46810LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2] 46820SUBS R0,R0,#1 46830BNE histlp 46840MOVS PC,R14 46850] 46860ENDIF 46870IFequal% THEN 46880[OPT Z 46900.histequal% 46910LDR R0,[R9]:LDR R0,[R0] 46920LDR R1,[R9,#8] 46930LDR R2,[R9,#16] 46940.equallp 46950LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F 46960MOV R3,R3,LSR #bits-8 46970] 46980IFcol=2 THEN 46990[OPT Z 47000LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F 47010MOV R3,R3,LSR #bits-8 47020ADD R3,R3,R3,LSL #1 47030LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4 47040LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F 47050MOV R3,R3,LSR #bits-8 47060ADD R3,R3,R3,LSL #1:ADD R3,R3,#1 47070LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4 47080LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F 47090MOV R3,R3,LSR #bits-8 47100ADD R3,R3,R3,LSL #1:ADD R3,R3,#2 47110] 47120ENDIF 47130[OPT Z 47140LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4 47150SUBS R0,R0,#1 47160BNE equallp 47170MOVS PC,R14 47180] 47190ENDIF 47200CASE r$ OF 47210WHEN "FN800","FN801","FN1000","FN1001" 47220[OPT Z 47250.rlexpand% 47260LDR R0,[R9] 47270LDR R1,[R0] 47280LDR R2,[R9,#8]:LDR R2,[R2] 47290LDR R3,[R9,#16] 47300LDR R4,[R3] 47310CMP R4,#1:MOVLTS PC,R14 47320LDR R5,[R9,#24]:LDR R5,[R5] 47330.rle 47340STRB R2,[R1],#1 47350SUB R4,R4,#1 47360CMP R1,R5 47370TEQNE R4,#0 47380BNE rle 47390.rlexit 47400STR R1,[R0] 47410STR R4,[R3] 47420MOVS PC,R14 47430] 47440WHEN "FN902" 47450[OPT Z 47460.unpack% 47470LDR R0,[R9] 47480LDR R0,[R0] 47490LDR R1,plbuff 47500ADD R2,R0,#768 47510.unpackloop 47520LDR R3,[R0],#4 47530MOV R5,#0 47540.bitloop 47550MOV R6,R3,LSR R5 47560AND R6,R6,#15 47570ADD R5,R5,#4 47580MOV R7,R3,LSR R5 47590AND R7,R7,#15 47600ADD R5,R5,#4 47610STRB R7,[R1],#1 47620STRB R6,[R1],#1 47630CMP R5,#32 47640BNE bitloop 47650CMP R2,R0 47660BNE unpackloop 47670MOV PC,R14 47680.plbuff EQUD plbuff% 47690] 47700WHEN "FN1601","FN1501","FN1850","FN1851" 47710[OPT Z 47730.readiff% 47740MOV R1,#c% 47750LDR R8,[R9]:LDR R8,[R8] 47760LDR R7,[R9,#8]:LDR R7,[R7]:ADD R7,R7,R8 47770STMFD SP !,{R14} 47780] 47790IFr$="FN1850" OR r$="FN1851" THEN 47800[OPT Z 47810BL bytefromcache% 47820] 47830IFsy%>250 THEN 47840[OPT Z 47850BL bytefromcache% 47860] 47870ENDIF 47880ENDIF 47890[OPT Z 47900.rle 47910BL bytefromcache% 47920CMP R0,#128 47930BCC rle1 47940RSB R2,R0,#256 47950BL bytefromcache% 47960.rle0 STRB R0,[R8],#1 47970SUBS R2,R2,#1 47980BPL rle0 47990B rle2 48000.rle1 48010ADD R3,R0,#1 48020MOV R2,R8 48030ADD R8,R8,R3 48040BL multibytefromcache% 48050.rle2 48060CMP R8,R7 48070BCC rle 48080LDMFD SP !,{R14} 48090MOVS PC,R14 48100] 48110WHEN "FN1900","FN1100","FN400" 48120[OPT Z 48140.readline% 48150LDR R2,[R9]:LDR R2,[R2] 48160LDR R3,[R9,#8] 48170LDR R0,[R3] 48180LDR R4,[R9,#16] 48190LDR R5,[R4] 48200LDR R6,[R9,#24]:LDR R6,[R6]:ADD R6,R6,R2 48210STMFD SP !,{R14} 48220.rle 48230CMP R5,#1 48240BGE rle1 48250BL bytefromcache% 48260MOV R5,#1 48270] 48280IFflag=1900 THEN 48290[OPT Z 48300CMP R0,#192 48310ANDCS R5,R0,#63:BLCS bytefromcache% 48320] 48330ENDIF 48340IFflag=1100 THEN 48350[OPT Z 48360CMP R0,#128 48370BNE rle1 48380BL bytefromcache% 48390TEQ R0,#0 48400MOVEQ R0,#128 48410BEQ rle1 48420ADD R5,R0,#1 48430BL bytefromcache% 48440] 48450ENDIF 48460IFflag=400 THEN 48470[OPT Z 48480MOV R1,R0 48490BL bytefromcache% 48500ORR R1,R1,R0,LSL #8 48510BL bytefromcache% 48520ORR R1,R1,R0,LSL #16 48530BL bytefromcache% 48540ADD R5,R0,#1 48550MOV R0,R1 48560] 48570ENDIF 48580IFflag=200 THEN 48590[OPT Z 48600ADD R5,R0,#1 48610BL bytefromcache% 48620] 48630ENDIF 48640[OPT Z 48650.rle1 48660STRB R0,[R2],#1 48670] 48680IFflag=400 THEN 48690[OPT Z 48700MOV R1,R0,LSR #8 48710STRB R1,[R2],#1 48720MOV R1,R0,LSR #16 48730STRB R1,[R2],#1 48740] 48750ENDIF 48760[OPT Z 48770SUB R5,R5,#1 48780TEQ R2,R6 48790BNE rle 48800.rlexit 48810STR R0,[R3]:STR R5,[R4] 48820LDMFD SP !,{PC}^ 48830] 48840WHEN "FN2401" 48850[OPT Z 48860.bm_rle8 48870MOV R1,#c% 48880LDR R8,[R9]:LDR R8,[R8] 48890LDR R7,[R9,#8]:LDR R7,[R7]:ADD R7,R7,R8 48900STMFD SP !,{R14} 48910.rle 48920BL bytefromcache% 48930TEQ r0,#0 48940BEQ rlecopy 48960MOV r4,r0 48970BL bytefromcache% 48980.rle1 48990STRB r0,[r8],#1 49000SUBS r4,r4,#1 49010BGT rle1 49020B rle 49030.rlecopy 49050BL bytefromcache% 49060CMP r0,#3 49070BLT rlespecial 49080MOV r4,r0 49090.rle2 49110BL bytefromcache% 49120STRB r0,[r8],#1 49130BL bytefromcache% 49140SUBS r4,r4,#1 49150STRGTB r0,[r8],#1 49160SUBGTS r4,r4,#1 49170BGT rle2 49180B rle 49190.rlespecial 49300LDMFD SP !,{R14} 49310MOVS PC,R14 49320] 49330WHEN "FN2402" 49340[OPT Z 49350.bm_rle4 49360MOV R1,#c% 49370LDR R8,[R9]:LDR R8,[R8] 49380LDR R7,[R9,#8]:LDR R7,[R7]:ADD R7,R7,R8 49390STMFD SP !,{R14} 49400MOV r2,#0 49410MOV r3,#0 49420.rle 49430BL bytefromcache% 49440TEQ r0,#0 49450BEQ rlecopy 49470MOV r4,r0 49480BL bytefromcache% 49490.rle1 49500BL bmrle4_insert 49510CMP r3,#8 49520MOVGE r5,r2,LSR#24 49530STRGEB r5,[r8],#1 49540MOVGE r2,r2,LSL#8 49550SUBGE r3,r3,#8 49560CMP r4,#0 49570BGT rle1 49580B rle 49590.rlecopy 49610BL bytefromcache% 49620CMP r0,#3 49630BLT rlespecial 49640MOV r4,r0 49650.rle2 49670BL bytefromcache% 49680BL bmrle4_insert 49690BL bytefromcache% 49700CMP r4,#0 49710BLGT bmrle4_insert 49720B rle4 49730.rle3 49740MOV r5,r2,LSR#24 49750STRB r5,[r8],#1 49760MOV r2,r2,LSL#8 49770SUB r3,r3,#8 49780.rle4 49790CMP r3,#8 49800BGE rle3 49810CMP r4,#0 49820BGT rle2 49830B rle 49840.rlespecial 49940CMP r3,#0 49950MOVGT r5,r2,LSR#24 49960STRGTB r5,[r8],#1 49980LDMFD SP !,{R14} 49990MOVS PC,R14 50000.bmrle4_insert 50010RSB r5,r3,#32 50020MOV r2,r2,LSR r5 50030MOV r2,r2,LSL r5 50040SUB r5,r5,#8 50050ORR r2,r2,r0,LSL r5 50060SUBS r4,r4,#2 50070ADDMI r3,r3,#4 50080ADDPL r3,r3,#8 50090MOVS PC,R14 50100] 50110ENDCASE 50120IFcachebytes% THEN 50130[OPT Z 50140.bytefromcache% 50150STMFD SP !,{R1,R2} 50160LDR R1,incacheptr 50170LDR R2,numlefttogo 50180LDRB R0,[R1],#1 50190SUBS R2,R2,#1 50200STRNE R1,incacheptr 50210STRNE R2,numlefttogo 50220LDMFD SP !,{R1,R2} 50230MOVNE PC,R14 50240STMFD SP !,{R0,R1,R2,R3,R4} 50250LDR R2,valdatacache 50260STR R2,incacheptr 50270LDR R3,valcache 50280STR R3,numlefttogo 50290MOV R0,#4 50300MOV R1,#c% 50310SWI "OS_GBPB" 50320LDMFD SP !,{R0,R1,R2,R3,R4} 50330MOV PC,R14 50340.valdatacache DCD datacache% 50350.valcache DCD cache% 50360.incacheptr DCD datacache% 50370.numlefttogo DCD cache% 50380.multibytefromcache% 50390CMP R3,#0 50400MOVEQ PC,R14 50410STMFD SP !,{R0,R14} 50420.multibytefromcachel 50430BL bytefromcache% 50440STRB R0,[R2],#1 50450SUBS R3,R3,#1 50460BNE multibytefromcachel 50470LDMFD SP !,{R0,R14} 50480MOV PC,R14 50490] 50500ENDIF 50510IFplanar%<0 THEN 50520C%=7:IFflag=2600 C%=15 50530[OPT Z 50540.plancnv% 50550LDR R0,sxloc 50560LDR R1,[R9]:LDR R1,[R1] 50570LDR R3,[R9,#8]:LDR R3,[R3] 50580LDR R4,[R9,#16]:LDR R4,[R4] 50590] 50600IFflag=3500 THEN 50610[OPT Z 50620MOV R9,#0 50630] 50640ELSE 50650[OPT Z 50660MOV R9,#C% 50670] 50680ENDIF 50690[OPT Z 50700.planelp 50710MOV R7,#0 50720MOV R5,R3 50730] 50740FORN%=1TOplanes% 50750[OPT Z 50760LDR R6,[R5],R4 50770] 50780IFflag=2600 THEN 50790[OPT Z 50800MOV R6,R6,LSL #8 50810BIC R6,R6,#&FF000000 50820ORR R6,R6,R6,LSR #16 50830] 50840ENDIF 50850IFflag=3500 THEN 50860[OPT Z 50870MOV R6,R6,LSR R9 50880ANDS R6,R6,#1 50890ORR R7,R7,R6,LSL #(planes%-N%) 50900ORRNE R7,R7,#(planes%-1) 50910] 50920ELSE 50930[OPT Z 50940MOV R6,R6,LSR R9 50950AND R6,R6,#1 50960ORR R7,R7,R6,LSL #(N%-1) 50970] 50980ENDIF 50990NEXT 51000[OPT Z 51010STRB R7,[R1],#1 51020] 51030IFflag=3500 THEN 51040[OPT Z 51050ADD R9,R9,#1 51060CMP R9,#C%+1 51070MOVEQ R9,#0 51080] 51090ELSE 51100[OPT Z 51110SUBS R9,R9,#1:MOVMI R9,#C% 51120] 51130ENDIF 51140CASE flag OF 51150WHEN 2600 51160[OPT Z 51170MOVMI R3,R5 51180] 51190WHEN 3500 51200[OPT Z 51210ADDEQ R3,R3,#1 51220] 51230OTHERWISE 51240[OPT Z 51250ADDMI R3,R3,#1 51260] 51270ENDCASE 51280[OPT Z 51290SUBS R0,R0,#1:BNE planelp 51300MOVS PC,R14 51310] 51320ENDIF 51330NEXT 51340cputime%=TIME 51350IFcache% THEN 51360IFflag=3600 THEN 51370pcdblk%!12=cacherows%:PROCrefillpcd:IFcache%>=filesize% rowstogo%=-1 51380ELSE 51390IFstriprows%>0ANDcompression>1 THEN 51410SYS12,4,c%,datacache%,cache% 51420IFcachebytes% !incacheptr=datacache%:!numlefttogo=cache% 51430ELSE 51440PROCrefill:IFcache%>=filesize% rowstogo%=-1 51450ENDIF 51460ENDIF 51470ENDIF 51480sizeshft%=0:CASE ncol OF 51490WHEN 2^24-1:size%=1 51500WHEN 2^15-1:size%=1 51510WHEN 63,255,256:size%=1 51520WHEN 15:size%=2:sizeshft%=1 51530WHEN 3:size%=4:sizeshft%=2 51540WHEN 1:size%=8:sizeshft%=3:IFm$="C" size%=2:sizeshft%=1 51550IFm$="D" size%=4:sizeshft%=2 51560IFm$="T" size%=2:sizeshft%=1 51570ENDCASE 51590CASE flag OF 51600WHEN 501:IFinfo% PRINT"Reading interlaced GIF" 51610sz%=sx%*sy%:plbuff%=FNdim(sz%+100) 51620FORY%=0TOsy%-1STEP8:X%=plbuff%+Y%*sx%:CALL LZWdecode%,table%(0),c%,X%,sx%:NEXT 51630FORY%=4TOsy%-1STEP8:X%=plbuff%+Y%*sx%:CALL LZWdecode%,table%(0),c%,X%,sx%:NEXT 51640FORY%=2TOsy%-1STEP4:X%=plbuff%+Y%*sx%:CALL LZWdecode%,table%(0),c%,X%,sx%:NEXT 51650FORY%=1TOsy%-1STEP2:X%=plbuff%+Y%*sx%:CALL LZWdecode%,table%(0),c%,X%,sx%:NEXT 51660datacache%=plbuff%:buff%=plbuff%:rowbytes%=sx%:rowstogo%=-1 51670ENDCASE 51680IFgamma<>1 AND gamma<>0 THEN 51690k=1/gamma:FORC%=0TOcolourindex 51700IFr%(C%) r%(C%)=((r%(C%)/F)^k)*F 51710IFg%(C%) g%(C%)=((g%(C%)/F)^k)*F 51720IFb%(C%) b%(C%)=((b%(C%)/F)^k)*F 51730NEXT 51740ENDIF 51750rmax=F:gmax=F:bmax=F 51760IFcol=0 THEN 51770IFinput<9 THEN 51780FORC%=0TO255:r%(C%)=r%(C%)*rwt+g%(C%)*gwt+b%(C%)*bwt:NEXT 51790ELSE 51800IFinput<400 THEN 51810rmax=F*rwt:gmax=F*gwt:bmax=F*bwt 51820FORC%=0TOcolourindex:r%(C%)=r%(C%)*rwt:g%(C%)=g%(C%)*gwt:b%(C%)=b%(C%)*bwt:NEXT 51830ENDIF 51840ENDIF 51850ENDIF 51860IFNOTorder% PROCadjustpalette(1/ydiv%/xdiv%,0) 51880IFrange% THEN 51890IFinfo% PRINT"Scanning data to compute parameters for '-range'" 51900IForder% THEN 51910Y%=0:REPEAT SYShour%,Y%*100DIVsy% 51920W%=EVAL(r$+"(xp%())"):CALLmaxmin%,xp%(1,0),totvals2%:Y%+=1 51930UNTILY%=sy% OR!min<255 AND!max+255>=F 51940ELSE 51950Y%=0:ysamp%=1:REPEAT SYShour%,Y%*100DIVy% 51960PROCscaledpixelrow(cl%()):CALLmaxmin%,cl%(1,0),totvals%:Y%+=1 51970UNTILY%=y% OR !min<255 AND !max+255>=F 51980ENDIF 51990IF!max+255>=F AND!min<255 range%=FALSE:range$="No point in '-range' on this image" 52000IFrange% PROCadjustpalette(F/(!max-!min),!min/ydiv%/xdiv%):range$="Input image maximum "+STR$(!max/F*100)+"% minimum "+STR$(!min/F*100)+"%" 52010PROCrewind:IFinfo% PRINTrange$ 52020ENDIF 52030IFhist% ORequal% THEN 52040IFequal% IFinfo% PRINT"Scanning data to compute parameters for '-equal'" 52050IForder% THEN 52060FORyr%=0TOsy%-1:SYShour%,yr%*100DIVsy% 52070W%=EVAL(r$+"(xp%())"):CALLhisto%,xp%(1,0),vals%(0,0),sx% 52080NEXT 52090ELSE 52100ysamp%=1:FORyr%=0TOy%-1:SYShour%,yr%*100DIVy% 52110PROCscaledpixelrow(cl%()):CALLhisto%,cl%(1,0),vals%(0,0),x% 52120NEXT 52130ENDIF 52140IFinfo% PRINT"Done. Now processing the picture" 52150ENDIF 52160IFinput<400 THEN 52170FORC%=0TOcolourindex 52180IFr%(C%)<0 r%(C%)=0 52190IFg%(C%)<0 g%(C%)=0 52200IFb%(C%)<0 b%(C%)=0 52210IFr%(C%)>rmax r%(C%)=rmax 52220IFg%(C%)>gmax g%(C%)=gmax 52230IFb%(C%)>bmax b%(C%)=bmax 52240NEXT 52250ENDIF 52260IFhist% THEN 52270M%=0:ZM%=-1:FORC%=0TOcol 52280FORZ%=0TO256:IFvals%(Z%,C%)>M% M%=vals%(Z%,C%):ZM%=Z% 52290NEXT:NEXT 52300IFZM%=-1 OR okinfo%=0 THEN=100 52310IF col>0 THEN 52320MODE66:ht=500 52330IFMODE<>66 MODE16:ht=400 52340LINE0,6,2000,6 52350ELSE 52360MODE18:ht=400:LINE0,6,1024,6 52370ENDIF 52380M=M%/(ht*2-8):FORC%=0TOcol:CASE C% OF 52390WHEN 0:GCOL1 52400WHEN 1:GCOL2 52410WHEN 2:GCOL4 52420ENDCASE 52430IF col>0 THEN 52440FORZ%=0TO256:IFvals%(Z%,C%) X%=Z%*3+C%<<1:LINEX%,8,X%,vals%(Z%,C%)/M+8 52450NEXT 52460ELSE 52470FORZ%=0TO256:IFvals%(Z%,C%) X%=Z%<<2:RECTANGLE FILLX%,8,2,vals%(Z%,C%)/M 52480NEXT 52490ENDIF 52500NEXT 52510PROCclose:SYS"Hourglass_Off" 52520=100 52530ENDIF 52540IFm>=0 oname$="p"+STR$m+m$ ELSEoname$=m$ 52550IFm=-6 ORm=-7 ORm=-8 oname$=pnm$ 52560IFrange% oname$+="r" 52570IFequal% oname$+="e" 52580IFsharpen% oname$+="s"+STR$sharpen% 52590IFblack% oname$+="b"+STR$black% 52600IFgamma<>1 A%=@%:@%=&1020100:oname$+="g"+STR$gamma:@%=A% 52610IFbright%=16 oname$+="b" 52620xsp%=x%:ysp%=y%:IFrotate% SWAP xsp%,ysp% 52630IF rotate% OR hflip% OR vflip% IFm=-9 OR m=-10 THENm-=2 52640IFm=-9ORm=-10 THEN 52650DIM jpq%(20) 52660jpq%()=60,75,90,105,120,135,150,160,170,180,190,205,215,235,255,280,320,380,500,750,850 52670ENDIF 52680CASE m OF 52690WHEN -1:xwords%=xsp%:sz%=xwords%*ysp%:Y%=ysp% 52700PROCgetoutput(sz%,0,xwords%,Y%):base%=ram% 52710WHEN -3,-5:xwords%=xsp%*2:sz%=xwords%*ysp%:Y%=ysp% 52720PROCgetoutput(sz%,0,xwords%,Y%):base%=ram% 52730WHEN -4:xwords%=xsp%*3:sz%=xwords%*ysp%:Y%=ysp% 52740PROCgetoutput(sz%,0,xwords%,Y%):base%=ram% 52750WHEN -6:xwords%=xsp%*2+3ANDNOT3:sz%=xwords%*ysp%:Y%=ysp% 52760A%=Y%:PROCgetoutput(sz%,64,xwords%,Y%) 52770ram%!4=0:ram%!8=16:ram%!12=16:SYS&2e,&109,ram% 52780SYS&2e,&10f,ram%,oname$,0,xsp%*2,Y%,28 52790base%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords% 52800ram%!12=ram%!12-Y%*xwords%+A%*xwords% 52810base%!(10*4)=5<<27 OR nx<<1 OR ny<<14 OR 1:base%+=base%!(8*4) 52820WHEN -7:xwords%=xsp%*3+3ANDNOT3:sz%=xwords%*ysp%:Y%=ysp% 52830A%=Y%:PROCgetoutput(sz%,64,xwords%,Y%) 52840ram%!4=0:ram%!8=16:ram%!12=16:SYS&2e,&109,ram% 52850SYS&2e,&10f,ram%,oname$,0,xsp%*3,Y%,28 52860base%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords% 52870ram%!12=ram%!12-Y%*xwords%+A%*xwords% 52880base%!(10*4)=panic<<27 OR nx<<1 OR ny<<14 OR 1:base%+=base%!(8*4) 52890no magic number yet for new format 24bpp sprites 52900WHEN -8:xwords%=xsp%*4:sz%=xwords%*ysp%:Y%=ysp% 52910A%=Y%:PROCgetoutput(sz%,64,xwords%,Y%) 52920ram%!4=0:ram%!8=16:ram%!12=16:SYS&2e,&109,ram% 52930SYS&2e,&10f,ram%,oname$,0,xsp%*4,Y%,28 52940base%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords% 52950ram%!12=ram%!12-Y%*xwords%+A%*xwords% 52960base%!(10*4)=6<<27 OR nx<<1 OR ny<<14 OR 1:base%+=base%!(8*4) 52970WHEN -9:xwords%=xsp%+3ANDNOT3:sz%=(xsp%+7ANDNOT7)*(ysp%+7ANDNOT7):Y%=ysp% 52980sz%=sz%*jpq%(jpegquality%DIV5)/588+1024 52990jpegwrk%=FNdim((xsp%+7ANDNOT7)*9+20000) 53000base%=FNdim(xwords%) 53010PROCgetoutputjp(sz%) 53020!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=1:ram%!16=90:ram%!20=90 53030SYS"CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+7ANDNOT7)*9+20000 TO jpegtag% 53040WHEN -10:xwords%=xsp%*3+3ANDNOT3:sz%=(xsp%+15ANDNOT15)*(ysp%+15ANDNOT15)*12/8:Y%=ysp% 53050sz%=sz%*jpq%(jpegquality%DIV5)/588+1024 53060jpegwrk%=FNdim((xsp%+15ANDNOT15)*30+20000) 53070base%=FNdim(xwords%) 53080PROCgetoutputjp(sz%) 53090!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=3:ram%!16=90:ram%!20=90 53100SYS"CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+15ANDNOT15)*30+20000 TO jpegtag% 53110WHEN -11:xwords%=xsp%:sz%=xwords%*ysp%+20000:Y%=ysp% 53120jpegwrk%=FNdim((xsp%+7ANDNOT7)*9+20000) 53130PROCgetoutput(sz%,0,xwords%,Y%):base%=ram%+20000 53140WHEN -12:xwords%=xsp%*3:sz%=xwords%*ysp%+20000:Y%=ysp% 53150jpegwrk%=FNdim((xsp%+15ANDNOT15)*30+20000) 53160PROCgetoutput(sz%,0,xwords%,Y%):base%=ram%+20000 53170OTHERWISE:xwords%=xsp%/size%+3.9999ANDNOT3:sz%=xwords%*ysp%:X%=xsp%:Y%=ysp% 53180IFncol=1 THEN 53190CASE m$ OF 53200WHEN"C":!rowinc=xwords%:xwords%=xwords%*4:sz%=xwords%*ysp%:X%=xsp%*4:Y%=ysp%*4 53210WHEN"T":!rowinc=xwords%:xwords%=xwords%*3:sz%=xwords%*ysp%:X%=xsp%*4:Y%=ysp%*3 53220WHEN"D":!rowinc=xwords%:xwords%=xwords%*2:sz%=xwords%*ysp%:X%=xsp%*2:Y%=ysp%*2 53230ENDCASE 53240ENDIF 53250A%=Y%:PROCgetoutput(sz%,2048+64,xwords%,Y%) 53260ram%!4=0:ram%!8=16:ram%!12=16:SYS&2e,&109,ram% 53270SYS&2e,&10f,ram%,oname$,(ncol<63)AND1,X%,Y%,spm 53280base%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords% 53290ram%!12=ram%!12-Y%*xwords%+A%*xwords% 53300pal%=base%+11*4:base%+=base%!(8*4) 53310CASE ncol OF 53320WHEN 256 53330!(pal%-8)+=2048:!(pal%-12)+=2048:base%+=2048:!(ram%+12)+=2048:!(pal%-44)+=2048 53340FORZ%=0TO255:B%=Z%ORZ%<<8ORZ%<<16:B%=B%<<8 53350pal%!(Z%*8)=B%:pal%!(Z%*8+4)=B%:NEXT 53360WHEN 255 53370!(pal%-8)+=2048:!(pal%-12)+=2048:base%+=2048:!(ram%+12)+=2048:!(pal%-44)+=2048 53380FORZ%=0TO255:B%=palette%!(Z%<<2)<<8 53390pal%!(Z%*8)=B%:pal%!(Z%*8+4)=B%:NEXT 53400WHEN 15 53410CASE m$ OF 53420WHEN "R" 53430FORZ%=0TO15:PROCcol(Z%,palette%!(Z%<<2)AND&F0F0F0):NEXT 53440WHEN "D" 53450FORZ%=0TO7:A%=0:IFZ%AND1 A%+=&F0 53460IFZ%AND2 A%+=&F000 53470IFZ%AND4 A%+=&F00000 53480PROCcol(Z%,A%):NEXT 53490WHEN "T" 53500FORZ%=0TO15:A%=Z%<<4:PROCcol(Z%,A%ORA%<<8ORA%<<16):NEXT 53510OTHERWISE 53520FORZ%=0TO15:A%=(Z%AND7)/7*15+.2<<4:PROCcol(Z%,A%ORA%<<8ORA%<<16):NEXT 53530ENDCASE 53540WHEN 3 53550CASEm$ OF 53560WHEN "C" 53570PROCcol(0,0):PROCcol(1,&F0F000):PROCcol(2,&F000F0):PROCcol(3,&F0F0) 53580WHEN "R" 53590FORZ%=0TO3:PROCcol(Z%,palette%!(Z%<<2)AND&F0F0F0):NEXT 53600OTHERWISE 53610FORZ%=0TO3:A%=Z%*5<<4:PROCcol(Z%,A%ORA%<<8ORA%<<16):NEXT 53620ENDCASE 53630WHEN 1:PROCcol(0,0):PROCcol(1,&F0F0F0) 53640ENDCASE 53650ENDCASE 53670IFflex% THEN 53690ELSE 53700IFworkspace%<0 THEN 53710P%=END:[OPT 0:STR r13,P%+16:MOVS Pc,r14:]:CALLEND 53720END=END+32*1024+HIMEM-!(END+16) 53730ELSE 53750ENDIF 53760ENDIF 53770IFbase%*size%>2^32 ERROR 42,"base%*size% product too large" 53780LOCAL ERROR 53790ON ERROR LOCAL:RESTORE ERROR:PROCSave:ERROR ERR,REPORT$+" internal ("+STR$ERL+")" 53800SYS"Hourglass_LEDs",3 53810ysamp%=1:nl%()=0:step%=4*(col+1) 53820addr%=base%<<sizeshft%:rowstep%=xwords%*size%:colstep%=1:dist%=xsp%-1 53830IFm=-3ORm=-5ORm=-6 dist%=dist%*2 53840IFm=-4ORm=-7ORm=-10ORm=-12 dist%=dist%*3 53850IFm=-8 dist%=dist%*4 53860IFrotate% THEN 53870odist%=dist%:SWAP colstep%,rowstep%:SWAP hflip%,vflip% 53880IFrotate%=1 THEN 53890addr%+=(ysp%-1)*colstep%:colstep%=-colstep%:dist%=(ysp%-1)*colstep% 53900ELSE 53910addr%+=dist%:rowstep%=-rowstep%:dist%=(ysp%-1)*colstep% 53920ENDIF 53930IFm=-3ORm=-5ORm=-6 colstep%=colstep%/2:rowstep%=rowstep%*2 53940IFm=-4ORm=-7ORm=-10ORm=-12 colstep%=colstep%/3:rowstep%=rowstep%*3 53950IFm=-8 colstep%=colstep%/4:rowstep%=rowstep%*4 53960ENDIF 53970IFhflip% THEN 53980addr%+=dist%:dist%=-dist%:colstep%=-colstep% 53990ENDIF 54000IFvflip% THEN 54010IFrotate% THEN 54020addr%+=odist%*rotate%:rowstep%=-rowstep% 54030ELSE 54040addr%+=(ysp%-1)*rowstep%:rowstep%=-rowstep% 54050ENDIF 54060ENDIF 54070outlim%=((base%+xwords%*Y%)<<sizeshft%)-1:oddcolstep%=-colstep%:oddstep%=-step% 54080IForder% PROCadjustpalette(1/ydiv%/xdiv%,0) 54090IFm=-9ORm=-10 THEN 54100SYS "OS_SWINumberFromString",,"CompressJPEG_WriteLine" TO wl% 54110IFsy%=y% AND sx%=x% AND range%=FALSE AND sharpen%=FALSE AND equal%=FALSE THEN 54120IFdither% THEN 54130FORyr%=0 TO y%-1:SYShour%,yr%*100DIVy% 54140W%=EVAL(r$+"(cl%())"):cl%()=cl%()+nl%():nl%()=0:B%=x% 54150IFyr%AND1 THEN 54160CALLfs%,colstep%,cl%(1,0),nl%(1,0),addr%,step%,B% 54170ELSE 54180A%=addr%+dist%:CALLfs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B% 54190ENDIF 54200SYSwl%,jpegtag%,addr% 54210NEXT 54220ELSE 54230I%=step%:FORyr%=0TOy%-1:SYShour%,yr%*100DIVy%:IFaddr%>outlim% PROCflushoutput 54240W%=EVAL(r$+"(cl%())"):B%=x%:CALLfs%,colstep%,cl%(1,0),I%,addr%,I%,B% 54250SYSwl%,jpegtag%,addr% 54260NEXT 54270ENDIF 54280ELSE 54290IFequal% THEN 54300PROCrewind:Havg%=SUM(vals%())/256/(col+1):DIM new%(256,col) 54310FORB%=0TOcol:R%=0:Hint%=0:FORZ%=0TO256:L%=R%:Hint%+=vals%(Z%,B%) 54320WHILEHint%>Havg%:Hint%-=Havg%:R%+=1:ENDWHILE 54330new%(Z%,B%)=(L%+R%)/2*F/256 54340NEXT:NEXT 54350ENDIF 54360IFsharpen% THEN 54370IForder% THEN 54380yread%=sy%-1:W%=EVAL(r$+"(rm1%())"):IFequal% PROCfit2(rm1%()) 54390FORB%=0TOcol:rm1%(0,B%)=rm1%(1,B%):rm1%(sx%+1,B%)=rm1%(sx%,B%):NEXT 54400ELSE 54410yread%=y%-1:PROCscaledpixelrow(rm1%()):IFequal% PROCfit(rm1%()) 54420FORB%=0TOcol:rm1%(0,B%)=rm1%(1,B%):rm1%(x%+1,B%)=rm1%(x%,B%):NEXT 54430ENDIF 54440rm2%()=rm1%() 54450ENDIF 54460IForder% THEN 54470FORyr%=0 TO y%-1 54480SYShour%,yr%*100DIVy%:IFaddr%>outlim% PROCflushoutput 54490IFsy%=y% THEN 54500PROCsharppixelrow(cl%()) 54510ELSE 54520ysamp%-=1:IFysamp%=0 PROCsharppixelrow(xl%()):ysamp%=ymul% 54530IFydiv%=1 THEN 54540cl%()=xl%() 54550ELSE 54560IFysamp%>=ydiv% THEN 54570ysamp%-=ydiv%:cl%()=xl%()*ydiv% 54580ELSE 54590cl%()=xl%()*ysamp%:Y%=ydiv%-ysamp%:ysamp%=0 54600REPEAT 54610IFysamp%=0 PROCsharppixelrow(xl%()):ysamp%=ymul% 54620IFysamp%>Y% THEN 54630ysamp%-=Y%:xl2%()=xl%()*Y%:cl%()=cl%()+xl2%():Y%=0 54640ELSE 54650Y%-=ysamp%:xl2%()=xl%()*ysamp%:cl%()=cl%()+xl2%():ysamp%=0 54660ENDIF 54670UNTIL Y%=0 54680ENDIF 54690ysamp%+=1 54700ENDIF 54710ENDIF 54720cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%+dist% 54730IFyr%AND1 THEN 54740CALLfs%,colstep%,cl%(1,0),nl%(1,0),addr%,step%,B% 54750ELSE 54760CALLfs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B% 54770ENDIF 54780SYSwl%,jpegtag%,addr% 54790NEXT 54800ELSE 54810FORyr%=0 TO y%-1 54820SYShour%,yr%*100DIVy%:IFaddr%>outlim% PROCflushoutput 54830IFsharpen% THEN 54840IFyread% yread%-=1:PROCscaledpixelrow(rm%()):IFequal% PROCfit(rm%()) 54850FORB%=0TOcol:rm%(0,B%)=rm%(1,B%):rm%(x%+1,B%)=rm%(x%,B%):NEXT 54860CALL sharp%,cl%(1,0),rm%(1,0),rm1%(1,0),rm2%(1,0),totvals% 54870SWAP rm2%(),rm1%():rm1%()=rm%() 54880ELSE 54890PROCscaledpixelrow(cl%()):IFequal% PROCfit(cl%()) 54900ENDIF 54910cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%+dist% 54920IFyr%AND1 THEN 54930CALLfs%,colstep%,cl%(1,0),nl%(1,0),addr%,step%,B% 54940ELSE 54950CALLfs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B% 54960ENDIF 54970SYSwl%,jpegtag%,addr% 54980NEXT 54990ENDIF 55000ENDIF 55010SYS"CompressJPEG_Finish",jpegtag% TO jpegsize% 55020ELSE 55030IFsy%=y% AND sx%=x% AND range%=FALSE AND sharpen%=FALSE AND equal%=FALSE THEN 55040IFdither% THEN 55050FORyr%=0 TO y%-1:SYShour%,yr%*100DIVy%:IFaddr%>outlim% PROCflushoutput 55060W%=EVAL(r$+"(cl%())"):cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep% 55070IFyr%AND1 THEN 55080CALLfs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B% 55090ELSE 55100A%+=dist%:CALLfs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B% 55110ENDIF 55120NEXT 55130ELSE 55140I%=step%:FORyr%=0TOy%-1:SYShour%,yr%*100DIVy%:IFaddr%>outlim% PROCflushoutput 55150W%=EVAL(r$+"(cl%())"):B%=x%:A%=addr%:addr%+=rowstep%:CALLfs%,colstep%,cl%(1,0),I%,A%,I%,B% 55160NEXT 55170ENDIF 55180ELSE 55190IFequal% THEN 55200PROCrewind:Havg%=SUM(vals%())/256/(col+1):DIM new%(256,col) 55210FORB%=0TOcol:R%=0:Hint%=0:FORZ%=0TO256:L%=R%:Hint%+=vals%(Z%,B%) 55220WHILEHint%>Havg%:Hint%-=Havg%:R%+=1:ENDWHILE 55230new%(Z%,B%)=(L%+R%)/2*F/256 55240NEXT:NEXT 55250ENDIF 55260IFsharpen% THEN 55270IForder% THEN 55280yread%=sy%-1:W%=EVAL(r$+"(rm1%())"):IFequal% PROCfit2(rm1%()) 55290FORB%=0TOcol:rm1%(0,B%)=rm1%(1,B%):rm1%(sx%+1,B%)=rm1%(sx%,B%):NEXT 55300ELSE 55310yread%=y%-1:PROCscaledpixelrow(rm1%()):IFequal% PROCfit(rm1%()) 55320FORB%=0TOcol:rm1%(0,B%)=rm1%(1,B%):rm1%(x%+1,B%)=rm1%(x%,B%):NEXT 55330ENDIF 55340rm2%()=rm1%() 55350ENDIF 55360IForder% THEN 55370FORyr%=0 TO y%-1 55380SYShour%,yr%*100DIVy%:IFaddr%>outlim% PROCflushoutput 55390IFsy%=y% THEN 55400PROCsharppixelrow(cl%()) 55410ELSE 55420ysamp%-=1:IFysamp%=0 PROCsharppixelrow(xl%()):ysamp%=ymul% 55430IFydiv%=1 THEN 55440cl%()=xl%() 55450ELSE 55460IFysamp%>=ydiv% THEN 55470ysamp%-=ydiv%:cl%()=xl%()*ydiv% 55480ELSE 55490cl%()=xl%()*ysamp%:Y%=ydiv%-ysamp%:ysamp%=0 55500REPEAT 55510IFysamp%=0 PROCsharppixelrow(xl%()):ysamp%=ymul% 55520IFysamp%>Y% THEN 55530ysamp%-=Y%:xl2%()=xl%()*Y%:cl%()=cl%()+xl2%():Y%=0 55540ELSE 55550Y%-=ysamp%:xl2%()=xl%()*ysamp%:cl%()=cl%()+xl2%():ysamp%=0 55560ENDIF 55570UNTIL Y%=0 55580ENDIF 55590ysamp%+=1 55600ENDIF 55610ENDIF 55620cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep% 55630IFyr%AND1 THEN 55640CALLfs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B% 55650ELSE 55660A%+=dist%:CALLfs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B% 55670ENDIF 55680NEXT 55690ELSE 55700FORyr%=0 TO y%-1 55710SYShour%,yr%*100DIVy%:IFaddr%>outlim% PROCflushoutput 55720IFsharpen% THEN 55730IFyread% yread%-=1:PROCscaledpixelrow(rm%()):IFequal% PROCfit(rm%()) 55740FORB%=0TOcol:rm%(0,B%)=rm%(1,B%):rm%(x%+1,B%)=rm%(x%,B%):NEXT 55750CALL sharp%,cl%(1,0),rm%(1,0),rm1%(1,0),rm2%(1,0),totvals% 55760SWAP rm2%(),rm1%():rm1%()=rm%() 55770ELSE 55780PROCscaledpixelrow(cl%()):IFequal% PROCfit(cl%()) 55790ENDIF 55800cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep% 55810IFyr%AND1 THEN 55820CALLfs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B% 55830ELSE 55840A%+=dist%:CALLfs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B% 55850ENDIF 55860NEXT 55870ENDIF 55880ENDIF 55890IFm=-11ORm=-12 THEN 55900SYS "OS_SWINumberFromString",,"CompressJPEG_WriteLine" TO wl% 55910IFm=-11 THEN 55920!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=1:ram%!16=90:ram%!20=90 55930SYS"CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+7ANDNOT7)*9+20000 TO jpegtag% 55940ELSE 55950!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=3:ram%!16=90:ram%!20=90 55960SYS"CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+15ANDNOT15)*30+20000 TO jpegtag% 55970ENDIF 55980addr%=ram%+20000 55990FORyr%=0TOysp%-1 56000SYShour%,yr%*100DIVysp%:SYSwl%,jpegtag%,addr%:addr%+=xwords% 56010NEXT 56020SYS"CompressJPEG_Finish",jpegtag% TO jpegsize% 56030ENDIF 56040ENDIF 56050cputime%=TIME-cputime% 56060PROCSave 56070=0 56080DEF PROCsrchdevlist 56090[OPT Z 56120CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F 56130MOV R0,R4,LSR #(bits-k%):CMP R0,#1<<k%:MOVCS R0,#(1<<k%)-1 56140CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F 56150MOV R3,R5,LSR #(bits-k%):CMP R3,#1<<k%:MOVCS R3,#(1<<k%)-1:ORR R0,R0,R3,LSL #k% 56160CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F 56170MOV R3,R6,LSR #(bits-k%):CMP R3,#1<<k%:MOVCS R3,#(1<<k%)-1:ORR R0,R0,R3,LSL #k%*2 56200STMFD SP !,{R8,R9,R10,R11} 56210LDR r3,ictloc 56220LDR r2,[r3,r0,LSL #2] 56240MOV r14,r2,lsr #24 56250CMP r14,#4 56260ADDCC r2,r3,r0,lsl #2 56270BICCS r2,r2,#&ff000000 56280LDRB r0,[r2],#1 56290SUBS r14,r14,#1 56300BEQ gotit 56320ADD r3,r0,r0,lsl #1 56330ADD r3,r7,r3,lsl #2 56340LDMIA r3,{r8,r9,r10} 56350SUBS r8,r8,r4 56360RSBMI r8,r8,#0 56370MOV r8,r8,lsr #bits/2 56380SUBS r9,r9,r5 56390RSBMI r9,r9,#0 56400MOV r9,r9,lsr #bits/2 56410SUBS r10,r10,r6 56420RSBMI r10,r10,#0 56430MOV r10,r10,lsr #bits/2 56440MUL r3,r8,r8 56450MUL r11,r9,r9 56460ADD r11,r11,r11,LSL #2 56470ADD r3,r3,r3,LSL #1 56480ADD r3,r3,r11,LSL #1 56490MLA r11,r10,r10,r3 56510.srchlist 56520LDRB r3,[r2],#1 56530ADD R8,R3,R3,LSL #1 56540ADD R8,R7,R8,LSL #2 56550LDMIA R8,{R8,R9,R10} 56560SUBS R9,R5,R9 56570RSBMI R9,R9,#0 56580MOV R3,R9,LSR #bits/2 56590MUL R9,R3,R3 56600ADD r9,r9,r9,LSL #2 56610CMP R11,R9,LSL #1 56620BCC srchquick 56630SUBS R8,R4,R8 56640RSBMI R8,R8,#0 56650MOV R3,R8,LSR #bits/2 56660MUL R8,r3,r3 56670ADD r8,r8,r8,LSL #1 56680ADD r8,r8,r9,LSL #1 56690SUBS R10,R6,R10 56700RSBMI R10,R10,#0 56710MOV R3,R10,LSR #bits/2 56720MLA R10,R3,R3,R8 56730CMP R10,R11 56740MOVCC R11,R10 56750LDRCCB R0,[r2,#-1] 56760.srchquick 56770SUBS R14,R14,#1 56780BNE srchlist 56790.gotit 56800ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2 56810LDMIA R3,{R8,R9,R10} 56820SUB R4,R4,R8:SUB R5,R5,R9:SUB R6,R6,R10 56830LDMFD r13!,{R8,R9,R10,R11} 56840] 56850ENDPROC 56860DEF PROCgetoutput(A%,E%,B%,RETURN C%) 56870IFA%>max% AND rotate%=FALSE AND vflip%=FALSE THEN 56880C%=max%DIVB%+1:A%=xwords%*C%+E%:first%=TRUE:o%=OPENOUTf$ 56890ELSE 56900A%+=E% 56910ENDIF 56920IFspritearea%<0 THEN 56930ram%=FNcreatearea(A%):IFram%=-1 ram%=FNdim(A%) 56940ELSE 56950ram%=spritearea% 56960ENDIF 56970!ram%=A% 56980ENDPROC 57000DEF PROCgetoutputjp(RETURN A%) 57020IFspritearea%<0 THEN 57030ram%=FNcreateareajp(A%):IFram%=-1 ram%=FNdimjp(A%) 57040ELSE 57050ram%=spritearea% 57060ENDIF 57070!ram%=A% 57090ENDPROC 57110DEF FNcreatearea(size%) 57120LOCAL ERROR 57130areanumber%=0 57140ON ERROR LOCAL:=-1 57150SYS &20066,0,-1,size%,-1,%10000000,size%,0,0,"ChangeFSI sprite" TO ,areanumber%,,areabase%;V% 57160IFV%AND1 THENareanumber%=0:=-1 57220SYS "OS_ReadDynamicArea",areanumber% TO ,areasize% 57230IF areasize%<size% PROCremovearea:ERROR 42,"Couldn't create area" 57240=areabase% 57260DEF FNcreateareajp(RETURN size%) 57270LOCAL ERROR 57280areanumber%=0 57290ON ERROR LOCAL:=-1 57300SYS &20066,0,-1,size%,-1,%10000000,size%,0,0,"ChangeFSI JPEG" TO ,areanumber%,,areabase%;V% 57310IFV%AND1 THENareanumber%=0:=-1 57320SYS "OS_ReadDynamicArea",areanumber% TO ,areasize%:size%=areasize% 57330=areabase% 57350DEF PROCremovearea 57360IFareanumber% SYS "OS_DynamicArea",1,areanumber%:areanumber%=0 57370ENDPROC 57390DEF FNcachedim(size%) 57400LOCAL ERROR 57410cacheareanumber%=0 57420ON ERROR LOCAL:=-1 57430SYS &20066,0,-1,size%,-1,%10000000,size%,0,0,"ChangeFSI cache" TO ,cacheareanumber%,,cacheareabase%;V% 57440IFV%AND1 THENcacheareanumber%=0:=-1 57450SYS "OS_ReadDynamicArea",cacheareanumber% TO ,cacheareasize% 57460IF cacheareasize%<size% PROCremovecachearea:ERROR 42,"Couldn't create area" 57470=cacheareabase% 57490DEF PROCremovecachearea 57500IFcacheareanumber% SYS "OS_DynamicArea",1,cacheareanumber%:cacheareanumber%=0 57510ENDPROC 57530DEF PROCflushoutput 57540IFspritearea%<0 ANDoksave% THEN 57550A%=base%:IFfirst% A%=ram%+4:first%=FALSE 57560SYS12,2,o%,A%,addr%DIVsize%-A% 57570ENDIF 57580addr%=base%*size% 57590ENDPROC 57600DEF PROCclose 57610IFc% IFflag=3600 SYS"PhotoCD_Close",pcdh%,1 57620IFc% CLOSE#c%:c%=0:IFscrapf% scrapf%=FALSE:OSCLI"Remove <Wimp$Scrap>" 57630IFcc% CLOSE#cc%:cc%=0 57640IFccc% CLOSE#ccc%:ccc%=0 57650PROCremovecachearea 57660ENDPROC 57670DEF PROCSave 57680PROCclose 57690CASE m OF 57700WHEN -1:IFspritearea%<0 ANDoksave% THEN 57710IFo% PROCflushoutput ELSESYS"OS_File",10,f$,&004,,ram%,ram%+sz% 57720ENDIF 57730WHEN -2:o%=OPENOUTf$:BPUT#o%,pnm$ 57740CASE pnm$ OF 57750WHEN "P1" 57760BPUT#o%,"# "+f$+".pbm (options "+oname$+")" 57770BPUT#o%,STR$xsp%+" "+STR$ysp% 57780FORY%=0TOysp%-1:B%=base%+Y%*xwords% 57790FORX%=0TOxsp%-1:IFB%?(X%>>3)AND(1<<(X%AND7)) BPUT#o%,"1"; ELSEBPUT#o%,"0"; 57800NEXT 57810BPUT#o%,"" 57820NEXT 57830WHEN "P4" 57840BPUT#o%,"# "+f$+".pbm (options "+oname$+") binary encoded" 57850BPUT#o%,STR$xsp%+" "+STR$ysp% 57860FORX%=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 57870FORY%=0TOysp%-1:B%=base%+Y%*xwords% 57880FORX%=0TOxsp%-1STEP8:BPUT#o%,code%?(B%?(X%>>3)):NEXT 57890NEXT 57900WHEN "P2" 57910BPUT#o%,"# "+f$+".pgm (options "+oname$+")" 57920BPUT#o%,STR$xsp%+" "+STR$ysp% 57930BPUT#o%,"15" 57940FORY%=0TOysp%-1:B%=base%+Y%*xwords% 57950FORX%=0TOxsp%-1:C%=B%?(X%>>1):IFX%AND1 C%=C%>>4 ELSEC%=C%AND15 57960BPUT#o%," "+STR$C%; 57970NEXT 57980BPUT#o%,"" 57990NEXT 58000WHEN "P5" 58010BPUT#o%,"# "+f$+".pgm (options "+oname$+") binary encoded" 58020BPUT#o%,STR$xsp%+" "+STR$ysp% 58030BPUT#o%,"15" 58040FORY%=0TOysp%-1:B%=base%+Y%*xwords% 58050FORX%=0TOxsp%-1:C%=B%?(X%>>1):IFX%AND1 C%=C%>>4 ELSEC%=C%AND15 58060BPUT#o%,C% 58070NEXT 58080NEXT 58090ENDCASE 58100CLOSE#o%:o%=0 58110IFpnm$="P2"ORpnm$="P1" OSCLI"Settype "+f$+" &FFF" 58120WHEN -3:o%=OPENOUTf$:BPUT#o%,pnm$ 58130BPUT#o%,"# "+f$+".pcm (options "+oname$+") binary encoded 15bpp (5bits r,g,b)" 58140BPUT#o%,STR$xsp%+" "+STR$ysp% 58150BPUT#o%,"31" 58160SYS12,2,o%,ram%,xsp%*ysp%*2 58170CLOSE#o%:o%=0 58180WHEN -4:o%=OPENOUTf$:IFpnm$="IRLAM"THEN 58190BPUT#o%,"Irlam 24: "+STR$xsp%+" "+STR$ysp% 58200FORY%=0TOysp%-1:B%=ram%+Y%*xwords% 58210FORX%=0TOxsp%*3-1STEP3:BPUT#o%,B%?X%:NEXT 58220B%+=1:FORX%=0TOxsp%*3-1STEP3:BPUT#o%,B%?X%:NEXT 58230B%+=1:FORX%=0TOxsp%*3-1STEP3:BPUT#o%,B%?X%:NEXT 58240NEXT 58250ELSE 58260BPUT#o%,pnm$ 58270IFpnm$="P6" THEN 58280BPUT#o%,"# "+f$+".ppm (options "+oname$+") binary encoded 24bpp r,g,b" 58290ELSE 58300BPUT#o%,"# "+f$+".ppm (options "+oname$+") "+STR$(p6bits*3)+"bpp r,g,b" 58310ENDIF 58320BPUT#o%,STR$xsp%+" "+STR$ysp% 58330BPUT#o%,STR$(2^p6bits-1) 58340IFpnm$="P6" THEN 58350SYS12,2,o%,ram%,xsp%*ysp%*3 58360ELSE 58370FORY%=0TOysp%-1:B%=ram%+Y%*xwords% 58380FORX%=0TOxsp%-1:C%=B%!(X%*3):BPUT#o%," "+STR$(C%AND255)+" "+STR$((C%>>8)AND&FF)+" "+STR$((C%>>16)AND255); 58390NEXT 58400BPUT#o%,"" 58410NEXT 58420ENDIF 58430ENDIF 58440CLOSE#o%:o%=0 58450IFpnm$="P3" OSCLI"Settype "+f$+" &FFF" 58460WHEN -5:o%=OPENOUTf$:BPUT#o%,pnm$ 58470BPUT#o%,"# "+f$+".pcm (options "+oname$+") binary encoded 15bpp (5bits y,u,v)" 58480BPUT#o%,STR$xsp%+" "+STR$ysp% 58490BPUT#o%,"31 27 21" 58500SYS12,2,o%,ram%,xsp%*ysp%*2 58510CLOSE#o%:o%=0 58520WHEN -9,-10,-11,-12 58530IFspritearea%<0 ANDoksave% SYS8,10,f$,&c85,,ram%,ram%+jpegsize% 58540OTHERWISE 58550IFncol=1ANDm$="T" THEN 58560FORX%=(xsp%*4-1)DIV8*8+6TO6STEP-8 58570SYS&2e,&12e,ram%,oname$,X% 58580SYS&2e,&12e,ram%,oname$,X% 58590NEXT 58600ENDIF 58610IFspritearea%<0 ANDoksave% THEN 58620IFo% PROCflushoutput ELSESYS&2e,&10c,ram%,f$ 58630ENDIF 58640ENDCASE 58650IFo% CLOSE#o%:o%=0:OSCLI"settype "+f$+" &ff9":PROCremovearea 58660SYS"Hourglass_Off" 58670ENDPROC 58680DEFPROCdefpal 58690FORC%=0TO255 58700r%(C%)=(C%AND7 OR (C%AND16)>>1)/15*F 58710g%(C%)=(C%AND3 OR (C%AND&60)>>3)/15*F 58720b%(C%)=(C%AND3 OR (C%AND8)>>1 OR (C%AND128)>>4)/15*F 58730NEXT 58740ENDPROC 58750DEFPROCdefpal2 58760r%(0)=F:g%(0)=F:b%(0)=F 58770ENDPROC 58780DEFPROCdefpal4 58790r%()=15,10,5,0:FORC%=0TO3:r%(C%)=r%(C%)/15*F:NEXT 58800g%()=r%():b%()=r%() 58810ENDPROC 58820DEFPROCdefpal16 58830r%()=15,13,11,9,7,5,3,0,0,14, 0,13,14,5,15, 0 58840g%()=15,13,11,9,7,5,3,0,4,14,12, 0,14,8,11,10 58850b%()=15,13,11,9,7,5,3,0,9, 0, 0, 0,11,0, 0,15 58860FORC%=0TO15:r%(C%)=r%(C%)/15*F:g%(C%)=g%(C%)/15*F:b%(C%)=b%(C%)/15*F:NEXT 58870ENDPROC 58880DEFPROCipal63 58890PTR#c%=&38:DIM rpal%(15),gpal%(15),bpal%(15) 58900FORC%=0TO15:D%=BGET#c% 58910rpal%(C%)=BGET#c%>>4 AND 7 58920gpal%(C%)=BGET#c%>>4 AND 3 58930bpal%(C%)=BGET#c%>>4 AND 7 58940D%=FNW:NEXT 58950FORC%=0TO255 58960r%(C%)=(rpal%(C%AND15)OR(C%AND16)>>1)/15*F 58970g%(C%)=(gpal%(C%AND15)OR(C%AND&60)>>3)/15*F 58980b%(C%)=(bpal%(C%AND15)OR(C%AND128)>>4)/15*F 58990NEXT 59000ENDPROC 59010DEFPROCipal(D%) 59020PTR#c%=&38 59030FORC%=0TOD%-1:D%=BGET#c% 59040r%(C%)=(BGET#c%>>4)/15*F 59050g%(C%)=(BGET#c%>>4)/15*F 59060b%(C%)=(BGET#c%>>4)/15*F 59070D%=FNW:NEXT 59080ENDPROC 59090DEF PROCnewropal(D%) 59100PTR#c%=&38 59110FORC%=0TOD%-1:D%=FNW 59120r%(C%)=(D%AND255)/255*F 59130g%(C%)=(D%>>8AND255)/255*F 59140b%(C%)=(D%>>16AND255)/255*F 59150D%=FNW:NEXT 59160ENDPROC 59170DEF PROCnopal 59180FORC%=0TO255:r%(C%)=C%/255*F:NEXT:g%()=r%():b%()=r%() 59190ENDPROC 59200DEF PROCcol(A%,B%) 59210B%=B%<<8ORB%<<4OR&10:pal%!(A%*8)=B%:pal%!(A%*8+4)=B% 59220ENDPROC 59230DEF FNbits(A%) 59240IFA%=1 THEN="1 bit per pixel" ELSE=STR$A%+" bits per pixel" 59250DEF FNfits 59260LOCALZ%,s$ 59270FORZ%=1TO80:s$+=CHR$BGET#c%:NEXT 59280=s$ 59290DEF FNuc(a$) 59300LOCALZ%,z$,b$ 59310FORZ%=1TOLENa$ 59320z$=MID$(a$,Z%,1) 59330IFz$>="a"IFz$<="z" z$=CHR$(ASCz$-32) 59340b$+=z$:NEXT 59350=b$ 59360DEF FNdim(A%) 59370LOCAL B% 59380IFflex% THEN 59390B%=nextlocation%:A%=A%+3ANDNOT3:nextlocation%+=A% 59400SYS"Wimp_SlotSize",-1,-1 TO currentslot% 59410IFcurrentslot%+&8000<nextlocation% THEN 59420SYS "Wimp_SlotSize",nextlocation%-&8000,-1 TO currentslot% 59430IFcurrentslot%+&8000<nextlocation% ERROR 42,"Can't get enough memory to process image" 59440ENDIF 59450ELSE 59460IFworkspace%<0 THEN 59470DIM B% A% 59480ELSE 59490B%=workspace%:workspace%+=A%+3ANDNOT3:IFworkspace%>worklimit% ERROR42,"Not enough workspace" 59500ENDIF 59510ENDIF 59520=B% 59530DEF FNdimjp(RETURN A%) 59540LOCAL B% 59550IFflex% THEN 59560B%=nextlocation%:A%=A%+3ANDNOT3:nextlocation%+=A% 59570SYS"Wimp_SlotSize",-1,-1 TO currentslot% 59580IFcurrentslot%+&8000<nextlocation% THEN 59590SYS "Wimp_SlotSize",nextlocation%-&8000,-1 TO currentslot% 59600IFcurrentslot%+&8000<nextlocation% A%=currentslot%+&8000-B% 59610ENDIF 59620ELSE 59630IFworkspace%<0 THEN 59640DIM B% A% 59650ELSE 59660B%=workspace%:workspace%+=A%+3ANDNOT3:IFworkspace%>worklimit% ERROR42,"Not enough workspace" 59670ENDIF 59680ENDIF 59690=B% 59710DEF FNW=FNW1(c%) 59720DEF FNW1(c%)=BGET#c% OR BGET#c%<<8 OR BGET#c%<<16 OR BGET#c%<<24 59740DEF FNHW=BGET#c% OR BGET#c%<<8 59760DEF FNbeHW=BGET#c%<<8 OR BGET#c% 59780DEF FNbeW=BGET#c%<<24 OR BGET#c%<<16 OR BGET#c%<<8 OR BGET#c% 59800DEF FNtiff(T%) 59810CASE T% OF 59820WHEN 1,7:=BGET#c% 59830WHEN 2:LOCALs$,t$:REPEATs$+=t$:t$=CHR$BGET#c%:UNTILt$=CHR$0:=s$ 59840WHEN 3:IFbigendian THEN=BGET#c%<<8 OR BGET#c% ELSE=BGET#c% OR BGET#c%<<8 59850WHEN 4,9:IFbigendian THEN=FNbeW ELSE=FNW1(c%) 59860WHEN 6:=(BGET#c%<<24)>>24 59870WHEN 8:=(FNtiff(3)<<16)>>16 59880ENDCASE 59890ERROR 42,"Silly TIFF tag:"+STR$T% 59900DEF PROCnextstrip 59910rowstogo%=striprows% 59920stripptr+=1:PTR#c%=st%(stripptr) 59930IFcompression=5 THEN 59940!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk% 59950!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0 59960ENDIF 59970IFcompression=5 OR compression=32773 THEN 59980!incacheptr=datacache%:!numlefttogo=cache% 59990SYS12,4,c%,datacache%,cache% 60000ENDIF 60010ENDPROC 60020DEF PROCwatford(wtsx%,RETURN rep%,RETURN wt%,X%,c%) 60030CALLrlexpand%,wtsx%,rep%,wt%,X% 60040REPEAT C%=BGET#c%:CASE C%>>6 OF 60050WHEN 0:?X%=C%:X%+=1:wt%=C% 60060WHEN 1:wt%-=1:rep%=C%AND63:CALLrlexpand%,wtsx%,rep%,wt%,X% 60070WHEN 2:rep%=C%AND63:CALLrlexpand%,wtsx%,rep%,wt%,X% 60080WHEN 3:wt%+=1:rep%=C%AND63:CALLrlexpand%,wtsx%,rep%,wt%,X% 60090ENDCASE 60100UNTILX%=wtsx% 60110ENDPROC 60120DEF PROCwatfordcache(wtsx%,RETURN rep%,RETURN wt%,X%) 60130CALLrlexpand%,wtsx%,rep%,wt%,X% 60140REPEAT C%=USRbytefromcache%:CASE C%>>6 OF 60150WHEN 0:?X%=C%:X%+=1:wt%=C% 60160WHEN 1:wt%-=1:rep%=C%AND63:CALLrlexpand%,wtsx%,rep%,wt%,X% 60170WHEN 2:rep%=C%AND63:CALLrlexpand%,wtsx%,rep%,wt%,X% 60180WHEN 3:wt%+=1:rep%=C%AND63:CALLrlexpand%,wtsx%,rep%,wt%,X% 60190ENDCASE 60200UNTILX%=wtsx% 60210ENDPROC 60220DEF PROCreduce(RETURN A%,RETURN B%) 60230LOCAL C%,D%:C%=A%:D%=B% 60240REPEAT IFC%<D% SWAP C%,D% 60250C%=C%MODD% 60260UNTILC%=0 60270A%=A%DIVD%:B%=B%DIVD% 60280ENDPROC 60290DEF PROCreadpixelrow(z%()) 60300IFrows% THEN 60310rows%-=1:IFsx%=x% THEN 60320W%=EVAL(r$+"(z%())") 60330ELSE 60340W%=EVAL(r$+"(xp%())"):CALLxsample%,xmul%,xdiv%,z%(1,0),xp%(1,0),x% 60350ENDIF 60360ELSE 60370z%()=0 60380ENDIF 60390ENDPROC 60400DEF PROCsharppixelrow(z%()) 60410IFrows% THEN 60420rows%-=1:IFsx%=x% THEN 60430IFsharpen% PROCsharp(z%()) ELSEW%=EVAL(r$+"(z%())"):IFequal% PROCfit2(z%()) 60440ELSE 60450IFsharpen% PROCsharp(xp%()) ELSEW%=EVAL(r$+"(xp%())"):IFequal% PROCfit2(xp%()) 60460CALLxsample%,xmul%,xdiv%,z%(1,0),xp%(1,0),x% 60470ENDIF 60480ELSE 60490z%()=0 60500ENDIF 60510ENDPROC 60520DEF PROCsharp(z%()) 60530yread%-=1:IFyread% W%=EVAL(r$+"(rm%())"):IFequal% PROCfit2(rm%()) 60540FORB%=0TOcol:rm%(0,B%)=rm%(1,B%):rm%(sx%+1,B%)=rm%(sx%,B%):NEXT 60550CALL sharp%,z%(1,0),rm%(1,0),rm1%(1,0),rm2%(1,0),totvals2% 60560SWAP rm2%(),rm1%():rm1%()=rm%() 60570ENDPROC 60580DEF PROCscaledpixelrow(z%()) 60590IFsy%=y% THEN 60600PROCreadpixelrow(z%()) 60610ELSE 60620ysamp%-=1:IFysamp%=0 PROCreadpixelrow(xl%()):ysamp%=ymul% 60630IFydiv%=1 THEN 60640z%()=xl%() 60650ELSE 60660IFysamp%>=ydiv% THEN 60670ysamp%-=ydiv%:z%()=xl%()*ydiv% 60680ELSE 60690LOCALY%:z%()=xl%()*ysamp%:Y%=ydiv%-ysamp%:ysamp%=0 60700REPEAT 60710IFysamp%=0 PROCreadpixelrow(xl%()):ysamp%=ymul% 60720IFysamp%>Y% THEN 60730ysamp%-=Y%:xl2%()=xl%()*Y%:z%()=z%()+xl2%():Y%=0 60740ELSE 60750Y%-=ysamp%:xl2%()=xl%()*ysamp%:z%()=z%()+xl2%():ysamp%=0 60760ENDIF 60770UNTIL Y%=0 60780ENDIF 60790ysamp%+=1 60800ENDIF 60810ENDIF 60820ENDPROC 60830DEF PROCfit(z%()) 60840CALLhistequal%,z%(1,0),new%(0,0),x% 60850ENDPROC 60860DEF PROCfit2(z%()) 60870CALLhistequal%,z%(1,0),new%(0,0),sx% 60880ENDPROC 60890DEF PROCadjustpalette(mul,sub) 60900IFmul=1 AND sub=0 ENDPROC 60910FORC%=0TOcolourindex 60920r%(C%)=(r%(C%)-sub)*mul+1:g%(C%)=(g%(C%)-sub)*mul+1:b%(C%)=(b%(C%)-sub)*mul+1 60930NEXT 60940IFham THEN 60950FORC%=0TO15*4STEP4:ltable!C%=(ltable!C%-sub)*mul+1:NEXT 60960ENDIF 60970IFinput>400 THEN 60980FORC%=0TOcolourindex 60990rpal%(C%)=(rpal%(C%)-sub)*mul+1:gpal%(C%)=(gpal%(C%)-sub)*mul+1 61000bpal%(C%)=(bpal%(C%)-sub)*mul+1:table%(C%)=(table%(C%)-sub)*mul+1 61010NEXT 61020ENDIF 61030ENDPROC 61040DEF PROCcachesize(A%) 61050SYS&20023,"ChangeFSI$Cache",A%,-1 TO,,Z 61060IFZ<>0 THEN 61070SYS35,"ChangeFSI$Cache",A%,20 TO,,Z:A%?Z=13:cache%=VAL$A% 61080IFINSTR($A%,"K")ORINSTR($A%,"k") cache%=cache%*1024 61090ELSE 61100cache%=128*1024 61110ENDIF 61120ENDPROC 61130DEF PROCrefill 61140IFstriprows%>0 PROCnextstrip 61150SYS12,4,c%,datacache%,cache%:rowstogo%=cacherows%:buff%=datacache% 61160IFinput=24ORinput=48 IFrbo%>=0 rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo% 61170ENDPROC 61180DEF PROCrefillpcd 61190IFpcdblk%!4>=sy% ENDPROC 61200IFpcdblk%!12>=sy% pcdblk%!12=sy% 61220SYS"PhotoCD_GetBlock",pcdh%,,pcdblk%,datacache%,pcdindex%,,,pcdcache%,pcdcachesize% 61230rowstogo%=cacherows%:buff%=datacache%:pcdblk%!4+=cacherows%:pcdblk%!12+=cacherows% 61240rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo% 61250ENDPROC 61270DEF FN8(z%()) 61280CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),buff%:buff%+=rowbytes% 61290rowstogo%-=1:IFrowstogo%=0 PROCrefill 61300=TRUE 61320DEF FN16(z%()) 61330CALLmappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),buff%,buff% 61340buff%+=rowbytes%:rowstogo%-=1:IFrowstogo%=0 PROCrefill 61350=TRUE 61370DEF FN24(z%()) 61380CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 61390rb%+=rowbytes%:gb%+=rowbytes%:bb%+=rowbytes% 61400rowstogo%-=1:IFrowstogo%=0 PROCrefill 61410=TRUE 61430DEF FN300(z%()) 61440SYS12,4,cc%,pbuff%,sx%:CALLmappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),pbuff%,buff% 61450buff%+=rowbytes%:rowstogo%-=1:IFrowstogo%=0 PROCrefill 61460=TRUE 61480DEF FN400(z%()) 61490CALLreadline%,plbytes%,rep%,pix%,plbuff% 61500CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 61510=TRUE 61530DEF FN500(z%()) 61540CALL LZWdecode%,table%(0),c%,plbuff%,sx% 61550CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 61560=TRUE 61580DEF FN800(z%()) 61590PROCwatfordcache(wtsx%,rep%,wt%,plbuff%) 61600CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 61610=TRUE 61630DEF FN801(z%()) 61640PROCwatford(wtsx1%,rep1%,wt1%,buff%,c%) 61650PROCwatford(wtsx2%,rep2%,wt2%,wtsx1%,cc%) 61660PROCwatford(wtsx3%,rep3%,wt3%,wtsx2%,ccc%) 61670CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 61680=TRUE 61700DEF FN901(z%()) 61710SYS12,4,c%,rb%,sx%:SYS12,4,cc%,gb%,sx%:SYS12,4,ccc%,bb%,sx% 61720CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 61730=TRUE 61750DEF FN902(z%()) 61760CALLunpack%,buff%:CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 61770buff%+=rowbytes%:rowstogo%-=1:IFrowstogo%=0 PROCrefill 61780=TRUE 61800DEF FN1000(z%()) 61810X%=buff%:IFrep%>0 C%=?pa%:CALLrlexpand%,pasx%,rep%,C%,X%:pa%+=1 61820IFrep2%>0 C%=?pa%:CALLrlexpand%,pasx%,rep2%,C%,X%:pa%+=1 61830REPEAT C%=BGET#c%:IFC%=0 THEN 61840rep%=BGET#c%:C%=?pa%:CALLrlexpand%,pasx%,rep%,C%,X%:IFrep%=0 pa%+=1 61850ELSE 61860rep2%=C%AND15:rep%=C%>>4:IFrep% C%=?pa%:CALLrlexpand%,pasx%,rep%,C%,X%:IFrep%=0 pa%+=1 61870IFX%<pasx% IFrep2% C%=?pa%:CALLrlexpand%,pasx%,rep2%,C%,X%:IFrep2%=0 pa%+=1 61880ENDIF 61890UNTILX%=pasx% 61900CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),buff% 61910=TRUE 61930DEF FN1001(z%()) 61940X%=buff%:IFrep%>0 C%=?pa%:CALLrlexpand%,pasx%,rep%,C%,X%:pa%+=1 61950REPEAT rep%=BGET#c%:C%=?pa%:CALLrlexpand%,pasx%,rep%,C%,X%:IFrep%=0 pa%+=1 61960UNTILX%=pasx%:CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),buff% 61970=TRUE 61990DEF FN1100(z%()) 62000CALLreadline%,plbytes%,rep%,pix%,plbuff% 62010CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 62020=TRUE 62040DEF FN1400(z%()) 62050IFvrep% THEN 62060vrep%-=1 62070ELSE 62080G%=buff%:FORX%=1TOplanes%:G%+=rowbytes%:F%=G%-rowbytes% 62090REPEAT C%=BGET#c%:IFC%=0 THEN 62100C%=BGET#c%:IFC%=0 THEN 62110C%=BGET#c%:vrep%=BGET#c%-1 62120ELSE 62130D%=F%:SYS12,4,c%,F%,patlen%:F%+=patlen% 62140IFC%>1 FORN%=2TOC%:FORE%=0TOpatlen%-1:F%?E%=D%?E%:NEXT:F%+=patlen%:NEXT 62150ENDIF 62160ELSE 62170IFC%=128 THEN 62180C%=BGET#c%:SYS12,4,c%,F%,C%:F%+=C% 62190ELSE 62200?F%=(C%AND&80)<>0:FORE%=F%+1TOF%+(C%AND&7F):?E%=?F%:NEXT:F%+=C%AND&7F 62210ENDIF 62220ENDIF:UNTILF%>=G%:NEXT 62230CALLplancnv%,rowbytes%,buff%,pbuff% 62240ENDIF 62250CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff% 62260=TRUE 62280DEF FN1501(z%()) 62290CALLreadiff%,rowbytes%,plbuff%:rowstogo%-=1:IFrowstogo%=0 PROCnextstrip 62300CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 62310=TRUE 62330DEF FN1505(z%()) 62340CALL LZWdecode%,table%(0),c%,plbuff%,rowbytes% 62350rowstogo%-=1:IFrowstogo%=0 PROCnextstrip 62360CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 62370=TRUE 62390DEF FN1515(z%()) 62400CALL LZWdecode%,table%(0),c%,plbuff%,rowbytes% 62410rowstogo%-=1:IFrowstogo%=0 PROCnextstrip 62420CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 62430=TRUE 62450DEF FN1600(z%()) 62460CALLplancnv%,realrowbytes%,buff%,pbuff%:buff%+=rowbytes% 62470CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff% 62480rowstogo%-=1:IFrowstogo%=0 PROCrefill 62490=TRUE 62510DEF FN1601(z%()) 62520FORX%=0TOplanes%-1:F%=plbuff%+X%*rowbytes%:CALLreadiff%,rowbytes%,F%:NEXT 62530IFmasking% CALLreadiff%,rowbytes%,pbuff% 62540CALLplancnv%,rowbytes%,plbuff%,pbuff% 62550CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff% 62560=TRUE 62580DEF FN1850(z%()) 62590CALLreadiff%,rowbytes%,plbuff% 62600CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 62610=TRUE 62630DEF FN1851(z%()) 62640CALLreadiff%,rowbytes%,plbuff% 62650CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 62660=TRUE 62680DEF FN1900(z%()) 62690CALLreadline%,plbytes%,rep%,pix%,plbuff% 62700CALLplancnv%,rowbytes%,plbuff%,pbuff% 62710CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff% 62720=TRUE 62740DEF FN2000(z%()) 62750X%=buff%:REPEAT 62760C%=BGET#c%:IFC%<128 THEN 62770C%+=1:SYS12,4,c%,X%,C%:X%+=C% 62780ELSE 62790F%=X%:?F%=BGET#c%:FORC%=C%TO128STEP-1:?X%=?F%:X%+=1:NEXT 62800ENDIF 62810UNTILX%=buff%+rowbytes% 62820CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),buff% 62830=TRUE 62850DEF FN2001(z%()) 62860X%=buff%:REPEAT 62870C%=BGET#c%:IFC%<128 THEN 62880C%=(C%+1)*2:SYS12,4,c%,X%,C%:X%+=C% 62890ELSE 62900F%=X%:SYS12,4,c%,X%,2:FORC%=C%TO128STEP-1:!X%=!F%:X%+=2:NEXT 62910ENDIF 62920UNTILX%=buff%+rowbytes% 62930CALLmappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),buff%,buff% 62940=TRUE 62960DEF FN2002(z%()) 62970X%=buff%:REPEAT 62980C%=BGET#c%:IFC%<128 THEN 62990C%=(C%+1)*step24:SYS12,4,c%,X%,C%:X%+=C% 63000ELSE 63010F%=X%:SYS12,4,c%,X%,step24:FORC%=C%TO128STEP-1:!X%=!F%:X%+=step24:NEXT 63020ENDIF 63030UNTILX%=buff%+rowbytes% 63040CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 63050=TRUE 63070DEF FN2250(z%()) 63080CALLmappix%,z%(1,0),rpal%(0),r%(0),gpal%(0),g%(0),bpal%(0),b%(0),table%(0),buff% 63090buff%+=rowbytes%:rowstogo%-=1:IFrowstogo%=0 PROCrefill 63100=TRUE 63120DEF FN2300(z%()) 63130IFclrfirst% FORX%=0TOsx%-1:rb%?X%=?back%:gb%?X%=back%?1:bb%?X%=back%?2:NEXT 63140IFvrep% THEN 63150vrep%-=1 63160ELSE 63170LOCAL ERROR 63180ON ERROR LOCAL vrep%=-1:CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%:=TRUE 63190E%=FALSE:REPEAT C%=BGET#c%:D%=BGET#c%:IFC%AND&40 D%=FNHW 63200CASE C%AND&3f OF 63210WHEN 1:E%=TRUE:vrep%=D%-1:IFvrep%<0 vrep%=FALSE 63220WHEN 2:ccol%=back%?D%:cbuf%=rb%+sx%*D%:IFD%=255 cbuf%=alpha% 63230WHEN 3:FORX%=0TOD%-1:cbuf%?X%=ccol%:NEXT:cbuf%+=D% 63240WHEN 5:SYS12,4,c%,cbuf%,D%+1:cbuf%+=D%+1:IFD%+1AND1 IFBGET#c% 63250WHEN 6:C%=FNHW:FORX%=0TOD%:cbuf%?X%=C%:NEXT:cbuf%+=D%+1 63260ENDCASE 63270UNTILE% 63280ENDIF 63290CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 63300=TRUE 63320DEF FN2401(z%()) 63330CALLbm_rle8,rowbytes%,plbuff% 63340CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 63350=TRUE 63370DEF FN2402(z%()) 63380CALLbm_rle4,rowbytes%,plbuff% 63390CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff% 63400=TRUE 63420DEF FN3000(z%()) 63430CALLmappix%,z%(1,0),rpal%(0),r%(0),gpal%(0),g%(0),bpal%(0),b%(0),table%(0),buff% 63440buff%+=rowbytes%:rowstogo%-=1:IFrowstogo%=0 PROCrefill 63450=TRUE 63460DEF FN3500(z%()) 63470=TRUE 63480DEF FN3600(z%()) 63490CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 63500rb%+=rowbytes%:gb%+=rowbytes%:bb%+=rowbytes% 63510rowstogo%-=1:IFrowstogo%=0 PROCrefillpcd 63520=TRUE 63530DEF FN3708(z%()) 63540A%=jpegspace%:jpegy%-=1:B%=jpegy%:rb%=USR(jpeg%+4) 63550CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb% 63560=TRUE 63570DEF FN3724(z%()) 63580A%=jpegspace%:jpegy%-=1:B%=jpegy%:rb%=USR(jpeg%+4):gb%=rb%+1:bb%=rb%+2 63590CALLmappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb% 63600=TRUE 63610DEF PROCrewind 63620rows%=sy%:CASE flag OF 63630WHEN 0:PTR#c%=st% 63640WHEN 100:PTR#c%=4 63650WHEN 200:PTR#c%=st%:rep%=0 63660WHEN 300:PTR#c%=st%:PTR#cc%=stcc% 63670WHEN 400:PTR#c%=st%:rep%=0 63680WHEN 500:FORI%=0TOclearcode%-1:table%(I%)=I%:NEXT:PTR#c%=st% 63690!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk% 63700!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0 63710WHEN 501:buff%=datacache% 63720WHEN 600:PTR#c%=&380 63730WHEN 700:PTR#c%=st% 63740WHEN 800:PTR#c%=0:rep%=0:wt%=0 63750WHEN 801:PTR#c%=0:PTR#cc%=0:PTR#ccc%=0:rep1%=0:wt1%=0:rep2%=0:wt2%=0:rep3%=0:wt3%=0 63760WHEN 900:PTR#c%=0 63770WHEN 901:PTR#c%=0:PTR#cc%=0:PTR#ccc%=0 63780WHEN 902:PTR#c%=st% 63790WHEN 1000:PTR#c%=st%:pa%=ctable%:rep%=0:rep2%=0 63800WHEN 1100:PTR#c%=st%:rep%=0 63810WHEN 1200:PTR#c%=1600 63820WHEN 1300:PTR#c%=0 63830WHEN 1301:PTR#c%=0:PTR#cc%=0:PTR#ccc%=0 63840WHEN 1400:PTR#c%=st%:vrep%=0 63850WHEN 1500:PTR#c%=st%(0):rowstogo%=striprows%:stripptr=0 63860IFcompression=5 THEN 63870!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk% 63880!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0 63890ENDIF 63900WHEN 1600:PTR#c%=st% 63910WHEN 1700:PTR#c%=16 63920WHEN 1800,1850:PTR#c%=st% 63930WHEN 1900:PTR#c%=128:rep%=-1 63940WHEN 2000:PTR#c%=st% 63950WHEN 2100:PTR#c%=7 63960WHEN 2200:PTR#c%=st% 63970WHEN 2250:PTR#c%=st% 63980WHEN 2300:PTR#c%=st%:vrep%=0 63990WHEN 2400:PTR#c%=st% 64000WHEN 2500:PTR#c%=st% 64010WHEN 2600:PTR#c%=st% 64020WHEN 2700:PTR#c%=st% 64030WHEN 2800:PTR#c%=st% 64040WHEN 2900:PTR#c%=st% 64050WHEN 3000:PTR#c%=0 64060WHEN 3600:pcdblk%!4=0 64070WHEN 3700:jpegy%=sy% 64080WHEN 3900,3905:PTR#c%=st% 64090ENDCASE 64100IFcache% THEN 64110IFflag=3600 THEN 64120pcdblk%!12=cacherows%:PROCrefillpcd:IFcache%>=filesize% rowstogo%=-1 64130ELSE 64140IFcache%<filesize% SYS12,4,c%,datacache%,cache%:rowstogo%=cacherows% 64150ENDIF 64160buff%=datacache% 64170IFcachebytes% !incacheptr=datacache%:!numlefttogo=cache% 64180IFinput=24ORinput=48 IFrbo%>=0 rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo% 64190ENDIF 64200IFflag=1500 IFcompression=5 rowstogo%=striprows% 64210ENDPROC 64230DEF PROCAssemble_Shell 64240FORI%=0TO2STEP2 64250P%=code% 64260[ OPT I% 64270.Shell_Call 64280MOV R9,R0 64290MOV R0,#0:MOV R1,#0:MOV R2,#0:MOV R3,#2:MOV R4,#0:MOV R5,#0:MOV R6,#0:MOV R7,#0 64300SWI "OS_SetEnv" 64310STMFD R13!,{R0-R7, R12} 64320MOV R0,#0:MOV R1,#0:MOV R2,#0:MOV R3,#0 64330SWI "OS_Control" 64340STMFD R13!,{R0-R3} 64350MOV R0,#&10:MOV R1,#0:MOV R2,#0 64360SWI "XOS_ChangeEnvironment" 64370STMFD R13!,{R1,R2} 64380LDR R3,[R14,#28] 64390LDR R3,[R8,R3] 64400STMFD R13!,{R3,R9,R14} 64410SUB R9,R13,#1024 64420MOV R5,R9 64430ADR R6,Shell_Job:ADR R4,Shell_Job_End 64440.Shell_Copy 64450LDR R2,[R6],#4 64460STR R2,[R5],#4 64470CMP R6,R4 64480BCC Shell_Copy 64490MOV PC,R9 64500.Shell_Job 64510LDR R2,[R3,#-4]! 64520STR R2,[R9,#-4]! 64530CMP R3,#&8000 64540BHI Shell_Job 64550STMFD R13!,{R9} 64560ADR R0,Shell_Exit 64570MOV R1,R9:MOV R2,#0:MOV R3,#2:MOV R4,#0:MOV R5,#0:MOV R6,#0:MOV R7,#0 64580SWI "OS_SetEnv" 64590ADR R0,Shell_Error 64600ADR R1,Shell_Buffer 64610MOV R2,#0:MOV R3,#0 64620SWI "OS_Control" 64630MOV R0,#&10 64640ADR R1,Shell_UpCall 64650MVN R2,#0 64660SWI "XOS_ChangeEnvironment" 64670STR R13,Shell_Job_End 64680LDR R0,[R13,#4*2] 64690ADD R0,R0,R9 64700SUB R0,R0,#&8000 64710SWI "OS_CLI" 64720.Shell_Exit 64730MOV r0, #0 64740.Shell_Common 64750STR r0, Shell_ErrorWord 64760LDR R13,Shell_Job_End 64770LDMFD R13!,{R8,R9,R10,R14} 64780LDMFD R13!,{R1-R2} 64790MOV R0,#&10 64800SWI "OS_ChangeEnvironment" 64810LDMFD R13!,{R0-R3} 64820SWI "OS_Control" 64830LDMFD R13!,{R0-R7, R12} 64840SWI "OS_SetEnv" 64850MOV R1,#&8000 64860.Shell_Restore 64870LDR R2,[R8],#4 64880STR R2,[R1],#4 64890CMP R1,R9 64900BCC Shell_Restore 64910LDR R0,Shell_ErrorWord 64920TEQ R0,#0 64930BICEQS PC,R14,#&10000000 64940ORRNES PC,R14,#&10000000 64950.Shell_UpCall 64960MOV PC,R14 64970.Shell_Error 64980ADR r0, Shell_Buffer + 4 64990B Shell_Common 65000.Shell_Buffer 65010EQUD 0 65020EQUD &12345678 65030EQUS STRING$(128,CHR$13) 65040EQUS STRING$(128,CHR$13) 65050.Shell_ErrorWord 65060EQUD 0 65070.Shell_Job_End 65080EQUD 0 65090] 65100NEXT 65110A%=Shell_Job_End+4 65120ENDPROC 65140DEF PROCsubtask(a$) 65150IF task% THEN 65160SYS"Wimp_StartTask",a$ 65170ELSE 65190DIM code% 1024 65200PROCAssemble_Shell 65210$A%=a$:CALLShell_Call 65220ENDIF 65230ENDPROC
� > ChangeFSI �areanumber%=0 �ș"OS_GetEnv" � A$ � task%=�A$," -wimp"):�task% � �� z%(1),p%(3),s%(3),m$(30) �"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% �� version%>=350 � �3ș"OS_Memory",8+(2<<8) � ,r1,r2:vramsize%=r1*r2 �"� vramsize%>0 vram%=� �vram%=� � vram%=� � "Wimp = (1<<18) + (3<<6) ,HCreateW = Wimp+1:OpenW = Wimp+5 :CloseW = Wimp+6:RedrawW = Wimp+8 6IUpdateW = Wimp+9:GetR% = Wimp+10:GetW = Wimp+11:SetI = Wimp+13 @IGetI = Wimp+14:GetP = Wimp+15:Drag = Wimp+16:CrMenu = Wimp+20 JDcMenu = Wimp+21 T8ș "OS_SWINumberFromString",,"Wimp_PollIdle" � Poll% ^8ș "OS_SWINumberFromString",,"XOS_SpriteOp" � spopx% h6ș "OS_SWINumberFromString",,"OS_SpriteOp" � spop% r?ș "OS_SWINumberFromString",,"OS_ReadMonotonicTime" � Time% |Jș "OS_SWINumberFromString",,"ColourTrans_ReturnColourNumber" � ctran% �Dș "OS_SWINumberFromString",,"Wimp_SetCaretPosition" � Caretpos% �Dș "OS_SWINumberFromString",,"Wimp_GetCaretPosition" � Getcaret% �Sș "XOS_SWINumberFromString",,"DragASprite_Start" � dstart%;f%:�f%� 1 dstart%=0 �Wș "XOS_SWINumberFromString",,"JPEG_PlotScaled" � jpegpaint%;f%:�f%� 1 jpegpaint%=0 �3ș "OS_Byte",161,&1C � ,,f%:�(f%�2)=0 dstart%=0 �nextlocation%=� �,ș "Wimp_SlotSize",-1,-1 � originalslot% ��locale_initialise �� version%>=300 � �Y� q% 255,ifactors% 15,factors% 15,pixtrans% 255,paltemp% 1023,buffer% 255,idata% 1023 �� �a� z% 1699,q% 255,ifactors% 15,factors% 15,pixtrans% 255,paltemp% 1023,buffer% 255,idata% 2399 eidata%=idata%+2400 � &2scrap%=�:sprite%=�:sar%=�:saved%=�:z$=�12,�13) :ș "OS_Byte",161,&8C � ,,f% D �f% � 1 � N7ș"Wimp_OpenTemplate",,"<ChangeFSI$Dir>.3dTemplate" X� b6ș"Wimp_OpenTemplate",,"<ChangeFSI$Dir>.Templates" l� �� � �6� � ș"Wimp_CloseTemplate":� 0,�$+" (code "+Þ+")" ��version%>=300 � �name=q% �$$name="*":here%=0:largest_tem%=0 �;ș "Wimp_LoadTemplate", ,0,,,,name,0 � ,size%,,,,,here% �ȕ here% �+� largest_tem%<size% largest_tem%=size% � $name="*" �?ș "Wimp_LoadTemplate", ,0,,,,name,here% � ,size%,,,,,here% �� � z% largest_tem% � �dotemplate("Info") *4ș CreateW,,z% � infow%:$!(z%+88+7*32+20)=m$(21) >�dotemplate("Processing") Hș CreateW,,z% � proc% Rap%(0)=!(z%+88+8*32+20):p%(1)=!(z%+88+9*32+20):p%(2)=!(z%+88+10*32+20):p%(3)=!(z%+88+12*32+20) f�dotemplate("Output") pkș CreateW,,z% � output%:admode%=!(z%+88+20*32+20):adspcl%=!(z%+88+19*32+20):oldmode%=!(z%+88+34*32+20) ��dotemplate("Scaling") �6ș CreateW,,z% � scalew%:adscale%=!(z%+88+1*32+20) �cs%(0)=!(z%+88+10*32+20):s%(1)=!(z%+88+11*32+20):s%(2)=!(z%+88+12*32+20):s%(3)=!(z%+88+13*32+20) ��dotemplate("Save") �Rș CreateW,,z% � save%:adsave%=!(z%+88+1*32+20):adsavesprite%=!(z%+88+0*32+20) ��dotemplate("Sprite") �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) ��dotemplate("Source") �5ș CreateW,,z% � srcinfo%:adsrc%=!(z%+88+0*32+20) �dotemplate("Range") 5ș CreateW,,z% � raninfo%:adran%=!(z%+88+0*32+20) .�dotemplate("Zoom") 8Hș CreateW,,z% � zoom%:z%(0)=!(z%+88+4*32+20):z%(1)=!(z%+88+5*32+20) L�dotemplate("JPEGOutput") V5ș CreateW,,z% � jpego%:adjpegq%=!(z%+88+5*32+20) j�dotemplate("Pic") t(ș 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% �)A%=�"<ChangeFSI$Dir>.Choices":�A%=0 � �]fast%=�:dest%=1:statescale%=%10000000100:stateproc%=0:stateoutput%=&4052008:statejpeg%=&2 �N$p%(0)="":$p%(1)="2"+decimal_point$+"2":$p%(2)="24":$p%(3)="4":$adspcl%="" �=$admode%="28":$s%(0)="1":$s%(1)="4":$s%(2)="1":$s%(3)="4" �$adjpegq%="75":$oldmode%="" �� �W�#A%,fast%,dest%,statescale%,stateproc%,stateoutput%,statejpeg%,$adjpegq%,$oldmode% �6�#A%,$p%(0),$p%(1),$p%(2),$p%(3),$admode%,$adspcl% 5$p%(1)=�locale_convert($p%(1),".",decimal_point$) $�#A%,$s%(0),$s%(1),$s%(2),$s%(3) �#A% � (q%!12=1<<21 2=!q%=scalew%:�I%=0�9:�statescale%>>I%�1 q%!8=1<<21 �q%!8=0 <q%!4=I%:ș SetI,,q%:� F3�I%=10�13:�statescale%>>I%�1 q%!8=1<<21 �q%!8=0 Pq%!4=I%+6:ș SetI,,q%:� Z:!q%=proc%:�I%=0�7:�stateproc%>>I%�1 q%!8=1<<21 �q%!8=0 dq%!4=I%:ș SetI,,q%:� n?!q%=output%:�I%=0�26:�stateoutput%>>I%�1 q%!8=1<<21 �q%!8=0 xq%!4=I%:ș SetI,,q%:� �;!q%=jpego%:�I%=0�3:�statejpeg%>>I%�1 q%!8=1<<21 �q%!8=0 �q%!4=I%:ș SetI,,q%:� �*�stateoutput%>>17�1 q%!8=1<<22 �q%!8=0 �i!q%=output%:q%!12=1<<22:q%!4=7:ș SetI,,q%:q%!4=8:ș SetI,,q%:q%!4=13:ș SetI,,q%:q%!4=14:ș SetI,,q% �)�showscaletofit:$z%(0)="1":$z%(1)="1" � ș "OS_UpdateMEMC" � oldmemc �jpegsave%=� �>� � ș"OS_UpdateMEMC",oldmemc,&700:�errorbox:ș CrMenu,,-1 �ș Drag,,-1 �1�sprite% ș "Wimp_SlotSize",originalslot%,-1 �BF$="":�startfile% startfile%=�:F$=�A$,�A$,"-wimp")+6):�callFSI �� �ș Poll%,1,q% � A% Ȏ A% � %� 1 :�sprite% �redraw_window(!q%) B� 2 :�open_window(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,q%!28) "2� 3 :ș &400c3,,q%:nextlocation%=�:�removearea ,:ș "Wimp_SlotSize",originalslot%,-1:saved%=�:sprite%=� 65� 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" JJq%!12=0:q%!16=1:q%!20=dw%:q%!24=di%:q%!28=!q%:q%!32=q%!4:q%!36=!sar%+3 T&�jpegsave% �q%!40=&c85 �q%!40=&ff9 ^.temp$=�ZS(adsave%):foo%=�temp$,"."):ȕfoo% h)temp$=�temp$,foo%+1):foo%=�temp$,".") r� |,$(q%+44)=temp$+�0:!q%=44+(�temp$+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%:� �1foo%=0:A%=�ChangeFSI(A$,-1,-1,0,-1,-1,foo%,�) �+�removearea:*unset ChangeFSI$ReturnCode � �:�=Q% � � &� �dotemplate(a$) 0� A% :�version%>300 � D5ș "Wimp_LoadTemplate",,0,,,,a$+z$,0 � ,,indsize% N� A% indsize% X7ș"Wimp_LoadTemplate",,z%,A%,A%+indsize%,-1,a$+z$,0 b� lBș"Wimp_LoadTemplate",,z%,idata%,eidata%,-1,a$+z$,0 � ,,idata% v� �� �� �locale_initialise �� p% �� � �� � � decimal_point$=".":� �(ș "Territory_ReadSymbols",-1,0 � p% �decimal_point$=�?p% �� �� �locale_convert(n$,f$,t$) �� f$=t$ �=n$ �� i% i%=�n$,f$) $� i%<>0 �=�n$,i%-1)+t$+�n$,i%+1) =n$ *� �receive(q%) 4Ȏ q%!16 � >)� 0:�removearea:ș "Wimp_CloseDown":� H� 1:�q%!20<>save% � RA!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 f� p� 2:�jpegsave% � z7ș"OS_File",10,�ZS(q%+44),&c85,,sar%,sar%+jpegsize% �� � ș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 � � 8:�saved%��sprite% � $-!buffer%=�:$(buffer%+4)=m$(2)+F$+m$(3)+�0 .4ș"Wimp_ReportError",buffer%,%10111,m$(20) � ,A% 82q%!12=q%!8:�A%<>1 ș"Wimp_SendMessage",19,q%,0 BB�9,&400C1:�sprite% �getmodeinfo:ș&400d1,pic%,0,-32767,32767,0 L�showscaletofit VH� 10:ș"XOS_ReadVarVal","ChangeFSI$Dir",paltemp%,256,0,3 �,,bootlen% `paltemp%?bootlen%=13 j�#q%!20,"Run "+$paltemp% t� ~� �� �callFSI �� �checkvalues �� �A$=�deducemode:A%=47 �jpegsave%=�:�dest%=0 � �@jpegsave%=�:A$="JPEG":�geticonstate(jpego%,2) A$="JPEGMONO" �A$+=$adjpegq% �� � �geticonstate(output%,15) � �A$+=$adspcl% �� � �geticonstate(output%,16) � ?�geticonstate(output%,5)��geticonstate(output%,11) A$+="R" � ș53,�A$,3 �,,A% �A%=63 � (&�geticonstate(output%,6) A$="27t" 2'�geticonstate(output%,12) A$="12t" <� F�A%=255 A$+="d" P� Z� d� n� x/A$="garbage "+F$+" <ChangeFSI$Dir>.Foo "+A$ ��ChangeFSISuffix �%info$="":range$=m$(19):cputime%=0 �6�sprite% !q%=pic%:ș &400c3,,q%:saved%=�:sprite%=� �nextlocation%=� �3ș "Wimp_SlotSize",originalslot%,-1:�removearea �1�fast% ș "OS_UpdateMEMC",&300,&700 � oldmemc �4A%=�ChangeFSI(A$,-1,-1,nextlocation%,0,0,sar%,0) �*�fast% ș "OS_UpdateMEMC",oldmemc,&700 �%�scrap% scrap%=�:ș"OS_File",6,F$ ��A%<2 � sar%<>0 � �*$adsx%=�xsp%:$adsy%=�ysp%:�jpegsave% � �"$adsm%="JPEG":$adsname%="JPEG" �$adsbytes%=�jpegsize% x=xsp%*2:y=ysp%*2 %ș&35,-1,4 �,,nx:ș&35,-1,5 �,,ny =!ifactors%=1:ifactors%!4=1:ifactors%!8=nx:ifactors%!12=ny "$adsavesprite%="file_c85" ,%� �F$,7)="<Wimp$S" F$="JPEGImage" 6� @'ș spopx%,&10d,sar%,pixtrans%,255,1 J7n$=�ZS(pixtrans%):ș spopx%,&128,sar%,n$ �,,,x,y,,m T$adsm%=�m:$adsname%=n$ ^$adsbytes%=�sar%!12 hș&35,m,4 �,,nx:x=x<<nx r(ș&35,m,5 �,,ny:y=y<<ny:�getmodeinfo |$adsavesprite%="file_ff9" �&� �F$,7)="<Wimp$S" F$="SpriteFile" �� �/!q%=save%:q%!4=0:q%!8=0:q%!12=0:ș SetI,,q% �c$adran%=range$:$adsrc%=info$+m$(0)+�(cputime%�100)+decimal_point$+�"0"+�(cputime%�100),2)+m$(1) �saved%=�:sprite%=� �'A%=�F$:ȕ�"."+F$,A%,1)<>".":A%-=1:� �$adsave%=�"."+F$,A%+1) �pic%=�create_window(x,y,F$) ��popup(pic%,-1) � � &� �checkvalues 0� e,error$,flag% D � dest%=0 � �$adjpegq%>100 � N1e=1:error$=m$(22)+m$(25)+m$(23)+m$(27)+m$(24) X� l"� �$admode%,1)<"A" � dest%=1 � vș &35,�$admode%,0 � ;flag% �� �$admode%=0 flag%=2 �+� �$admode%>127 � �$admode%<256 flag%=2 �� (flag%�2)>0 � �1e=2:error$=m$(22)+m$(26)+m$(23)+m$(13)+m$(24) �� �� � � e � �1ș Drag,,-1:!buffer%=e:$(buffer%+4)=error$+�0 �2ș "Wimp_ReportError",buffer%,%01,m$(20) � ,A% �+�A%=2 �removearea:ș "Wimp_CloseDown":� �� �=e � �ChangeFSISuffix safe%=� F�geticonstate(scalew%,1) A$+=" "+�tofitx+": "+�tofity+":":safe%=� *0�geticonstate(scalew%,5) A$+=" 1:2":safe%=� 44�geticonstate(scalew%,4) A$+=" 1:2 1:1":safe%=� >4�geticonstate(scalew%,3) A$+=" 1:1 1:2":safe%=� H�geticonstate(scalew%,9) � Rsafe%=� \%�$s%(0) A$+=" "+$s%(0) �A$+=" 1" fA$+=":"+$s%(1) p%�$s%(2) A$+=" "+$s%(2) �A$+=" 1" zA$+=":"+$s%(3) �� �,�geticonstate(scalew%,0) A$+=" -nosize" �.�geticonstate(scalew%,18) A$+=" -noscale" �+�geticonstate(scalew%,19) A$+=" -lock" ��geticonstate(scalew%,6) � �Fsafe%=�:�geticonstate(scalew%,16) A$+=" -rotate" �A$+=" -rotate-" �� �3�geticonstate(scalew%,7) A$+=" -hflip":safe%=� �3�geticonstate(scalew%,8) A$+=" -vflip":safe%=� �1�geticonstate(proc%,0) A$+=" -range":safe%=� �1�geticonstate(proc%,1) A$+=" -equal":safe%=� �,�geticonstate(proc%,2) A$+=" -nodither" �2�geticonstate(proc%,3) A$+=" -invert":safe%=� ,�geticonstate(proc%,4) A$+=" -brighten" 0�geticonstate(proc%,5) A$+=" -black"+$p%(0) \�geticonstate(proc%,6) A$+=" -gamma"+�locale_convert($p%(1),decimal_point$,"."):safe%=� $:�geticonstate(proc%,7) A$+=" -sharpen"+$p%(2):safe%=� .2�geticonstate(proc%,11) A$+=" -smooth"+$p%(3) 8� L� �checkandfinish V7�saved% ��sprite% �removearea:ș "Wimp_CloseDown":� `-!buffer%=�:$(buffer%+4)=m$(2)+F$+m$(3)+�0 j5ș "Wimp_ReportError",buffer%,%10111,m$(20) � ,A% t+�A%=1 �removearea:ș "Wimp_CloseDown":� ~� �� �key(handle%,icon%,key%) ��key%=&1b ș CrMenu,,-1:� �Ȏ handle% � �� zoom%:Ȏ key% � �C� 13:�dozoom(icon%-4,0):�icon%=4 ș &400d2,zoom%,5,,,-1,�$z%(0) ��icon%=5 ș CrMenu,,-1 �� �"� &18e,&18f:�dozoom(icon%-4,0) �0ș &400d2,zoom%,icon%�1,,,-1,�$z%(icon%�5):� �� �� save% �key%=13 �savesprite:� � output% p� icon%=34 � �geticonstate(output%, 24) �$admode% = $oldmode%:!q%=output%:q%!4=20:q%!8=0:q%!12=0:ș SetI,,q% �showscaletofit (�key%=13 ș CrMenu,,-1:� 2�key%=&18e � <Ȏ icon% � F� 19:icon%=34:key%=oldmode% P� 34:icon%=22:key%=adjpegq% Z� 22:icon%=19:key%=adspcl% d� n� x�key%=&18f � �Ȏ icon% � �� 22:icon%=34:key%=oldmode% �� 34:icon%=19:key%=adspcl% �� 19:icon%=22:key%=adjpegq% �� �� �4�key%>1024 ș &400d2,output%,icon%,,,-1,�$key%:� �� proc%:Ȏ key% � �A� &18e,13:icon%+=1:�icon%>10 icon%=8:�key%=13 ș CrMenu,,-1:� �.ș &400d2,proc%,icon%,,,-1,�$p%(icon%-8):� �%� &18f:icon%-=1:�icon%<8 icon%=10 �.ș &400d2,proc%,icon%,,,-1,�$p%(icon%-8):� �� � scalew%:Ȏ key% � B� &18e,13:icon%+=1:�icon%>13 icon%=10:�key%=13 ș CrMenu,,-1:� 1ș &400d2,scalew%,icon%,,,-1,�$s%(icon%-10):� "&� &18f:icon%-=1:�icon%<10 icon%=13 ,1ș &400d2,scalew%,icon%,,,-1,�$s%(icon%-10):� 6� @� Jș "Wimp_ProcessKey",key% T� h� �savesprite r� F$=$adsave% � |1ș Drag,,-1:!buffer%=3:$(buffer%+4)=m$(28)+�0 �2ș "Wimp_ReportError",buffer%,%11,m$(20) � ,A% ��A%=2 � �ș CrMenu,,-1 �� �� �� ��jpegsave% � �5ș"OS_File",10,$adsave%,&c85,,sar%,sar%+jpegsize% �� �ș spop%,&10C,sar%,$adsave% �� �ș CrMenu,,-1 �� 7� �checkmouse(mousex%,mousey%,b%,handle%,icon%,ob%) � moved%:moved%=� &�b%�2 � 0Ȏ handle% � :|� pic%:�domenu(pic%,m$(4)+">sinfo%,"+m$(5)+">srcinfo%,"+m$(6)+">raninfo%,"+m$(7)+">zoom%,"+m$(8)+">save%,"+m$(9),m$(20)) D�� -2:�domenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%:dest%,"+m$(27)+">jpego%:1-dest%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20)) N� Xrmenuhandle%=handle% b� l�b%�4 � vȎ handle% � �� zoom%:Ȏ icon% � �� 0:�dozoom(0,1) �� 1:�dozoom(0,-1) �� 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) � � *� 4�b%�5 � >Ȏ handle% � H�� output%:� dest%=0 dest%=1:�domenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%:dest%,"+m$(27)+">jpego%:1-dest%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20)):ș Getcaret%,,q%:moved%=� RȎ icon% � \n� 3,4,5,6:�killcurrent(�(22+icon%)):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:ș SetI,,q%:q%!4=24:ș SetI,,q% fh� 7:�killcurrent("S16,90,90"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:ș SetI,,q%:q%!4=24:ș SetI,,q% ph� 8:�killcurrent("S32,90,90"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:ș SetI,,q%:q%!4=24:ș SetI,,q% z`� 9:�killcurrent("0"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:ș SetI,,q%:q%!4=24:ș SetI,,q% �a� 10:�killcurrent("8"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:ș SetI,,q%:q%!4=24:ș SetI,,q% �b� 11:�killcurrent("12"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:ș SetI,,q%:q%!4=24:ș SetI,,q% �b� 12:�killcurrent("15"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:ș SetI,,q%:q%!4=24:ș SetI,,q% �i� 13:�killcurrent("S16,90,45"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:ș SetI,,q%:q%!4=24:ș SetI,,q% �i� 14:�killcurrent("S32,90,45"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:ș SetI,,q%:q%!4=24:ș SetI,,q% ��� 15:�killcurrent(�deducemode):ș SetI,,q%:ș Caretpos%,output%,19,,,-1,�($adspcl%):!q%=output%:q%!4=7:q%!8=0:q%!12=1<<22:ș SetI,,q%:q%!4=8:ș SetI,,q%:q%!4=13:ș SetI,,q%:q%!4=14:ș SetI,,q% ��� 16:�killcurrent(�deducemode):!q%=output%:q%!4=7:q%!8=0:q%!12=1<<22:ș SetI,,q%:q%!4=8:ș SetI,,q%:q%!4=13:ș SetI,,q%:q%!4=14:ș SetI,,q% ʓ� 17:�killcurrent(�deducemode):!q%=output%:q%!4=7:q%!8=1<<22:q%!12=1<<22:ș SetI,,q%:q%!4=8:ș SetI,,q%:q%!4=13:ș SetI,,q%:q%!4=14:ș SetI,,q% �� �$admode%,1) = "S" � �� �$admode%,2) = "45" � �]�killcurrent("15"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:ș SetI,,q%:q%!4=24:ș SetI,,q% �� �]�killcurrent("28"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:ș SetI,,q%:q%!4=24:ș SetI,,q% � � ;� 18:!q%=output%:q%!4=24:q%!8=0:q%!12=1<<21:ș SetI,,q% $� 24:!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:ș SetI,,q%:�killcurrent(�deducemode):ș Caretpos%,output%,34,,,-1,�($oldmode%) .B� 34:� moved% ș Caretpos%,output%,q%!4,q%!8,q%!12,q%!16,q%!20 8B� 19:� moved% ș Caretpos%,output%,q%!4,q%!8,q%!12,q%!16,q%!20 B� L3�geticonstate(output%,18) $admode%=�deducemode V2!q%=output%:q%!4=20:q%!8=0:q%!12=0:ș SetI,,q% `�showscaletofit j� save%:Ȏ icon% � t� 2:�savesprite ~� �M� -2:�sprite% �getw(pic%):�open_window(pic%,x0%,y0%,x1%,y1%,scx%,scy%,-1) �� jpego%:� dest%=1 � �ș Getcaret%,,q% ��dest%=0:�domenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%:dest%,"+m$(27)+">jpego%:1-dest%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20)) �=� icon%=5 ș Caretpos%,jpego%,q%!4,q%!8,q%!12,q%!16,q%!20 �� �Ȏ icon% � �D� 3:� b%�4 �$adjpegq%=�(�$adjpegq%-1) �$adjpegq%=�(�$adjpegq%+1) � � �$adjpegq%<0 $adjpegq%="0" �$� �$adjpegq%>100 $adjpegq%="100" �0!q%=jpego%:q%!4=5:q%!8=0:q%!12=0:ș SetI,,q% �)ș Caretpos%,jpego%,5,,,-1,�$adjpegq% D� 4:� b%�4 �$adjpegq%=�(�$adjpegq%+1) �$adjpegq%=�(�$adjpegq%-1) � �$adjpegq%<0 $adjpegq%="0" $� �$adjpegq%>100 $adjpegq%="100" 0!q%=jpego%:q%!4=5:q%!8=0:q%!12=0:ș SetI,,q% ()ș Caretpos%,jpego%,5,,,-1,�$adjpegq% 2� 5 <� F� P� Z �b%�&50 � dȎ handle% � n� save%:Ȏ icon% � x� 0:�getw(save%) � !q%=save%:q%!4=0:ș GetI,,q% �?!q%=save%:q%!4=5:q%!8+=bx%:q%!12+=by%:q%!16+=bx%:q%!20+=by% �3q%!24=0:q%!28=0:q%!32=&7FFFFFFF:q%!36=&7FFFFFFF �*t$="file_ff9":�jpegsave% t$="file_c85" �H�dstart% ș dstart%,%11000101,1,t$,q%+8,q%+24 �ș "Wimp_DragBox",,q% �� �� �� �� �� �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% 6pic%=�create_window(x,y,F$) @�popup(pic%,f%) J� ^'� �domenu(handle%,menu$,menutitle$) hmenuhandle%=handle% r%menuptr%=buffer%:indirect%=idata% |i%=0 �menuptr%!20=44 �$menuptr%=menutitle$ �;menuptr%?12=7:menuptr%?13=2:menuptr%?14=7:menuptr%?15=0 �!menuptr%!16=200:menuptr%!24=0 �menuptr%+=28 �%� i1%=i%+1:i%=�menu$+",",",",i1%) �8item$=�menu$,i1%,i%-i1%):�menuitem(item$):� item$="" �#menuptr%!-24=(menuptr%!-24)�&80 �`�handle%=101 ș CrMenu,,buffer%,mousex%-64,96+9*44 �ș CrMenu,,buffer%,mousex%-32,mousey%+16 �� �� �menuitem(text$) �� text$="" � *flg%=0:submenu%=-1:I%=�text$,":"):�I%� )flg%=��text$,I%+1):text$=�text$,I%-1) � &I%=�text$,">"):�I%� 0-submenu%=��text$,I%+1):text$=�text$,I%-1) :� Dmenuptr%!0=flg% Nmenuptr%!4=submenu% XV�(text$=m$(9)�(F$="" � F$="SpriteFile" � F$="JPEGImage")) � (text$=m$(14)�vram%) � bmenuptr%!8=&07400021 l� vmenuptr%!8=&07000021 �� �2�text$*16+8>buffer%!16 buffer%!16=�text$*16+8 ��text$>12 � �Bmenuptr%!8=menuptr%!8 � 256:menuptr%!20=�text$+1:menuptr%!16=0 �>menuptr%!12=indirect%:$indirect%=text$:indirect%+=�text$+2 �� �$(menuptr%+12)=text$ �� �menuptr%+=24 �� �� �menuselect(menus%) �,ș GetP,,paltemp%:adjust%=paltemp%!8 � 1 -ș DcMenu,,buffer%,menus%,�200," ")�,,,a$ � a$="" �� Ȏ menuhandle% � � pic% *Ȏ a$ � 4� m$(9):�callFSI >� H � 101 RȎ a$ � \� m$(14):fast%=�fast% f� m$(27):dest%=0 p� m$(13):dest%=1 z� 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�26:stateoutput%+=�geticonstate(output%,I%)<<I%:� �Cstatejpeg%=0:�I%=0�3:statejpeg%+=�geticonstate(jpego%,I%)<<I%:� �!A%=�"<ChangeFSI$Dir>.Choices" �W�#A%,fast%,dest%,statescale%,stateproc%,stateoutput%,statejpeg%,$adjpegq%,$oldmode% �Z�#A%,$p%(0),�locale_convert($p%(1),decimal_point$,"."),$p%(2),$p%(3),$admode%,$adspcl% �$�#A%,$s%(0),$s%(1),$s%(2),$s%(3) ��#A% �� m$(16):�checkandfinish �� � 0�adjust% �checkmouse(0,0,2,rmenuhandle%,0,0) � . � �create_window(x,y,title$) 8+x=x*�$z%(0)��$z%(1):y=y*�$z%(0)��$z%(1) B !z%=0:z%!4=-y:z%!8=x:z%!12=0 L$z%!40=0:z%!44=-y:z%!48=x:z%!52=0 V%�x<128 � y<128 z%?35=0 �z%?35=255 `)$adtitle%="":ș CreateW,,z% � handle% j$adtitle%=title$ t=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%) �handle%=-1�� q%!0=handle%:q%!28=bhandle% )q%!4=x0%:q%!8=y0%:q%!12=x1%:q%!16=y1% q%!20=scx%:q%!24=scy% (ș OpenW,,q% 2� F� �getw(handle%) P!q%=handle%:ș GetW,,q% Z+�info(q%+4):bhandle%=q%!28:flags%=q%!32 d� x� �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% �ș RedrawW,,q% � more% �,�info(q%+4):by%=by%-�(y*�$z%(0)��$z%(1)) �ȕ more% �jpegsave% � Q�jpegpaint% ș jpegpaint%,sar%,bx%,by%,factors%,jpegsize%,1 �;V%:�(V%�1)=0 �� � "1ș spopx%,&134,sar%,n$,bx%,by%,,factors%,spx% ,� 6ș GetR%,0,q% � more% @� J� T� h"� �geticonstate(handle%,icon%) r&!q%=handle%:q%!4=icon%:ș GetI,,q% |=q%!24>>21 � 1 �� �getmodeinfo ��jpegsave% � �%ș&35,-1,4 �,,nx:ș&35,-1,5 �,,ny �=!ifactors%=1:ifactors%!4=1:ifactors%!8=nx:ifactors%!12=ny �� �� �>ș"XWimp_ReadPixTrans",&100,sar%,n$,,,,ifactors%,pixtrans% �$ș spopx%,&118,sar%,n$ � ,,sptr% �� sptr%!32=44 � � palptr%=0 �� �A� grab%=0 � 2048-8 � 8:paltemp%!(grab%>>1)=sptr%!(grab%+44):� palptr%=paltemp% � �Q%=0�255:pixtrans%?Q%=Q%:� &�sptr%!32=44+2048 � 05�Q%=0�255:șctran%,palptr%!(Q%<<2)�pixtrans%?Q%:� :� D:ș "ColourTrans_SelectTable",m,palptr%,-1,-1,pixtrans% N� X6spx%=-1:�Q%=0�255:�pixtrans%?Q%<>Q% spx%=pixtrans% b� l� �� �deducemode �� m,x,y � �geticonstate(output%,21) � �3�geticonstate(output%,17) �="JPEG8" �="JPEG24" �� � �geticonstate(output%,18) � �ș &6,135 � ,,m �ș&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 � =�� � � *!� �geticonstate(output%,24) � 4=$oldmode% >� H =$admode% R� \� f� z� �showscaletofit �� m,x,y �$admode%=�deducemode �Ȏ ?admode% � � � �"S" �)�$admode%,5)>��$admode%,8) x=6 �x=0 � �$admode%,2)>16 x+=5 �x+=4 �/ș&35,-1,11 �,,tofitx:ș&35,-1,12 �,,tofity � � �"J" �/ș&35,-1,11 �,,tofitx:ș&35,-1,12 �,,tofity �x=12 � �m=�$admode% -ș&35,m,11 �,,tofitx:ș&35,m,12 �,,tofity /ș&35,m,4 �,,x:ș&35,m,5 �,,y:�y>x x=6 �x=0 ș&35,m,9 �,,y:x+=y $� .?tofitx+=1:tofity+=1:$adscale%=m$(17)+�tofitx+m$(18)+�tofity 8=q%!12=1<<21:!q%=output%:�I%=0�11:�I%=x q%!8=1<<21 �q%!8=0 B<q%!4=I%+3:ș SetI,,q%:�:�x=12 q%!8=0:q%!4=24:ș SetI,,q% L� `� �killcurrent(m$) j"q%!12=1<<21:!q%=output%:q%!8=0 tq%!4=20:ș SetI,,q% ~$admode%=m$ �� �+ݤZS(I%)�A$:�A$+=�?I%:I%+=1:�?I%<14:=A$ �� �errorbox �>ș Drag,,-1:!buffer%=�:$(buffer%+4)=�$+" (code "+Þ+")"+�0 �2ș "Wimp_ReportError",buffer%,%11,m$(20) � ,A% �+�A%=2 �removearea:ș "Wimp_CloseDown":� �� �S� �ChangeFSI(A$,spritearea%,workspace%,worklimit%,oksave%,okinfo%,� ram%,fast%) �M� A$(),r%(),g%(),b%(),rpal%(),gpal%(),bpal%(),table%(),cl%(),xl%(),xl2%() �M� xp%(),rm%(),rm1%(),rm2%(),vals%(),nl%(),A%(),B%(),new%(),st%(),jpq%(),m �$ȕ�A$,1)<>" "��A$<>0 A$=�A$,2):� �ȕ�A$,1)=" " A$=�A$,2):� �ȕ�A$,1)=" " A$=�A$):� �uc(�A$,5))="-QUIT" � .A$=�A$,7):ȕ�A$,1)<>" "��A$<>0 A$=�A$,2):� ȕ�A$,1)=" " A$=�A$,2):� "� , � A$(100):ARG%=0:B%=�A$," ") 6ȕ B%<>0 @+ARG%+=1:A$(ARG%)=�A$,B%-1):A$=�A$,B%+1) Jȕ �A$,1)=" ":A$=�A$,2):� TB%=�A$," ") ^� h�A$<>"" ARG%+=1:A$(ARG%)=A$ rXinvert%=�:range%=�:sharpen%=�:info%=�:cache%=�:cacheareanumber%=0:dither%=�:black%=� |Chist%=�:equal%=�:vflip%=�:hflip%=�:scale%=�:scaleo%=�:scrapf%=� �6gamma=1:rotate%=�:max%=20000000:bright%=15:lock%=� �rwt=.299:gwt=.587:bwt=.114 � �ARG%<3 � �J�"ChangeFSI interactive input (read FSIinfo for command line details)" �?�"Source file: "s$,"Destination file: "f$,"Output mode: "m$ �/�"(X)Scale (e.g. 2:1): "xs$:�"Y Scale: "ys$ �8�"Info on input picture?"a$:�uc(�a$,1))="Y" info%=� �;�"Invert picture colours?"a$:�uc(�a$,1))="Y" invert%=� �=�"Compute histogram of input?"a$:�uc(�a$,1))="Y" hist%=� �@�"Apply histogram equalisation?"a$:�uc(�a$,1))="Y" equal%=� �G�"Expand input dynamic range?"a$:�uc(�a$,1))="Y" range%=�:equal%=� �=�"Sharpen picture by (e.g. 12 for harsh, 24 for soft) "a$ ��a$<>"" sharpen%=�a$ +�"Rotate?"a$:�uc(�a$,1))="Y" rotate%=1 scale%=�:scaleo%=�:fast%=� � & � A%=ARG% 06�uc(A$(ARG%))="-INFO" info%=�:A$(ARG%)="":ARG%-=1 :6�uc(A$(ARG%))="-HIST" hist%=�:A$(ARG%)="":ARG%-=1 D6�uc(A$(ARG%))="-LOCK" lock%=�:A$(ARG%)="":ARG%-=1 NA�uc(A$(ARG%))="-EQUAL" equal%=�:range%=�:A$(ARG%)="":ARG%-=1 XA�uc(A$(ARG%))="-RANGE" range%=�:equal%=�:A$(ARG%)="":ARG%-=1 b:�uc(A$(ARG%))="-INVERT" invert%=�:A$(ARG%)="":ARG%-=1 lD�uc(A$(ARG%))="-NOSCALE" scale%=�:scaleo%=�:A$(ARG%)="":ARG%-=1 v9�uc(A$(ARG%))="-NOSIZE" scale%=�:A$(ARG%)="":ARG%-=1 �<�uc(A$(ARG%))="-NODITHER" dither%=�:A$(ARG%)="":ARG%-=1 �=�uc(A$(ARG%))="-BRIGHTEN" bright%=16:A$(ARG%)="":ARG%-=1 �:�uc(A$(ARG%))="-ROTATE" rotate%=1:A$(ARG%)="":ARG%-=1 �<�uc(A$(ARG%))="-ROTATE-" rotate%=-1:A$(ARG%)="":ARG%-=1 �8�uc(A$(ARG%))="-VFLIP" vflip%=�:A$(ARG%)="":ARG%-=1 �8�uc(A$(ARG%))="-HFLIP" hflip%=�:A$(ARG%)="":ARG%-=1 �8�uc(A$(ARG%))="-NOMODE" fast%=�:A$(ARG%)="":ARG%-=1 �!�uc(�A$(ARG%),6))="-BLACK" � �Fblack%=32:�A$(ARG%)>6 black%=��A$(ARG%),7):�black%>128 black%=128 �A$(ARG%)="":ARG%-=1 �� �!�uc(�A$(ARG%),6))="-GAMMA" � �.gamma=2.2:�A$(ARG%)>6 gamma=��A$(ARG%),7) !A$(ARG%)="":ARG%-=1 !� !#�uc(�A$(ARG%),8))="-SHARPEN" � ! 3sharpen%=24:�A$(ARG%)>8 sharpen%=��A$(ARG%),9) !*A$(ARG%)="":ARG%-=1 !4� !>"�uc(�A$(ARG%),7))="-SMOOTH" � !H4sharpen%=-1:�A$(ARG%)>7 sharpen%=-��A$(ARG%),8) !R2A$(ARG%)="":ARG%-=1:�sharpen%<-23 sharpen%=-23 !\� !fC�uc(�A$(ARG%),4))="-RED" rwt=��A$(ARG%),5):A$(ARG%)="":ARG%-=1 !pE�uc(�A$(ARG%),6))="-GREEN" gwt=��A$(ARG%),7):A$(ARG%)="":ARG%-=1 !zD�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%=� !�� !�<�worklimit%=0 �flex%=� �flex%=�:nextlocation%=worklimit% !�� ""pnm$=�uc(m$):Ȏ �pnm$+",",3) � "�"AIM":m=-1:m$="" ""�"P1,","P4,":m=-2:m$="":spm=18 "$#�"P2,","P5,":m=-2:m$="T":spm=20 ".=�"P3,","P6,":m=-4:pnm$=�pnm$,2):p6bits=8:I%=��m$,4):m$="" "8�I%>0�I%<8 p6bits=I% "B�"P15":m=-3:m$="" "L�"C15":m=-5:m$="" "V�"IRL":m=-4:m$="":p6bits=8 "`�"S16":m=-6:m$="" "j�"S24":m=-7:m$="":p6bits=8 "t�"S32":m=-8:m$="":p6bits=8 "~h�"JPE":m$="":p6bits=8:�pnm$,8)="JPEGMONO" m=-9:jpegquality%=��pnm$,9) �m=-10:jpegquality%=��pnm$,5) "�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 � "�Cpanic=�:ș8,5,s$+".raw" � r0,,r2:�r0=1 s$+=".raw":dir=�:panic=� # 1�panic ș8,5,s$+".red" � r0,,r2:�r0=1 panic=� # !�panic � 42,"Directory given" #� #>ftype=r2>>8 � &FFF:bits=28:F=2^bits:c%=0:cc%=0:ccc%=0:o%=0 #( �dir � #2>c%=�(s$+".red"):�c%=0 � 42,"Red file "+s$+".red not found" #<Ecc%=�(s$+".green"):�cc%=0 �42,"Green file "+s$+".green not found" #FDccc%=�(s$+".blue"):�ccc%=0 �42,"Blue file "+s$+".blue not found" #P� #Z-c%=�s$:�c%=0 � 42,"File "+s$+" not found" #d� #n� � #x� � � � �:� �:�close:� �,�$ #�colourindex=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=� $!� &DFA:flag=800:�dir flag=801 $� &DE2:flag=1000 $� &CBE:flag=3800 $" � &BE8:�(pcd%�1)=0 flag=3600 $,� &7A0:flag=1200 $6� &69d:flag=2000 $@� &699:flag=700 $J� &698:flag=100 $T� &697:flag=1900 $^� &691:flag=2600 $h� &690:flag=2500 $r� &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�22:S$+=��#c%:� $��S$,7)="FSIfile" flag=2100 $�)�flag=-1 �S$,8)="SIMPLE " flag=2800 $�C�flag=-1 �uc(�S$,8))="MERCSOFT"��uc(�S$,8))="SNAPSHOT"flag=902 $�-�flag=-1 �uc(�S$,8))="MERCSOF1" flag=903 $�4�flag=-1 �uc(�S$,13))="IRLAM YUV 411" flag=2250 $�&�flag=-1 �S$,5)="Irlam" flag=2200 %.�flag=-1 �S$,2)="BM" flag=2400:riffoff%=0 %X�flag=-1 �S$,4)="RIFF" � �S$,9,8)="RDIBdata" � �S$,21,2)="BM" flag=2400:riffoff%=20 %$�flag=-1 �S$,4)="GIF8" flag=500 %&%�flag=-1 �S$,5)="AV_VO" flag=600 %02�flag=-1 �S$,4)=�&59+�&A6+�&6A+�&95 flag=1100 %:*�flag=-1 �S$,4)=�0+�1+�0+�8 flag=1400 %D*�flag=-1 �S$,4)=�0+�1+�0+�1 flag=2900 %N%�flag=-1 �S$,4)="RIX3" flag=2700 %X3�flag=-1 �S$,4)="II*"+�0 flag=1500:bigendian=� %b6�flag=-1 �S$,4)="MM"+�0+"*" flag=1500:bigendian=� %l(�flag=-1 �S$,2)=�&52+�&CC flag=2300 %vD�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 �S$,3)="T-I" flag=3800 %�)�flag=-1 �uc(�S$,3))="P13" flag=3450 %�6�flag=-1 �S$,4)="FORM" �S$,9,4)="ILBM" flag=1600 %�:�flag=-1 �S$,8)="ALPIAR12" flag=3900:colourindex=4095 %�;�flag=-1 �S$,8)="ALPIAR16" flag=3905:colourindex=65535 %��flag=-1 � %�#�S$,7,4)="JFIF" � ftype=&C85 � %�*jpegblk%=�dim(20):�cachesize(jpegblk%) %��cache%<�#c% � %��#c%:c%=0:X%=�"Run:djpeg" %� �X% � &.�#X%:�subtask("djpeg "+s$+" <Wimp$Scrap>") &� &0ș"XOS_CLI","djpeg "+s$+" <Wimp$Scrap>" � ;V & �V �1 � &*9�subtask("<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 � &��S$,5)="btpc " � &�B�#c%:c%=0:�subtask("<ChangeFSI$Dir>.btpc "+s$+" <Wimp$Scrap>") &�"c%=�"<Wimp$Scrap>":�c%=0 �=100 &�7scrapf%=�:flag=3300:info$="BTPC file converted to " &�� &�� &��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%:� '8%�S$,4)="PNTG" flag=1800:st%=&2e2 'B� 'L�flag=-1 � 'V&�#c%=522:S$="":�I%=1�8:S$+=��#c%:� '`2�S$=�0+�&11+�2+�&ff+�&c+�0+�&ff+�&fe flag=1850 'j� 't�flag=-1 � '~�#c%=0:�#c%=10 � '�+C%=�#c%:�C%<6 � C%<>1 ��#c%=1 flag=1900 '�� '�� '�M�flag=-1 �"."+�uc(s$),".PCX.")���uc(s$),":PCX.")��s$,4)="/PCX" flag=1900 '�B�flag=-1 �"."+�uc(s$),".IMAGE.")���uc(s$),":IMAGE.") flag=400 '�)�flag=-1 �uc(�s$,4))=".RAW" flag=100 '�)�flag=-1 �uc(�s$,3))="TGA" flag=2000 '�)�flag=-1 �uc(�s$,3))="VDA" flag=2000 '�>�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) � ( k�#c%:c%=0:�subtask("<ChangeFSI$Dir>.hpcdtoppm -3 -a "+s$+" <Wimp$Scrap> { > <ChangeFSI$Dir>.pcdtemp }") (Mc%=�"<Wimp$Scrap>":scrapf%=�:flag=3300:info$="PhotoCD file converted to " (� ((� (2c�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 (F9compression=0:hpredict%=1:striprows%=-1:cachebytes%=� (P�xdiv%=0 � ydiv%=0 scale%=� (Z� r%(colourindex) (d%� g%(colourindex),b%(colourindex) (n Ȏ flag � (x� 0 (�@quant%=4:�#c%=4:F%=�W+&1C:�#c%=F%:st%=�W+F%-&20:K%=�W+F%-&20 (�sm=�W:�sm<256 � (�ș53,sm,3 � ,,I% (�Ȏ I% � (�%� 1:�st%=F%+12 �defpal2 ��ipal(2) (�5�#c%=F%-16:sx%=(�W+1)*32:rowbytes%=sx%>>3:input=1 (�sy%=�W+1:I%=�W:sx%-=31-�W (�%� 3:�st%=F%+12 �defpal4 ��ipal(4) (�5�#c%=F%-16:sx%=(�W+1)*16:rowbytes%=sx%>>2:input=2 (�!sy%=�W+1:I%=�W:sx%-=(31-�W)�2 (�(� 15:�st%=F%+12 �defpal16 ��ipal(16) (�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 � )6�#c%=&38 )@�C%=0�255:D%=�#c% )J9r%(C%)=�#c%/255*F:g%(C%)=�#c%/255*F:b%(C%)=�#c%/255*F )TD%=�W:� )^� )h�ipal63 )r� )|� )�G�#c%=F%-16:sx%=(�W+1)*4:rowbytes%=sx%:sy%=�W+1:I%=�W:sx%-=(31-�W)�8 )�) �42,"Not understood RISC OS sprite" )�� )�@r$="FN8":ș53,sm,4 � ,,nx:ș53,sm,5 � ,,ny:nx=1<<nx:ny=1<<ny )�-�scale% xmul%=xmul%*nx/2:ymul%=ymul%*ny/2 )�Sinfo$="RISC OS sprite, mode "+�sm+" "+�sx%+" by "+�sy%+" pixels, "+�bits(input) )�� )�bpp%=sm>>>27:Ȏbpp% � )�9� 1:bpp%=1:r$="FN8":�st%=F%+12 �defpal2 ��newropal(2) )�9� 2:bpp%=2:r$="FN8":�st%=F%+12 �defpal4 ��newropal(4) )�;� 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 *0� *:1�C%=0�31:r%(C%)=C%/31*F:�:g%()=r%():b%()=r%() *D-� 6:bpp%=32:r$="FN24":�st%=F%+12 �nopal � *N!rbo%=0:gbo%=1:bbo%=2:step24=4 *X-� 8:bpp%=24:r$="FN24":�st%=F%+12 �nopal � *brbo%=0:gbo%=1:bbo%=2 *l8 �42,"Not understood new format RISC OS sprite bpp" *v� *�(nx=(sm>>1) �&1fff:ny=(sm>>14) �&1fff *�G�scale% xdiv%=xdiv%*nx:ydiv%=ydiv%*ny:xmul%=xmul%*90:ymul%=ymul%*90 *�Z�#c%=F%-16:rowbytes%=(�W+1)*4:sy%=�W+1:I%=�W:sx%=(rowbytes%*8-(31-�W))/bpp%:input=bpp% *�Jinfo$="New RISC OS sprite, "+�sx%+" by "+�sy%+" pixels, "+�bits(input) *��bpp%=32 input=24 *�� *��#c%=st%:cache%=� *� � 100 *�Equant%=8:�#c%=0:sx%=�HW:sy%=�HW:�nopal:input=24:rowbytes%=sx%*3+2 *�5rbo%=2:gbo%=2+sx%:bbo%=2+2*sx%:r$="FN24":cache%=� *�Jinfo$="QRT .raw image, "+�sx%+" by "+�sy%+" pixels, 24 bits per pixel" *� � 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%=� +4� +>r$="FN8":rowbytes%=sx% +H� +R[info$="Cadsoft type "+�cadsoft%+" image, "+�sx%+" by "+�sy%+" pixels, 8 bits per pixel" +\ � 300 +fIquant%=5:�#c%=&2c:st%=�W+(&38-&2c):�#cc%=&2c:stcc%=�W1(cc%)+(&38-&2c) +p7�#c%=&1c:sx%=(�W+1)*4:sy%=�W+1:�#c%=st%:�#cc%=stcc% +z;� rpal%(255),gpal%(255):input=16:cache%=�:rowbytes%=sx% +� �C%=0�255 +�.rpal%(C%)=C%�7 � (C%�64)<<2 � (C%�&38)<<13 +�Sgpal%(C%)=(C%�4)<<1�C%�16 � ((C%�3)<<1�(C%�&60)>>2)<<8 � (C%�8�(C%�128)>>3)<<16 +�� +�1�C%=0�31:r%(C%)=C%/31*F:�:g%()=r%():b%()=r%() +�*pbuff%=�dim(sx%):�scale% ymul%=ymul%*2 +�Ginfo$="ArVis image, "+�sx%+" by "+�sy%+" pixels, 15 bits per pixel" +� � 400 +�Equant%=8:�#c%=0:sx%=�beHW:sy%=�beHW:X%=�beHW:st%=�#c%+X%:�#c%=st% +�Vplbuff%=�dim(sx%*3):plbytes%=sx%*3:rb%=plbuff%:gb%=plbuff%+1:bb%=plbuff%+2:rbo%=-1 +�:�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 ,8� ,B� ,LI%=�#c%:ȕ I%=�"!" ,` � �#c% ,j� ,t$GIFgcesz=�#c%:�#c%=�#c%+GIFgcesz ,�� GIFgcesz=0:I%=�#c% ,�� ,�6�I%<>�"," � 42,"GIF file without , in right place" ,��GIFext<>0 � GIFext<>49 � ,��GIFext>49 � ,�*xdiv%=xdiv%*64:xmul%=xmul%*(GIFext+15) ,�� ,�*ydiv%=ydiv%*(GIFext+15):ymul%=ymul%*64 ,�� - � - ,GIFleft=�HW:GIFright=�HW:sx%=�HW:sy%=�HW -�GIFsx<sx% � GIFsy<sy% � -�info% � -()�"GIF file with bigger image inside:" -2;�"Screen ";GIFsx"x by "GIFsy"y; image "sx%"x by "sy%"y" -</�"Continue with monitor's size [Y or y]?"A$ -F&�A$="Y"�A$="y" sx%=GIFsx:sy%=GIFsy -P(�"Continuing with ";sx%"x by "sy%"y" -Z� -d� -n)GIF=�#c%:�GIF � &40 flag=501:r$="FN8" -xJsetcodes%=�#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 .64plbuff%=�dim(sx%):rep%=0:wt%=0:wtsx%=plbuff%+sx% .@cache%=�:cachebytes%=� .J@�C%=0�255:r%(C%)=(C%�63)/63*F:�:g%()=r%():b%()=r%():quant%=6 .TJinfo$="Watford digitiser picture, 512 by 256 pixels, 6 bits per pixel" .^ � 801 .h;sx%=512:sy%=256:input=24:quant%=6:�scale% ymul%=ymul%*2 .r0rep1%=0:wt1%=0:rep2%=0:wt2%=0:rep3%=0:wt3%=0 .|=buff%=�dim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+2*sx% .�:wtsx1%=buff%+sx%:wtsx2%=buff%+2*sx%:wtsx3%=buff%+3*sx% .�7�C%=0�255:r%(C%)=(C%�63)/63*F:�:g%()=r%():b%()=r%() .�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 /&� /0=buff%=�dim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+sx%*2 /:3�C%=0�255:r%(C%)=C%/255*F:�:g%()=r%():b%()=r%() /DOinput=24:info$="Hawk V9 Triple image, 256 by 256 pixels, 24 bits per pixel" /N � 902 /XBquant%=4:�#c%=8:sx%=�W:rowbytes%=sx%*3/2:sy%=�W:st%=20:�#c%=20 /b�scale% ymul%=ymul%*2 /lMplbuff%=�dim(sx%*3):rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2:rbo%=-1 /v@�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%=� 0Finfo$="Wild Vision V12 image, 512 by 512 pixels, 8 bits per pixel" 0 � 1000 0Tquant%=4:sx%=640:sy%=256:�defpal:st%=�W:r$="FN"+�(1000+�W):�scale% ymul%=ymul%*2 0*%buff%=�dim(sx%):ctable%=�dim(st%) 04"ș12,4,c%,ctable%,st%:st%=�#c% 0>.pa%=ctable%:rep%=0:rep2%=0:pasx%=buff%+sx% 0HAinfo$="ProArtisan image, 640 by 256 pixels, 8 bits per pixel" 0R � 1100 0\@quant%=1:�#c%=4:sx%=�beW:sy%=�beW:input=�beW:bigendianbits=� 0fS%=�beW:S%=�beW 0pIcache%=�:�S%=2 cachebytes%=�:info$="Byte Encoded " �info$="":r$="FN8" 0zC%=�beW 0�D%=�beW 0�Ȏ C% � 0� � 1,2 0�$�I%=0�D%/3-1:r%(I%)=�#c%/255*F:� 0�$�I%=0�D%/3-1:g%(I%)=�#c%/255*F:� 0�$�I%=0�D%/3-1:b%(I%)=�#c%/255*F:� 0� 0�Ȏ input � 0�� 1:r%(0)=F:g%(0)=F:b%(0)=F 0�� 4,8:�nopal 0�� 24:�nopal 0�� 0�� 1Ȏ input � 1 � 1:rowbytes%=(sx%+15>>4)<<1 1� 4:rowbytes%=(sx%+3>>2)<<1 1$� 8:rowbytes%=(sx%+1>>1)<<1 1.J� 24:rowbytes%=(3*sx%+1>>1)<<1:r$="FN24":rbo%=0:gbo%=1:bbo%=2:step24=3 18�S%=1 bbo%=0:rbo%=2 1B&:� 42,"Can't do this Sun pixrect" 1L� 1VMst%=D%+&20:rep%=0:�cachebytes% plbuff%=�dim(rowbytes%):plbytes%=rowbytes% 1`Binfo$+="Sun image, "+�sx%+" by "+�sy%+" pixels, "+�bits(input) 1j � 1200 1t>quant%=8:sx%=800:sy%=800:st%=1600:�#c%=st%:vflip%=� vflip% 1~*�nopal:r$="FN8":rowbytes%=sx%:cache%=� 1�Iinfo$="TimeStep satellite image, 800 by 800 pixels, 8 bits per pixel" 1� � 1300 1�?quant%=8:sx%=128:sy%=256:st%=0:�#c%=0:�scale% xmul%=xmul%*2 1�*�nopal:r$="FN8":rowbytes%=sx%:cache%=� 1�@info$="satellite image, 128 by 256 pixels, 8 bits per pixel" 1� � 1301 1�;input=24:quant%=8:sx%=128:sy%=256:�scale% xmul%=xmul%*2 1�Obuff%=�dim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+2*sx%:�nopal:r$="FN901" 1�Hinfo$="Triple satellite image, 128 by 256 pixels, 24 bits per pixel" 1� � 1400 1�%planar%=�:�#c%=0:Z%=�HW:�Z%>255 � 1�+st%=�beHW*2:planes%=�beHW:patlen%=�beHW 2 +pw%=�beHW:ph%=�beHW:sx%=�beHW:sy%=�beHW 2 � 2Cst%=�HW*2:input=�HW:patlen%=�HW:pw%=�HW:ph%=�HW:sx%=�HW:sy%=�HW 2� 2( �scale% � 22#xmul%=xmul%*pw%:xdiv%=xdiv%*282 2<#ymul%=ymul%*ph%:ydiv%=ydiv%*282 2F� 2PWrowbytes%=sx%+7>>3:pbuff%=�dim(sx%):plbytes%=rowbytes%*planes%:buff%=�dim(plbytes%) 2Z�#c%=st%:vrep%=0 2dM�C%=0�(1<<planes%)-1:r%(C%)=F-C%/((1<<planes%)-1)*F:�:g%()=r%():b%()=r%() 2nBinfo$="IMG file, "+�sx%+" by "+�sy%+" pixels, "+�bits(planes%) 2x � 1500 2�"�#c%=4:dir%=�tiff(4):�#c%=dir% 2�6rgb=�:greyunit=100:planar%=1:fillorder=1:resunit=2 2�)xnum%=90:xdenom%=1:ynum%=90:ydenom%=1 2�E%=�tiff(3):�Z%=1�E% 2�'T%=�tiff(3):D%=�tiff(3):C%=�tiff(4) 2�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) 2�?�"Read tag ";T%" datatype "D%" count "C%" value/pointer "V% 2�Ȏ T% � 2�� 256:sx%=V% 2�� 257:sy%=V% 2�� 258:�C%>1 � 2��D%*C%>6 � 2��#c%=V%:quant%=�tiff(D%) 3(input=quant%:�I%=1�C%-1:V%=�tiff(D%) 3P�V%<>quant% �42,"Can't do RGB TIFF with different numbers of bits per pixel" 3 input+=V% 3"�:�nopal 3,� 36 quant%=V% � &FF:input=quant% 3@5�I%=0�(1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:� 3Jg%()=r%():b%()=r%() 3T� 3^�#c%=dir%+2+Z%*12 3h� 3rquant%=V%:input=quant% 3|5�I%=0�(1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:� 3�g%()=r%():b%()=r%() 3�� 3�� 259:compression=V% 3�/� 262:photometric=V%:�V%=0 invert%=�invert% 3�� 266:fillorder=V% 3�!� 273:stc%=C%:stv%=V%:std%=D% 3�1� 277:sampperpix%=V%:input=quant%*V%:rgb=V%=3 3�� 278:striprows%=V% 3�-� 279:stcbyte%=C%:stvbyte%=V%:stdbyte%=D% 3�1� 282:�#c%=V%:xnum%=�tiff(4):xdenom%=�tiff(4) 3��#c%=dir%+2+Z%*12 3�1� 283:�#c%=V%:ynum%=�tiff(4):ydenom%=�tiff(4) 3��#c%=dir%+2+Z%*12 4,� 284:planar%=V%:�planar%=2 input=quant% 4� 290:greyunit=10^V% 4<� 291:�#c%=V%:�I%=0�C%-1:r%(I%)=�tiff(D%)/greyunit/2*F:� 4&g%()=r%():b%()=r%() 40�#c%=dir%+2+Z%*12 4:� 296:resunit=V% 4D� 317:hpredict%=V% 4N8� 320:�#c%=V%:�I%=0�C%/3-1:r%(I%)=�tiff(3)/65535*F:� 4X*�I%=0�C%/3-1:g%(I%)=�tiff(3)/65535*F:� 4b*�I%=0�C%/3-1:b%(I%)=�tiff(3)/65535*F:� 4l�#c%=dir%+2+Z%*12 4v 4�J�info% �"Ignoring tag ";T%" datatype "D%" count "C%" value/pointer "V% 4�� 4�� 4�� st%(stc%):�stc%>1 � 4�0�#c%=stv%:�I%=0�stc%-1:st%(I%)=�tiff(std%):� 4�� 4�st%(0)=stv% 4�� 4�Ȏ compression � 4�� 0,1:info$="" 4�)� 2:info$="CCITT Group 3 compressed " 4�+� 5:info$="LZW compressed ":r$="FN1505" 5n�hpredict%=2 �info$+="horizontal differenced " ��hpredict%>2 info$+=" unknown predictor ("+�hpredict%+") " 5'setcodes%=8:clearcode%=1<<setcodes% 53� table%(1<<12):stk%=�dim(1<<13):buf%=�dim(280) 5 &�I%=0�clearcode%-1:table%(I%)=I%:� 5*4� 32773:info$="PackBits compressed ":r$="FN1501" 54 � 6:info$="JPEG compressed " 5>2 info$="Compress "+�compression+" - unknown " 5H� 5RBinfo$+="TIFF file, "+�sx%+" by "+�sy%+" pixels, "+�bits(input) 5\Sbigendianbits=fillorder=1:�#c%=st%(0):stripptr=0:�striprows%>=sy% striprows%=-1 5fȎ input � 5p� 1:rowbytes%=sx%+7>>3 5z� 2:rowbytes%=sx%+3>>2 5�� 4:rowbytes%=sx%+1>>1 5�� 8:rowbytes%=sx% 5�� 24:rowbytes%=3*sx% 5�H� 32:rowbytes%=4*sx%:�photometric<>5 � 42,"32 bpp TIFF but not CMYK" 5�+ � 42,"Can't do "+�bits(input)+" TIFF" 5�� 5�.�planar%=2 rowbytes%=rowbytes%*sampperpix% 5�I�planar%<>1 � rgb<>0 �42,"Can't do this style of TIFF yet" �planar%=� 5�� compression<2 � 5�Scache%=�:stripptr=-1:r$="FN8":�input=24 rbo%=0:gbo%=1:bbo%=2:step24=3:r$="FN24" 5�b�input=32 rbo%=0:gbo%=1:bbo%=2:step24=4:r$="FN24":r%()=F-r%():g%()=F-g%():b%()=F-b%():input=24 5�� 5�'�compression=5 �compression=32773 � 6-cache%=�:cachebytes%=rowbytes%*striprows% 60plbuff%=�dim(rowbytes%):rowstogo%=striprows% 6\�input=24 rb%=plbuff%:gb%=plbuff%+1:bb%=plbuff%+2:r$="FN"+�(��r$,3)+10):step24=3:rbo%=-1 6$� 6..buff%=�dim(rowbytes%):rowstogo%=striprows% 68N�input=24 rb%=buff%:gb%=buff%+1:bb%=buff%+2:r$="FN"+�(��r$,3)+10):step24=3 6B� 6L� 6V �scale% � 6`S%=resunit:�S%=2 S%=90 6j�S%=3 S%=35 6t,xdiv%=xdiv%*xnum%:xmul%=xmul%*xdenom%*S% 6~,ydiv%=ydiv%*ynum%:ymul%=ymul%*ydenom%*S% 6�� 6��r$="FN1500" r$="FN8" 6� � 1600 6��#c%=12:camg=0:planar%=�:� 6�&S$=��#c%+��#c%+��#c%+��#c%:S%=�beW 6�Ȏ S$ � 6�C� "BMHD":sx%=�beHW:sy%=�beHW:S%=�W:planes%=�#c%:masking%=�#c%=1 6�6compression=�#c%:S%=�#c%+�HW:U%=�#c%:V%=�#c%:S%=�W 6�)�scale% ymul%=ymul%*V%:ydiv%=ydiv%*U% 6�K�I%=0�(1<<planes%)-1:r%(I%)=I%/((1<<planes%)-1)*F:�:g%()=r%():b%()=r%() 6�B� "CMAP":S%=�#c%+S%:�I%=0�(1<<planes%)-1:r%(I%)=(�#c%>>4)/15*F 6�1g%(I%)=(�#c%>>4)/15*F:b%(I%)=(�#c%>>4)/15*F:� 7 G�#c%=S%:�info% �"Warning: truncated IFF CMAP information to 4 bits" 7 ;� "CAMG":camg=�beW:�info% �"Amiga viewport mode ";~camg 7� "BODY":st%=�#c% 74 � info% �"Ignoring IFF property "S$" size ";S% 7(�#c%=�#c%+S% 72� 7<9�S$="BODY":�compression info$="Compressed " �info$="" 7P+ham=(camg � &800)<>0:�ham info$+="HAM " 7Z4half=(camg � &80)<>0:�half info$+="half-bright " 7dn�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:� 7nCinfo$+="IFF file, "+�sx%+" by "+�sy%+" pixels, "+�bits(planes%) 7x+�masking% info$+=" with mask (ignored)" 7�7rowbytes%=(sx%+15>>4)<<1:plbytes%=rowbytes%*planes% 7�9pbuff%=�dim(sx%):r$="FN"+�(1600+compression):cache%=� 7��compression � 7�(cachebytes%=�:plbuff%=�dim(plbytes%) 7�� 7�Qrealrowbytes%=rowbytes%:rowbytes%=plbytes%:�masking% rowbytes%+=realrowbytes% 7�� 7��#c%=st% 7� � 1700 7�Bsx%=640:rowbytes%=80:sy%=350:planes%=4:plbytes%=4*80:planar%=� 7�3buff%=�dim(80*4):pbuff%=�dim(640):G=F/3:H=F*2/3 7�(r%()=0,0,0,0,F,F,F,H,G,G,G,G,F,F,F,F 7�(g%()=0,0,F,F,0,0,F,H,G,G,F,F,G,G,F,F 8(b%()=0,F,0,F,0,F,0,H,G,F,G,F,G,F,G,F 8Vmasking%=�:r$="FN1600":st%=16:�#c%=16:cache%=�:realrowbytes%=80:rowbytes%=plbytes% 8Sinfo$="PC EGA '.dsp' file, 640 by 350 pixels, 4 bits per pixel (fixed palette)" 8" � 1800 8,?sx%=72*8:sy%=720:quant%=1:input=1:�#c%=st%:plbuff%=�dim(72) 86cache%=�:cachebytes%=� 8@Qr%(0)=F:g%(0)=F:b%(0)=F:bigendianbits=�:rowbytes%=72:r$="FN1501":rowstogo%=-1 8JG�scale% xmul%=xmul%*90:xdiv%=xdiv%*72:ymul%=ymul%*90:ydiv%=ydiv%*72 8T>info$="MacPaint file, 576 by 720 bits, creator id "+�S$,4) 8^ � 1850 8h�#c%=552 8rdone%=� 8|� 8�code%=�beHW:Ȏ code% � 8�� &01:�#c%=�#c%+�beHW 8� � &1E 8� � &98 8�Crowbytes%=�beHW:�(rowbytes% �&8000)=0 �42,"PICT without Pixmap" 8�3sy%=�beHW:sx%=�beHW:sy%=�beHW-sy%:sx%=�beHW-sx% 8�<junk%=�HW:packtype%=�beHW:junk%=�W:resx%=�beW:resy%=�beW 8�F�beHW<>0 �#c%:�42,"ChangeFSI expected Mac PICT2 pixeltype=Chunky" 8�&bpp%=�beHW:junk%=�beHW:junk%=�beHW 8�$junk%=�beW:junk%=�beW:junk%=�beW 8�junk%=�beW:junk%=�beHW 8�_C%=�beHW:�I%=0�C%:J%=�beHW:r%(J%)=�beHW/65535*F:g%(J%)=�beHW/65535*F:b%(J%)=�beHW/65535*F:� 8�done%=� 9R� &9A:junk%=�W:rowbytes%=�beHW:�(rowbytes% �&8000)=0 �42,"PICT without Pixmap" 93sy%=�beHW:sx%=�beHW:sy%=�beHW-sy%:sx%=�beHW-sx% 9<junk%=�HW:packtype%=�beHW:junk%=�W:resx%=�beW:resy%=�beW 9&J�beHW<>16 �#c%:�42,"ChangeFSI expected Mac PICT2 pixeltype=RGBDirect" 90'bpp%=�beHW:comps%=�beHW:junk%=�beHW 9:junk%=�beW:junk%=�beW 9Djunk%=�beHW:junk%=�beHW 9NV�bpp%>16 �nopal �J%=2^(bpp%�3):�I%=0�J%-1:r%(I%)=I%/(J%-1)*F:�:g%()=r%():b%()=r%() 9X/�bpp%=32 � comps%=3 bpp%=24:rowbytes%=3*sx% 9bdone%=� 9lC:�#c%:�42,"ChangeFSI can't understand Mac PICT2 code "+�~code% 9v� 9�� done% 9�3junk%=�beHW:junk%=�beHW:junk%=�beHW:junk%=�beHW 9�3junk%=�beHW:junk%=�beHW:junk%=�beHW:junk%=�beHW 9�junk%=�beHW 9�Ncache%=�:cachebytes%=�:bigendianbits=�:st%=�#c%:rowbytes%=rowbytes%��&8000 9�Y�scale% xmul%=xmul%*90*65536:xdiv%=xdiv%*resx%:ymul%=ymul%*90*65536:ydiv%=ydiv%*resy% 9�@info$="Mac PICT2, "+�sx%+" by "+�sy%+" pixels, "+�bits(bpp%) 9�%plbuff%=�dim(rowbytes%):�bpp%>8 � 9�Trbo%=-1:rb%=plbuff%+sx%:gb%=plbuff%+sx%*2:bb%=plbuff%+sx%*3:r$="FN1851":input=24 9�;�comps%=3 rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2 9�� 9� � 1900 9��#c%=1:C%=�#c% :?E%=�#c%:�E%<>1 � 42,"ZSoft .PCX file with unknown encoding" :7E%=�#c%:sx%=�HW:sy%=�HW:sx%=�HW+1-sx%:sy%=�HW+1-sy% :N�scale% xmul%=xmul%*90:xdiv%=xdiv%*�HW:ymul%=ymul%*90:ydiv%=ydiv%*�HW ��W : H�#c%=65:planes%=�#c%:planar%=planes%>1:rowbytes%=�HW:bpp%=E%*planes% :*pcxpal=16:�bpp%>4 � C%=5 � :4*�#c%=�#c%-769:�#c%=12 pcxpal=�#c%-768 :>� :H5�#c%=pcxpal:E%=0:�C%=0�(1<<bpp%)*3-1:E%=E%��#c%:� :R3�info% �".PCX palette mask established at ";~E% :\�E%=0 � :fE�C%=0�(1<<bpp%)-1:r%(C%)=C%/((1<<bpp%)-1)*F:�:g%()=r%():b%()=r%() :p� :z!�#c%=pcxpal:�C%=0�(1<<bpp%)-1 :�Er%(C%)=(�#c%�E%)/E%*F:g%(C%)=(�#c%�E%)/E%*F:b%(C%)=(�#c%�E%)/E%*F :�� :�� :��rewind :�Lplbytes%=rowbytes%*planes%:plbuff%=�dim(plbytes%):cache%=�:cachebytes%=� :�E�planar% pbuff%=�dim(sx%) �input=bpp%:bigendianbits=�:r$="FN1100" :�Finfo$="ZSoft .PCX file, "+�sx%+" by "+�sy%+" pixels, "+�bits(bpp%) :� � 2000 :�8�#c%=0:L%=�#c%:C%=�#c%:I%=�#c%:J%=�HW:K%=�HW:M%=�#c% :�Csx%=�W:sx%=�HW:sy%=�HW:B%=�#c%:ID%=�#c%:�ID%�&10 hflip%=�hflip% :� �(ID% �&20)=0 vflip%=�vflip% :��#c%=�#c%+L%:Ȏ C% � :�� 1:�M%=&18 � ;�C%=J%�K%-1 ;9b%(C%)=�#c%/255*F:g%(C%)=�#c%/255*F:r%(C%)=�#c%/255*F ;� ;$� ;.� ;8 �nopal ;B� ;Lst%=�#c% ;VȎ I% � ;`� 1,2,3:cache%=�:�B%>8 � ;j�B%>16 � ;tLinput=24:bbo%=0:gbo%=1:rbo%=2:step24=B%�8:r$="FN24":rowbytes%=step24*sx% ;~� ;�rowbytes%=sx%*2 ;�7� rpal%(255),gpal%(255):input=16:step24=2:r$="FN16" ;� �C%=0�255 ;�&gpal%(C%)=(C%>>5)<<8 � (C%�31)<<16 ;�%rpal%(C%)=(C%>>2)�31 � (C%�3)<<11 ;�� ;�1�C%=0�31:r%(C%)=C%/31*F:�:g%()=r%():b%()=r%() ;�� ;�� ;�r$="FN8":rowbytes%=sx% ;�� ;�Iinfo$="Truevision TGA image, "+�sx%+" by "+�sy%+" pixels, "+�bits(B%) <