Home » Archimedes archive » Archimedes World » AW-1993-02.adf » AWFeb93 » !AWFeb93/Goodies/Imagery/!TinyImage/!RunImage
!AWFeb93/Goodies/Imagery/!TinyImage/!RunImage
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
| Tape/disk: | Home » Archimedes archive » Archimedes World » AW-1993-02.adf » AWFeb93 |
| Filename: | !AWFeb93/Goodies/Imagery/!TinyImage/!RunImage |
| Read OK: | ✔ |
| File size: | 144FE bytes |
| Load address: | 0000 |
| Exec address: | 0000 |
File contents
10REM ><Imagery$Dir>.!RunImage
20LOMEM=TOP+&1000:PATCH%=TOP
30ON ERROR PROCmakerr
40:
50REM LF$=""
60PROCsetup
70NOL%=TRUE:PROCloadsets("<Imagery$Dir>.Defaults")
80NOL%=FALSE:PROCed_bru:!BLK%=HAND%(12):SYS "Wimp_CloseWindow",,BLK%
90PROCaction
100PROCdie
110END
120DEFPROCsetup:LEGO%=FALSE:TKH%=-1
130MESI%=5*1024:DIM POI% 256,TAS% 3000,MENU% MESI%,MENUIND% MESI%,SEL% 256,ICBLK% 256,VARS 128,MENALO% 16,CODE% 7*1024,IO% 256,TRANSTAB% 256,RGBG% 192,MENAD% 256
140BLK%=TAS%+2000
150
160SYS "OS_ReadVarVal","Imagery$File",IO%,256,0,0 TO ,,K%:L%=0:LF$="":WHILE K%>0:LF$=LF$+CHR$(IO%?L%):L%+=1:K%-=1:ENDWHILE
170
180FORL%=0 TO 188 STEP 4:RGBG%!L%=0:NEXT
190MEOF%=0:MEIN%=0:MBUS%=FALSE:LAOPWI%=-1
200$MENALO%="A -~"
210FTL%=FALSE:LAPATCH%=-1
220DIM PIC% 161*1024,SCALE% 32,PIXTAB% 256,PIXTAB2% 256,X%(8),Y%(8)
230SPBUF%=HIMEM:SPSIZ%=0:SYS "Wimp_SlotSize",-1,-1 TO CUSL%
240DIM PAL% 22600,OPAL% 22600,SHOW% 10240,PALTAB% 512,BTC% 256,CTT% 256,TTB% 256,ROTTAB% 1800,RAND% 4096,PFILLS% 7000:!PAL%=22600:!OPAL%=22600:!PFILLS%=7000:!SHOW%=10240
250DIM BRUSH% 13000:!BRUSH%=13000
260SYS&2E,266,BRUSH%,"<Imagery$Dir>.Brushes"
270SYS&2E,266,PAL%,"<Imagery$Dir>.Palette"
280SYS&2E,266,OPAL%,"<Imagery$Dir>.Palette"
290SYS&2E,266,PFILLS%,"<Imagery$Dir>.PatFills"
300SYS&2E,266,SHOW%,"<Imagery$Dir>.Show"
310OSCLI("LOAD <Imagery$Dir>.PalTab "+STR$~PALTAB%)
320OSCLI("LOAD <Imagery$Dir>.BTC "+STR$~BTC%):REM byte -> pal
330OSCLI("LOAD <Imagery$Dir>.CTT "+STR$~CTT%):REM pal -> byte
340OSCLI("LOAD <Imagery$Dir>.TTB "+STR$~TTB%):REM (col*64)+tint -> pal
350OSCLI("LOAD <Imagery$Dir>.RotTab "+STR$~ROTTAB%)
360OSCLI("LOAD <Imagery$Dir>.Code "+STR$~CODE%)
370OSCLI("LOAD <Imagery$Dir>.RotTab "+STR$~ROTTAB%)
380COL%=255:FUSE%=-1:FUST%=-1:FUCO%=0:BUTDO%=FALSE
390$TAS%="TASK":SYS"Wimp_Initialise",200,!TAS%,"Imagery" TO ,THAND%
400PROCloadsprites
410PROCloadvars
420!BLK%=-1:BLK%!4=0:BLK%!8=0:BLK%!12=64:BLK%!16=64:BLK%!20=&2102
430DIM BLK%!24 10:$(BLK%!24)="!TinyImage":BLK%!28=1:BLK%!32=8
440SYS "Wimp_CreateIcon",,BLK% TO ICHAND%
450NOWIND%=34:NOMENS%=20
460DIM STORE% 15*1024,BUF% 5048,HAND%(NOWIND%)
470SOF%=STORE%
480DATA Save,Info,Main,Palette,Airbrush,Brushes,Grid,SpriteSave,Area,Help,Linepat,Fillpat,EdBrush,EdFill,Text,Tback,FontParams,FillCont,ColRep,Frame,Pfills,RGBcont,Greyscale,Pixelate,Rotate,Colscale,Contrast,Posterise,RGBgraph,Filter,Wobble,Import,Toolkit
490DATA Zoom,SetSave
500RESTORE 480
510SYS "Wimp_OpenTemplate",,"<Imagery$Dir>.Templates":K%=0
520REPEAT:READ A$:$IO%=A$
530SYS "Wimp_LoadTemplate",,BUF%,SOF%,STORE%+(15*1024),-1,IO%,0 TO ,,SOF%
540IF K%=2 THEN BUF%?35=&FF
550SYS "Wimp_CreateWindow",,BUF% TO HAND%(K%)
560K%+=1:UNTIL K%>NOWIND%
570SYS "Wimp_CloseTemplate"
580FORL%=15 TO 46:PROCshadeicon(10,L%):NEXT
590PROCsi(13,83,"16")
600VDU23,6,0|
610PROCsystemvars
620PROCchars
630PROCloadfonts
640FORL%=0 TO NOMENS%:!FNmad(L%)=-1:NEXT:PROCbuildmainmenu:PROCbuildiconmenu
650LWG%=-1:LIG%=-1
660WLX%=0:WLY%=300:WUX%=1279:WUY%=1023:WSX%=0:WSY%=0
670EDTY%=0:EFCOL%=255
680ENDPROC
690
700DEFFNmad(MAD%):=MENAD%+(MAD%*4)
710DEFFNcmad(MAD%):=MENAD%!(MAD%*4)
720
730DEFPROCsystemvars
740!PIC%=161*1024:PIC%!4=0:PIC%!8=24:PIC%!12=24
750SYS &2E,271,PIC%,"PIC",0,640,256,15
760PIC$="<Untitled>"
770ESM%=-1:EPM%=-1
780GRCO%=-1:GRTI%=-1:GRLO%=FALSE:GRIWI%=1:GRIHE%=1:GRBX%=0:GRBY%=0
790GRXM%=1:GRXD%=1:GRYM%=1:GRYD%=1:GRFX%=FALSE:GRFY%=FALSE
800ZOOM%=1:ZOOMS%=1
810USE%=0:LITY%=5:GRMA%=FALSE:UNDO%=-1
820DIM PAT%(5):PAT%()=0:PALE%=8
830DIM ECF%(8,4):ECF%()=0:ROT%=0
840DIM GRFI%(15,1,4):GRFI%()=0
850FIFC%=63:FIFT%=192:FILC%=3:FILT%=192:FILR%=0
860IP%=FALSE
870SELBR%=1:BXM%=1:BXD%=1:BYM%=1:BYD%=1
880EDBR%=1:IDRAG%=FALSE:CPF%=1
890IF LF$<>"" THEN PROCqatload(LF$):PIC$=FNleaf(LF$):PROCsi(0,6,LF$):PROCopenmain:PROCwindname(2,PIC$)
900DIM TRASP% 256, REPS% 256
910FORL%=0 TO 255:REPS%?L%=L%:NEXT
920FORL%=0 TO 252 STEP 4:TRASP%!L%=0:NEXT
930DIM FONTT$(64):FONTA%=-1:FONTO%=-1
940FONTB%=0:SREP%=255
950MMX%=1:MMY%=1:MOP%=FALSE:KUKE%=FALSE:KUKD%=0:KUKL%=-1:KSC%=TRUE
960RSL%=100:GSL%=100:BSL%=100
970ENDPROC
980
990DEFPROCloadvars
1000F%=OPENIN("<Imagery$Dir>.Vars")
1010INPUT#F%,backuppic,fillmask,getpicbyte,getbrushbyte,setpicbyte,pixaverage,tintarea,averagebrush,tintbrush,findchangebox,graduatedfill,colrep,patfill,rgbcont,greyscale,rotate,transarea,rgbgraph,filter,wobble
1020CLOSE#F%
1030backuppic+=CODE%:fillmask+=CODE%:getpicbyte+=CODE%:getbrushbyte+=CODE%:setpicbyte+=CODE%:pixaverage+=CODE%:tintarea+=CODE%:averagebrush+=CODE%:tintbrush+=CODE%:findchangebox+=CODE%:graduatedfill+=CODE%:colrep+=CODE%
1040patfill+=CODE%:rgbcont+=CODE%:greyscale+=CODE%:rotate+=CODE%:transarea+=CODE%:rgbgraph+=CODE%:filter+=CODE%:wobble+=CODE%
1050ENDPROC
1060
1070DEFPROCloadfonts
1080FONTS%=0:ENDPROC
1090
1100DEFPROCloadsprites
1110ENDPROC
1120
1130DEFPROCaction:SYS "Wimp_ForceRedraw",-1,0,0,&3000,&3000
1140
1150REPEAT
1160PROCpoll
1170UNTIL (REAS%=17 OR REAS%=18) AND BLK%!16=0
1180ENDPROC
1190
1200DEFPROCdie:OP%=0:PROCspbuf(0)
1210FORL%=1 TO 4:OSCLI("*REMOVE <Imagery$Dir>.XPIC"+STR$L%):NEXT
1220SYS "Wimp_CloseDown",THAND%,!TAS%
1230END
1240ENDPROC
1250
1260DEFPROCpoll
1270SYS "Wimp_GetPointerInfo",,BLK%
1280IF BLK%!12<>HAND%(2) THEN MBUS%=TRUE
1290!BLK%=%10011111110000110000
1300SYS "Wimp_Poll",0,BLK% TO REAS%
1310IF REAS%>-1 THEN PROCact
1320ENDPROC
1330DEFPROCact
1340CASE REAS% OF
1350WHEN 0:PROCkuke:PROCpicpoll
1360WHEN 1:PROCredraw
1370WHEN 2:PROCopmain
1380WHEN 3:PROCclmain
1390WHEN 6:PROCmouse
1400WHEN 7:PROCdragfin
1410WHEN 8:PROCkey
1420WHEN 9:PROCmenu
1430WHEN 17,18:PROCinmessage(BLK%!16)
1440ENDCASE
1450ENDPROC
1460
1470DEFPROCkuke:IF NOT KUKE% THEN ENDPROC
1480KULI%=10
1490MOUSE MX%,MY%,MH%:KP%=FALSE
1500IF NOT INKEY(-58) THEN 1540
1510IF KUKL%<>-58 THEN KUKL%=-58:KUKD%=0:MY%+=4:KP%=TRUE:GOTO 1540
1520KUKD%+=1:IF KUKD%<KULI% THEN KP%=TRUE:GOTO 1540
1530KUKD%=KULI%:MY%+=4:KP%=TRUE
1540IF NOT INKEY(-42) THEN 1580
1550IF KUKL%<>-58 THEN KUKL%=-58:KUKD%=0:MY%-=4:KP%=TRUE:GOTO 1580
1560KUKD%+=1:IF KUKD%<KULI% THEN KP%=TRUE:GOTO 1580
1570KUKD%=KULI%:MY%-=4:KP%=TRUE
1580IF NOT INKEY(-26) THEN 1620
1590IF KUKL%<>-58 THEN KUKL%=-58:KUKD%=0:MX%-=2:KP%=TRUE:GOTO 1620
1600KUKD%+=1:IF KUKD%<KULI% THEN KP%=TRUE:GOTO 1620
1610KUKD%=KULI%:MX%-=2:KP%=TRUE
1620IF NOT INKEY(-122) THEN 1660
1630IF KUKL%<>-58 THEN KUKL%=-58:KUKD%=0:MX%+=2:KP%=TRUE:GOTO 1660
1640KUKD%+=1:IF KUKD%<KULI% THEN KP%=TRUE:GOTO 1660
1650KUKD%=KULI%:MX%+=2:KP%=TRUE
1660IF NOT KP% THEN KUKL%=-1:KUKD%=0
1670MOUSE TO MX%,MY%
1680ENDPROC
1690
1700DEFPROCredraw
1710CASE !BLK% OF
1720WHEN HAND%(2):PROCredrawmain
1730WHEN HAND%(3):PROCredrawpal
1740WHEN HAND%(5):PROCredrawbrush
1750WHEN HAND%(11):PROCredrawpat
1760WHEN HAND%(12):PROCredrawedbru
1770WHEN HAND%(13):PROCredrawfill
1780WHEN HAND%(15):PROCredrawtback
1790WHEN HAND%(18):PROCredrawcolrep
1800WHEN HAND%(20):PROCredrawpatfill
1810WHEN HAND%(26),HAND%(27),HAND%(28):PROCredrawgraph
1820WHEN HAND%(33):PROCredrawzoom
1830WHEN HAND%(21):PROCredrawrgb
1840WHEN HAND%(30):PROCredrawwob
1850ENDCASE
1860ENDPROC
1870
1880DEFPROCredrawwob
1890SYS "Wimp_RedrawWindow",,BLK% TO FIN%
1900PROCgetrdor(564)
1910WHILE FIN%:PROCplot256sprite(SHOW%,"SHOW",WOX%+64,WOY%+16):SYS "Wimp_GetRectangle",,BLK% TO FIN%:ENDWHILE:ENDPROC
1920
1930DEFPROCforcedrawwob:SYS "Wimp_ForceRedraw",HAND%(30),0,-564,480,220:ENDPROC
1940
1950DEFPROCredrawbrush
1960SYS "Wimp_RedrawWindow",,BLK% TO FIN%
1970PROCgetrdor(260)
1980WHILE FIN%:PROCplotbrushes:SYS "Wimp_GetRectangle",,BLK% TO FIN%
1990ENDWHILE
2000ENDPROC
2010
2020DEFPROCredrawedbru
2030SYS "Wimp_RedrawWindow",,BLK% TO FIN%
2040PROCgetrdor(640+(EDTY%*260))
2050WHILE FIN%:PROCplotedbru:SYS "Wimp_GetRectangle",,BLK% TO FIN%
2060ENDWHILE
2070ENDPROC
2080
2090DEFPROCredrawpatfill
2100SYS "Wimp_RedrawWindow",,BLK% TO FIN%
2110PROCgetrdor(108)
2120WHILE FIN%:PROCplotpatfill:SYS "Wimp_GetRectangle",,BLK% TO FIN%
2130ENDWHILE
2140ENDPROC
2150
2160DEFPROCforcedrawpatfill:SYS "Wimp_ForceRedraw",HAND%(20),0,-108,1100,0:ENDPROC
2170
2180DEFPROCforcedrawedbru(x1%,y1%,x2%,y2%)
2190!BLK%=HAND%(12)
2200BLK%!4=x1%
2210BLK%!8=y1%
2220BLK%!12=x2%
2230BLK%!16=y2%
2240SYS "Wimp_UpdateWindow",,BLK% TO FIN%
2250PROCgetrdor(640+(EDTY%*260))
2260WHILE FIN%
2270PROCplotedbru
2280SYS "Wimp_GetRectangle",,BLK% TO FIN%
2290ENDWHILE
2300ENDPROC
2310
2320DEFPROCforcedrawbrush
2330!BLK%=HAND%(5)
2340BLK%!4=0
2350BLK%!8=-260
2360BLK%!12=384
2370BLK%!16=0
2380SYS "Wimp_UpdateWindow",,BLK% TO FIN%
2390PROCgetrdor(260)
2400WHILE FIN%
2410PROCplotbrushes
2420SYS "Wimp_GetRectangle",,BLK% TO FIN%
2430ENDWHILE
2440ENDPROC
2450
2460DEFPROCplot256sprite(SPA%,SPI$,POX%,POY%)
2470IF MODE<>15 THEN GOTO 2490
2480!SCALE%=1:SCALE%!4=1:SCALE%!8=1:SCALE%!12=1:SYS "OS_SpriteOp",290,SPA%,SPI$,POX%,POY%:ENDPROC
2490IF MODE<>ESM% THEN ESM%=MODE:EPM%=MODE:SYS&40740,15,0,-1,-1,PIXTAB%
2500SYS&35,-1,5 TO ,,E%
2510SX%=2^(2-E%):SCALE%!4=SX%:SCALE%!12=1
2520SYS&35,-1,4 TO ,,E%
2530IF E%<1 THEN SX%=2^(1-E%):!SCALE%=SX%:SCALE%!8=1 ELSE SX%=2^(E%-1):!SCALE%=1:SCALE%!8=SX%
2540SYS "OS_SpriteOp",308,SPA%,SPI$,POX%,POY%,0,SCALE%,PIXTAB%
2550ENDPROC
2560
2570DEFPROCplotpatfill
2580FORL%=1 TO 12:PROCplot256sprite(PFILLS%,STR$L%,WOX%+((L%-1)*84)+24,WOY%+12):IF CPF%=L% THEN PROCcol(0,0,0):RECTANGLE WOX%+((CPF%-1)*84)+16,WOY%+4,78,76:RECTANGLE WOX%+((CPF%-1)*84)+18,WOY%+4,74,76
2590NEXT
2600ENDPROC
2610
2620DEFPROCplotbrushes
2630FORL%=1 TO 12
2640BLK%!400=HAND%(5):BLK%!404=L%-1:SYS "Wimp_GetIconState",,BLK%+400
2650PROCplot256sprite(BRUSH%,STR$L%,WOX%+(BLK%!408)+2,WOY%+(260+(BLK%!412))+4)
2660IF SELBR%=L% THEN PROCcol(48,192,3):RECTANGLE FILL WOX%+(BLK%!408)+2,WOY%+(260+(BLK%!412))+4,64,60
2670NEXT
2680ENDPROC
2690
2700DEFPROCplotedbru
2710IF EDTY%=0 THEN WE%=BRUSH% ELSE WE%=PFILLS%
2720PROCplot256sprite(WE%,"1",WOX%+32,WOY%+20+(EDTY%*260))
2730IF EDBR%<>1 THEN PROCcol(0,0,0) ELSE PROCcol(63,192,0)
2740RECTANGLE FILL WOX%+32,WOY%+4+(EDTY%*260),64,8:RECTANGLE FILL WOX%+32,WOY%+86+(EDTY%*260),64,8
2750IF WOY%+108+(EDTY%*260)<(BLK%!32) THEN GOTO 2820
2760FORL%=2 TO 12
2770REM BLK%!400=HAND%(12):BLK%!404=L%-1:SYS "Wimp_GetIconState",,BLK%+400
2780PROCplot256sprite(WE%,STR$L%,WOX%+((L%-1)*64)+32,WOY%+20+(EDTY%*260))
2790IF EDBR%<>L% THEN PROCcol(0,0,0) ELSE PROCcol(63,192,0)
2800RECTANGLE FILL WOX%+((L%-1)*64)+32,WOY%+4+(EDTY%*260),64,8:RECTANGLE FILL WOX%+((L%-1)*64)+32,WOY%+86+(EDTY%*260),64,8
2810NEXT
2820!SCALE%=(!SCALE%)*12:SCALE%!4=(SCALE%!4)*8
2830IF WOY%+108+(EDTY%*260)>(BLK%!40) THEN GOTO 2860
2840IF MODE<>15 THEN SYS "OS_SpriteOp",308,WE%,STR$EDBR%,WOX%+28,WOY%+112+(EDTY%*260),0,SCALE%,PIXTAB% ELSE SYS "OS_SpriteOp",308,WE%,STR$EDBR%,WOX%+28,WOY%+112+(EDTY%*260),0,SCALE%
2850EX%=WOX%+28:EY%=WOY%+112+(EDTY%*260):PROCcol(21,192,0):FORL%=0 TO 32:LINE EX%+(L%*24),EY%,EX%+(L%*24),EY%+512:NEXT:FORL%=0 TO 16:LINE EX%,EY%+(L%*32),EX%+768,EY%+(L%*32):NEXT
2860IF EDTY%=1 THEN WOX%+=32:WOY%+=16:PROCplotpal(OPAL%):PROCcol(63,192,0):RECTANGLE WOX%+((EFCOL% MOD 32)*24),WOY%+((EFCOL% DIV 32)*28),24,28:WOX%-=32:WOY%-=16
2870ENDPROC
2880
2890DEFPROCforcedrawmain
2900!BLK%=HAND%(2)
2910BLK%!4=0
2920BLK%!8=-1024*ZOOM%
2930BLK%!12=1280*ZOOM%
2940BLK%!16=0
2950SYS "Wimp_UpdateWindow",,BLK% TO FIN%
2960PROCgetrdor(1024*ZOOM%)
2970WHILE FIN%
2980PROCplotpic
2990SYS "Wimp_GetRectangle",,BLK% TO FIN%
3000ENDWHILE
3010ENDPROC
3020
3030DEFPROCquickdrawmain:IF NOT VACB% THEN ENDPROC
3040!BLK%=HAND%(2)
3050BLK%!4=CBMINX%
3060BLK%!8=CBMINY%
3070BLK%!12=CBMAXX%
3080BLK%!16=CBMAXY%
3090SYS "Wimp_UpdateWindow",,BLK% TO FIN%
3100PROCgetrdor(1024*ZOOM%)
3110WHILE FIN%
3120PROCplotpic
3130SYS "Wimp_GetRectangle",,BLK% TO FIN%
3140ENDWHILE
3150ENDPROC
3160
3170DEFPROCinpic:IF IP% THEN ENDPROC
3180IP%=TRUE
3190SYS "OS_SpriteOp",316,PIC%,"PIC" TO V1,V2,V3,V4
3200SYS "OS_ChangedBox",2
3210SYS "OS_ChangedBox",1
3220REM GCOL3,63:LINE 300,300,320,320:LINE 300,300,320,320
3230VDU23,6:FORL%=1 TO 5:VDU PAT%(L%):NEXT:VDU 0|
3240SYS6,163,242,PALE%
3250ENDPROC
3260
3270DEFPROCinpicR:SYS "OS_SpriteOp",316,PIC%,"PIC" TO B1,B2,B3,B4:ENDPROC
3280
3290DEFPROCinbackup:SYS "OS_SpriteOp",316,SPBUF%,"PIC" TO B1,B2,B3,B4:ENDPROC
3300
3310DEFPROCinsprite(ma%,sa%,sn$):SYS &2E,316+ma%,sa%,sn$ TO IS1,IS2,IS3,IS4:ENDPROC
3320
3330DEFPROCoutsprite:SYS &2E,IS1,IS2,IS3,IS4:ENDPROC
3340
3350DEFPROCoutbackup:SYS "OS_SpriteOp",B1,B2,B3,B4:ENDPROC
3360
3370DEFPROCoutpic:IF NOT IP% THEN ENDPROC
3380IP%=FALSE
3390SYS "OS_ChangedBox",-1 TO ,CBA%
3400IF SGN(CBA%!4)=-1 OR SGN(CBA%!8)=-1 OR SGN(CBA%!12)=-1 OR SGN(CBA%!16)=-1 THEN VACB%=FALSE:SYS "OS_ChangedBox":SYS "OS_SpriteOp",V1,V2,V3,V4:ENDPROC ELSE VACB%=TRUE
3410CBMINX%=CBA%!4:CBMINX%=CBMINX%*ZOOM%*2
3420CBMINY%=CBA%!8:CBMINY%=(-1024+(CBMINY%*4))*ZOOM%
3430CBMAXX%=CBA%!12:CBMAXX%=CBMAXX%*ZOOM%*2
3440CBMAXY%=CBA%!16:CBMAXY%=(-1024+(CBMAXY%*4))*ZOOM%
3450CBMAXX%+=4*ZOOM%
3460CBMAXY%+=4*ZOOM%
3470SYS "OS_ChangedBox"
3480SYS "OS_SpriteOp",V1,V2,V3,V4
3490ENDPROC
3500
3510DEFPROCredrawmain
3520IF FUSE%=32 THEN
3530IF FONT%<>0 AND EFM%<>-1 THEN
3540REM IF MODE<>EFM% THEN PROCinpic:SYS "ColourTrans_SetFontColours",FHAND%,BPAL%,FPAL%,14:PROCoutpic:EFM%=MODE
3550ENDIF
3560ENDIF
3570SYS "Wimp_RedrawWindow",,BLK% TO FIN%
3580PROCgetrdor(1024*ZOOM%)
3590WHILE FIN%:PROCplotpic:SYS "Wimp_GetRectangle",,BLK% TO FIN%
3600ENDWHILE
3610ENDPROC
3620
3630DEFPROCplotpic
3640IF MODE=15 AND ZOOM%=1 THEN SYS "OS_SpriteOp",290,PIC%,"PIC",WOX%,WOY%:PROCgrid:ENDPROC
3650IF MODE<>ESM% THEN ESM%=MODE:EPM%=MODE:SYS&40740,15,0,-1,-1,PIXTAB%
3660SYS&35,-1,5 TO ,,E%
3670SX%=2^(2-E%):SCALE%!4=SX%:SCALE%!12=1
3680SYS&35,-1,4 TO ,,E%
3690IF E%<1 THEN SX%=2^(1-E%):!SCALE%=SX%:SCALE%!8=1 ELSE SX%=2^(E%-1):!SCALE%=1:SCALE%!8=SX%
3700!SCALE%=(!SCALE%)*ZOOM%:SCALE%!4=(SCALE%!4)*ZOOM%
3710IF MODE=15 THEN TPIXTAB%=0 ELSE TPIXTAB%=PIXTAB%
3720SYS "OS_SpriteOp",308,PIC%,"PIC",WOX%,WOY%,0,SCALE%,TPIXTAB%:PROCgrid:ENDPROC
3730
3740DEFPROCgrid
3750IF GRCO%=-1 OR (2*GRIWI%*ZOOM%)<16 OR (4*GRIHE%*ZOOM%)<16 THEN ENDPROC
3760PROCgridcol
3770LOCAL X%,Y%
3780X%=(((BLK%!28)-WOX%) DIV (ZOOM%*(2*GRIWI%)))*(2*GRIWI%*ZOOM%)
3790Y%=(((BLK%!32)-WOY%) DIV (ZOOM%*(4*GRIHE%)))*(4*GRIHE%*ZOOM%)
3800XOF%=(GRIWI%-GRBX%)*2*ZOOM%
3810YOF%=(GRIHE%-GRBY%)*4*ZOOM%
3820X%+=WOX%-XOF%
3830Y%+=WOY%-YOF%
3840REPEAT:LINE X%,(BLK%!32),X%,(BLK%!40):X%+=(2*GRIWI%*ZOOM%):UNTIL X%>(BLK%!36)
3850REPEAT:LINE (BLK%!28),Y%,(BLK%!36),Y%:Y%+=(4*GRIHE%*ZOOM%):UNTIL Y%>(BLK%!40)
3860ENDPROC
3870
3880DEFPROCplotpal(PTU%)
3890PROCcol(63,192,0)
3900IF MODE<>15 THEN GOTO 3930
3910SYS "OS_SpriteOp",290,PTU%,"Palette",WOX%,WOY%:IF PTU%=PAL% THEN RECTANGLE WOX%+((COL% MOD 32)*24),WOY%+((COL% DIV 32)*28),24,28
3920ENDPROC
3930IF MODE<>EPM% THEN ESM%=MODE:EPM%=MODE:SYS&40740,15,0,-1,-1,PIXTAB%
3940SYS&35,-1,5 TO ,,E%
3950SX%=2^(2-E%):SCALE%!4=SX%:SCALE%!12=1
3960SYS&35,-1,4 TO ,,E%
3970IF E%<1 THEN SX%=2^(1-E%):!SCALE%=SX%:SCALE%!8=1 ELSE SX%=2^(E%-1):!SCALE%=1:SCALE%!8=SX%
3980SYS "OS_SpriteOp",308,PTU%,"Palette",WOX%,WOY%,0,SCALE%,PIXTAB%
3990IF PTU%=PAL% THEN RECTANGLE WOX%+((COL% MOD 32)*24),WOY%+((COL% DIV 32)*28),24,28
4000ENDPROC
4010
4020DEFPROCinpal:SYS "OS_SpriteOp",316,PAL%,"Palette" TO V1,V2,V3,V4:ENDPROC
4030
4040DEFPROCoutpal:SYS "OS_SpriteOp",V1,V2,V3,V4:ENDPROC
4050
4060DEFPROCtrasp(TC%)
4070PROCinpal:PROCtrasp2(TC%):PROCoutpal
4080ENDPROC
4090
4100DEFPROCtrasp2(TC%)
4110TRASP%?TC%=(TRASP%?TC%) EOR 1
4120TX%=((TC% MOD 32)*24):TY%=((TC% DIV 32)*28)
4130REM IF (TRASP%?TC%)=0 THEN GCOL0,PALTAB%?(TC%*2) TINT PALTAB%?((TC%*2)+1) ELSE PROCanticol(PALTAB%?(TC%*2),PALTAB%?((TC%*2)+1),0)
4140IF (TRASP%?TC%)=0 THEN GCOL0,PALTAB%?(TC%*2) TINT PALTAB%?((TC%*2)+1) ELSE GCOL0,63-(PALTAB%?(TC%*2)) TINT PALTAB%?((TC%*2)+1)
4150LINE TX%+6,TY%+20,TX%+18,TY%+20:LINE TX%+12,TY%+8,TX%+12,TY%+20
4160ENDPROC
4170
4180DEFPROCredrawpal
4190SYS "Wimp_RedrawWindow",,BLK% TO FIN%
4200PROCgetrdor(228)
4210WHILE FIN%:PROCplotpal(PAL%):SYS "Wimp_GetRectangle",,BLK% TO FIN%
4220ENDWHILE
4230ENDPROC
4240
4250DEFPROCredrawtback
4260SYS "Wimp_RedrawWindow",,BLK% TO FIN%
4270PROCgetrdor(228)
4280WHILE FIN%:PROCplotpal(OPAL%)
4290PROCcol(63,192,0):RECTANGLE WOX%+((FONTB% MOD 32)*24),WOY%+((FONTB% DIV 32)*28),24,28
4300SYS "Wimp_GetRectangle",,BLK% TO FIN%
4310ENDWHILE
4320ENDPROC
4330
4340DEFPROCredrawcolrep
4350SYS "Wimp_RedrawWindow",,BLK% TO FIN%
4360PROCgetrdor(556)
4370WHILE FIN%:WOY%+=290:PROCplotpal(SPBUF%):PROCcol(0,0,0):LINE WOX%,WOY%+224,WOX%+770,WOY%+224:WOY%-=290
4380PROCplotpal(OPAL%):PROCcol(0,0,0):LINE WOX%,WOY%+224,WOX%+770,WOY%+224
4390PROCcol(63,192,0):RECTANGLE WOX%+((SREP% MOD 32)*24),WOY%+290+((SREP% DIV 32)*28),24,28
4400SYS "Wimp_GetRectangle",,BLK% TO FIN%
4410ENDWHILE
4420ENDPROC
4430
4440DEFPROCforcedrawcolrep
4450!BLK%=HAND%(18)
4460BLK%!4=0
4470BLK%!8=-556
4480BLK%!12=770
4490BLK%!16=0
4500SYS "Wimp_UpdateWindow",,BLK% TO FIN%
4510PROCgetrdor(556)
4520WHILE FIN%
4530WOY%+=290:PROCplotpal(SPBUF%):PROCcol(0,0,0):LINE WOX%,WOY%+224,WOX%+770,WOY%+224:WOY%-=290
4540PROCplotpal(OPAL%):PROCcol(0,0,0):LINE WOX%,WOY%+224,WOX%+770,WOY%+224
4550PROCcol(63,192,0):RECTANGLE WOX%+((SREP% MOD 32)*24),WOY%+290+((SREP% DIV 32)*28),24,28
4560SYS "Wimp_GetRectangle",,BLK% TO FIN%
4570ENDWHILE
4580ENDPROC
4590
4600DEFFNcecf
4610IF FNhigh(11,26) THEN =1
4620IF FNhigh(11,28) THEN =2
4630IF FNhigh(11,30) THEN =3
4640IF FNhigh(11,32) THEN =4
4650=0
4660
4670DEFPROCredrawpat
4680SYS "Wimp_RedrawWindow",,BLK% TO FIN%
4690PROCgetpator
4700WHILE FIN%:PROCplotpal(OPAL%):PROCcol(0,0,0):LINE WOX%,WOY%+224,WOX%+770,WOY%+224
4710CECF%=FNcecf:FORK%=0 TO 7:L%=ECF%(K%+1,CECF%)
4720PE%=BTC%?L%:PROCcol(PALTAB%?(PE%*2),PALTAB%?((PE%*2)+1),0):RECTANGLE FILL WOX%-146,(WOY%+276)-(K%*40),38,36
4730NEXT
4740SYS "Wimp_GetRectangle",,BLK% TO FIN%
4750ENDWHILE
4760ENDPROC
4770
4780DEFFNgrafilno
4790IF FNhigh(13,95) THEN =0
4800IF FNhigh(13,99) THEN =1
4810IF FNhigh(13,101) THEN =2
4820IF FNhigh(13,103) THEN =3
4830IF FNhigh(13,97) THEN =4
4840=-1
4850
4860DEFPROCredrawfill
4870SYS "Wimp_RedrawWindow",,BLK% TO FIN%
4880PROCgetrdor(484)
4890WHILE FIN%:WOY%+=236:WOX%+=422:PROCplotpal(OPAL%):PROCcol(0,0,0):LINE WOX%,WOY%+224,WOX%+770,WOY%+224:WOX%-=140:WOY%-=140
4900FIX%=WOX%+200:GRFIN%=FNgrafilno:FORL%=0 TO 15:IF GRFIN%<>-1 THEN PROCcol(GRFI%(L%,0,GRFIN%),GRFI%(L%,1,GRFIN%),0) ELSE PROCcol(0,0,0)
4910RECTANGLE FILL FIX%,WOY%-28,42,32:FIX%+=44:NEXT
4920WOX%-=282:WOY%-=96:SYS "Wimp_GetRectangle",,BLK% TO FIN%
4930ENDWHILE
4940ENDPROC
4950
4960DEFPROCforcedrawfill
4970!BLK%=HAND%(13)
4980BLK%!4=0
4990BLK%!8=-500
5000BLK%!12=1200
5010BLK%!16=-360
5020SYS "Wimp_UpdateWindow",,BLK% TO FIN%
5030PROCgetrdor(484)
5040WHILE FIN%
5050FIX%=WOX%+482:GRFIN%=FNgrafilno:FORL%=0 TO 15:IF GRFIN%<>-1 THEN PROCcol(GRFI%(L%,0,GRFIN%),GRFI%(L%,1,GRFIN%),0) ELSE PROCcol(0,0,0)
5060RECTANGLE FILL FIX%,WOY%+68,42,32:FIX%+=44:NEXT
5070SYS "Wimp_GetRectangle",,BLK% TO FIN%
5080ENDWHILE
5090ENDPROC
5100
5110DEFPROCforcedrawpat
5120!BLK%=HAND%(11)
5130BLK%!4=0
5140BLK%!8=-356
5150BLK%!12=100
5160BLK%!16=0
5170SYS "Wimp_UpdateWindow",,BLK% TO FIN%
5180PROCgetpator
5190WHILE FIN%
5200PROCplotpal(OPAL%):PROCcol(0,0,0):LINE WOX%,WOY%+224,WOX%+770,WOY%+224
5210CECF%=FNcecf
5220FOR RK%=0 TO 7
5230L%=ECF%(RK%+1,CECF%)
5240PE%=BTC%?L%:PROCcol(PALTAB%?(PE%*2),PALTAB%?((PE%*2)+1),0):RECTANGLE FILL WOX%-146,(WOY%+276)-(RK%*40),38,36
5250RECTANGLE FILL WOX%-146,(WOY%+276)-(RK%*40),38,36
5260NEXT
5270SYS "Wimp_GetRectangle",,BLK% TO FIN%
5280ENDWHILE
5290ENDPROC
5300
5310DEFFNctb(co%,ti%):by%=-1:FORL%=0 to 255
5320
5330DEFPROCdrawpicinit
5340!BLK%=HAND%(2)
5350BLK%!4=0
5360BLK%!8=-936
5370BLK%!12=1236
5380BLK%!16=0
5390SYS "Wimp_UpdateWindow",,BLK% TO FIN%
5400PROCgetrdor(1024*ZOOM%)
5410ENDPROC
5420
5430DEFPROCforcedrawpal(PTU%)
5440!BLK%=HAND%(3)
5450BLK%!4=0
5460BLK%!8=-228
5470BLK%!12=770
5480BLK%!16=0
5490SYS "Wimp_UpdateWindow",,BLK% TO FIN%
5500PROCgetrdor(228)
5510WHILE FIN%
5520PROCplotpal(PTU%)
5530SYS "Wimp_GetRectangle",,BLK% TO FIN%
5540ENDWHILE
5550ENDPROC
5560
5570DEFPROCforcedrawtback
5580!BLK%=HAND%(15)
5590BLK%!4=0
5600BLK%!8=-228
5610BLK%!12=770
5620BLK%!16=0
5630SYS "Wimp_UpdateWindow",,BLK% TO FIN%
5640PROCgetrdor(228)
5650WHILE FIN%
5660PROCplotpal(OPAL%)
5670PROCcol(63,192,0):RECTANGLE WOX%+((FONTB% MOD 32)*24),WOY%+((FONTB% DIV 32)*28),24,28
5680SYS "Wimp_GetRectangle",,BLK% TO FIN%
5690ENDWHILE
5700ENDPROC
5710
5720DEFPROCforcedrawgraph(WH%)
5730!BLK%=HAND%(WH%)
5740BLK%!4=0:BLK%!8=-300:IF WH%<>28 THEN BLK%!12=300 ELSE BLK%!12=900
5750BLK%!16=0
5760SYS "Wimp_UpdateWindow",,BLK% TO FIN%:PROCgetgraphor
5770WHILE FIN%:PROCdrawgraph:SYS "Wimp_GetRectangle",,BLK% TO FIN%:ENDWHILE:ENDPROC
5780
5790DEFPROCredrawgraph
5800SYS "Wimp_RedrawWindow",,BLK% TO FIN%
5810PROCgetgraphor
5820WHILE FIN%:PROCdrawgraph:SYS "Wimp_GetRectangle",,BLK% TO FIN%:ENDWHILE:ENDPROC
5830
5840DEFPROCgetgraphor
5850WOX%=(BLK%!4-BLK%!20)+44
5860WOY%=(BLK%!16-BLK%!24)-256
5870ENDPROC
5880
5890DEFPROCdrawgraph
5900PROCcol(63,192,0):RECTANGLE FILL WOX%+2,WOY%+4,252,248:PROCcol(0,0,0):LINE WOX%,WOY%,WOX%,WOY%+252:LINE WOX%,WOY%,WOX%+254,WOY%
5910CASE FUSE% OF
5920WHEN 43:CONL%=VALFNgi(26,18):CONH%=VALFNgi(26,20):IF CONL%<CONH% THEN PLOT4,WOX%+CONL%*17,WOY%:PLOT5,WOX%+CONH%*17,WOY%+252 ELSE PLOT4,WOX%+CONH%*17,WOY%+252:PLOT5,WOX%+CONL%*17,WOY%
5930WHEN 44:POL%=VALFNgi(27,22):POH%=VALFNgi(27,24):PON%=VALFNgi(27,26)
5940STWI=PON%/16:STHE=(POH%-POL%)/(PON%-1):FORL%=0 TO 15:BH%=POL%+(INT(STWI*L%)*STHE):RECTANGLE WOX%+(L%*16),WOY%,16,BH%*17
5950NEXT
5960ENDCASE
5970ENDPROC
5980
5990DEFPROCgetpator
6000WOX%=(BLK%!4-BLK%!20)+180
6010WOY%=(BLK%!16-BLK%!24)-340
6020ENDPROC
6030
6040DEFPROCpicpoll
6050SYS "Wimp_GetPointerInfo",,BLK%
6060IF MBUS% AND BLK%!8<>0 THEN ENDPROC ELSE MBUS%=FALSE
6070IF BLK%!8=0 AND LEGO% THEN LEGO%=FALSE
6080IF BLK%!8<>0 AND LEGO% THEN BLK%!8=0
6090WE%=0:FORPC%=0 TO NOWIND%:IF BLK%!12=HAND%(PC%) THEN WE%=1:PC%=NOWIND%:NEXT ELSE NEXT
6100IF WE%=0 THEN IDRAG%=(BLK%!8<>0)
6110IF BLK%!8=0 THEN IDRAG%=FALSE
6120IF BLK%!12<>HAND%(2) OR BLK%!16<>-1 THEN ENDPROC
6130IF BLK%!8<>0 AND IDRAG% THEN ENDPROC
6140X%=!BLK%:Y%=BLK%!4:BUT%=BLK%!8
6150IF BUT%=2 THEN ENDPROC
6160CASE FUSE% OF
6170WHEN 1:IF FUST%=0 AND BUT%<>0 THEN PROCpicpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:GOTO 7190
6180IF BUT%=0 OR FUST%=0 THEN FUST%=0:GOTO 7190
6190PROCpicpos:PROCinpic:PROCsetcol:PROCl(X%(0),Y%(0),X%,Y%):PROCoutpic
6200PROCquickdrawmain
6210X%(0)=X%:Y%(0)=Y%
6220WHEN 4:IF FUST%=0 THEN PROCpaintscale:PROCpicpos:PROCinpic:PROCeorback:PROCpaintbrush(X%,Y%):PROCoutpic:PROCquickdrawmain:OX%=X%:OY%=Y%:FUST%=1:GOTO 7190
6230PROCpicpos
6240IF X%<>OX% OR Y%<>OY% THEN PROCpaintscale:PROCinpic:PROCeorback:PROCpaintbrush(OX%,OY%):PROCpaintbrush(X%,Y%):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain
6250WHEN 11:IF FUST%=0 AND BUT%<>0 THEN PROCpicpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:OX%=X%:OY%=Y%:PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 7190
6260IF FUST%=0 THEN GOTO 7190
6270IF BUT%=1 AND FUST%=1 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCpicpos:OX%=X%:OY%=Y%:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 7190
6280IF BUT%=1 AND FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&C5,OX%,OY%):PROCpicpos:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 7190
6290IF BUT%=4 AND (OX%<>X%(0) OR OY%<>Y%(0)) AND FUST%=1 THEN PROCinpic:PROCeoc:X%(1)=OX%:Y%(1)=OY%:LINE X%(0),Y%(0),OX%,OY%:PROCpicpos:OX%=X%:OY%=Y%:PROCelip(&C5,X%,Y%):PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=2:GOTO 7190
6300IF BUT%=4 AND (OX%<>X%(1) OR OY%<>Y%(1)) AND FUST%=2 THEN PROCinpic:PROCeoc:PROCpicpos:PROCelip(&C5,OX%,OY%):PROCsetcol:PROCelip(&C5,X%,Y%):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=0:GOTO 7190
6310PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 7190
6320IF FUST%=1 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:OX%=X%:OY%=Y%:LINE X%(0),Y%(0),X%,Y%:PROCoutpic:PROCquickdrawmain
6330IF FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&C5,OX%,OY%):OX%=X%:OY%=Y%:PROCelip(&C5,X%,Y%):PROCoutpic:PROCquickdrawmain
6340WHEN 13:IF FUST%=0 AND BUT%<>0 THEN PROCpicpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:OX%=X%:OY%=Y%:PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 7190
6350IF FUST%=0 THEN GOTO 7190
6360IF BUT%=1 AND FUST%=1 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCpicpos:OX%=X%:OY%=Y%:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 7190
6370IF BUT%=1 AND FUST%=2 THEN PROCinpic:PROCeoc:PROCpara(0,0,OX%,OY%):PROCpicpos:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 7190
6380IF BUT%=4 AND (OX%<>X%(0) OR OY%<>Y%(0)) AND FUST%=1 THEN PROCinpic:PROCeoc:X%(1)=OX%:Y%(1)=OY%:LINE X%(0),Y%(0),OX%,OY%:PROCpicpos:OX%=X%:OY%=Y%:PROCpara(0,0,X%,Y%):PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=2:GOTO 7190
6390IF BUT%=4 AND (OX%<>X%(1) OR OY%<>Y%(1)) AND FUST%=2 THEN PROCinpic:PROCeoc:PROCpicpos:PROCpara(0,0,OX%,OY%):PROCsetcol:PROCpara(1,0,X%,Y%):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=0:GOTO 7190
6400PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 7190
6410IF FUST%=1 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:OX%=X%:OY%=Y%:LINE X%(0),Y%(0),X%,Y%:PROCoutpic:PROCquickdrawmain
6420IF FUST%=2 THEN PROCinpic:PROCeoc:PROCpara(0,0,OX%,OY%):OX%=X%:OY%=Y%:PROCpara(0,0,X%,Y%):PROCoutpic:PROCquickdrawmain
6430WHEN 16:IF FUST%=0 AND BUT%<>0 THEN PROCpicpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:OX%=X%:OY%=Y%:PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 7190
6440IF FUST%=0 THEN GOTO 7190
6450IF BUT%=1 AND FUST%=1 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCpicpos:OX%=X%:OY%=Y%:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 7190
6460IF BUT%=1 AND FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&B5,OX%,OY%):PROCpicpos:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 7190
6470IF BUT%=4 AND (OX%<>X%(0) OR OY%<>Y%(0)) AND FUST%=1 THEN PROCinpic:PROCeoc:X%(1)=OX%:Y%(1)=OY%:LINE X%(0),Y%(0),OX%,OY%:PROCpicpos:OX%=X%:OY%=Y%:PROCelip(&B5,X%,Y%):PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=2:GOTO 7190
6480IF BUT%=4 AND (OX%<>X%(1) OR OY%<>Y%(1)) AND FUST%=2 THEN PROCinpic:PROCeoc:PROCpicpos:PROCelip(&B5,OX%,OY%):PROCsetcol:PROCelip(&B5,X%,Y%):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=0:GOTO 7190
6490PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 7190
6500IF FUST%=1 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:OX%=X%:OY%=Y%:LINE X%(0),Y%(0),X%,Y%:PROCoutpic:PROCquickdrawmain
6510IF FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&B5,OX%,OY%):OX%=X%:OY%=Y%:PROCelip(&B5,X%,Y%):PROCoutpic:PROCquickdrawmain
6520WHEN 23:PROCpoll_23
6530WHEN 25:PROCpoll_25
6540WHEN 27:IF FUST%<2 THEN PROCrectpoll:GOTO 7190
6550PROCspinit:PROCspbuf(161*1024):IF Q% THEN PROCspbuferr
6560PROCbackuppic:PROCswapcorns
6570VARS!20=BTC%:VARS!24=PALTAB%
6580VARS!28=PIC%:VARS!32=SPBUF%
6590VARS!36=X%(0):VARS!40=Y%(0)
6600VARS!44=OX%:VARS!48=OY%
6610A%=VARS:SYS "Hourglass_On":CALL pixaverage:SYS "Hourglass_Off":PROCspinit:PROCforcedrawmain:FUST%=0
6620WHEN 29:IF FUST%=0 THEN PROCpaintscale2:PROCpicpos:PROCinpic:PROCeorback:PROCpaintbrush(X%,Y%):PROCoutpic:PROCquickdrawmain:OX%=X%:OY%=Y%:FUST%=1:GOTO 7190
6630PROCpicpos
6640IF X%<>OX% OR Y%<>OY% THEN PROCpaintscale2:PROCinpic:PROCeorback:PROCpaintbrush(OX%,OY%):PROCpaintbrush(X%,Y%):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain
6650WHEN 30:IF FUST%=0 THEN PROCpaintscale2:PROCpicpos:PROCinpic:PROCeorback:PROCpaintbrush(X%,Y%):PROCoutpic:PROCquickdrawmain:OX%=X%:OY%=Y%:FUST%=1:GOTO 7190
6660PROCpicpos
6670IF X%<>OX% OR Y%<>OY% THEN PROCpaintscale2:PROCinpic:PROCeorback:PROCpaintbrush(OX%,OY%):PROCpaintbrush(X%,Y%):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain
6680WHEN 32:IF FONT%<>0 THEN
6690PROCpicpos:IF BUT%=4 AND FUST%<>0 THEN PROCinbackup:SYS "Font_SetFont",FHAND%:SYS "Font_Paint",,TEXT$,16,X%,Y%:PROCoutbackup
6700IF FUST%<>0 AND (X%<>OX% OR Y%<>OY%) THEN ET%=1:PROCrestpic:ET%=2:ET%=3:PROCinpicR:SYS "Font_SetFont",FHAND%:ET%=4:SYS "Font_Paint",,TEXT$,16,X%,Y%:PROCoutbackup:NTTP%+=1:ET%=5:ET%=6:OX%=X%:OY%=Y%:PROCforcedrawmain:ET%=7:OX%=X%:OY%=Y%
6710ELSE
6720PROCpicpos:IF BUT%=4 AND FUST%<>0 THEN PROCinbackup:PROCostext(X%,Y%):PROCoutbackup
6730IF FUST%<>0 AND (X%<>OX% OR Y%<>OY%) THEN PROCrestpic:PROCinpic:PROCostext(X%,Y%):PROCoutpic:PROCforcedrawmain:OX%=X%:OY%=Y%
6740ENDIF:GOTO 7190
6750WHEN 31:IF FUST%<2 THEN PROCrectpoll:GOTO 7190
6760PROCswapcorns:FMINX%=X%(0):FMINY%=Y%(0):FMAXX%=OX%:FMAXY%=OY%
6770SYS "Hourglass_On":PROCfill:SYS "Hourglass_Off":FUST%=0
6780WHEN 33:IF FUST%>=2 THEN GOTO 6800
6790IF FUST%=0 AND BUT%=1 THEN PROCpicpos:PROCinpic:CO%=POINT(X%,Y%):TI%=TINT(X%,Y%):PROCoutpic:SREP%=FNfindpalent(CO%,TI%):PROCforcedrawcolrep:GOTO 7190 ELSE PROCrectpoll:GOTO 7190
6800PROCswapcorns:FMINX%=X%(0):FMINY%=Y%(0):FMAXX%=OX%:FMAXY%=OY%
6810SYS "Hourglass_On":!VARS=PIC%:VARS!4=PIC%:VARS!8=X%(0):VARS!12=Y%(0):VARS!16=OX%:VARS!20=OY%:VARS!24=BTC%:VARS!28=TTB%:VARS!32=REPS%:A%=VARS:CALL colrep:SYS "Hourglass_Off":FUST%=0:PROCforcedrawmain
6820WHEN 34:IF FNhigh(31,3) OR FNhigh(31,4) THEN GOTO 7190
6830IF FUST%=0 THEN 6850
6840IF BUT%=4 THEN PROCinpic:PROCpicpos:PROCpimport(OX%,OY%,3):PROCimptile:OX%=X%:OY%=Y%:PROCpimport(OX%,OY%,3):PROCoutpic:PROCquickdrawmain:GOTO 7190
6850IF FUST%=0 THEN FUST%=1:PROCpicpos:OX%=X%:OY%=Y%:PROCinpic:PROCpimport(X%,Y%,3):PROCoutpic:PROCquickdrawmain:GOTO 7190
6860PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 7190
6870PROCinpic:PROCpimport(OX%,OY%,3):OX%=X%:OY%=Y%:PROCpimport(X%,Y%,3):PROCoutpic:PROCquickdrawmain
6880WHEN 36:IF FUST%=0 THEN PROCpicpos:PROCinpic:PROCeoc:RECTANGLE X%,Y%,FRW%*2,FRH%*4:PROCoutpic:PROCquickdrawmain:OX%=X%:OY%=Y%:FUST%=1
6890PROCpicpos:IF X%<>OX% OR Y%<>OY% THEN PROCinpic:PROCeoc:RECTANGLE OX%,OY%,FRW%*2,FRH%*4:OX%=X%:OY%=Y%:RECTANGLE OX%,OY%,FRW%*2,FRH%*4:PROCoutpic:PROCquickdrawmain
6900IF BUT%<>4 THEN 7190
6910PROCinpic:PROCeoc:RECTANGLE OX%,OY%,FRW%*2,FRH%*4:PROCsetcol:RECTANGLE OX%,OY%,FRW%*2,FRH%*4:PROCeoc:RECTANGLE OX%,OY%,FRW%*2,FRH%*4:PROCoutpic:PROCquickdrawmain
6920WHEN 38:PROCpoll_38
6930WHEN 39:PROCpoll_39
6940WHEN 40:PROCpoll_40
6950WHEN 41:PROCpoll_41
6960WHEN 42:IF FUST%<2 THEN PROCrectpoll:GOTO 7190
6970PROCsupixtrans
6980RW%=VALFNgi(25,13):GW%=VALFNgi(25,15):BW%=VALFNgi(25,17):FORL%=0 TO 255:SYS "ColourTrans_ColourNumberToGCOL",L% TO G%
6990RC%=(G%AND%1111)*RW%:GC%=(((G%AND48)>>2)+(G%AND3))*GW%:BC%=(((G%AND192)>>4)+(G%AND3))*BW%
7000TC%=((RC%+GC%+BC%)DIV3):IF TC%>15 THEN TC%=15
7010TC%=(TC% AND 3)+((TC%AND12)*RSM%)+(((TC%AND12)<<2)*GSM%)+(((TC%AND12)<<4)*BSM%):SYS"ColourTrans_GCOLToColourNumber",TC% TO TC%
7020TRANSTAB%?L%=TC%:NEXT
7030A%=VARS:CALL transarea:SYS "Hourglass_Off":FUST%=0:PROCforcedrawmain
7040WHEN 43:PROCpoll_43
7050WHEN 44:PROCpoll_44
7060WHEN 47:IF FUST%<2 THEN PROCrectpoll:GOTO 7190
7070PROCspinit:PROCspbuf(161*1024):IF Q% THEN PROCspbuferr
7080PROCbackuppic:PROCswapcorns
7090VARS!8=X%(0):VARS!12=Y%(0):VARS!16=OX%:VARS!20=OY%:VARS!24=VAL(FNgi(29,5)):VARS!28=BLK%+512:A%=VARS:SYS"Hourglass_On":CALL filter:SYS"Hourglass_Off":PROCspinit:PROCforcedrawmain:FUST%=0
7100WHEN 48:IF FUST%<2 THEN PROCrectpoll:GOTO 7190
7110PROCspinit:PROCspbuf(161*1024):IF Q% THEN PROCspbuferr
7120PROCbackuppic:PROCswapcorns
7130WE%=1:GOTO 7230
7140IF FNhigh(30,25) THEN VARS!36=1 ELSE VARS!36=&280
7150VARS!40=0:IF FNhigh(30,44) THEN VARS!40=1
7160IF FNhigh(30,32) THEN VARS!44=1 ELSE VARS!44=0
7170VARS!8=X%(0):VARS!12=Y%(0):VARS!16=OX%:VARS!20=OY%:VARS!24=TAS%+512:VARS!28=BTC%:VARS!32=TRASP%:A%=VARS:CALL wobble:SYS "Hourglass_Off":PROCspinit:PROCforcedrawmain:FUST%=0
7180IF WER% THEN PROCkillf:FUSE%=-1:GOTO 90
7190ENDCASE
7200ENDPROC
7210
7220REM ** This is jumped straight to because of error control (flub!)
7230A=VAL(FNgi(30,42)):K%=TAS%+512:L%=0:WER%=FALSE:ER%=FALSE:F$=FNgi(30,27):MG%=VAL(FNgi(30,5)):SYS "Hourglass_On":PROCsi(30,36," ")
7240ON ERROR ER%=TRUE:WER%=TRUE:GOTO 7260
7250K%!(L%*4)=EVAL(F$)*MG%
7260IF ER%=TRUE THEN PROCsi(30,36,"Error at A="+STR$(A)):K%!L%=0:ER%=FALSE
7270A+=VAL(FNgi(30,11)):L%+=1:IF L%<618 THEN GOTO 7250
7280ON ERROR PROCmakerr
7290IF WE%=2 THEN GOTO 12100 ELSE GOTO 7140
7300
7310DEFPROCcontrast(RETURN L%)
7320IF CONL%>CONH% THEN GOTO 7350
7330IF L%<=CONL% THEN L%=0:ENDPROC ELSE IF L%>=CONH% THEN L%=15:ENDPROC
7340K%=L%-CONL%:I%=CONH%-CONL%:L%=(K%/I%)*15:ENDPROC
7350IF CONL%=CONH% THEN GOTO 7380
7360IF L%<=CONH% THEN L%=15:ENDPROC ELSE IF L%>=CONL% THEN L%=15:ENDPROC
7370K%=L%-CONH%:I%=CONL%-CONH%:L%=15-((K%/I%)*15):ENDPROC
7380IF L%<CONL% THEN L%=0 ELSE L%=15
7390ENDPROC
7400
7410DEFPROCsupixtrans:PROCswapcorns:FMINX%=X%(0):FMINY%=Y%(0):FMAXX%=OX%:FMAXY%=OY%:SYS "Hourglass_On":!VARS=PIC%:VARS!4=PIC%:VARS!8=X%(0):VARS!12=Y%(0):VARS!16=OX%:VARS!20=OY%:VARS!24=TRASP%:VARS!28=BTC%:VARS!32=TRANSTAB%:ENDPROC
7420
7430DEFPROCprotbox(CX%,CY%):PROCeoc:R%=ROT%:PROCrotpoint(FMINX%,FMINY%,R%,X1%,Y1%):PROCrotpoint(FMAXX%,FMINY%,R%,X2%,Y2%):PROCrotpoint(FMAXX%,FMAXY%,R%,X3%,Y3%):PROCrotpoint(FMINX%,FMAXY%,R%,X4%,Y4%)
7440PROCrotpoint(0,(FMAXY%DIV3)*2,R%,MX1%,MY1%):PROCrotpoint(0,(FMAXY%DIV3)*4,R%,MX2%,MY2%)
7450X1%+=CX%:X2%+=CX%:X3%+=CX%:X4%+=CX%
7460Y1%+=CY%:Y2%+=CY%:Y3%+=CY%:Y4%+=CY%
7470PLOT4,X1%,Y1%:PLOT5,X2%,Y2%:PLOT5,X3%,Y3%:PLOT5,X4%,Y4%:PLOT5,X1%,Y1%
7480LINE MX1%+CX%,MY1%+CY%,MX2%+CX%,MY2%+CY%
7490ENDPROC
7500
7510DEFPROCrotpoint(R0%,R1%,R%,RETURN RPX%,RETURN RPY%)
7520R6%=(ROTTAB%!(R%*4))>>12:R7%=(!(ROTTAB%+(R%*4)+&168))>>12:R8%=R0%*R6%:R5%=R1%*R7%:R8%-=R5%:R5%=R1%*R6%:R1%=R0%*R7%:R1%+=R5%:RPX%=R1%>>18:RPY%=-(R8%>>18)
7530ENDPROC
7540
7550DEFFNperc(WH%,IH%)
7560I$=FNgi(WH%,IH%):IF RIGHT$(I$,1)="%" THEN I$=LEFT$(I$,LEN(I$)-1)
7570=VAL(I$)
7580
7590DEFPROCgrabpoll(FT%)
7600IF FUST%=0 AND BUT%<>0 THEN PROCpicpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:OX%=X%:OY%=Y%:PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain:PROCletgo:ENDPROC
7610IF FUST%=0 THEN ENDPROC
7620IF BUT%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCpicpos:OX%=X%:OY%=Y%:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:ENDPROC
7630IF BUT%<>4 OR (OX%=X%(0) AND OY%=Y%(0)) THEN GOTO 7720
7640PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCpicpos:PROCspbuf(FNspritesize(X%-X%(0),Y%-Y%(0),ABS(FNhigh(8,14)))):IF Q% THEN RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCspinit:PROCspbuferr
7650GRN$="GRAB":SYS&2E,272,SPBUF%,"GRAB",,X%(0),Y%(0),X%,Y%:IF FNhigh(8,14) THEN SYS&2E,285,SPBUF%,"GRAB":GRABM%=8:PROCfillmask ELSE GRABM%=0
7660GRWI%=ABS(X%-X%(0)):GRHE%=ABS(Y%-Y%(0))
7670IF X%<X%(0) THEN SWAP X%(0),X%
7680IF Y%<Y%(0) THEN SWAP Y%(0),Y%
7690IF FT%=1 THEN SYS&2E,290,SPBUF%,"GRAB",X%(0),Y%(0),3+GRABM%
7700PROCpgrab(X%,Y%,3)
7710OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=2:ENDPROC
7720PROCpicpos:IF X%=OX% AND Y%=OY% THEN ENDPROC
7730PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):OX%=X%:OY%=Y%:RECTANGLE X%(0),Y%(0),X%-X%(0),Y%-Y%(0):PROCoutpic:PROCquickdrawmain
7740ENDPROC
7750
7760DEFPROCrectpoll
7770IF FUST%=0 AND BUT%<>0 THEN PROCpicpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:OX%=X%:OY%=Y%:PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain:PROCletgo:ENDPROC
7780IF FUST%=0 THEN ENDPROC
7790IF BUT%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCpicpos:OX%=X%:OY%=Y%:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:ENDPROC
7800IF BUT%<>4 OR (OX%=X%(0) AND OY%=Y%(0)) THEN GOTO 7850
7810PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCpicpos
7820IF X%<X%(0) THEN SWAP X%(0),X%
7830IF Y%<Y%(0) THEN SWAP Y%(0),Y%
7840OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=2:ENDPROC
7850PROCpicpos:IF X%=OX% AND Y%=OY% THEN ENDPROC
7860PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):OX%=X%:OY%=Y%:RECTANGLE X%(0),Y%(0),X%-X%(0),Y%-Y%(0):PROCoutpic:PROCquickdrawmain
7870ENDPROC
7880
7890DEFPROCpgrab(DX%,DY%,PL%)
7900XR=GRXM%/GRXD%
7910YR=GRYM%/GRYD%
7920!SCALE%=GRXM%
7930SCALE%!4=GRYM%
7940SCALE%!8=GRXD%
7950SCALE%!12=GRYD%
7960SYS&2E,308,SPBUF%,"GRAB",DX%-((GRWI% DIV 2)*XR),DY%-((GRHE% DIV 2)*YR),PL%+GRABM%,SCALE%
7970ENDPROC
7980
7990DEFPROCpimport(DX%,DY%,PL%)
8000XR=GRXM%/GRXD%:YR=GRYM%/GRYD%
8010IO%!20=(!IO%)*GRXM%
8020IO%!24=(IO%!4)*GRYM%
8030IO%!28=(IO%!8)*GRXD%
8040IO%!32=(IO%!12)*GRYD%
8050IF NOT GRMA% THEN SYS&2E,308,SPBUF%,GRN$,DX%-((IMW% DIV 2)*XR),DY%-((IMH% DIV 2)*YR),PL%,IO%+20,IMPT% ELSE SYS&2E,308,SPBUF%,GRN$,DX%-((IMW% DIV 2)*XR),DY%-((IMH% DIV 2)*YR),PL%+8,IO%+20,IMPT%
8060ENDPROC
8070
8080DEFPROCpara(LT%,PL%,DX%,DY%)
8090IF PL%=1 THEN PROCelip(&75,DX%,DY%):ENDPROC
8100IF LT%=1 THEN
8110PROCl(X%(0),Y%(0),X%(1),Y%(1))
8120PROCl(X%(1),Y%(1),DX%,DY%)
8130PLOT LITY%-4,X%(0)-X%(1),Y%(0)-Y%(1)
8140PLOT LITY%,X%(0),Y%(0)
8150ELSE
8160LINE X%(0),Y%(0),X%(1),Y%(1)
8170LINE X%(1),Y%(1),DX%,DY%
8180PLOT1,X%(0)-X%(1),Y%(0)-Y%(1)
8190PLOT5,X%(0),Y%(0)
8200ENDIF
8210ENDPROC
8220
8230DEFPROCelip(PL%,DX%,DY%)
8240MOVE X%(0),Y%(0)
8250MOVE X%(1),Y%(1)
8260PLOT PL%,DX%,DY%
8270ENDPROC
8280
8290DEFPROCtri(PL%,DX%,DY%)
8300IF PL%=5 OR PL%=85 THEN PLOT4,DX%,DY%:PLOT 5,X%(0),Y%(0):PLOT 5,X%(1),Y%(1):PLOT PL%,DX%,DY% ELSE PLOT4,DX%,DY%:PLOT LITY%,X%(0),Y%(0):PLOT LITY%,X%(1),Y%(1):PLOT LITY%,DX%,DY%
8310ENDPROC
8320
8330DEFFNdist(DX%,DY%):=SQR(((DX%-X%(0))^2)+((DY%-Y%(0))^2))
8340
8350DEFPROCpaintbrush(BX%,BY%):SYS&2E,306,BRUSH%,STR$(SELBR%),BX%-(32*XR),BY%-(32*YR),,SCALE%:ENDPROC
8360
8370DEFPROCpaintbrush2(BX%,BY%):SYS&2E,305,BRUSH%,STR$(SELBR%),BX%-32,BY%-32:ENDPROC
8380
8390DEFPROCletgo:LEGO%=TRUE:ENDPROC:REPEAT:MOUSE X%,Y%,H%:UNTIL H%=0:ENDPROC
8400
8410DEFPROCkillf:LAOPWI%=-1:IF TKH%<>-1 THEN PROCiconlo(32,TKH%):TKH%=-1
8420CASE FUSE% OF
8430IF FUSE%<>32 THEN PROCspbuf(0)
8440
8450
8460WHEN 4:PROCclosewind(5):IF FUST%>0 THEN PROCinpic:PROCpaintscale:PROCeorback:PROCpaintbrush(OX%,OY%):PROCoutpic:PROCquickdrawmain
8470
8480
8490WHEN 11:IF FUST%=1 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCoutpic:PROCquickdrawmain
8500IF FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&C5,OX%,OY%):PROCoutpic:PROCquickdrawmain
8510WHEN 13:IF FUST%=1 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCoutpic:PROCquickdrawmain
8520IF FUST%=2 THEN PROCinpic:PROCeoc:PROCpara(0,0,OX%,OY%):PROCoutpic:PROCquickdrawmain
8530WHEN 16:IF FUST%=1 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCoutpic:PROCquickdrawmain
8540IF FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&B5,OX%,OY%):PROCoutpic:PROCquickdrawmain
8550WHEN 18:PROCkill_18
8560WHEN 19:PROCkill_19
8570WHEN 20:PROCkill_20
8580WHEN 21:PROCkill_21
8590WHEN 22:IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
8600WHEN 23:PROCkill_23
8610WHEN 25:PROCkill_25
8620WHEN 27:IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
8630WHEN 28:IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
8640WHEN 29:PROCclosewind(5):IF FUST%>0 THEN PROCinpic:PROCpaintscale2:PROCeorback:PROCpaintbrush(OX%,OY%):PROCoutpic:PROCquickdrawmain
8650WHEN 30:PROCclosewind(5):IF FUST%>0 THEN PROCinpic:PROCpaintscale2:PROCeorback:PROCpaintbrush(OX%,OY%):PROCoutpic:PROCquickdrawmain
8660WHEN 32:PROCrestpic:PROCforcedrawmain:PROCclosewind(14):PROCspinit:IF FONT%<>0 THEN PROClosefont
8670WHEN 31:IF GRTY%=1 THEN
8680IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
8690ENDIF
8700WHEN 33:PROCclosewind(18):PROCspinit:IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
8710WHEN 34:IF FUST%=1 THEN PROCinpic:PROCpimport(OX%,OY%,3):PROCoutpic:PROCquickdrawmain
8720PROCclosewind(8):PROCspinit
8730WHEN 35:IF FUST%<2 THEN PROCclosewind(8)
8740IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
8750IF FUST%=3 THEN PROCclosewind(7)
8760WHEN 36:IF FUST%<>0 THEN PROCinpic:PROCeoc:RECTANGLE OX%,OY%,FRW%*2,FRH%*4:PROCoutpic:PROCquickdrawmain
8770
8780WHEN 38:PROCkill_38
8790WHEN 39:PROCkill_39
8800WHEN 40:PROCkill_40
8810WHEN 41:PROCkill_41
8820WHEN 42:PROCclosewind(25):PROCmeoc
8830WHEN 43:PROCkill_43
8840WHEN 44:PROCkill_44
8850
8860
8870WHEN 47:PROCclosewind(29):PROCmeoc
8880WHEN 48:PROCclosewind(30):PROCmeoc
8890ENDCASE
8900PROCwindname(2,PIC$)
8910ENDPROC
8920
8930DEFPROCmeoc:PROCspinit:IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
8940ENDPROC
8950
8960DEFPROCeoc:GCOL3,63 TINT 192:ENDPROC
8970
8980DEFPROCeorback:GCOL3,191 TINT 192:ENDPROC
8990
9000DEFPROCpickcol
9010XOF%=!BLK%:YOF%=BLK%!4:PROCscreentowork(HAND%(3), XOF%,YOF%):YOF%=228+YOF%
9020IF XOF%>766 THEN XOF%=766
9030IF YOF%>220 THEN YOF%=220
9040IF MOUB%=4 THEN COL%=(XOF% DIV 24)+((YOF% DIV 28)*32) ELSE IF MOUB%=1 THEN PROCtrasp((XOF% DIV 24)+((YOF% DIV 28)*32))
9050PROCforcedrawpal(PAL%)
9060ENDPROC
9070
9080DEFPROCtbackclick
9090BLK%!8=HAND%(15):SYS "Wimp_GetWindowState",,BLK%+8
9100XOF%=(!BLK%)-(BLK%!12):IF XOF%>766 THEN XOF%=766
9110YOF%=(BLK%!4)-(BLK%!16):IF YOF%>220 THEN YOF%=220
9120FONTB%=(XOF% DIV 24)+((YOF% DIV 28)*32)
9130PROCforcedrawtback
9140ENDPROC
9150
9160DEFPROCpicpos
9170SCRX%=!BLK%:SCRY%=BLK%!4
9180BLK%!8=HAND%(2):SYS "Wimp_GetWindowState",,BLK%+8
9190X%=(((!BLK%)-(BLK%!12))+(BLK%!28)) DIV ZOOM%
9200Y%=1024-((((BLK%!24)-(BLK%!4))-(BLK%!32)) DIV ZOOM%)
9210IF X%<0 THEN X%=0
9220IF X%>1279 THEN X%=1279
9230IF Y%<0 THEN Y%=0
9240IF Y%>1023 THEN Y%=1023
9250IF NOT GRLO% THEN ENDPROC
9260XOF%=(GRIWI%-GRBX%)*2
9270YOF%=(GRIHE%-GRBY%)*4
9280X%+=XOF%:Y%+=YOF%
9290X%=-XOF%+((X% DIV (2*GRIWI%))*2*GRIWI%)
9300Y%=-YOF%+((Y% DIV (4*GRIHE%))*4*GRIHE%)
9310ENDPROC
9320
9330DEFPROCgetrdor(WE%)
9340WOX%=BLK%!4-BLK%!20:WOY%=(BLK%!16-BLK%!24)-WE%:ENDPROC
9350
9360DEFPROCopenmain:MOP%=TRUE
9370!BLK%=HAND%(2):BLK%!4=0:BLK%!8=300:BLK%!12=1279:BLK%!16=1023:BLK%!20=0:BLK%!24=0:BLK%!28=-1:SYS "Wimp_OpenWindow",,BLK%
9380ENDPROC
9390
9400DEFPROCopenpal
9410!BLK%=HAND%(3):BLK%!4=100:BLK%!8=300:BLK%!12=1279:BLK%!16=600:BLK%!20=0:BLK%!24=0:BLK%!28=-1:SYS "Wimp_OpenWindow",,BLK%
9420ENDPROC
9430
9440DEFPROCopenwind(WH%):IF WH%>2 THEN LAOPWI%=WH%
9450!BLK%=HAND%(WH%):SYS "Wimp_GetWindowState",,BLK%
9460BLK%!28=-1:SYS "Wimp_OpenWindow",,BLK%
9470ENDPROC
9480
9490DEFPROCclosewind(WH%)
9500!BLK%=HAND%(WH%):SYS "Wimp_CloseWindow",,BLK%
9510ENDPROC
9520
9530DEFPROCopmain
9540SYS "Wimp_OpenWindow",,BLK%
9550ENDPROC
9560
9570DEFPROCclmain:MOP%=FALSE
9580SYS "Wimp_CloseWindow",,BLK%
9590ENDPROC
9600
9610DEFPROCairnoz
9620H%=-1:FORL%=21 TO 33 STEP 2:IF FNhigh(4,L%) THEN H%=L%:L%=33
9630NEXT
9640CASE H% OF
9650WHEN 21:XR=1:YR=.25
9660WHEN 23:XR=1:YR=.5
9670WHEN 25:XR=1:YR=.75
9680WHEN 27:XR=1:YR=1
9690WHEN 29:XR=.75:YR=1
9700WHEN 31:XR=.5:YR=1
9710WHEN 33:XR=.25:YR=1
9720ENDCASE
9730ENDPROC
9740
9750DEFPROCpaintscale
9760!SCALE%=BXM%
9770SCALE%!4=BYM%
9780SCALE%!8=BXD%
9790SCALE%!12=BYD%
9800XR=BXM%/BXD%
9810YR=BYM%/BYD%
9820ENDPROC
9830
9840DEFPROCpaintscale2
9850!SCALE%=1
9860SCALE%!4=1
9870SCALE%!8=1
9880SCALE%!12=1
9890XR=1
9900YR=1
9910ENDPROC
9920
9930DEFPROCpicclick
9940IF MBUS% AND MOUB%<>0 THEN ENDPROC ELSE MBUS%=FALSE
9950CASE FUSE% OF
9960WHEN -1:IF MOUB%=1 THEN PROCpicpos:PROCinpic:CO%=POINT(X%,Y%):TI%=TINT(X%,Y%):GCOL3,63 TINT 192:PLOT69,400,400:PLOT69,400,400:PROCoutpic:PROCtrasp(FNfindpalent(CO%,TI%)):PROCforcedrawpal(PAL%):GOTO 10400
9970IF MOUB%=4 THEN PROCop1:GOTO 10400
9980WHEN 0:PROCpicpos:PROCinpic:PROCsetcol:PLOT69,X%,Y%:PROCoutpic:PROCquickdrawmain
9990WHEN 4:PROCpaintscale:PROCinpic:PROCpicpos
10000IF FUST%<>0 THEN PROCeorback:PROCpaintbrush(OX%,OY%)
10010PROCsetbackcol:PROCpaintbrush(X%,Y%):OX%=X%:OY%=Y%:FUST%=1
10020PROCeorback:PROCpaintbrush(OX%,OY%)
10030PROCoutpic:PROCquickdrawmain
10040WHEN 24:IF MOUB%<>4 THEN GOTO 10400
10050PROCpicpos:PROCinpic:GCOL3,63 TINT 192:PLOT69,400,400:PLOT69,400,400:PROCsetcol:TCO%=POINT(X%-2,Y%):TTI%=TINT(X%-2,Y%):TPE%=FNfindpalent(TCO%,TTI%):IF TPE%=COL% THEN PROCoutpic:PROCmessage(0,"Cannot trace the colour you are using.")
10060PROCtrace(X%,Y%,TCO%,TTI%):PROCoutpic:PROCquickdrawmain
10070WHEN 29:PROCpaintscale2:PROCinpic:PROCpicpos
10080IF FUST%<>0 THEN PROCeorback:PROCpaintbrush2(OX%,OY%)
10090VARS!20=BTC%:VARS!24=PALTAB%
10100VARS!28=PIC%:VARS!32=SPBUF%
10110VARS!36=X%-32:VARS!40=Y%-32
10120VARS!44=SELBR%:VARS!48=BRUSH%
10130A%=VARS:CALL averagebrush
10140GCOL3,63:RECTANGLE X%-32,Y%-32,64,64:RECTANGLE X%-32,Y%-32,64,64
10150OX%=X%:OY%=Y%:FUST%=1:PROCeorback:PROCpaintbrush2(OX%,OY%)
10160PROCoutpic:PROCquickdrawmain
10170WHEN 30:PROCpaintscale2:PROCinpic:PROCpicpos
10180IF FUST%<>0 THEN PROCeorback:PROCpaintbrush2(OX%,OY%)
10190VARS!20=BTC%:VARS!24=PALTAB%
10200VARS!28=PIC%:VARS!32=SPBUF%
10210VARS!36=X%-32:VARS!40=Y%-32
10220VARS!44=SELBR%:VARS!48=BRUSH%
10230VARS!84=PALTAB%?(COL%*2):VARS!88=PALTAB%?((COL%*2)+1)
10240A%=VARS:CALL tintbrush
10250GCOL3,63:RECTANGLE X%-32,Y%-32,64,64:RECTANGLE X%-32,Y%-32,64,64
10260OX%=X%:OY%=Y%:FUST%=1:PROCeorback:PROCpaintbrush2(OX%,OY%)
10270PROCoutpic:PROCquickdrawmain
10280WHEN 31:IF MOUB%<>4 OR GRTY%=1 THEN ENDPROC
10290PROCspinit:PROCspbuf(161*1024):IF Q% THEN PROCspbuferr
10300PROCbackuppic
10310PROCinbackup:PROCpicpos:FBC%=POINT(X%,Y%):FBT%=TINT(X%,Y%):GCOL0,FBC%+128 TINT FBT%:FUT%=(FBC%+1) MOD 64
10320GCOL0,FUT% TINT FBT%:SYS "Hourglass_On":FILL X%,Y%:PROCoutbackup
10330A%=VARS:B%=PIC%:C%=SPBUF%:CALL findchangebox
10340FMINX%=(!VARS)*2
10350FMINY%=(VARS!4)*4
10360FMAXX%=(VARS!8)*2
10370FMAXY%=(VARS!12)*4
10380PROCfill
10390SYS "Hourglass_Off"
10400ENDCASE
10410ENDPROC
10420
10430DEFPROCfill
10440NOS%=VALFNgi(13,83)
10450NOF%=GRFN%
10460ET%=0
10470IF FNhigh(13,87) THEN ET%=1
10480IF FNhigh(13,89) THEN ET%=2
10490IF FNhigh(13,91) THEN ET%=3
10500IF FNhigh(13,93) THEN ET%=4
10510FIT%=-1
10520IF FNhigh(13,67) THEN FIT%=1
10530IF FNhigh(13,69) THEN FIT%=2
10540IF FNhigh(13,71) THEN FIT%=3
10550IF FNhigh(13,73) THEN FIT%=4
10560IF FNhigh(13,75) THEN FIT%=5
10570IF FNhigh(13,77) THEN FIT%=6
10580IF ET%=1 OR ET%=2 THEN FIT%=1
10590IF ET%=3 OR ET%=4 THEN FIT%=4
10600IF FIT%=-1 THEN PROCspinit:PROCmessage(0,"You must choose a type of fill.")
10610CASE FIT% OF
10620WHEN 1:FIW%=FMAXX%-FMINX%:FIFC%=0:LAFC%=255:FID%=1
10630WHEN 2:FIW%=FMAXX%-FMINX%:FIFC%=255:LAFC%=0:FID%=-1
10640WHEN 4:FIW%=FMAXY%-FMINY%:FIFC%=0:LAFC%=255:FID%=1
10650WHEN 3:FIW%=FMAXY%-FMINY%:FIFC%=255:LAFC%=0:FID%=-1
10660WHEN 5:FIFC%=0:LAFC%=255:FID%=1
10670WHEN 6:FIFC%=255:LAFC%=0:FID%=-1
10680ENDCASE
10690IF FIT%=5 OR FIT%=6 THEN
10700IF (FMAXX%-X%)>(X%-FMINX%) THEN XOF%=FMAXX%-X% ELSE XOF%=X%-FMINX%
10710IF (FMAXY%-Y%)>(Y%-FMINY%) THEN YOF%=FMAXY%-Y% ELSE YOF%=Y%-FMINY%
10720FIW%=SQR((XOF%^2)+(YOF%^2)):IF GRTY%=1 THEN FIW%=FIW%/2
10730ENDIF
10740IF FIW%=0 OR NOS%=1 THEN PROCmessage(5,"You cannot use a graduated fill on an area that small.")
10750CPP%=(255<<8) DIV FIW%:CPS%=(255<<8) DIV (NOS%-1)
10760I%=IO%:FORL%=0 TO 15:?I%=GRFI%(L%,0,NOF%):I%?1=GRFI%(L%,1,NOF%):I%+=2:NEXT
10770!VARS=PIC%:IF GRTY%=0 THEN VARS!4=SPBUF% ELSE VARS!4=PIC%
10780VARS!8=IO%:VARS!12=NOS%:VARS!16=FIFC%:VARS!20=LAFC%:VARS!24=FID%:VARS!28=CPP%:VARS!32=CPS%:VARS!36=X%:VARS!40=Y%:VARS!44=ROTTAB%:VARS!48=FIT%:VARS!52=FMINX%:VARS!56=FMINY%:VARS!60=FMAXX%:VARS!64=FMAXY%
10790IF GRTY%=1 THEN VARS!36=(FMINX%+FMAXX%)DIV2:VARS!40=(FMINY%+FMAXY%)DIV2
10800VARS!68=RAND%:VARS!72=0
10810VARS!76=VALFNgi(13,81)
10820IF FNhigh(13,54) THEN VARS!80=1 ELSE VARS!80=0
10830VARS!84=ET%:VARS!88=TRASP%:VARS!92=GRTY%:VARS!96=BTC%
10840FORL%=0 TO 4092 STEP 4:RAND%!L%=RND(CPS%):NEXT
10850A%=VARS
10860CALL graduatedfill
10870PROCspinit:PROCforcedrawmain
10880ENDPROC
10890
10900DEFPROChg:SYS "Hourglass_Smash":ENDPROC
10910
10920DEFPROCswapcorns
10930IF X%(0)>OX% THEN SWAP X%(0),OX%
10940IF Y%(0)>OY% THEN SWAP Y%(0),OY%
10950ENDPROC
10960
10970DEFFNsamecol(x1%,y1%,col%,tin%):=(POINT(x1%,y1%)=col% AND TINT(x1%,y1%)=tin%)
10980
10990DEFPROCl(x1%,y1%,x2%,y2%):PLOT4,x1%,y1%:PLOT LITY%,x2%,y2%:ENDPROC
11000
11010DEFPROCr(x1%,y1%,x2%,y2%):PLOT4,x1%,y1%:PLOT LITY%-4,x2%,0:PLOT LITY%-4,0,y2%:PLOT LITY%-4,-x2%,0:PLOT LITY%-4,0,-y2%:ENDPROC
11020
11030DEFPROCtrace(X%,Y%,TCO%,TTI%)
11040ENDPROC
11050
11060DEFFNfindpalent(CO%,TI%)
11070=CTT%?((CO%*4)+(TI% DIV 64))
11080
11090DEFPROCsetcol:GCOL USE%,PALTAB%?(COL%*2) TINT PALTAB%?((COL%*2)+1):ENDPROC
11100
11110DEFPROCsetbackcol:GCOL USE%,(PALTAB%?(COL%*2))+128 TINT PALTAB%?((COL%*2)+1):ENDPROC
11120
11130DEFPROCcol(C%,T%,U%)
11140SYS&35,-1,9 TO ,,BP%
11150IF BP%=3 THEN GCOLU%,C% TINT T%:ENDPROC
11160R%=((C% AND %11)*4)+(T% DIV 64):R%+=(R%<<4)
11170G%=(((C% AND %1100)>>2)*4)+(T% DIV 64):G%+=(G%<<4)
11180B%=(((C% AND %110000)>>4)*4)+(T% DIV 64):B%+=(B%<<4)
11190SYS "ColourTrans_SetGCOL",((B%<<24)+(G%<<16)+(R%<<8)),,,,U%
11200ENDPROC
11210
11220DEFPROCanticol(C%,T%,U%)
11230R%=((C% AND %11)*4)+(T% DIV 64):R%+=(R%<<4)
11240G%=(((C% AND %1100)>>2)*4)+(T% DIV 64):G%+=(G%<<4)
11250B%=(((C% AND %110000)>>4)*4)+(T% DIV 64):B%+=(B%<<4)
11260SYS "ColourTrans_ReturnOppGCOLForMode",((B%<<24)+(G%<<16)+(R%<<8)),15 TO GC%
11270GCOL U%,(GC%>>2) TINT (GC% AND %11)*64
11280ENDPROC
11290
11300DEFPROCgridcol
11310PROCcol(GRCO%,GRTI%,0)
11320ENDPROC
11330
11340DEFPROCmakerr:PROCkillf:FUSE%=-1
11350SYS "Wimp_DragBox",,0
11360!BLK%=ERR
11370ER=TRUE
11380$(BLK%+4)=REPORT$+" at line "+STR$(ERL)+CHR$(0)
11390REM $(BLK%+4)="Internal error '"+REPORT$+"' at line "+STR$ERL+"."+CHR$(0)
11400IF ERR<>17 SYS "Wimp_ReportError",BLK%,1,"Imagery"
11410REM PROCaction:END
11411END
11420ENDPROC
11430
11440DEFPROCmessage(M%,M$):PROCoutpic
11450SYS "Wimp_DragBox",,0:!BLK%=M%:$(BLK%+4)=M$+CHR$(0):SYS "Wimp_ReportError",BLK%,1,"Imagery"
11460PROCforcedrawmain
11470PROCaction:END
11480ENDPROC
11490
11500DEFPROCmouse
11510MOUX%=!BLK%:MOUY%=BLK%!4:MOUB%=BLK%!8:MOUH%=BLK%!12:MOUIC%=BLK%!16
11520CASE MOUB% OF
11530WHEN 4,1:CASE MOUH% OF
11540WHEN -2:PROCopenmain
11550WHEN HAND%(0):IF BLK%!16=8 THEN PROCsaveok
11560WHEN HAND%(7):IF BLK%!16=8 THEN PROCspritesaveok
11570WHEN HAND%(2):PROCpicclick
11580WHEN HAND%(3):PROCpickcol
11590WHEN HAND%(4):PROCairbclick
11600WHEN HAND%(5):PROCbrushclick
11610WHEN HAND%(6):PROCgridclick
11620WHEN HAND%(8):PROCgrabclick
11630WHEN HAND%(10):PROClinepatclick
11640WHEN HAND%(11):PROCecfclick
11650WHEN HAND%(12):PROCedbruclick
11660WHEN HAND%(13):PROCfillclick
11670WHEN HAND%(14):PROCtextclick
11680WHEN HAND%(15):PROCtbackclick
11690WHEN HAND%(16):PROCtparclick
11700WHEN HAND%(17):PROCfillcontclick
11710WHEN HAND%(18):PROCcolrepclick
11720WHEN HAND%(19):PROCframeclick
11730WHEN HAND%(20):PROCpatfillclick
11740WHEN HAND%(21):PROCrgbcontclick
11750WHEN HAND%(22):PROCgreyscaleclick
11760WHEN HAND%(23):PROCpixelateclick
11770WHEN HAND%(24):PROCrotateclick
11780WHEN HAND%(25):PROCcolscaleclick
11790WHEN HAND%(26):PROCcontrastclick
11800WHEN HAND%(27):PROCposteriseclick
11810WHEN HAND%(29):PROCfilterclick
11820WHEN HAND%(30):PROCwobbleclick
11830WHEN HAND%(32):PROCtoolclick
11840WHEN HAND%(33):PROCzoomclick
11850WHEN HAND%(34):IF BLK%!16=8 THEN PROCsavesetok
11860ENDCASE
11870WHEN 2:IF MOUH%=-2 THEN PROCiconmenu ELSE IF MOUH%=HAND%(2) THEN PROCwindmenu
11880WHEN 16,64:IF MOUH%=HAND%(0) THEN DRAG%=0:PROCstartdrag
11890IF MOUH%=HAND%(7) THEN DRAG%=7:PROCstartdrag
11900IF MOUH%=HAND%(34) THEN DRAG%=34:PROCstartdrag
11910ENDCASE
11920ENDPROC
11930
11940DEFPROCwobbleclick
11950PROCarrows(30,2,3,5,1,999,1)
11960PROCarrows(30,7,8,11,1,999,1)
11970PROCarrows(30,38,39,42,0,359,1)
11980IF MOUIC%=19 THEN PROCsi(30,27,"COS(RAD(A))")
11990IF MOUIC%=21 THEN PROCsi(30,27,"SIN(RAD(A))")
12000IF MOUIC%=23 THEN PROCsi(30,27,"TAN(RAD(A))")
12010IF MOUIC%<>47 THEN ENDPROC
12020SYS&2E,256+9,SHOW%:SHOW%!32=&12345:SYS&2E,266,SHOW%,"<Imagery$Dir>.Show":IF SHOW%!32=&12345 THEN PROCmessage(0,"Could not load 'Show' sprite from !Imagery folder")
12030PROCspinit:PROCspbuf(161*1024):IF Q% THEN PROCspbuferr
12040PROCbackuppic
12050SYS&2E,256+9,PIC%
12060PROCinbackup:SYS &2E,256+16,PIC%,"SHOW",0,400,400,800,592:SYS&2E,290,SHOW%,"SHOW",400,400:PROCoutbackup
12070PROCinsprite(0,SHOW%,"SHOW"):SYS&2E,290,PIC%,"SHOW":PROCoutsprite
12080!PIC%=161*1024:PIC%!4=0:PIC%!8=24:PIC%!12=24:SYS &2E,271,PIC%,"PIC",0,640,256,15
12090WE%=2:GOTO 7230
12100IF FNhigh(30,25) THEN VARS!36=1 ELSE VARS!36=&280
12110VARS!40=0:IF FNhigh(30,44) THEN VARS!40=1
12120FORL%=0 TO 255:?(TAS%+256+L%)=TRASP%?L%:TRASP%?L%=1:NEXT:TRASP%?254=0
12130VARS!44=0:VARS!8=400:VARS!12=400:VARS!16=802:VARS!20=596:VARS!24=TAS%+512:VARS!28=BTC%:VARS!32=TRASP%:A%=VARS:CALL wobble:SYS "Hourglass_Off":PROCinbackup:SYS&2E,290,SHOW%,"SHOW",400,400:PROCoutbackup
12140SYS&2E,256+9,SHOW%:PROCinpic:SYS&2E,256+16,SHOW%,"SHOW",0,400,400,800,592
12150SYS&2E,290,SPBUF%,"PIC",0,0
12160PROCoutpic:PROCspinit:FORL%=0 TO 255:TRASP%?L%=?(TAS%+256+L%):NEXT:PROCforcedrawwob:IF WER% THEN GOTO 90
12170ENDPROC
12180
12190DEFPROCfilterclick
12200PROCarrows(29,2,3,5,0,8,1)
12210ENDPROC
12220
12230DEFPROCrotateclick
12240ENDPROC
12250
12260DEFPROCrgbcontclick
12270RP%=FNperc(21,13):GP%=FNperc(21,15):BP%=FNperc(21,17)
12280IRP%=RP%:IGP%=GP%:IBP%=BP%
12290PROCarrows(21, 3,5,13,0,100,1)
12300PROCarrows(21, 6,8,15,0,100,1)
12310PROCarrows(21, 9,11,17,0,100,1)
12320RP%=FNperc(21,13):GP%=FNperc(21,15):BP%=FNperc(21,17)
12330IF RP%<>IRP% THEN RSL%=RP%:PROCslidud(1,RP%):PROCgetslor(21,30):PROCredrawslid(21,11,RP%)
12340IF GP%<>IGP% THEN GSL%=GP%:PROCslidud(2,GP%):PROCgetslor(21,31):PROCredrawslid(21,10,GP%)
12350IF BP%<>IBP% THEN BSL%=BP%:PROCslidud(3,BP%):PROCgetslor(21,32):PROCredrawslid(21,8,BP%)
12360IF MOUIC%=30 THEN RSL%=FNslidhit(21,30,MOUX%,MOUY%,11,1):RP%=RSL%
12370IF MOUIC%=31 THEN GSL%=FNslidhit(21,31,MOUX%,MOUY%,10,2):GP%=GSL%
12380IF MOUIC%=32 THEN BSL%=FNslidhit(21,32,MOUX%,MOUY%,8,3):BP%=BSL%
12390ENDPROC
12400
12410DEFPROCslidud(WE%,V%)
12420IF WE%=1 THEN PROCui(21,13,STR$(V%)+"%")
12430IF WE%=2 THEN PROCui(21,15,STR$(V%)+"%")
12440IF WE%=3 THEN PROCui(21,17,STR$(V%)+"%")
12450IF WE%=4 THEN
12460V2%=(V%DIV4):IF V2%=0 THEN V2%=1
12470PROCui(33,8, STR$(V2%))
12480ENDIF
12490ENDPROC
12500
12510DEFPROCgreyscaleclick
12520PROCarrows(22,3,5,13,0,9,1):PROCarrows(22,6,8,15,0,9,1):PROCarrows(22,9,11,17,0,9,1)
12530ENDPROC
12540
12550DEFPROCcolscaleclick
12560PROCarrows(25,3,5,13,0,9,1):PROCarrows(25,6,8,15,0,9,1):PROCarrows(25,9,11,17,0,9,1)
12570ENDPROC
12580
12590DEFPROCcontrastclick
12600CONL%=VALFNgi(26,18):CONH%=VALFNgi(26,20)
12610PROCarrows(26,11,13,18,0,15,1):PROCarrows(26,14,16,20,0,15,1)
12620IF CONL%<>VALFNgi(26,18) OR CONH%<>VALFNgi(26,20) THEN PROCforcedrawgraph(26)
12630ENDPROC
12640
12650DEFPROCposteriseclick
12660POL%=VALFNgi(27,22):POH%=VALFNgi(27,24):PON%=VALFNgi(27,26)
12670PROCarrows(27,11,13,22,0,15,1):PROCarrows(27,14,16,24,0,15,1):PROCarrows(27,18,20,26,2,16,1)
12680IF POL%<>VALFNgi(27,22) OR POH%<>VALFNgi(27,24) OR PON%<>VALFNgi(27,26) THEN PROCforcedrawgraph(27)
12690ENDPROC
12700
12710DEFPROCpixelateclick
12720PROCarrows(23,2,4,9,1,100,1):PROCarrows(23,5,7,11,1,100,1)
12730ENDPROC
12740
12750DEFPROCframeclick
12760PROCarrows(19,5,7,10,1,640,1):PROCarrows(19,6,8,12,1,256,1)
12770IF MOUIC%<>14 THEN ENDPROC
12780PROCkillf
12790V%=VALFNgi(19,10):IF V%<1 THEN V%=1
12800IF V%>640 THEN V%=640
12810PROCsi(19,10,STR$V%)
12820W%=VALFNgi(19,12):IF W%<1 THEN W%=1
12830IF W%>256 THEN W%=256
12840PROCsi(19,12,STR$W%)
12850FRW%=V%+1:FRH%=W%+1:FUSE%=36:FUST%=0:PROCud:PROCwindname(2,PIC$+" [Set frame]")
12860IF MOUB%=4 THEN PROCmenoff
12870ENDPROC
12880
12890DEFPROCcolrepclick
12900IF MOUIC%=5 THEN SYS "Hourglass_On":FORL%=0 TO 22596 STEP 4:SPBUF%!L%=OPAL%!L%:NEXT:FORL%=0 TO 255:REPS%?L%=L%:NEXT:SYS "Hourglass_Off":PROCforcedrawcolrep:ENDPROC
12910BLK%!8=HAND%(18):SYS "Wimp_GetWindowState",,BLK%+8
12920XOF%=(!BLK%)-((BLK%!12)-(BLK%!28)):IF XOF%>766 THEN XOF%=766
12930YOF%=(BLK%!4)-(((BLK%!24)-(BLK%!32))-556):IF YOF%>550 THEN YOF%=550
12940IF YOF%<=220 THEN
12950C%=(XOF% DIV 24)+((YOF% DIV 28)*32):PROCinsprite(0,SPBUF%,"Palette"):FX%=((SREP% MOD 32)*24)+2:FY%=((SREP% DIV 32)*28)+4:GCOL0,PALTAB%?(C%*2) TINT PALTAB%?((C%*2)+1)
12960RECTANGLE FILL FX%,FY%,20,20:PROCoutsprite:REPS%?SREP%=C%:PROCforcedrawcolrep
12970ENDIF
12980IF YOF%>=290 AND YOF%<514 THEN YOF%-=290:SREP%=(XOF% DIV 24)+((YOF% DIV 28)*32):PROCforcedrawcolrep
12990ENDPROC
13000
13010DEFPROCarrows(W%,DI%,UI%,TI%,LV%,UV%,I%)
13020V%=VALFNgi(W%,TI%):OV%=V%:IF MOUB%=1 THEN WE%=-1 ELSE WE%=1
13030IF MOUIC%=DI% THEN V%-=(I%*WE%)
13040IF MOUIC%=UI% THEN V%+=(I%*WE%)
13050IF V%<LV% THEN V%=LV%
13060IF V%>UV% THEN V%=UV%
13070IF V%<>OV% AND W%<>21 THEN PROCsi(W%,TI%,STR$(V%))
13080IF V%<>OV% AND W%=21 THEN PROCsi(W%,TI%,STR$(V%)+"%")
13090ENDPROC
13100
13110DEFPROCtparclick
13120ENDPROC
13130
13140DEFPROClosefont
13150IF FONT%<>0 AND FTL% THEN SYS "Font_LoseFont",FHAND%:FTL%=FALSE
13160ENDPROC
13170
13180DEFPROCgetfont
13190IF VALFNgi(14,20)<6 THEN PROCsi(14,20,"6")
13200IF VALFNgi(14,22)<6 THEN PROCsi(14,22,"6")
13210FONTX%=VALFNgi(14,20):FONTY%=VALFNgi(14,22)
13220IF FONT%<>0 THEN FTL%=TRUE:SYS "Font_FindFont",,FO$,FONTX%*16,FONTY%*16 TO FHAND%
13230ENDPROC
13240
13250DEFPROCrestpic
13260PROCinpic
13270SYS&2E,290,SPBUF%,"PIC",0,0
13280PROCoutpic
13290ENDPROC
13300
13310DEFPROCtextclick
13320ENDPROC
13330
13340DEFPROCecfclick
13350IF MOUIC%>25 AND MOUIC%<33 THEN PROCforcedrawpat:ENDPROC
13360IF MOUIC%<>8 THEN ENDPROC
13370IF MOUB%<>1 AND MOUB%<>4 THEN ENDPROC
13380BLK%!8=HAND%(11):SYS "Wimp_GetWindowState",,BLK%+8
13390XOF%=((!BLK%)-(BLK%!12))-180:IF XOF%>766 THEN XOF%=766
13400YOF%=((BLK%!4)-(BLK%!16))-20:IF YOF%>220 THEN YOF%=220
13410col%=(XOF% DIV 24)+((YOF% DIV 28)*32)
13420cby%=TTB%?col%
13430CECF%=FNcecf
13440L%=0:REM FORK%=8 TO 15:IF FNhigh(11,K%) THEN L%=K%-7:NEXT ELSE NEXT
13450IF FNhigh(11,23) THEN L%=1
13460IF FNhigh(11,24) THEN L%=2
13470IF FNhigh(11,16) THEN L%=3
13480FORK%=11 TO 15:IF FNhigh(11,K%) THEN L%=K%-7:NEXT ELSE NEXT
13490IF L%=0 THEN ENDPROC
13500ECF%(L%,CECF%)=cby%
13510PROCforcedrawpat
13520ENDPROC
13530
13540DEFPROCreloadpatfills
13550SYS&2E,266,PFILLS%,"<Imagery$Dir>.PatFills"
13560ENDPROC
13570
13580DEFPROCpatfillclick
13590IF MOUIC%=2 THEN PROCreloadpatfills:ENDPROC
13600BLK%!8=HAND%(20):SYS "Wimp_GetWindowState",,BLK%+8
13610XOF%=((!BLK%)-(BLK%!12)):YOF%=((BLK%!4)-(BLK%!16))
13620K%=-1:FORL%=1 TO 12:BX%=((L%-1)*84)+24:BY%=52:IF XOF%>=BX% AND YOF%>=BY% AND XOF%<(BX%+64) AND YOF%<(BY%+64) THEN K%=L%:NEXT ELSE NEXT
13630IF K%=-1 THEN ENDPROC ELSE CPF%=K%:PROCforcedrawpatfill
13640ENDPROC
13650
13660DEFPROCfilluse
13670SNO%=FNgrafilno:IF SNO%=-1 THEN ENDPROC
13680PROCkillf:FUSE%=31:FUST%=0:GRFN%=SNO%:GRTY%=0:PROCud:PROCwindname(2,PIC$+" [Graduated fill ("+FNfilldet(SNO%+1)+")]"):PROCspinit
13690IF MOUB%=4 THEN PROCmenoff
13700ENDPROC
13710
13720DEFFNfilldet(S%):IF GRTY%=0 THEN ="flood "+STR$S% ELSE ="area "+STR$S%
13730
13740DEFPROCinvertfill
13750NOS%=FNgrafilno
13760IA%=0:IB%=VALFNgi(13,83):IB%-=1
13770REPEAT:SWAP GRFI%(IA%,0,NOS%),GRFI%(IB%,0,NOS%):SWAP GRFI%(IA%,1,NOS%),GRFI%(IB%,1,NOS%):IA%+=1:IB%-=1:UNTIL IA%>IB%
13780PROCforcedrawfill
13790ENDPROC
13800
13810DEFPROCinterpfill
13820NOS%=FNgrafilno
13830IA%=0:REPEAT:IB%=IA%+1
13840IF IB%=16 THEN PROCforcedrawfill:ENDPROC
13850IF GRFI%(IB%,0,NOS%)=0 AND GRFI%(IB%,1,NOS%)=0 THEN IB%+=1:GOTO 13840
13860IF IB%=IA%+1 THEN IA%=IB%:IB%+=1:GOTO 13840
13870T1%=GRFI%(IA%,1,NOS%)>>6
13880R1%=((GRFI%(IA%,0,NOS%) AND %11)<<2)+T1%
13890G1%=(GRFI%(IA%,0,NOS%) AND %1100)+T1%
13900B1%=((GRFI%(IA%,0,NOS%) AND %110000)>>2)+T1%
13910T2%=GRFI%(IB%,1,NOS%)>>6
13920RD=((((GRFI%(IB%,0,NOS%) AND %11)<<2)+T2%)-R1%)/(IB%-IA%)
13930GD=(((GRFI%(IB%,0,NOS%) AND %1100)+T2%)-G1%)/(IB%-IA%)
13940BD=((((GRFI%(IB%,0,NOS%) AND %110000)>>2)+T2%)-B1%)/(IB%-IA%)
13950IA%+=1:FORL%=1 TO IB%-IA%
13960R%=R1%+(RD*L%):G%=G1%+(GD*L%):B%=B1%+(BD*L%)
13970SYS "ColourTrans_ReturnGCOLForMode",(B%<<28)+(G%<<20)+(R%<<12),15 TO G%
13980GRFI%(IA%,0,NOS%)=G%>>2:GRFI%(IA%,1,NOS%)=(G% AND %11)<<6
13990IA%+=1:NEXT
14000IB%=IA%+1:GOTO 13840
14010
14020DEFPROCwipefill
14030NOS%=FNgrafilno
14040FORL%=0 TO 15:FORK%=0 TO 1:GRFI%(L%,K%,NOS%)=0:NEXT:NEXT
14050PROCforcedrawfill:ENDPROC
14060
14070DEFPROCcompfill
14080NOS%=FNgrafilno
14090CA%=GRFI%(0,0,NOS%):TA%=GRFI%(0,1,NOS%):IA%=1:IB%=1
14100WHILE IB%<16
14110IF GRFI%(IB%,0,NOS%)<>CA% OR GRFI%(IB%,1,NOS%)<>TA% THEN GRFI%(IA%,0,NOS%)=GRFI%(IB%,0,NOS%):GRFI%(IA%,1,NOS%)=GRFI%(IB%,1,NOS%):CA%=GRFI%(IA%,0,NOS%):TA%=GRFI%(IA%,1,NOS%):IA%+=1
14120IB%+=1:ENDWHILE
14130WHILE IA%<16:GRFI%(IA%,0,NOS%)=0:GRFI%(IA%,1,NOS%)=0:IA%+=1:ENDWHILE
14140PROCforcedrawfill
14150ENDPROC
14160
14170DEFPROCfillclick
14180IF MOUIC%<0 THEN GOTO 14880
14190IF MOUIC%=105 THEN PROCfilluse:ENDPROC
14200IF MOUIC%=62 THEN PROCinvertfill:ENDPROC
14210IF MOUIC%=63 THEN PROCinterpfill:ENDPROC
14220IF MOUIC%=110 THEN PROCwipefill:ENDPROC
14230IF MOUIC%=111 THEN PROCcompfill:ENDPROC
14240IF MOUIC%<>87 AND MOUIC%<>89 AND MOUIC%<>91 AND MOUIC%<>93 THEN GOTO 14270
14250IF FNhigh(13,MOUIC%) THEN PROCiconlo(13,MOUIC%):ENDPROC
14260IF FNhigh(13,75) OR FNhigh(13,77) THEN PROCmessage(13,"You cannot use an edge priority with a radial fill.") ELSE PROCiconlo(13,87):PROCiconlo(13,89):PROCiconlo(13,91):PROCiconlo(13,93):PROCiconhi(13,MOUIC%)
14270IF MOUIC%<>75 OR FNhigh(13,75) THEN GOTO 14300
14280IF FNhigh(13,87) OR FNhigh(13,89) OR FNhigh(13,91) OR FNhigh(13,93) THEN PROCmessage(4,"You cannot use a radial fill with an edge priority.")
14290PROCiconhi(13,75):PROCiconlo(13,67):PROCiconlo(13,69):PROCiconlo(13,71):PROCiconlo(13,73):PROCiconlo(13,77):ENDPROC
14300IF (MOUIC%>=2 AND MOUIC%<=14) OR MOUIC%=78 OR MOUIC%=79 OR MOUIC%=85 THEN PROCsetgradfill:ENDPROC
14310IF MOUIC%<>77 OR FNhigh(13,77) THEN GOTO 14340
14320IF FNhigh(13,87) OR FNhigh(13,89) OR FNhigh(13,91) OR FNhigh(13,93) THEN PROCmessage(4,"You cannot use a radial fill with an edge priority.")
14330PROCiconhi(13,77):PROCiconlo(13,67):PROCiconlo(13,69):PROCiconlo(13,71):PROCiconlo(13,73):PROCiconlo(13,75):ENDPROC
14340IF MOUIC%=95 OR MOUIC%=99 OR MOUIC%=101 OR MOUIC%=103 OR MOUIC%=97 THEN PROCforcedrawfill:ENDPROC
14350PROCarrows(13, 40,41,81,0,359,1)
14360IF MOUB%=1 AND MOUIC%=43 THEN MOUIC%=45 ELSE IF MOUB%=1 AND MOUIC%=45 THEN MOUIC%=43
14370IF MOUIC%<>43 THEN GOTO 14400
14380NOS%=VALFNgi(13,83):IF NOS%=2 THEN ENDPROC
14390PROCshadeicon(13,FNfilic(NOS%-1)):NOS%-=1:PROCsi(13,83,STR$(NOS%)):ENDPROC
14400IF MOUIC%<>45 THEN GOTO 14430
14410NOS%=VALFNgi(13,83):IF NOS%=16 THEN ENDPROC
14420PROCclearicon(13,FNfilic(NOS%)):NOS%+=1:PROCsi(13,83,STR$(NOS%)):ENDPROC
14430ENDPROC
14440
14450DEFPROCsetgradfill
14460SNO%=FNgrafilno
14470CASE MOUIC% OF
14480WHEN 78:RESTORE 14710
14490WHEN 79:RESTORE 14720
14500WHEN 2:RESTORE 14730
14510WHEN 3:RESTORE 14740
14520WHEN 4:RESTORE 14750
14530WHEN 5:RESTORE 14760
14540WHEN 6:RESTORE 14770
14550WHEN 7:RESTORE 14790
14560WHEN 8:RESTORE 14800
14570WHEN 9:RESTORE 14810
14580WHEN 10:RESTORE 14820
14590WHEN 11:RESTORE 14780
14600WHEN 12:RESTORE 14830
14610WHEN 13:RESTORE 14840
14620WHEN 14:RESTORE 14850
14630WHEN 85:RESTORE 14860
14640ENDCASE
14650FORL%=0 TO 15:PROCshadeicon(13,FNfilic(L%)):FORK%=0 TO 1:GRFI%(L%,K%,SNO%)=0:NEXT:NEXT
14660READ S%:FORL%=0 TO S%-1:PROCclearicon(13,FNfilic(L%)):FORK%=0 TO 1:READ GRFI%(L%,K%,SNO%):NEXT:NEXT
14670PROCsi(13,83,STR$S%)
14680PROCforcedrawfill
14690ENDPROC
14700
14710DATA 12, 1,0,1,64,1,128,1,192,2,0,2,64,2,128,2,192,3,0,3,64,3,128,3,192
14720DATA 12, 4,0,4,64,4,128,4,192,8,0,8,64,8,128,8,192,12,0,12,64,12,128,12,192
14730DATA 12, 5,0,5,64,5,128,5,192,10,0,10,64,10,128,10,192,15,0,15,64,15,128,15,192
14740DATA 12, 16,0,16,64,16,128,16,192,32,0,32,64,32,128,32,192,48,0,48,64,48,128,48,192
14750DATA 12, 17,0,17,64,17,128,17,192,34,0,34,64,34,128,34,192,51,0,51,64,51,128,51,192
14760DATA 12, 20,0,20,64,20,128,20,192,40,0,40,64,40,128,40,192,60,0,60,64,60,128,60,192
14770DATA 15, 0,64,0,128,0,192,21,0,21,64,21,128,21,192,42,0,42,64,42,128,42,192,63,0,63,64,63,128,63,192
14780DATA 12, 1,0,1,64,1,128,1,192,6,0,6,64,6,128,6,192,27,0,27,64,27,128,27,192
14790DATA 8, 18,0,18,64,18,128,18,192,39,0,39,64,39,128,39,192
14800DATA 8, 2,0,2,64,2,128,2,192,7,0,7,64,7,128,7,192
14810DATA 12, 17,0,17,64,17,128,17,192,38,0,38,64,38,128,38,192,59,0,59,64,59,128,59,192
14820DATA 12, 5,0,5,64,5,128,5,192,10,0,26,64,26,128,26,192,47,0,47,64,47,128,47,192
14830DATA 12, 20,0,20,64,20,128,20,192,41,0,41,64,41,128,41,192,62,0,62,64,62,128,62,192
14840DATA 12, 1,0,1,64,1,128,1,192,22,0,22,64,22,128,22,192,43,0,43,64,43,128,43,192
14850DATA 8, 9,0,9,64,9,128,9,192,14,0,14,64,14,128,14,192,0
14860DATA 8, 21,0,21,64,21,128,21,192,42,0,42,64,42,128,42,192
14870
14880XOF%=!BLK%:YOF%=BLK%!4:!BLK%=HAND%(13):SYS "Wimp_GetWindowState",,BLK%
14890PROCgetrdor(484)
14900XOF%=(XOF%-WOX%)-422:IF XOF%>766 OR XOF%<0 THEN ENDPROC
14910YOF%=(YOF%-WOY%)-236:IF YOF%>220 OR YOF%<0 THEN ENDPROC
14920col%=(XOF% DIV 24)+((YOF% DIV 28)*32)
14930tin%=PALTAB%?((col%*2)+1)
14940col%=PALTAB%?(col%*2)
14950FPE%=-1:FORL%=0 TO 15:IF FNhigh(13,FNfilic(L%)) THEN FPE%=L%:NEXT ELSE NEXT
14960SNO%=FNgrafilno
14970IF FPE%=-1 OR SNO%=-1 THEN ENDPROC
14980GRFI%(FPE%,0,SNO%)=col%:GRFI%(FPE%,1,SNO%)=tin%:PROCforcedrawfill
14990ENDPROC
15000
15010DEFFNfilic(FSN%):IF FSN%<=11 THEN =FSN%+26 ELSE =(FSN%-12)+46
15020
15030DEFFNlipaadj(LITA%):IF LITA%=7 THEN =51 ELSE =LITA%
15040
15050DEFPROClinepatclick
15060IF MOUB%=1 THEN
15070IF MOUIC%=2 THEN MOUIC%=3 ELSE IF MOUIC%=3 THEN MOUIC%=2
15080ENDIF
15090CASE MOUIC% OF
15100WHEN 3:PL%=VALFNgi(10,48):IF PL%>1 THEN PROCshadeicon(10,FNlipaadj(PL%+6)):PL%-=1:PROCsi(10,48,STR$PL%)
15110WHEN 2:PL%=VALFNgi(10,48):IF PL%<40 THEN PROCclearicon(10,FNlipaadj(PL%+7)):PL%+=1:PROCsi(10,48,STR$PL%)
15120WHEN 50:PALE%=VALFNgi(10,48):VDU23,6,
15130IN%=7:FORL%=1 TO 5:N%=0:I%=128:FORK%=1 TO 8:IF FNhigh(10,FNlipaadj(IN%)) THEN N%+=I%
15140I%=I% DIV 2:IN%+=1:NEXT:VDU N%:PAT%(L%)=N%:NEXT:VDU 0|
15150IF MOUB%=4 THEN PROCmenoff
15160ENDCASE
15170ENDPROC
15180
15190DEFPROCgrabclick:ING%=(FNhigh(31,3) OR FNhigh(31,4)) AND FUSE%=34
15200IF MOUIC%<>16 THEN ENDPROC
15210IF FUSE%<>34 AND FUST%<2 THEN PROCmessage(1,"Select an area of picture before setting these options.")
15220IF ING% THEN GOTO 15290
15230PROCinpic
15240IF FUSE%<>34 THEN
15250PROCpgrab(OX%,OY%,3)
15260ELSE
15270IF FUST%<>0 THEN PROCpimport(OX%,OY%,3)
15280ENDIF
15290GRXM%=VAL(FNgi(8,17)):IF GRXM%<1 THEN GRXM%=1:PROCsi(8,17,STR$GRXM%)
15300GRYM%=VAL(FNgi(8,19)):IF GRYM%<1 THEN GRYM%=1:PROCsi(8,19,STR$GRYM%)
15310GRXD%=VAL(FNgi(8,18)):IF GRXD%<1 THEN GRXD%=1:PROCsi(8,18,STR$GRXD%)
15320GRYD%=VAL(FNgi(8,20)):IF GRYD%<1 THEN GRYD%=1:PROCsi(8,20,STR$GRYD%)
15330PROCgrabflip
15340GRMA%=FNhigh(8,14)
15350IF NOT ING% THEN GOTO 15380
15360IF FNhigh(31,3) THEN PROCimpcen ELSE PROCimpscale
15370ENDPROC
15380IF FUSE%<>34 THEN
15390PROCpgrab(OX%,OY%,3)
15400ELSE
15410IF FUST%<>0 THEN PROCpimport(OX%,OY%,3)
15420ENDIF
15430PROCoutpic:PROCquickdrawmain
15440ENDPROC
15450
15460DEFPROCgrabflip
15470IF (FNhigh(8,10) AND NOT GRFX%) OR ((NOT FNhigh(8,10)) AND GRFX%) THEN SYS&2E,289,SPBUF%,GRN$:GRFX%=NOT GRFX%
15480IF (FNhigh(8,11) AND NOT GRFY%) OR ((NOT FNhigh(8,11)) AND GRFY%) THEN SYS&2E,303,SPBUF%,GRN$:GRFY%=NOT GRFY%
15490ENDPROC
15500
15510DEFPROCgridclick
15520PROCarrows(6, 2,6,19,1,999,1)
15530PROCarrows(6, 3,7,21,1,999,1)
15540PROCarrows(6, 10,14,23,0,999,1)
15550PROCarrows(6, 11,15,25,0,999,1)
15560IF MOUIC%=27 THEN PROCsi(6,19,"1"):PROCsi(6,21,"1"):PROCsi(6,23,"0"):PROCsi(6,25,"0"):ENDPROC
15570IF MOUIC%<>29 THEN ENDPROC
15580GRIWI%=VAL(FNgi(6,19)):IF GRIWI%<1 THEN GRIWI%=1
15590GRIHE%=VAL(FNgi(6,21)):IF GRIHE%<1 THEN GRIHE%=1
15600GRBX%=VAL(FNgi(6,23)):IF GRBX%>GRIWI% THEN REPEAT:GRBX%-=GRIWI%:UNTIL GRBX%<GRIWI%:PROCsi(6,23,STR$GRBX%)
15610GRBY%=VAL(FNgi(6,25)):IF GRBY%>GRIHE% THEN REPEAT:GRBY%-=GRIHE%:UNTIL GRBY%<GRIHE%:PROCsi(6,25,STR$GRBY%)
15620IF MOUB%=4 THEN PROCmenoff
15630PROCforcedrawmain
15640ENDPROC
15650
15660DEFPROCbrushclick
15670IF MOUIC%>=0 AND MOUIC%<=11 THEN
15680IF FUST%>0 THEN PROCinpic:PROCpaintscale:PROCeorback:PROCpaintbrush(OX%,OY%)
15690SELBR%=MOUIC%+1
15700IF FUST%>0 THEN PROCeorback:PROCpaintbrush(OX%,OY%):PROCoutpic:PROCquickdrawmain
15710PROCforcedrawbrush
15720ENDIF
15730IF MOUIC%<>26 OR FUSE%=29 OR FUSE%=30 THEN ENDPROC
15740IF FUST%>0 THEN PROCinpic:PROCpaintscale:PROCeorback:PROCpaintbrush(OX%,OY%)
15750BXM%=VAL(FNgi(5,23)):IF BXM%<1 THEN BXM%=1:PROCsi(5,23,"1")
15760BYM%=VAL(FNgi(5,20)):IF BYM%<1 THEN BYM%=1:PROCsi(5,20,"1")
15770BXD%=VAL(FNgi(5,24)):IF BXD%<1 THEN BXD%=1:PROCsi(5,24,"1")
15780BYD%=VAL(FNgi(5,19)):IF BYD%<1 THEN BYD%=1:PROCsi(5,19,"1")
15790IF FUST%>0 THEN PROCpaintscale:PROCeorback:PROCpaintbrush(OX%,OY%):PROCoutpic:PROCquickdrawmain
15800ENDPROC
15810
15820DEFPROCairbclick
15830PROCarrows(4, 4,6,17,1,999,1):PROCarrows(4, 5,7,19,4,999,1)
15840ENDPROC
15850
15860DEFPROCmenoff:SYS "Wimp_CreateMenu",-1:ENDPROC
15870
15880DEFPROCbuildiconmenu
15890PROCbm(30,"Imagery")
15900PROCatm(30,"Info",1,"")
15910PROCatm(30,"Save"+FNk(" f3"),0,"SL")
15920PROCatm(30,"Quit",-1,"F")
15930ENDPROC
15940
15950DEFPROCiconmenu:MENO%=30:SYS "Wimp_CreateMenu",,FNcmad(30),MOUX%-64,252:ENDPROC
15960
15970DEFPROCwindmenu:MMEX%=MOUX%:MMEY%=MOUY%:MENO%=0:MEBA%=MENU%:MEINBA%=MENUIND%
15980L%=1:IF FNcmad(L%)<>-1 THEN TAD%=(FNcmad(L%))+28+(5*24):!TAD%=(!TAD%) AND 130:TAD%!8=(TAD%!8) AND (&FFFFFFFF-(1<<22))
15990
16000IF LITY%=21 THEN PROCtickitem(12,1)
16010IF LITY%=53 THEN PROCtickitem(12,2)
16020IF LITY%=5 THEN PROCtickitem(11,1)
16030IF (USE% AND 15)=0 THEN PROCtickitem(11,3)
16040IF (USE% AND 15)=1 THEN PROCtickitem(11,4)
16050IF (USE% AND 15)=2 THEN PROCtickitem(11,5)
16060IF (USE% AND 15)=3 THEN PROCtickitem(11,6)
16070IF (USE% AND 15)=4 THEN PROCtickitem(11,7)
16080IF (USE% AND 15)=6 THEN PROCtickitem(11,8)
16090IF (USE% AND 15)=7 THEN PROCtickitem(11,9)
16100IF (USE% AND 112)=16 THEN PROCtickitem(11,10)
16110IF (USE% AND 112)=32 THEN PROCtickitem(11,11)
16120IF (USE% AND 112)=48 THEN PROCtickitem(11,12)
16130IF (USE% AND 112)=64 THEN PROCtickitem(11,13)
16140IF (USE% AND 112)=80 THEN PROCtickitem(11,14)
16150IF FONTS%=0 THEN PROCshadeitem(14,FONTS%+3)
16160IF FONTA%=-1 THEN PROCshadeitem(0,4)
16170IF GRCO%=-1 THEN PROCshadeitem(5,2) ELSE PROCshadeitem(5,1):PROCtickitem(0,10)
16180IF GRLO% THEN PROCtickitem(5,3)
16190IF ZOOM%>1 THEN PROCtickitem(0,9)
16200IF FNwopen(32) THEN PROCtickitem(0,11)
16210IF KUKE% THEN PROCtickitem(10,5)
16220IF KSC% THEN PROCtickitem(10,6)
16230IF UNDO%<>-1 THEN PROCshadeitem(10,2) ELSE PROCshadeitem(10,3):PROCshadeitem(7,1)
16240IF FUSE%=34 THEN PROCshadeitem(1,6)
16250
16260SYS "Wimp_CreateMenu",,FNcmad(0),MOUX%-64,MOUY%+60
16270ENDPROC
16280
16290DEFPROCbuildmainmenu
16300MEOF%=0:MEIN%=0
16310REM ------------------------
16320
16330PROCbuildmm2:ENDPROC
16340
16350DEFFNk(IT$):IF KSC% THEN =IT$ ELSE =""
16360
16370DEFPROCbuildmm2
16380MEOF%=0:MEIN%=0
16390
16400PROCbm(15,"Speed")
16410PROCatm(15,"Very fast",-1,"")
16420PROCatm(15,"Fast",-1,"")
16430PROCatm(15,"Medium",-1,"")
16440PROCatm(15,"Slow",-1,"F")
16450
16460PROCbm(19,"Preserve")
16470PROCatm(19,"-> 1"+FNk(" �f1"),-1,"")
16480PROCatm(19,"-> 2"+FNk(" �f2"),-1,"")
16490PROCatm(19,"-> 3"+FNk(" �f3"),-1,"")
16500PROCatm(19,"-> 4"+FNk(" �f4"),-1,"F")
16510
16520PROCbm(20,"Restore")
16530PROCatm(20,"<- 1"+FNk(" ^f1"),-1,"")
16540PROCatm(20,"<- 2"+FNk(" ^f2"),-1,"")
16550PROCatm(20,"<- 3"+FNk(" ^f3"),-1,"")
16560PROCatm(20,"<- 4"+FNk(" ^f4"),-1,"F")
16570
16580PROCbm(1,"File")
16590PROCatm(1,"Save"+FNk(" f3"),0,"S")
16600PROCatm(1,"Save as sprite",7,"S")
16610PROCatm(1,"Save defaults",-1,"S")
16620PROCatm(1,"Save settings",34,"S")
16630PROCatm(1,"Export",-1,"S")
16640PROCatm(1,"Import",31,"L")
16650PROCatm(1,"Preserve",FNcmad(19),"S")
16660PROCatm(1,"Restore",FNcmad(20),"SF")
16670
16680PROCbm(12,"Pattern")
16690PROCatm(12,"Restarted",-1,"")
16700PROCatm(12,"Continuous",-1,"F")
16710
16720PROCbm(11,"Styles")
16730PROCatm(11,"Solid line",-1,"")
16740PROCatm(11,"Line pattern",FNcmad(12),"L")
16750PROCatm(11,"Overwrite",-1,"")
16760PROCatm(11,"OR",-1,"")
16770PROCatm(11,"AND",-1,"")
16780PROCatm(11,"EOR",-1,"")
16790PROCatm(11,"Invert",-1,"")
16800PROCatm(11,"NAND",-1,"")
16810PROCatm(11,"NOR",-1,"L")
16820PROCatm(11,"ECF 1",-1,"")
16830PROCatm(11,"ECF 2",-1,"")
16840PROCatm(11,"ECF 3",-1,"")
16850PROCatm(11,"ECF 4",-1,"")
16860PROCatm(11,"Giant ECF",-1,"F")
16870
16880PROCbm(13,"Fill")
16890PROCatm(13,"Flood fill",-1,"S")
16900PROCatm(13,"Pattern fill",-1,"SL")
16910PROCatm(13,"Graduated fill",17,"F")
16920
16930PROCbm(2,"Paint")
16940PROCatm(2,"Show palette"+FNk(" f1"),-1,"")
16950PROCatm(2,"Select colour"+FNk(" f2"),-1,"S")
16960PROCatm(2,"Unset transparents",-1,"S")
16970PROCatm(2,"Set transparents",-1,"SL")
16980PROCatm(2,"Pixels"+FNk(" f4"),-1,"S")
16990PROCatm(2,"Sketch"+FNk(" f5"),-1,"S")
17000PROCatm(2,"Rubber line"+FNk(" f6"),-1,"S")
17010PROCatm(2,"Airbrush..."+FNk(" f7"),-1,"S")
17020PROCatm(2,"Paintbrush..."+FNk(" f8"),-1,"L")
17030PROCatm(2,"Fill",FNcmad(13),"L")
17040PROCatm(2,"Line style",FNcmad(11),"F")
17050
17060PROCbm(4,"Shapes")
17070PROCatm(4,"Wire rectangle"+FNk(" �f5"),-1,"S")
17080PROCatm(4,"Wire triangle"+FNk(" �f6"),-1,"S")
17090PROCatm(4,"Wire circle"+FNk(" �f7"),-1,"S")
17100PROCatm(4,"Wire ellipse"+FNk(" �f8"),-1,"")
17110PROCatm(4,"Wire parallelogram"+FNk(" �f9"),-1,"")
17120PROCatm(4,"Wire arc"+FNk(" �f10"),-1,"SL")
17130PROCatm(4,"Solid rectangle"+FNk(" ^f5"),-1,"S")
17140PROCatm(4,"Solid triangle"+FNk(" ^f6"),-1,"S")
17150PROCatm(4,"Solid circle"+FNk(" ^f7"),-1,"S")
17160PROCatm(4,"Solid ellipse"+FNk(" ^f8"),-1,"S")
17170PROCatm(4,"Solid parallelogram"+FNk(" ^f9"),-1,"S")
17180PROCatm(4,"Solid sector"+FNk(" ^f10"),-1,"")
17190PROCatm(4,"Solid segment"+FNk(" ^f11"),-1,"SF")
17200
17210PROCbm(6,"Presets")
17220PROCatm(6,"2x2 grid",-1,"")
17230PROCatm(6,"3x3 grid",-1,"")
17240PROCatm(6,"4x4 grid",-1,"")
17250PROCatm(6,"6x6 grid",-1,"")
17260PROCatm(6,"8x8 grid",-1,"")
17270PROCatm(6,"16x16 grid",-1,"")
17280PROCatm(6,"32x32 grid",-1,"")
17290PROCatm(6,"32x16 grid",-1,"F")
17300
17310PROCbm(5,"Grid")
17320PROCatm(5,"Show grid"+FNk(" ^f12"),-1,"S")
17330PROCatm(5,"Hide grid"+FNk(" �f12"),-1,"S")
17340PROCatm(5,"Grid lock",-1,"S")
17350PROCatm(5,"Preset grids",FNcmad(6),"")
17360PROCatm(5,"Edit grid",6,"F")
17370
17380PROCbm(7,"Manipulate")
17390PROCatm(7,"Undo",-1,"L")
17400PROCatm(7,"Copy area...",-1,"S")
17410PROCatm(7,"Move area...",-1,"S")
17420PROCatm(7,"Mirror area",-1,"S")
17430PROCatm(7,"Invert area",-1,"S")
17440PROCatm(7,"Strip area",-1,"S")
17450PROCatm(7,"Rotate...",-1,"S")
17460PROCatm(7,"Scale to fit...",-1,"L")
17470PROCatm(7,"Wobble...",-1,"")
17480PROCatm(7,"Pixel mapping",-1,"F")
17490
17500PROCbm(17,"Colour scales")
17510PROCatm(17,"Red",-1,"")
17520PROCatm(17,"Green",-1,"")
17530PROCatm(17,"Blue",-1,"")
17540PROCatm(17,"Cyan",-1,"")
17550PROCatm(17,"Magenta",-1,"")
17560PROCatm(17,"Yellow",-1,"F")
17570
17580PROCbm(18,"Tint")
17590PROCatm(18,"0",-1,"")
17600PROCatm(18,"1",-1,"")
17610PROCatm(18,"2",-1,"")
17620PROCatm(18,"3",-1,"F")
17630
17640PROCbm(8,"Special")
17650PROCatm(8,"Trace",-1,"S")
17660PROCatm(8,"Smudge area",-1,"")
17670PROCatm(8,"Wet brush...",-1,"S")
17680PROCatm(8,"Tint area",-1,"S")
17690PROCatm(8,"Tint brush...",-1,"S")
17700PROCatm(8,"Set frame",19,"SL")
17710PROCatm(8,"RGB control...",-1,"")
17720PROCatm(8,"Grey scale...",-1,"S")
17730PROCatm(8,"Contrast control...",-1,"")
17740PROCatm(8,"Posterization...",-1,"S")
17750PROCatm(8,"De-tint",FNcmad(18),"S")
17760PROCatm(8,"RGB graph",-1,"S")
17770PROCatm(8,"Colour scale",FNcmad(17),"SL")
17780PROCatm(8,"Pixelate...",-1,"S")
17790PROCatm(8,"Filter...",-1,"")
17800PROCatm(8,"Colour replace...",-1,"SF")
17810
17820PROCbm(9,"Edit")
17830PROCatm(9,"Line pattern",10,"S")
17840PROCatm(9,"Fill patterns",11,"S")
17850PROCatm(9,"Edit brush/fill",12,"S")
17860PROCatm(9,"Graduated fills",13,"F")
17870
17880PROCbm(10,"Misc")
17890PROCatm(10,"Info",1,"L")
17900PROCatm(10,"Enable undo",-1,"S")
17910PROCatm(10,"Disable undo",-1,"S")
17920PROCatm(10,"Mouse speed",FNcmad(15),"")
17930PROCatm(10,"Cursor keys",-1,"")
17940PROCatm(10,"Full menus",-1,"")
17950PROCatm(10,"Bring to top "+FNk("f11"),-1,"L")
17960PROCatm(10,"Wipe picture",-1,"F")
17970
17980PROCbm(0,"Imagery")
17990PROCatm(0,"Misc",FNcmad(10),"")
18000PROCatm(0,"File",FNcmad(1),"L")
18010PROCatm(0,"Paint"+FNk(" f9"),FNcmad(2),"")
18020PROCatm(0,"Text",0,"S")
18030PROCatm(0,"Shapes",FNcmad(4),"")
18040PROCatm(0,"Special",FNcmad(8),"")
18050PROCatm(0,"Edit",FNcmad(9),"")
18060PROCatm(0,"Manipulate",FNcmad(7),"L")
18070PROCatm(0,"Zoom"+FNk(" f10"),33,"S")
18080PROCatm(0,"Grid",FNcmad(5),"")
18090PROCatm(0,"Toolkit",-1,"SF")
18100
18110ENDPROC
18120
18130DEFFNfont(F%):IF FONTA%=-1 OR F%>FONTS% THEN ="" ELSE =$(FONTA%+FONTO%+(!(FONTA%+(F%*4))))
18140
18150DEFFNfontroot(F$):IF INSTR(F$,".")=0 THEN =F$
18160IPF%=1:IPF$="":WHILE MID$(F$,IPF%,1)<>".":IPF$=IPF$+MID$(F$,IPF%,1):IPF%+=1:ENDWHILE:=IPF$
18170
18180REM ** Create a menu (Number, Title)
18190DEFPROCbm(MN%,MT$)
18200!FNmad(MN%)=MENU%+MEOF%:TAD%=MENU%+MEOF%
18210$TAD%=MT$:TAD%?12=7:TAD%?13=2:TAD%?14=7:TAD%?15=0:TAD%!16=0:TAD%!20=44:TAD%!24=0
18220MEOF%+=28
18230IF MEOF%>MESI% THEN PROCmessage(0,"Menu tree has run out of room.")
18240ENDPROC
18250
18260REM ** Feature format : L = Follow by dotted line
18270REM ** : F = Last item
18280DEFPROCatm(MN%,IT$,HA%,FE$)
18290TAD%=MENU%+MEOF%
18300FE%=0
18310IF INSTR(FE$,"L") THEN FE%+=2
18320IF INSTR(FE$,"F") THEN FE%+=128
18330!TAD%=FE%
18340IF HA%>-1 AND HA%<&8000 THEN TAD%!4=HAND%(HA%)
18350IF HA%=-1 THEN TAD%!4=-1
18360IF HA%>&8000 THEN TAD%!4=HA%
18370TAD%!8=1 OR (7<<24) OR 256
18380IF INSTR(FE$,"S") THEN TAD%!8=(TAD%!8)+(1<<22)
18390$(MENUIND%+MEIN%)=IT$
18400ILE%=LEN(IT$)+1
18410IF (ILE% MOD 4)>0 THEN ILE%=((ILE% DIV 4)+1)*4
18420TAD%!12=MENUIND%+MEIN%
18430TAD%!20=LEN(IT$)
18440TAD%!16=MENALO%
18450MEIN%+=ILE%
18460IF MEIN%>MESI% THEN PROCmessage(1,"Menu indirection buffer overflow.")
18470MEOF%+=24
18480IF MEOF%>MESI% THEN PROCmessage(0,"Menu tree has run out of room")
18490IF ((!(FNcmad(MN%)+16))-32)<(LEN(IT$)*16) THEN !(FNcmad(MN%)+16)=(LEN(IT$)*16)+32
18500ENDPROC
18510
18520DEFPROCshadeitem(MN%,IN%):TAD%=FNcmad(MN%)+28+((IN%-1)*24):TAD%!8=(TAD%!8) OR (1<<22):ENDPROC
18530
18540DEFPROCtickitem(MN%,IN%):TAD%=FNcmad(MN%)+28+((IN%-1)*24):!TAD%=(!TAD%) OR 1:ENDPROC
18550
18560DEFPROCmenu:SYS6,229
18570SYS "Wimp_GetPointerInfo",,BLK%+128:MBU%=BLK%!136
18580SYS "Wimp_DecodeMenu",,FNcmad(MENO%),BLK%,SEL%
18590DSI%=FALSE
18600SEL$=$SEL%:IT$="":HE%=LEN(SEL$):WHILE MID$(SEL$,HE%,1)<>" " AND HE%>1:IT$=MID$(SEL$,HE%,1)+IT$:HE%-=1:ENDWHILE
18610IF INSTR(IT$,"^")<>0 OR INSTR(IT$,"�")<>0 OR (LEN(IT$)<=3 AND LEFT$(IT$,1)="f") THEN SEL$=LEFT$(SEL$,HE%):REPEAT:SEL$=LEFT$(SEL$,LEN(SEL$)-1):UNTIL RIGHT$(SEL$,1)<>" "
18620IF RIGHT$(SEL$,3)="..." THEN SEL$=LEFT$(SEL$,LEN(SEL$)-3)
18630IF INSTR(SEL$,".")<>0 AND LEFT$(SEL$,5)<>"Text." AND LEFT$(SEL$,16)<>"Special.De-tint." AND LEFT$(SEL$,14)<>"File.Preserve." AND LEFT$(SEL$,13)<>"File.Restore." THEN
18640B$="":WHILE RIGHT$(SEL$,1)<>".":B$=RIGHT$(SEL$,1)+B$:SEL$=LEFT$(SEL$,LEN(SEL$)-1):ENDWHILE:SEL$=B$
18650ENDIF
18660$SEL%=SEL$
18670IF $SEL%="Quit" THEN PROCkillf:FUSE%=-1:PROCwindname(2,PIC$):PROCforcedrawmain:IF FNquityn THEN PROCdie
18680IF $SEL%="Paint" THEN PROCnf("",-1,-1)
18690IF $SEL%="Show palette" THEN DSI%=TRUE:PROCopenpal
18700
18710IF $SEL%="Paintbrush" THEN PROCnf("Paintbrush",4,5):PROCtkh(10)
18720
18730IF $SEL%="2x2 grid" THEN DSI%=TRUE:GRIWI%=2:GRIHE%=2:PROCsetgric:PROCforcedrawmain
18740IF $SEL%="3x3 grid" THEN DSI%=TRUE:GRIWI%=3:GRIHE%=3:PROCsetgric:PROCforcedrawmain
18750IF $SEL%="4x4 grid" THEN DSI%=TRUE:GRIWI%=4:GRIHE%=4:PROCsetgric:PROCforcedrawmain
18760IF $SEL%="6x6 grid" THEN DSI%=TRUE:GRIWI%=6:GRIHE%=6:PROCsetgric:PROCforcedrawmain
18770IF $SEL%="8x8 grid" THEN DSI%=TRUE:GRIWI%=8:GRIHE%=8:PROCsetgric:PROCforcedrawmain
18780IF $SEL%="16x16 grid" THEN DSI%=TRUE:GRIWI%=16:GRIHE%=16:PROCsetgric:PROCforcedrawmain
18790IF $SEL%="32x32 grid" THEN DSI%=TRUE:GRIWI%=32:GRIHE%=32:PROCsetgric:PROCforcedrawmain
18800IF $SEL%="32x16 grid" THEN DSI%=TRUE:GRIWI%=32:GRIHE%=16:PROCsetgric:PROCforcedrawmain
18810IF $SEL%="Wire ellipse" THEN PROCnf("Wire ellipse",11,-1)
18820
18830IF $SEL%="Wire parallelogram" THEN PROCnf("Wire parallelogram",13,-1):PROCtkh(17)
18840
18850IF $SEL%="Solid sector" THEN PROCnf("Solid sector",16,-1)
18860
18870IF $SEL%="Scale to fit" THEN PROCnf("Scale to fit",23,8):FUCO%=0:PROCpatch(23)
18880
18890IF $SEL%="Pixel mapping" THEN PROCnf("Pixel mapping",25,-1):FUCO%=1:OX%=-1:OY%=-1:PROCpatch(25)
18900IF SEL$="Solid line" THEN DSI%=TRUE:LITY%=5
18910IF SEL$="Restarted" THEN DSI%=TRUE:LITY%=21
18920IF SEL$="Continuous" THEN DSI%=TRUE:LITY%=53
18930IF SEL$="Overwrite" THEN DSI%=TRUE:USE%=(USE% AND 112)
18940IF SEL$="OR" THEN DSI%=TRUE:USE%=(USE% AND 112)+1
18950IF SEL$="AND" THEN DSI%=TRUE:USE%=(USE% AND 112)+2
18960IF SEL$="EOR" THEN DSI%=TRUE:USE%=(USE% AND 112)+3
18970IF SEL$="Invert" THEN DSI%=TRUE:USE%=(USE% AND 112)+4
18980IF SEL$="NAND" THEN DSI%=TRUE:USE%=(USE% AND 112)+6
18990IF SEL$="NOR" THEN DSI%=TRUE:USE%=(USE% AND 112)+7
19000IF SEL$="ECF 1" AND (USE% AND 112)=16 THEN DSI%=TRUE:USE%=(USE% AND 15) ELSE IF SEL$="ECF 1" THEN DSI%=TRUE:USE%=(USE% AND 15)+16
19010IF SEL$="ECF 2" AND (USE% AND 112)=32 THEN DSI%=TRUE:USE%=(USE% AND 15) ELSE IF SEL$="ECF 2" THEN DSI%=TRUE:USE%=(USE% AND 15)+32
19020IF SEL$="ECF 3" AND (USE% AND 112)=48 THEN DSI%=TRUE:USE%=(USE% AND 15) ELSE IF SEL$="ECF 3" THEN DSI%=TRUE:USE%=(USE% AND 15)+48
19030IF SEL$="ECF 4" AND (USE% AND 112)=64 THEN DSI%=TRUE:USE%=(USE% AND 15) ELSE IF SEL$="ECF 4" THEN DSI%=TRUE:USE%=(USE% AND 15)+64
19040IF SEL$="Giant ECF" AND (USE% AND 112)=80 THEN DSI%=TRUE:USE%=(USE% AND 15) ELSE IF SEL$="Giant ECF" THEN DSI%=TRUE:USE%=(USE% AND 15)+80
19050IF SEL$="Smudge area" THEN PROCnf("Smudge area",27,-1)
19060IF $SEL%="Very fast" THEN MMY%=4:MMX%=4:MOUSE STEP MMX%,MMY%
19070IF $SEL%="Fast" THEN MMY%=3:MMX%=3:MOUSE STEP MMX%,MMY%
19080IF $SEL%="Medium" THEN MMY%=2:MMX%=2:MOUSE STEP MMX%,MMY%
19090IF $SEL%="Slow" THEN MMY%=1:MMX%=1:MOUSE STEP MMX%,MMY%
19100IF $SEL%="RGB control" THEN PROCnf("RGB control",38,21):PROCpatch(38)
19110IF $SEL%="Wipe picture" THEN PROCnf("",-1,-1):PROCwipepic
19120IF $SEL%="Cursor keys" THEN KUKE%=NOT KUKE%:DSI%=TRUE
19130IF $SEL%="Contrast control" THEN PROCnf("Contrast control",43,26):PROCpatch(43)
19140
19150IF SEL$="Filter" THEN PROCnf("Filter",47,29)
19160IF SEL$="Wobble" THEN SYS&2E,256+9,SHOW%:SYS&2E,266,SHOW%,"<Imagery$Dir>.Show":PROCnf("Wobble",48,30)
19170IF $SEL%="Bring to top" AND LAOPWI%<>-1 THEN PROCopenwind(LAOPWI%)
19180
19190IF SEL$="Full menus" THEN KSC%=NOT KSC%:PROCbuildmm2:PROCbuildiconmenu:DSI%=TRUE
19200IF DSI% AND MBU%=1 THEN PROCwindmenu
19210ENDPROC
19220
19230DEFPROCud:IF UNDO%<>-1 THEN !VARS=PIC%:VARS!4=UNDO%:A%=VARS:CALL backuppic
19240ENDPROC
19250
19260DEFPROCnf(F$,F%,W%)
19270PROCkillf:IF F$<>"" THEN PROCud:PROCwindname(2,PIC$+" ["+F$+"]") ELSE PROCwindname(2,PIC$)
19280FUSE%=F%:FUST%=0:DSI%=TRUE:PROCspinit:IF W%<>-1 THEN PROCopenwind(W%)
19290ENDPROC
19300
19310DEFPROCwipepic
19320!IO%=5:$(IO%+4)="Are you sure you want to wipe the picture?"+CHR$0
19330SYS "Wimp_ReportError",IO%,%11011,"!Imagery"+CHR$0 TO ,R%
19340IF R%=0 THEN GOTO 19330
19350IF R%=2 THEN ENDPROC
19360PROCinpic:VDU26:GCOL0,128 TINT 0:CLG:PROCoutpic:PROCforcedrawmain
19370ENDPROC
19380
19390DEFFNquityn
19400!IO%=5:$(IO%+4)="Are you sure you want to quit?"+CHR$0
19410SYS "Wimp_ReportError",IO%,%11011,"!Imagery"+CHR$0 TO ,R%
19420IF R%=0 THEN GOTO 19410
19430=(R%=1)
19440
19450DEFPROCimport
19460A$=FNgetname:BLK%!12=BLK%!8:BLK%!16=4:!BLK%=64:SYS "Wimp_SendMessage",17,BLK%,BLK%!4
19470PROCkillf:FUSE%=34:FUST%=0:PROCopenwind(8):PROCspinit
19480F%=OPENUP(A$):IMS%=EXT#F%:CLOSE#F%
19490PROCspbuf(IMS%+64):IF Q% THEN FUSE%=-1:PROCclosewind(8):PROCspinit:PROCspbuferr
19500SYS&2E,266,SPBUF%,A$
19510SYS&2E,269,SPBUF%,IO%,16,1 TO ,,,L%
19520IMP$="":FORK%=0 TO L%-1:IMP$=IMP$+CHR$(IO%?K%):NEXT
19530SYS&2E,296,SPBUF%,IMP$ TO ,,,IMW%,IMH%,,IMM%
19540IF GRFX% THEN SYS&2E,289,SPBUF%,IMP$
19550IF GRFY% THEN SYS&2E,303,SPBUF%,IMP$
19560SYS&35,IMM%,5 TO ,,E%
19570PHE%=2^E%:IF E%<2 THEN IO%!4=1:IO%!12=2^(2-E%) ELSE IO%!4=2^(E%-2):IO%!12=1
19580SYS&35,IMM%,4 TO ,,E%
19590PWI%=2^E%
19600SX%=2^(E%-1):!IO%=SX%:IO%!8=1
19610L%=(SPBUF%+(SPBUF%!8)):IF L%!32=44 THEN
19620IMPA%=0
19630ELSE
19640IMPA%=L%+44:K%=48:I%=52:WHILE I%<(L%!32):L%!K%=L%!I%:I%+=8:K%+=4:ENDWHILE
19650ENDIF
19660IF IMM%<>15 OR IMPA%<>0 THEN SYS&40740,IMM%,IMPA%,15,0,PIXTAB2%:IMPT%=PIXTAB2% ELSE IMPT%=0
19670PROCud:PROCwindname(2,PIC$+" [Import '"+IMP$+"']")
19680IMH%=IMH%*PHE%:IMW%=IMW%*PWI%
19690GRN$=IMP$
19700ENDPROC
19710
19720DEFPROCimpcen
19730PROCinpic:PROCpimport(640,512,0):PROCoutpic:PROCquickdrawmain:PROCkillf:FUSE%=-1
19740ENDPROC
19750
19760DEFPROCimpscale
19770OXM%=GRXM%:OYM%=GRYM%:OXD%=GRXD%:OYD%=GRYD%:GRXM%=1280:GRYM%=1024:GRXD%=IMW%:GRYD%=IMH%
19780PROCinpic:PROCpimport(640,512,0):PROCoutpic:PROCforcedrawmain:PROCkillf:FUSE%=-1:GRXD%=OXD%:GRYD%=OYD%:GRXM%=OXM%:GRYM%=OYM%
19790ENDPROC
19800
19810DEFPROCimptile:PROCpimport(X%,Y%,0):IF NOT FNhigh(31,5) THEN ENDPROC
19820SYS "Hourglass_On":AW=XR*IMW%:AH=YR*IMH%
19830K%=0:REPEAT:L%=0:REPEAT:OX=K%*AW:OY=L%*AH:PROCpimport(X%+OX,Y%+OY,0):PROCpimport(X%+OX,Y%-OY,0):PROCpimport(X%-OX,Y%+OY,0):PROCpimport(X%-OX,Y%-OY,0):L%+=1:UNTIL (Y%+(L%*AH))>1023+AH AND (Y%-(L%*AH))<-AH
19840K%+=1:UNTIL (X%+(K%*AW))>1279+AW AND (X%-(K%*AW))<-AW
19850SYS "Hourglass_Off":ENDPROC
19860
19870DEFPROCfillcontclick
19880IF MOUIC%<>24 THEN ENDPROC
19890GRFN%=-1
19900IF FNhigh(17,3) THEN GRFN%=0
19910IF FNhigh(17,9) THEN GRFN%=1
19920IF FNhigh(17,12) THEN GRFN%=2
19930IF FNhigh(17,15) THEN GRFN%=3
19940IF FNhigh(17,18) THEN GRFN%=4
19950IF GRFN%=-1 THEN PROCmessage(0,"You must select a fill sequence to use.")
19960IF FUSE%=31 THEN
19970IF GRTY%=1 THEN PROCkillf
19980ENDIF
19990GRTY%=-1
20000IF FNhigh(17,20) THEN GRTY%=0
20010IF FNhigh(17,22) THEN GRTY%=1:FUST%=0
20020IF GRTY%=-1 THEN PROCmessage(0,"You must select the type of fill to use.")
20030PROCkillf:FUSE%=31:FUST%=0:PROCud:PROCwindname(2,PIC$+" [Graduated fill ("+FNfilldet(GRFN%+1)+")]"):PROCspinit:PROCtkh(12)
20040IF MOUB%=4 THEN PROCmenoff
20050ENDPROC
20060
20070DEFPROCunsetrasp:ENDPROC
20080
20090DEFPROCsetrasp:ENDPROC
20100
20110DEFPROCspinit
20120PROCspbuf(0)
20130ENDPROC
20140
20150DEFPROCsetgric
20160PROCsi(6,19,STR$GRIWI%)
20170PROCsi(6,21,STR$GRIHE%)
20180GRBX%=VAL(FNgi(6,23)):IF GRBX%>GRIWI% THEN REPEAT:GRBX%-=GRIWI%:UNTIL GRBX%<GRIWI%:PROCsi(6,23,STR$GRBX%)
20190GRBY%=VAL(FNgi(6,25)):IF GRBY%>GRIHE% THEN REPEAT:GRBY%-=GRIHE%:UNTIL GRBY%<GRIHE%:PROCsi(6,25,STR$GRBY%)
20200ENDPROC
20210
20220DEFPROCzoomsize
20230!BLK%=HAND%(2):SYS "Wimp_GetWindowState",,BLK%:WIF%=BLK%!28
20240!BLK%=HAND%(2):SYS "Wimp_CloseWindow",,BLK%
20250!BLK%=0:BLK%!4=-1023*ZOOM%:BLK%!8=1279*ZOOM%:BLK%!12=0:SYS "Wimp_SetExtent",HAND%(2),BLK%
20260!BLK%=HAND%(2):SYS "Wimp_GetWindowState",,BLK%
20270BLK%!28=WIF%:SYS "Wimp_OpenWindow",,BLK%:ENDPROC
20280
20290DEFPROCwind_ext(WH%,TX%,TY%,SX%,SY%)
20300!BLK%=HAND%(WH%):SYS "Wimp_GetWindowState",,BLK%:WIF%=BLK%!28
20310!BLK%=HAND%(WH%):SYS "Wimp_CloseWindow",,BLK%
20320!BLK%=TX%:BLK%!4=TY%:BLK%!8=SX%:BLK%!12=SY%:SYS "Wimp_SetExtent",HAND%(WH%),BLK%
20330!BLK%=HAND%(WH%):SYS "Wimp_GetWindowState",,BLK%
20340IF WH%=12 AND TY%=-900 THEN BLK%!8=(BLK%!8)-260
20350BLK%!28=WIF%:SYS "Wimp_OpenWindow",,BLK%:ENDPROC
20360ENDPROC
20370
20380DEFPROCed_bru
20390PROCwind_ext(12,0,-640,1024,0):EDTY%=0
20400ENDPROC
20410
20420DEFPROCed_fill
20430PROCwind_ext(12,0,-900,1024,0):EDTY%=1
20440ENDPROC
20450
20460DEFFNgstr(AD%):W$="":IF ?AD%<32 THEN =W$ ELSE REPEAT:W$=W$+CHR$(?AD%):AD%+=1:UNTIL ?AD%<32:=W$
20470
20480DEFFNgi(WH%,IC%):LWG%=WH%:LIG%=IC%:!ICBLK%=HAND%(WH%):ICBLK%!4=IC%:SYS "Wimp_GetIconState",,ICBLK%:=FNgstr(!(ICBLK%+28))
20490
20500DEFPROCsi(WH2%,IC2%,SET$):!ICBLK%=HAND%(WH2%):ICBLK%!4=IC2%:SYS "Wimp_GetIconState",,ICBLK%:ICBLK%!8=0:ICBLK%!12=0:$(ICBLK%!28)=SET$:SYS "Wimp_SetIconState",,ICBLK%:ENDPROC
20510
20520DEFFNhigh(WH%,IC%):!ICBLK%=HAND%(WH%):ICBLK%!4=IC%:SYS "Wimp_GetIconState",,ICBLK%:=((?(ICBLK%+26)) AND %100000)=32
20530
20540DEFFNwopen(WH%):!ICBLK%=HAND%(WH%):SYS "Wimp_GetWindowState",,ICBLK%:=((ICBLK%?34) AND 1)=1
20550
20560DEFPROCshadeicon(WH%,IC%):PROCicflag(WH%,IC%,1<<22,0):ENDPROC
20570
20580DEFPROCclearicon(WH%,IC%):PROCicflag(WH%,IC%,0,1<<22):ENDPROC
20590
20600DEFPROCiconhi(WH%,IC%):PROCicflag(WH%,IC%,1<<21,0):ENDPROC
20610
20620DEFPROCiconlo(WH%,IC%):PROCicflag(WH%,IC%,0,1<<21):ENDPROC
20630
20640DEFPROCicflag(WH%,IC%,WE%,WM%)
20650!ICBLK%=HAND%(WH%):ICBLK%!4=IC%
20660ICBLK%!8=WE%:IF WM%<>0 THEN ICBLK%!12=WM% ELSE ICBLK%!12=ICBLK%!8
20670SYS "Wimp_SetIconState",,ICBLK%
20680ENDPROC
20690
20700DEFPROCpoint:SYS "Wimp_GetPointerInfo",,POI%:MOX%=!POI%:MOY%=POI%!4:MOB%=POI%!8:MOH%=POI%!12:ENDPROC
20710
20720DEFPROCwindname(WH%,SET$):!BLK%=HAND%(WH%):SYS "Wimp_GetWindowState",,BLK%:WIF%=BLK%!28:SYS "Wimp_GetWindowInfo",,BLK%:SYS"Wimp_CloseWindow",,BLK%
20730AD%=BLK%!76:BLK%!28=WIF%:$AD%=SET$:SYS "Wimp_OpenWindow",,BLK%:ENDPROC
20740
20750DEFPROCdragfin
20760ENDPROC
20770
20780DEFPROCstartdrag
20790SYS "Wimp_GetWindowState",,BLK%+12
20800X%=BLK%!16:Y%=BLK%!28:BLK%!16=0:SYS "Wimp_GetIconState",,BLK%+12
20810BLK%!16=5:BLK%!20+=X%-2:BLK%!24+=Y%-4
20820BLK%!28+=X%+2:BLK%!32+=Y%
20830BLK%!36=0:BLK%!40=0:BLK%!44=&7FFFFFFF:BLK%!48=&7FFFFFFF:SYS "Wimp_DragBox",,BLK%+12:ENDPROC
20840
20850DEFPROCinmessage(M%)
20860CASE M% OF
20870WHEN 0:PROCdie
20880WHEN 1:PROCramload
20890WHEN 2:PROCdragsave
20900WHEN 5:IF BLK%!12=0 AND BLK%!40=&C11 PROCload(&C11)
20910WHEN 6:IF DRAG%=7 THEN PROCramfetch
20920WHEN 7:PROCramreceive
20930WHEN 3:IF BLK%!12=0 AND BLK%!40=&556 PROCload(&556) ELSE IF BLK%!12=0 AND BLK%!40=&C11 PROCload(&C11) ELSE IF BLK%!12=0 AND BLK%!40=&FF9 THEN PROCimport
20940ENDCASE:ENDPROC
20950
20960DEFPROCramload
20970TX%=BLK%!40:IF TX%<>&FF9 THEN ENDPROC
20980IMS%=BLK%!36:A$=FNgetname:MREF%=BLK%!8:SDH%=BLK%!4
20990PROCkillf:FUSE%=34:FUST%=0:PROCopenwind(8):PROCspinit
21000PROCspbuf(IMS%+8):IF Q% THEN FUSE%=-1:PROCclosewind(8):PROCspinit:PROCspbuferr
21010RATOF%=0:RDTS%=IMS%
21020BLK%!8=MREF%:PROCramtransmit
21030ENDPROC
21040
21050DEFPROCramtransmit
21060!BLK%=64:BLK%!12=BLK%!8:BLK%!16=6:BLK%!20=SPBUF%+4+RATOF%:BLK%!24=RDTS%:SYS "Wimp_SendMessage",18,BLK%,SDH%:ENDPROC
21070
21080DEFPROCramreceive
21090TX%=BLK%!24:IF TX%=RDTS% THEN RDTS%=4:RATOF%+=TX%:PROCramtransmit:ENDPROC
21100GOTO 19510
21110
21120DEFPROCramfetch
21130BUAD%=BLK%!20 : REM ram fetch buffer address
21140BULE%=BLK%!24 : REM buffer length
21150SDH%=BLK%!4 : REM handle of sender task
21160MREF%=BLK%!8 : REM my-ref
21170BLK%!12=MREF%
21180BLK%!16=7 : REM Ram_transmit
21190!BLK%=64: : REM block size
21200BLK%!20=BUAD% : REM buffer address
21210IF BULE%<=RDTS% THEN WE%=RDTS%:TX%=17 ELSE WE%=BULE%:TX%=18
21220IF RDTS%=0 THEN WE%=0:TX%=17
21230BLK%!24=WE% : REM #bytes written to buffer
21240SYS "Wimp_TransferBlock",THAND%,RTSB%+4+RATOF%,SDH%,BUAD%,BULE%
21250RDTS%-=WE%:RATOF%+=WE%
21260SYS "Wimp_SendMessage",TX%,BLK%,SDW%,SDI% : REM send RAM transmit
21270ENDPROC
21280
21290DEFPROCsaveok:A$=FNgi(0,6):IF INSTR(A$,".")=0 THEN PROCmessage(4,"To save, drag the icon to a directory viewer.")
21300REM ** SAVE ROUTINE HERE **
21310GOTO 21390
21320ENDPROC
21330
21340DEFPROCdragsave:SDW%=BLK%!20:SDI%=BLK%!24:SDX%=BLK%!28:SDY%=BLK%!32:A$=FNgetname
21350IF DRAG%=34 THEN GOTO 21420
21360PROCsi(0,6,A$)
21370IF MOUB%<>1 SYS "Wimp_CreateMenu",-1
21380BLK%!12=BLK%!8:BLK%!16=3:!BLK%=64:BLK%!20=SDW%:BLK%!24=SDI%:BLK%!28=SDX%:BLK%!32=SDY%:SYS "Wimp_SendMessage",17,BLK%,SDW%,SDI%
21390ENDPROC
21400
21410DEFPROCsavesetok:A$=FNgi(34,6):IF INSTR(A$,".")=0 THEN PROCmessage(4,"To save, drag the icon to a directory viewer.") ELSE GOTO 21450
21420PROCsi(34,6,A$):
21430IF MOUB%<>1 SYS "Wimp_CreateMenu",-1
21440BLK%!12=BLK%!8:BLK%!16=3:!BLK%=64:BLK%!20=SDW%:BLK%!24=SDI%:BLK%!28=SDX%:BLK%!32=SDY%:SYS "Wimp_SendMessage",17,BLK%,SDW%,SDI%
21450PROCsavesets(A$):ENDPROC
21460
21470DEFPROCsave(S$):PROCkillf:FUSE%=-1:
21480ENDPROC
21490
21500DEFFNnullstring(AD%):N$="":WHILE ?AD%>=32:N$=N$+CHR$(?AD%):AD%+=1:ENDWHILE:=N$
21510
21520DEFPROCspritesaveok:A$=FNgi(7,6):IF INSTR(A$,".")=0 THEN PROCmessage(4,"To save, drag the icon to a directory viewer.")
21530ENDPROC
21540
21550DEFFNgetname:W$="":P%=BLK%+44:WHILE ?P%<>0 AND ?P%<>13:W$=W$+CHR$(?P%):P%+=1:ENDWHILE:=W$
21560
21570DEFPROCdtloadset:A$=FNgetname:BLK%!12=BLK%!8:BLK%!16=4:!BLK%=64:SYS "Wimp_SendMessage",17,BLK%,BLK%!4:PROCsi(34,6,A$):PROCloadsets(A$):ENDPROC
21580
21590DEFPROCload(FT%)
21600A$=FNgetname:BLK%!12=BLK%!8:BLK%!16=4:!BLK%=64:SYS "Wimp_SendMessage",17,BLK%,BLK%!4
21610F%=OPENUP(A$):IF F%=0 THEN ENDPROC
21620T$=CHR$(BGET#F%)+CHR$(BGET#F%)+CHR$(BGET#F%):CLOSE#F%
21630IF T$="SET" THEN PROCsi(34,6,A$):PROCloadsets(A$):ENDPROC
21640PROCsi(0,6,A$)
21650ENDPROC
21660
21670DEFPROCqatload(S$):ENDPROC
21680
21690
21700DEFPROCloadpic(FT%,S$)
21710ENDPROC
21720
21730DEFPROCchars
21740VDU23,248,0,0,0,255,255,0,0,0:VDU23,249,0,0,126,255,255,126,0,0:VDU23,250,0,60,126,255,255,126,60,0:VDU23,251,60,126,255,255,255,255,126,60:VDU23,252,24,60,126,126,126,126,60,24:VDU23,253,24,60,60,60,60,60,60,24:VDU23,254,24,24,24,24,24,24,24,24
21750ENDPROC
21760
21770DEFPROCbackuppic:!VARS=PIC%:VARS!4=SPBUF%:A%=VARS:CALL backuppic:ENDPROC
21780
21790DEFPROCfillmask:VARS!8=SPBUF%:VARS!12=TRASP%:VARS!16=BTC%:A%=VARS:CALL fillmask:ENDPROC
21800
21810DEFFNleaf(F$)
21820IF INSTR(F$,".")=0 THEN =F$
21830T$=""
21840LP%=LENF$
21850WHILE MID$(F$,LP%,1)<>"."
21860T$=MID$(F$,LP%,1)+T$
21870LP%-=1
21880ENDWHILE
21890=T$
21900
21910DEFPROCspbuf(BS%)
21920IF BS%=0 THEN SYS "Wimp_SlotSize",CUSL%,-1:ENDPROC
21930SYS "Wimp_SlotSize",CUSL%+BS%,-1
21940SYS "Wimp_SlotSize",-1,-1 TO SPL%
21950IF SPL%<(CUSL%+BS%) THEN SYS "Wimp_SlotSize",CUSL%,-1:SPNE%=BS%:Q%=TRUE:ENDPROC ELSE Q%=FALSE
21960!SPBUF%=BS%
21970SPBUF%!8=16
21980SYS&2E,265,SPBUF%
21990SPSIZ%=BS%
22000ENDPROC
22010
22020DEFPROCspbuferr:PROCkillf:FUST%=-1:FUSE%=-1:PROCwindname(2,PIC$):PROCmessage(0,"No room to store sprite. ("+STR$(SPNE%)+" bytes needed)")
22030
22040DEFFNspritesize(DX%,DY%,PL%)
22050DX%=ABS(DX%) DIV 2:DY%=ABS(DY%) DIV 4
22060IF (DX% MOD 4)>0 THEN DX%=((DX% DIV 4)+1)*4
22070DX%+=16
22080=(DX%*DY%*(PL%+1))+1024
22090
22100DEFPROCkey
22110KWH%=!BLK%:KIC%=BLK%!4:KEY%=BLK%!24
22120POK%=TRUE
22130CASE KWH% OF
22140WHEN HAND%(5):PROCbruskey
22150WHEN HAND%(6):PROCgridkey
22160WHEN HAND%(8):PROCareakey
22170ENDCASE
22180IF POK% THEN PROChotkeys
22190IF POK% THEN SYS"Wimp_ProcessKey",KEY%
22200ENDPROC
22210
22220DEFPROCrotkey
22230ENDPROC
22240
22250DEFPROCtoolclick
22260ENDPROC
22270
22280DEFPROChotkeys
22290CASE KEY% OF
22300WHEN &181:POK%=FALSE:PROCopenpal
22310WHEN &183:POK%=FALSE:PROCopenwind(0)
22320WHEN &188:POK%=FALSE:PROCnf("Paintbrush",4,5):PROCtkh(10)
22330WHEN &189:POK%=FALSE:PROCnf("",-1,-1)
22340
22350WHEN &1CB:POK%=FALSE:IF LAOPWI%<>-1 THEN PROCopenwind(LAOPWI%)
22360
22370WHEN &198:POK%=FALSE:PROCnf("Wire ellipse",11,-1)
22380WHEN &199:POK%=FALSE:PROCnf("Wire parallelogram",13,-1):PROCtkh(17)
22390
22400WHEN &1DB:POK%=FALSE:PROCsi(6,19,"1"):PROCsi(6,21,"1"):PROCsi(6,23,"0"):PROCsi(6,25,"0"):MOUIC%=29:PROCgridclick
22410WHEN &1DC:POK%=FALSE:GRCO%=-1:PROCforcedrawmain
22420WHEN &1A1,&1A2,&1A3,&1A4:POK%=FALSE:PROCloadpic(&C11,"<Imagery$Dir>.XPIC"+STR$(KEY%-&1A0))
22430WHEN &1EA:POK%=FALSE:PROCnf("Solid sector",16,-1)
22440
22450ENDCASE
22460ENDPROC
22470
22480DEFPROCzoomtog
22490POI%!120=HAND%(2):SYS "Wimp_GetWindowState",,POI%+120
22500IF ZOOM%<>1 THEN
22510ZOOM%=1
22520ELSE
22530ZOOM%=VALFNgi(33,8):IF ZOOM%=0 THEN ZOOM%=1
22540ENDIF
22550!BLK%=HAND%(2):SYS "Wimp_CloseWindow",,BLK%
22560!BLK%=0:BLK%!4=-1023*ZOOM%:BLK%!8=1279*ZOOM%:BLK%!12=0:SYS "Wimp_SetExtent",HAND%(2),BLK%
22570!BLK%=HAND%(2):BLK%!4=WLX%:BLK%!8=WLY%:BLK%!12=WUX%:BLK%!16=WUY%:BLK%!20=WSX%:BLK%!24=WSY%:BLK%!28=POI%!148:SYS "Wimp_OpenWindow",,BLK%
22580WLX%=POI%!124:WLY%=POI%!128:WUX%=POI%!132:WUY%=POI%!136:WSX%=POI%!140:WSY%=POI%!144
22590PROCforcedrawmain:ENDPROC
22600
22610DEFPROCop1
22620ENDPROC
22630
22640DEFPROCairbkey
22650PROCicfb(4,17,19,19):PROCicfb(4,19,17,17)
22660ENDPROC
22670
22680DEFPROCbruskey
22690PROCicfb(5,23,24,19)
22700PROCicfb(5,24,20,23)
22710PROCicfb(5,20,19,24)
22720PROCicfb(5,19,23,20)
22730IF KIC%=19 AND KEY%=13 THEN POK%=FALSE:MOUIC%=26:PROCbrushclick
22740ENDPROC
22750
22760DEFPROCgridkey
22770PROCicfb(6,19,21,25)
22780PROCicfb(6,21,23,19)
22790PROCicfb(6,23,25,21)
22800PROCicfb(6,25,19,23)
22810IF KIC%=25 AND KEY%=13 THEN POK%=FALSE:MOUIC%=29:PROCgridclick
22820ENDPROC
22830
22840DEFPROCareakey
22850PROCicfb(8,17,18,20)
22860PROCicfb(8,18,19,17)
22870PROCicfb(8,19,20,18)
22880PROCicfb(8,20,17,19)
22890IF KIC%=20 AND KEY%=13 THEN POK%=FALSE:MOUIC%=16:PROCgrabclick
22900ENDPROC
22910
22920DEFPROCtextkey
22930ENDPROC
22940
22950DEFPROCframkey
22960PROCicfb(19,10,12,12)
22970PROCicfb(19,12,10,10)
22980IF KEY%=13 AND KIC%=12 THEN POK%=FALSE:MOUIC%=14:PROCframeclick
22990ENDPROC
23000
23010DEFPROCicfb(WH%,IC%,ICF%,ICB%)
23020IF KIC%=IC% AND (KEY%=&18E OR KEY%=13) THEN POK%=FALSE:PROCctic(WH%,ICF%):ENDPROC
23030IF KIC%=IC% AND KEY%=&18F THEN POK%=FALSE:PROCctic(WH%,ICB%)
23040ENDPROC
23050
23060DEFPROCctic(WH%,IC%):A$=FNgi(WH%,IC%):SYS "Wimp_SetCaretPosition",HAND%(WH%),IC%,,,-1,LEN(A$):ENDPROC
23070
23080DEFPROCpatch(PN%):IF LAPATCH%=PN% THEN ENDPROC
23090OSCLI("LOAD <Imagery$Dir>.Overlays."+STR$PN%+" "+STR$~(PATCH%-2))
23100LAPATCH%=PN%
23110ENDPROC
23120
23130DEFPROCzoomclick:IRP%=FNperc(33,8)
23140PROCarrows(33,5,6,8,1,25,1)
23150IF MOUIC%>24 AND MOUIC%<33 THEN PROCsi(33,8,STR$((MOUIC%-24)*2))
23160IGP%=FNperc(33,8):IF IRP%<>IGP% THEN ZOOMS%=IGP%*4:PROCgetslor(33,39):PROCredrawslid(33,11,IGP%*4)
23170IF MOUIC%=39 THEN ZOOMS%=FNslidhit(33,39,MOUX%,MOUY%,11,4)
23180IF MOUIC%<>42 THEN ENDPROC
23190ZOOM%=VAL(FNgi(33,8)):IF ZOOM%<1 THEN ZOOM%=1
23200PROCzoomsize:PROCforcedrawmain
23210IF MOUB%<>1 THEN PROCmenoff
23220ENDPROC
23230
23240DEFPROCredrawzoom
23250SYS "Wimp_RedrawWindow",,BLK% TO FIN%
23260WOX%=BLK%!4-BLK%!20:WOY%=(BLK%!16-BLK%!24)
23270WHILE FIN%:PROCslidplot(33,39,ZOOMS%,11):SYS "Wimp_GetRectangle",,BLK% TO FIN%:ENDWHILE
23280ENDPROC
23290
23300DEFPROCredrawrgb
23310SYS "Wimp_RedrawWindow",,BLK% TO FIN%
23320WOX%=BLK%!4-BLK%!20:WOY%=(BLK%!16-BLK%!24)
23330WHILE FIN%:PROCslidplot(21,30,RSL%,11):PROCslidplot(21,31,GSL%,10):PROCslidplot(21,32,BSL%,8):SYS "Wimp_GetRectangle",,BLK% TO FIN%:ENDWHILE
23340ENDPROC
23350
23360DEFPROCslidplot(WH%,IH%,V%,CO%)
23370!ICBLK%=HAND%(WH%):ICBLK%!4=IH%:SYS "Wimp_GetIconState",,ICBLK%
23380SYS "Wimp_SetColour",CO%
23390MX%=WOX%+(ICBLK%!8)+2:MY%=WOY%+(ICBLK%!12)+4
23400RECTANGLE FILL MX%,MY%,V%*2,15:IF V%<100 THEN SYS "Wimp_SetColour",1:RECTANGLE FILL MX%+(V%*2),MY%,(100-V%)*2,15
23410ENDPROC
23420
23430DEFFNslidhit(WH%,IH%,MX%,MY%,CO%,WE%)
23440PROCgetslor(WH%,IH%):MB%=4
23450REPEAT
23460MOUSE RECTANGLE WOX%-2,WOY%,202,14
23470V%=((MX%-(WOX%-2))DIV2):IF V%<0 THEN V%=0
23480IF V%>100 THEN V%=100
23490PROCgetslor(WH%,IH%):PROCredrawslid(WH%,CO%,V%)
23500PROCslidud(WE%,V%)
23510MOUSE MX%,MY%,MB%
23520UNTIL MB%=0
23530SYS "OS_ReadModeVariable",-1,4 TO ,,MX%:SYS "OS_ReadModeVariable",-1,5 TO ,,MY%:MX%=1<<MX%:MY%=1<<MY%
23540SYS "OS_ReadModeVariable",-1,11 TO ,,CO%:SYS "OS_ReadModeVariable",-1,12 TO ,,WE%
23550MOUSE RECTANGLE 0,0,CO%*MX%,WE%*MY%
23560=V%
23570
23580DEFPROCgetslor(WH%,IH%)
23590!ICBLK%=HAND%(WH%):SYS "Wimp_GetWindowState",,ICBLK%
23600WOX%=ICBLK%!4-ICBLK%!20:WOY%=(ICBLK%!16-ICBLK%!24)
23610!ICBLK%=HAND%(WH%):ICBLK%!4=IH%:SYS "Wimp_GetIconState",,ICBLK%
23620WOX%+=(ICBLK%!8)+2:WOY%+=(ICBLK%!12)+4
23630ENDPROC
23640
23650DEFPROCredrawslid(WH%,CO%,V%)
23660!ICBLK%=HAND%(WH%):ICBLK%!4=(ICBLK%!8)+2:ICBLK%!8=(ICBLK%!12)+4:ICBLK%!12=(ICBLK%!16)-2:ICBLK%!16=(ICBLK%!20)-4
23670SYS "Wimp_UpdateWindow",,ICBLK% TO FIN%
23680WHILE FIN%:SYS "Wimp_SetColour",CO%:RECTANGLE FILL WOX%,WOY%,V%*2,15:IF V%<100 THEN SYS "Wimp_SetColour",1:RECTANGLE FILL WOX%+(V%*2)+2,WOY%,(100-V%)*2,15
23690SYS "Wimp_GetRectangle",,ICBLK% TO FIN%:ENDWHILE
23700ENDPROC
23710
23720DEFPROCui(WH2%,IH2%,IT$)
23730PROCsi(WH2%,IH2%,IT$)
23740POI%!120=HAND%(WH2%):SYS "Wimp_GetWindowState",,POI%+120
23750WOX2%=POI%!124-POI%!140:WOY2%=(POI%!136-POI%!144)
23760POI%!120=HAND%(WH2%):POI%!124=IH2%:SYS "Wimp_GetIconState",,POI%+120
23770WOX2%+=(POI%!128)+2:WOY2%+=(POI%!132)+4
23780SYS "Wimp_UpdateWindow",,POI%+120 TO FIN%
23790WHILE FIN%:SYS "Wimp_GetRectangle",,POI%+120 TO FIN%:ENDWHILE
23800ENDPROC
23810
23820DEFPROCscreentowork(WE%, RETURN TX%,RETURN TY%)
23830POI%!128=WE%:SYS"Wimp_GetWindowState",,POI%+128
23840TX%=(TX%-(POI%!132))+(POI%!148)
23850TY%=(TY%-(POI%!144))+(POI%!152)
23860ENDPROC
23870
23880DEFPROCsavesets(IT$)
23890ENDPROC
23900
23910DEFPROCloadsets(IT$):IF NOT NOL% THEN PROCkillf:FUSE%=-1:PROCmenoff
23920IF UNDO%<>-1 THEN PROCdiundo
23930WE%=OPENIN(IT$):IF WE%=0 THEN PROCmessage(2,"Could not load settings")
23940IT$=GET$#WE%
23950FORL%=0 TO 15:FORK%=0 TO 1:FORI%=0 TO 4:INPUT#WE%,GRFI%(L%,K%,I%):NEXT:NEXT:NEXT
23960SYS "OS_GBPB",4,WE%,BRUSH%,13000
23970SYS "OS_GBPB",4,WE%,TRASP%,256
23980SYS "OS_GBPB",4,WE%,PFILLS%,7000
23990INPUT#WE%,GRLO%,KUKE%,KSC%,UNDO%,GRCO%,PALE%,TX%,GRIWI%,GRIHE%,GRBX%,GRBY%,F$:PROCsi(30,27,F$)
24000PROCsi(10,48,STR$(TX%)):FORL%=1 TO TX%:PROCclearicon(10,FNlipaadj(L%+6)):NEXT:IF TX%<40 THEN FORL%=TX%+1 TO 40:PROCshadeicon(10,FNlipaadj(L%+6)):NEXT
24010FORL%=0 TO 39:INPUT#WE%,TX%:IF TX% THEN PROCiconhi(10,FNlipaadj(L%+7)) ELSE PROCiconlo(10,FNlipaadj(L%+7))
24020NEXT
24030FORL%=0 TO 5:INPUT#WE%,PAT%(L%):NEXT
24040FORL%=0 TO 8:FORK%=0 TO 4:INPUT#WE%,ECF%(L%,K%):NEXT:NEXT
24050CLOSE#WE%:IF UNDO%<>-1 THEN PROCenundo
24060PROCbuildiconmenu:PROCbuildmm2
24070IF NOT NOL% THEN PROCforcedrawmain
24080ENDPROC
24090
24100DEFPROCtkh(IC%):TKH%=IC%:PROCiconhi(32,IC%):ENDPROC
24110
24120REM ---------------
� ><Imagery$Dir>.!RunImage
�=�P+&1000:PATCH%=�P
� � �makerr
(:
2� LF$=""
<
�setup
F.NOL%=�:�loadsets("<Imagery$Dir>.Defaults")
P>NOL%=�:�ed_bru:!BLK%=HAND%(12):ș "Wimp_CloseWindow",,BLK%
Z�action
d�die
n�
x��setup:LEGO%=�:TKH%=-1
��MESI%=5*1024:� POI% 256,TAS% 3000,MENU% MESI%,MENUIND% MESI%,SEL% 256,ICBLK% 256,VARS 128,MENALO% 16,CODE% 7*1024,IO% 256,TRANSTAB% 256,RGBG% 192,MENAD% 256
�BLK%=TAS%+2000
�
�lș "OS_ReadVarVal","Imagery$File",IO%,256,0,0 � ,,K%:L%=0:LF$="":ȕ K%>0:LF$=LF$+�(IO%?L%):L%+=1:K%-=1:�
�
� �L%=0 � 188 � 4:RGBG%!L%=0:�
�&MEOF%=0:MEIN%=0:MBUS%=�:LAOPWI%=-1
�$MENALO%="A -~"
�FTL%=�:LAPATCH%=-1
�B� PIC% 161*1024,SCALE% 32,PIXTAB% 256,PIXTAB2% 256,X%(8),Y%(8)
�6SPBUF%=�:SPSIZ%=0:ș "Wimp_SlotSize",-1,-1 � CUSL%
�� PAL% 22600,OPAL% 22600,SHOW% 10240,PALTAB% 512,BTC% 256,CTT% 256,TTB% 256,ROTTAB% 1800,RAND% 4096,PFILLS% 7000:!PAL%=22600:!OPAL%=22600:!PFILLS%=7000:!SHOW%=10240
� � BRUSH% 13000:!BRUSH%=13000
,ș&2E,266,BRUSH%,"<Imagery$Dir>.Brushes"
*ș&2E,266,PAL%,"<Imagery$Dir>.Palette"
+ș&2E,266,OPAL%,"<Imagery$Dir>.Palette"
".ș&2E,266,PFILLS%,"<Imagery$Dir>.PatFills"
,(ș&2E,266,SHOW%,"<Imagery$Dir>.Show"
6-�("LOAD <Imagery$Dir>.PalTab "+�~PALTAB%)
@5�("LOAD <Imagery$Dir>.BTC "+�~BTC%):� byte -> pal
J5�("LOAD <Imagery$Dir>.CTT "+�~CTT%):� pal -> byte
T>�("LOAD <Imagery$Dir>.TTB "+�~TTB%):� (col*64)+tint -> pal
^-�("LOAD <Imagery$Dir>.RotTab "+�~ROTTAB%)
h)�("LOAD <Imagery$Dir>.Code "+�~CODE%)
r-�("LOAD <Imagery$Dir>.RotTab "+�~ROTTAB%)
|/COL%=255:FUSE%=-1:FUST%=-1:FUCO%=0:BUTDO%=�
�B$TAS%="TASK":ș"Wimp_Initialise",200,!TAS%,"Imagery" � ,THAND%
��loadsprites
�
�loadvars
�B!BLK%=-1:BLK%!4=0:BLK%!8=0:BLK%!12=64:BLK%!16=64:BLK%!20=&2102
�<� BLK%!24 10:$(BLK%!24)="!TinyImage":BLK%!28=1:BLK%!32=8
�(ș "Wimp_CreateIcon",,BLK% � ICHAND%
�NOWIND%=34:NOMENS%=20
�-� STORE% 15*1024,BUF% 5048,HAND%(NOWIND%)
�SOF%=STORE%
�� Save,Info,Main,Palette,Airbrush,Brushes,Grid,SpriteSave,Area,Help,Linepat,Fillpat,EdBrush,EdFill,Text,Tback,FontParams,FillCont,ColRep,Frame,Pfills,RGBcont,Greyscale,Pixelate,Rotate,Colscale,Contrast,Posterise,RGBgraph,Filter,Wobble,Import,Toolkit
�� Zoom,SetSave
�
� �d`A
�:ș "Wimp_OpenTemplate",,"<Imagery$Dir>.Templates":K%=0
�:� A$:$IO%=A$
Hș "Wimp_LoadTemplate",,BUF%,SOF%,STORE%+(15*1024),-1,IO%,0 � ,,SOF%
� K%=2 � BUF%?35=&FF
&,ș "Wimp_CreateWindow",,BUF% � HAND%(K%)
0K%+=1:� K%>NOWIND%
:ș "Wimp_CloseTemplate"
D#�L%=15 � 46:�shadeicon(10,L%):�
N�si(13,83,"16")
X�23,6,0|
b�systemvars
l
�chars
v�loadfonts
�@�L%=0 � NOMENS%:!�mad(L%)=-1:�:�buildmainmenu:�buildiconmenu
�LWG%=-1:LIG%=-1
�5WLX%=0:WLY%=300:WUX%=1279:WUY%=1023:WSX%=0:WSY%=0
�EDTY%=0:EFCOL%=255
��
�
� ݤmad(MAD%):=MENAD%+(MAD%*4)
�!ݤcmad(MAD%):=MENAD%!(MAD%*4)
�
���systemvars
�0!PIC%=161*1024:PIC%!4=0:PIC%!8=24:PIC%!12=24
�&ș &2E,271,PIC%,"PIC",0,640,256,15
�PIC$="<Untitled>"
ESM%=-1:EPM%=-1
?GRCO%=-1:GRTI%=-1:GRLO%=�:GRIWI%=1:GRIHE%=1:GRBX%=0:GRBY%=0
3GRXM%=1:GRXD%=1:GRYM%=1:GRYD%=1:GRFX%=�:GRFY%=�
ZOOM%=1:ZOOMS%=1
*#USE%=0:LITY%=5:GRMA%=�:UNDO%=-1
4� PAT%(5):PAT%()=0:PALE%=8
>� ECF%(8,4):ECF%()=0:ROT%=0
H� GRFI%(15,1,4):GRFI%()=0
R0FIFC%=63:FIFT%=192:FILC%=3:FILT%=192:FILR%=0
\ IP%=�
f(SELBR%=1:BXM%=1:BXD%=1:BYM%=1:BYD%=1
pEDBR%=1:IDRAG%=�:CPF%=1
zV� LF$<>"" � �qatload(LF$):PIC$=�leaf(LF$):�si(0,6,LF$):�openmain:�windname(2,PIC$)
�� TRASP% 256, REPS% 256
��L%=0 � 255:REPS%?L%=L%:�
�!�L%=0 � 252 � 4:TRASP%!L%=0:�
�$� FONTT$(64):FONTA%=-1:FONTO%=-1
�FONTB%=0:SREP%=255
�8MMX%=1:MMY%=1:MOP%=�:KUKE%=�:KUKD%=0:KUKL%=-1:KSC%=�
�RSL%=100:GSL%=100:BSL%=100
��
�
���loadvars
�F%=�("<Imagery$Dir>.Vars")
���#F%,backuppic,fillmask,getpicbyte,getbrushbyte,setpicbyte,pixaverage,tintarea,averagebrush,tintbrush,findchangebox,graduatedfill,colrep,patfill,rgbcont,greyscale,rotate,transarea,rgbgraph,filter,wobble
��#F%
�backuppic+=CODE%:fillmask+=CODE%:getpicbyte+=CODE%:getbrushbyte+=CODE%:setpicbyte+=CODE%:pixaverage+=CODE%:tintarea+=CODE%:averagebrush+=CODE%:tintbrush+=CODE%:findchangebox+=CODE%:graduatedfill+=CODE%:colrep+=CODE%
}patfill+=CODE%:rgbcont+=CODE%:greyscale+=CODE%:rotate+=CODE%:transarea+=CODE%:rgbgraph+=CODE%:filter+=CODE%:wobble+=CODE%
�
$
.��loadfonts
8FONTS%=0:�
B
L��loadsprites
V�
`
j5��action:ș "Wimp_ForceRedraw",-1,0,0,&3000,&3000
t
~�
� �poll
�'� (REAS%=17 � REAS%=18) � BLK%!16=0
��
�
���die:OP%=0:�spbuf(0)
�3�L%=1 � 4:�("*REMOVE <Imagery$Dir>.XPIC"+�L%):�
�$ș "Wimp_CloseDown",THAND%,!TAS%
��
��
�
�
��poll
�"ș "Wimp_GetPointerInfo",,BLK%
!� BLK%!12<>HAND%(2) � MBUS%=�
!BLK%=%10011111110000110000
!ș "Wimp_Poll",0,BLK% � REAS%
� REAS%>-1 � �act
(�
2 ��act
<Ȏ REAS% �
F� 0:�kuke:�picpoll
P� 1:�redraw
Z� 2:�opmain
d� 3:�clmain
n� 6:�mouse
x� 7:�dragfin
�� 8:�key
�
� 9:�menu
�� 17,18:�inmessage(BLK%!16)
��
��
�
���kuke:� � KUKE% � �
�KULI%=10
�ȗ MX%,MY%,MH%:KP%=�
�� � �(-58) � �TDF
�8� KUKL%<>-58 � KUKL%=-58:KUKD%=0:MY%+=4:KP%=�:� �TDF
�)KUKD%+=1:� KUKD%<KULI% � KP%=�:� �TDF
�KUKD%=KULI%:MY%+=4:KP%=�
� � �(-42) � �TlF
8� KUKL%<>-58 � KUKL%=-58:KUKD%=0:MY%-=4:KP%=�:� �TlF
)KUKD%+=1:� KUKD%<KULI% � KP%=�:� �TlF
"KUKD%=KULI%:MY%-=4:KP%=�
,� � �(-26) � �DTF
68� KUKL%<>-58 � KUKL%=-58:KUKD%=0:MX%-=2:KP%=�:� �DTF
@)KUKD%+=1:� KUKD%<KULI% � KP%=�:� �DTF
JKUKD%=KULI%:MX%-=2:KP%=�
T� � �(-122) � �D|F
^8� KUKL%<>-58 � KUKL%=-58:KUKD%=0:MX%+=2:KP%=�:� �D|F
h)KUKD%+=1:� KUKD%<KULI% � KP%=�:� �D|F
rKUKD%=KULI%:MX%+=2:KP%=�
|� � KP% � KUKL%=-1:KUKD%=0
�ȗ � MX%,MY%
��
�
���redraw
�Ȏ !BLK% �
�� HAND%(2):�redrawmain
�� HAND%(3):�redrawpal
�� HAND%(5):�redrawbrush
�� HAND%(11):�redrawpat
�� HAND%(12):�redrawedbru
�� HAND%(13):�redrawfill
�� HAND%(15):�redrawtback
�� HAND%(18):�redrawcolrep
� HAND%(20):�redrawpatfill
0� HAND%(26),HAND%(27),HAND%(28):�redrawgraph
� HAND%(33):�redrawzoom
&� HAND%(21):�redrawrgb
0� HAND%(30):�redrawwob
:�
D�
N
X��redrawwob
b'ș "Wimp_RedrawWindow",,BLK% � FIN%
l�getrdor(564)
v`ȕ FIN%:�plot256sprite(SHOW%,"SHOW",WOX%+64,WOY%+16):ș "Wimp_GetRectangle",,BLK% � FIN%:�:�
�
�C��forcedrawwob:ș "Wimp_ForceRedraw",HAND%(30),0,-564,480,220:�
�
���redrawbrush
�'ș "Wimp_RedrawWindow",,BLK% � FIN%
��getrdor(260)
�<ȕ FIN%:�plotbrushes:ș "Wimp_GetRectangle",,BLK% � FIN%
��
��
�
���redrawedbru
�'ș "Wimp_RedrawWindow",,BLK% � FIN%
��getrdor(640+(EDTY%*260))
:ȕ FIN%:�plotedbru:ș "Wimp_GetRectangle",,BLK% � FIN%
�
�
*��redrawpatfill
4'ș "Wimp_RedrawWindow",,BLK% � FIN%
>�getrdor(108)
H<ȕ FIN%:�plotpatfill:ș "Wimp_GetRectangle",,BLK% � FIN%
R�
\�
f
pF��forcedrawpatfill:ș "Wimp_ForceRedraw",HAND%(20),0,-108,1100,0:�
z
�%��forcedrawedbru(x1%,y1%,x2%,y2%)
�!BLK%=HAND%(12)
�BLK%!4=x1%
�BLK%!8=y1%
�BLK%!12=x2%
�BLK%!16=y2%
�'ș "Wimp_UpdateWindow",,BLK% � FIN%
��getrdor(640+(EDTY%*260))
�ȕ FIN%
��plotedbru
�'ș "Wimp_GetRectangle",,BLK% � FIN%
��
��
��forcedrawbrush
!BLK%=HAND%(5)
$BLK%!4=0
.BLK%!8=-260
8BLK%!12=384
B
BLK%!16=0
L'ș "Wimp_UpdateWindow",,BLK% � FIN%
V�getrdor(260)
`ȕ FIN%
j�plotbrushes
t'ș "Wimp_GetRectangle",,BLK% � FIN%
~�
��
�
�(��plot256sprite(SPA%,SPI$,POX%,POY%)
�� �<>15 � � �tzI
�Z!SCALE%=1:SCALE%!4=1:SCALE%!8=1:SCALE%!12=1:ș "OS_SpriteOp",290,SPA%,SPI$,POX%,POY%:�
�9� �<>ESM% � ESM%=�:EPM%=�:ș&40740,15,0,-1,-1,PIXTAB%
�ș&35,-1,5 � ,,E%
�)SX%=2^(2-E%):SCALE%!4=SX%:SCALE%!12=1
�ș&35,-1,4 � ,,E%
�V� E%<1 � SX%=2^(1-E%):!SCALE%=SX%:SCALE%!8=1 � SX%=2^(E%-1):!SCALE%=1:SCALE%!8=SX%
�=ș "OS_SpriteOp",308,SPA%,SPI$,POX%,POY%,0,SCALE%,PIXTAB%
��
��plotpatfill
��L%=1 � 12:�plot256sprite(PFILLS%,�L%,WOX%+((L%-1)*84)+24,WOY%+12):� CPF%=L% � �col(0,0,0):ȓ WOX%+((CPF%-1)*84)+16,WOY%+4,78,76:ȓ WOX%+((CPF%-1)*84)+18,WOY%+4,74,76
�
(�
2
<��plotbrushes
F�L%=1 � 12
PDBLK%!400=HAND%(5):BLK%!404=L%-1:ș "Wimp_GetIconState",,BLK%+400
ZH�plot256sprite(BRUSH%,�L%,WOX%+(BLK%!408)+2,WOY%+(260+(BLK%!412))+4)
dV� SELBR%=L% � �col(48,192,3):ȓ Ȑ WOX%+(BLK%!408)+2,WOY%+(260+(BLK%!412))+4,64,60
n�
x�
�
���plotedbru
�(� EDTY%=0 � WE%=BRUSH% � WE%=PFILLS%
�7�plot256sprite(WE%,"1",WOX%+32,WOY%+20+(EDTY%*260))
�-� EDBR%<>1 � �col(0,0,0) � �col(63,192,0)
�Pȓ Ȑ WOX%+32,WOY%+4+(EDTY%*260),64,8:ȓ Ȑ WOX%+32,WOY%+86+(EDTY%*260),64,8
�-� WOY%+108+(EDTY%*260)<(BLK%!32) � � �TDK
��L%=2 � 12
�H� BLK%!400=HAND%(12):BLK%!404=L%-1:SYS "Wimp_GetIconState",,BLK%+400
�C�plot256sprite(WE%,�L%,WOX%+((L%-1)*64)+32,WOY%+20+(EDTY%*260))
�.� EDBR%<>L% � �col(0,0,0) � �col(63,192,0)
�hȓ Ȑ WOX%+((L%-1)*64)+32,WOY%+4+(EDTY%*260),64,8:ȓ Ȑ WOX%+((L%-1)*64)+32,WOY%+86+(EDTY%*260),64,8
��
.!SCALE%=(!SCALE%)*12:SCALE%!4=(SCALE%!4)*8
-� WOY%+108+(EDTY%*260)>(BLK%!40) � � �TlK
�� �<>15 � ș "OS_SpriteOp",308,WE%,�EDBR%,WOX%+28,WOY%+112+(EDTY%*260),0,SCALE%,PIXTAB% � ș "OS_SpriteOp",308,WE%,�EDBR%,WOX%+28,WOY%+112+(EDTY%*260),0,SCALE%
"�EX%=WOX%+28:EY%=WOY%+112+(EDTY%*260):�col(21,192,0):�L%=0 � 32:� EX%+(L%*24),EY%,EX%+(L%*24),EY%+512:�:�L%=0 � 16:� EX%,EY%+(L%*32),EX%+768,EY%+(L%*32):�
,�� EDTY%=1 � WOX%+=32:WOY%+=16:�plotpal(OPAL%):�col(63,192,0):ȓ WOX%+((EFCOL% � 32)*24),WOY%+((EFCOL% � 32)*28),24,28:WOX%-=32:WOY%-=16
6�
@
J��forcedrawmain
T!BLK%=HAND%(2)
^BLK%!4=0
hBLK%!8=-1024*ZOOM%
rBLK%!12=1280*ZOOM%
|
BLK%!16=0
�'ș "Wimp_UpdateWindow",,BLK% � FIN%
��getrdor(1024*ZOOM%)
�ȕ FIN%
��plotpic
�'ș "Wimp_GetRectangle",,BLK% � FIN%
��
��
�
�!��quickdrawmain:� � VACB% � �
�!BLK%=HAND%(2)
�BLK%!4=CBMINX%
�BLK%!8=CBMINY%
�BLK%!12=CBMAXX%
BLK%!16=CBMAXY%
'ș "Wimp_UpdateWindow",,BLK% � FIN%
�getrdor(1024*ZOOM%)
&ȕ FIN%
0�plotpic
:'ș "Wimp_GetRectangle",,BLK% � FIN%
D�
N�
X
b��inpic:� IP% � �
l IP%=�
v1ș "OS_SpriteOp",316,PIC%,"PIC" � V1,V2,V3,V4
�ș "OS_ChangedBox",2
�ș "OS_ChangedBox",1
�8� GCOL3,63:LINE 300,300,320,320:LINE 300,300,320,320
�%�23,6:�L%=1 � 5:� PAT%(L%):�:� 0|
�ș6,163,242,PALE%
��
�
�<��inpicR:ș "OS_SpriteOp",316,PIC%,"PIC" � B1,B2,B3,B4:�
�
�@��inbackup:ș "OS_SpriteOp",316,SPBUF%,"PIC" � B1,B2,B3,B4:�
�
�F��insprite(ma%,sa%,sn$):ș &2E,316+ma%,sa%,sn$ � IS1,IS2,IS3,IS4:�
�
(��outsprite:ș &2E,IS1,IS2,IS3,IS4:�
.��outbackup:ș "OS_SpriteOp",B1,B2,B3,B4:�
*��outpic:� � IP% � �
4 IP%=�
>!ș "OS_ChangedBox",-1 � ,CBA%
H�� �(CBA%!4)=-1 � �(CBA%!8)=-1 � �(CBA%!12)=-1 � �(CBA%!16)=-1 � VACB%=�:ș "OS_ChangedBox":ș "OS_SpriteOp",V1,V2,V3,V4:� � VACB%=�
R*CBMINX%=CBA%!4:CBMINX%=CBMINX%*ZOOM%*2
\4CBMINY%=CBA%!8:CBMINY%=(-1024+(CBMINY%*4))*ZOOM%
f+CBMAXX%=CBA%!12:CBMAXX%=CBMAXX%*ZOOM%*2
p5CBMAXY%=CBA%!16:CBMAXY%=(-1024+(CBMAXY%*4))*ZOOM%
zCBMAXX%+=4*ZOOM%
�CBMAXY%+=4*ZOOM%
�ș "OS_ChangedBox"
� ș "OS_SpriteOp",V1,V2,V3,V4
��
�
���redrawmain
�� FUSE%=32 �
�� FONT%<>0 � EFM%<>-1 �
�n� IF MODE<>EFM% THEN PROCinpic:SYS "ColourTrans_SetFontColours",FHAND%,BPAL%,FPAL%,14:PROCoutpic:EFM%=MODE
��
��
�'ș "Wimp_RedrawWindow",,BLK% � FIN%
��getrdor(1024*ZOOM%)
8ȕ FIN%:�plotpic:ș "Wimp_GetRectangle",,BLK% � FIN%
�
�
$
.
��plotpic
8H� �=15 � ZOOM%=1 � ș "OS_SpriteOp",290,PIC%,"PIC",WOX%,WOY%:�grid:�
B9� �<>ESM% � ESM%=�:EPM%=�:ș&40740,15,0,-1,-1,PIXTAB%
Lș&35,-1,5 � ,,E%
V)SX%=2^(2-E%):SCALE%!4=SX%:SCALE%!12=1
`ș&35,-1,4 � ,,E%
jV� E%<1 � SX%=2^(1-E%):!SCALE%=SX%:SCALE%!8=1 � SX%=2^(E%-1):!SCALE%=1:SCALE%!8=SX%
t5!SCALE%=(!SCALE%)*ZOOM%:SCALE%!4=(SCALE%!4)*ZOOM%
~*� �=15 � TPIXTAB%=0 � TPIXTAB%=PIXTAB%
�Gș "OS_SpriteOp",308,PIC%,"PIC",WOX%,WOY%,0,SCALE%,TPIXTAB%:�grid:�
�
�
��grid
�>� GRCO%=-1 � (2*GRIWI%*ZOOM%)<16 � (4*GRIHE%*ZOOM%)<16 � �
��gridcol
�� X%,Y%
�?X%=(((BLK%!28)-WOX%) � (ZOOM%*(2*GRIWI%)))*(2*GRIWI%*ZOOM%)
�?Y%=(((BLK%!32)-WOY%) � (ZOOM%*(4*GRIHE%)))*(4*GRIHE%*ZOOM%)
�XOF%=(GRIWI%-GRBX%)*2*ZOOM%
�YOF%=(GRIHE%-GRBY%)*4*ZOOM%
�X%+=WOX%-XOF%
�Y%+=WOY%-YOF%
E�:� X%,(BLK%!32),X%,(BLK%!40):X%+=(2*GRIWI%*ZOOM%):� X%>(BLK%!36)
E�:� (BLK%!28),Y%,(BLK%!36),Y%:Y%+=(4*GRIHE%*ZOOM%):� Y%>(BLK%!40)
�
(��plotpal(PTU%)
2�col(63,192,0)
<� �<>15 � � �DZO
Ftș "OS_SpriteOp",290,PTU%,"Palette",WOX%,WOY%:� PTU%=PAL% � ȓ WOX%+((COL% � 32)*24),WOY%+((COL% � 32)*28),24,28
P�
Z9� �<>EPM% � ESM%=�:EPM%=�:ș&40740,15,0,-1,-1,PIXTAB%
dș&35,-1,5 � ,,E%
n)SX%=2^(2-E%):SCALE%!4=SX%:SCALE%!12=1
xș&35,-1,4 � ,,E%
�V� E%<1 � SX%=2^(1-E%):!SCALE%=SX%:SCALE%!8=1 � SX%=2^(E%-1):!SCALE%=1:SCALE%!8=SX%
�Bș "OS_SpriteOp",308,PTU%,"Palette",WOX%,WOY%,0,SCALE%,PIXTAB%
�F� PTU%=PAL% � ȓ WOX%+((COL% � 32)*24),WOY%+((COL% � 32)*28),24,28
��
�
�?��inpal:ș "OS_SpriteOp",316,PAL%,"Palette" � V1,V2,V3,V4:�
�
�+��outpal:ș "OS_SpriteOp",V1,V2,V3,V4:�
�
���trasp(TC%)
��inpal:�trasp2(TC%):�outpal
��
�
��trasp2(TC%)
TRASP%?TC%=(TRASP%?TC%) � 1
+TX%=((TC% � 32)*24):TY%=((TC% � 32)*28)
"�� IF (TRASP%?TC%)=0 THEN GCOL0,PALTAB%?(TC%*2) TINT PALTAB%?((TC%*2)+1) ELSE PROCanticol(PALTAB%?(TC%*2),PALTAB%?((TC%*2)+1),0)
,q� (TRASP%?TC%)=0 � �0,PALTAB%?(TC%*2) Ȝ PALTAB%?((TC%*2)+1) � �0,63-(PALTAB%?(TC%*2)) Ȝ PALTAB%?((TC%*2)+1)
6=� TX%+6,TY%+20,TX%+18,TY%+20:� TX%+12,TY%+8,TX%+12,TY%+20
@�
J
T��redrawpal
^'ș "Wimp_RedrawWindow",,BLK% � FIN%
h�getrdor(228)
r>ȕ FIN%:�plotpal(PAL%):ș "Wimp_GetRectangle",,BLK% � FIN%
|�
��
�
���redrawtback
�'ș "Wimp_RedrawWindow",,BLK% � FIN%
��getrdor(228)
�ȕ FIN%:�plotpal(OPAL%)
�K�col(63,192,0):ȓ WOX%+((FONTB% � 32)*24),WOY%+((FONTB% � 32)*28),24,28
�'ș "Wimp_GetRectangle",,BLK% � FIN%
��
��
�
���redrawcolrep
�'ș "Wimp_RedrawWindow",,BLK% � FIN%
�getrdor(556)
^ȕ FIN%:WOY%+=290:�plotpal(SPBUF%):�col(0,0,0):� WOX%,WOY%+224,WOX%+770,WOY%+224:WOY%-=290
A�plotpal(OPAL%):�col(0,0,0):� WOX%,WOY%+224,WOX%+770,WOY%+224
&M�col(63,192,0):ȓ WOX%+((SREP% � 32)*24),WOY%+290+((SREP% � 32)*28),24,28
0'ș "Wimp_GetRectangle",,BLK% � FIN%
:�
D�
N
X��forcedrawcolrep
b!BLK%=HAND%(18)
lBLK%!4=0
vBLK%!8=-556
�BLK%!12=770
�
BLK%!16=0
�'ș "Wimp_UpdateWindow",,BLK% � FIN%
��getrdor(556)
�ȕ FIN%
�VWOY%+=290:�plotpal(SPBUF%):�col(0,0,0):� WOX%,WOY%+224,WOX%+770,WOY%+224:WOY%-=290
�A�plotpal(OPAL%):�col(0,0,0):� WOX%,WOY%+224,WOX%+770,WOY%+224
�M�col(63,192,0):ȓ WOX%+((SREP% � 32)*24),WOY%+290+((SREP% � 32)*28),24,28
�'ș "Wimp_GetRectangle",,BLK% � FIN%
��
��
�
�
ݤcecf
� �high(11,26) � =1
� �high(11,28) � =2
� �high(11,30) � =3
� �high(11,32) � =4
*=0
4
>��redrawpat
H'ș "Wimp_RedrawWindow",,BLK% � FIN%
R
�getpator
\Iȕ FIN%:�plotpal(OPAL%):�col(0,0,0):� WOX%,WOY%+224,WOX%+770,WOY%+224
f-CECF%=�cecf:�K%=0 � 7:L%=ECF%(K%+1,CECF%)
pcPE%=BTC%?L%:�col(PALTAB%?(PE%*2),PALTAB%?((PE%*2)+1),0):ȓ Ȑ WOX%-146,(WOY%+276)-(K%*40),38,36
z�
�'ș "Wimp_GetRectangle",,BLK% � FIN%
��
��
�
�ݤgrafilno
�� �high(13,95) � =0
�� �high(13,99) � =1
�� �high(13,101) � =2
�� �high(13,103) � =3
�� �high(13,97) � =4
�=-1
�
���redrawfill
'ș "Wimp_RedrawWindow",,BLK% � FIN%
�getrdor(484)
qȕ FIN%:WOY%+=236:WOX%+=422:�plotpal(OPAL%):�col(0,0,0):� WOX%,WOY%+224,WOX%+770,WOY%+224:WOX%-=140:WOY%-=140
$xFIX%=WOX%+200:GRFIN%=�grafilno:�L%=0 � 15:� GRFIN%<>-1 � �col(GRFI%(L%,0,GRFIN%),GRFI%(L%,1,GRFIN%),0) � �col(0,0,0)
.'ȓ Ȑ FIX%,WOY%-28,42,32:FIX%+=44:�
8:WOX%-=282:WOY%-=96:ș "Wimp_GetRectangle",,BLK% � FIN%
B�
L�
V
`��forcedrawfill
j!BLK%=HAND%(13)
tBLK%!4=0
~BLK%!8=-500
�BLK%!12=1200
�BLK%!16=-360
�'ș "Wimp_UpdateWindow",,BLK% � FIN%
��getrdor(484)
�ȕ FIN%
�xFIX%=WOX%+482:GRFIN%=�grafilno:�L%=0 � 15:� GRFIN%<>-1 � �col(GRFI%(L%,0,GRFIN%),GRFI%(L%,1,GRFIN%),0) � �col(0,0,0)
�'ȓ Ȑ FIX%,WOY%+68,42,32:FIX%+=44:�
�'ș "Wimp_GetRectangle",,BLK% � FIN%
��
��
�
���forcedrawpat
!BLK%=HAND%(11)
BLK%!4=0
BLK%!8=-356
BLK%!12=100
(
BLK%!16=0
2'ș "Wimp_UpdateWindow",,BLK% � FIN%
<
�getpator
Fȕ FIN%
PA�plotpal(OPAL%):�col(0,0,0):� WOX%,WOY%+224,WOX%+770,WOY%+224
ZCECF%=�cecf
d� RK%=0 � 7
nL%=ECF%(RK%+1,CECF%)
xdPE%=BTC%?L%:�col(PALTAB%?(PE%*2),PALTAB%?((PE%*2)+1),0):ȓ Ȑ WOX%-146,(WOY%+276)-(RK%*40),38,36
�,ȓ Ȑ WOX%-146,(WOY%+276)-(RK%*40),38,36
��
�'ș "Wimp_GetRectangle",,BLK% � FIN%
��
��
�
�&ݤctb(co%,ti%):by%=-1:�L%=0 to 255
�
���drawpicinit
�!BLK%=HAND%(2)
�BLK%!4=0
�BLK%!8=-936
�BLK%!12=1236
BLK%!16=0
'ș "Wimp_UpdateWindow",,BLK% � FIN%
�getrdor(1024*ZOOM%)
"�
,
6��forcedrawpal(PTU%)
@!BLK%=HAND%(3)
JBLK%!4=0
TBLK%!8=-228
^BLK%!12=770
h
BLK%!16=0
r'ș "Wimp_UpdateWindow",,BLK% � FIN%
|�getrdor(228)
�ȕ FIN%
��plotpal(PTU%)
�'ș "Wimp_GetRectangle",,BLK% � FIN%
��
��
�
���forcedrawtback
�!BLK%=HAND%(15)
�BLK%!4=0
�BLK%!8=-228
�BLK%!12=770
�
BLK%!16=0
�'ș "Wimp_UpdateWindow",,BLK% � FIN%
�getrdor(228)
ȕ FIN%
�plotpal(OPAL%)
&K�col(63,192,0):ȓ WOX%+((FONTB% � 32)*24),WOY%+((FONTB% � 32)*28),24,28
0'ș "Wimp_GetRectangle",,BLK% � FIN%
:�
D�
N
X��forcedrawgraph(WH%)
b!BLK%=HAND%(WH%)
l>BLK%!4=0:BLK%!8=-300:� WH%<>28 � BLK%!12=300 � BLK%!12=900
v
BLK%!16=0
�3ș "Wimp_UpdateWindow",,BLK% � FIN%:�getgraphor
�>ȕ FIN%:�drawgraph:ș "Wimp_GetRectangle",,BLK% � FIN%:�:�
�
���redrawgraph
�'ș "Wimp_RedrawWindow",,BLK% � FIN%
��getgraphor
�>ȕ FIN%:�drawgraph:ș "Wimp_GetRectangle",,BLK% � FIN%:�:�
�
���getgraphor
�WOX%=(BLK%!4-BLK%!20)+44
�WOY%=(BLK%!16-BLK%!24)-256
��
�
��drawgraph
n�col(63,192,0):ȓ Ȑ WOX%+2,WOY%+4,252,248:�col(0,0,0):� WOX%,WOY%,WOX%,WOY%+252:� WOX%,WOY%,WOX%+254,WOY%
Ȏ FUSE% �
�� 43:CONL%=��gi(26,18):CONH%=��gi(26,20):� CONL%<CONH% � �4,WOX%+CONL%*17,WOY%:�5,WOX%+CONH%*17,WOY%+252 � �4,WOX%+CONH%*17,WOY%+252:�5,WOX%+CONL%*17,WOY%
*;� 44:POL%=��gi(27,22):POH%=��gi(27,24):PON%=��gi(27,26)
4oSTWI=PON%/16:STHE=(POH%-POL%)/(PON%-1):�L%=0 � 15:BH%=POL%+(�(STWI*L%)*STHE):ȓ WOX%+(L%*16),WOY%,16,BH%*17
>�
H�
R�
\
f��getpator
pWOX%=(BLK%!4-BLK%!20)+180
zWOY%=(BLK%!16-BLK%!24)-340
��
�
�
��picpoll
�"ș "Wimp_GetPointerInfo",,BLK%
�%� MBUS% � BLK%!8<>0 � � � MBUS%=�
� � BLK%!8=0 � LEGO% � LEGO%=�
�"� BLK%!8<>0 � LEGO% � BLK%!8=0
�IWE%=0:�PC%=0 � NOWIND%:� BLK%!12=HAND%(PC%) � WE%=1:PC%=NOWIND%:� � �
� � WE%=0 � IDRAG%=(BLK%!8<>0)
�� BLK%!8=0 � IDRAG%=�
�)� BLK%!12<>HAND%(2) � BLK%!16<>-1 � �
�� BLK%!8<>0 � IDRAG% � �
�"X%=!BLK%:Y%=BLK%!4:BUT%=BLK%!8
� BUT%=2 � �
Ȏ FUSE% �
F� 1:� FUST%=0 � BUT%<>0 � �picpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:� �TV\
$'� BUT%=0 � FUST%=0 � FUST%=0:� �TV\
.8�picpos:�inpic:�setcol:�l(X%(0),Y%(0),X%,Y%):�outpic
8�quickdrawmain
BX%(0)=X%:Y%(0)=Y%
L~� 4:� FUST%=0 � �paintscale:�picpos:�inpic:�eorback:�paintbrush(X%,Y%):�outpic:�quickdrawmain:OX%=X%:OY%=Y%:FUST%=1:� �TV\
V�picpos
`�� X%<>OX% � Y%<>OY% � �paintscale:�inpic:�eorback:�paintbrush(OX%,OY%):�paintbrush(X%,Y%):OX%=X%:OY%=Y%:�outpic:�quickdrawmain
j�� 11:� FUST%=0 � BUT%<>0 � �picpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:OX%=X%:OY%=Y%:�inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�outpic:�quickdrawmain:�letgo:� �TV\
t� FUST%=0 � � �TV\
~}� BUT%=1 � FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�picpos:OX%=X%:OY%=Y%:FUST%=0:�outpic:�quickdrawmain:�letgo:� �TV\
�l� BUT%=1 � FUST%=2 � �inpic:�eoc:�elip(&C5,OX%,OY%):�picpos:FUST%=0:�outpic:�quickdrawmain:�letgo:� �TV\
��� BUT%=4 � (OX%<>X%(0) � OY%<>Y%(0)) � FUST%=1 � �inpic:�eoc:X%(1)=OX%:Y%(1)=OY%:� X%(0),Y%(0),OX%,OY%:�picpos:OX%=X%:OY%=Y%:�elip(&C5,X%,Y%):�outpic:�quickdrawmain:�letgo:FUST%=2:� �TV\
��� BUT%=4 � (OX%<>X%(1) � OY%<>Y%(1)) � FUST%=2 � �inpic:�eoc:�picpos:�elip(&C5,OX%,OY%):�setcol:�elip(&C5,X%,Y%):OX%=X%:OY%=Y%:�outpic:�quickdrawmain:�letgo:FUST%=0:� �TV\
�&�picpos:� X%=OX% � Y%=OY% � � �TV\
�j� FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:OX%=X%:OY%=Y%:� X%(0),Y%(0),X%,Y%:�outpic:�quickdrawmain
�d� FUST%=2 � �inpic:�eoc:�elip(&C5,OX%,OY%):OX%=X%:OY%=Y%:�elip(&C5,X%,Y%):�outpic:�quickdrawmain
ĕ� 13:� FUST%=0 � BUT%<>0 � �picpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:OX%=X%:OY%=Y%:�inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�outpic:�quickdrawmain:�letgo:� �TV\
�� FUST%=0 � � �TV\
�}� BUT%=1 � FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�picpos:OX%=X%:OY%=Y%:FUST%=0:�outpic:�quickdrawmain:�letgo:� �TV\
�l� BUT%=1 � FUST%=2 � �inpic:�eoc:�para(0,0,OX%,OY%):�picpos:FUST%=0:�outpic:�quickdrawmain:�letgo:� �TV\
�� BUT%=4 � (OX%<>X%(0) � OY%<>Y%(0)) � FUST%=1 � �inpic:�eoc:X%(1)=OX%:Y%(1)=OY%:� X%(0),Y%(0),OX%,OY%:�picpos:OX%=X%:OY%=Y%:�para(0,0,X%,Y%):�outpic:�quickdrawmain:�letgo:FUST%=2:� �TV\
��� BUT%=4 � (OX%<>X%(1) � OY%<>Y%(1)) � FUST%=2 � �inpic:�eoc:�picpos:�para(0,0,OX%,OY%):�setcol:�para(1,0,X%,Y%):OX%=X%:OY%=Y%:�outpic:�quickdrawmain:�letgo:FUST%=0:� �TV\
&�picpos:� X%=OX% � Y%=OY% � � �TV\
j� FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:OX%=X%:OY%=Y%:� X%(0),Y%(0),X%,Y%:�outpic:�quickdrawmain
d� FUST%=2 � �inpic:�eoc:�para(0,0,OX%,OY%):OX%=X%:OY%=Y%:�para(0,0,X%,Y%):�outpic:�quickdrawmain
�� 16:� FUST%=0 � BUT%<>0 � �picpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:OX%=X%:OY%=Y%:�inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�outpic:�quickdrawmain:�letgo:� �TV\
(� FUST%=0 � � �TV\
2}� BUT%=1 � FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�picpos:OX%=X%:OY%=Y%:FUST%=0:�outpic:�quickdrawmain:�letgo:� �TV\
<l� BUT%=1 � FUST%=2 � �inpic:�eoc:�elip(&B5,OX%,OY%):�picpos:FUST%=0:�outpic:�quickdrawmain:�letgo:� �TV\
F�� BUT%=4 � (OX%<>X%(0) � OY%<>Y%(0)) � FUST%=1 � �inpic:�eoc:X%(1)=OX%:Y%(1)=OY%:� X%(0),Y%(0),OX%,OY%:�picpos:OX%=X%:OY%=Y%:�elip(&B5,X%,Y%):�outpic:�quickdrawmain:�letgo:FUST%=2:� �TV\
P�� BUT%=4 � (OX%<>X%(1) � OY%<>Y%(1)) � FUST%=2 � �inpic:�eoc:�picpos:�elip(&B5,OX%,OY%):�setcol:�elip(&B5,X%,Y%):OX%=X%:OY%=Y%:�outpic:�quickdrawmain:�letgo:FUST%=0:� �TV\
Z&�picpos:� X%=OX% � Y%=OY% � � �TV\
dj� FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:OX%=X%:OY%=Y%:� X%(0),Y%(0),X%,Y%:�outpic:�quickdrawmain
nd� FUST%=2 � �inpic:�eoc:�elip(&B5,OX%,OY%):OX%=X%:OY%=Y%:�elip(&B5,X%,Y%):�outpic:�quickdrawmain
x� 23:�poll_23
�� 25:�poll_25
�%� 27:� FUST%<2 � �rectpoll:� �TV\
�-�spinit:�spbuf(161*1024):� Q% � �spbuferr
��backuppic:�swapcorns
� VARS!20=BTC%:VARS!24=PALTAB%
�VARS!28=PIC%:VARS!32=SPBUF%
�VARS!36=X%(0):VARS!40=Y%(0)
�VARS!44=OX%:VARS!48=OY%
�\A%=VARS:ș "Hourglass_On":� pixaverage:ș "Hourglass_Off":�spinit:�forcedrawmain:FUST%=0
܀� 29:� FUST%=0 � �paintscale2:�picpos:�inpic:�eorback:�paintbrush(X%,Y%):�outpic:�quickdrawmain:OX%=X%:OY%=Y%:FUST%=1:� �TV\
��picpos
�� X%<>OX% � Y%<>OY% � �paintscale2:�inpic:�eorback:�paintbrush(OX%,OY%):�paintbrush(X%,Y%):OX%=X%:OY%=Y%:�outpic:�quickdrawmain
��� 30:� FUST%=0 � �paintscale2:�picpos:�inpic:�eorback:�paintbrush(X%,Y%):�outpic:�quickdrawmain:OX%=X%:OY%=Y%:FUST%=1:� �TV\
�picpos
�� X%<>OX% � Y%<>OY% � �paintscale2:�inpic:�eorback:�paintbrush(OX%,OY%):�paintbrush(X%,Y%):OX%=X%:OY%=Y%:�outpic:�quickdrawmain
� 32:� FONT%<>0 �
"o�picpos:� BUT%=4 � FUST%<>0 � �inbackup:ș "Font_SetFont",FHAND%:ș "Font_Paint",,TEXT$,16,X%,Y%:�outbackup
,�� FUST%<>0 � (X%<>OX% � Y%<>OY%) � ET%=1:�restpic:ET%=2:ET%=3:�inpicR:ș "Font_SetFont",FHAND%:ET%=4:ș "Font_Paint",,TEXT$,16,X%,Y%:�outbackup:NTTP%+=1:ET%=5:ET%=6:OX%=X%:OY%=Y%:�forcedrawmain:ET%=7:OX%=X%:OY%=Y%
6�
@E�picpos:� BUT%=4 � FUST%<>0 � �inbackup:�ostext(X%,Y%):�outbackup
Jj� FUST%<>0 � (X%<>OX% � Y%<>OY%) � �restpic:�inpic:�ostext(X%,Y%):�outpic:�forcedrawmain:OX%=X%:OY%=Y%
T�:� �TV\
^%� 31:� FUST%<2 � �rectpoll:� �TV\
h>�swapcorns:FMINX%=X%(0):FMINY%=Y%(0):FMAXX%=OX%:FMAXY%=OY%
r6ș "Hourglass_On":�fill:ș "Hourglass_Off":FUST%=0
|� 33:� FUST%>=2 � � �tPZ
��� FUST%=0 � BUT%=1 � �picpos:�inpic:CO%=�X%,Y%):TI%=Ȝ(X%,Y%):�outpic:SREP%=�findpalent(CO%,TI%):�forcedrawcolrep:� �TV\ � �rectpoll:� �TV\
�>�swapcorns:FMINX%=X%(0):FMINY%=Y%(0):FMAXX%=OX%:FMAXY%=OY%
��ș "Hourglass_On":!VARS=PIC%:VARS!4=PIC%:VARS!8=X%(0):VARS!12=Y%(0):VARS!16=OX%:VARS!20=OY%:VARS!24=BTC%:VARS!28=TTB%:VARS!32=REPS%:A%=VARS:� colrep:ș "Hourglass_Off":FUST%=0:�forcedrawmain
�-� 34:� �high(31,3) � �high(31,4) � � �TV\
�� FUST%=0 � �dBZ
�z� BUT%=4 � �inpic:�picpos:�pimport(OX%,OY%,3):�imptile:OX%=X%:OY%=Y%:�pimport(OX%,OY%,3):�outpic:�quickdrawmain:� �TV\
�d� FUST%=0 � FUST%=1:�picpos:OX%=X%:OY%=Y%:�inpic:�pimport(X%,Y%,3):�outpic:�quickdrawmain:� �TV\
�&�picpos:� X%=OX% � Y%=OY% � � �TV\
�U�inpic:�pimport(OX%,OY%,3):OX%=X%:OY%=Y%:�pimport(X%,Y%,3):�outpic:�quickdrawmain
�l� 36:� FUST%=0 � �picpos:�inpic:�eoc:ȓ X%,Y%,FRW%*2,FRH%*4:�outpic:�quickdrawmain:OX%=X%:OY%=Y%:FUST%=1
��picpos:� X%<>OX% � Y%<>OY% � �inpic:�eoc:ȓ OX%,OY%,FRW%*2,FRH%*4:OX%=X%:OY%=Y%:ȓ OX%,OY%,FRW%*2,FRH%*4:�outpic:�quickdrawmain
�� BUT%<>4 � �TV\
�~�inpic:�eoc:ȓ OX%,OY%,FRW%*2,FRH%*4:�setcol:ȓ OX%,OY%,FRW%*2,FRH%*4:�eoc:ȓ OX%,OY%,FRW%*2,FRH%*4:�outpic:�quickdrawmain
� 38:�poll_38
� 39:�poll_39
� 40:�poll_40
&� 41:�poll_41
0%� 42:� FUST%<2 � �rectpoll:� �TV\
:�supixtrans
DkRW%=��gi(25,13):GW%=��gi(25,15):BW%=��gi(25,17):�L%=0 � 255:ș "ColourTrans_ColourNumberToGCOL",L% � G%
NSRC%=(G%�%1111)*RW%:GC%=(((G%�48)>>2)+(G%�3))*GW%:BC%=(((G%�192)>>4)+(G%�3))*BW%
X+TC%=((RC%+GC%+BC%)�3):� TC%>15 � TC%=15
bxTC%=(TC% � 3)+((TC%�12)*RSM%)+(((TC%�12)<<2)*GSM%)+(((TC%�12)<<4)*BSM%):ș"ColourTrans_GCOLToColourNumber",TC% � TC%
lTRANSTAB%?L%=TC%:�
vAA%=VARS:� transarea:ș "Hourglass_Off":FUST%=0:�forcedrawmain
�� 43:�poll_43
�� 44:�poll_44
�%� 47:� FUST%<2 � �rectpoll:� �TV\
�-�spinit:�spbuf(161*1024):� Q% � �spbuferr
��backuppic:�swapcorns
��VARS!8=X%(0):VARS!12=Y%(0):VARS!16=OX%:VARS!20=OY%:VARS!24=�(�gi(29,5)):VARS!28=BLK%+512:A%=VARS:ș"Hourglass_On":� filter:ș"Hourglass_Off":�spinit:�forcedrawmain:FUST%=0
�%� 48:� FUST%<2 � �rectpoll:� �TV\
�-�spinit:�spbuf(161*1024):� Q% � �spbuferr
��backuppic:�swapcorns
�WE%=1:� �T~\
�-� �high(30,25) � VARS!36=1 � VARS!36=&280
�(VARS!40=0:� �high(30,44) � VARS!40=1
�*� �high(30,32) � VARS!44=1 � VARS!44=0
�VARS!8=X%(0):VARS!12=Y%(0):VARS!16=OX%:VARS!20=OY%:VARS!24=TAS%+512:VARS!28=BTC%:VARS!32=TRASP%:A%=VARS:� wobble:ș "Hourglass_Off":�spinit:�forcedrawmain:FUST%=0
#� WER% � �killf:FUSE%=-1:� �DZ@
�
�
*
4D� ** This is jumped straight to because of error control (flub!)
>qA=�(�gi(30,42)):K%=TAS%+512:L%=0:WER%=�:ER%=�:F$=�gi(30,27):MG%=�(�gi(30,5)):ș "Hourglass_On":�si(30,36," ")
H� � ER%=�:WER%=�:� �D\\
RK%!(L%*4)=�(F$)*MG%
\9� ER%=� � �si(30,36,"Error at A="+�(A)):K%!L%=0:ER%=�
f,A+=�(�gi(30,11)):L%+=1:� L%<618 � � �DR\
p� � �makerr
z� WE%=2 � � �DDo � � �dd[
�
���contrast(� L%)
�� CONL%>CONH% � � �tv\
�0� L%<=CONL% � L%=0:� � � L%>=CONH% � L%=15:�
�.K%=L%-CONL%:I%=CONH%-CONL%:L%=(K%/I%)*15:�
�� CONL%=CONH% � � �dT\
�1� L%<=CONH% � L%=15:� � � L%>=CONL% � L%=15:�
�3K%=L%-CONH%:I%=CONL%-CONH%:L%=15-((K%/I%)*15):�
�� L%<CONL% � L%=0 � L%=15
��
�
����supixtrans:�swapcorns:FMINX%=X%(0):FMINY%=Y%(0):FMAXX%=OX%:FMAXY%=OY%:ș "Hourglass_On":!VARS=PIC%:VARS!4=PIC%:VARS!8=X%(0):VARS!12=Y%(0):VARS!16=OX%:VARS!20=OY%:VARS!24=TRASP%:VARS!28=BTC%:VARS!32=TRANSTAB%:�
�
���protbox(CX%,CY%):�eoc:R%=ROT%:�rotpoint(FMINX%,FMINY%,R%,X1%,Y1%):�rotpoint(FMAXX%,FMINY%,R%,X2%,Y2%):�rotpoint(FMAXX%,FMAXY%,R%,X3%,Y3%):�rotpoint(FMINX%,FMAXY%,R%,X4%,Y4%)
Q�rotpoint(0,(FMAXY%�3)*2,R%,MX1%,MY1%):�rotpoint(0,(FMAXY%�3)*4,R%,MX2%,MY2%)
'X1%+=CX%:X2%+=CX%:X3%+=CX%:X4%+=CX%
$'Y1%+=CY%:Y2%+=CY%:Y3%+=CY%:Y4%+=CY%
.:�4,X1%,Y1%:�5,X2%,Y2%:�5,X3%,Y3%:�5,X4%,Y4%:�5,X1%,Y1%
8)� MX1%+CX%,MY1%+CY%,MX2%+CX%,MY2%+CY%
B�
L
V(��rotpoint(R0%,R1%,R%,� RPX%,� RPY%)
`�R6%=(ROTTAB%!(R%*4))>>12:R7%=(!(ROTTAB%+(R%*4)+&168))>>12:R8%=R0%*R6%:R5%=R1%*R7%:R8%-=R5%:R5%=R1%*R6%:R1%=R0%*R7%:R1%+=R5%:RPX%=R1%>>18:RPY%=-(R8%>>18)
j�
t
~ݤperc(WH%,IH%)
�2I$=�gi(WH%,IH%):� �I$,1)="%" � I$=�I$,�(I$)-1)
�
=�(I$)
�
���grabpoll(FT%)
��� FUST%=0 � BUT%<>0 � �picpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:OX%=X%:OY%=Y%:�inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain:�letgo:�
�� FUST%=0 � �
�{� BUT%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�picpos:OX%=X%:OY%=Y%:FUST%=0:�outpic:�quickdrawmain:�letgo:�
�0� BUT%<>4 � (OX%=X%(0) � OY%=Y%(0)) � � �Th^
ش�inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�picpos:�spbuf(�spritesize(X%-X%(0),Y%-Y%(0),�(�high(8,14)))):� Q% � ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�spinit:�spbuferr
�GRN$="GRAB":ș&2E,272,SPBUF%,"GRAB",,X%(0),Y%(0),X%,Y%:� �high(8,14) � ș&2E,285,SPBUF%,"GRAB":GRABM%=8:�fillmask � GRABM%=0
�'GRWI%=�(X%-X%(0)):GRHE%=�(Y%-Y%(0))
�� X%<X%(0) � Ȕ X%(0),X%
� Y%<Y%(0) � Ȕ Y%(0),Y%
:� FT%=1 � ș&2E,290,SPBUF%,"GRAB",X%(0),Y%(0),3+GRABM%
�pgrab(X%,Y%,3)
9OX%=X%:OY%=Y%:�outpic:�quickdrawmain:�letgo:FUST%=2:�
(!�picpos:� X%=OX% � Y%=OY% � �
2x�inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):OX%=X%:OY%=Y%:ȓ X%(0),Y%(0),X%-X%(0),Y%-Y%(0):�outpic:�quickdrawmain
<�
F
P��rectpoll
Z�� FUST%=0 � BUT%<>0 � �picpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:OX%=X%:OY%=Y%:�inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain:�letgo:�
d� FUST%=0 � �
n{� BUT%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�picpos:OX%=X%:OY%=Y%:FUST%=0:�outpic:�quickdrawmain:�letgo:�
x0� BUT%<>4 � (OX%=X%(0) � OY%=Y%(0)) � � �tj^
�:�inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�picpos
�� X%<X%(0) � Ȕ X%(0),X%
�� Y%<Y%(0) � Ȕ Y%(0),Y%
�9OX%=X%:OY%=Y%:�outpic:�quickdrawmain:�letgo:FUST%=2:�
�!�picpos:� X%=OX% � Y%=OY% � �
�x�inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):OX%=X%:OY%=Y%:ȓ X%(0),Y%(0),X%-X%(0),Y%-Y%(0):�outpic:�quickdrawmain
��
�
���pgrab(DX%,DY%,PL%)
�XR=GRXM%/GRXD%
�YR=GRYM%/GRYD%
�!SCALE%=GRXM%
�SCALE%!4=GRYM%
SCALE%!8=GRXD%
SCALE%!12=GRYD%
Wș&2E,308,SPBUF%,"GRAB",DX%-((GRWI% � 2)*XR),DY%-((GRHE% � 2)*YR),PL%+GRABM%,SCALE%
"�
,
6��pimport(DX%,DY%,PL%)
@!XR=GRXM%/GRXD%:YR=GRYM%/GRYD%
JIO%!20=(!IO%)*GRXM%
TIO%!24=(IO%!4)*GRYM%
^IO%!28=(IO%!8)*GRXD%
hIO%!32=(IO%!12)*GRYD%
r�� � GRMA% � ș&2E,308,SPBUF%,GRN$,DX%-((IMW% � 2)*XR),DY%-((IMH% � 2)*YR),PL%,IO%+20,IMPT% � ș&2E,308,SPBUF%,GRN$,DX%-((IMW% � 2)*XR),DY%-((IMH% � 2)*YR),PL%+8,IO%+20,IMPT%
|�
�
���para(LT%,PL%,DX%,DY%)
�"� PL%=1 � �elip(&75,DX%,DY%):�
�
� LT%=1 �
��l(X%(0),Y%(0),X%(1),Y%(1))
��l(X%(1),Y%(1),DX%,DY%)
�%� LITY%-4,X%(0)-X%(1),Y%(0)-Y%(1)
�� LITY%,X%(0),Y%(0)
��
�� X%(0),Y%(0),X%(1),Y%(1)
�� X%(1),Y%(1),DX%,DY%
��1,X%(0)-X%(1),Y%(0)-Y%(1)
��5,X%(0),Y%(0)
�
�
&��elip(PL%,DX%,DY%)
0� X%(0),Y%(0)
:� X%(1),Y%(1)
D� PL%,DX%,DY%
N�
X
b��tri(PL%,DX%,DY%)
l�� PL%=5 � PL%=85 � �4,DX%,DY%:� 5,X%(0),Y%(0):� 5,X%(1),Y%(1):� PL%,DX%,DY% � �4,DX%,DY%:� LITY%,X%(0),Y%(0):� LITY%,X%(1),Y%(1):� LITY%,DX%,DY%
v�
�
�7ݤdist(DX%,DY%):=�(((DX%-X%(0))^2)+((DY%-Y%(0))^2))
�
�V��paintbrush(BX%,BY%):ș&2E,306,BRUSH%,�(SELBR%),BX%-(32*XR),BY%-(32*YR),,SCALE%:�
�
�E��paintbrush2(BX%,BY%):ș&2E,305,BRUSH%,�(SELBR%),BX%-32,BY%-32:�
�
�,��letgo:LEGO%=�:�:�:ȗ X%,Y%,H%:� H%=0:�
�
�<��killf:LAOPWI%=-1:� TKH%<>-1 � �iconlo(32,TKH%):TKH%=-1
�Ȏ FUSE% �
�� FUSE%<>32 � �spbuf(0)
�
!
!i� 4:�closewind(5):� FUST%>0 � �inpic:�paintscale:�eorback:�paintbrush(OX%,OY%):�outpic:�quickdrawmain
!
!
!*M� 11:� FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�outpic:�quickdrawmain
!4E� FUST%=2 � �inpic:�eoc:�elip(&C5,OX%,OY%):�outpic:�quickdrawmain
!>M� 13:� FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�outpic:�quickdrawmain
!HE� FUST%=2 � �inpic:�eoc:�para(0,0,OX%,OY%):�outpic:�quickdrawmain
!RM� 16:� FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�outpic:�quickdrawmain
!\E� FUST%=2 � �inpic:�eoc:�elip(&B5,OX%,OY%):�outpic:�quickdrawmain
!f� 18:�kill_18
!p� 19:�kill_19
!z� 20:�kill_20
!�� 21:�kill_21
!�Z� 22:� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
!�� 23:�kill_23
!�� 25:�kill_25
!�Z� 27:� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
!�Z� 28:� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
!�k� 29:�closewind(5):� FUST%>0 � �inpic:�paintscale2:�eorback:�paintbrush(OX%,OY%):�outpic:�quickdrawmain
!�k� 30:�closewind(5):� FUST%>0 � �inpic:�paintscale2:�eorback:�paintbrush(OX%,OY%):�outpic:�quickdrawmain
!�N� 32:�restpic:�forcedrawmain:�closewind(14):�spinit:� FONT%<>0 � �losefont
!�� 31:� GRTY%=1 �
!�U� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
!��
!�q� 33:�closewind(18):�spinit:� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
"F� 34:� FUST%=1 � �inpic:�pimport(OX%,OY%,3):�outpic:�quickdrawmain
"�closewind(8):�spinit
""� 35:� FUST%<2 � �closewind(8)
"$U� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
".� FUST%=3 � �closewind(7)
"8Q� 36:� FUST%<>0 � �inpic:�eoc:ȓ OX%,OY%,FRW%*2,FRH%*4:�outpic:�quickdrawmain
"B
"L� 38:�kill_38
"V� 39:�kill_39
"`� 40:�kill_40
"j� 41:�kill_41
"t� 42:�closewind(25):�meoc
"~� 43:�kill_43
"�� 44:�kill_44
"�
"�
"�� 47:�closewind(29):�meoc
"�� 48:�closewind(30):�meoc
"��
"��windname(2,PIC$)
"��
"�
"�d��meoc:�spinit:� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
"��
"�
# ��eoc:�3,63 Ȝ 192:�
#
#��eorback:�3,191 Ȝ 192:�
#
#(
��pickcol
#2KXOF%=!BLK%:YOF%=BLK%!4:�screentowork(HAND%(3), XOF%,YOF%):YOF%=228+YOF%
#<� XOF%>766 � XOF%=766
#F� YOF%>220 � YOF%=220
#Pd� MOUB%=4 � COL%=(XOF% � 24)+((YOF% � 28)*32) � � MOUB%=1 � �trasp((XOF% � 24)+((YOF% � 28)*32))
#Z�forcedrawpal(PAL%)
#d�
#n
#x��tbackclick
#�5BLK%!8=HAND%(15):ș "Wimp_GetWindowState",,BLK%+8
#�0XOF%=(!BLK%)-(BLK%!12):� XOF%>766 � XOF%=766
#�1YOF%=(BLK%!4)-(BLK%!16):� YOF%>220 � YOF%=220
#�'FONTB%=(XOF% � 24)+((YOF% � 28)*32)
#��forcedrawtback
#��
#�
#���picpos
#�SCRX%=!BLK%:SCRY%=BLK%!4
#�4BLK%!8=HAND%(2):ș "Wimp_GetWindowState",,BLK%+8
#�.X%=(((!BLK%)-(BLK%!12))+(BLK%!28)) � ZOOM%
#�6Y%=1024-((((BLK%!24)-(BLK%!4))-(BLK%!32)) � ZOOM%)
#�� X%<0 � X%=0
$� X%>1279 � X%=1279
$� Y%<0 � Y%=0
$� Y%>1023 � Y%=1023
$"� � GRLO% � �
$,XOF%=(GRIWI%-GRBX%)*2
$6YOF%=(GRIHE%-GRBY%)*4
$@X%+=XOF%:Y%+=YOF%
$J)X%=-XOF%+((X% � (2*GRIWI%))*2*GRIWI%)
$T)Y%=-YOF%+((Y% � (4*GRIHE%))*4*GRIHE%)
$^�
$h
$r��getrdor(WE%)
$|4WOX%=BLK%!4-BLK%!20:WOY%=(BLK%!16-BLK%!24)-WE%:�
$�
$���openmain:MOP%=�
$�z!BLK%=HAND%(2):BLK%!4=0:BLK%!8=300:BLK%!12=1279:BLK%!16=1023:BLK%!20=0:BLK%!24=0:BLK%!28=-1:ș "Wimp_OpenWindow",,BLK%
$��
$�
$�
��openpal
$�{!BLK%=HAND%(3):BLK%!4=100:BLK%!8=300:BLK%!12=1279:BLK%!16=600:BLK%!20=0:BLK%!24=0:BLK%!28=-1:ș "Wimp_OpenWindow",,BLK%
$��
$�
$�)��openwind(WH%):� WH%>2 � LAOPWI%=WH%
$�3!BLK%=HAND%(WH%):ș "Wimp_GetWindowState",,BLK%
$�)BLK%!28=-1:ș "Wimp_OpenWindow",,BLK%
$��
%
%��closewind(WH%)
%0!BLK%=HAND%(WH%):ș "Wimp_CloseWindow",,BLK%
%&�
%0
%:��opmain
%Dș "Wimp_OpenWindow",,BLK%
%N�
%X
%b��clmain:MOP%=�
%lș "Wimp_CloseWindow",,BLK%
%v�
%�
%���airnoz
%�5H%=-1:�L%=21 � 33 � 2:� �high(4,L%) � H%=L%:L%=33
%��
%�Ȏ H% �
%�� 21:XR=1:YR=.25
%�� 23:XR=1:YR=.5
%�� 25:XR=1:YR=.75
%�� 27:XR=1:YR=1
%�� 29:XR=.75:YR=1
%�� 31:XR=.5:YR=1
%�� 33:XR=.25:YR=1
%��
&�
&
&��paintscale
& !SCALE%=BXM%
&*SCALE%!4=BYM%
&4SCALE%!8=BXD%
&>SCALE%!12=BYD%
&HXR=BXM%/BXD%
&RYR=BYM%/BYD%
&\�
&f
&p��paintscale2
&z
!SCALE%=1
&�SCALE%!4=1
&�SCALE%!8=1
&�SCALE%!12=1
&�XR=1
&�YR=1
&��
&�
&���picclick
&�$� MBUS% � MOUB%<>0 � � � MBUS%=�
&�Ȏ FUSE% �
&�� -1:� MOUB%=1 � �picpos:�inpic:CO%=�X%,Y%):TI%=Ȝ(X%,Y%):�3,63 Ȝ 192:�69,400,400:�69,400,400:�outpic:�trasp(�findpalent(CO%,TI%)):�forcedrawpal(PAL%):� �t`h
&�� MOUB%=4 � �op1:� �t`h
&�?� 0:�picpos:�inpic:�setcol:�69,X%,Y%:�outpic:�quickdrawmain
'"� 4:�paintscale:�inpic:�picpos
'.� FUST%<>0 � �eorback:�paintbrush(OX%,OY%)
'8�setbackcol:�paintbrush(X%,Y%):OX%=X%:OY%=Y%:FUST%=1
'$!�eorback:�paintbrush(OX%,OY%)
'.�outpic:�quickdrawmain
'8� 24:� MOUB%<>4 � � �t`h
'B��picpos:�inpic:�3,63 Ȝ 192:�69,400,400:�69,400,400:�setcol:TCO%=�X%-2,Y%):TTI%=Ȝ(X%-2,Y%):TPE%=�findpalent(TCO%,TTI%):� TPE%=COL% � �outpic:�message(0,"Cannot trace the colour you are using.")
'L2�trace(X%,Y%,TCO%,TTI%):�outpic:�quickdrawmain
'V$� 29:�paintscale2:�inpic:�picpos
'`/� FUST%<>0 � �eorback:�paintbrush2(OX%,OY%)
'j VARS!20=BTC%:VARS!24=PALTAB%
'tVARS!28=PIC%:VARS!32=SPBUF%
'~VARS!36=X%-32:VARS!40=Y%-32
'�!VARS!44=SELBR%:VARS!48=BRUSH%
'�A%=VARS:� averagebrush
'�3�3,63:ȓ X%-32,Y%-32,64,64:ȓ X%-32,Y%-32,64,64
'�8OX%=X%:OY%=Y%:FUST%=1:�eorback:�paintbrush2(OX%,OY%)
'��outpic:�quickdrawmain
'�$� 30:�paintscale2:�inpic:�picpos
'�/� FUST%<>0 � �eorback:�paintbrush2(OX%,OY%)
'� VARS!20=BTC%:VARS!24=PALTAB%
'�VARS!28=PIC%:VARS!32=SPBUF%
'�VARS!36=X%-32:VARS!40=Y%-32
'�!VARS!44=SELBR%:VARS!48=BRUSH%
'�9VARS!84=PALTAB%?(COL%*2):VARS!88=PALTAB%?((COL%*2)+1)
( A%=VARS:� tintbrush
(
3�3,63:ȓ X%-32,Y%-32,64,64:ȓ X%-32,Y%-32,64,64
(8OX%=X%:OY%=Y%:FUST%=1:�eorback:�paintbrush2(OX%,OY%)
(�outpic:�quickdrawmain
((!� 31:� MOUB%<>4 � GRTY%=1 � �
(2-�spinit:�spbuf(161*1024):� Q% � �spbuferr
(<�backuppic
(FX�inbackup:�picpos:FBC%=�X%,Y%):FBT%=Ȝ(X%,Y%):�0,FBC%+128 Ȝ FBT%:FUT%=(FBC%+1) � 64
(P9�0,FUT% Ȝ FBT%:ș "Hourglass_On":Ȑ X%,Y%:�outbackup
(Z-A%=VARS:B%=PIC%:C%=SPBUF%:� findchangebox
(dFMINX%=(!VARS)*2
(nFMINY%=(VARS!4)*4
(xFMAXX%=(VARS!8)*2
(�FMAXY%=(VARS!12)*4
(� �fill
(�ș "Hourglass_Off"
(��
(��
(�
(�
��fill
(�NOS%=��gi(13,83)
(�NOF%=GRFN%
(� ET%=0
(�� �high(13,87) � ET%=1
(�� �high(13,89) � ET%=2
(�� �high(13,91) � ET%=3
)� �high(13,93) � ET%=4
)FIT%=-1
)� �high(13,67) � FIT%=1
)"� �high(13,69) � FIT%=2
),� �high(13,71) � FIT%=3
)6� �high(13,73) � FIT%=4
)@� �high(13,75) � FIT%=5
)J� �high(13,77) � FIT%=6
)T� ET%=1 � ET%=2 � FIT%=1
)^� ET%=3 � ET%=4 � FIT%=4
)hE� FIT%=-1 � �spinit:�message(0,"You must choose a type of fill.")
)r
Ȏ FIT% �
)|3� 1:FIW%=FMAXX%-FMINX%:FIFC%=0:LAFC%=255:FID%=1
)�4� 2:FIW%=FMAXX%-FMINX%:FIFC%=255:LAFC%=0:FID%=-1
)�3� 4:FIW%=FMAXY%-FMINY%:FIFC%=0:LAFC%=255:FID%=1
)�4� 3:FIW%=FMAXY%-FMINY%:FIFC%=255:LAFC%=0:FID%=-1
)� � 5:FIFC%=0:LAFC%=255:FID%=1
)�!� 6:FIFC%=255:LAFC%=0:FID%=-1
)��
)�� FIT%=5 � FIT%=6 �
)�?� (FMAXX%-X%)>(X%-FMINX%) � XOF%=FMAXX%-X% � XOF%=X%-FMINX%
)�?� (FMAXY%-Y%)>(Y%-FMINY%) � YOF%=FMAXY%-Y% � YOF%=Y%-FMINY%
)�5FIW%=�((XOF%^2)+(YOF%^2)):� GRTY%=1 � FIW%=FIW%/2
)��
)�\� FIW%=0 � NOS%=1 � �message(5,"You cannot use a graduated fill on an area that small.")
)�1CPP%=(255<<8) � FIW%:CPS%=(255<<8) � (NOS%-1)
*HI%=IO%:�L%=0 � 15:?I%=GRFI%(L%,0,NOF%):I%?1=GRFI%(L%,1,NOF%):I%+=2:�
*6!VARS=PIC%:� GRTY%=0 � VARS!4=SPBUF% � VARS!4=PIC%
*�VARS!8=IO%:VARS!12=NOS%:VARS!16=FIFC%:VARS!20=LAFC%:VARS!24=FID%:VARS!28=CPP%:VARS!32=CPS%:VARS!36=X%:VARS!40=Y%:VARS!44=ROTTAB%:VARS!48=FIT%:VARS!52=FMINX%:VARS!56=FMINY%:VARS!60=FMAXX%:VARS!64=FMAXY%
*&C� GRTY%=1 � VARS!36=(FMINX%+FMAXX%)�2:VARS!40=(FMINY%+FMAXY%)�2
*0VARS!68=RAND%:VARS!72=0
*:VARS!76=��gi(13,81)
*D*� �high(13,54) � VARS!80=1 � VARS!80=0
*N9VARS!84=ET%:VARS!88=TRASP%:VARS!92=GRTY%:VARS!96=BTC%
*X'�L%=0 � 4092 � 4:RAND%!L%=�(CPS%):�
*bA%=VARS
*l� graduatedfill
*v�spinit:�forcedrawmain
*��
*�
*���hg:ș "Hourglass_Smash":�
*�
*���swapcorns
*�� X%(0)>OX% � Ȕ X%(0),OX%
*�� Y%(0)>OY% � Ȕ Y%(0),OY%
*��
*�
*�Eݤsamecol(x1%,y1%,col%,tin%):=(�x1%,y1%)=col% � Ȝ(x1%,y1%)=tin%)
*�
*�5��l(x1%,y1%,x2%,y2%):�4,x1%,y1%:� LITY%,x2%,y2%:�
*�
+g��r(x1%,y1%,x2%,y2%):�4,x1%,y1%:� LITY%-4,x2%,0:� LITY%-4,0,y2%:� LITY%-4,-x2%,0:� LITY%-4,0,-y2%:�
+
+��trace(X%,Y%,TCO%,TTI%)
+ �
+*
+4ݤfindpalent(CO%,TI%)
+>=CTT%?((CO%*4)+(TI% � 64))
+H
+R>��setcol:� USE%,PALTAB%?(COL%*2) Ȝ PALTAB%?((COL%*2)+1):�
+\
+fH��setbackcol:� USE%,(PALTAB%?(COL%*2))+128 Ȝ PALTAB%?((COL%*2)+1):�
+p
+z��col(C%,T%,U%)
+�ș&35,-1,9 � ,,BP%
+�� BP%=3 � �U%,C% Ȝ T%:�
+�+R%=((C% � %11)*4)+(T% � 64):R%+=(R%<<4)
+�2G%=(((C% � %1100)>>2)*4)+(T% � 64):G%+=(G%<<4)
+�4B%=(((C% � %110000)>>4)*4)+(T% � 64):B%+=(B%<<4)
+�>ș "ColourTrans_SetGCOL",((B%<<24)+(G%<<16)+(R%<<8)),,,,U%
+��
+�
+���anticol(C%,T%,U%)
+�+R%=((C% � %11)*4)+(T% � 64):R%+=(R%<<4)
+�2G%=(((C% � %1100)>>2)*4)+(T% � 64):G%+=(G%<<4)
+�4B%=(((C% � %110000)>>4)*4)+(T% � 64):B%+=(B%<<4)
+�Nș "ColourTrans_ReturnOppGCOLForMode",((B%<<24)+(G%<<16)+(R%<<8)),15 � GC%
,#� U%,(GC%>>2) Ȝ (GC% � %11)*64
,�
,
,$
��gridcol
,.�col(GRCO%,GRTI%,0)
,8�
,B
,L��makerr:�killf:FUSE%=-1
,Vș "Wimp_DragBox",,0
,`!BLK%=�
,jER=�
,t&$(BLK%+4)=�$+" at line "+�(�)+�(0)
,~K� $(BLK%+4)="Internal error '"+REPORT$+"' at line "+STR$ERL+"."+CHR$(0)
,�2� �<>17 ș "Wimp_ReportError",BLK%,1,"Imagery"
,�� PROCaction:END
,��
,��
,�
,���message(M%,M$):�outpic
,�Zș "Wimp_DragBox",,0:!BLK%=M%:$(BLK%+4)=M$+�(0):ș "Wimp_ReportError",BLK%,1,"Imagery"
,��forcedrawmain
,�
�action:�
,��
,�
,���mouse
,�FMOUX%=!BLK%:MOUY%=BLK%!4:MOUB%=BLK%!8:MOUH%=BLK%!12:MOUIC%=BLK%!16
- Ȏ MOUB% �
-
� 4,1:Ȏ MOUH% �
-� -2:�openmain
-$� HAND%(0):� BLK%!16=8 � �saveok
-(*� HAND%(7):� BLK%!16=8 � �spritesaveok
-2� HAND%(2):�picclick
-<� HAND%(3):�pickcol
-F� HAND%(4):�airbclick
-P� HAND%(5):�brushclick
-Z� HAND%(6):�gridclick
-d� HAND%(8):�grabclick
-n� HAND%(10):�linepatclick
-x� HAND%(11):�ecfclick
-�� HAND%(12):�edbruclick
-�� HAND%(13):�fillclick
-�� HAND%(14):�textclick
-�� HAND%(15):�tbackclick
-�� HAND%(16):�tparclick
-�� HAND%(17):�fillcontclick
-�� HAND%(18):�colrepclick
-�� HAND%(19):�frameclick
-�� HAND%(20):�patfillclick
-�� HAND%(21):�rgbcontclick
-�� HAND%(22):�greyscaleclick
-�� HAND%(23):�pixelateclick
-�� HAND%(24):�rotateclick
.� HAND%(25):�colscaleclick
.� HAND%(26):�contrastclick
.� HAND%(27):�posteriseclick
."� HAND%(29):�filterclick
.,� HAND%(30):�wobbleclick
.6� HAND%(32):�toolclick
.@� HAND%(33):�zoomclick
.J(� HAND%(34):� BLK%!16=8 � �savesetok
.T�
.^=� 2:� MOUH%=-2 � �iconmenu � � MOUH%=HAND%(2) � �windmenu
.h1� 16,64:� MOUH%=HAND%(0) � DRAG%=0:�startdrag
.r)� MOUH%=HAND%(7) � DRAG%=7:�startdrag
.|+� MOUH%=HAND%(34) � DRAG%=34:�startdrag
.��
.��
.�
.���wobbleclick
.��arrows(30,2,3,5,1,999,1)
.��arrows(30,7,8,11,1,999,1)
.� �arrows(30,38,39,42,0,359,1)
.�*� MOUIC%=19 � �si(30,27,"COS(RAD(A))")
.�*� MOUIC%=21 � �si(30,27,"SIN(RAD(A))")
.�*� MOUIC%=23 � �si(30,27,"TAN(RAD(A))")
.�� MOUIC%<>47 � �
.�ș&2E,256+9,SHOW%:SHOW%!32=&12345:ș&2E,266,SHOW%,"<Imagery$Dir>.Show":� SHOW%!32=&12345 � �message(0,"Could not load 'Show' sprite from !Imagery folder")
.�-�spinit:�spbuf(161*1024):� Q% � �spbuferr
/�backuppic
/ș&2E,256+9,PIC%
/c�inbackup:ș &2E,256+16,PIC%,"SHOW",0,400,400,800,592:ș&2E,290,SHOW%,"SHOW",400,400:�outbackup
/&>�insprite(0,SHOW%,"SHOW"):ș&2E,290,PIC%,"SHOW":�outsprite
/0S!PIC%=161*1024:PIC%!4=0:PIC%!8=24:PIC%!12=24:ș &2E,271,PIC%,"PIC",0,640,256,15
/:WE%=2:� �T~\
/D-� �high(30,25) � VARS!36=1 � VARS!36=&280
/N(VARS!40=0:� �high(30,44) � VARS!40=1
/XC�L%=0 � 255:?(TAS%+256+L%)=TRASP%?L%:TRASP%?L%=1:�:TRASP%?254=0
/b�VARS!44=0:VARS!8=400:VARS!12=400:VARS!16=802:VARS!20=596:VARS!24=TAS%+512:VARS!28=BTC%:VARS!32=TRASP%:A%=VARS:� wobble:ș "Hourglass_Off":�inbackup:ș&2E,290,SHOW%,"SHOW",400,400:�outbackup
/lHș&2E,256+9,SHOW%:�inpic:ș&2E,256+16,SHOW%,"SHOW",0,400,400,800,592
/vș&2E,290,SPBUF%,"PIC",0,0
/�X�outpic:�spinit:�L%=0 � 255:TRASP%?L%=?(TAS%+256+L%):�:�forcedrawwob:� WER% � � �DZ@
/��
/�
/���filterclick
/��arrows(29,2,3,5,0,8,1)
/��
/�
/���rotateclick
/��
/�
/���rgbcontclick
/�6RP%=�perc(21,13):GP%=�perc(21,15):BP%=�perc(21,17)
/�IRP%=RP%:IGP%=GP%:IBP%=BP%
0�arrows(21, 3,5,13,0,100,1)
0�arrows(21, 6,8,15,0,100,1)
0 �arrows(21, 9,11,17,0,100,1)
0 6RP%=�perc(21,13):GP%=�perc(21,15):BP%=�perc(21,17)
0*P� RP%<>IRP% � RSL%=RP%:�slidud(1,RP%):�getslor(21,30):�redrawslid(21,11,RP%)
04P� GP%<>IGP% � GSL%=GP%:�slidud(2,GP%):�getslor(21,31):�redrawslid(21,10,GP%)
0>O� BP%<>IBP% � BSL%=BP%:�slidud(3,BP%):�getslor(21,32):�redrawslid(21,8,BP%)
0H@� MOUIC%=30 � RSL%=�slidhit(21,30,MOUX%,MOUY%,11,1):RP%=RSL%
0R@� MOUIC%=31 � GSL%=�slidhit(21,31,MOUX%,MOUY%,10,2):GP%=GSL%
0\?� MOUIC%=32 � BSL%=�slidhit(21,32,MOUX%,MOUY%,8,3):BP%=BSL%
0f�
0p
0z��slidud(WE%,V%)
0�"� WE%=1 � �ui(21,13,�(V%)+"%")
0�"� WE%=2 � �ui(21,15,�(V%)+"%")
0�"� WE%=3 � �ui(21,17,�(V%)+"%")
0�
� WE%=4 �
0�V2%=(V%�4):� V2%=0 � V2%=1
0��ui(33,8, �(V2%))
0��
0��
0�
0���greyscaleclick
0�O�arrows(22,3,5,13,0,9,1):�arrows(22,6,8,15,0,9,1):�arrows(22,9,11,17,0,9,1)
0��
0�
1��colscaleclick
1O�arrows(25,3,5,13,0,9,1):�arrows(25,6,8,15,0,9,1):�arrows(25,9,11,17,0,9,1)
1�
1$
1.��contrastclick
18'CONL%=��gi(26,18):CONH%=��gi(26,20)
1B;�arrows(26,11,13,18,0,15,1):�arrows(26,14,16,20,0,15,1)
1LC� CONL%<>��gi(26,18) � CONH%<>��gi(26,20) � �forcedrawgraph(26)
1V�
1`
1j��posteriseclick
1t6POL%=��gi(27,22):POH%=��gi(27,24):PON%=��gi(27,26)
1~W�arrows(27,11,13,22,0,15,1):�arrows(27,14,16,24,0,15,1):�arrows(27,18,20,26,2,16,1)
1�U� POL%<>��gi(27,22) � POH%<>��gi(27,24) � PON%<>��gi(27,26) � �forcedrawgraph(27)
1��
1�
1���pixelateclick
1�8�arrows(23,2,4,9,1,100,1):�arrows(23,5,7,11,1,100,1)
1��
1�
1���frameclick
1�9�arrows(19,5,7,10,1,640,1):�arrows(19,6,8,12,1,256,1)
1�� MOUIC%<>14 � �
1�
�killf
1� V%=��gi(19,10):� V%<1 � V%=1
2 � V%>640 � V%=640
2
�si(19,10,�V%)
2 W%=��gi(19,12):� W%<1 � W%=1
2� W%>256 � W%=256
2(�si(19,12,�W%)
22MFRW%=V%+1:FRH%=W%+1:FUSE%=36:FUST%=0:�ud:�windname(2,PIC$+" [Set frame]")
2<� MOUB%=4 � �menoff
2F�
2P
2Z��colrepclick
2d�� MOUIC%=5 � ș "Hourglass_On":�L%=0 � 22596 � 4:SPBUF%!L%=OPAL%!L%:�:�L%=0 � 255:REPS%?L%=L%:�:ș "Hourglass_Off":�forcedrawcolrep:�
2n5BLK%!8=HAND%(18):ș "Wimp_GetWindowState",,BLK%+8
2x<XOF%=(!BLK%)-((BLK%!12)-(BLK%!28)):� XOF%>766 � XOF%=766
2�CYOF%=(BLK%!4)-(((BLK%!24)-(BLK%!32))-556):� YOF%>550 � YOF%=550
2�� YOF%<=220 �
2��C%=(XOF% � 24)+((YOF% � 28)*32):�insprite(0,SPBUF%,"Palette"):FX%=((SREP% � 32)*24)+2:FY%=((SREP% � 32)*28)+4:�0,PALTAB%?(C%*2) Ȝ PALTAB%?((C%*2)+1)
2�Bȓ Ȑ FX%,FY%,20,20:�outsprite:REPS%?SREP%=C%:�forcedrawcolrep
2��
2�Z� YOF%>=290 � YOF%<514 � YOF%-=290:SREP%=(XOF% � 24)+((YOF% � 28)*32):�forcedrawcolrep
2��
2�
2�'��arrows(W%,DI%,UI%,TI%,LV%,UV%,I%)
2�5V%=��gi(W%,TI%):OV%=V%:� MOUB%=1 � WE%=-1 � WE%=1
2�� MOUIC%=DI% � V%-=(I%*WE%)
2�� MOUIC%=UI% � V%+=(I%*WE%)
2�� V%<LV% � V%=LV%
3� V%>UV% � V%=UV%
3*� V%<>OV% � W%<>21 � �si(W%,TI%,�(V%))
3-� V%<>OV% � W%=21 � �si(W%,TI%,�(V%)+"%")
3"�
3,
36��tparclick
3@�
3J
3T��losefont
3^8� FONT%<>0 � FTL% � ș "Font_LoseFont",FHAND%:FTL%=�
3h�
3r
3|
��getfont
3�$� ��gi(14,20)<6 � �si(14,20,"6")
3�$� ��gi(14,22)<6 � �si(14,22,"6")
3�)FONTX%=��gi(14,20):FONTY%=��gi(14,22)
3�L� FONT%<>0 � FTL%=�:ș "Font_FindFont",,FO$,FONTX%*16,FONTY%*16 � FHAND%
3��
3�
3�
��restpic
3�
�inpic
3�ș&2E,290,SPBUF%,"PIC",0,0
3��outpic
3��
3�
3���textclick
4�
4
4��ecfclick
4&-� MOUIC%>25 � MOUIC%<33 � �forcedrawpat:�
40� MOUIC%<>8 � �
4:� MOUB%<>1 � MOUB%<>4 � �
4D5BLK%!8=HAND%(11):ș "Wimp_GetWindowState",,BLK%+8
4N6XOF%=((!BLK%)-(BLK%!12))-180:� XOF%>766 � XOF%=766
4X6YOF%=((BLK%!4)-(BLK%!16))-20:� YOF%>220 � YOF%=220
4b%col%=(XOF% � 24)+((YOF% � 28)*32)
4lcby%=TTB%?col%
4vCECF%=�cecf
4�EL%=0:� FORK%=8 TO 15:IF FNhigh(11,K%) THEN L%=K%-7:NEXT ELSE NEXT
4�� �high(11,23) � L%=1
4�� �high(11,24) � L%=2
4�� �high(11,16) � L%=3
4�.�K%=11 � 15:� �high(11,K%) � L%=K%-7:� � �
4�� L%=0 � �
4�ECF%(L%,CECF%)=cby%
4��forcedrawpat
4��
4�
4���reloadpatfills
4�.ș&2E,266,PFILLS%,"<Imagery$Dir>.PatFills"
4��
5
5��patfillclick
5"� MOUIC%=2 � �reloadpatfills:�
5 5BLK%!8=HAND%(20):ș "Wimp_GetWindowState",,BLK%+8
5*6XOF%=((!BLK%)-(BLK%!12)):YOF%=((BLK%!4)-(BLK%!16))
54tK%=-1:�L%=1 � 12:BX%=((L%-1)*84)+24:BY%=52:� XOF%>=BX% � YOF%>=BY% � XOF%<(BX%+64) � YOF%<(BY%+64) � K%=L%:� � �
5>+� K%=-1 � � � CPF%=K%:�forcedrawpatfill
5H�
5R
5\
��filluse
5f SNO%=�grafilno:� SNO%=-1 � �
5pw�killf:FUSE%=31:FUST%=0:GRFN%=SNO%:GRTY%=0:�ud:�windname(2,PIC$+" [Graduated fill ("+�filldet(SNO%+1)+")]"):�spinit
5z� MOUB%=4 � �menoff
5��
5�
5�:ݤfilldet(S%):� GRTY%=0 � ="flood "+�S% � ="area "+�S%
5�
5���invertfill
5�NOS%=�grafilno
5� IA%=0:IB%=��gi(13,83):IB%-=1
5�k�:Ȕ GRFI%(IA%,0,NOS%),GRFI%(IB%,0,NOS%):Ȕ GRFI%(IA%,1,NOS%),GRFI%(IB%,1,NOS%):IA%+=1:IB%-=1:� IA%>IB%
5��forcedrawfill
5��
5�
5���interpfill
5�NOS%=�grafilno
6IA%=0:�:IB%=IA%+1
6� IB%=16 � �forcedrawfill:�
6?� GRFI%(IB%,0,NOS%)=0 � GRFI%(IB%,1,NOS%)=0 � IB%+=1:� �TPv
6$'� IB%=IA%+1 � IA%=IB%:IB%+=1:� �TPv
6.T1%=GRFI%(IA%,1,NOS%)>>6
68*R1%=((GRFI%(IA%,0,NOS%) � %11)<<2)+T1%
6B'G1%=(GRFI%(IA%,0,NOS%) � %1100)+T1%
6L.B1%=((GRFI%(IA%,0,NOS%) � %110000)>>2)+T1%
6VT2%=GRFI%(IB%,1,NOS%)>>6
6`;RD=((((GRFI%(IB%,0,NOS%) � %11)<<2)+T2%)-R1%)/(IB%-IA%)
6j8GD=(((GRFI%(IB%,0,NOS%) � %1100)+T2%)-G1%)/(IB%-IA%)
6t?BD=((((GRFI%(IB%,0,NOS%) � %110000)>>2)+T2%)-B1%)/(IB%-IA%)
6~IA%+=1:�L%=1 � IB%-IA%
6�0R%=R1%+(RD*L%):G%=G1%+(GD*L%):B%=B1%+(BD*L%)
6�Iș "ColourTrans_ReturnGCOLForMode",(B%<<28)+(G%<<20)+(R%<<12),15 � G%
6�;GRFI%(IA%,0,NOS%)=G%>>2:GRFI%(IA%,1,NOS%)=(G% � %11)<<6
6�IA%+=1:�
6�IB%=IA%+1:� �TPv
6�
6���wipefill
6�NOS%=�grafilno
6�0�L%=0 � 15:�K%=0 � 1:GRFI%(L%,K%,NOS%)=0:�:�
6��forcedrawfill:�
6�
6���compfill
7 NOS%=�grafilno
7
7CA%=GRFI%(0,0,NOS%):TA%=GRFI%(0,1,NOS%):IA%=1:IB%=1
7
ȕ IB%<16
7�� GRFI%(IB%,0,NOS%)<>CA% � GRFI%(IB%,1,NOS%)<>TA% � GRFI%(IA%,0,NOS%)=GRFI%(IB%,0,NOS%):GRFI%(IA%,1,NOS%)=GRFI%(IB%,1,NOS%):CA%=GRFI%(IA%,0,NOS%):TA%=GRFI%(IA%,1,NOS%):IA%+=1
7(IB%+=1:�
72>ȕ IA%<16:GRFI%(IA%,0,NOS%)=0:GRFI%(IA%,1,NOS%)=0:IA%+=1:�
7<�forcedrawfill
7F�
7P
7Z��fillclick
7d� MOUIC%<0 � � �T`z
7n� MOUIC%=105 � �filluse:�
7x� MOUIC%=62 � �invertfill:�
7�� MOUIC%=63 � �interpfill:�
7�� MOUIC%=110 � �wipefill:�
7�� MOUIC%=111 � �compfill:�
7�@� MOUIC%<>87 � MOUIC%<>89 � MOUIC%<>91 � MOUIC%<>93 � � �t~w
7�-� �high(13,MOUIC%) � �iconlo(13,MOUIC%):�
7��� �high(13,75) � �high(13,77) � �message(13,"You cannot use an edge priority with a radial fill.") � �iconlo(13,87):�iconlo(13,89):�iconlo(13,91):�iconlo(13,93):�iconhi(13,MOUIC%)
7�(� MOUIC%<>75 � �high(13,75) � � �d\w
7ȃ� �high(13,87) � �high(13,89) � �high(13,91) � �high(13,93) � �message(4,"You cannot use a radial fill with an edge priority.")
7�_�iconhi(13,75):�iconlo(13,67):�iconlo(13,69):�iconlo(13,71):�iconlo(13,73):�iconlo(13,77):�
7�S� (MOUIC%>=2 � MOUIC%<=14) � MOUIC%=78 � MOUIC%=79 � MOUIC%=85 � �setgradfill:�
7�(� MOUIC%<>77 � �high(13,77) � � �TDx
7�� �high(13,87) � �high(13,89) � �high(13,91) � �high(13,93) � �message(4,"You cannot use a radial fill with an edge priority.")
7�_�iconhi(13,77):�iconlo(13,67):�iconlo(13,69):�iconlo(13,71):�iconlo(13,73):�iconlo(13,75):�
8T� MOUIC%=95 � MOUIC%=99 � MOUIC%=101 � MOUIC%=103 � MOUIC%=97 � �forcedrawfill:�
8!�arrows(13, 40,41,81,0,359,1)
8I� MOUB%=1 � MOUIC%=43 � MOUIC%=45 � � MOUB%=1 � MOUIC%=45 � MOUIC%=43
8"� MOUIC%<>43 � � �D@x
8,!NOS%=��gi(13,83):� NOS%=2 � �
86>�shadeicon(13,�filic(NOS%-1)):NOS%-=1:�si(13,83,�(NOS%)):�
8@� MOUIC%<>45 � � �D^x
8J"NOS%=��gi(13,83):� NOS%=16 � �
8T<�clearicon(13,�filic(NOS%)):NOS%+=1:�si(13,83,�(NOS%)):�
8^�
8h
8r��setgradfill
8|SNO%=�grafilno
8�Ȏ MOUIC% �
8�� 78:� �Dvy
8�� 79:� �t@y
8�� 2:� �tJy
8�� 3:� �tTy
8�� 4:� �t^y
8�� 5:� �thy
8�� 6:� �try
8�� 7:� �dFy
8�� 8:� �dPy
8�� 9:� �dZy
8�� 10:� �ddy
8�� 11:� �t|y
9� 12:� �dny
9� 13:� �dxy
9� 14:� �TBz
9&� 85:� �TLz
90�
9:J�L%=0 � 15:�shadeicon(13,�filic(L%)):�K%=0 � 1:GRFI%(L%,K%,SNO%)=0:�:�
9DQ� S%:�L%=0 � S%-1:�clearicon(13,�filic(L%)):�K%=0 � 1:� GRFI%(L%,K%,SNO%):�:�
9N�si(13,83,�S%)
9X�forcedrawfill
9b�
9l
9vH� 12, 1,0,1,64,1,128,1,192,2,0,2,64,2,128,2,192,3,0,3,64,3,128,3,192
9�L� 12, 4,0,4,64,4,128,4,192,8,0,8,64,8,128,8,192,12,0,12,64,12,128,12,192
9�P� 12, 5,0,5,64,5,128,5,192,10,0,10,64,10,128,10,192,15,0,15,64,15,128,15,192
9�T� 12, 16,0,16,64,16,128,16,192,32,0,32,64,32,128,32,192,48,0,48,64,48,128,48,192
9�T� 12, 17,0,17,64,17,128,17,192,34,0,34,64,34,128,34,192,51,0,51,64,51,128,51,192
9�T� 12, 20,0,20,64,20,128,20,192,40,0,40,64,40,128,40,192,60,0,60,64,60,128,60,192
9�e� 15, 0,64,0,128,0,192,21,0,21,64,21,128,21,192,42,0,42,64,42,128,42,192,63,0,63,64,63,128,63,192
9�L� 12, 1,0,1,64,1,128,1,192,6,0,6,64,6,128,6,192,27,0,27,64,27,128,27,192
9�:� 8, 18,0,18,64,18,128,18,192,39,0,39,64,39,128,39,192
9�2� 8, 2,0,2,64,2,128,2,192,7,0,7,64,7,128,7,192
9�T� 12, 17,0,17,64,17,128,17,192,38,0,38,64,38,128,38,192,59,0,59,64,59,128,59,192
9�P� 12, 5,0,5,64,5,128,5,192,10,0,26,64,26,128,26,192,47,0,47,64,47,128,47,192
9�T� 12, 20,0,20,64,20,128,20,192,41,0,41,64,41,128,41,192,62,0,62,64,62,128,62,192
9�P� 12, 1,0,1,64,1,128,1,192,22,0,22,64,22,128,22,192,43,0,43,64,43,128,43,192
:8� 8, 9,0,9,64,9,128,9,192,14,0,14,64,14,128,14,192,0
::� 8, 21,0,21,64,21,128,21,192,42,0,42,64,42,128,42,192
:
: IXOF%=!BLK%:YOF%=BLK%!4:!BLK%=HAND%(13):ș "Wimp_GetWindowState",,BLK%
:*�getrdor(484)
:40XOF%=(XOF%-WOX%)-422:� XOF%>766 � XOF%<0 � �
:>0YOF%=(YOF%-WOY%)-236:� YOF%>220 � YOF%<0 � �
:H%col%=(XOF% � 24)+((YOF% � 28)*32)
:Rtin%=PALTAB%?((col%*2)+1)
:\col%=PALTAB%?(col%*2)
:f=FPE%=-1:�L%=0 � 15:� �high(13,�filic(L%)) � FPE%=L%:� � �
:pSNO%=�grafilno
:z� FPE%=-1 � SNO%=-1 � �
:�BGRFI%(FPE%,0,SNO%)=col%:GRFI%(FPE%,1,SNO%)=tin%:�forcedrawfill
:��
:�
:�7ݤfilic(FSN%):� FSN%<=11 � =FSN%+26 � =(FSN%-12)+46
:�
:�-ݤlipaadj(LITA%):� LITA%=7 � =51 � =LITA%
:�
:���linepatclick
:�� MOUB%=1 �
:�1� MOUIC%=2 � MOUIC%=3 � � MOUIC%=3 � MOUIC%=2
:��
:�Ȏ MOUIC% �
:�W� 3:PL%=��gi(10,48):� PL%>1 � �shadeicon(10,�lipaadj(PL%+6)):PL%-=1:�si(10,48,�PL%)
;X� 2:PL%=��gi(10,48):� PL%<40 � �clearicon(10,�lipaadj(PL%+7)):PL%+=1:�si(10,48,�PL%)
;!� 50:PALE%=��gi(10,48):�23,6,
;LIN%=7:�L%=1 � 5:N%=0:I%=128:�K%=1 � 8:� �high(10,�lipaadj(IN%)) � N%+=I%
;$.I%=I% � 2:IN%+=1:�:� N%:PAT%(L%)=N%:�:� 0|
;.� MOUB%=4 � �menoff
;8�
;B�
;L
;V;��grabclick:ING%=(�high(31,3) � �high(31,4)) � FUSE%=34
;`� MOUIC%<>16 � �
;ja� FUSE%<>34 � FUST%<2 � �message(1,"Select an area of picture before setting these options.")
;t� ING% � � �tz{
;~
�inpic
;�� FUSE%<>34 �
;��pgrab(OX%,OY%,3)
;��
;�$� FUST%<>0 � �pimport(OX%,OY%,3)
;��
;�;GRXM%=�(�gi(8,17)):� GRXM%<1 � GRXM%=1:�si(8,17,�GRXM%)
;�;GRYM%=�(�gi(8,19)):� GRYM%<1 � GRYM%=1:�si(8,19,�GRYM%)
;�;GRXD%=�(�gi(8,18)):� GRXD%<1 � GRXD%=1:�si(8,18,�GRXD%)
;�;GRYD%=�(�gi(8,20)):� GRYD%<1 � GRYD%=1:�si(8,20,�GRYD%)
;�
�grabflip
;�GRMA%=�high(8,14)
;�� � ING% � � �TT|
<