Home » Archimedes archive » Archimedes World » AW-1991-11.adf » November91 » !AWNov91/Goodies/Archrome/!Archrome/!RunImage
!AWNov91/Goodies/Archrome/!Archrome/!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-1991-11.adf » November91 |
| Filename: | !AWNov91/Goodies/Archrome/!Archrome/!RunImage |
| Read OK: | ✔ |
| File size: | 1AB96 bytes |
| Load address: | 0000 |
| Exec address: | 0000 |
File contents
10REM ><Archrome$Dir>.!RunImage
20ON ERROR VDU4,7:REPORT:PRINT;" at line ";ERL:END
30SYS "OS_GetEnv" TO A$:IF RIGHT$(A$,1)<>" " THEN LF$=MID$(A$,INSTR(A$,""" ")+2) ELSE LF$=""
40PROCsetup
50ON ERROR PROCmakerr
60PROCaction
70PROCdie
80END
90DEFPROCsetup
100DIM POI% 256,TAS% 2000,BLK% 1000,MENU% 5*1024,MENUIND% 5*1024,SEL% 256,ICBLK% 256,VARS 128,MENAD%(300),MENALO% 16,CODE% 6*1024,IO% 256,TRANSTAB% 256
110MEOF%=0:MEIN%=0:MBUS%=FALSE
120$MENALO%="A -~"
130DIM PIC% 145*1024,SCALE% 32,PIXTAB% 256,PIXTAB2% 256,X%(8),Y%(8)
140SPBUF%=HIMEM:SPSIZ%=0:SYS "Wimp_SlotSize",-1,-1 TO CUSL%
150DIM PAL% 22600,OPAL% 22600,PALTAB% 512,BTC% 256,CTT% 256,TTB% 256,ROTTAB% 1800,RAND% 4096,PFILLS% 7000:!PAL%=22600:!OPAL%=22600:!PFILLS%=7000
160DIM BRUSH% 13000:!BRUSH%=13000
170SYS&2E,266,BRUSH%,"<Archrome$Dir>.Brushes"
180SYS&2E,266,PAL%,"<Archrome$Dir>.Palette"
190SYS&2E,266,OPAL%,"<Archrome$Dir>.Palette"
200SYS&2E,266,PFILLS%,"<Archrome$Dir>.PatFills"
210OSCLI("LOAD <Archrome$Dir>.PalTab "+STR$~PALTAB%)
220OSCLI("LOAD <Archrome$Dir>.BTC "+STR$~BTC%):REM byte -> pal
230OSCLI("LOAD <Archrome$Dir>.CTT "+STR$~CTT%):REM pal -> byte
240OSCLI("LOAD <Archrome$Dir>.TTB "+STR$~TTB%):REM (col*64)+tint -> pal
250OSCLI("LOAD <Archrome$Dir>.RotTab "+STR$~ROTTAB%)
260OSCLI("LOAD <Archrome$Dir>.Code "+STR$~CODE%)
270OSCLI("LOAD <Archrome$Dir>.RotTab "+STR$~ROTTAB%)
280COL%=255:FUSE%=-1:FUST%=-1:FUCO%=0:BUTDO%=FALSE
290$TAS%="TASK":SYS"Wimp_Initialise",200,!TAS%,"Archrome" TO HAND%
300PROCloadsprites
310PROCloadvars
320!BLK%=-1:BLK%!4=0:BLK%!8=0:BLK%!12=64:BLK%!16=64:BLK%!20=&2102
330DIM BLK%!24 10:$(BLK%!24)="!Archrome":BLK%!28=SPRITES%:BLK%!32=10
340SYS "Wimp_CreateIcon",,BLK% TO ICHAND%
350NOWIND%=24:NOMENS%=17
360DIM STORE% 15*1024,BUF% 4048,HAND%(NOWIND%)
370SOF%=STORE%
380DATA 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
390RESTORE 380
400SYS "Wimp_OpenTemplate",,"<Archrome$Dir>.Templates"
410FORK%=0 TO NOWIND%
420READ A$:$IO%=A$
430SYS "Wimp_LoadTemplate",,BUF%,SOF%,STORE%+(15*1024),-1,IO%,0 TO ,,SOF%
440IF K%=2 THEN BUF%?35=&FF
450SYS "Wimp_CreateWindow",,BUF% TO HAND%(K%):NEXT
460SYS "Wimp_CloseTemplate"
470FORL%=15 TO 46:PROCshadeicon(10,L%):NEXT
480PROCseticon(13,44,"16")
490VDU23,6,0|
500PROCsystemvars
510PROCchars
520PROCloadfonts
530PROCbuildmainmenu:PROCbuildiconmenu
540ENDPROC
550
560DEFPROCsystemvars
570!PIC%=145*1024
580PIC%!4=0
590PIC%!8=24
600PIC%!12=24
610REM IF L%=0 THEN SYS&2E,266,PIC%,"<Archrome$Dir>.Test"
620SYS &2E,271,PIC%,"PIC",0,618,234,15
630PIC$="<Untitled>"
640IF LF$<>"" THEN OSCLI("LOAD "+LF$+" "+STR$~(PIC%+4)):PIC$=FNleaf(LF$):PROCseticon(0,1,LF$) ELSE PIC$="<Untitled>"
650ESM%=-1:EPM%=-1
660GRCO%=-1:GRTI%=-1:GRLO%=FALSE:GRWI%=1:GRHE%=1:GRBX%=0:GRBY%=0
670GRXM%=1:GRXD%=1:GRYM%=1:GRYD%=1:GRFX%=FALSE:GRFY%=FALSE
680ZOOM%=1
690USE%=0:LITY%=5:GRMA%=FALSE
700DIM PAT%(5):PAT%()=0:PALE%=8
710DIM ECF%(8,4):ECF%()=0:ROT%=0
720DIM GRFI%(15,1,4):GRFI%()=0
730FIFC%=63:FIFT%=192:FILC%=3:FILT%=192:FILR%=0
740IP%=FALSE
750SELBR%=1:BXM%=1:BXD%=1:BYM%=1:BYD%=1
760EDBR%=1:IDRAG%=FALSE:CPF%=1
770PROCopenmain
780PROCwindname(2,PIC$)
790DIM TRASP% 256, REPS% 256
800FORL%=0 TO 255:REPS%?L%=L%:NEXT
810FORL%=0 TO 252 STEP 4:TRASP%!L%=0:NEXT
820DIM FONT$(255),FONTT$(64)
830FONTB%=0:SREP%=255
840MMX%=1:MMY%=1:MOP%=FALSE:KUKE%=FALSE:KUKD%=0:KUKL%=-1
850ENDPROC
860
870DEFPROCloadvars
880F%=OPENIN("<Archrome$Dir>.Vars")
890INPUT#F%,backuppic,fillmask,getpicbyte,getbrushbyte,setpicbyte,pixaverage,tintarea,averagebrush,tintbrush,findchangebox,graduatedfill,colrep,patfill,rgbcont,greyscale,rotate,transarea
900CLOSE#F%
910backuppic+=CODE%:fillmask+=CODE%:getpicbyte+=CODE%:getbrushbyte+=CODE%:setpicbyte+=CODE%:pixaverage+=CODE%:tintarea+=CODE%:averagebrush+=CODE%:tintbrush+=CODE%:findchangebox+=CODE%:graduatedfill+=CODE%:colrep+=CODE%
920patfill+=CODE%:rgbcont+=CODE%:greyscale+=CODE%:rotate+=CODE%:transarea+=CODE%
930ENDPROC
940
950DEFPROCloadfonts
960N%=-1
970FONT$(0)="System Font"
980SYS "XOS_ReadVarVal","Font$Path",IO%,256,,3 TO ,,N% ;err%
990IF (err% AND 1) THEN FONTS%=0:ENDPROC
1000FP%=0:FONTS%=0
1010REPEAT
1020SYS "Font_ListFonts",,IO%,FP%,-1 TO ,,FP%
1030FONT$(FONTS%+1)=$IO%:FONTS%+=1
1040UNTIL FP%=-1
1050FONTS%-=1
1060SYS "Font_ReadFontMax" TO B%,C%,D%,E%,F%,G%
1070PROCseticon(16,12,STR$(B% DIV 1024)):PROCseticon(16,13,STR$(C% DIV 1152)):PROCseticon(16,14,STR$(D% DIV 1152)):PROCseticon(16,15,STR$(E% DIV 1152)):PROCseticon(16,16,STR$(F% DIV 1152)):PROCseticon(16,17,STR$(G% DIV 1152))
1080ENDPROC
1090
1100DEFPROCloadsprites
1110DIM SPRITES% 2000
1120!SPRITES%=2000:SPRITES%!4=0:SPRITES%!8=16:SPRITES%!12=16:SYS &2E,266,SPRITES%,"<Archrome$Dir>.!Sprites"
1130ENDPROC
1140
1150DEFPROCaction
1160REPEAT
1170PROCpoll
1180UNTIL (REAS%=17 OR REAS%=18) AND BLK%!16=0
1190ENDPROC
1200
1210DEFPROCdie:OP%=0:PROCspbuf(0)
1220SYS "Wimp_CloseDown",HAND%,!TAS%
1230END
1240ENDPROC
1250
1260DEFPROCpoll
1270SYS "Wimp_GetPointerInfo",,BLK%
1280IF BLK%!12<>HAND%(2) THEN MBUS%=TRUE
1290!BLK%=%10011111110100110000
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 9:PROCmenu
1410WHEN 7:PROCdragfin
1420WHEN 17,18:PROCinmessage(BLK%!16)
1430ENDCASE
1440ENDPROC
1450
1460DEFPROCkuke:IF NOT KUKE% THEN ENDPROC
1470KULI%=10
1480MOUSE MX%,MY%,MH%:KP%=FALSE
1490IF NOT INKEY(-58) THEN 1530
1500IF KUKL%<>-58 THEN KUKL%=-58:KUKD%=0:MY%+=4:KP%=TRUE:GOTO 1530
1510KUKD%+=1:IF KUKD%<KULI% THEN KP%=TRUE:GOTO 1530
1520KUKD%=KULI%:MY%+=4:KP%=TRUE
1530IF NOT INKEY(-42) THEN 1570
1540IF KUKL%<>-58 THEN KUKL%=-58:KUKD%=0:MY%-=4:KP%=TRUE:GOTO 1570
1550KUKD%+=1:IF KUKD%<KULI% THEN KP%=TRUE:GOTO 1570
1560KUKD%=KULI%:MY%-=4:KP%=TRUE
1570IF NOT INKEY(-26) THEN 1610
1580IF KUKL%<>-58 THEN KUKL%=-58:KUKD%=0:MX%-=2:KP%=TRUE:GOTO 1610
1590KUKD%+=1:IF KUKD%<KULI% THEN KP%=TRUE:GOTO 1610
1600KUKD%=KULI%:MX%-=2:KP%=TRUE
1610IF NOT INKEY(-122) THEN 1650
1620IF KUKL%<>-58 THEN KUKL%=-58:KUKD%=0:MX%+=2:KP%=TRUE:GOTO 1650
1630KUKD%+=1:IF KUKD%<KULI% THEN KP%=TRUE:GOTO 1650
1640KUKD%=KULI%:MX%+=2:KP%=TRUE
1650IF NOT KP% THEN KUKL%=-1:KUKD%=0
1660MOUSE TO MX%,MY%
1670ENDPROC
1680
1690DEFPROCredraw
1700CASE !BLK% OF
1710WHEN HAND%(2):PROCredrawmain
1720WHEN HAND%(3):PROCredrawpal
1730WHEN HAND%(5):PROCredrawbrush
1740WHEN HAND%(11):PROCredrawpat
1750WHEN HAND%(12):PROCredrawedbru
1760WHEN HAND%(13):PROCredrawfill
1770WHEN HAND%(15):PROCredrawtback
1780WHEN HAND%(18):PROCredrawcolrep
1790WHEN HAND%(20):PROCredrawpatfill
1800ENDCASE
1810ENDPROC
1820
1830DEFPROCredrawbrush
1840SYS "Wimp_RedrawWindow",,BLK% TO FIN%
1850PROCgetbrushor
1860WHILE FIN%:PROCplotbrushes:SYS "Wimp_GetRectangle",,BLK% TO FIN%
1870ENDWHILE
1880ENDPROC
1890
1900DEFPROCredrawedbru
1910SYS "Wimp_RedrawWindow",,BLK% TO FIN%
1920PROCgetedbruor
1930WHILE FIN%:PROCplotedbru:SYS "Wimp_GetRectangle",,BLK% TO FIN%
1940ENDWHILE
1950ENDPROC
1960
1970DEFPROCredrawpatfill
1980SYS "Wimp_RedrawWindow",,BLK% TO FIN%
1990PROCgetpatfillor
2000WHILE FIN%:PROCplotpatfill:SYS "Wimp_GetRectangle",,BLK% TO FIN%
2010ENDWHILE
2020ENDPROC
2030
2040DEFPROCforcedrawpatfill:SYS "Wimp_ForceRedraw",HAND%(20),0,-108,1100,0:ENDPROC
2050
2060DEFPROCforcedrawedbru(x1%,y1%,x2%,y2%)
2070!BLK%=HAND%(12)
2080BLK%!4=x1%
2090BLK%!8=y1%
2100BLK%!12=x2%
2110BLK%!16=y2%
2120SYS "Wimp_UpdateWindow",,BLK% TO FIN%
2130PROCgetedbruor
2140WHILE FIN%
2150PROCplotedbru
2160SYS "Wimp_GetRectangle",,BLK% TO FIN%
2170ENDWHILE
2180ENDPROC
2190
2200DEFPROCforcedrawbrush
2210!BLK%=HAND%(5)
2220BLK%!4=0
2230BLK%!8=-260
2240BLK%!12=384
2250BLK%!16=0
2260SYS "Wimp_UpdateWindow",,BLK% TO FIN%
2270PROCgetbrushor
2280WHILE FIN%
2290PROCplotbrushes
2300SYS "Wimp_GetRectangle",,BLK% TO FIN%
2310ENDWHILE
2320ENDPROC
2330
2340DEFPROCplot256sprite(SPA%,SPI$,POX%,POY%)
2350IF MODE<>15 THEN GOTO 2370
2360!SCALE%=1:SCALE%!4=1:SCALE%!8=1:SCALE%!12=1:SYS "OS_SpriteOp",290,SPA%,SPI$,POX%,POY%:ENDPROC
2370IF MODE<>ESM% THEN ESM%=MODE:EPM%=MODE:SYS&40740,15,0,-1,-1,PIXTAB%
2380SYS&35,-1,4 TO ,,E%
2390IF E%<1 THEN SX%=2^(1-E%):!SCALE%=SX%:SCALE%!8=1 ELSE SX%=2^(E%-1):!SCALE%=1:SCALE%!8=SX%
2400SCALE%!4=1:SCALE%!12=1
2410SYS "OS_SpriteOp",308,SPA%,SPI$,POX%,POY%,0,SCALE%,PIXTAB%
2420ENDPROC
2430
2440DEFPROCplotpatfill
2450FORL%=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
2460NEXT
2470ENDPROC
2480
2490DEFPROCplotbrushes
2500FORL%=1 TO 12
2510BLK%!400=HAND%(5):BLK%!404=L%-1:SYS "Wimp_GetIconState",,BLK%+400
2520PROCplot256sprite(BRUSH%,STR$L%,WOX%+(BLK%!408)+2,WOY%+(260+(BLK%!412))+4)
2530IF SELBR%=L% THEN PROCcol(48,192,3):RECTANGLE FILL WOX%+(BLK%!408)+2,WOY%+(260+(BLK%!412))+4,64,60
2540NEXT
2550ENDPROC
2560
2570DEFPROCplotedbru
2580FORL%=1 TO 12
2590BLK%!400=HAND%(12):BLK%!404=L%-1:SYS "Wimp_GetIconState",,BLK%+400
2600PROCplot256sprite(BRUSH%,STR$L%,WOX%+((L%-1)*64)+32,WOY%+20)
2610IF EDBR%=L% THEN PROCcol(48,192,3):RECTANGLE FILL WOX%+((L%-1)*64)+32,WOY%+20,64,60
2620NEXT
2630!SCALE%=(!SCALE%)*12:SCALE%!4=8
2640IF MODE<>15 THEN SYS "OS_SpriteOp",308,BRUSH%,STR$EDBR%,WOX%+28,WOY%+112,0,SCALE%,PIXTAB% ELSE SYS "OS_SpriteOp",308,BRUSH%,STR$EDBR%,WOX%+28,WOY%+112,0,SCALE%
2650EX%=WOX%+28:EY%=WOY%+112: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
2660ENDPROC
2670
2680DEFPROCforcedrawmain
2690!BLK%=HAND%(2)
2700BLK%!4=0
2710BLK%!8=-936*ZOOM%
2720BLK%!12=1236*ZOOM%
2730BLK%!16=0
2740SYS "Wimp_UpdateWindow",,BLK% TO FIN%
2750PROCgetor
2760WHILE FIN%
2770PROCplotpic
2780SYS "Wimp_GetRectangle",,BLK% TO FIN%
2790ENDWHILE
2800ENDPROC
2810
2820DEFPROCquickdrawmain:IF NOT VACB% THEN ENDPROC
2830!BLK%=HAND%(2)
2840BLK%!4=CBMINX%
2850BLK%!8=CBMINY%
2860BLK%!12=CBMAXX%
2870BLK%!16=CBMAXY%
2880SYS "Wimp_UpdateWindow",,BLK% TO FIN%
2890PROCgetor
2900WHILE FIN%
2910PROCplotpic
2920SYS "Wimp_GetRectangle",,BLK% TO FIN%
2930ENDWHILE
2940ENDPROC
2950
2960DEFPROCinpic:IF IP% THEN ENDPROC
2970IP%=TRUE
2980SYS "OS_SpriteOp",316,PIC%,"PIC" TO V1,V2,V3,V4
2990SYS "OS_ChangedBox",2
3000SYS "OS_ChangedBox",1
3010REM GCOL3,63:LINE 300,300,320,320:LINE 300,300,320,320
3020VDU23,6:FORL%=1 TO 5:VDU PAT%(L%):NEXT:VDU 0|
3030SYS6,163,242,PALE%
3040ENDPROC
3050
3060DEFPROCinbackup:SYS "OS_SpriteOp",316,SPBUF%,"PIC" TO B1,B2,B3,B4:ENDPROC
3070
3080DEFPROCinsprite(ma%,sa%,sn$):SYS &2E,316+ma%,sa%,sn$ TO IS1,IS2,IS3,IS4:ENDPROC
3090
3100DEFPROCoutsprite:SYS &2E,IS1,IS2,IS3,IS4:ENDPROC
3110
3120DEFPROCoutbackup:SYS "OS_SpriteOp",B1,B2,B3,B4:ENDPROC
3130
3140DEFPROCoutpic:IF NOT IP% THEN ENDPROC
3150IP%=FALSE
3160SYS "OS_ChangedBox",-1 TO ,CBA%
3170IF 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
3180CBMINX%=CBA%!4:CBMINX%=CBMINX%*ZOOM%*2
3190CBMINY%=CBA%!8:CBMINY%=(-936+(CBMINY%*4))*ZOOM%
3200CBMAXX%=CBA%!12:CBMAXX%=CBMAXX%*ZOOM%*2
3210CBMAXY%=CBA%!16:CBMAXY%=(-936+(CBMAXY%*4))*ZOOM%
3220CBMAXX%+=4*ZOOM%
3230CBMAXY%+=4*ZOOM%
3240SYS "OS_ChangedBox"
3250SYS "OS_SpriteOp",V1,V2,V3,V4
3260ENDPROC
3270
3280DEFPROCredrawmain
3290IF FUSE%=32 THEN
3300IF FONT%<>0 AND EFM%<>-1 THEN
3310IF MODE<>EFM% THEN PROCinpic:SYS "ColourTrans_SetFontColours",FHAND%,BPAL%,FPAL%,14:PROCoutpic:EFM%=MODE
3320ENDIF
3330ENDIF
3340SYS "Wimp_RedrawWindow",,BLK% TO FIN%
3350PROCgetor
3360WHILE FIN%:PROCplotpic:SYS "Wimp_GetRectangle",,BLK% TO FIN%
3370ENDWHILE
3380ENDPROC
3390
3400DEFPROCplotpic
3410IF MODE=15 AND ZOOM%=1 THEN SYS "OS_SpriteOp",290,PIC%,"PIC",WOX%,WOY%:PROCgrid:ENDPROC
3420IF MODE<>ESM% THEN ESM%=MODE:EPM%=MODE:SYS&40740,15,0,-1,-1,PIXTAB%
3430SYS&35,-1,4 TO ,,E%
3440IF E%<1 THEN SX%=2^(1-E%):!SCALE%=SX%:SCALE%!8=1 ELSE SX%=2^(E%-1):!SCALE%=1:SCALE%!8=SX%
3450!SCALE%=(!SCALE%)*ZOOM%
3460SCALE%!4=ZOOM%
3470SCALE%!12=1
3480IF MODE=15 THEN TPIXTAB%=0 ELSE TPIXTAB%=PIXTAB%
3490SYS "OS_SpriteOp",308,PIC%,"PIC",WOX%,WOY%,0,SCALE%,TPIXTAB%:PROCgrid:ENDPROC
3500
3510DEFPROCgrid:IF GRCO%=-1 OR (2*GRWI%*ZOOM%)<16 OR (4*GRHE%*ZOOM%)<16 THEN ENDPROC
3520PROCgridcol
3530LOCAL X%,Y%
3540X%=(((BLK%!28)-WOX%) DIV (ZOOM%*(2*GRWI%)))*(2*GRWI%*ZOOM%)
3550Y%=(((BLK%!32)-WOY%) DIV (ZOOM%*(4*GRHE%)))*(4*GRHE%*ZOOM%)
3560XOF%=(GRWI%-GRBX%)*2*ZOOM%
3570YOF%=(GRHE%-GRBY%)*4*ZOOM%
3580X%+=WOX%-XOF%
3590Y%+=WOY%-YOF%
3600REPEAT:LINE X%,(BLK%!32),X%,(BLK%!40):X%+=(2*GRWI%*ZOOM%):UNTIL X%>(BLK%!36)
3610REPEAT:LINE (BLK%!28),Y%,(BLK%!36),Y%:Y%+=(4*GRHE%*ZOOM%):UNTIL Y%>(BLK%!40)
3620ENDPROC
3630
3640DEFPROCplotpal(PTU%)
3650PROCcol(63,192,0)
3660REM VDU4:PRINT WOX%,WOY%
3670IF MODE<>15 THEN GOTO 3700
3680SYS "OS_SpriteOp",290,PTU%,"Palette",WOX%,WOY%:IF PTU%=PAL% THEN RECTANGLE WOX%+((COL% MOD 32)*24),WOY%+((COL% DIV 32)*28),24,28
3690ENDPROC
3700IF MODE<>EPM% THEN ESM%=MODE:EPM%=MODE:SYS&40740,15,0,-1,-1,PIXTAB%
3710SYS&35,-1,4 TO ,,E%
3720IF E%<1 THEN SX%=2^(1-E%):!SCALE%=SX%:SCALE%!8=1 ELSE SX%=2^(E%-1):!SCALE%=1:SCALE%!8=SX%
3730SCALE%!4=1
3740SCALE%!12=1
3750SYS "OS_SpriteOp",308,PTU%,"Palette",WOX%,WOY%,0,SCALE%,PIXTAB%
3760IF PTU%=PAL% THEN RECTANGLE WOX%+((COL% MOD 32)*24),WOY%+((COL% DIV 32)*28),24,28
3770ENDPROC
3780
3790DEFPROCtrasp(TC%)
3800TRASP%?TC%=(TRASP%?TC%) EOR 1
3810SYS "OS_SpriteOp",316,PAL%,"Palette" TO V1,V2,V3,V4
3820TX%=((TC% MOD 32)*24):TY%=((TC% DIV 32)*28)
3830IF (TRASP%?TC%)=0 THEN GCOL0,PALTAB%?(TC%*2) TINT PALTAB%?((TC%*2)+1) ELSE PROCanticol(PALTAB%?(TC%*2),PALTAB%?((TC%*2)+1),0)
3840LINE TX%+6,TY%+20,TX%+18,TY%+20:LINE TX%+12,TY%+8,TX%+12,TY%+20
3850SYS "OS_SpriteOp",V1,V2,V3,V4
3860ENDPROC
3870
3880DEFPROCredrawpal
3890SYS "Wimp_RedrawWindow",,BLK% TO FIN%
3900PROCgetpalor
3910WHILE FIN%:PROCplotpal(PAL%):SYS "Wimp_GetRectangle",,BLK% TO FIN%
3920ENDWHILE
3930ENDPROC
3940
3950DEFPROCredrawtback
3960SYS "Wimp_RedrawWindow",,BLK% TO FIN%
3970PROCgetpalor
3980WHILE FIN%:PROCplotpal(OPAL%)
3990PROCcol(63,192,0):RECTANGLE WOX%+((FONTB% MOD 32)*24),WOY%+((FONTB% DIV 32)*28),24,28
4000SYS "Wimp_GetRectangle",,BLK% TO FIN%
4010ENDWHILE
4020ENDPROC
4030
4040DEFPROCredrawcolrep
4050SYS "Wimp_RedrawWindow",,BLK% TO FIN%
4060PROCgetpalor:WOY%-=328
4070WHILE FIN%:WOY%+=290:PROCplotpal(OPAL%):PROCcol(0,0,0):LINE WOX%,WOY%+224,WOX%+770,WOY%+224:WOY%-=290
4080PROCplotpal(SPBUF%):PROCcol(0,0,0):LINE WOX%,WOY%+224,WOX%+770,WOY%+224
4090PROCcol(63,192,0):RECTANGLE WOX%+((SREP% MOD 32)*24),WOY%+((SREP% DIV 32)*28),24,28
4100SYS "Wimp_GetRectangle",,BLK% TO FIN%
4110ENDWHILE
4120ENDPROC
4130
4140DEFPROCforcedrawcolrep
4150!BLK%=HAND%(18)
4160BLK%!4=0
4170BLK%!8=-556
4180BLK%!12=770
4190BLK%!16=0
4200SYS "Wimp_UpdateWindow",,BLK% TO FIN%
4210PROCgetpalor:WOY%-=328
4220WHILE FIN%
4230WOY%+=290:PROCplotpal(OPAL%):PROCcol(0,0,0):LINE WOX%,WOY%+224,WOX%+770,WOY%+224:WOY%-=290
4240PROCplotpal(SPBUF%):PROCcol(0,0,0):LINE WOX%,WOY%+224,WOX%+770,WOY%+224
4250PROCcol(63,192,0):RECTANGLE WOX%+((SREP% MOD 32)*24),WOY%+((SREP% DIV 32)*28),24,28
4260SYS "Wimp_GetRectangle",,BLK% TO FIN%
4270ENDWHILE
4280ENDPROC
4290
4300DEFFNcecf
4310IF FNhigh(11,18) THEN =1
4320IF FNhigh(11,19) THEN =2
4330IF FNhigh(11,20) THEN =3
4340IF FNhigh(11,21) THEN =4
4350=0
4360
4370DEFPROCredrawpat
4380SYS "Wimp_RedrawWindow",,BLK% TO FIN%
4390PROCgetpator
4400WHILE FIN%:PROCplotpal(OPAL%):PROCcol(0,0,0):LINE WOX%,WOY%+224,WOX%+770,WOY%+224
4410CECF%=FNcecf:FORK%=0 TO 7:L%=ECF%(K%+1,CECF%)
4420PE%=BTC%?L%:PROCcol(PALTAB%?(PE%*2),PALTAB%?((PE%*2)+1),0):RECTANGLE FILL WOX%-146,(WOY%+276)-(K%*40),38,36
4430NEXT
4440SYS "Wimp_GetRectangle",,BLK% TO FIN%
4450ENDWHILE
4460ENDPROC
4470
4480DEFFNgrafilno
4490IF FNhigh(13,17) THEN =0
4500IF FNhigh(13,18) THEN =1
4510IF FNhigh(13,19) THEN =2
4520IF FNhigh(13,20) THEN =3
4530IF FNhigh(13,21) THEN =4
4540=-1
4550
4560DEFPROCredrawfill
4570SYS "Wimp_RedrawWindow",,BLK% TO FIN%
4580PROCgetpator:WOY%-=140:WOX%-=140
4590WHILE FIN%:WOY%+=232:WOX%+=380:PROCplotpal(OPAL%):PROCcol(0,0,0):LINE WOX%,WOY%+224,WOX%+770,WOY%+224:WOX%-=140:WOY%-=140
4600FIX%=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)
4610RECTANGLE FILL FIX%,WOY%-28,42,32:FIX%+=44:NEXT
4620SYS "Wimp_GetRectangle",,BLK% TO FIN%
4630ENDWHILE
4640ENDPROC
4650
4660DEFPROCforcedrawfill
4670!BLK%=HAND%(13)
4680BLK%!4=0
4690BLK%!8=-500
4700BLK%!12=1200
4710BLK%!16=-360
4720SYS "Wimp_UpdateWindow",,BLK% TO FIN%
4730PROCgetpator:WOY%-=48:WOX%+=100
4740FIX%=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)
4750RECTANGLE FILL FIX%,WOY%-28,42,32:FIX%+=44:NEXT
4760WHILE FIN%
4770SYS "Wimp_GetRectangle",,BLK% TO FIN%
4780ENDWHILE
4790ENDPROC
4800
4810DEFPROCforcedrawpat
4820!BLK%=HAND%(11)
4830BLK%!4=0
4840BLK%!8=-356
4850BLK%!12=100
4860BLK%!16=0
4870SYS "Wimp_UpdateWindow",,BLK% TO FIN%
4880PROCgetpator
4890WHILE FIN%
4900PROCplotpal(OPAL%):PROCcol(0,0,0):LINE WOX%,WOY%+224,WOX%+770,WOY%+224
4910CECF%=FNcecf
4920FOR RK%=0 TO 7
4930L%=ECF%(RK%+1,CECF%)
4940PE%=BTC%?L%:PROCcol(PALTAB%?(PE%*2),PALTAB%?((PE%*2)+1),0):RECTANGLE FILL WOX%-146,(WOY%+276)-(RK%*40),38,36
4950RECTANGLE FILL WOX%-146,(WOY%+276)-(RK%*40),38,36
4960NEXT
4970SYS "Wimp_GetRectangle",,BLK% TO FIN%
4980ENDWHILE
4990ENDPROC
5000
5010DEFFNctb(co%,ti%):by%=-1:FORL%=0 to 255
5020
5030DEFPROCdrawpicinit
5040!BLK%=HAND%(2)
5050BLK%!4=0
5060BLK%!8=-936
5070BLK%!12=1236
5080BLK%!16=0
5090SYS "Wimp_UpdateWindow",,BLK% TO FIN%
5100PROCgetor
5110ENDPROC
5120
5130DEFPROCforcedrawpal(PTU%)
5140!BLK%=HAND%(3)
5150BLK%!4=0
5160BLK%!8=-228
5170BLK%!12=770
5180BLK%!16=0
5190SYS "Wimp_UpdateWindow",,BLK% TO FIN%
5200PROCgetpalor
5210WHILE FIN%
5220PROCplotpal(PTU%)
5230SYS "Wimp_GetRectangle",,BLK% TO FIN%
5240ENDWHILE
5250ENDPROC
5260
5270DEFPROCforcedrawtback
5280!BLK%=HAND%(15)
5290BLK%!4=0
5300BLK%!8=-228
5310BLK%!12=770
5320BLK%!16=0
5330SYS "Wimp_UpdateWindow",,BLK% TO FIN%
5340PROCgetpalor
5350WHILE FIN%
5360PROCplotpal(OPAL%)
5370PROCcol(63,192,0):RECTANGLE WOX%+((FONTB% MOD 32)*24),WOY%+((FONTB% DIV 32)*28),24,28
5380SYS "Wimp_GetRectangle",,BLK% TO FIN%
5390ENDWHILE
5400ENDPROC
5410
5420DEFPROCgetpalor
5430WOX%=BLK%!4-BLK%!20
5440WOY%=(BLK%!16-BLK%!24)-228
5450ENDPROC
5460
5470DEFPROCgetpator
5480WOX%=(BLK%!4-BLK%!20)+180
5490WOY%=(BLK%!16-BLK%!24)-340
5500ENDPROC
5510
5520DEFPROCpicpoll
5530SYS "Wimp_GetPointerInfo",,BLK%
5540REM VDU4:PRINTTAB(0,0);MBUS%;",";BLK%!8;" ":VDU5
5550IF MBUS% AND BLK%!8<>0 THEN ENDPROC ELSE MBUS%=FALSE
5560IF BLK%!12<HAND%(0) OR BLK%!12>HAND%(NOWIND%) THEN IDRAG%=(BLK%!8<>0)
5570IF BLK%!8=0 THEN IDRAG%=FALSE
5580REM VDU4:PRINTTAB(0,0);BLK%!16;" "
5590IF BLK%!12<>HAND%(2) OR BLK%!16<>-1 THEN ENDPROC
5600IF BLK%!8<>0 AND IDRAG% THEN ENDPROC
5610X%=!BLK%:Y%=BLK%!4:BUT%=BLK%!8
5620IF BUT%=2 THEN ENDPROC
5630CASE FUSE% OF
5640WHEN 1:IF FUST%=0 AND BUT%<>0 THEN PROCpicpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:GOTO 8290
5650IF BUT%=0 OR FUST%=0 THEN FUST%=0:GOTO 8290
5660PROCpicpos:PROCinpic:PROCsetcol:PROCl(X%(0),Y%(0),X%,Y%):PROCoutpic
5670PROCquickdrawmain
5680X%(0)=X%:Y%(0)=Y%
5690WHEN 2:IF FUST%=0 AND BUT%<>0 THEN PROCpicpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:OX%=X%:OY%=Y%:PROCinpic:GCOL3,63 TINT 192:LINE X%(0),Y%(0),OX%,OY%:PROCoutpic:PROCquickdrawmain:GOTO 8290
5700IF FUST%=0 THEN GOTO 8290
5710IF BUT%=1 THEN PROCinpic:GCOL3,63 TINT 192:LINE X%(0),Y%(0),OX%,OY%:PROCpicpos:X%(0)=X%:Y%(0)=Y%:OX%=X%:OY%=Y%:FUST%=1:GCOL3,63 TINT 192:LINE X%(0),Y%(0),OX%,OY%:PROCoutpic:PROCquickdrawmain:GOTO 8290
5720IF BUT%=4 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCpicpos:PROCsetcol:PROCl(X%(0),Y%(0),X%,Y%):X%(0)=X%:Y%(0)=Y%:OX%=X%:OY%=Y%:PROCeoc:LINE X%(0),Y%(0),X%,Y%:PROCoutpic:PROCquickdrawmain:GOTO 8290
5730PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 8290
5740PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:OX%=X%:OY%=Y%:LINE X%(0),Y%(0),X%,Y%:PROCoutpic:PROCquickdrawmain
5750WHEN 4:IF FUST%=0 THEN PROCpaintscale:PROCpicpos:PROCinpic:PROCeorback:PROCpaintbrush(X%,Y%):PROCoutpic:PROCquickdrawmain:OX%=X%:OY%=Y%:FUST%=1:GOTO 8290
5760PROCpicpos
5770IF X%<>OX% OR Y%<>OY% THEN PROCpaintscale:PROCinpic:PROCeorback:PROCpaintbrush(OX%,OY%):PROCpaintbrush(X%,Y%):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain
5780WHEN 5:IF 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:GOTO 8290
5790IF FUST%=0 THEN GOTO 8290
5800IF 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:GOTO 8290
5810IF BUT%=4 AND (OX%<>X%(0) OR OY%<>Y%(0)) THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCpicpos:PROCsetcol:PROCr(X%(0),Y%(0),X%-X%(0),Y%-Y%(0)):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=0:GOTO 8290
5820PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 8290
5830PROCinpic: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
5840WHEN 6:IF FUST%=0 AND BUT%<>0 THEN PROCpicpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:OX%=X%:OY%=Y%:PROCinpic:PROCeoc:RECTANGLE FILL X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain:GOTO 8290
5850IF FUST%=0 THEN GOTO 8290
5860IF BUT%=1 THEN PROCinpic:PROCeoc:RECTANGLE FILL X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCpicpos:OX%=X%:OY%=Y%:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 8290
5870IF BUT%=4 AND (OX%<>X%(0) OR OY%<>Y%(0)) THEN PROCinpic:PROCeoc:RECTANGLE FILL X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCpicpos:PROCsetcol:RECTANGLE FILL X%(0),Y%(0),X%-X%(0),Y%-Y%(0):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=0:GOTO 8290
5880PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 8290
5890PROCinpic:PROCeoc:RECTANGLE FILL X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):OX%=X%:OY%=Y%:RECTANGLE FILL X%(0),Y%(0),X%-X%(0),Y%-Y%(0):PROCoutpic:PROCquickdrawmain
5900WHEN 7:IF FUST%=0 AND BUT%<>0 THEN PROCpicpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:OX%=X%:OY%=Y%:PROCinpic:PROCeoc:CIRCLE X%(0),Y%(0),FNdist(OX%,OY%):PROCoutpic:PROCquickdrawmain:GOTO 8290
5910IF FUST%=0 THEN GOTO 8290
5920IF BUT%=1 THEN PROCinpic:PROCeoc:CIRCLE X%(0),Y%(0),FNdist(OX%,OY%):PROCpicpos:OX%=X%:OY%=Y%:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 8290
5930IF BUT%=4 AND (OX%<>X%(0) OR OY%<>Y%(0)) THEN PROCinpic:PROCeoc:CIRCLE X%(0),Y%(0),FNdist(OX%,OY%):PROCpicpos:PROCsetcol:CIRCLE X%(0),Y%(0),FNdist(X%,Y%):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=0:GOTO 8290
5940PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 8290
5950PROCinpic:PROCeoc:CIRCLE X%(0),Y%(0),FNdist(OX%,OY%):OX%=X%:OY%=Y%:CIRCLE X%(0),Y%(0),FNdist(X%,Y%):PROCoutpic:PROCquickdrawmain
5960WHEN 8:IF FUST%=0 AND BUT%<>0 THEN PROCpicpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:OX%=X%:OY%=Y%:PROCinpic:PROCeoc:CIRCLE FILL X%(0),Y%(0),FNdist(OX%,OY%):PROCoutpic:PROCquickdrawmain:GOTO 8290
5970IF FUST%=0 THEN GOTO 8290
5980IF BUT%=1 THEN PROCinpic:PROCeoc:CIRCLE FILL X%(0),Y%(0),FNdist(OX%,OY%):PROCpicpos:OX%=X%:OY%=Y%:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 8290
5990IF BUT%=4 AND (OX%<>X%(0) OR OY%<>Y%(0)) THEN PROCinpic:PROCeoc:CIRCLE FILL X%(0),Y%(0),FNdist(OX%,OY%):PROCpicpos:PROCsetcol:CIRCLE FILL X%(0),Y%(0),FNdist(X%,Y%):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=0:GOTO 8290
6000PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 8290
6010PROCinpic:PROCeoc:CIRCLE FILL X%(0),Y%(0),FNdist(OX%,OY%):OX%=X%:OY%=Y%:CIRCLE FILL X%(0),Y%(0),FNdist(X%,Y%):PROCoutpic:PROCquickdrawmain
6020WHEN 9: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:GOTO 8290
6030IF FUST%=0 THEN GOTO 8290
6040IF 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 8290
6050IF BUT%=1 AND FUST%=2 THEN PROCinpic:PROCeoc:PROCtri(5,OX%,OY%):PROCpicpos:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 8290
6060IF BUT%=4 AND (OX%<>X%(0) OR OY%<>Y%(0)) AND FUST%=1 THEN PROCinpic:PROCeoc:X%(1)=OX%:Y%(1)=OY%:PROCpicpos:OX%=X%:OY%=Y%:LINE X%(1),Y%(1),X%,Y%:LINE X%(0),Y%(0),X%,Y%:PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=2:GOTO 8290
6070IF BUT%=4 AND (OX%<>X%(1) OR OY%<>Y%(1)) AND FUST%=2 THEN PROCinpic:PROCeoc:PROCpicpos:PROCtri(5,OX%,OY%):PROCsetcol:PROCtri(0,X%,Y%):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=0:GOTO 8290
6080PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 8290
6090IF 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
6100IF FUST%=2 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:LINE X%(1),Y%(1),OX%,OY%:OX%=X%:OY%=Y%:LINE X%(0),Y%(0),X%,Y%:LINE X%(1),Y%(1),X%,Y%:PROCoutpic:PROCquickdrawmain
6110WHEN 10: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:GOTO 8290
6120IF FUST%=0 THEN GOTO 8290
6130IF 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 8290
6140IF BUT%=1 AND FUST%=2 THEN PROCinpic:PROCeoc:PROCtri(85,OX%,OY%):PROCpicpos:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 8290
6150IF 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%:PROCtri(85,X%,Y%):PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=2:GOTO 8290
6160IF BUT%=4 AND (OX%<>X%(1) OR OY%<>Y%(1)) AND FUST%=2 THEN PROCinpic:PROCeoc:PROCpicpos:PROCtri(85,OX%,OY%):PROCsetcol:PROCtri(85,X%,Y%):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=0:GOTO 8290
6170PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 8290
6180IF 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
6190IF FUST%=2 THEN PROCinpic:PROCeoc:PROCtri(85,OX%,OY%):OX%=X%:OY%=Y%:PROCtri(85,X%,Y%):PROCoutpic:PROCquickdrawmain
6200WHEN 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:GOTO 8290
6210IF FUST%=0 THEN GOTO 8290
6220IF 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 8290
6230IF BUT%=1 AND FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&C5,OX%,OY%):PROCpicpos:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 8290
6240IF 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 8290
6250IF 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 8290
6260PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 8290
6270IF 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
6280IF FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&C5,OX%,OY%):OX%=X%:OY%=Y%:PROCelip(&C5,X%,Y%):PROCoutpic:PROCquickdrawmain
6290WHEN 12: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:GOTO 8290
6300IF FUST%=0 THEN GOTO 8290
6310IF 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 8290
6320IF BUT%=1 AND FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&CD,OX%,OY%):PROCpicpos:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 8290
6330IF 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(&CD,X%,Y%):PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=2:GOTO 8290
6340IF BUT%=4 AND (OX%<>X%(1) OR OY%<>Y%(1)) AND FUST%=2 THEN PROCinpic:PROCeoc:PROCpicpos:PROCelip(&CD,OX%,OY%):PROCsetcol:PROCelip(&CD,X%,Y%):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=0:GOTO 8290
6350PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 8290
6360IF 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
6370IF FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&CD,OX%,OY%):OX%=X%:OY%=Y%:PROCelip(&CD,X%,Y%):PROCoutpic:PROCquickdrawmain
6380WHEN 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:GOTO 8290
6390IF FUST%=0 THEN GOTO 8290
6400IF 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 8290
6410IF BUT%=1 AND FUST%=2 THEN PROCinpic:PROCeoc:PROCpara(0,0,OX%,OY%):PROCpicpos:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 8290
6420IF 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 8290
6430IF 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 8290
6440PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 8290
6450IF 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
6460IF FUST%=2 THEN PROCinpic:PROCeoc:PROCpara(0,0,OX%,OY%):OX%=X%:OY%=Y%:PROCpara(0,0,X%,Y%):PROCoutpic:PROCquickdrawmain
6470WHEN 14: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:GOTO 8290
6480IF FUST%=0 THEN GOTO 8290
6490IF 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 8290
6500IF BUT%=1 AND FUST%=2 THEN PROCinpic:PROCeoc:PROCpara(0,1,OX%,OY%):PROCpicpos:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 8290
6510IF 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,1,X%,Y%):PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=2:GOTO 8290
6520IF BUT%=4 AND (OX%<>X%(1) OR OY%<>Y%(1)) AND FUST%=2 THEN PROCinpic:PROCeoc:PROCpicpos:PROCpara(0,1,OX%,OY%):PROCsetcol:PROCpara(0,1,X%,Y%):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=0:GOTO 8290
6530PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 8290
6540IF 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
6550IF FUST%=2 THEN PROCinpic:PROCeoc:PROCpara(0,1,OX%,OY%):OX%=X%:OY%=Y%:PROCpara(0,1,X%,Y%):PROCoutpic:PROCquickdrawmain
6560WHEN 15: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:GOTO 8290
6570IF FUST%=0 THEN GOTO 8290
6580IF 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 8290
6590IF BUT%=1 AND FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&A5,OX%,OY%):PROCpicpos:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 8290
6600IF 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(&A5,X%,Y%):PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=2:GOTO 8290
6610IF BUT%=4 AND (OX%<>X%(1) OR OY%<>Y%(1)) AND FUST%=2 THEN PROCinpic:PROCeoc:PROCpicpos:PROCelip(&A5,OX%,OY%):PROCsetcol:PROCelip(&A5,X%,Y%):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=0:GOTO 8290
6620PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 8290
6630IF 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
6640IF FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&A5,OX%,OY%):OX%=X%:OY%=Y%:PROCelip(&A5,X%,Y%):PROCoutpic:PROCquickdrawmain
6650WHEN 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:GOTO 8290
6660IF FUST%=0 THEN GOTO 8290
6670IF 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 8290
6680IF BUT%=1 AND FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&B5,OX%,OY%):PROCpicpos:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 8290
6690IF 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 8290
6700IF 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 8290
6710PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 8290
6720IF 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
6730IF FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&B5,OX%,OY%):OX%=X%:OY%=Y%:PROCelip(&B5,X%,Y%):PROCoutpic:PROCquickdrawmain
6740WHEN 17: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:GOTO 8290
6750IF FUST%=0 THEN GOTO 8290
6760IF 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 8290
6770IF BUT%=1 AND FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&AD,OX%,OY%):PROCpicpos:FUST%=0:PROCoutpic:PROCquickdrawmain:PROCletgo:GOTO 8290
6780IF 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(&AD,X%,Y%):PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=2:GOTO 8290
6790IF BUT%=4 AND (OX%<>X%(1) OR OY%<>Y%(1)) AND FUST%=2 THEN PROCinpic:PROCeoc:PROCpicpos:PROCelip(&AD,OX%,OY%):PROCsetcol:PROCelip(&AD,X%,Y%):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=0:GOTO 8290
6800PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 8290
6810IF 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
6820IF FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&AD,OX%,OY%):OX%=X%:OY%=Y%:PROCelip(&AD,X%,Y%):PROCoutpic:PROCquickdrawmain
6830WHEN 19:IF FUST%<2 THEN PROCgrabpoll(0):GOTO 8290
6840IF BUT%=1 THEN PROCinpic:PROCpicpos:PROCpgrab(OX%,OY%,3):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:FUST%=0:PROCspinit:GOTO 8290
6850IF BUT%=4 THEN PROCinpic:PROCpicpos:PROCpgrab(OX%,OY%,3):PROCpgrab(X%,Y%,0):OX%=X%:OY%=Y%:PROCpgrab(OX%,OY%,3):PROCoutpic:PROCquickdrawmain:GOTO 8290
6860PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 8290
6870PROCinpic:PROCpgrab(OX%,OY%,3):OX%=X%:OY%=Y%:PROCpgrab(X%,Y%,3):PROCoutpic:PROCquickdrawmain
6880WHEN 18:IF FUST%<2 THEN PROCgrabpoll(1):GOTO 8290
6890IF BUT%=1 THEN PROCinpic:PROCpicpos:PROCpgrab(OX%,OY%,3):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:FUST%=0:PROCspinit:GOTO 8290
6900IF BUT%=4 THEN PROCinpic:PROCpicpos:PROCpgrab(OX%,OY%,3):PROCpgrab(X%,Y%,0):OX%=X%:OY%=Y%:PROCpgrab(OX%,OY%,3):PROCoutpic:PROCquickdrawmain:ENDPROC
6910PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 8290
6920PROCinpic:PROCpgrab(OX%,OY%,3):OX%=X%:OY%=Y%:PROCpgrab(X%,Y%,3):PROCoutpic:PROCquickdrawmain
6930WHEN 20:IF FUST%<2 THEN PROCrectpoll:GOTO 8290
6940PROCspbuf(FNspritesize(OX%-X%(0),OY%-Y%(0),1)):IF Q% THEN PROCspinit:PROCspbuferr
6950PROCinpic:GRN$="GRAB":SYS&2E,272,SPBUF%,"GRAB",,X%(0),Y%(0),OX%,OY%
6960SYS&2E,285,SPBUF%,"GRAB":GRABM%=8:PROCfillmask
6970SYS&2E,290,SPBUF%,"GRAB",X%(0),Y%(0),3+GRABM%
6980SYS&2E,303,SPBUF%,"GRAB":SYS&2E,290,SPBUF%,"GRAB",X%(0),Y%(0),GRABM%:PROCoutpic:FUST%=0:PROCspinit:PROCquickdrawmain
6990WHEN 21:IF FUST%<2 THEN PROCrectpoll:GOTO 8290
7000PROCspbuf(FNspritesize(OX%-X%(0),OY%-Y%(0),1)):IF Q% THEN PROCspinit:PROCspbuferr
7010PROCinpic:GRN$="GRAB":SYS&2E,272,SPBUF%,"GRAB",,X%(0),Y%(0),OX%,OY%
7020SYS&2E,285,SPBUF%,"GRAB":GRABM%=8:PROCfillmask
7030SYS&2E,290,SPBUF%,"GRAB",X%(0),Y%(0),3+GRABM%
7040SYS&2E,289,SPBUF%,"GRAB":SYS&2E,290,SPBUF%,"GRAB",X%(0),Y%(0),GRABM%:PROCoutpic:FUST%=0:PROCspinit:PROCquickdrawmain
7050WHEN 22:IF FUST%<2 THEN PROCrectpoll:GOTO 8290
7060PROCinpic:PROCsetcol:FORL%=0 TO 932 STEP 4
7070IF L%<Y%(0) OR L%>OY% THEN LINE 0,L%,1232,L%:GOTO 7100
7080IF X%(0)>0 THEN LINE 0,L%,X%(0)-2,L%
7090IF OY%<1232 THEN LINE OX%+2,L%,1232,L%
7100NEXT:PROCoutpic:FUST%=0:PROCquickdrawmain
7110WHEN 23:IF FUST%<2 THEN PROCrectpoll:GOTO 8290
7120IF FUCO%=0 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain:X%(1)=X%(0):Y%(1)=Y%(0):X%(2)=OX%:Y%(2)=OY%:FUST%=0:FUCO%=1:GOTO 8290
7130PROCspbuf(FNspritesize(X%(2)-X%(1),Y%(2)-Y%(1),ABS(FNhigh(8,14)))):IF Q% THEN PROCspinit:PROCspbuferr
7140PROCinpic:PROCeoc:RECTANGLE X%(1),Y%(1),X%(2)-X%(1),Y%(2)-Y%(1):GRN$="GRAB":SYS&2E,272,SPBUF%,"GRAB",,X%(1),Y%(1),X%(2),Y%(2)
7150IF FNhigh(8,14) THEN SYS&2E,285,SPBUF%,"GRAB":GRABM%=8:PROCfillmask ELSE GRABM%=0
7160PROCgrabflip:SCALE%!8=X%(2)-X%(1):SCALE%!12=Y%(2)-Y%(1):!SCALE%=OX%-X%(0):SCALE%!4=OY%-Y%(0)
7170SYS&2E,308,SPBUF%,"GRAB",X%(0),Y%(0),GRABM%,SCALE%:PROCoutpic:FUST%=0:FUCO%=0:PROCspinit:PROCquickdrawmain
7180WHEN 25:PROCinpic:GCOL3,63:PLOT69,300,300:PLOT69,300,300:PROCpicpos
7190IF X%=OX% AND Y%=OY% THEN 7210
7200PROCmapline
7210IF BUT%<>1 AND BUT%<>4 THEN PROCoutpic:PROCquickdrawmain:GOTO 8290
7220IF BUT%=4 THEN 7340
7230PROCeoc
7240CASE FUCO% OF
7250WHEN 2:LINE X%(1),Y%(1),X%,Y%
7260WHEN 3:LINE X%(1),Y%(1),X%(2),Y%(2):LINE X%(2),Y%(2),X%,Y%
7270WHEN 4:LINE X%(1),Y%(1),X%(2),Y%(2):LINE X%(2),Y%(2),X%(3),Y%(3):LINE X%(3),Y%(3),X%,Y%:LINE X%,Y%,X%(1),Y%(1)
7280WHEN 5:LINE X%(1),Y%(1),X%(2),Y%(2):LINE X%(2),Y%(2),X%(3),Y%(3):LINE X%(3),Y%(3),X%(4),Y%(4):LINE X%(4),Y%(4),X%(1),Y%(1)
7290WHEN 6:LINE X%(1),Y%(1),X%(2),Y%(2):LINE X%(2),Y%(2),X%(3),Y%(3):LINE X%(3),Y%(3),X%(4),Y%(4):LINE X%(4),Y%(4),X%(1),Y%(1):LINE X%(5),Y%(5),X%,Y%
7300WHEN 7:LINE X%(1),Y%(1),X%(2),Y%(2):LINE X%(2),Y%(2),X%(3),Y%(3):LINE X%(3),Y%(3),X%(4),Y%(4):LINE X%(4),Y%(4),X%(1),Y%(1):LINE X%(5),Y%(5),X%(6),Y%(6):LINE X%(6),Y%(6),X%,Y%
7310WHEN 8:LINE X%(1),Y%(1),X%(2),Y%(2):LINE X%(2),Y%(2),X%(3),Y%(3):LINE X%(3),Y%(3),X%(4),Y%(4):LINE X%(4),Y%(4),X%(1),Y%(1):LINE X%(5),Y%(5),X%(6),Y%(6):LINE X%(6),Y%(6),X%(7),Y%(7):LINE X%(7),Y%(7),X%,Y%:LINE X%(5),Y%(5),X%,Y%
7320ENDCASE
7330FUCO%=1:PROCletgo:PROCoutpic:PROCquickdrawmain:GOTO 8290
7340PROCeoc
7350IF FUCO%=8 THEN GOTO 7390
7360X%(FUCO%)=X%:Y%(FUCO%)=Y%:IF FUCO%<>4 THEN LINE X%(FUCO%),Y%(FUCO%),X%,Y%
7370IF FUCO%=3 OR FUCO%=7 THEN LINE X%(FUCO%-2),Y%(FUCO%-2),X%,Y%
7380OX%=X%:OY%=Y%:FUCO%+=1:PROCletgo:GOTO 8290
7390X%(8)=X%:Y%(8)=Y%:FORL%=1 TO 3:LINE X%(L%),Y%(L%),X%(L%+1),Y%(L%+1):LINE X%(L%+4),Y%(L%+4),X%(L%+5),Y%(L%+5):NEXT:LINE X%(1),Y%(1),X%(4),Y%(4):LINE X%(5),Y%(5),X%(8),Y%(8):FUCO%=1
7400PROCoutpic:PROCquickdrawmain:PROCpixelmap:GOTO 8290
7410WHEN 27:IF FUST%<2 THEN PROCrectpoll:GOTO 8290
7420PROCspinit:PROCspbuf(145*1024):IF Q% THEN PROCspbuferr
7430PROCbackuppic:PROCswapcorns
7440VARS!20=BTC%:VARS!24=PALTAB%
7450VARS!28=PIC%:VARS!32=SPBUF%
7460VARS!36=X%(0):VARS!40=Y%(0)
7470VARS!44=OX%:VARS!48=OY%
7480A%=VARS:SYS "Hourglass_On":CALL pixaverage:SYS "Hourglass_Off":PROCspinit:PROCforcedrawmain:FUST%=0
7490WHEN 28:IF FUST%<2 THEN PROCrectpoll:GOTO 8290
7500PROCswapcorns
7510VARS!20=BTC%:VARS!24=PALTAB%
7520VARS!28=PIC%
7530VARS!36=X%(0):VARS!40=Y%(0)
7540VARS!44=OX%:VARS!48=OY%
7550VARS!84=PALTAB%?(COL%*2):VARS!88=PALTAB%?((COL%*2)+1)
7560A%=VARS:SYS "Hourglass_On":CALL tintarea:SYS "Hourglass_Off":PROCforcedrawmain:FUST%=0
7570WHEN 29:IF FUST%=0 THEN PROCpaintscale2:PROCpicpos:PROCinpic:PROCeorback:PROCpaintbrush(X%,Y%):PROCoutpic:PROCquickdrawmain:OX%=X%:OY%=Y%:FUST%=1:GOTO 8290
7580PROCpicpos
7590IF X%<>OX% OR Y%<>OY% THEN PROCpaintscale2:PROCinpic:PROCeorback:PROCpaintbrush(OX%,OY%):PROCpaintbrush(X%,Y%):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain
7600WHEN 30:IF FUST%=0 THEN PROCpaintscale2:PROCpicpos:PROCinpic:PROCeorback:PROCpaintbrush(X%,Y%):PROCoutpic:PROCquickdrawmain:OX%=X%:OY%=Y%:FUST%=1:GOTO 8290
7610PROCpicpos
7620IF X%<>OX% OR Y%<>OY% THEN PROCpaintscale2:PROCinpic:PROCeorback:PROCpaintbrush(OX%,OY%):PROCpaintbrush(X%,Y%):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain
7630WHEN 32:IF FONT%<>0 THEN
7640PROCpicpos:IF BUT%=4 AND FUST%<>0 THEN PROCinbackup:SYS "Font_SetFont",FHAND%:SYS "Font_Paint",,TEXT$,16,X%,Y%:PROCoutbackup
7650IF FUST%<>0 AND (X%<>OX% OR Y%<>OY%) THEN PROCrestpic:PROCinpic:SYS "Font_SetFont",FHAND%:SYS "Font_Paint",,TEXT$,16,X%,Y%:PROCoutpic:PROCforcedrawmain:OX%=X%:OY%=Y%
7660ELSE
7670PROCpicpos:IF BUT%=4 AND FUST%<>0 THEN PROCinbackup:PROCostext(X%,Y%):PROCoutbackup
7680IF FUST%<>0 AND (X%<>OX% OR Y%<>OY%) THEN PROCrestpic:PROCinpic:PROCostext(X%,Y%):PROCoutpic:PROCforcedrawmain:OX%=X%:OY%=Y%
7690ENDIF
7700WHEN 31:IF FUST%<2 THEN PROCrectpoll:GOTO 8290
7710PROCswapcorns:FMINX%=X%(0):FMINY%=Y%(0):FMAXX%=OX%:FMAXY%=OY%
7720SYS "Hourglass_On":PROCfill:SYS "Hourglass_Off":FUST%=0
7730WHEN 33:IF FUST%<2 THEN PROCrectpoll:GOTO 8290
7740PROCswapcorns:FMINX%=X%(0):FMINY%=Y%(0):FMAXX%=OX%:FMAXY%=OY%
7750SYS "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
7760WHEN 34:IF FUST%=0 THEN 7780
7770IF BUT%=4 THEN PROCinpic:PROCpicpos:PROCpimport(OX%,OY%,3):PROCpimport(X%,Y%,0):OX%=X%:OY%=Y%:PROCpimport(OX%,OY%,3):PROCoutpic:PROCquickdrawmain:GOTO 8290
7780IF FUST%=0 THEN FUST%=1:PROCpicpos:OX%=X%:OY%=Y%:PROCinpic:PROCpimport(X%,Y%,3):PROCoutpic:PROCquickdrawmain:GOTO 8290
7790PROCpicpos:IF X%=OX% AND Y%=OY% THEN GOTO 8290
7800PROCinpic:PROCpimport(OX%,OY%,3):OX%=X%:OY%=Y%:PROCpimport(X%,Y%,3):PROCoutpic:PROCquickdrawmain
7810WHEN 35:IF FUST%<2 THEN PROCgrabpoll(0):GOTO 8290
7820IF FUST%=2 THEN PROCclosewind(8):PROCinpic:PROCpicpos:PROCpgrab(OX%,OY%,3):OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:FUST%=3:PROCopenwind(7):GOTO 8290
7830WHEN 36:IF FUST%=0 THEN PROCpicpos:PROCinpic:PROCeoc:RECTANGLE X%,Y%,FRW%*2,FRH%*4:PROCoutpic:PROCquickdrawmain:OX%=X%:OY%=Y%:FUST%=1
7840PROCpicpos: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
7850IF BUT%<>4 THEN 8290
7860PROCinpic: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
7870WHEN 38:IF FUST%<2 THEN PROCrectpoll:GOTO 8290
7880PROCswapcorns:FMINX%=X%(0):FMINY%=Y%(0):FMAXX%=OX%:FMAXY%=OY%
7890SYS "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%
7900RW%=VALFNgeticon(21,4):GW%=VALFNgeticon(21,7):BW%=VALFNgeticon(21,10)
7910FORL%=0 TO 255:SYS "ColourTrans_ColourNumberToGCOL",L% TO G%
7920RC%=((G%AND%1111)*RW%)DIV100:GC%=((((G%AND48)>>2)+(G%AND3))*GW%)DIV100:BC%=((((G%AND192)>>4)+(G%AND3))*BW%)DIV100
7930IF RC%>15 THEN RC%=15
7940IF GC%>15 THEN GC%=15
7950IF BC%>15 THEN BC%=15
7960TC%=(((RC%AND3)+(GC%AND3)+(BC%AND3))DIV3):TC%=TC%+(RC%AND12)+((GC%AND12)<<2)+((BC%AND12)<<4):SYS"ColourTrans_GCOLToColourNumber",TC% TO TC%
7970TRANSTAB%?L%=TC%:NEXT
7980A%=VARS:CALL transarea:SYS "Hourglass_Off":FUST%=0:PROCforcedrawmain
7990WHEN 39:IF FUST%<2 THEN PROCrectpoll:GOTO 8290
8000PROCswapcorns:FMINX%=X%(0):FMINY%=Y%(0):FMAXX%=OX%:FMAXY%=OY%
8010SYS "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%
8020RW%=VALFNgeticon(22,4):GW%=VALFNgeticon(22,7):BW%=VALFNgeticon(22,10):FORL%=0 TO 255:SYS "ColourTrans_ColourNumberToGCOL",L% TO G%
8030RC%=(G%AND%1111)*RW%:GC%=(((G%AND48)>>2)+(G%AND3))*GW%:BC%=(((G%AND192)>>4)+(G%AND3))*BW%
8040TC%=((RC%+GC%+BC%)DIV3):IF TC%>15 THEN TC%=15
8050TC%=TC%+((TC%AND12)<<2)+((TC%AND12)<<4):SYS"ColourTrans_GCOLToColourNumber",TC% TO TC%
8060TRANSTAB%?L%=TC%:NEXT
8070A%=VARS:CALL transarea:SYS "Hourglass_Off":FUST%=0:PROCforcedrawmain
8080WHEN 40:IF FUST%<2 THEN PROCrectpoll:GOTO 8290
8090PROCswapcorns:FMINX%=X%(0):FMINY%=Y%(0):FMAXX%=OX%:FMAXY%=OY%
8100PW%=VALFNgeticon(23,3)*2:PH%=VALFNgeticon(23,6)*4:POX%=PW%DIV2:POY%=PH%DIV2
8110XP%=FMINX%:YP%=FMINY%:PROCinpic:VDU24,FMINX%;FMINY%;FMAXX%;FMAXY%;
8120SYS "Hourglass_On"
8130REPEAT:REPEAT:GCOL USE%,POINT(XP%+POX%,YP%+POY%) TINT TINT(XP%+POX%,YP%+POY%):RECTANGLE FILL XP%,YP%,PW%-2,PH%-4:XP%+=PW%:UNTIL XP%>FMAXX%:XP%=FMINX%:YP%+=PH%:UNTIL YP%>FMAXY%:VDU26:PROCoutpic:PROCforcedrawmain:FUST%=0
8140SYS "Hourglass_Off"
8150WHEN 41:IF FUST%<2 THEN PROCrectpoll:GOTO 8290
8160IF FUST%=2 THEN PROCswapcorns:ROTCX%=(X%(0)+OX%)DIV2:ROTCY%=(Y%(0)+OY%)DIV2:FMINX%=X%(0)-ROTCX%:FMINY%=Y%(0)-ROTCY%:FMAXX%=OX%-ROTCX%:FMAXY%=OY%-ROTCY%:PROCpicpos:PROCinpic:PROCprotbox(X%,Y%):PROCoutpic:OX%=X%:OY%=Y%:PROCquickdrawmain:FUST%=3:GOTO 8290
8170PROCpicpos:IF BUT%=1 OR BUT%=4 THEN GOTO 8190
8180IF X%<>OX% OR Y%<>OY% THEN PROCinpic:PROCprotbox(OX%,OY%):OX%=X%:OY%=Y%:PROCprotbox(X%,Y%):PROCoutpic:PROCquickdrawmain:GOTO 8290 ELSE GOTO 8290
8190IF BUT%=1 THEN PROCinpic:PROCprotbox(OX%,OY%):PROCoutpic:PROCquickdrawmain:FUST%=0:GOTO 8290
8200PROCinpic:PROCprotbox(OX%,OY%):PROCoutpic:X%=OX%:Y%=OY%
8210FUST%=4:PROCspinit:PROCspbuf(145*1024):IF Q% THEN PROCspbuferr
8220PROCbackuppic:PROCinbackup: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%)
8230PROCrotpoint(0,(FMAXY%DIV3)*2,R%,MX1%,MY1%):PROCrotpoint(0,(FMAXY%DIV3)*4,R%,MX2%,MY2%)
8240X1%+=X%:X2%+=X%:X3%+=X%:X4%+=X%
8250Y1%+=Y%:Y2%+=Y%:Y3%+=Y%:Y4%+=Y%
8260PROCeoc:PLOT4,X1%,Y1%:PLOT4,X2%,Y2%:PLOT85,X3%,Y3%:GCOL3,60 TINT 192:PLOT4,X4%,Y4%:PLOT85,X1%,Y1%:PROCoutbackup
8270A%=VARS:VARS!4=PIC%:VARS!8=SPBUF%:VARS!12=ROTTAB%:VARS!16=(360-ROT%)MOD360:VARS!20=BTC%:VARS!24=TRASP%:VARS!28=X%:VARS!32=Y%:VARS!36=ROTCX%:VARS!40=ROTCY%:SYS "Hourglass_On":CALL rotate:SYS "Hourglass_Off"
8280PROCinpic:SYS&2E,290,SPBUF%,"PIC":PROCprotbox(X%,Y%):FUST%=3:OX%=X%:OY%=Y%:PROCoutpic:PROCforcedrawmain:PROCspinit
8290ENDCASE
8300ENDPROC
8310
8320DEFPROCprotbox(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%)
8330PROCrotpoint(0,(FMAXY%DIV3)*2,R%,MX1%,MY1%):PROCrotpoint(0,(FMAXY%DIV3)*4,R%,MX2%,MY2%)
8340X1%+=CX%:X2%+=CX%:X3%+=CX%:X4%+=CX%
8350Y1%+=CY%:Y2%+=CY%:Y3%+=CY%:Y4%+=CY%
8360PLOT4,X1%,Y1%:PLOT5,X2%,Y2%:PLOT5,X3%,Y3%:PLOT5,X4%,Y4%:PLOT5,X1%,Y1%
8370LINE MX1%+CX%,MY1%+CY%,MX2%+CX%,MY2%+CY%
8380ENDPROC
8390
8400DEFPROCrotpoint(R0%,R1%,R%,RETURN RPX%,RETURN RPY%)
8410R6%=(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)
8420ENDPROC
8430
8440DEFFNperc(WH%,IH%)
8450I$=FNgeticon(WH%,IH%):=VAL(LEFT$(I$,LEN(I$)-1))
8460
8470DEFPROCmapline
8480CASE FUCO% OF
8490WHEN 2:PROCeoc:LINE X%(1),Y%(1),OX%,OY%:OX%=X%:OY%=Y%:LINE X%(1),Y%(1),X%,Y%
8500WHEN 3:PROCeoc:LINE X%(2),Y%(2),OX%,OY%:OX%=X%:OY%=Y%:LINE X%(2),Y%(2),X%,Y%
8510WHEN 4:PROCeoc:LINE X%(1),Y%(1),OX%,OY%:LINE X%(3),Y%(3),OX%,OY%:OX%=X%:OY%=Y%:LINE X%(1),Y%(1),X%,Y%:LINE X%(3),Y%(3),X%,Y%
8520WHEN 6:PROCeoc:LINE X%(5),Y%(5),OX%,OY%:OX%=X%:OY%=Y%:LINE X%(5),Y%(5),X%,Y%
8530WHEN 7:PROCeoc:LINE X%(6),Y%(6),OX%,OY%:OX%=X%:OY%=Y%:LINE X%(6),Y%(6),X%,Y%
8540WHEN 8:PROCeoc:LINE X%(5),Y%(5),OX%,OY%:LINE X%(7),Y%(7),OX%,OY%:OX%=X%:OY%=Y%:LINE X%(5),Y%(5),X%,Y%:LINE X%(7),Y%(7),X%,Y%
8550ENDCASE
8560ENDPROC
8570
8580DEFPROCpixelmap
8590PROCspinit:PROCspbuf(145*1024):IF Q% THEN PROCspbuferr
8600PROCbackuppic
8610SYS "Hourglass_On"
8620dsta=SQR((X%(6)-X%(5))^2+(Y%(5)-Y%(6))^2)
8630dstb=SQR((X%(8)-X%(7))^2+(Y%(7)-Y%(8))^2)
8640IF dsta>dstb THEN steps%=dsta DIV2 ELSE steps%=dstb DIV2
8650fxsa=(X%(2)-X%(1))/steps%
8660fxsb=(X%(3)-X%(4))/steps%
8670fysa=(Y%(2)-Y%(1))/steps%
8680fysb=(Y%(3)-Y%(4))/steps%
8690txsa=(X%(6)-X%(5))/steps%
8700txsb=(X%(7)-X%(8))/steps%
8710tysa=(Y%(6)-Y%(5))/steps%
8720tysb=(Y%(7)-Y%(8))/steps%
8730FOR cb%=0 TO steps%
8740fxa=X%(1)+cb%*fxsa
8750fxb=X%(4)+cb%*fxsb
8760fya=Y%(1)+cb%*fysa
8770fyb=Y%(4)+cb%*fysb
8780txa=X%(5)+cb%*txsa
8790txb=X%(8)+cb%*txsb
8800tya=Y%(5)+cb%*tysa
8810tyb=Y%(8)+cb%*tysb
8820PROCinpic:GCOL3,63:PLOT69,300,300:PLOT69,300,300:PROCmapln:PROCoutpic:PROCquickdrawmain
8830NEXT
8840PROCspinit
8850SYS "Hourglass_Off"
8860ENDPROC
8870
8880DEFPROCmapln
8890LOCAL ns%,fxs,fys,txs,tys,c%
8900ns%=1+SQR((txb-txa)^2+(tya-tyb)^2) DIV2
8910fxs=(fxb-fxa)/ns%:txs=(txb-txa)/ns%
8920fys=(fyb-fya)/ns%:tys=(tyb-tya)/ns%
8930FOR c%=0 TO ns%
8940SYS&2E,297,SPBUF%,"PIC",(fxa+c%*fxs)DIV2,(fya+c%*fys)DIV4 TO ,,,,,col%,tin%:GCOL USE%,col% TINT tin%
8950IF TRASP%?FNfindpalent(col%,tin%)=0 THEN PLOT69,txa+c%*txs,tya+c%*tys
8960NEXT
8970ENDPROC
8980
8990DEFPROCgrabpoll(FT%)
9000IF 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
9010IF FUST%=0 THEN ENDPROC
9020IF 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
9030IF BUT%<>4 OR (OX%=X%(0) AND OY%=Y%(0)) THEN GOTO 9120
9040PROCinpic: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
9050GRN$="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
9060GRWI%=ABS(X%-X%(0)):GRHE%=ABS(Y%-Y%(0))
9070IF X%<X%(0) THEN SWAP X%(0),X%
9080IF Y%<Y%(0) THEN SWAP Y%(0),Y%
9090IF FT%=1 THEN SYS&2E,290,SPBUF%,"GRAB",X%(0),Y%(0),3+GRABM%
9100PROCpgrab(X%,Y%,3)
9110OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=2:ENDPROC
9120PROCpicpos:IF X%=OX% AND Y%=OY% THEN ENDPROC
9130PROCinpic: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
9140ENDPROC
9150
9160DEFPROCrectpoll
9170IF 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
9180IF FUST%=0 THEN ENDPROC
9190IF 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
9200IF BUT%<>4 OR (OX%=X%(0) AND OY%=Y%(0)) THEN GOTO 9250
9210PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCpicpos
9220IF X%<X%(0) THEN SWAP X%(0),X%
9230IF Y%<Y%(0) THEN SWAP Y%(0),Y%
9240OX%=X%:OY%=Y%:PROCoutpic:PROCquickdrawmain:PROCletgo:FUST%=2:ENDPROC
9250PROCpicpos:IF X%=OX% AND Y%=OY% THEN ENDPROC
9260PROCinpic: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
9270ENDPROC
9280
9290DEFPROCpgrab(DX%,DY%,PL%)
9300XR=GRXM%/GRXD%
9310YR=GRYM%/GRYD%
9320!SCALE%=GRXM%
9330SCALE%!4=GRYM%
9340SCALE%!8=GRXD%
9350SCALE%!12=GRYD%
9360SYS&2E,308,SPBUF%,"GRAB",DX%-((GRWI% DIV 2)*XR),DY%-((GRHE% DIV 2)*YR),PL%+GRABM%,SCALE%
9370ENDPROC
9380
9390DEFPROCpimport(DX%,DY%,PL%)
9400XR=GRXM%/GRXD%:YR=GRYM%/GRYD%
9410IO%!20=(!IO%)*GRXM%
9420IO%!24=(IO%!4)*GRYM%
9430IO%!28=(IO%!8)*GRXD%
9440IO%!32=(IO%!12)*GRYD%
9450IF 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%
9460ENDPROC
9470
9480DEFPROCpara(LT%,PL%,DX%,DY%)
9490IF PL%=1 THEN PROCelip(&75,DX%,DY%):ENDPROC
9500IF LT%=1 THEN
9510PROCl(X%(0),Y%(0),X%(1),Y%(1))
9520PROCl(X%(1),Y%(1),DX%,DY%)
9530PLOT LITY%-4,X%(0)-X%(1),Y%(0)-Y%(1)
9540PLOT LITY%,X%(0),Y%(0)
9550ELSE
9560LINE X%(0),Y%(0),X%(1),Y%(1)
9570LINE X%(1),Y%(1),DX%,DY%
9580PLOT1,X%(0)-X%(1),Y%(0)-Y%(1)
9590PLOT5,X%(0),Y%(0)
9600ENDIF
9610ENDPROC
9620
9630DEFPROCelip(PL%,DX%,DY%)
9640MOVE X%(0),Y%(0)
9650MOVE X%(1),Y%(1)
9660PLOT PL%,DX%,DY%
9670ENDPROC
9680
9690DEFPROCtri(PL%,DX%,DY%)
9700IF 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%
9710ENDPROC
9720
9730DEFFNdist(DX%,DY%):=SQR(((DX%-X%(0))^2)+((DY%-Y%(0))^2))
9740
9750DEFPROCpaintbrush(BX%,BY%):SYS&2E,306,BRUSH%,STR$(SELBR%),BX%-(32*XR),BY%-(32*YR),,SCALE%:ENDPROC
9760
9770DEFPROCpaintbrush2(BX%,BY%):SYS&2E,305,BRUSH%,STR$(SELBR%),BX%-32,BY%-32:ENDPROC
9780
9790DEFPROCletgo:REPEAT:MOUSE X%,Y%,H%:UNTIL H%=0:ENDPROC
9800
9810DEFPROCkillf
9820CASE FUSE% OF
9830PROCspbuf(0)
9840WHEN 2:IF FUST%>0 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCoutpic:PROCquickdrawmain
9850WHEN 3:PROCclosewind(4)
9860WHEN 4:PROCclosewind(5):IF FUST%>0 THEN PROCinpic:PROCpaintscale:PROCeorback:PROCpaintbrush(OX%,OY%):PROCoutpic:PROCquickdrawmain
9870WHEN 5:IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
9880WHEN 6:IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE FILL X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
9890WHEN 7:IF FUST%=1 THEN PROCinpic:PROCeoc:CIRCLE X%(0),Y%(0),FNdist(OX%,OY%):PROCoutpic:PROCquickdrawmain
9900WHEN 8:IF FUST%=1 THEN PROCinpic:PROCeoc:CIRCLE FILL X%(0),Y%(0),FNdist(OX%,OY%):PROCoutpic:PROCquickdrawmain
9910WHEN 9:IF FUST%=1 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCoutpic:PROCquickdrawmain
9920IF FUST%=2 THEN PROCinpic:PROCeoc:PROCtri(5,OX%,OY%):PROCoutpic:PROCquickdrawmain
9930WHEN 10:IF FUST%=1 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCoutpic:PROCquickdrawmain
9940IF FUST%=2 THEN PROCinpic:PROCeoc:PROCtri(85,OX%,OY%):PROCoutpic:PROCquickdrawmain
9950WHEN 11:IF FUST%=1 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCoutpic:PROCquickdrawmain
9960IF FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&C5,OX%,OY%):PROCoutpic:PROCquickdrawmain
9970WHEN 12:IF FUST%=1 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCoutpic:PROCquickdrawmain
9980IF FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&CD,OX%,OY%):PROCoutpic:PROCquickdrawmain
9990WHEN 13:IF FUST%=1 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCoutpic:PROCquickdrawmain
10000IF FUST%=2 THEN PROCinpic:PROCeoc:PROCpara(0,0,OX%,OY%):PROCoutpic:PROCquickdrawmain
10010WHEN 14:IF FUST%=1 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCoutpic:PROCquickdrawmain
10020IF FUST%=2 THEN PROCinpic:PROCeoc:PROCpara(0,1,OX%,OY%):PROCoutpic:PROCquickdrawmain
10030WHEN 15:IF FUST%=1 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCoutpic:PROCquickdrawmain
10040IF FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&A5,OX%,OY%):PROCoutpic:PROCquickdrawmain
10050WHEN 16:IF FUST%=1 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCoutpic:PROCquickdrawmain
10060IF FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&B5,OX%,OY%):PROCoutpic:PROCquickdrawmain
10070WHEN 17:IF FUST%=1 THEN PROCinpic:PROCeoc:LINE X%(0),Y%(0),OX%,OY%:PROCoutpic:PROCquickdrawmain
10080IF FUST%=2 THEN PROCinpic:PROCeoc:PROCelip(&AD,OX%,OY%):PROCoutpic:PROCquickdrawmain
10090WHEN 18:PROCclosewind(8):IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
10100IF FUST%=2 THEN PROCinpic:PROCpgrab(OX%,OY%,3):PROCoutpic:PROCquickdrawmain:PROCspinit
10110WHEN 19:PROCclosewind(8):IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
10120IF FUST%=2 THEN PROCinpic:PROCpgrab(OX%,OY%,3):PROCoutpic:PROCquickdrawmain:PROCspinit
10130WHEN 20:IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
10140WHEN 21:IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
10150WHEN 22:IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
10160WHEN 23:PROCclosewind(8):IF FUCO%=1 AND FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(1),Y%(1),X%(2)-X%(1),Y%(2)-Y%(1):RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain:GOTO 10520
10170IF FUCO%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(1),Y%(1),X%(2)-X%(1),Y%(2)-Y%(1):PROCoutpic:PROCquickdrawmain:GOTO 10520
10180IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
10190WHEN 25:PROCinpic
10200PROCeoc
10210CASE FUCO% OF
10220WHEN 2:LINE X%(1),Y%(1),X%,Y%
10230WHEN 3:LINE X%(1),Y%(1),X%(2),Y%(2):LINE X%(2),Y%(2),X%,Y%
10240WHEN 4:LINE X%(1),Y%(1),X%(2),Y%(2):LINE X%(2),Y%(2),X%(3),Y%(3):LINE X%(3),Y%(3),X%,Y%:LINE X%,Y%,X%(1),Y%(1)
10250WHEN 5:LINE X%(1),Y%(1),X%(2),Y%(2):LINE X%(2),Y%(2),X%(3),Y%(3):LINE X%(3),Y%(3),X%(4),Y%(4):LINE X%(4),Y%(4),X%(1),Y%(1)
10260WHEN 6:LINE X%(1),Y%(1),X%(2),Y%(2):LINE X%(2),Y%(2),X%(3),Y%(3):LINE X%(3),Y%(3),X%(4),Y%(4):LINE X%(4),Y%(4),X%(1),Y%(1):LINE X%(5),Y%(5),X%,Y%
10270WHEN 7:LINE X%(1),Y%(1),X%(2),Y%(2):LINE X%(2),Y%(2),X%(3),Y%(3):LINE X%(3),Y%(3),X%(4),Y%(4):LINE X%(4),Y%(4),X%(1),Y%(1):LINE X%(5),Y%(5),X%(6),Y%(6):LINE X%(6),Y%(6),X%,Y%
10280WHEN 8:LINE X%(1),Y%(1),X%(2),Y%(2):LINE X%(2),Y%(2),X%(3),Y%(3):LINE X%(3),Y%(3),X%(4),Y%(4):LINE X%(4),Y%(4),X%(1),Y%(1):LINE X%(5),Y%(5),X%(6),Y%(6):LINE X%(6),Y%(6),X%(7),Y%(7):LINE X%(7),Y%(7),X%,Y%:LINE X%(5),Y%(5),X%,Y%
10290ENDCASE
10300FUCO%=1:PROCoutpic:PROCquickdrawmain:PROCletgo
10310WHEN 27:IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
10320WHEN 28:IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
10330WHEN 29:PROCclosewind(5):IF FUST%>0 THEN PROCinpic:PROCpaintscale2:PROCeorback:PROCpaintbrush(OX%,OY%):PROCoutpic:PROCquickdrawmain
10340WHEN 30:PROCclosewind(5):IF FUST%>0 THEN PROCinpic:PROCpaintscale2:PROCeorback:PROCpaintbrush(OX%,OY%):PROCoutpic:PROCquickdrawmain
10350WHEN 32:PROCrestpic:PROCforcedrawmain:PROCclosewind(14):PROCspinit:IF FONT%<>0 THEN PROClosefont
10360WHEN 31:IF GRTY%=1 THEN
10370IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
10380ENDIF
10390WHEN 33:PROCclosewind(18):PROCspinit:IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
10400WHEN 34:IF FUST%=1 THEN PROCinpic:PROCpimport(OX%,OY%,3):PROCoutpic:PROCquickdrawmain
10410PROCclosewind(8):PROCspinit
10420WHEN 35:IF FUST%<2 THEN PROCclosewind(8)
10430IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
10440IF FUST%=3 THEN PROCclosewind(7)
10450WHEN 36:IF FUST%<>0 THEN PROCinpic:PROCeoc:RECTANGLE OX%,OY%,FRW%*2,FRH%*4:PROCoutpic:PROCquickdrawmain
10460WHEN 37:PROCspinit:PROCclosewind(20)
10470WHEN 38:PROCclosewind(21):PROCspinit:IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
10480WHEN 39:PROCclosewind(22):PROCspinit:IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
10490WHEN 40:PROCclosewind(23):PROCspinit:IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
10500WHEN 41:PROCclosewind(24):PROCspinit:IF FUST%=1 THEN PROCinpic:PROCeoc:RECTANGLE X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):PROCoutpic:PROCquickdrawmain
10510IF FUST%=3 THEN PROCinpic:PROCprotbox(OX%,OY%):PROCoutpic:PROCquickdrawmain
10520ENDCASE
10530ENDPROC
10540
10550DEFPROCeoc:GCOL3,63 TINT 192:ENDPROC
10560
10570DEFPROCeorback:GCOL3,191 TINT 192:ENDPROC
10580
10590DEFPROCpickcol
10600BLK%!8=HAND%(3):SYS "Wimp_GetWindowState",,BLK%+8
10610XOF%=(!BLK%)-(BLK%!12):IF XOF%>766 THEN XOF%=766
10620YOF%=(BLK%!4)-(BLK%!16):IF YOF%>220 THEN YOF%=220
10630IF MOUB%=4 THEN COL%=(XOF% DIV 24)+((YOF% DIV 28)*32) ELSE IF MOUB%=1 THEN PROCtrasp((XOF% DIV 24)+((YOF% DIV 28)*32))
10640PROCforcedrawpal(PAL%)
10650ENDPROC
10660
10670DEFPROCtbackclick
10680BLK%!8=HAND%(15):SYS "Wimp_GetWindowState",,BLK%+8
10690XOF%=(!BLK%)-(BLK%!12):IF XOF%>766 THEN XOF%=766
10700YOF%=(BLK%!4)-(BLK%!16):IF YOF%>220 THEN YOF%=220
10710FONTB%=(XOF% DIV 24)+((YOF% DIV 28)*32)
10720PROCforcedrawtback
10730ENDPROC
10740
10750DEFPROCpicpos
10760SCRX%=!BLK%:SCRY%=BLK%!4
10770BLK%!8=HAND%(2):SYS "Wimp_GetWindowState",,BLK%+8
10780X%=(((!BLK%)-(BLK%!12))+(BLK%!28)) DIV ZOOM%
10790Y%=936-((((BLK%!24)-(BLK%!4))-(BLK%!32)) DIV ZOOM%)
10800IF X%<0 THEN X%=0
10810IF X%>1232 THEN X%=1232
10820IF Y%<0 THEN Y%=0
10830IF Y%>934 THEN Y%=934
10840IF NOT GRLO% THEN ENDPROC
10850XOF%=(GRWI%-GRBX%)*2
10860YOF%=(GRHE%-GRBY%)*4
10870X%+=XOF%:Y%+=YOF%
10880X%=-XOF%+((X% DIV (2*GRWI%))*2*GRWI%)
10890Y%=-YOF%+((Y% DIV (4*GRHE%))*4*GRHE%)
10900REM VDU4:PRINTTAB(0,1);X%,Y%,XOF%,YOF%
10910ENDPROC
10920
10930DEFPROCgetor
10940WOX%=BLK%!4-BLK%!20
10950WOY%=(BLK%!16-BLK%!24)-(936*ZOOM%)
10960ENDPROC
10970
10980DEFPROCgetbrushor
10990WOX%=BLK%!4-BLK%!20
11000WOY%=(BLK%!16-BLK%!24)-260
11010ENDPROC
11020
11030DEFPROCgetpatfillor
11040WOX%=BLK%!4-BLK%!20
11050WOY%=(BLK%!16-BLK%!24)-108
11060ENDPROC
11070
11080DEFPROCgetedbruor
11090WOX%=BLK%!4-BLK%!20
11100WOY%=(BLK%!16-BLK%!24)-640
11110ENDPROC
11120
11130DEFPROCopenmain:MOP%=TRUE
11140!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%
11150ENDPROC
11160
11170DEFPROCopenpal
11180!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%
11190ENDPROC
11200
11210DEFPROCopenwind(WH%)
11220!BLK%=HAND%(WH%):SYS "Wimp_GetWindowInfo",,BLK%
11230BLK%!28=-1:SYS "Wimp_OpenWindow",,BLK%
11240ENDPROC
11250
11260DEFPROCclosewind(WH%)
11270!BLK%=HAND%(WH%):SYS "Wimp_CloseWindow",,BLK%
11280ENDPROC
11290
11300DEFPROCopmain
11310SYS "Wimp_OpenWindow",,BLK%
11320ENDPROC
11330
11340DEFPROCclmain:MOP%=FALSE
11350SYS "Wimp_CloseWindow",,BLK%
11360ENDPROC
11370
11380DEFPROCairnoz
11390H%=-1:FORL%=9 TO 15:IF FNhigh(4,L%) THEN H%=L%:L%=15
11400NEXT
11410CASE H% OF
11420WHEN 9:XR=1:YR=.25
11430WHEN 10:XR=1:YR=.5
11440WHEN 11:XR=1:YR=.75
11450WHEN 12:XR=1:YR=1
11460WHEN 13:XR=.75:YR=1
11470WHEN 14:XR=.5:YR=1
11480WHEN 15:XR=.25:YR=1
11490ENDCASE
11500ENDPROC
11510
11520DEFPROCpaintscale
11530!SCALE%=BXM%
11540SCALE%!4=BYM%
11550SCALE%!8=BXD%
11560SCALE%!12=BYD%
11570XR=BXM%/BXD%
11580YR=BYM%/BYD%
11590ENDPROC
11600
11610DEFPROCpaintscale2
11620!SCALE%=1
11630SCALE%!4=1
11640SCALE%!8=1
11650SCALE%!12=1
11660XR=1
11670YR=1
11680ENDPROC
11690
11700DEFPROCpicclick
11710IF MBUS% AND MOUB%<>0 THEN ENDPROC ELSE MBUS%=FALSE
11720CASE FUSE% OF
11730WHEN -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 12330
11740IF MOUB%=4 THEN PROCpicpos:PROCinpic:CO%=POINT(X%,Y%):TI%=TINT(X%,Y%):GCOL3,63 TINT 192:PLOT69,400,400:PLOT69,400,400:PROCoutpic:COL%=FNfindpalent(CO%,TI%):PROCforcedrawpal(PAL%):GOTO 12330
11750WHEN 0:PROCpicpos:PROCinpic:PROCsetcol:PLOT69,X%,Y%:PROCoutpic:PROCquickdrawmain
11760WHEN 3:PROCairnoz:IF H%=-1 THEN GOTO 12330
11770PROCpicpos:PROCinpic:PROCsetcol:D%=VAL(FNgeticon(4,1)):R%=VAL(FNgeticon(4,3)):FORL%=1 TO D%:A=RND(3600)/10:PLOT69,COS(RAD(A))*RND((R%*XR))+X%,SIN(RAD(A))*RND((R%*YR))+Y%:NEXT:PROCoutpic:PROCquickdrawmain
11780WHEN 4:PROCpaintscale:PROCinpic:PROCpicpos
11790IF FUST%<>0 THEN PROCeorback:PROCpaintbrush(OX%,OY%)
11800PROCsetbackcol:PROCpaintbrush(X%,Y%):OX%=X%:OY%=Y%:FUST%=1
11810PROCeorback:PROCpaintbrush(OX%,OY%)
11820PROCoutpic:PROCquickdrawmain
11830WHEN 24:IF MOUB%<>4 THEN GOTO 12330
11840PROCpicpos: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.")
11850PROCtrace(X%,Y%,TCO%,TTI%):PROCoutpic:PROCquickdrawmain
11860WHEN 26:IF MOUB%<>4 THEN ENDPROC
11870PROCinpic:VDU23,17,4,1,0|:FORL%=1 TO 4:VDU23,L%+1:FORK%=1 TO 8:VDU ECF%(K%,L%):NEXT:NEXT
11880PROCpicpos:GCOL0,POINT(X%,Y%)+128 TINT TINT(X%,Y%):PROCsetcol:SYS "Hourglass_On":FILL X%,Y%:SYS "Hourglass_Off":PROCoutpic:PROCquickdrawmain
11890WHEN 29:PROCpaintscale2:PROCinpic:PROCpicpos
11900IF FUST%<>0 THEN PROCeorback:PROCpaintbrush2(OX%,OY%)
11910VARS!20=BTC%:VARS!24=PALTAB%
11920VARS!28=PIC%:VARS!32=SPBUF%
11930VARS!36=X%-32:VARS!40=Y%-32
11940VARS!44=SELBR%:VARS!48=BRUSH%
11950A%=VARS:CALL averagebrush
11960GCOL3,63:RECTANGLE X%-32,Y%-32,64,64:RECTANGLE X%-32,Y%-32,64,64
11970OX%=X%:OY%=Y%:FUST%=1:PROCeorback:PROCpaintbrush2(OX%,OY%)
11980PROCoutpic:PROCquickdrawmain
11990WHEN 30:PROCpaintscale2:PROCinpic:PROCpicpos
12000IF FUST%<>0 THEN PROCeorback:PROCpaintbrush2(OX%,OY%)
12010VARS!20=BTC%:VARS!24=PALTAB%
12020VARS!28=PIC%:VARS!32=SPBUF%
12030VARS!36=X%-32:VARS!40=Y%-32
12040VARS!44=SELBR%:VARS!48=BRUSH%
12050VARS!84=PALTAB%?(COL%*2):VARS!88=PALTAB%?((COL%*2)+1)
12060A%=VARS:CALL tintbrush
12070GCOL3,63:RECTANGLE X%-32,Y%-32,64,64:RECTANGLE X%-32,Y%-32,64,64
12080OX%=X%:OY%=Y%:FUST%=1:PROCeorback:PROCpaintbrush2(OX%,OY%)
12090PROCoutpic:PROCquickdrawmain
12100WHEN 31:IF MOUB%<>4 OR GRTY%=1 THEN ENDPROC
12110PROCspinit:PROCspbuf(145*1024):IF Q% THEN PROCspbuferr
12120PROCbackuppic
12130PROCinbackup:PROCpicpos:FBC%=POINT(X%,Y%):FBT%=TINT(X%,Y%):GCOL0,FBC%+128 TINT FBT%:FUT%=(FBC%+1) MOD 64
12140GCOL0,FUT% TINT FBT%:SYS "Hourglass_On":FILL X%,Y%:PROCoutbackup
12150A%=VARS:B%=PIC%:C%=SPBUF%:CALL findchangebox
12160FMINX%=(!VARS)*2
12170FMINY%=(VARS!4)*4
12180FMAXX%=(VARS!8)*2
12190FMAXY%=(VARS!12)*4
12200PROCfill
12210SYS "Hourglass_Off"
12220WHEN 37:IF MOUB%<>4 THEN ENDPROC
12230PROCspinit:PROCspbuf(145*1024):IF Q% THEN PROCspbuferr
12240PROCbackuppic
12250PROCinbackup:PROCpicpos:FBC%=POINT(X%,Y%):FBT%=TINT(X%,Y%):GCOL0,FBC%+128 TINT FBT%:FUT%=(FBC%+1) MOD 64
12260GCOL0,FUT% TINT FBT%:SYS "Hourglass_On":FILL X%,Y%:PROCoutbackup
12270A%=VARS:B%=PIC%:C%=SPBUF%:CALL findchangebox
12280FMINX%=(!VARS)*2:FMINY%=(VARS!4)*4:FMAXX%=(VARS!8)*2:FMAXY%=(VARS!12)*4
12290VARS!4=PIC%:VARS!8=SPBUF%:VARS!12=PFILLS%:VARS!16=CPF%
12300CALL patfill
12310SYS"Hourglass_Off"
12320PROCspinit:PROCforcedrawmain
12330ENDCASE
12340ENDPROC
12350
12360DEFPROCfill
12370NOS%=VALFNgeticon(13,44)
12380NOF%=GRFN%
12390ET%=0
12400IF FNhigh(13,55) THEN ET%=1
12410IF FNhigh(13,56) THEN ET%=2
12420IF FNhigh(13,57) THEN ET%=3
12430IF FNhigh(13,58) THEN ET%=4
12440FIT%=-1
12450IF FNhigh(13,22) THEN FIT%=1
12460IF FNhigh(13,23) THEN FIT%=2
12470IF FNhigh(13,64) THEN FIT%=3
12480IF FNhigh(13,65) THEN FIT%=4
12490IF FNhigh(13,24) THEN FIT%=5
12500IF FNhigh(13,25) THEN FIT%=6
12510IF ET%=1 OR ET%=2 THEN FIT%=1
12520IF ET%=3 OR ET%=4 THEN FIT%=4
12530IF FIT%=-1 THEN PROCspinit:PROCmessage(0,"You must choose a type of fill.")
12540CASE FIT% OF
12550WHEN 1:FIW%=FMAXX%-FMINX%:FIFC%=0:LAFC%=255:FID%=1
12560WHEN 2:FIW%=FMAXX%-FMINX%:FIFC%=255:LAFC%=0:FID%=-1
12570WHEN 4:FIW%=FMAXY%-FMINY%:FIFC%=0:LAFC%=255:FID%=1
12580WHEN 3:FIW%=FMAXY%-FMINY%:FIFC%=255:LAFC%=0:FID%=-1
12590WHEN 5:FIFC%=0:LAFC%=255:FID%=1
12600WHEN 6:FIFC%=255:LAFC%=0:FID%=-1
12610ENDCASE
12620IF FIT%=5 OR FIT%=6 THEN
12630IF (FMAXX%-X%)>(X%-FMINX%) THEN XOF%=FMAXX%-X% ELSE XOF%=X%-FMINX%
12640IF (FMAXY%-Y%)>(Y%-FMINY%) THEN YOF%=FMAXY%-Y% ELSE YOF%=Y%-FMINY%
12650FIW%=SQR((XOF%^2)+(YOF%^2))
12660ENDIF
12670CPP%=(255<<8) DIV FIW%:CPS%=(255<<8) DIV (NOS%-1)
12680I%=IO%:FORL%=0 TO 15:?I%=GRFI%(L%,0,NOF%):I%?1=GRFI%(L%,1,NOF%):I%+=2:NEXT
12690!VARS=PIC%:IF GRTY%=0 THEN VARS!4=SPBUF% ELSE VARS!4=PIC%
12700VARS!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%
12710VARS!68=RAND%:VARS!72=0
12720VARS!76=VALFNgeticon(13,39)
12730IF FNhigh(13,54) THEN VARS!80=1 ELSE VARS!80=0
12740VARS!84=ET%:VARS!88=TRASP%:VARS!92=GRTY%:VARS!96=BTC%
12750FORL%=0 TO 4092 STEP 4:RAND%!L%=RND(CPS%):NEXT
12760A%=VARS
12770CALL graduatedfill
12780PROCspinit:PROCforcedrawmain
12790ENDPROC
12800
12810DEFPROChg:SYS "Hourglass_Smash":ENDPROC
12820
12830DEFPROCswapcorns
12840IF X%(0)>OX% THEN SWAP X%(0),OX%
12850IF Y%(0)>OY% THEN SWAP Y%(0),OY%
12860ENDPROC
12870
12880DEFFNsamecol(x1%,y1%,col%,tin%):=(POINT(x1%,y1%)=col% AND TINT(x1%,y1%)=tin%)
12890
12900DEFPROCl(x1%,y1%,x2%,y2%):PLOT4,x1%,y1%:PLOT LITY%,x2%,y2%:ENDPROC
12910
12920DEFPROCr(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
12930
12940DEFPROCtrace(X%,Y%,TCO%,TTI%)
12950SYS "Hourglass_On"
12960LOCAL dir%,x%,px%,py%
12970IF FNsamecol(X%,Y%,TCO%,TTI%) THEN PROCmessage(0,"Cannot trace from an adjacent pixel of the same colour.")
12980px%=X%:py%=Y%
12990dir%=3
13000PROCincdir
13010REPEAT
13020IF NOT FNsamecol(x%,y%,TCO%,TTI%) THEN PLOT69,x%,y%:px%=x%:py%=y%:PROCdecdir
13030PROCincdir
13040UNTIL x%=X% AND y%=Y%
13050PLOT69,x%,y%
13060SYS "Hourglass_Off"
13070ENDPROC
13080
13090DEFPROCincdir
13100dir%=(dir%+1)MOD4
13110CASE dir% OF
13120WHEN 0:x%=px%-2:y%=py%
13130WHEN 1:x%=px%:y%=py%+4
13140WHEN 2:x%=px%+2:y%=py%
13150WHEN 3:x%=px%:y%=py%-4
13160ENDCASE
13170ENDPROC
13180
13190DEFPROCdecdir
13200dir%=(dir%+2)MOD4
13210ENDPROC
13220
13230DEFFNfindpalent(CO%,TI%)
13240=CTT%?((CO%*4)+(TI% DIV 64))
13250
13260DEFPROCsetcol:GCOL USE%,PALTAB%?(COL%*2) TINT PALTAB%?((COL%*2)+1):ENDPROC
13270
13280DEFPROCsetbackcol:GCOL USE%,(PALTAB%?(COL%*2))+128 TINT PALTAB%?((COL%*2)+1):ENDPROC
13290
13300DEFPROCcol(C%,T%,U%)
13310SYS&35,-1,9 TO ,,BP%
13320IF BP%=3 THEN GCOLU%,C% TINT T%:ENDPROC
13330R%=((C% AND %11)*4)+(T% DIV 64):R%+=(R%<<4)
13340G%=(((C% AND %1100)>>2)*4)+(T% DIV 64):G%+=(G%<<4)
13350B%=(((C% AND %110000)>>4)*4)+(T% DIV 64):B%+=(B%<<4)
13360SYS "ColourTrans_SetGCOL",((B%<<24)+(G%<<16)+(R%<<8)),,,,U%
13370ENDPROC
13380
13390DEFPROCanticol(C%,T%,U%)
13400R%=((C% AND %11)*4)+(T% DIV 64):R%+=(R%<<4)
13410G%=(((C% AND %1100)>>2)*4)+(T% DIV 64):G%+=(G%<<4)
13420B%=(((C% AND %110000)>>4)*4)+(T% DIV 64):B%+=(B%<<4)
13430SYS "ColourTrans_ReturnOppGCOLForMode",((B%<<24)+(G%<<16)+(R%<<8)),15 TO GC%
13440GCOL U%,(GC%>>2) TINT (GC% AND %11)*64
13450ENDPROC
13460
13470DEFPROCgridcol
13480PROCcol(GRCO%,GRTI%,0)
13490ENDPROC
13500
13510DEFPROCmakerr
13520SYS "Wimp_DragBox",,0
13530!BLK%=ERR
13540ER=TRUE
13550CASE ERR OF
13560WHEN 222:$(BLK%+4)="File cannot be found"+CHR$(0):ER=FALSE
13570OTHERWISE
13580$(BLK%+4)="Archrome has suffered a serious internal error ("+STR$ERR+"/"+STR$ERL+") You should save your work and re-start as soon as possible."+CHR$(0)
13590ENDCASE
13600SYS "Wimp_ReportError",BLK%,1,"Archrome"
13610PROCaction:END
13620ENDPROC
13630
13640DEFPROCmessage(M%,M$):PROCoutpic
13650SYS "Wimp_DragBox",,0:!BLK%=M%:$(BLK%+4)=M$+CHR$(0):SYS "Wimp_ReportError",BLK%,1,"Archrome"
13660PROCforcedrawmain
13670PROCaction:END
13680ENDPROC
13690
13700DEFPROCmouse
13710MOUX%=!BLK%:MOUY%=BLK%!4:MOUB%=BLK%!8:MOUH%=BLK%!12:MOUIC%=BLK%!16
13720CASE MOUB% OF
13730WHEN 4,1:CASE MOUH% OF
13740WHEN -2:PROCopenmain
13750WHEN HAND%(0):IF BLK%!16=2 THEN PROCsaveok
13760WHEN HAND%(7):IF BLK%!16=2 THEN PROCspritesaveok
13770WHEN HAND%(2):PROCpicclick
13780WHEN HAND%(3):PROCpickcol
13790WHEN HAND%(4):PROCairbclick
13800WHEN HAND%(5):PROCbrushclick
13810WHEN HAND%(6):PROCgridclick
13820WHEN HAND%(8):PROCgrabclick
13830WHEN HAND%(10):PROClinepatclick
13840WHEN HAND%(11):PROCecfclick
13850WHEN HAND%(12):PROCedbruclick
13860WHEN HAND%(13):PROCfillclick
13870WHEN HAND%(14):PROCtextclick
13880WHEN HAND%(15):PROCtbackclick
13890WHEN HAND%(16):PROCtparclick
13900WHEN HAND%(17):PROCfillcontclick
13910WHEN HAND%(18):PROCcolrepclick
13920WHEN HAND%(19):PROCframeclick
13930WHEN HAND%(20):PROCpatfillclick
13940WHEN HAND%(21):PROCrgbcontclick
13950WHEN HAND%(22):PROCgreyscaleclick
13960WHEN HAND%(23):PROCpixelateclick
13970WHEN HAND%(24):PROCrotateclick
13980ENDCASE
13990WHEN 2:IF MOUH%=-2 THEN PROCiconmenu ELSE IF MOUH%=HAND%(2) THEN PROCwindmenu
14000WHEN 16,64:IF MOUH%=HAND%(0) THEN DRAG%=0:PROCstartdrag
14010IF MOUH%=HAND%(7) THEN DRAG%=7:PROCstartdrag
14020ENDCASE
14030ENDPROC
14040
14050DEFPROCrotateclick
14060IF MOUIC%<>1 AND MOUIC%<3 THEN ENDPROC
14070IF FUST%>=2 THEN PROCinpic:PROCprotbox(OX%,OY%)
14080IF MOUIC%=1 THEN ROT%-=1:IF ROT%<0 THEN ROT%+=360
14090IF MOUIC%=3 THEN ROT%=(ROT%+1)MOD360
14100IF MOUIC%=4 THEN ROT%-=10:IF ROT%<0 THEN ROT%+=360
14110IF MOUIC%=5 THEN ROT%=(ROT%+10)MOD360
14120IF FUST%>=2 THEN PROCprotbox(OX%,OY%):PROCoutpic:PROCquickdrawmain
14130PROCseticon(24,2,STR$ROT%)
14140ENDPROC
14150
14160DEFPROCrgbcontclick
14170RP%=FNperc(21,4):GP%=FNperc(21,7):BP%=FNperc(21,10)
14180IRP%=RP%:IGP%=GP%:IBP%=BP%
14190IF MOUIC%=3 THEN RP%-=1:IF RP%<0 THEN RP%=0
14200IF MOUIC%=5 THEN RP%+=1:IF RP%>200 THEN RP%=200
14210IF MOUIC%=6 THEN GP%-=1:IF GP%<0 THEN GP%=0
14220IF MOUIC%=8 THEN GP%+=1:IF GP%>200 THEN GP%=200
14230IF MOUIC%=9 THEN BP%-=1:IF BP%<0 THEN BP%=0
14240IF MOUIC%=11 THEN BP%+=1:IF BP%>200 THEN BP%=200
14250IF RP%<>IRP% THEN PROCseticon(21,4,STR$(RP%)+"%")
14260IF GP%<>IGP% THEN PROCseticon(21,7,STR$(GP%)+"%")
14270IF BP%<>IBP% THEN PROCseticon(21,10,STR$(BP%)+"%")
14280ENDPROC
14290
14300DEFPROCgreyscaleclick
14310PROCarrows(22,3,5,4,0,9,1):PROCarrows(22,6,8,7,0,9,1):PROCarrows(22,9,11,10,0,9,1)
14320ENDPROC
14330
14340DEFPROCpixelateclick
14350PROCarrows(23,2,4,3,1,100,1):PROCarrows(23,5,7,6,1,100,1)
14360ENDPROC
14370
14380DEFPROCframeclick
14390PROCarrows(19,5,7,3,1,618,1):PROCarrows(19,6,8,4,1,234,1)
14400IF MOUIC%<>2 THEN ENDPROC
14410PROCkillf
14420V%=VALFNgeticon(19,3):IF V%<1 THEN V%=1
14430IF V%>618 THEN V%=618
14440PROCseticon(19,3,STR$V%)
14450W%=VALFNgeticon(19,4):IF W%<1 THEN W%=1
14460IF W%>234 THEN W%=618
14470PROCseticon(19,4,STR$W%)
14480FRW%=V%+1:FRH%=W%+1:FUSE%=36:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [Set frame]")
14490IF MOUB%=4 THEN PROCmenoff
14500ENDPROC
14510
14520DEFPROCcolrepclick
14530IF MOUIC%=3 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
14540BLK%!8=HAND%(18):SYS "Wimp_GetWindowState",,BLK%+8
14550XOF%=(!BLK%)-((BLK%!12)-(BLK%!28)):IF XOF%>766 THEN XOF%=766
14560YOF%=(BLK%!4)-(((BLK%!24)-(BLK%!32))-556):IF YOF%>550 THEN YOF%=550
14570REM VDU4:PRINT XOF%,YOF%
14580IF YOF%<=220 THEN SREP%=(XOF% DIV 24)+((YOF% DIV 28)*32):PROCforcedrawcolrep
14590IF YOF%>=290 AND YOF%<514 THEN
14600YOF%-=290:C%=(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)
14610RECTANGLE FILL FX%,FY%,20,20:PROCoutsprite:REPS%?SREP%=C%:PROCforcedrawcolrep
14620ENDIF
14630ENDPROC
14640
14650DEFPROCarrows(W%,DI%,UI%,TI%,LV%,UV%,I%)
14660V%=VALFNgeticon(W%,TI%):OV%=V%
14670IF MOUIC%=DI% THEN V%-=I%:IF V%<LV% THEN V%=LV%
14680IF MOUIC%=UI% THEN V%+=I%:IF V%>UV% THEN V%=UV%
14690IF V%<>OV% THEN PROCseticon(W%,TI%,STR$(V%))
14700ENDPROC
14710
14720DEFPROCtparclick
14730PROCarrows(16,6,18,12,0,1024,8):PROCarrows(16,7,19,13,0,999,1):PROCarrows(16,8,20,14,0,999,1):PROCarrows(16,9,21,15,0,999,1):PROCarrows(16,10,22,16,0,999,1):PROCarrows(16,11,23,17,0,999,1)
14740IF MOUIC%=24 THEN SYS "Font_SetFontMax",(VALFNgeticon(16,12))*1024,(VALFNgeticon(16,13))*1152,(VALFNgeticon(16,14))*1152,(VALFNgeticon(16,15))*1152,(VALFNgeticon(16,16))*1152,(VALFNgeticon(16,17))*1152
14750IF MOUIC%=24 AND MOUB%=4 THEN PROCmenoff
14760IF MOUIC%=25 THEN
14770OSCLI("Configure FontMax "+FNgeticon(16,12)+"K"):OSCLI("Configure FontMax1 "+FNgeticon(16,13)):OSCLI("Configure FontMax2 "+FNgeticon(16,14)):OSCLI("Configure FontMax3 "+FNgeticon(16,15)):OSCLI("Configure FontMax4 "+FNgeticon(16,16))
14780OSCLI("Configure FontMax5 "+FNgeticon(16,17))
14790ENDIF
14800ENDPROC
14810
14820DEFPROClosefont
14830IF FONT%<>0 THEN PROCinpic:SYS "Font_LoseFont",FHAND%:PROCoutpic
14840ENDPROC
14850
14860DEFPROCgetfont
14870IF VALFNgeticon(14,4)<6 THEN PROCseticon(14,4,"6")
14880IF VALFNgeticon(14,5)<6 THEN PROCseticon(14,5,"6")
14890FONTX%=VALFNgeticon(14,4):FONTY%=VALFNgeticon(14,5)
14891REM VDU4:PRINT'FONT%,FO$,FONTX%,FONTY%," 14900"
14892REM END
14900IF FONT%<>0 THEN PROCinpic:SYS "Font_FindFont",,FO$,FONTX%*16,FONTY%*16 TO FHAND%:PROCoutpic
14910ENDPROC
14920
14930DEFPROCrestpic
14940PROCinpic
14950SYS&2E,290,SPBUF%,"PIC"
14960PROCoutpic
14970ENDPROC
14980
14990DEFPROCtextclick
15000IF MOUIC%<>6 THEN GOTO 15030
15010V%=VALFNgeticon(14,4):V%-=1:IF V%<6 THEN V%=6
15020PROCseticon(14,4,STR$V%)
15030IF MOUIC%<>7 THEN GOTO 15060
15040V%=VALFNgeticon(14,4):V%+=1:IF V%>999 THEN V%=999
15050PROCseticon(14,4,STR$V%)
15060IF MOUIC%<>8 THEN GOTO 15090
15070V%=VALFNgeticon(14,5):V%-=1:IF V%<6 THEN V%=6
15080PROCseticon(14,5,STR$V%)
15090IF MOUIC%<>9 THEN GOTO 15120
15100V%=VALFNgeticon(14,5):V%+=1:IF V%>999 THEN V%=999
15110PROCseticon(14,5,STR$V%)
15120IF MOUIC%<>12 THEN ENDPROC
15121REM VDU4:PRINT FONT%,FUST%,FO$
15130IF FONT%<>0 THEN
15140IF FUST%<>0 THEN PROCrestpic:PROClosefont:PROCforcedrawmain
15150PROCgetfont
15151REM GOTO 15230
15160TEXT$=FNgeticon(14,11):IF TEXT$="" THEN TEXT$=" "
15170FCOL%=PALTAB%?(COL%*2):FTIN%=PALTAB%?((COL%*2)+1):FTIN%=FTIN%>>2
15180FPAL%=((((FCOL% AND %11)<<6)+FTIN%)<<8)+((((FCOL% AND %1100)<<4)+FTIN%)<<16)+((((FCOL% AND %110000)<<2)+FTIN%)<<24)
15190FCOL%=PALTAB%?(FONTB%*2):FTIN%=PALTAB%?((FONTB%*2)+1):FTIN%=FTIN%>>2
15200BPAL%=((((FCOL% AND %11)<<6)+FTIN%)<<8)+((((FCOL% AND %1100)<<4)+FTIN%)<<16)+((((FCOL% AND %110000)<<2)+FTIN%)<<24)
15201REM GOTO 15230
15210PROCinpic:SYS "ColourTrans_SetFontColours",FHAND%,BPAL%,FPAL%,14:PROCoutpic:EFM%=MODE
15220FUST%=1:OX%=-1:OY%=-1
15230ELSE
15240IF FUST%<>0 THEN PROCrestpic:PROCforcedrawmain
15250TEXT$=FNgeticon(14,11):IF TEXT$="" THEN TEXT$=" "
15260FUST%=1:OX%=-1:OY%=-1:TCOL%=COL%:TBAK%=FONTB%
15270IF VALFNgeticon(14,4)<1 THEN PROCseticon(14,4,"1")
15280IF VALFNgeticon(14,5)<1 THEN PROCseticon(14,5,"1")
15290FONTX%=VALFNgeticon(14,4):FONTY%=VALFNgeticon(14,5)
15300!IO%=FONTX%:IO%!4=FONTY%
15310IO%!8=8:IO%!12=8
15320ENDIF
15330ENDPROC
15340
15350DEFPROCostext(TX%,TY%)
15360LOCAL L%
15370TT%=0
15380IF FNhigh(14,14) THEN TT%=1
15390IF FNhigh(14,15) THEN TT%=2
15400IF FNhigh(14,16) THEN TT%=3
15410FCOL%=PALTAB%?(TCOL%*2):FTIN%=PALTAB%?((TCOL%*2)+1)
15420BCOL%=PALTAB%?(TBAK%*2):BTIN%=PALTAB%?((TBAK%*2)+1)
15430CASE TT% OF
15440WHEN 0:PROCcol(FCOL%,FTIN%,0):FORL%=1 TO LEN(TEXT$):SYS&2E,51,ASC(MID$(TEXT$,L%,1)),,TX%,TY%,,IO%:TX%+=FONTX%*2:NEXT
15450WHEN 2:PROCcol(BCOL%,BTIN%,0):OTX%=TX%:FORL%=1 TO LEN(TEXT$):SYS&2E,51,ASC(MID$(TEXT$,L%,1)),,TX%,TY%,,IO%:TX%+=FONTX%*2:NEXT:TX%=OTX%+2:TY%+=4
15460FORL%=1 TO LEN(TEXT$):SYS&2E,51,ASC(MID$(TEXT$,L%,1)),,TX%,TY%,,IO%:TX%+=FONTX%*2:NEXT:TX%=OTX%+4:TY%+=4
15470PROCcol(FCOL%,FTIN%,0):FORL%=1 TO LEN(TEXT$):SYS&2E,51,ASC(MID$(TEXT$,L%,1)),,TX%,TY%,,IO%:TX%+=FONTX%*2:NEXT
15480WHEN 1:PROCcol(BCOL%,BTIN%,0):OTX%=TX%:FORCX%=TX%-(FONTX% DIV4) TO TX%+(FONTX% DIV4) STEP (FONTX% DIV 4):FORCY%=TY%-(FONTY% DIV 2) TO TY%+(FONTY% DIV2) STEP (FONTY% DIV2):TX%=CX%:FORL%=1 TO LEN(TEXT$):SYS&2E,51,ASC(MID$(TEXT$,L%,1)),,TX%,CY%,,IO%:TX%+=FONTX%*2:NEXT:NEXT:NEXT
15490PROCcol(FCOL%,FTIN%,0):TX%=OTX%:FORL%=1 TO LEN(TEXT$):SYS&2E,51,ASC(MID$(TEXT$,L%,1)),,TX%,TY%,,IO%:TX%+=FONTX%*2:NEXT
15500WHEN 3:PROCcol(BCOL%,BTIN%,0):RECTANGLE FILL X%,Y%,(LEN(TEXT$))*(FONTX%*2),FONTY%*4:PROCcol(FCOL%,FTIN%,0)
15510FORL%=1 TO LEN(TEXT$):SYS&2E,51,ASC(MID$(TEXT$,L%,1)),,TX%,TY%,,IO%:TX%+=FONTX%*2:NEXT
15520ENDCASE
15530ENDPROC
15540
15550DEFPROCedbruclick
15560IF FUSE%=4 THEN PROCkillf:PROCwindname(2,PIC$):PROCspinit:FUSE%=-1
15570IF MOUIC%>=0 AND MOUIC%<=11 THEN EDBR%=MOUIC%+1:PROCforcedrawedbru(0,-640,1024,0):ENDPROC
15580IF MOUIC%=13 THEN SYS&2E,303,BRUSH%,STR$EDBR%:PROCforcedrawedbru(0,-640,1024,0):PROCmhtrbm:ENDPROC
15590IF MOUIC%=14 THEN SYS&2E,289,BRUSH%,STR$EDBR%:PROCforcedrawedbru(0,-640,1024,0):PROCmhtrbm:ENDPROC
15600IF MOUIC%<>15 THEN GOTO 15630
15610PROCinsprite(0,BRUSH%,STR$EDBR%):GCOL3,63 TINT 192:RECTANGLE FILL 0,0,62,60:PROCoutsprite:PROCinsprite(1,BRUSH%,STR$EDBR%):GCOL3,63 TINT 192:RECTANGLE FILL 0,0,62,60:PROCoutsprite
15620PROCforcedrawedbru(0,-640,1024,0):PROCmhtrbm:ENDPROC
15630IF MOUIC%<>16 THEN GOTO 15660
15640FORL%=0 TO 1:PROCinsprite(L%,BRUSH%,STR$EDBR%):PLOT4,0,0:PLOT4,60,60:PLOT189,2,0:PROCoutsprite:NEXT
15650PROCforcedrawedbru(0,-640,1024,0):PROCmhtrbm:ENDPROC
15660IF MOUIC%<>17 THEN GOTO 15690
15670FORL%=0 TO 1:PROCinsprite(L%,BRUSH%,STR$EDBR%):PLOT4,2,0:PLOT4,60,60:PLOT189,0,0:PROCoutsprite:NEXT
15680PROCforcedrawedbru(0,-640,1024,0):PROCmhtrbm:ENDPROC
15690IF MOUIC%<>18 THEN GOTO 15720
15700FORL%=0 TO 1:PROCinsprite(L%,BRUSH%,STR$EDBR%):PLOT4,0,0:PLOT4,62,56:PLOT189,0,4:PROCoutsprite:NEXT
15710PROCforcedrawedbru(0,-640,1024,0):PROCmhtrbm:ENDPROC
15720IF MOUIC%<>19 THEN GOTO 15750
15730FORL%=0 TO 1:PROCinsprite(L%,BRUSH%,STR$EDBR%):PLOT4,0,4:PLOT4,62,60:PLOT189,0,0:PROCoutsprite:NEXT
15740PROCforcedrawedbru(0,-640,1024,0):PROCmhtrbm:ENDPROC
15750IF MOUIC%<>12 THEN GOTO 15780
15760FORL%=0 TO 1:PROCinsprite(L%,BRUSH%,STR$EDBR%):GCOL0,0 TINT 0:RECTANGLE FILL 0,0,62,60:PROCoutsprite:NEXT
15770PROCforcedrawedbru(0,-640,1024,0):PROCmhtrbm:ENDPROC
15780IF MOUIC%=20 THEN SYS&2E,268,BRUSH%,"<Archrome$Dir>.Brushes":PROCmenoff:ENDPROC
15790IF MOUIC%=21 THEN SYS&2E,266,BRUSH%,"<Archrome$Dir>.Brushes":PROCforcedrawedbru(0,-640,1024,0):PROCmhtrbm:ENDPROC
15800BLK%!8=HAND%(12):SYS "Wimp_GetWindowState",,BLK%+8
15810XOF%=((!BLK%)-(BLK%!12))-28:IF XOF%>766 OR XOF%<0 THEN ENDPROC
15820YOF%=((BLK%!4)-(BLK%!16))-112:IF YOF%>508 OR YOF%<0 THEN ENDPROC
15830XOF%=XOF% DIV 24:YOF%=YOF% DIV 32
15840IF MOUB%=4 THEN SYS&2E,298,BRUSH%,STR$EDBR%,XOF%,YOF%,63,192:SYS&2E,300,BRUSH%,STR$EDBR%,XOF%,YOF%,1
15850IF MOUB%=1 THEN SYS&2E,298,BRUSH%,STR$EDBR%,XOF%,YOF%:SYS&2E,300,BRUSH%,STR$EDBR%,XOF%,YOF%
15860IF MOUB%<>1 AND MOUB%<>4 THEN ENDPROC
15870PROCforcedrawedbru((XOF%*24)+28,-(((15-YOF%)*32)+48),(XOF%*24)+52,-(((15-YOF%)*32)+16))
15880PROCforcedrawedbru(((EDBR%-1)*64)+32,-620,((EDBR%-1)*64)+96,-560)
15890ENDPROC
15900
15910DEFPROCecfclick
15920IF MOUIC%>17 AND MOUIC%<22 THEN PROCforcedrawpat:ENDPROC
15930IF MOUIC%<>16 THEN ENDPROC
15940IF MOUB%<>1 AND MOUB%<>4 THEN ENDPROC
15950BLK%!8=HAND%(11):SYS "Wimp_GetWindowState",,BLK%+8
15960XOF%=((!BLK%)-(BLK%!12))-180:IF XOF%>766 THEN XOF%=766
15970YOF%=((BLK%!4)-(BLK%!16))-20:IF YOF%>220 THEN YOF%=220
15980col%=(XOF% DIV 24)+((YOF% DIV 28)*32)
15990cby%=TTB%?col%
16000CECF%=FNcecf:L%=0:FORK%=8 TO 15:IF FNhigh(11,K%) THEN L%=K%-7:NEXT ELSE NEXT
16010IF L%=0 THEN ENDPROC
16020ECF%(L%,CECF%)=cby%
16030PROCforcedrawpat
16040ENDPROC
16050
16060DEFPROCreloadpatfills
16070SYS&2E,266,PFILLS%,"<Archrome$Dir>.PatFills"
16080ENDPROC
16090
16100DEFPROCpatfillclick
16110IF MOUIC%=0 THEN PROCreloadpatfills:ENDPROC
16120BLK%!8=HAND%(20):SYS "Wimp_GetWindowState",,BLK%+8
16130XOF%=((!BLK%)-(BLK%!12)):YOF%=((BLK%!4)-(BLK%!16))
16140K%=-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
16150IF K%=-1 THEN ENDPROC ELSE CPF%=K%:PROCforcedrawpatfill
16160ENDPROC
16170
16180DEFPROCsavegrfills
16190F%=OPENOUT("<Archrome$Dir>.GradFills")
16200FORL%=0 TO 15:FORK%=0 TO 1:FORI%=0 TO 4:PRINT#F%,GRFI%(L%,K%,I%):NEXT:NEXT:NEXT
16210CLOSE#F%
16220ENDPROC
16230
16240DEFPROCloadgrfills
16250F%=OPENIN("<Archrome$Dir>.GradFills")
16260FORL%=0 TO 15:FORK%=0 TO 1:FORI%=0 TO 4:INPUT#F%,GRFI%(L%,K%,I%):NEXT:NEXT:NEXT
16270CLOSE#F%
16280PROCforcedrawfill
16290ENDPROC
16300
16310DEFPROCfilluse
16320SNO%=FNgrafilno:IF SNO%=-1 THEN ENDPROC
16330PROCkillf:FUSE%=31:FUST%=0:GRFN%=SNO%:GRTY%=0:PROChelp:PROCwindname(2,PIC$+" [Graduated fill ("+FNfilldet(SNO%+1)+")]"):PROCspinit
16340IF MOUB%=4 THEN PROCmenoff
16350ENDPROC
16360
16370DEFFNfilldet(S%):IF GRTY%=0 THEN ="flood "+STR$S% ELSE ="area "+STR$S%
16380
16390DEFPROCinvertfill
16400NOS%=FNgrafilno
16410IA%=0:IB%=VALFNgeticon(13,44):IB%-=1
16420REPEAT: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%
16430PROCforcedrawfill
16440ENDPROC
16450
16460DEFPROCinterpfill
16470NOS%=FNgrafilno
16480IA%=0:REPEAT:IB%=IA%+1
16490IF IB%=16 THEN PROCforcedrawfill:ENDPROC
16500IF GRFI%(IB%,0,NOS%)=0 AND GRFI%(IB%,1,NOS%)=0 THEN IB%+=1:GOTO 16490
16510IF IB%=IA%+1 THEN IA%=IB%:IB%+=1:GOTO 16490
16520T1%=GRFI%(IA%,1,NOS%)>>6
16530R1%=((GRFI%(IA%,0,NOS%) AND %11)<<2)+T1%
16540G1%=(GRFI%(IA%,0,NOS%) AND %1100)+T1%
16550B1%=((GRFI%(IA%,0,NOS%) AND %110000)>>2)+T1%
16560T2%=GRFI%(IB%,1,NOS%)>>6
16570RD=((((GRFI%(IB%,0,NOS%) AND %11)<<2)+T2%)-R1%)/(IB%-IA%)
16580GD=(((GRFI%(IB%,0,NOS%) AND %1100)+T2%)-G1%)/(IB%-IA%)
16590BD=((((GRFI%(IB%,0,NOS%) AND %110000)>>2)+T2%)-B1%)/(IB%-IA%)
16600IA%+=1:FORL%=1 TO IB%-IA%
16610R%=R1%+(RD*L%):G%=G1%+(GD*L%):B%=B1%+(BD*L%)
16620SYS "ColourTrans_ReturnGCOLForMode",(B%<<28)+(G%<<20)+(R%<<12),15 TO G%
16630GRFI%(IA%,0,NOS%)=G%>>2:GRFI%(IA%,1,NOS%)=(G% AND %11)<<6
16640IA%+=1:NEXT
16650IB%=IA%+1:GOTO 16490
16660
16670DEFPROCwipefill
16680NOS%=FNgrafilno
16690FORL%=0 TO 15:FORK%=0 TO 1:GRFI%(L%,K%,NOS%)=0:NEXT:NEXT
16700PROCforcedrawfill:ENDPROC
16710
16720DEFPROCcompfill
16730NOS%=FNgrafilno
16740CA%=GRFI%(0,0,NOS%):TA%=GRFI%(0,1,NOS%):IA%=1:IB%=1
16750WHILE IB%<16
16760IF 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
16770IB%+=1:ENDWHILE
16780WHILE IA%<16:GRFI%(IA%,0,NOS%)=0:GRFI%(IA%,1,NOS%)=0:IA%+=1:ENDWHILE
16790PROCforcedrawfill
16800ENDPROC
16810
16820DEFPROCfillclick
16830IF MOUIC%<0 THEN GOTO 17510
16840IF MOUIC%=51 THEN PROCsavegrfills
16850IF MOUIC%=50 THEN PROCloadgrfills
16860IF MOUIC%=52 THEN PROCfilluse:ENDPROC
16870IF MOUIC%=60 THEN PROCinvertfill:ENDPROC
16880IF MOUIC%=61 THEN PROCinterpfill:ENDPROC
16890IF MOUIC%=62 THEN PROCwipefill:ENDPROC
16900IF MOUIC%=63 THEN PROCcompfill:ENDPROC
16910IF MOUIC%>=0 AND MOUIC%<=15 THEN PROCsetgradfill:ENDPROC
16920IF MOUIC%>=17 AND MOUIC%<=21 THEN PROCforcedrawfill:ENDPROC
16930IF MOUIC%<>40 THEN GOTO 16960
16940FILR%=FILR%-1:IF FILR%<0 THEN FILR%=359
16950PROCseticon(13,39,STR$FILR%):ENDPROC
16960IF MOUIC%<>41 THEN GOTO 16990
16970FILR%=FILR%+1:IF FILR%>359 THEN FILR%=0
16980PROCseticon(13,39,STR$FILR%):ENDPROC
16990IF MOUIC%<>43 THEN GOTO 17020
17000NOS%=VALFNgeticon(13,44):IF NOS%=2 THEN ENDPROC
17010PROCshadeicon(13,FNfilic(NOS%-1)):NOS%-=1:PROCseticon(13,44,STR$(NOS%)):ENDPROC
17020IF MOUIC%<>45 THEN GOTO 17050
17030NOS%=VALFNgeticon(13,44):IF NOS%=16 THEN ENDPROC
17040PROCclearicon(13,FNfilic(NOS%)):NOS%+=1:PROCseticon(13,44,STR$(NOS%)):ENDPROC
17050
17060ENDPROC
17070
17080DEFPROCsetgradfill
17090SNO%=FNgrafilno
17100CASE MOUIC% OF
17110WHEN 0:RESTORE 17340
17120WHEN 1:RESTORE 17350
17130WHEN 2:RESTORE 17360
17140WHEN 3:RESTORE 17370
17150WHEN 4:RESTORE 17380
17160WHEN 5:RESTORE 17390
17170WHEN 6:RESTORE 17400
17180WHEN 7:RESTORE 17420
17190WHEN 8:RESTORE 17430
17200WHEN 9:RESTORE 17440
17210WHEN 10:RESTORE 17450
17220WHEN 11:RESTORE 17410
17230WHEN 12:RESTORE 17460
17240WHEN 13:RESTORE 17470
17250WHEN 14:RESTORE 17480
17260WHEN 15:RESTORE 17490
17270ENDCASE
17280FORL%=0 TO 15:PROCshadeicon(13,FNfilic(L%)):FORK%=0 TO 1:GRFI%(L%,K%,SNO%)=0:NEXT:NEXT
17290READ S%:FORL%=0 TO S%-1:PROCclearicon(13,FNfilic(L%)):FORK%=0 TO 1:READ GRFI%(L%,K%,SNO%):NEXT:NEXT
17300PROCseticon(13,44,STR$S%)
17310PROCforcedrawfill
17320ENDPROC
17330
17340DATA 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
17350DATA 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
17360DATA 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
17370DATA 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
17380DATA 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
17390DATA 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
17400DATA 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
17410DATA 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
17420DATA 8, 18,0,18,64,18,128,18,192,39,0,39,64,39,128,39,192
17430DATA 8, 2,0,2,64,2,128,2,192,7,0,7,64,7,128,7,192
17440DATA 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
17450DATA 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
17460DATA 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
17470DATA 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
17480DATA 8, 9,0,9,64,9,128,9,192,14,0,14,64,14,128,14,192,0
17490DATA 8, 21,0,21,64,21,128,21,192,42,0,42,64,42,128,42,192
17500
17510BLK%!8=HAND%(13):SYS "Wimp_GetWindowState",,BLK%+8
17520XOF%=((!BLK%)-(BLK%!12))-422:IF XOF%>766 OR XOF%<0 THEN ENDPROC
17530YOF%=((BLK%!4)-(BLK%!16))-236:IF YOF%>220 OR YOF%<0 THEN ENDPROC
17540col%=(XOF% DIV 24)+((YOF% DIV 28)*32)
17550tin%=PALTAB%?((col%*2)+1)
17560col%=PALTAB%?(col%*2)
17570FPE%=-1:FORL%=0 TO 15:IF FNhigh(13,FNfilic(L%)) THEN FPE%=L%:NEXT ELSE NEXT
17580SNO%=FNgrafilno
17590IF FPE%=-1 OR SNO%=-1 THEN ENDPROC
17600GRFI%(FPE%,0,SNO%)=col%:GRFI%(FPE%,1,SNO%)=tin%:PROCforcedrawfill
17610ENDPROC
17620
17630DEFFNfilic(FSN%):IF FSN%<=11 THEN =FSN%+26 ELSE =(FSN%-12)+46
17640
17650DEFPROClinepatclick
17660CASE MOUIC% OF
17670WHEN 3:PL%=VALFNgeticon(10,1):IF PL%>1 THEN PROCshadeicon(10,PL%+6):PL%-=1:PROCseticon(10,1,STR$PL%)
17680WHEN 2:PL%=VALFNgeticon(10,1):IF PL%<40 THEN PROCclearicon(10,PL%+7):PL%+=1:PROCseticon(10,1,STR$PL%)
17690WHEN 4:PALE%=VALFNgeticon(10,1):VDU23,6,
17700IN%=7:FORL%=1 TO 5:N%=0:I%=128:FORK%=1 TO 8:IF FNhigh(10,IN%) THEN N%+=I%
17710I%=I% DIV 2:IN%+=1:NEXT:VDU N%:PAT%(L%)=N%:NEXT:VDU 0|
17720IF MOUB%=4 THEN PROCmenoff
17730ENDCASE
17740ENDPROC
17750
17760DEFPROCgrabclick
17770IF MOUIC%<>12 OR (FUSE%<>34 AND FUST%<2) THEN ENDPROC
17780PROCinpic:IF FUSE%<>34 THEN PROCpgrab(OX%,OY%,3) ELSE PROCpimport(OX%,OY%,3)
17790GRXM%=VAL(FNgeticon(8,4)):IF GRXM%<1 THEN GRXM%=1:PROCseticon(8,4,STR$GRXM%)
17800GRYM%=VAL(FNgeticon(8,5)):IF GRYM%<1 THEN GRYM%=1:PROCseticon(8,5,STR$GRYM%)
17810GRXD%=VAL(FNgeticon(8,6)):IF GRXD%<1 THEN GRXD%=1:PROCseticon(8,6,STR$GRXD%)
17820GRYD%=VAL(FNgeticon(8,7)):IF GRYD%<1 THEN GRYD%=1:PROCseticon(8,6,STR$GRYD%)
17830PROCgrabflip
17840GRMA%=FNhigh(8,14)
17850IF FUSE%<>34 THEN PROCpgrab(OX%,OY%,3) ELSE PROCpimport(OX%,OY%,3)
17860PROCoutpic:PROCquickdrawmain
17870ENDPROC
17880
17890DEFPROCgrabflip
17900IF (FNhigh(8,10) AND NOT GRFX%) OR ((NOT FNhigh(8,10)) AND GRFX%) THEN SYS&2E,289,SPBUF%,GRN$:GRFX%=NOT GRFX%
17910IF (FNhigh(8,11) AND NOT GRFY%) OR ((NOT FNhigh(8,11)) AND GRFY%) THEN SYS&2E,303,SPBUF%,GRN$:GRFY%=NOT GRFY%
17920ENDPROC
17930
17940DEFPROCgridclick
17950D%=VAL(FNgeticon(6,4))
17960IF MOUIC%=2 AND D%>1 THEN D%-=1:PROCseticon(6,4,STR$D%):ENDPROC
17970IF MOUIC%=6 AND D%<999 THEN D%+=1:PROCseticon(6,4,STR$D%):ENDPROC
17980D%=VAL(FNgeticon(6,5))
17990IF MOUIC%=3 AND D%>1 THEN D%-=1:PROCseticon(6,5,STR$D%):ENDPROC
18000IF MOUIC%=7 AND D%<999 THEN D%+=1:PROCseticon(6,5,STR$D%):ENDPROC
18010D%=VAL(FNgeticon(6,12))
18020IF MOUIC%=10 AND D%>0 THEN D%-=1:PROCseticon(6,12,STR$D%):ENDPROC
18030IF MOUIC%=14 AND D%<999 THEN D%+=1:PROCseticon(6,12,STR$D%):ENDPROC
18040D%=VAL(FNgeticon(6,13))
18050IF MOUIC%=11 AND D%>0 THEN D%-=1:PROCseticon(6,13,STR$D%):ENDPROC
18060IF MOUIC%=15 AND D%<999 THEN D%+=1:PROCseticon(6,13,STR$D%):ENDPROC
18070IF MOUIC%=16 THEN PROCseticon(6,4,"1"):PROCseticon(6,5,"1"):PROCseticon(6,12,"0"):PROCseticon(6,13,"0"):ENDPROC
18080IF MOUIC%<>17 THEN ENDPROC
18090GRWI%=VAL(FNgeticon(6,4)):IF GRWI%<1 THEN GRWI%=1
18100GRHE%=VAL(FNgeticon(6,5)):IF GRHE%<1 THEN GRHE%=1
18110GRBX%=VAL(FNgeticon(6,12)):IF GRBX%>GRWI% THEN REPEAT:GRBX%-=GRWI%:UNTIL GRBX%<GRWI%:PROCseticon(6,12,STR$GRBX%)
18120GRBY%=VAL(FNgeticon(6,13)):IF GRBY%>GRHE% THEN REPEAT:GRBY%-=GRHE%:UNTIL GRBY%<GRHE%:PROCseticon(6,13,STR$GRBY%)
18130IF MOUB%=4 THEN PROCmenoff
18140PROCforcedrawmain
18150ENDPROC
18160
18170DEFPROCbrushclick
18180IF MOUIC%>=0 AND MOUIC%<=11 THEN
18190IF FUST%>0 THEN PROCinpic:PROCpaintscale:PROCeorback:PROCpaintbrush(OX%,OY%)
18200SELBR%=MOUIC%+1
18210IF FUST%>0 THEN PROCeorback:PROCpaintbrush(OX%,OY%):PROCoutpic:PROCquickdrawmain
18220PROCforcedrawbrush
18230ENDIF
18240IF MOUIC%<>20 OR FUSE%=29 OR FUSE%=30 THEN ENDPROC
18250IF FUST%>0 THEN PROCinpic:PROCpaintscale:PROCeorback:PROCpaintbrush(OX%,OY%)
18260BXM%=VAL(FNgeticon(5,16)):IF BXM%<1 THEN BXM%=1:PROCseticon(4,16,"1")
18270BYM%=VAL(FNgeticon(5,18)):IF BYM%<1 THEN BYM%=1:PROCseticon(4,18,"1")
18280BXD%=VAL(FNgeticon(5,17)):IF BXD%<1 THEN BXD%=1:PROCseticon(4,17,"1")
18290BYD%=VAL(FNgeticon(5,19)):IF BYD%<1 THEN BYD%=1:PROCseticon(4,19,"1")
18300IF FUST%>0 THEN PROCpaintscale:PROCeorback:PROCpaintbrush(OX%,OY%):PROCoutpic:PROCquickdrawmain
18310ENDPROC
18320
18330DEFPROCairbclick
18340D%=VAL(FNgeticon(4,1))
18350IF MOUIC%=4 AND D%>1 THEN D%-=1:PROCseticon(4,1,STR$D%):ENDPROC
18360IF MOUIC%=6 AND D%<999 THEN D%+=1:PROCseticon(4,1,STR$D%):ENDPROC
18370D%=VAL(FNgeticon(4,3))
18380IF MOUIC%=5 AND D%>4 THEN D%-=1:PROCseticon(4,3,STR$D%):ENDPROC
18390IF MOUIC%=7 AND D%<999 THEN D%+=1:PROCseticon(4,3,STR$D%):ENDPROC
18400ENDPROC
18410
18420DEFPROCmenoff:SYS "Wimp_CreateMenu",-1:ENDPROC
18430
18440DEFPROCbuildiconmenu
18450PROCbuildmenu(30,"Archrome")
18460PROCaddtomenu(30,"Info",1,"")
18470PROCaddtomenu(30,"Save",0,"L")
18480PROCaddtomenu(30,"Quit",-1,"F")
18490ENDPROC
18500
18510DEFPROCiconmenu:MENO%=30:SYS "Wimp_CreateMenu",,MENAD%(30),MOUX%-64,252:ENDPROC
18520
18530DEFPROCwindmenu:MENO%=0:MEBA%=MENU%:MEINBA%=MENUIND%
18540FORL%=0 TO NOMENS%:TAD%=MENAD%(L%)+28:REPEAT:!TAD%=(!TAD%) AND 130:TAD%!8=(TAD%!8) AND (&FFFFFFFF-(1<<22)):TAD%+=24:UNTIL !(TAD%-24)>127:NEXT
18550
18560IF LITY%=21 THEN PROCtickitem(12,1)
18570IF LITY%=53 THEN PROCtickitem(12,2)
18580IF LITY%=5 THEN PROCtickitem(11,1)
18590IF (USE% AND 15)=0 THEN PROCtickitem(11,3)
18600IF (USE% AND 15)=1 THEN PROCtickitem(11,4)
18610IF (USE% AND 15)=2 THEN PROCtickitem(11,5)
18620IF (USE% AND 15)=3 THEN PROCtickitem(11,6)
18630IF (USE% AND 15)=4 THEN PROCtickitem(11,7)
18640IF (USE% AND 15)=6 THEN PROCtickitem(11,8)
18650IF (USE% AND 15)=7 THEN PROCtickitem(11,9)
18660IF (USE% AND 112)=16 THEN PROCtickitem(11,10)
18670IF (USE% AND 112)=32 THEN PROCtickitem(11,11)
18680IF (USE% AND 112)=48 THEN PROCtickitem(11,12)
18690IF (USE% AND 112)=64 THEN PROCtickitem(11,13)
18700IF (USE% AND 112)=80 THEN PROCtickitem(11,14)
18710IF FONTS%=0 THEN PROCshadeitem(14,FONTS%+3)
18720MI%=1:FORL%=2 TO 16
18730IF ZOOM%=L% THEN PROCtickitem(3,MI%)
18740MI%+=1:NEXT
18750IF GRCO%=-1 THEN PROCshadeitem(5,2) ELSE PROCshadeitem(5,1)
18760IF GRLO% THEN PROCtickitem(5,3)
18770IF ZOOM%>1 THEN PROCtickitem(0,8)
18780IF KUKE% THEN PROCtickitem(10,2)
18790
18800SYS "Wimp_CreateMenu",,MENAD%(0),MOUX%-64,MOUY%+60
18810ENDPROC
18820
18830DEFPROCbuildmainmenu
18840MEOF%=0:MEIN%=0
18850
18860PROCbuildmenu(15,"Speed")
18870PROCaddtomenu(15,"Very fast",-1,"")
18880PROCaddtomenu(15,"Fast",-1,"")
18890PROCaddtomenu(15,"Medium",-1,"")
18900PROCaddtomenu(15,"Slow",-1,"F")
18910
18920PROCbuildmenu(16,"Mouse")
18930PROCaddtomenu(16,"X only",MENAD%(15),"")
18940PROCaddtomenu(16,"Y only",MENAD%(15),"")
18950PROCaddtomenu(16,"Both",MENAD%(15),"F")
18960
18970PROCbuildmenu(1,"File")
18980PROCaddtomenu(1,"Save",0,"")
18990PROCaddtomenu(1,"Save as sprite",7,"")
19000PROCaddtomenu(1,"Export",-1,"F")
19010
19020PROCbuildmenu(12,"Pattern")
19030PROCaddtomenu(12,"Restarted",-1,"")
19040PROCaddtomenu(12,"Continuous",-1,"F")
19050
19060PROCbuildmenu(11,"Styles")
19070PROCaddtomenu(11,"Solid line",-1,"")
19080PROCaddtomenu(11,"Line pattern",MENAD%(12),"L")
19090PROCaddtomenu(11,"Overwrite",-1,"")
19100PROCaddtomenu(11,"OR",-1,"")
19110PROCaddtomenu(11,"AND",-1,"")
19120PROCaddtomenu(11,"EOR",-1,"")
19130PROCaddtomenu(11,"Invert",-1,"")
19140PROCaddtomenu(11,"NAND",-1,"")
19150PROCaddtomenu(11,"NOR",-1,"L")
19160PROCaddtomenu(11,"ECF 1",-1,"")
19170PROCaddtomenu(11,"ECF 2",-1,"")
19180PROCaddtomenu(11,"ECF 3",-1,"")
19190PROCaddtomenu(11,"ECF 4",-1,"")
19200PROCaddtomenu(11,"Giant ECF",-1,"F")
19210
19220PROCbuildmenu(13,"Fill")
19230PROCaddtomenu(13,"Flood fill",-1,"")
19240PROCaddtomenu(13,"Pattern fill",-1,"L")
19250PROCaddtomenu(13,"Graduated fill",17,"F")
19260
19270PROCbuildmenu(2,"Paint")
19280PROCaddtomenu(2,"Show palette",-1,"")
19290PROCaddtomenu(2,"Unset transparents",-1,"")
19300PROCaddtomenu(2,"Set transparents",-1,"L")
19310PROCaddtomenu(2,"Pixels",-1,"")
19320PROCaddtomenu(2,"Sketch",-1,"")
19330PROCaddtomenu(2,"Rubber line",-1,"")
19340PROCaddtomenu(2,"Airbrush...",-1,"")
19350PROCaddtomenu(2,"Paintbrush...",-1,"L")
19360PROCaddtomenu(2,"Fill",MENAD%(13),"L")
19370PROCaddtomenu(2,"Line style",MENAD%(11),"F")
19380
19390L%=1:LFR$="":NOFM%=40:NOLF%=0
19400CFR$=FNfontroot(FONT$(L%))
19410IF CFR$=LFR$ THEN FONTT$(NOLF%)=RIGHT$(FONT$(L%),(LEN(FONT$(L%))-(LEN(CFR$)+1))):NOLF%+=1:GOTO 19510
19420IF LFR$<>"" THEN
19430IF NOLF%>0 THEN
19440PROCbuildmenu(NOFM%,LFR$):FORK%=0 TO NOLF%-1:IF K%=NOLF%-1 THEN O$="F" ELSE O$=""
19450PROCaddtomenu(NOFM%,FONTT$(K%),-1,O$):NEXT:NOLF%=0:NOFM%+=1
19460ELSE
19470IF INSTR(FONT$(L%-1),".")<>0 THEN PROCbuildmenu(NOFM%,LFR$):PROCaddtomenu(NOFM%,RIGHT$(FONT$(L%-1),(LEN(FONT$(L%-1))-(LEN(LFR$)+1))),-1,"F"):NOLF%=0:NOFM%+=1
19480ENDIF
19490ENDIF
19500LFR$=CFR$:IF INSTR(FONT$(L%),".")<>0 THEN FONTT$(NOLF%)=RIGHT$(FONT$(L%),(LEN(FONT$(L%))-(LEN(CFR$)+1))):NOLF%+=1
19510L%+=1:IF L%<=FONTS% THEN GOTO 19400
19520IF LFR$<>"" THEN
19530IF NOLF%>0 THEN
19540PROCbuildmenu(NOFM%,LFR$):FORK%=0 TO NOLF%-1:IF K%=NOLF%-1 THEN O$="F" ELSE O$=""
19550PROCaddtomenu(NOFM%,FONTT$(K%),-1,O$):NEXT:NOLF%=0:NOFM%+=1
19560ELSE
19570IF INSTR(FONT$(L%-1),".")<>0 THEN PROCbuildmenu(NOFM%,LFR$):PROCaddtomenu(NOFM%,RIGHT$(FONT$(L%-1),(LEN(FONT$(L%-1))-(LEN(LFR$)+1))),-1,"F"):NOLF%=0:NOFM%+=1
19580ENDIF
19590ENDIF
19600
19610PROCbuildmenu(14,"Fonts")
19620L%=0:LFR$="":NOFM%=40:COTF%=1
19630IF L%=0 AND FONTS%=0 THEN PROCaddtomenu(14,FONT$(0),-1,"L"):GOTO 19750
19640IF L%=0 THEN PROCaddtomenu(14,FONT$(0),-1,""):LFR$="System font":GOTO 19720
19650CFR$=FNfontroot(FONT$(L%))
19660IF CFR$=LFR$ THEN COTF%+=1:GOTO 19720
19670IF LFR$<>"System font" THEN
19680IF COTF%>1 OR INSTR(FONT$(L%-1),".")<>0 THEN PROCaddtomenu(14,LFR$,MENAD%(NOFM%),""):NOFM%+=1 ELSE PROCaddtomenu(14,LFR$,-1,"")
19690COTF%=1
19700ENDIF
19710LFR$=CFR$
19720L%+=1:IF L%<=FONTS% THEN GOTO 19630
19730IF COTF%>1 OR INSTR(FONT$(L%-1),".")<>0 THEN PROCaddtomenu(14,LFR$,MENAD%(NOFM%),"L") ELSE PROCaddtomenu(14,LFR$,-1,"L")
19740
19750PROCaddtomenu(14,"Background",15,"")
19760IF FONTS%>0 THEN PROCaddtomenu(14,"Parameters",16,"F") ELSE PROCaddtomenu(14,"Parameters",16,"SF")
19770
19780PROCbuildmenu(3,"Zoom")
19790FORL%=2 TO 16
19800IF L%=16 THEN O$="F" ELSE O$=""
19810PROCaddtomenu(3,"Zoom x"+STR$L%,-1,O$)
19820NEXT
19830
19840PROCbuildmenu(4,"Shapes")
19850PROCaddtomenu(4,"Wire rectangle",-1,"")
19860PROCaddtomenu(4,"Wire triangle",-1,"")
19870PROCaddtomenu(4,"Wire circle",-1,"")
19880PROCaddtomenu(4,"Wire ellipse",-1,"")
19890PROCaddtomenu(4,"Wire parallelogram",-1,"")
19900PROCaddtomenu(4,"Wire arc",-1,"L")
19910PROCaddtomenu(4,"Solid rectangle",-1,"")
19920PROCaddtomenu(4,"Solid triangle",-1,"")
19930PROCaddtomenu(4,"Solid circle",-1,"")
19940PROCaddtomenu(4,"Solid ellipse",-1,"")
19950PROCaddtomenu(4,"Solid parallelogram",-1,"")
19960PROCaddtomenu(4,"Solid sector",-1,"")
19970PROCaddtomenu(4,"Solid segment",-1,"F")
19980
19990PROCbuildmenu(6,"Presets")
20000PROCaddtomenu(6,"2x2 grid",-1,"")
20010PROCaddtomenu(6,"3x3 grid",-1,"")
20020PROCaddtomenu(6,"4x4 grid",-1,"")
20030PROCaddtomenu(6,"6x6 grid",-1,"")
20040PROCaddtomenu(6,"8x8 grid",-1,"")
20050PROCaddtomenu(6,"16x16 grid",-1,"")
20060PROCaddtomenu(6,"32x32 grid",-1,"")
20070PROCaddtomenu(6,"32x16 grid",-1,"F")
20080
20090PROCbuildmenu(5,"Grid")
20100PROCaddtomenu(5,"Show grid",-1,"")
20110PROCaddtomenu(5,"Hide grid",-1,"")
20120PROCaddtomenu(5,"Grid lock",-1,"")
20130PROCaddtomenu(5,"Preset grids",MENAD%(6),"")
20140PROCaddtomenu(5,"Edit grid",6,"F")
20150
20160PROCbuildmenu(7,"Manipulate")
20170PROCaddtomenu(7,"Copy area...",-1,"")
20180PROCaddtomenu(7,"Move area...",-1,"")
20190PROCaddtomenu(7,"Mirror area",-1,"")
20200PROCaddtomenu(7,"Invert area",-1,"")
20210PROCaddtomenu(7,"Strip area",-1,"")
20220PROCaddtomenu(7,"Rotate...",-1,"")
20230PROCaddtomenu(7,"Scale to fit...",-1,"L")
20240PROCaddtomenu(7,"Pixel mapping",-1,"F")
20250
20260PROCbuildmenu(8,"Special")
20270PROCaddtomenu(8,"Trace",-1,"")
20280PROCaddtomenu(8,"Smudge area",-1,"")
20290PROCaddtomenu(8,"Wet brush...",-1,"")
20300PROCaddtomenu(8,"Tint area",-1,"")
20310PROCaddtomenu(8,"Tint brush...",-1,"")
20320PROCaddtomenu(8,"Set frame",19,"")
20330PROCaddtomenu(8,"RGB control...",-1,"")
20340PROCaddtomenu(8,"Grey scale...",-1,"")
20350PROCaddtomenu(8,"Pixelate...",-1,"")
20360PROCaddtomenu(8,"Colour replace...",-1,"F")
20370
20380PROCbuildmenu(9,"Edit")
20390PROCaddtomenu(9,"Line pattern",10,"")
20400PROCaddtomenu(9,"Fill patterns",11,"")
20410PROCaddtomenu(9,"Edit brushes",12,"")
20420PROCaddtomenu(9,"Graduated fills",13,"F")
20430
20440PROCbuildmenu(10,"Options")
20450PROCaddtomenu(10,"Mouse",MENAD%(16),"L")
20460PROCaddtomenu(10,"Cursor keys",-1,"")
20470PROCaddtomenu(10,"Wipe picture",-1,"L")
20480PROCaddtomenu(10,"Help",-1,"F")
20490
20500PROCbuildmenu(0,"Archrome")
20510PROCaddtomenu(0,"File",MENAD%(1),"")
20520PROCaddtomenu(0,"Paint",MENAD%(2),"")
20530PROCaddtomenu(0,"Text",MENAD%(14),"")
20540PROCaddtomenu(0,"Shapes",MENAD%(4),"L")
20550PROCaddtomenu(0,"Special",MENAD%(8),"")
20560PROCaddtomenu(0,"Edit",MENAD%(9),"")
20570PROCaddtomenu(0,"Manipulate",MENAD%(7),"L")
20580PROCaddtomenu(0,"Zoom",MENAD%(3),"")
20590PROCaddtomenu(0,"Grid",MENAD%(5),"")
20600PROCaddtomenu(0,"Options",MENAD%(10),"F")
20610
20620ENDPROC
20630
20640DEFFNfontroot(F$):IF INSTR(F$,".")=0 THEN =F$
20650IPF%=1:IPF$="":WHILE MID$(F$,IPF%,1)<>".":IPF$=IPF$+MID$(F$,IPF%,1):IPF%+=1:ENDWHILE:=IPF$
20660
20670REM ** Create a menu (Number, Title)
20680DEFPROCbuildmenu(MN%,MT$)
20690MENAD%(MN%)=MENU%+MEOF%:TAD%=MENU%+MEOF%
20700$TAD%=MT$:TAD%?12=7:TAD%?13=2:TAD%?14=7:TAD%?15=0:TAD%!16=0:TAD%!20=44:TAD%!24=0
20710MEOF%+=28
20720IF MEOF%>5*1024 THEN PROCmessage(0,"Menu tree has run out of room.")
20730ENDPROC
20740
20750REM ** Feature format : L = Follow by dotted line
20760REM ** : F = Last item
20770DEFPROCaddtomenu(MN%,IT$,HA%,FE$)
20780TAD%=MENU%+MEOF%
20790FE%=0
20800IF INSTR(FE$,"L") THEN FE%+=2
20810IF INSTR(FE$,"F") THEN FE%+=128
20820!TAD%=FE%
20830IF HA%>-1 AND HA%<&8000 THEN TAD%!4=HAND%(HA%)
20840IF HA%=-1 THEN TAD%!4=-1
20850IF HA%>&8000 THEN TAD%!4=HA%
20860TAD%!8=1 OR (7<<24) OR 256
20870$(MENUIND%+MEIN%)=IT$
20880ILE%=LEN(IT$)+1
20890IF (ILE% MOD 4)>0 THEN ILE%=((ILE% DIV 4)+1)*4
20900TAD%!12=MENUIND%+MEIN%
20910TAD%!20=LEN(IT$)
20920TAD%!16=MENALO%
20930MEIN%+=ILE%
20940IF MEIN%>(5*1024) THEN PROCmessage(1,"Menu indirection buffer overflow.")
20950MEOF%+=24
20960IF MEOF%>(5*1024) THEN PROCmessage(0,"Menu tree has run out of room")
20970IF ((MENAD%(MN%)!16)-32)<(LEN(IT$)*16) THEN MENAD%(MN%)!16=(LEN(IT$)*16)+32
20980ENDPROC
20990
21000DEFPROCshadeitem(MN%,IN%):TAD%=MENAD%(MN%)+28+((IN%-1)*24):TAD%!8=(TAD%!8)+(1<<22):ENDPROC
21010
21020DEFPROCtickitem(MN%,IN%):TAD%=MENAD%(MN%)+28+((IN%-1)*24):!TAD%=(!TAD%)+1:ENDPROC
21030
21040DEFPROCmenu:SYS6,229
21050SYS "Wimp_GetPointerInfo",,BLK%+128:MBU%=BLK%!136
21060SYS "Wimp_DecodeMenu",,MENAD%(MENO%),BLK%,SEL%
21070DSI%=FALSE
21080REM VDU4:PRINT $SEL%:VDU5
21090SEL$=$SEL%
21100IF $SEL%="Quit" THEN PROCkillf:FUSE%=-1:PROCwindname(2,PIC$):PROCforcedrawmain:IF FNquityn THEN PROCdie
21110IF $SEL%="Paint" THEN DSI%=TRUE:PROCkillf:FUSE%=-1:PROChelp:PROCwindname(2,PIC$)
21120IF $SEL%="Paint.Show palette" THEN DSI%=TRUE:PROCopenpal
21130IF $SEL%="Paint.Pixels" THEN DSI%=TRUE:PROCkillf:FUSE%=0:PROChelp:PROCwindname(2,PIC$+" [pixels]")
21140IF $SEL%="Paint.Sketch" THEN DSI%=TRUE:PROCkillf:FUSE%=1:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [sketch]")
21150IF $SEL%="Paint.Rubber line" THEN DSI%=TRUE:PROCkillf:FUSE%=2:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [rubber line]")
21160IF $SEL%="Grid.Show grid" THEN DSI%=TRUE:GRCO%=PALTAB%?(COL%*2):GRTI%=PALTAB%?((COL%*2)+1):PROCforcedrawmain:GOTO 21180
21170IF $SEL%="Grid.Hide grid" THEN DSI%=TRUE:GRCO%=-1:PROCforcedrawmain:GOTO 21180
21180IF $SEL%="Zoom" THEN DSI%=TRUE:ZOOM%=1:PROCzoomsize
21190FORL%=2 TO 16
21200IF $SEL%="Zoom.Zoom x"+STR$L% THEN DSI%=TRUE:ZOOM%=L%:PROCzoomsize:PROCforcedrawmain
21210NEXT
21220IF $SEL%="Paint.Airbrush..." THEN PROCkillf:DSI%=TRUE:PROCopenwind(4):FUSE%=3:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [airbrush]")
21230IF $SEL%="Paint.Paintbrush..." THEN PROCkillf:DSI%=TRUE:PROCopenwind(5):FUSE%=4:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [paintbrush]")
21240IF $SEL%="Shapes.Wire rectangle" THEN DSI%=TRUE:PROCkillf:FUSE%=5:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [wire rectangle]")
21250IF $SEL%="Shapes.Solid rectangle" THEN DSI%=TRUE:PROCkillf:FUSE%=6:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [solid rectangle]")
21260IF $SEL%="Grid.Grid lock" THEN DSI%=TRUE:GRLO%=NOT GRLO%
21270IF $SEL%="Grid.Preset grids.2x2 grid" THEN DSI%=TRUE:GRWI%=2:GRHE%=2:PROCsetgric:PROCforcedrawmain
21280IF $SEL%="Grid.Preset grids.3x3 grid" THEN DSI%=TRUE:GRWI%=3:GRHE%=3:PROCsetgric:PROCforcedrawmain
21290IF $SEL%="Grid.Preset grids.4x4 grid" THEN DSI%=TRUE:GRWI%=4:GRHE%=4:PROCsetgric:PROCforcedrawmain
21300IF $SEL%="Grid.Preset grids.6x6 grid" THEN DSI%=TRUE:GRWI%=6:GRHE%=6:PROCsetgric:PROCforcedrawmain
21310IF $SEL%="Grid.Preset grids.8x8 grid" THEN DSI%=TRUE:GRWI%=8:GRHE%=8:PROCsetgric:PROCforcedrawmain
21320IF $SEL%="Grid.Preset grids.16x16 grid" THEN DSI%=TRUE:GRWI%=16:GRHE%=16:PROCsetgric:PROCforcedrawmain
21330IF $SEL%="Grid.Preset grids.32x32 grid" THEN DSI%=TRUE:GRWI%=32:GRHE%=32:PROCsetgric:PROCforcedrawmain
21340IF $SEL%="Grid.Preset grids.32x16 grid" THEN DSI%=TRUE:GRWI%=32:GRHE%=16:PROCsetgric:PROCforcedrawmain
21350IF $SEL%="Shapes.Wire circle" THEN DSI%=TRUE:PROCkillf:FUSE%=7:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [wire circle]")
21360IF $SEL%="Shapes.Solid circle" THEN DSI%=TRUE:PROCkillf:FUSE%=8:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [solid circle]")
21370IF $SEL%="Shapes.Wire triangle" THEN DSI%=TRUE:PROCkillf:FUSE%=9:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [wire triangle]")
21380IF $SEL%="Shapes.Solid triangle" THEN DSI%=TRUE:PROCkillf:FUSE%=10:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [solid triangle]")
21390IF $SEL%="Shapes.Wire ellipse" THEN DSI%=TRUE:PROCkillf:FUSE%=11:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [wire ellipse]")
21400IF $SEL%="Shapes.Solid ellipse" THEN DSI%=TRUE:PROCkillf:FUSE%=12:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [solid ellipse]")
21410IF $SEL%="Shapes.Wire parallelogram" THEN DSI%=TRUE:PROCkillf:FUSE%=13:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [wire parallelogram]")
21420IF $SEL%="Shapes.Solid parallelogram" THEN DSI%=TRUE:PROCkillf:FUSE%=14:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [solid parallelogram]")
21430IF $SEL%="Shapes.Wire arc" THEN DSI%=TRUE:PROCkillf:FUSE%=15:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [wire arc]")
21440IF $SEL%="Shapes.Solid sector" THEN DSI%=TRUE:PROCkillf:FUSE%=16:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [wire sector]")
21450IF $SEL%="Shapes.Solid segment" THEN DSI%=TRUE:PROCkillf:FUSE%=17:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [wire segment]")
21460IF $SEL%="Manipulate.Move area..." THEN DSI%=TRUE:PROCkillf:PROCspinit:FUSE%=18:FUST%=0:PROChelp:PROCopenwind(8):PROCwindname(2,PIC$+" [move area]")
21470IF $SEL%="Manipulate.Copy area..." THEN DSI%=TRUE:PROCkillf:PROCspinit:FUSE%=19:FUST%=0:PROChelp:PROCopenwind(8):PROCwindname(2,PIC$+" [copy area]")
21480IF $SEL%="Manipulate.Mirror area" THEN DSI%=TRUE:PROCkillf:PROCspinit:FUSE%=20:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [mirror area]")
21490IF $SEL%="Manipulate.Invert area" THEN DSI%=TRUE:PROCkillf:PROCspinit:FUSE%=21:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [invert area]")
21500IF $SEL%="Manipulate.Strip area" THEN DSI%=TRUE:PROCkillf:FUSE%=22:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [strip area]")
21510IF $SEL%="Manipulate.Scale to fit..." THEN DSI%=TRUE:PROCkillf:FUSE%=23:FUST%=0:FUCO%=0:PROChelp:PROCopenwind(8):PROCwindname(2,PIC$+" [scale to fit]")
21520IF $SEL%="Paint.Unset transparents" THEN DSI%=TRUE:PROCunsetrasp
21530IF $SEL%="Paint.Set transparents" THEN DSI%=TRUE:PROCsetrasp
21540IF $SEL%="Special.Trace" THEN DSI%=TRUE:PROCkillf:FUSE%=24:PROChelp:PROCwindname(2,PIC$+" [trace]")
21550IF $SEL%="Options.Help" THEN DSI%=TRUE:PROCopenwind(9)
21560IF $SEL%="Manipulate.Pixel mapping" THEN DSI%=TRUE:PROCkillf:FUSE%=25:FUST%=0:FUCO%=1:PROChelp:PROCwindname(2,PIC$+" [pixel mapping]"):OX%=-1:OY%=-1
21570REM ---------------------------------------------------------------------
21580IF SEL$="Paint.Line style.Solid line" THEN DSI%=TRUE:LITY%=5
21590IF SEL$="Paint.Line style.Line pattern.Restarted" THEN DSI%=TRUE:LITY%=21
21600IF SEL$="Paint.Line style.Line pattern.Continuous" THEN DSI%=TRUE:LITY%=53
21610IF SEL$="Paint.Line style.Overwrite" THEN DSI%=TRUE:USE%=(USE% AND 112)
21620IF SEL$="Paint.Line style.OR" THEN DSI%=TRUE:USE%=(USE% AND 112)+1
21630IF SEL$="Paint.Line style.AND" THEN DSI%=TRUE:USE%=(USE% AND 112)+2
21640IF SEL$="Paint.Line style.EOR" THEN DSI%=TRUE:USE%=(USE% AND 112)+3
21650IF SEL$="Paint.Line style.Invert" THEN DSI%=TRUE:USE%=(USE% AND 112)+4
21660IF SEL$="Paint.Line style.NAND" THEN DSI%=TRUE:USE%=(USE% AND 112)+6
21670IF SEL$="Paint.Line style.NOR" THEN DSI%=TRUE:USE%=(USE% AND 112)+7
21680IF SEL$="Paint.Line style.ECF 1" AND (USE% AND 112)=16 THEN DSI%=TRUE:USE%=(USE% AND 15) ELSE IF SEL$="Paint.Line style.ECF 1" THEN DSI%=TRUE:USE%=(USE% AND 15)+16
21690IF SEL$="Paint.Line style.ECF 2" AND (USE% AND 112)=32 THEN DSI%=TRUE:USE%=(USE% AND 15) ELSE IF SEL$="Paint.Line style.ECF 2" THEN DSI%=TRUE:USE%=(USE% AND 15)+32
21700IF SEL$="Paint.Line style.ECF 3" AND (USE% AND 112)=48 THEN DSI%=TRUE:USE%=(USE% AND 15) ELSE IF SEL$="Paint.Line style.ECF 3" THEN DSI%=TRUE:USE%=(USE% AND 15)+48
21710IF SEL$="Paint.Line style.ECF 4" AND (USE% AND 112)=64 THEN DSI%=TRUE:USE%=(USE% AND 15) ELSE IF SEL$="Paint.Line style.ECF 4" THEN DSI%=TRUE:USE%=(USE% AND 15)+64
21720IF SEL$="Paint.Line style.Giant ECF" AND (USE% AND 112)=80 THEN DSI%=TRUE:USE%=(USE% AND 15) ELSE IF SEL$="Paint.Line style.Giant ECF" THEN DSI%=TRUE:USE%=(USE% AND 15)+80
21730REM ---------------------------------------------------------------------
21740IF SEL$="Paint.Fill.Flood fill" THEN DSI%=TRUE:PROCkillf:FUSE%=26:PROChelp:PROCwindname(2,PIC$+" [Flood fill]")
21750IF SEL$="Special.Smudge area" THEN DSI%=TRUE:PROCkillf:FUSE%=27:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [Smudge area]")
21760IF SEL$="Special.Tint area" THEN DSI%=TRUE:PROCkillf:FUSE%=28:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [Tint area]")
21770IF $SEL%="Special.Wet brush..." THEN
21780PROCkillf:DSI%=TRUE:PROCopenwind(5):FUSE%=29:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [Wet brush]"):PROCspinit:PROCspbuf(145*1024):IF Q% THEN PROCspbuferr ELSE PROCbackuppic
21790ENDIF
21800IF $SEL%="Special.Tint brush..." THEN
21810PROCkillf:DSI%=TRUE:PROCopenwind(5):FUSE%=30:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [tint brush]"):PROCspinit:PROCspbuf(145*1024):IF Q% THEN PROCspbuferr ELSE PROCbackuppic
21820ENDIF
21830IF LEFT$(($SEL%),5)="Text." AND $SEL%<>"Text.Parameters" AND $SEL%<>"Text.Background" THEN
21840PROCkillf:PROCspinit:PROCspbuf(145*1024):IF Q% THEN PROCspbuferr
21850PROCbackuppic:OX%=-1:OY%=-1:EFM%=-1
21860DSI%=TRUE:FUSE%=32:FUST%=0:PROCopenwind(14):PROChelp:PROCwindname(2,PIC$+" [Text]"):FO$=RIGHT$($SEL%,LEN($SEL%)-5):PROCseticon(14,1,FO$)
21870FONT%=0:FORL%=0 TO FONTS%:IF FO$=FONT$(L%) THEN FONT%=L%:NEXT ELSE NEXT
21880ENDIF
21890IF $SEL%="Options.Mouse.X only.Very fast" THEN MMX%=4:MOUSE STEP MMX%,MMY%
21900IF $SEL%="Options.Mouse.X only.Fast" THEN MMX%=3:MOUSE STEP MMX%,MMY%
21910IF $SEL%="Options.Mouse.X only.Medium" THEN MMX%=2:MOUSE STEP MMX%,MMY%
21920IF $SEL%="Options.Mouse.X only.Slow" THEN MMX%=1:MOUSE STEP MMX%,MMY%
21930IF $SEL%="Options.Mouse.Y only.Very fast" THEN MMY%=4:MOUSE STEP MMX%,MMY%
21940IF $SEL%="Options.Mouse.Y only.Fast" THEN MMY%=3:MOUSE STEP MMX%,MMY%
21950IF $SEL%="Options.Mouse.Y only.Medium" THEN MMY%=2:MOUSE STEP MMX%,MMY%
21960IF $SEL%="Options.Mouse.Y only.Slow" THEN MMY%=1:MOUSE STEP MMX%,MMY%
21970IF $SEL%="Options.Mouse.Both.Very fast" THEN MMY%=4:MMX%=4:MOUSE STEP MMX%,MMY%
21980IF $SEL%="Options.Mouse.Both.Fast" THEN MMY%=3:MMX%=3:MOUSE STEP MMX%,MMY%
21990IF $SEL%="Options.Mouse.Both.Medium" THEN MMY%=2:MMX%=2:MOUSE STEP MMX%,MMY%
22000IF $SEL%="Options.Mouse.Both.Slow" THEN MMY%=1:MMX%=1:MOUSE STEP MMX%,MMY%
22010IF $SEL%="Special.Colour replace..." THEN
22020PROCkillf:DSI%=TRUE:PROCopenwind(18):FUSE%=33:FUST%=0:PROCspinit:PROCspbuf(24*1024):IF Q% THEN FUSE%=-1:PROCclosewind(18):PROCspinit:PROCspbuferr
22030SYS "Hourglass_On":FORL%=0 TO 22596 STEP 4:SPBUF%!L%=OPAL%!L%:NEXT:FORL%=0 TO 255:REPS%?L%=L%:NEXT:SYS "Hourglass_Off":PROCwindname(2,PIC$+" [Colour replace]"):PROChelp
22040ENDIF
22050IF $SEL%="File.Export" THEN PROCkillf:PROCseticon(7,1,"Export"):DSI%=TRUE:FUSE%=35:FUST%=0:PROChelp:PROCspinit:PROCwindname(2,PIC$+" [Export]"):PROCopenwind(8)
22060IF $SEL%="Paint.Fill.Pattern fill" THEN PROCkillf:PROCwindname(2,PIC$+" [Pattern fill]"):DSI%=TRUE:FUSE%=37:FUST%=0:PROChelp:PROCspinit:PROCopenwind(20)
22070IF $SEL%="Special.RGB control..." THEN PROCkillf:PROCwindname(2,PIC$+" [RGB control]"):DSI%=TRUE:FUSE%=38:FUST%=0:PROChelp:PROCspinit:PROCopenwind(21)
22080IF $SEL%="Special.Grey scale..." THEN PROCkillf:PROCwindname(2,PIC$+" [Grey scale]"):DSI%=TRUE:FUSE%=39:FUST%=0:PROChelp:PROCspinit:PROCopenwind(22)
22090IF $SEL%="Special.Pixelate..." THEN PROCkillf:PROCwindname(2,PIC$+" [Pixelate]"):DSI%=TRUE:FUSE%=40:FUST%=0:PROChelp:PROCspinit:PROCopenwind(23)
22100IF $SEL%="Manipulate.Rotate..." THEN PROCkillf:PROCwindname(2,PIC$+" [Rotate]"):DSI%=TRUE:FUSE%=41:FUST%=0:PROChelp:PROCspinit:PROCopenwind(24)
22110IF $SEL%="Options.Wipe picture" THEN PROCkillf:PROCwindname(2,PIC$):FUSE%=-1:PROChelp:PROCwipepic
22120IF $SEL%="Options.Cursor keys" THEN KUKE%=NOT KUKE%:DSI%=TRUE
22130IF DSI% AND MBU%=1 THEN PROCwindmenu
22140ENDPROC
22150
22160DEFPROCwipepic
22170!IO%=5:$(IO%+4)="Are you sure you want to wipe the picture?"+CHR$0
22180SYS "Wimp_ReportError",IO%,%11011,"!Archrome"+CHR$0 TO ,R%
22190IF R%=0 THEN GOTO 22180
22200IF R%=2 THEN ENDPROC
22210PROCinpic:VDU26:GCOL0,128 TINT 0:CLG:PROCoutpic:PROCforcedrawmain
22220ENDPROC
22230
22240DEFFNquityn
22250!IO%=5:$(IO%+4)="Are you sure you want to quit?"+CHR$0
22260SYS "Wimp_ReportError",IO%,%11011,"!Archrome"+CHR$0 TO ,R%
22270IF R%=0 THEN GOTO 22260
22280=(R%=1)
22290
22300DEFPROCimport
22310A$=FNgetname:BLK%!12=BLK%!8:BLK%!16=4:!BLK%=64:SYS "Wimp_SendMessage",17,BLK%,BLK%!4
22320PROCkillf:FUSE%=34:FUST%=0:PROCopenwind(8):PROChelp:PROCspinit
22330F%=OPENUP(A$):IMS%=EXT#F%:CLOSE#F%
22340PROCspbuf(IMS%+64):IF Q% THEN FUSE%=-1:PROCclosewind(8):PROCspinit:PROCspbuferr
22350SYS&2E,266,SPBUF%,A$:SYS&2E,269,SPBUF%,IO%,16,1 TO ,,,L%:IMP$="":FORK%=0 TO L%-1:IMP$=IMP$+CHR$(IO%?K%):NEXT
22360SYS&2E,296,SPBUF%,IMP$ TO ,,,IMW%,IMH%,,IMM%
22370SYS&35,IMM%,4 TO ,,E%
22380PWI%=2^E%
22390SX%=2^(E%-1):!IO%=SX%:IO%!8=1
22400IO%!4=1:IO%!12=1
22410L%=(SPBUF%+(SPBUF%!8)):IF L%!32=44 THEN
22420IMPA%=0
22430ELSE
22440IMPA%=L%+44:K%=48:I%=52:WHILE I%<(L%!32):L%!K%=L%!I%:I%+=8:K%+=4:ENDWHILE
22450ENDIF
22460IF IMM%<>15 OR IMPA%<>0 THEN SYS&40740,IMM%,IMPA%,15,0,PIXTAB2%:IMPT%=PIXTAB2% ELSE IMPT%=0
22470PROCwindname(2,PIC$+" [Import '"+IMP$+"']")
22480IMH%=IMH%*4:IMW%=IMW%*PWI%
22490GRN$=IMP$
22500ENDPROC
22510
22520DEFPROCfillcontclick
22530IF MOUIC%<>8 THEN ENDPROC
22540GRFN%=-1
22550IF FNhigh(17,1) THEN GRFN%=0
22560IF FNhigh(17,2) THEN GRFN%=1
22570IF FNhigh(17,3) THEN GRFN%=2
22580IF FNhigh(17,4) THEN GRFN%=3
22590IF FNhigh(17,5) THEN GRFN%=4
22600IF GRFN%=-1 THEN PROCmessage(0,"You must select a fill sequence to use.")
22610IF FUSE%=31 THEN
22620IF GRTY%=1 THEN PROCkillf
22630ENDIF
22640GRTY%=-1
22650IF FNhigh(17,6) THEN GRTY%=0
22660IF FNhigh(17,7) THEN GRTY%=1:FUST%=0
22670IF GRTY%=-1 THEN PROCmessage(0,"You must select the type of fill to use.")
22680PROCkillf:FUSE%=31:FUST%=0:PROChelp:PROCwindname(2,PIC$+" [Graduated fill ("+FNfilldet(GRFN%+1)+")]"):PROCspinit
22690IF MOUB%=4 THEN PROCmenoff
22700ENDPROC
22710
22720DEFPROCunsetrasp:SYS "Hourglass_On"
22730FORL%=0 TO 255
22740IF TRASP%?L%=1 THEN PROCtrasp(L%)
22750NEXT
22760PROCforcedrawpal(PAL%):SYS "Hourglass_Off"
22770ENDPROC
22780
22790DEFPROCsetrasp:SYS "Hourglass_On"
22800FORL%=0 TO 255
22810IF TRASP%?L%=0 THEN PROCtrasp(L%)
22820NEXT
22830PROCforcedrawpal(PAL%):SYS "Hourglass_Off"
22840ENDPROC
22850
22860DEFPROCspinit
22870PROCspbuf(0)
22880ENDPROC
22890
22900DEFPROCsetgric
22910PROCseticon(6,4,STR$GRWI%)
22920PROCseticon(6,5,STR$GRHE%)
22930GRBX%=VAL(FNgeticon(6,12)):IF GRBX%>GRWI% THEN REPEAT:GRBX%-=GRWI%:UNTIL GRBX%<GRWI%:PROCseticon(6,12,STR$GRBX%)
22940GRBY%=VAL(FNgeticon(6,13)):IF GRBY%>GRHE% THEN REPEAT:GRBY%-=GRHE%:UNTIL GRBY%<GRHE%:PROCseticon(6,13,STR$GRBY%)
22950ENDPROC
22960
22970DEFPROCzoomsize
22980!BLK%=HAND%(2):SYS "Wimp_GetWindowState",,BLK%:WIF%=BLK%!28
22990!BLK%=HAND%(2):SYS "Wimp_CloseWindow",,BLK%
23000!BLK%=0:BLK%!4=-936*ZOOM%:BLK%!8=1236*ZOOM%:BLK%!12=0:SYS "Wimp_SetExtent",HAND%(2),BLK%
23010!BLK%=HAND%(2):SYS "Wimp_GetWindowInfo",,BLK%
23020BLK%!28=WIF%:SYS "Wimp_OpenWindow",,BLK%:ENDPROC
23030
23040DEFFNgstr(AD%):W$="":IF ?AD%<32 THEN =W$ ELSE REPEAT:W$=W$+CHR$(?AD%):AD%+=1:UNTIL ?AD%<32:=W$
23050
23060DEFFNgeticon(WH%,IC%):!ICBLK%=HAND%(WH%):ICBLK%!4=IC%:SYS "Wimp_GetIconState",,ICBLK%:=FNgstr(!(ICBLK%+28))
23070
23080DEFPROCseticon(WH%,IC%,SET$):!ICBLK%=HAND%(WH%):ICBLK%!4=IC%:SYS "Wimp_GetIconState",,ICBLK%:ICBLK%!8=0:ICBLK%!12=0:$(ICBLK%!28)=SET$:SYS "Wimp_SetIconState",,ICBLK%:ENDPROC
23090
23100DEFFNhigh(WH%,IC%):!ICBLK%=HAND%(WH%):ICBLK%!4=IC%:SYS "Wimp_GetIconState",,ICBLK%:=((?(ICBLK%+26)) AND %100000)=32
23110
23120DEFPROCshadeicon(WH%,IC%)
23130!ICBLK%=HAND%(WH%):ICBLK%!4=IC%
23140ICBLK%!8=%10000000000000000000000:ICBLK%!12=ICBLK%!8
23150SYS "Wimp_SetIconState",,ICBLK%
23160ENDPROC
23170
23180DEFPROCclearicon(WH%,IC%)
23190!ICBLK%=HAND%(WH%):ICBLK%!4=IC%
23200ICBLK%!8=0:ICBLK%!12=%10000000000000000000000
23210SYS "Wimp_SetIconState",,ICBLK%
23220ENDPROC
23230
23240DEFPROCpoint:SYS "Wimp_GetPointerInfo",,POI%:MOX%=!POI%:MOY%=POI%!4:MOB%=POI%!8:MOH%=POI%!12:ENDPROC
23250
23260DEFPROCwindname(WH%,SET$):!BLK%=HAND%(WH%):SYS "Wimp_GetWindowState",,BLK%:WIF%=BLK%!28:SYS "Wimp_GetWindowInfo",,BLK%:SYS"Wimp_CloseWindow",,BLK%
23270AD%=BLK%!76:BLK%!28=WIF%:$AD%=SET$:SYS "Wimp_OpenWindow",,BLK%:ENDPROC
23280
23290DEFPROCdragfin
23300F$=FNgeticon(DRAG%,1):T$="":IF INSTR(F$,".")=0 THEN T$=F$:GOTO 23330
23310IF RIGHT$(F$,1)="." THEN T$="":GOTO 23330
23320K%=LEN(F$):REPEAT:T$=MID$(F$,K%,1)+T$:K%-=1:UNTIL MID$(F$,K%,1)="."
23330SYS "Wimp_GetPointerInfo",,POI%
23340POI%!20=64:POI%!32=0:POI%!36=1:POI%!40=POI%!12:POI%!44=POI%!16:POI%!48=!POI%:POI%!52=POI%!4:POI%!56=2048:POI%!60=&556:$(POI%+64)=T$
23350SYS "Wimp_SendMessage",17,POI%+20,POI%!12,POI%!16
23360ENDPROC
23370
23380DEFPROCstartdrag
23390SYS "Wimp_GetWindowState",,BLK%+12
23400X%=BLK%!16:Y%=BLK%!28:BLK%!16=0:SYS "Wimp_GetIconState",,BLK%+12
23410BLK%!16=5:BLK%!20+=X%-2:BLK%!24+=Y%-4
23420BLK%!28+=X%+2:BLK%!32+=Y%
23430BLK%!36=0:BLK%!40=0:BLK%!44=&7FFFFFFF:BLK%!48=&7FFFFFFF:SYS "Wimp_DragBox",,BLK%+12:ENDPROC
23440
23450DEFPROCinmessage(M%)
23460CASE M% OF
23470WHEN 0:PROCdie
23480WHEN 2:PROCdragsave
23490WHEN 5:IF BLK%!12=0 AND BLK%!40=&556 PROCload
23500WHEN 3:IF BLK%!12=0 AND BLK%!40=&556 PROCload ELSE IF BLK%!12=0 AND BLK%!40=&FF9 THEN PROCimport
23510ENDCASE:ENDPROC
23520
23530DEFPROCsaveok:A$=FNgeticon(0,1):IF INSTR(A$,".")=0 THEN PROCmessage(4,"To save, drag the icon to a directory viewer.")
23540REM ** SAVE ROUTINE HERE **
23550GOTO 23630
23560ENDPROC
23570DEFPROCdragsave:A$=FNgetname:PROCkillf
23580IF DRAG%=7 THEN GOTO 23690
23590PROCseticon(0,1,A$)
23600SYS "Wimp_CreateMenu",-1
23610BLK%!12=BLK%!8:BLK%!16=3:!BLK%=64:SYS "Wimp_SendMessage",17,BLK%,BLK%!20,BLK%!24
23620REM ** SAVE ROUTINE HERE **
23630PROCkillf:FUSE%=-1:SYS&2E,268,PIC%,A$
23640OSCLI("SETTYPE "+A$+" 556")
23650PIC$=FNleaf(A$):PROCwindname(2,PIC$)
23660ENDPROC
23670
23680DEFPROCspritesaveok:A$=FNgeticon(7,1):IF INSTR(A$,".")=0 THEN PROCmessage(4,"To save, drag the icon to a directory viewer.")
23690PROCseticon(7,1,A$)
23700SYS "Wimp_CreateMenu",-1
23710BLK%!12=BLK%!8:BLK%!16=3:!BLK%=64:SYS "Wimp_SendMessage",17,BLK%,BLK%!20,BLK%!24
23720REM ** SAVE ROUTINE HERE **
23730IF LEN(FNleaf(A$))>10 THEN PROCmessage(9,"Bad name")
23740IF FUSE%=35 THEN SYS&2E,282,SPBUF%,"GRAB",FNleaf(A$):SYS&2E,268,SPBUF%,A$:FUST%=0:PROCclosewind(7):PROCspinit ELSE SYS&2E,268,PIC%,A$
23750ENDPROC
23760
23770DEFFNgetname:W$="":P%=BLK%+44:WHILE ?P%<>0 AND ?P%<>13:W$=W$+CHR$(?P%):P%+=1:ENDWHILE:=W$
23780
23790DEFPROCload
23800A$=FNgetname:BLK%!12=BLK%!8:BLK%!16=4:!BLK%=64:SYS "Wimp_SendMessage",17,BLK%,BLK%!4
23810PROCseticon(0,1,A$)
23820REM ** LOAD ROUTINE HERE **
23830PROCkillf:FUSE%=-1
23840OSCLI("LOAD "+A$+" "+STR$~(PIC%+4))
23850PROCkillf
23860PIC$=FNleaf(A$):PROCwindname(2,PIC$)
23870PROCforcedrawmain
23880ENDPROC
23890
23900DEFPROCchars
23910VDU23,248,0,0,0,255,255,0,0,0
23920VDU23,249,0,0,126,255,255,126,0,0
23930VDU23,250,0,60,126,255,255,126,60,0
23940VDU23,251,60,126,255,255,255,255,126,60
23950VDU23,252,24,60,126,126,126,126,60,24
23960VDU23,253,24,60,60,60,60,60,60,24
23970VDU23,254,24,24,24,24,24,24,24,24
23980ENDPROC
23990
24000DEFPROCbackuppic
24010!VARS=PIC%
24020VARS!4=SPBUF%
24030A%=VARS
24040CALL backuppic
24050ENDPROC
24060
24070DEFPROCfillmask
24080VARS!8=SPBUF%
24090VARS!12=TRASP%
24100VARS!16=BTC%
24110A%=VARS
24120CALL fillmask
24130ENDPROC
24140
24150DEFFNleaf(F$)
24160IF INSTR(F$,".")=0 THEN =F$
24170T$=""
24180LP%=LENF$
24190WHILE MID$(F$,LP%,1)<>"."
24200T$=MID$(F$,LP%,1)+T$
24210LP%-=1
24220ENDWHILE
24230=T$
24240
24250DEFPROCspbuf(BS%)
24260IF BS%=0 THEN SYS "Wimp_SlotSize",CUSL%,-1:ENDPROC
24270SYS "Wimp_SlotSize",CUSL%+BS%,-1
24280SYS "Wimp_SlotSize",-1,-1 TO SPL%
24290IF SPL%<(CUSL%+BS%) THEN SYS "Wimp_SlotSize",CUSL%,-1:SPNE%=BS%:Q%=TRUE:ENDPROC ELSE Q%=FALSE
24300!SPBUF%=BS%
24310SPBUF%!8=16
24320SYS&2E,265,SPBUF%
24330SPSIZ%=BS%
24340ENDPROC
24350
24360DEFPROCspbuferr:PROCkillf:FUST%=-1:FUSE%=-1:PROCwindname(2,PIC$):PROCmessage(0,"No room to store sprite. ("+STR$(SPNE%)+" bytes needed)")
24370
24380DEFFNspritesize(DX%,DY%,PL%)
24390DX%=ABS(DX%) DIV 2:DY%=ABS(DY%) DIV 4
24400IF (DX% MOD 4)>0 THEN DX%=((DX% DIV 4)+1)*4
24410DX%+=16
24420=(DX%*DY%*(PL%+1))+1024
24430
24440DEFPROChelp
24450PROCseticon(9,0,""):PROCseticon(9,1,""):PROCseticon(9,2,"")
24460CASE FUSE% OF
24470WHEN 0:
24480PROCseticon(9,0,"Click SELECT over a pixel to change its colour to the currently selected")
24490PROCseticon(9,1,"one.")
24500WHEN 1:
24510PROCseticon(9,0,"Hold down SELECT while moving the mouse to draw freehand in the currently")
24520PROCseticon(9,1,"selected colour.")
24530WHEN 2:
24540PROCseticon(9,0,"Point to the start of the line and click SELECT, point to the end of the")
24550PROCseticon(9,1,"line and click SELECT again to fix. Clicking ADJUST will allow you to")
24560PROCseticon(9,2,"reposition the start of the line.")
24570WHEN 3:
24580PROCseticon(9,0,"Set the density and spread with the control window then click on the")
24590PROCseticon(9,1,"picture to spray with the current colour.")
24600WHEN 4:
24610PROCseticon(9,0,"Set the brush shape and scale with the control window then click on")
24620PROCseticon(9,1,"the picture to paint.")
24630WHEN 5:
24640PROCseticon(9,0,"Point to one corner of the rectangle and click. Move to the diagonally")
24650PROCseticon(9,1,"oposite corner and click again to fix. Clicking ADJUST will allow you")
24660PROCseticon(9,2,"to reposition the first corner.")
24670WHEN 6:
24680PROCseticon(9,0,"Point to one corner of the rectangle and click. Move to the diagonally")
24690PROCseticon(9,1,"oposite corner and click again to fix. Clicking ADJUST will allow you")
24700PROCseticon(9,2,"to reposition the first corner.")
24710WHEN 7:
24720PROCseticon(9,0,"Point to the centre of the circle and click. Move to any point on the")
24730PROCseticon(9,1,"circumfrence to set the size and click again to fix. Clicking ADJUST allows")
24740PROCseticon(9,2,"you to reposition the centre point.")
24750WHEN 8:
24760PROCseticon(9,0,"Point to the centre of the circle and click. Move to any point on the")
24770PROCseticon(9,1,"circumfrence to set the size and click again to fix. Clicking ADJUST allows")
24780PROCseticon(9,2,"you to reposition the centre point.")
24790WHEN 9:
24800PROCseticon(9,0,"Point to the first vertex and click. Move to the second vertex and click")
24810PROCseticon(9,1,"again. Move to the final one and click again to fix. ADJUST will let you")
24820PROCseticon(9,2,"start again.")
24830WHEN 10:
24840PROCseticon(9,0,"Point to the first vertex and click. Move to the second vertex and click")
24850PROCseticon(9,1,"again. Move to the final one and click again to fix. ADJUST will let you")
24860PROCseticon(9,2,"start again.")
24870WHEN 11:
24880PROCseticon(9,0,"Point to the centre and click. Move to a point along the major axis and")
24890PROCseticon(9,1,"click. Move to set the size and click again to fix. ADJUST allows you to")
24900PROCseticon(9,2,"start again.")
24910WHEN 12:
24920PROCseticon(9,0,"Point to the centre and click. Move to a point along the major axis and")
24930PROCseticon(9,1,"click. Move to set the size and click again to fix. ADJUST allows you to")
24940PROCseticon(9,2,"start again.")
24950WHEN 13:
24960PROCseticon(9,0,"Point to first corner and click. Move to second corner and click again.")
24970PROCseticon(9,1,"Move to third corner to set size and click to fix. ADJUST allows you to")
24980PROCseticon(9,2,"start again.")
24990WHEN 14:
25000PROCseticon(9,0,"Point to first corner and click. Move to second corner and click again.")
25010PROCseticon(9,1,"Move to third corner to set size and click to fix. ADJUST allows you to")
25020PROCseticon(9,2,"start again.")
25030WHEN 15:
25040PROCseticon(9,0,"Point to centre of arc and click. Move to a point on the arc and click again.")
25050PROCseticon(9,1,"Move to set the degree of the arc and click again to fix. ADJUST allows you")
25060PROCseticon(9,2,"to start again.")
25070WHEN 16:
25080PROCseticon(9,0,"Point to centre of sector and click. Move to start point on the circumfrence")
25090PROCseticon(9,1,"and click again. Move to set the degree and click again to fix. ADJUST allows")
25100PROCseticon(9,2,"you to start again.")
25110WHEN 17:
25120PROCseticon(9,0,"Point to centre of segment and click. Move to start point on circumfrence")
25130PROCseticon(9,1,"and click again. Move to set segment and click to fix. ADJUST allows you to")
25140PROCseticon(9,2,"start again.")
25150WHEN 18:
25160PROCseticon(9,0,"Point to lower-left corner of source area and click. Move to top-right corner")
25170PROCseticon(9,1,"and click to cut area. Move to position and click to paste. The transparency")
25180PROCseticon(9,2,"flags are used here.")
25190WHEN 19:
25200PROCseticon(9,0,"Point to lower-left corner of source area and click. Move to top-right corner")
25210PROCseticon(9,1,"and click to copy area. Move to position and click to paste. The transparency")
25220PROCseticon(9,2,"flags are used here.")
25230WHEN 20:
25240PROCseticon(9,0,"Point to lower-left corner of area and click. Move to top-right corner and")
25250PROCseticon(9,1,"click again to mirror. The transparency flags are used here.")
25260WHEN 21:
25270PROCseticon(9,0,"Point to lower-left corner of area and click. Move to top-right corner and")
25280PROCseticon(9,1,"click again to invert. The transparency flags are used here.")
25290WHEN 22:
25300PROCseticon(9,0,"Point to lower-left corner of area to preserve and click. Move to top-right")
25310PROCseticon(9,1,"corner and click again to strip surrounding area.")
25320WHEN 23:
25330PROCseticon(9,0,"Point to lower-left corner of source area and click. Move to top-right corner")
25340PROCseticon(9,1,"and click to fix. Do the same for destination area. The transparency flags")
25350PROCseticon(9,2,"are used here.")
25360WHEN 24:
25370PROCseticon(9,0,"Point to a pixel to the right of and adjacent to the colour to trace.")
25380PROCseticon(9,1,"Click to trace in the current colour.")
25390WHEN 25:
25400PROCseticon(9,0,"Point to the first vertex of the source area and click. Repeat for the other")
25410PROCseticon(9,1,"three vertices and for the four destination vertices. Clicking ADJUST at any")
25420PROCseticon(9,2,"point allows you to start again.")
25430WHEN 26:
25440PROCseticon(9,0,"Point inside the totally closed area to fill and click.")
25450WHEN 27:
25460PROCseticon(9,0,"Point to one corner of the area and click. Move to the diagonally oposite")
25470PROCseticon(9,1,"corner and click again to average.")
25480WHEN 28:
25490PROCseticon(9,0,"Point to one corner of the area and click. Move to the diagonally oposite")
25500PROCseticon(9,1,"corner and click again to tint with current colour.")
25510WHEN 29:
25520PROCseticon(9,0,"Set brush shape with control pannel. Move to position and click")
25530PROCseticon(9,1,"to use. The brush scale is ignored here.")
25540WHEN 30:
25550PROCseticon(9,0,"Set brush shape with control pannel. Move to position and click")
25560PROCseticon(9,1,"to use. The brush scale is ignored here.")
25570WHEN 31:
25580PROCseticon(9,0,"Set fill parameters with control box then click inside a totally bounded")
25590PROCseticon(9,1,"area to fill.")
25600WHEN 32:
25610PROCseticon(9,0,"Set point sizes and style from control window and click on OK.")
25620PROCseticon(9,1,"Move text to position and click to fix.")
25630WHEN 33:
25640PROCseticon(9,0,"Set up colour transformation with colour window then define rectangular")
25650PROCseticon(9,1,"area with last click to change colours.")
25660WHEN 34:
25670PROCseticon(9,0,"Set orientation and scale with control window and click to fix.")
25680WHEN 35:
25690PROCseticon(9,0,"Grab rectangle by lower-left and upper-right corners then use save window")
25700PROCseticon(9,1,"as usual to save.")
25710WHEN 36:
25720PROCseticon(9,0,"Position frame and click to fix.")
25730WHEN 37:
25740PROCseticon(9,0,"Select pattern from window and click in a totally enclosed area to fill.")
25750WHEN 38:
25760PROCseticon(9,0,"Set Red, Green and Blue percentages with the control window then define")
25770PROCseticon(9,1,"the rectangle to be changed by clicking bottom left then top right.")
25780PROCseticon(9,2,"Transparent colours will not be changed.")
25790WHEN 39:
25800PROCseticon(9,0,"Set weights for Red, Green and Blue components with the control window")
25810PROCseticon(9,1,"then define the rectangle to shade by clicking bottom left then top right.")
25820PROCseticon(9,2,"Transparent colours will not be changed.")
25830WHEN 40:
25840PROCseticon(9,0,"Set the X and Y resolutions for pixelation with the control window then")
25850PROCseticon(9,1,"define the rectangle to pixelate by clicking bottom left then top right.")
25860WHEN 41:
25870PROCseticon(9,0,"Define the rectangle to rotate by clicking bottom left then top right.")
25880PROCseticon(9,1,"Rotate area with the control window and click to rotate.")
25890PROCseticon(9,2,"Transparent colours will not be copied.")
25900ENDCASE
25910ENDPROC
� ><Archrome$Dir>.!RunImage
� � �4,7:�:�;" at line ";�:�
Fș "OS_GetEnv" � A$:� �A$,1)<>" " � LF$=�A$,�A$,""" ")+2) � LF$=""
(
�setup
2� � �makerr
<�action
F�die
P�
Z��setup
d�� POI% 256,TAS% 2000,BLK% 1000,MENU% 5*1024,MENUIND% 5*1024,SEL% 256,ICBLK% 256,VARS 128,MENAD%(300),MENALO% 16,CODE% 6*1024,IO% 256,TRANSTAB% 256
nMEOF%=0:MEIN%=0:MBUS%=�
x$MENALO%="A -~"
�B� PIC% 145*1024,SCALE% 32,PIXTAB% 256,PIXTAB2% 256,X%(8),Y%(8)
�6SPBUF%=�:SPSIZ%=0:ș "Wimp_SlotSize",-1,-1 � CUSL%
��� PAL% 22600,OPAL% 22600,PALTAB% 512,BTC% 256,CTT% 256,TTB% 256,ROTTAB% 1800,RAND% 4096,PFILLS% 7000:!PAL%=22600:!OPAL%=22600:!PFILLS%=7000
� � BRUSH% 13000:!BRUSH%=13000
�-ș&2E,266,BRUSH%,"<Archrome$Dir>.Brushes"
�+ș&2E,266,PAL%,"<Archrome$Dir>.Palette"
�,ș&2E,266,OPAL%,"<Archrome$Dir>.Palette"
�/ș&2E,266,PFILLS%,"<Archrome$Dir>.PatFills"
�.�("LOAD <Archrome$Dir>.PalTab "+�~PALTAB%)
�6�("LOAD <Archrome$Dir>.BTC "+�~BTC%):� byte -> pal
�6�("LOAD <Archrome$Dir>.CTT "+�~CTT%):� pal -> byte
�?�("LOAD <Archrome$Dir>.TTB "+�~TTB%):� (col*64)+tint -> pal
�.�("LOAD <Archrome$Dir>.RotTab "+�~ROTTAB%)
*�("LOAD <Archrome$Dir>.Code "+�~CODE%)
.�("LOAD <Archrome$Dir>.RotTab "+�~ROTTAB%)
/COL%=255:FUSE%=-1:FUST%=-1:FUCO%=0:BUTDO%=�
"A$TAS%="TASK":ș"Wimp_Initialise",200,!TAS%,"Archrome" � HAND%
,�loadsprites
6
�loadvars
@B!BLK%=-1:BLK%!4=0:BLK%!8=0:BLK%!12=64:BLK%!16=64:BLK%!20=&2102
JC� BLK%!24 10:$(BLK%!24)="!Archrome":BLK%!28=SPRITES%:BLK%!32=10
T(ș "Wimp_CreateIcon",,BLK% � ICHAND%
^NOWIND%=24:NOMENS%=17
h-� STORE% 15*1024,BUF% 4048,HAND%(NOWIND%)
rSOF%=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
�
� �D|A
�6ș "Wimp_OpenTemplate",,"<Archrome$Dir>.Templates"
��K%=0 � NOWIND%
�� 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%):�
�ș "Wimp_CloseTemplate"
�#�L%=15 � 46:�shadeicon(10,L%):�
��seticon(13,44,"16")
��23,6,0|
��systemvars
�
�chars
�loadfonts
!�buildmainmenu:�buildiconmenu
�
&
0��systemvars
:!PIC%=145*1024
DPIC%!4=0
N
PIC%!8=24
XPIC%!12=24
b8� IF L%=0 THEN SYS&2E,266,PIC%,"<Archrome$Dir>.Test"
l&ș &2E,271,PIC%,"PIC",0,618,234,15
vPIC$="<Untitled>"
�c� LF$<>"" � �("LOAD "+LF$+" "+�~(PIC%+4)):PIC$=�leaf(LF$):�seticon(0,1,LF$) � PIC$="<Untitled>"
�ESM%=-1:EPM%=-1
�=GRCO%=-1:GRTI%=-1:GRLO%=�:GRWI%=1:GRHE%=1:GRBX%=0:GRBY%=0
�3GRXM%=1:GRXD%=1:GRYM%=1:GRYD%=1:GRFX%=�:GRFY%=�
�ZOOM%=1
�USE%=0:LITY%=5:GRMA%=�
�� PAT%(5):PAT%()=0:PALE%=8
�� ECF%(8,4):ECF%()=0:ROT%=0
�� GRFI%(15,1,4):GRFI%()=0
�0FIFC%=63:FIFT%=192:FILC%=3:FILT%=192:FILR%=0
� IP%=�
�(SELBR%=1:BXM%=1:BXD%=1:BYM%=1:BYD%=1
�EDBR%=1:IDRAG%=�:CPF%=1
�openmain
�windname(2,PIC$)
� TRASP% 256, REPS% 256
�L%=0 � 255:REPS%?L%=L%:�
*!�L%=0 � 252 � 4:TRASP%!L%=0:�
4� FONT$(255),FONTT$(64)
>FONTB%=0:SREP%=255
H1MMX%=1:MMY%=1:MOP%=�:KUKE%=�:KUKD%=0:KUKL%=-1
R�
\
f��loadvars
pF%=�("<Archrome$Dir>.Vars")
z��#F%,backuppic,fillmask,getpicbyte,getbrushbyte,setpicbyte,pixaverage,tintarea,averagebrush,tintbrush,findchangebox,graduatedfill,colrep,patfill,rgbcont,greyscale,rotate,transarea
��#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%
�Qpatfill+=CODE%:rgbcont+=CODE%:greyscale+=CODE%:rotate+=CODE%:transarea+=CODE%
��
�
���loadfonts
� N%=-1
�FONT$(0)="System Font"
�;ș "XOS_ReadVarVal","Font$Path",IO%,256,,3 � ,,N% ;err%
�� (err% � 1) � FONTS%=0:�
�FP%=0:FONTS%=0
��
�+ș "Font_ListFonts",,IO%,FP%,-1 � ,,FP%
"FONT$(FONTS%+1)=$IO%:FONTS%+=1
� FP%=-1
FONTS%-=1
$-ș "Font_ReadFontMax" � B%,C%,D%,E%,F%,G%
.��seticon(16,12,�(B% � 1024)):�seticon(16,13,�(C% � 1152)):�seticon(16,14,�(D% � 1152)):�seticon(16,15,�(E% � 1152)):�seticon(16,16,�(F% � 1152)):�seticon(16,17,�(G% � 1152))
8�
B
L��loadsprites
V� SPRITES% 2000
`j!SPRITES%=2000:SPRITES%!4=0:SPRITES%!8=16:SPRITES%!12=16:ș &2E,266,SPRITES%,"<Archrome$Dir>.!Sprites"
j�
t
~��action
��
� �poll
�'� (REAS%=17 � REAS%=18) � BLK%!16=0
��
�
���die:OP%=0:�spbuf(0)
�#ș "Wimp_CloseDown",HAND%,!TAS%
��
��
�
�
��poll
�"ș "Wimp_GetPointerInfo",,BLK%
!� BLK%!12<>HAND%(2) � MBUS%=�
!BLK%=%10011111110100110000
!ș "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
� 9:�menu
�� 7:�dragfin
�� 17,18:�inmessage(BLK%!16)
��
��
�
���kuke:� � KUKE% � �
�KULI%=10
�ȗ MX%,MY%,MH%:KP%=�
�� � �(-58) � �dzE
�8� KUKL%<>-58 � KUKL%=-58:KUKD%=0:MY%+=4:KP%=�:� �dzE
�)KUKD%+=1:� KUKD%<KULI% � KP%=�:� �dzE
�KUKD%=KULI%:MY%+=4:KP%=�
�� � �(-42) � �TbF
8� KUKL%<>-58 � KUKL%=-58:KUKD%=0:MY%-=4:KP%=�:� �TbF
)KUKD%+=1:� KUKD%<KULI% � KP%=�:� �TbF
KUKD%=KULI%:MY%-=4:KP%=�
"� � �(-26) � �DJF
,8� KUKL%<>-58 � KUKL%=-58:KUKD%=0:MX%-=2:KP%=�:� �DJF
6)KUKD%+=1:� KUKD%<KULI% � KP%=�:� �DJF
@KUKD%=KULI%:MX%-=2:KP%=�
J� � �(-122) � �DrF
T8� KUKL%<>-58 � KUKL%=-58:KUKD%=0:MX%+=2:KP%=�:� �DrF
^)KUKD%+=1:� KUKD%<KULI% � KP%=�:� �DrF
hKUKD%=KULI%:MX%+=2:KP%=�
r� � 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
�
�
&��redrawbrush
0'ș "Wimp_RedrawWindow",,BLK% � FIN%
:�getbrushor
D<ȕ FIN%:�plotbrushes:ș "Wimp_GetRectangle",,BLK% � FIN%
N�
X�
b
l��redrawedbru
v'ș "Wimp_RedrawWindow",,BLK% � FIN%
��getedbruor
�:ȕ FIN%:�plotedbru:ș "Wimp_GetRectangle",,BLK% � FIN%
��
��
�
���redrawpatfill
�'ș "Wimp_RedrawWindow",,BLK% � FIN%
��getpatfillor
�<ȕ FIN%:�plotpatfill:ș "Wimp_GetRectangle",,BLK% � FIN%
��
��
�
�F��forcedrawpatfill:ș "Wimp_ForceRedraw",HAND%(20),0,-108,1100,0:�
%��forcedrawedbru(x1%,y1%,x2%,y2%)
!BLK%=HAND%(12)
BLK%!4=x1%
*BLK%!8=y1%
4BLK%!12=x2%
>BLK%!16=y2%
H'ș "Wimp_UpdateWindow",,BLK% � FIN%
R�getedbruor
\ȕ FIN%
f�plotedbru
p'ș "Wimp_GetRectangle",,BLK% � FIN%
z�
��
�
���forcedrawbrush
�!BLK%=HAND%(5)
�BLK%!4=0
�BLK%!8=-260
�BLK%!12=384
�
BLK%!16=0
�'ș "Wimp_UpdateWindow",,BLK% � FIN%
��getbrushor
�ȕ FIN%
��plotbrushes
�'ș "Wimp_GetRectangle",,BLK% � FIN%
�
�
$(��plot256sprite(SPA%,SPI$,POX%,POY%)
.� �<>15 � � �DBI
8Z!SCALE%=1:SCALE%!4=1:SCALE%!8=1:SCALE%!12=1:ș "OS_SpriteOp",290,SPA%,SPI$,POX%,POY%:�
B9� �<>ESM% � ESM%=�:EPM%=�:ș&40740,15,0,-1,-1,PIXTAB%
Lș&35,-1,4 � ,,E%
VV� E%<1 � SX%=2^(1-E%):!SCALE%=SX%:SCALE%!8=1 � SX%=2^(E%-1):!SCALE%=1:SCALE%!8=SX%
`SCALE%!4=1:SCALE%!12=1
j=ș "OS_SpriteOp",308,SPA%,SPI$,POX%,POY%,0,SCALE%,PIXTAB%
t�
~
���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
��
��
�
���plotbrushes
��L%=1 � 12
�DBLK%!400=HAND%(5):BLK%!404=L%-1:ș "Wimp_GetIconState",,BLK%+400
�H�plot256sprite(BRUSH%,�L%,WOX%+(BLK%!408)+2,WOY%+(260+(BLK%!412))+4)
�V� SELBR%=L% � �col(48,192,3):ȓ Ȑ WOX%+(BLK%!408)+2,WOY%+(260+(BLK%!412))+4,64,60
��
��
��plotedbru
�L%=1 � 12
EBLK%!400=HAND%(12):BLK%!404=L%-1:ș "Wimp_GetIconState",,BLK%+400
(:�plot256sprite(BRUSH%,�L%,WOX%+((L%-1)*64)+32,WOY%+20)
2G� EDBR%=L% � �col(48,192,3):ȓ Ȑ WOX%+((L%-1)*64)+32,WOY%+20,64,60
<�
F#!SCALE%=(!SCALE%)*12:SCALE%!4=8
P�� �<>15 � ș "OS_SpriteOp",308,BRUSH%,�EDBR%,WOX%+28,WOY%+112,0,SCALE%,PIXTAB% � ș "OS_SpriteOp",308,BRUSH%,�EDBR%,WOX%+28,WOY%+112,0,SCALE%
Z�EX%=WOX%+28:EY%=WOY%+112:�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):�
d�
n
x��forcedrawmain
�!BLK%=HAND%(2)
�BLK%!4=0
�BLK%!8=-936*ZOOM%
�BLK%!12=1236*ZOOM%
�
BLK%!16=0
�'ș "Wimp_UpdateWindow",,BLK% � FIN%
�
�getor
�ȕ FIN%
��plotpic
�'ș "Wimp_GetRectangle",,BLK% � FIN%
��
��
�
!��quickdrawmain:� � VACB% � �
!BLK%=HAND%(2)
BLK%!4=CBMINX%
"BLK%!8=CBMINY%
,BLK%!12=CBMAXX%
6BLK%!16=CBMAXY%
@'ș "Wimp_UpdateWindow",,BLK% � FIN%
J
�getor
Tȕ FIN%
^�plotpic
h'ș "Wimp_GetRectangle",,BLK% � FIN%
r�
|�
�
���inpic:� IP% � �
� IP%=�
�1ș "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%
��
�
�@��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:�
&
0.��outbackup:ș "OS_SpriteOp",B1,B2,B3,B4:�
:
D��outpic:� � IP% � �
N IP%=�
X!ș "OS_ChangedBox",-1 � ,CBA%
b�� �(CBA%!4)=-1 � �(CBA%!8)=-1 � �(CBA%!12)=-1 � �(CBA%!16)=-1 � VACB%=�:ș "OS_ChangedBox":ș "OS_SpriteOp",V1,V2,V3,V4:� � VACB%=�
l*CBMINX%=CBA%!4:CBMINX%=CBMINX%*ZOOM%*2
v3CBMINY%=CBA%!8:CBMINY%=(-936+(CBMINY%*4))*ZOOM%
�+CBMAXX%=CBA%!12:CBMAXX%=CBMAXX%*ZOOM%*2
�4CBMAXY%=CBA%!16:CBMAXY%=(-936+(CBMAXY%*4))*ZOOM%
�CBMAXX%+=4*ZOOM%
�CBMAXY%+=4*ZOOM%
�ș "OS_ChangedBox"
� ș "OS_SpriteOp",V1,V2,V3,V4
��
�
���redrawmain
�� FUSE%=32 �
�� FONT%<>0 � EFM%<>-1 �
�[� �<>EFM% � �inpic:ș "ColourTrans_SetFontColours",FHAND%,BPAL%,FPAL%,14:�outpic:EFM%=�
��
�
'ș "Wimp_RedrawWindow",,BLK% � FIN%
�getor
8ȕ FIN%:�plotpic:ș "Wimp_GetRectangle",,BLK% � FIN%
*�
4�
>
H
��plotpic
RH� �=15 � ZOOM%=1 � ș "OS_SpriteOp",290,PIC%,"PIC",WOX%,WOY%:�grid:�
\9� �<>ESM% � ESM%=�:EPM%=�:ș&40740,15,0,-1,-1,PIXTAB%
fș&35,-1,4 � ,,E%
pV� E%<1 � SX%=2^(1-E%):!SCALE%=SX%:SCALE%!8=1 � SX%=2^(E%-1):!SCALE%=1:SCALE%!8=SX%
z!SCALE%=(!SCALE%)*ZOOM%
�SCALE%!4=ZOOM%
�SCALE%!12=1
�*� �=15 � TPIXTAB%=0 � TPIXTAB%=PIXTAB%
�Gș "OS_SpriteOp",308,PIC%,"PIC",WOX%,WOY%,0,SCALE%,TPIXTAB%:�grid:�
�
�C��grid:� GRCO%=-1 � (2*GRWI%*ZOOM%)<16 � (4*GRHE%*ZOOM%)<16 � �
��gridcol
�� X%,Y%
�=X%=(((BLK%!28)-WOX%) � (ZOOM%*(2*GRWI%)))*(2*GRWI%*ZOOM%)
�=Y%=(((BLK%!32)-WOY%) � (ZOOM%*(4*GRHE%)))*(4*GRHE%*ZOOM%)
�XOF%=(GRWI%-GRBX%)*2*ZOOM%
�YOF%=(GRHE%-GRBY%)*4*ZOOM%
�X%+=WOX%-XOF%
Y%+=WOY%-YOF%
D�:� X%,(BLK%!32),X%,(BLK%!40):X%+=(2*GRWI%*ZOOM%):� X%>(BLK%!36)
D�:� (BLK%!28),Y%,(BLK%!36),Y%:Y%+=(4*GRHE%*ZOOM%):� Y%>(BLK%!40)
$�
.
8��plotpal(PTU%)
B�col(63,192,0)
L� VDU4:PRINT WOX%,WOY%
V� �<>15 � � �DtN
`tș "OS_SpriteOp",290,PTU%,"Palette",WOX%,WOY%:� PTU%=PAL% � ȓ WOX%+((COL% � 32)*24),WOY%+((COL% � 32)*28),24,28
j�
t9� �<>EPM% � ESM%=�:EPM%=�:ș&40740,15,0,-1,-1,PIXTAB%
~ș&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%
�SCALE%!4=1
�SCALE%!12=1
�Bș "OS_SpriteOp",308,PTU%,"Palette",WOX%,WOY%,0,SCALE%,PIXTAB%
�F� PTU%=PAL% � ȓ WOX%+((COL% � 32)*24),WOY%+((COL% � 32)*28),24,28
��
�
���trasp(TC%)
�TRASP%?TC%=(TRASP%?TC%) � 1
�5ș "OS_SpriteOp",316,PAL%,"Palette" � V1,V2,V3,V4
�+TX%=((TC% � 32)*24):TY%=((TC% � 32)*28)
�r� (TRASP%?TC%)=0 � �0,PALTAB%?(TC%*2) Ȝ PALTAB%?((TC%*2)+1) � �anticol(PALTAB%?(TC%*2),PALTAB%?((TC%*2)+1),0)
=� TX%+6,TY%+20,TX%+18,TY%+20:� TX%+12,TY%+8,TX%+12,TY%+20
ș "OS_SpriteOp",V1,V2,V3,V4
�
(��redrawpal
2'ș "Wimp_RedrawWindow",,BLK% � FIN%
<
�getpalor
F>ȕ FIN%:�plotpal(PAL%):ș "Wimp_GetRectangle",,BLK% � FIN%
P�
Z�
d
n��redrawtback
x'ș "Wimp_RedrawWindow",,BLK% � FIN%
�
�getpalor
�ȕ 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%
��getpalor:WOY%-=328
�]ȕ FIN%:WOY%+=290:�plotpal(OPAL%):�col(0,0,0):� WOX%,WOY%+224,WOX%+770,WOY%+224:WOY%-=290
�B�plotpal(SPBUF%):�col(0,0,0):� WOX%,WOY%+224,WOX%+770,WOY%+224
�I�col(63,192,0):ȓ WOX%+((SREP% � 32)*24),WOY%+((SREP% � 32)*28),24,28
'ș "Wimp_GetRectangle",,BLK% � FIN%
�
�
"
,��forcedrawcolrep
6!BLK%=HAND%(18)
@BLK%!4=0
JBLK%!8=-556
TBLK%!12=770
^
BLK%!16=0
h'ș "Wimp_UpdateWindow",,BLK% � FIN%
r�getpalor:WOY%-=328
|ȕ FIN%
�UWOY%+=290:�plotpal(OPAL%):�col(0,0,0):� WOX%,WOY%+224,WOX%+770,WOY%+224:WOY%-=290
�B�plotpal(SPBUF%):�col(0,0,0):� WOX%,WOY%+224,WOX%+770,WOY%+224
�I�col(63,192,0):ȓ WOX%+((SREP% � 32)*24),WOY%+((SREP% � 32)*28),24,28
�'ș "Wimp_GetRectangle",,BLK% � FIN%
��
��
�
�
ݤcecf
�� �high(11,18) � =1
�� �high(11,19) � =2
�� �high(11,20) � =3
�� �high(11,21) � =4
�=0
��redrawpat
'ș "Wimp_RedrawWindow",,BLK% � FIN%
&
�getpator
0Iȕ FIN%:�plotpal(OPAL%):�col(0,0,0):� WOX%,WOY%+224,WOX%+770,WOY%+224
:-CECF%=�cecf:�K%=0 � 7:L%=ECF%(K%+1,CECF%)
DcPE%=BTC%?L%:�col(PALTAB%?(PE%*2),PALTAB%?((PE%*2)+1),0):ȓ Ȑ WOX%-146,(WOY%+276)-(K%*40),38,36
N�
X'ș "Wimp_GetRectangle",,BLK% � FIN%
b�
l�
v
�ݤgrafilno
�� �high(13,17) � =0
�� �high(13,18) � =1
�� �high(13,19) � =2
�� �high(13,20) � =3
�� �high(13,21) � =4
�=-1
�
���redrawfill
�'ș "Wimp_RedrawWindow",,BLK% � FIN%
�!�getpator:WOY%-=140:WOX%-=140
�qȕ FIN%:WOY%+=232:WOX%+=380:�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:�
'ș "Wimp_GetRectangle",,BLK% � FIN%
�
�
*
4��forcedrawfill
>!BLK%=HAND%(13)
HBLK%!4=0
RBLK%!8=-500
\BLK%!12=1200
fBLK%!16=-360
p'ș "Wimp_UpdateWindow",,BLK% � FIN%
z �getpator:WOY%-=48:WOX%+=100
�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:�
�ȕ FIN%
�'ș "Wimp_GetRectangle",,BLK% � FIN%
��
��
�
���forcedrawpat
�!BLK%=HAND%(11)
�BLK%!4=0
�BLK%!8=-356
�BLK%!12=100
�
BLK%!16=0
'ș "Wimp_UpdateWindow",,BLK% � FIN%
�getpator
ȕ FIN%
$A�plotpal(OPAL%):�col(0,0,0):� WOX%,WOY%+224,WOX%+770,WOY%+224
.CECF%=�cecf
8� RK%=0 � 7
BL%=ECF%(RK%+1,CECF%)
LdPE%=BTC%?L%:�col(PALTAB%?(PE%*2),PALTAB%?((PE%*2)+1),0):ȓ Ȑ WOX%-146,(WOY%+276)-(RK%*40),38,36
V,ȓ Ȑ WOX%-146,(WOY%+276)-(RK%*40),38,36
`�
j'ș "Wimp_GetRectangle",,BLK% � FIN%
t�
~�
�
�&ݤ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%
�
�getor
��
��forcedrawpal(PTU%)
!BLK%=HAND%(3)
BLK%!4=0
(BLK%!8=-228
2BLK%!12=770
<
BLK%!16=0
F'ș "Wimp_UpdateWindow",,BLK% � FIN%
P
�getpalor
Zȕ FIN%
d�plotpal(PTU%)
n'ș "Wimp_GetRectangle",,BLK% � FIN%
x�
��
�
���forcedrawtback
�!BLK%=HAND%(15)
�BLK%!4=0
�BLK%!8=-228
�BLK%!12=770
�
BLK%!16=0
�'ș "Wimp_UpdateWindow",,BLK% � FIN%
�
�getpalor
�ȕ FIN%
��plotpal(OPAL%)
�K�col(63,192,0):ȓ WOX%+((FONTB% � 32)*24),WOY%+((FONTB% � 32)*28),24,28
'ș "Wimp_GetRectangle",,BLK% � FIN%
�
�
"
,��getpalor
6WOX%=BLK%!4-BLK%!20
@WOY%=(BLK%!16-BLK%!24)-228
J�
T
^��getpator
hWOX%=(BLK%!4-BLK%!20)+180
rWOY%=(BLK%!16-BLK%!24)-340
|�
�
�
��picpoll
�"ș "Wimp_GetPointerInfo",,BLK%
�3� VDU4:PRINTTAB(0,0);MBUS%;",";BLK%!8;" ":VDU5
�%� MBUS% � BLK%!8<>0 � � � MBUS%=�
�D� BLK%!12<HAND%(0) � BLK%!12>HAND%(NOWIND%) � IDRAG%=(BLK%!8<>0)
�� BLK%!8=0 � IDRAG%=�
�&� VDU4:PRINTTAB(0,0);BLK%!16;" "
�)� 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:� �Db`
'� BUT%=0 � FUST%=0 � FUST%=0:� �Db`
8�picpos:�inpic:�setcol:�l(X%(0),Y%(0),X%,Y%):�outpic
&�quickdrawmain
0X%(0)=X%:Y%(0)=Y%
:�� 2:� FUST%=0 � BUT%<>0 � �picpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:OX%=X%:OY%=Y%:�inpic:�3,63 Ȝ 192:� X%(0),Y%(0),OX%,OY%:�outpic:�quickdrawmain:� �Db`
D� FUST%=0 � � �Db`
N�� BUT%=1 � �inpic:�3,63 Ȝ 192:� X%(0),Y%(0),OX%,OY%:�picpos:X%(0)=X%:Y%(0)=Y%:OX%=X%:OY%=Y%:FUST%=1:�3,63 Ȝ 192:� X%(0),Y%(0),OX%,OY%:�outpic:�quickdrawmain:� �Db`
X�� BUT%=4 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�picpos:�setcol:�l(X%(0),Y%(0),X%,Y%):X%(0)=X%:Y%(0)=Y%:OX%=X%:OY%=Y%:�eoc:� X%(0),Y%(0),X%,Y%:�outpic:�quickdrawmain:� �Db`
b&�picpos:� X%=OX% � Y%=OY% � � �Db`
l^�inpic:�eoc:� X%(0),Y%(0),OX%,OY%:OX%=X%:OY%=Y%:� X%(0),Y%(0),X%,Y%:�outpic:�quickdrawmain
v~� 4:� FUST%=0 � �paintscale:�picpos:�inpic:�eorback:�paintbrush(X%,Y%):�outpic:�quickdrawmain:OX%=X%:OY%=Y%:FUST%=1:� �Db`
��picpos
��� X%<>OX% � Y%<>OY% � �paintscale:�inpic:�eorback:�paintbrush(OX%,OY%):�paintbrush(X%,Y%):OX%=X%:OY%=Y%:�outpic:�quickdrawmain
��� 5:� 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:� �Db`
�� FUST%=0 � � �Db`
��� BUT%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�picpos:OX%=X%:OY%=Y%:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
��� BUT%=4 � (OX%<>X%(0) � OY%<>Y%(0)) � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�picpos:�setcol:�r(X%(0),Y%(0),X%-X%(0),Y%-Y%(0)):OX%=X%:OY%=Y%:�outpic:�quickdrawmain:�letgo:FUST%=0:� �Db`
�&�picpos:� X%=OX% � Y%=OY% � � �Db`
�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
Н� 6:� 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:� �Db`
�� FUST%=0 � � �Db`
�� BUT%=1 � �inpic:�eoc:ȓ Ȑ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�picpos:OX%=X%:OY%=Y%:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
��� BUT%=4 � (OX%<>X%(0) � OY%<>Y%(0)) � �inpic:�eoc:ȓ Ȑ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�picpos:�setcol:ȓ Ȑ X%(0),Y%(0),X%-X%(0),Y%-Y%(0):OX%=X%:OY%=Y%:�outpic:�quickdrawmain:�letgo:FUST%=0:� �Db`
�&�picpos:� X%=OX% � Y%=OY% � � �Db`
~�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
�� 7:� FUST%=0 � BUT%<>0 � �picpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:OX%=X%:OY%=Y%:�inpic:�eoc:ȏ X%(0),Y%(0),�dist(OX%,OY%):�outpic:�quickdrawmain:� �Db`
� FUST%=0 � � �Db`
{� BUT%=1 � �inpic:�eoc:ȏ X%(0),Y%(0),�dist(OX%,OY%):�picpos:OX%=X%:OY%=Y%:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
*�� BUT%=4 � (OX%<>X%(0) � OY%<>Y%(0)) � �inpic:�eoc:ȏ X%(0),Y%(0),�dist(OX%,OY%):�picpos:�setcol:ȏ X%(0),Y%(0),�dist(X%,Y%):OX%=X%:OY%=Y%:�outpic:�quickdrawmain:�letgo:FUST%=0:� �Db`
4&�picpos:� X%=OX% � Y%=OY% � � �Db`
>n�inpic:�eoc:ȏ X%(0),Y%(0),�dist(OX%,OY%):OX%=X%:OY%=Y%:ȏ X%(0),Y%(0),�dist(X%,Y%):�outpic:�quickdrawmain
H�� 8:� FUST%=0 � BUT%<>0 � �picpos:X%(0)=X%:Y%(0)=Y%:FUST%=1:OX%=X%:OY%=Y%:�inpic:�eoc:ȏ Ȑ X%(0),Y%(0),�dist(OX%,OY%):�outpic:�quickdrawmain:� �Db`
R� FUST%=0 � � �Db`
\~� BUT%=1 � �inpic:�eoc:ȏ Ȑ X%(0),Y%(0),�dist(OX%,OY%):�picpos:OX%=X%:OY%=Y%:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
f�� BUT%=4 � (OX%<>X%(0) � OY%<>Y%(0)) � �inpic:�eoc:ȏ Ȑ X%(0),Y%(0),�dist(OX%,OY%):�picpos:�setcol:ȏ Ȑ X%(0),Y%(0),�dist(X%,Y%):OX%=X%:OY%=Y%:�outpic:�quickdrawmain:�letgo:FUST%=0:� �Db`
p&�picpos:� X%=OX% � Y%=OY% � � �Db`
zt�inpic:�eoc:ȏ Ȑ X%(0),Y%(0),�dist(OX%,OY%):OX%=X%:OY%=Y%:ȏ Ȑ X%(0),Y%(0),�dist(X%,Y%):�outpic:�quickdrawmain
��� 9:� 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:� �Db`
�� FUST%=0 � � �Db`
�}� BUT%=1 � FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�picpos:OX%=X%:OY%=Y%:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
�i� BUT%=1 � FUST%=2 � �inpic:�eoc:�tri(5,OX%,OY%):�picpos:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
��� BUT%=4 � (OX%<>X%(0) � OY%<>Y%(0)) � FUST%=1 � �inpic:�eoc:X%(1)=OX%:Y%(1)=OY%:�picpos:OX%=X%:OY%=Y%:� X%(1),Y%(1),X%,Y%:� X%(0),Y%(0),X%,Y%:�outpic:�quickdrawmain:�letgo:FUST%=2:� �Db`
��� BUT%=4 � (OX%<>X%(1) � OY%<>Y%(1)) � FUST%=2 � �inpic:�eoc:�picpos:�tri(5,OX%,OY%):�setcol:�tri(0,X%,Y%):OX%=X%:OY%=Y%:�outpic:�quickdrawmain:�letgo:FUST%=0:� �Db`
�&�picpos:� X%=OX% � Y%=OY% � � �Db`
�j� FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:OX%=X%:OY%=Y%:� X%(0),Y%(0),X%,Y%:�outpic:�quickdrawmain
Ԕ� FUST%=2 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:� X%(1),Y%(1),OX%,OY%:OX%=X%:OY%=Y%:� X%(0),Y%(0),X%,Y%:� X%(1),Y%(1),X%,Y%:�outpic:�quickdrawmain
ގ� 10:� 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:� �Db`
�� FUST%=0 � � �Db`
�}� BUT%=1 � FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�picpos:OX%=X%:OY%=Y%:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
�j� BUT%=1 � FUST%=2 � �inpic:�eoc:�tri(85,OX%,OY%):�picpos:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
�� 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%:�tri(85,X%,Y%):�outpic:�quickdrawmain:�letgo:FUST%=2:� �Db`
�� BUT%=4 � (OX%<>X%(1) � OY%<>Y%(1)) � FUST%=2 � �inpic:�eoc:�picpos:�tri(85,OX%,OY%):�setcol:�tri(85,X%,Y%):OX%=X%:OY%=Y%:�outpic:�quickdrawmain:�letgo:FUST%=0:� �Db`
&�picpos:� X%=OX% � Y%=OY% � � �Db`
$j� FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:OX%=X%:OY%=Y%:� X%(0),Y%(0),X%,Y%:�outpic:�quickdrawmain
.`� FUST%=2 � �inpic:�eoc:�tri(85,OX%,OY%):OX%=X%:OY%=Y%:�tri(85,X%,Y%):�outpic:�quickdrawmain
8�� 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:� �Db`
B� FUST%=0 � � �Db`
L}� BUT%=1 � FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�picpos:OX%=X%:OY%=Y%:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
Vl� BUT%=1 � FUST%=2 � �inpic:�eoc:�elip(&C5,OX%,OY%):�picpos:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
`�� 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:� �Db`
j�� 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:� �Db`
t&�picpos:� X%=OX% � Y%=OY% � � �Db`
~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
��� 12:� 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:� �Db`
�� FUST%=0 � � �Db`
�}� BUT%=1 � FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�picpos:OX%=X%:OY%=Y%:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
�l� BUT%=1 � FUST%=2 � �inpic:�eoc:�elip(&CD,OX%,OY%):�picpos:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
��� 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(&CD,X%,Y%):�outpic:�quickdrawmain:�letgo:FUST%=2:� �Db`
į� BUT%=4 � (OX%<>X%(1) � OY%<>Y%(1)) � FUST%=2 � �inpic:�eoc:�picpos:�elip(&CD,OX%,OY%):�setcol:�elip(&CD,X%,Y%):OX%=X%:OY%=Y%:�outpic:�quickdrawmain:�letgo:FUST%=0:� �Db`
�&�picpos:� X%=OX% � Y%=OY% � � �Db`
�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(&CD,OX%,OY%):OX%=X%:OY%=Y%:�elip(&CD,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:� �Db`
�� FUST%=0 � � �Db`
}� BUT%=1 � FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�picpos:OX%=X%:OY%=Y%:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
l� BUT%=1 � FUST%=2 � �inpic:�eoc:�para(0,0,OX%,OY%):�picpos:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
�� 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:� �Db`
�� 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:� �Db`
(&�picpos:� X%=OX% � Y%=OY% � � �Db`
2j� 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
F�� 14:� 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:� �Db`
P� FUST%=0 � � �Db`
Z}� BUT%=1 � FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�picpos:OX%=X%:OY%=Y%:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
dl� BUT%=1 � FUST%=2 � �inpic:�eoc:�para(0,1,OX%,OY%):�picpos:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
n�� 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,1,X%,Y%):�outpic:�quickdrawmain:�letgo:FUST%=2:� �Db`
x�� BUT%=4 � (OX%<>X%(1) � OY%<>Y%(1)) � FUST%=2 � �inpic:�eoc:�picpos:�para(0,1,OX%,OY%):�setcol:�para(0,1,X%,Y%):OX%=X%:OY%=Y%:�outpic:�quickdrawmain:�letgo:FUST%=0:� �Db`
�&�picpos:� X%=OX% � Y%=OY% � � �Db`
�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,1,OX%,OY%):OX%=X%:OY%=Y%:�para(0,1,X%,Y%):�outpic:�quickdrawmain
��� 15:� 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:� �Db`
�� FUST%=0 � � �Db`
�}� BUT%=1 � FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�picpos:OX%=X%:OY%=Y%:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
�l� BUT%=1 � FUST%=2 � �inpic:�eoc:�elip(&A5,OX%,OY%):�picpos:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
Ⱦ� 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(&A5,X%,Y%):�outpic:�quickdrawmain:�letgo:FUST%=2:� �Db`
ү� BUT%=4 � (OX%<>X%(1) � OY%<>Y%(1)) � FUST%=2 � �inpic:�eoc:�picpos:�elip(&A5,OX%,OY%):�setcol:�elip(&A5,X%,Y%):OX%=X%:OY%=Y%:�outpic:�quickdrawmain:�letgo:FUST%=0:� �Db`
�&�picpos:� X%=OX% � Y%=OY% � � �Db`
�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(&A5,OX%,OY%):OX%=X%:OY%=Y%:�elip(&A5,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:� �Db`
� FUST%=0 � � �Db`
}� BUT%=1 � FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�picpos:OX%=X%:OY%=Y%:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
l� BUT%=1 � FUST%=2 � �inpic:�eoc:�elip(&B5,OX%,OY%):�picpos:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
"�� 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:� �Db`
,�� 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:� �Db`
6&�picpos:� X%=OX% � Y%=OY% � � �Db`
@j� FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:OX%=X%:OY%=Y%:� X%(0),Y%(0),X%,Y%:�outpic:�quickdrawmain
Jd� FUST%=2 � �inpic:�eoc:�elip(&B5,OX%,OY%):OX%=X%:OY%=Y%:�elip(&B5,X%,Y%):�outpic:�quickdrawmain
T�� 17:� 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:� �Db`
^� FUST%=0 � � �Db`
h}� BUT%=1 � FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�picpos:OX%=X%:OY%=Y%:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
rl� BUT%=1 � FUST%=2 � �inpic:�eoc:�elip(&AD,OX%,OY%):�picpos:FUST%=0:�outpic:�quickdrawmain:�letgo:� �Db`
|�� 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(&AD,X%,Y%):�outpic:�quickdrawmain:�letgo:FUST%=2:� �Db`
��� BUT%=4 � (OX%<>X%(1) � OY%<>Y%(1)) � FUST%=2 � �inpic:�eoc:�picpos:�elip(&AD,OX%,OY%):�setcol:�elip(&AD,X%,Y%):OX%=X%:OY%=Y%:�outpic:�quickdrawmain:�letgo:FUST%=0:� �Db`
�&�picpos:� X%=OX% � Y%=OY% � � �Db`
�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(&AD,OX%,OY%):OX%=X%:OY%=Y%:�elip(&AD,X%,Y%):�outpic:�quickdrawmain
�(� 19:� FUST%<2 � �grabpoll(0):� �Db`
�k� BUT%=1 � �inpic:�picpos:�pgrab(OX%,OY%,3):OX%=X%:OY%=Y%:�outpic:�quickdrawmain:FUST%=0:�spinit:� �Db`
�}� BUT%=4 � �inpic:�picpos:�pgrab(OX%,OY%,3):�pgrab(X%,Y%,0):OX%=X%:OY%=Y%:�pgrab(OX%,OY%,3):�outpic:�quickdrawmain:� �Db`
�&�picpos:� X%=OX% � Y%=OY% � � �Db`
�Q�inpic:�pgrab(OX%,OY%,3):OX%=X%:OY%=Y%:�pgrab(X%,Y%,3):�outpic:�quickdrawmain
�(� 18:� FUST%<2 � �grabpoll(1):� �Db`
�k� BUT%=1 � �inpic:�picpos:�pgrab(OX%,OY%,3):OX%=X%:OY%=Y%:�outpic:�quickdrawmain:FUST%=0:�spinit:� �Db`
�x� BUT%=4 � �inpic:�picpos:�pgrab(OX%,OY%,3):�pgrab(X%,Y%,0):OX%=X%:OY%=Y%:�pgrab(OX%,OY%,3):�outpic:�quickdrawmain:�
�&�picpos:� X%=OX% � Y%=OY% � � �Db`
Q�inpic:�pgrab(OX%,OY%,3):OX%=X%:OY%=Y%:�pgrab(X%,Y%,3):�outpic:�quickdrawmain
%� 20:� FUST%<2 � �rectpoll:� �Db`
G�spbuf(�spritesize(OX%-X%(0),OY%-Y%(0),1)):� Q% � �spinit:�spbuferr
&C�inpic:GRN$="GRAB":ș&2E,272,SPBUF%,"GRAB",,X%(0),Y%(0),OX%,OY%
0.ș&2E,285,SPBUF%,"GRAB":GRABM%=8:�fillmask
:0ș&2E,290,SPBUF%,"GRAB",X%(0),Y%(0),3+GRABM%
Dmș&2E,303,SPBUF%,"GRAB":ș&2E,290,SPBUF%,"GRAB",X%(0),Y%(0),GRABM%:�outpic:FUST%=0:�spinit:�quickdrawmain
N%� 21:� FUST%<2 � �rectpoll:� �Db`
XG�spbuf(�spritesize(OX%-X%(0),OY%-Y%(0),1)):� Q% � �spinit:�spbuferr
bC�inpic:GRN$="GRAB":ș&2E,272,SPBUF%,"GRAB",,X%(0),Y%(0),OX%,OY%
l.ș&2E,285,SPBUF%,"GRAB":GRABM%=8:�fillmask
v0ș&2E,290,SPBUF%,"GRAB",X%(0),Y%(0),3+GRABM%
�mș&2E,289,SPBUF%,"GRAB":ș&2E,290,SPBUF%,"GRAB",X%(0),Y%(0),GRABM%:�outpic:FUST%=0:�spinit:�quickdrawmain
�%� 22:� FUST%<2 � �rectpoll:� �Db`
�"�inpic:�setcol:�L%=0 � 932 � 4
�/� L%<Y%(0) � L%>OY% � � 0,L%,1232,L%:� �t|[
�!� X%(0)>0 � � 0,L%,X%(0)-2,L%
�#� OY%<1232 � � OX%+2,L%,1232,L%
�$�:�outpic:FUST%=0:�quickdrawmain
�%� 23:� FUST%<2 � �rectpoll:� �Db`
И� FUCO%=0 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain:X%(1)=X%(0):Y%(1)=Y%(0):X%(2)=OX%:Y%(2)=OY%:FUST%=0:FUCO%=1:� �Db`
�X�spbuf(�spritesize(X%(2)-X%(1),Y%(2)-Y%(1),�(�high(8,14)))):� Q% � �spinit:�spbuferr
�s�inpic:�eoc:ȓ X%(1),Y%(1),X%(2)-X%(1),Y%(2)-Y%(1):GRN$="GRAB":ș&2E,272,SPBUF%,"GRAB",,X%(1),Y%(1),X%(2),Y%(2)
�I� �high(8,14) � ș&2E,285,SPBUF%,"GRAB":GRABM%=8:�fillmask � GRABM%=0
�]�grabflip:SCALE%!8=X%(2)-X%(1):SCALE%!12=Y%(2)-Y%(1):!SCALE%=OX%-X%(0):SCALE%!4=OY%-Y%(0)
dș&2E,308,SPBUF%,"GRAB",X%(0),Y%(0),GRABM%,SCALE%:�outpic:FUST%=0:FUCO%=0:�spinit:�quickdrawmain
5� 25:�inpic:�3,63:�69,300,300:�69,300,300:�picpos
� X%=OX% � Y%=OY% � �Tj\
�mapline
*7� BUT%<>1 � BUT%<>4 � �outpic:�quickdrawmain:� �Db`
4� BUT%=4 � �tl\
>�eoc
HȎ FUCO% �
R� 2:� X%(1),Y%(1),X%,Y%
\5� 3:� X%(1),Y%(1),X%(2),Y%(2):� X%(2),Y%(2),X%,Y%
fc� 4:� X%(1),Y%(1),X%(2),Y%(2):� X%(2),Y%(2),X%(3),Y%(3):� X%(3),Y%(3),X%,Y%:� X%,Y%,X%(1),Y%(1)
po� 5:� X%(1),Y%(1),X%(2),Y%(2):� X%(2),Y%(2),X%(3),Y%(3):� X%(3),Y%(3),X%(4),Y%(4):� X%(4),Y%(4),X%(1),Y%(1)
z�� 6:� X%(1),Y%(1),X%(2),Y%(2):� X%(2),Y%(2),X%(3),Y%(3):� X%(3),Y%(3),X%(4),Y%(4):� X%(4),Y%(4),X%(1),Y%(1):� X%(5),Y%(5),X%,Y%
��� 7:� X%(1),Y%(1),X%(2),Y%(2):� X%(2),Y%(2),X%(3),Y%(3):� X%(3),Y%(3),X%(4),Y%(4):� X%(4),Y%(4),X%(1),Y%(1):� X%(5),Y%(5),X%(6),Y%(6):� X%(6),Y%(6),X%,Y%
��� 8:� X%(1),Y%(1),X%(2),Y%(2):� X%(2),Y%(2),X%(3),Y%(3):� X%(3),Y%(3),X%(4),Y%(4):� X%(4),Y%(4),X%(1),Y%(1):� X%(5),Y%(5),X%(6),Y%(6):� X%(6),Y%(6),X%(7),Y%(7):� X%(7),Y%(7),X%,Y%:� X%(5),Y%(5),X%,Y%
��
�0FUCO%=1:�letgo:�outpic:�quickdrawmain:� �Db`
��eoc
�� FUCO%=8 � � �d^\
�FX%(FUCO%)=X%:Y%(FUCO%)=Y%:� FUCO%<>4 � � X%(FUCO%),Y%(FUCO%),X%,Y%
�9� FUCO%=3 � FUCO%=7 � � X%(FUCO%-2),Y%(FUCO%-2),X%,Y%
�(OX%=X%:OY%=Y%:FUCO%+=1:�letgo:� �Db`
ޥX%(8)=X%:Y%(8)=Y%:�L%=1 � 3:� X%(L%),Y%(L%),X%(L%+1),Y%(L%+1):� X%(L%+4),Y%(L%+4),X%(L%+5),Y%(L%+5):�:� X%(1),Y%(1),X%(4),Y%(4):� X%(5),Y%(5),X%(8),Y%(8):FUCO%=1
�+�outpic:�quickdrawmain:�pixelmap:� �Db`
�%� 27:� FUST%<2 � �rectpoll:� �Db`
�-�spinit:�spbuf(145*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%
8\A%=VARS:ș "Hourglass_On":� pixaverage:ș "Hourglass_Off":�spinit:�forcedrawmain:FUST%=0
B%� 28:� FUST%<2 � �rectpoll:� �Db`
L�swapcorns
V VARS!20=BTC%:VARS!24=PALTAB%
`VARS!28=PIC%
jVARS!36=X%(0):VARS!40=Y%(0)
tVARS!44=OX%:VARS!48=OY%
~9VARS!84=PALTAB%?(COL%*2):VARS!88=PALTAB%?((COL%*2)+1)
�RA%=VARS:ș "Hourglass_On":� tintarea:ș "Hourglass_Off":�forcedrawmain:FUST%=0
��� 29:� FUST%=0 � �paintscale2:�picpos:�inpic:�eorback:�paintbrush(X%,Y%):�outpic:�quickdrawmain:OX%=X%:OY%=Y%:FUST%=1:� �Db`
��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:� �Db`
��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%) � �restpic:�inpic:ș "Font_SetFont",FHAND%:ș "Font_Paint",,TEXT$,16,X%,Y%:�outpic:�forcedrawmain:OX%=X%:OY%=Y%
��
�E�picpos:� BUT%=4 � FUST%<>0 � �inbackup:�ostext(X%,Y%):�outbackup
j� FUST%<>0 � (X%<>OX% � Y%<>OY%) � �restpic:�inpic:�ostext(X%,Y%):�outpic:�forcedrawmain:OX%=X%:OY%=Y%
�
%� 31:� FUST%<2 � �rectpoll:� �Db`
>�swapcorns:FMINX%=X%(0):FMINY%=Y%(0):FMAXX%=OX%:FMAXY%=OY%
(6ș "Hourglass_On":�fill:ș "Hourglass_Off":FUST%=0
2%� 33:� FUST%<2 � �rectpoll:� �Db`
<>�swapcorns:FMINX%=X%(0):FMINY%=Y%(0):FMAXX%=OX%:FMAXY%=OY%
F�ș "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
P� 34:� FUST%=0 � �Dd^
Z�� BUT%=4 � �inpic:�picpos:�pimport(OX%,OY%,3):�pimport(X%,Y%,0):OX%=X%:OY%=Y%:�pimport(OX%,OY%,3):�outpic:�quickdrawmain:� �Db`
dd� FUST%=0 � FUST%=1:�picpos:OX%=X%:OY%=Y%:�inpic:�pimport(X%,Y%,3):�outpic:�quickdrawmain:� �Db`
n&�picpos:� X%=OX% � Y%=OY% � � �Db`
xU�inpic:�pimport(OX%,OY%,3):OX%=X%:OY%=Y%:�pimport(X%,Y%,3):�outpic:�quickdrawmain
�(� 35:� FUST%<2 � �grabpoll(0):� �Db`
�� FUST%=2 � �closewind(8):�inpic:�picpos:�pgrab(OX%,OY%,3):OX%=X%:OY%=Y%:�outpic:�quickdrawmain:FUST%=3:�openwind(7):� �Db`
�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 � �Db`
�~�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:� FUST%<2 � �rectpoll:� �Db`
�>�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%
�@RW%=��geticon(21,4):GW%=��geticon(21,7):BW%=��geticon(21,10)
�;�L%=0 � 255:ș "ColourTrans_ColourNumberToGCOL",L% � G%
�eRC%=((G%�%1111)*RW%)�100:GC%=((((G%�48)>>2)+(G%�3))*GW%)�100:BC%=((((G%�192)>>4)+(G%�3))*BW%)�100
�� RC%>15 � RC%=15
� GC%>15 � GC%=15
� BC%>15 � BC%=15
TC%=(((RC%�3)+(GC%�3)+(BC%�3))�3):TC%=TC%+(RC%�12)+((GC%�12)<<2)+((BC%�12)<<4):ș"ColourTrans_GCOLToColourNumber",TC% � TC%
"TRANSTAB%?L%=TC%:�
,AA%=VARS:� transarea:ș "Hourglass_Off":FUST%=0:�forcedrawmain
6%� 39:� FUST%<2 � �rectpoll:� �Db`
@>�swapcorns:FMINX%=X%(0):FMINY%=Y%(0):FMAXX%=OX%:FMAXY%=OY%
J�ș "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%
TxRW%=��geticon(22,4):GW%=��geticon(22,7):BW%=��geticon(22,10):�L%=0 � 255:ș "ColourTrans_ColourNumberToGCOL",L% � G%
^SRC%=(G%�%1111)*RW%:GC%=(((G%�48)>>2)+(G%�3))*GW%:BC%=(((G%�192)>>4)+(G%�3))*BW%
h+TC%=((RC%+GC%+BC%)�3):� TC%>15 � TC%=15
rTTC%=TC%+((TC%�12)<<2)+((TC%�12)<<4):ș"ColourTrans_GCOLToColourNumber",TC% � TC%
|TRANSTAB%?L%=TC%:�
�AA%=VARS:� transarea:ș "Hourglass_Off":FUST%=0:�forcedrawmain
�%� 40:� FUST%<2 � �rectpoll:� �Db`
�>�swapcorns:FMINX%=X%(0):FMINY%=Y%(0):FMAXX%=OX%:FMAXY%=OY%
�EPW%=��geticon(23,3)*2:PH%=��geticon(23,6)*4:POX%=PW%�2:POY%=PH%�2
�AXP%=FMINX%:YP%=FMINY%:�inpic:�24,FMINX%;FMINY%;FMAXX%;FMAXY%;
�ș "Hourglass_On"
¯�:�:� USE%,�XP%+POX%,YP%+POY%) Ȝ Ȝ(XP%+POX%,YP%+POY%):ȓ Ȑ XP%,YP%,PW%-2,PH%-4:XP%+=PW%:� XP%>FMAXX%:XP%=FMINX%:YP%+=PH%:� YP%>FMAXY%:�26:�outpic:�forcedrawmain:FUST%=0
�ș "Hourglass_Off"
�%� 41:� FUST%<2 � �rectpoll:� �Db`
��� FUST%=2 � �swapcorns:ROTCX%=(X%(0)+OX%)�2:ROTCY%=(Y%(0)+OY%)�2:FMINX%=X%(0)-ROTCX%:FMINY%=Y%(0)-ROTCY%:FMAXX%=OX%-ROTCX%:FMAXY%=OY%-ROTCY%:�picpos:�inpic:�protbox(X%,Y%):�outpic:OX%=X%:OY%=Y%:�quickdrawmain:FUST%=3:� �Db`
�&�picpos:� BUT%=1 � BUT%=4 � � �d~_
�w� X%<>OX% � Y%<>OY% � �inpic:�protbox(OX%,OY%):OX%=X%:OY%=Y%:�protbox(X%,Y%):�outpic:�quickdrawmain:� �Db` � � �Db`
�M� BUT%=1 � �inpic:�protbox(OX%,OY%):�outpic:�quickdrawmain:FUST%=0:� �Db`
2�inpic:�protbox(OX%,OY%):�outpic:X%=OX%:Y%=OY%
5FUST%=4:�spinit:�spbuf(145*1024):� Q% � �spbuferr
��backuppic:�inbackup: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%)
0#X1%+=X%:X2%+=X%:X3%+=X%:X4%+=X%
:#Y1%+=Y%:Y2%+=Y%:Y3%+=Y%:Y4%+=Y%
DY�eoc:�4,X1%,Y1%:�4,X2%,Y2%:�85,X3%,Y3%:�3,60 Ȝ 192:�4,X4%,Y4%:�85,X1%,Y1%:�outbackup
N�A%=VARS:VARS!4=PIC%:VARS!8=SPBUF%:VARS!12=ROTTAB%:VARS!16=(360-ROT%)�360:VARS!20=BTC%:VARS!24=TRASP%:VARS!28=X%:VARS!32=Y%:VARS!36=ROTCX%:VARS!40=ROTCY%:ș "Hourglass_On":� rotate:ș "Hourglass_Off"
Xf�inpic:ș&2E,290,SPBUF%,"PIC":�protbox(X%,Y%):FUST%=3:OX%=X%:OY%=Y%:�outpic:�forcedrawmain:�spinit
b�
l�
v
����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%
�)� MX1%+CX%,MY1%+CY%,MX2%+CX%,MY2%+CY%
��
�
�(��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)
��
�
�ݤperc(WH%,IH%)
!)I$=�geticon(WH%,IH%):=�(�I$,�(I$)-1))
!
!
��mapline
! Ȏ FUCO% �
!*D� 2:�eoc:� X%(1),Y%(1),OX%,OY%:OX%=X%:OY%=Y%:� X%(1),Y%(1),X%,Y%
!4D� 3:�eoc:� X%(2),Y%(2),OX%,OY%:OX%=X%:OY%=Y%:� X%(2),Y%(2),X%,Y%
!>n� 4:�eoc:� X%(1),Y%(1),OX%,OY%:� X%(3),Y%(3),OX%,OY%:OX%=X%:OY%=Y%:� X%(1),Y%(1),X%,Y%:� X%(3),Y%(3),X%,Y%
!HD� 6:�eoc:� X%(5),Y%(5),OX%,OY%:OX%=X%:OY%=Y%:� X%(5),Y%(5),X%,Y%
!RD� 7:�eoc:� X%(6),Y%(6),OX%,OY%:OX%=X%:OY%=Y%:� X%(6),Y%(6),X%,Y%
!\n� 8:�eoc:� X%(5),Y%(5),OX%,OY%:� X%(7),Y%(7),OX%,OY%:OX%=X%:OY%=Y%:� X%(5),Y%(5),X%,Y%:� X%(7),Y%(7),X%,Y%
!f�
!p�
!z
!���pixelmap
!�-�spinit:�spbuf(145*1024):� Q% � �spbuferr
!��backuppic
!�ș "Hourglass_On"
!�+dsta=�((X%(6)-X%(5))^2+(Y%(5)-Y%(6))^2)
!�+dstb=�((X%(8)-X%(7))^2+(Y%(7)-Y%(8))^2)
!�1� dsta>dstb � steps%=dsta �2 � steps%=dstb �2
!�fxsa=(X%(2)-X%(1))/steps%
!�fxsb=(X%(3)-X%(4))/steps%
!�fysa=(Y%(2)-Y%(1))/steps%
!�fysb=(Y%(3)-Y%(4))/steps%
!�txsa=(X%(6)-X%(5))/steps%
!�txsb=(X%(7)-X%(8))/steps%
"tysa=(Y%(6)-Y%(5))/steps%
"tysb=(Y%(7)-Y%(8))/steps%
"� cb%=0 � steps%
"$fxa=X%(1)+cb%*fxsa
".fxb=X%(4)+cb%*fxsb
"8fya=Y%(1)+cb%*fysa
"Bfyb=Y%(4)+cb%*fysb
"Ltxa=X%(5)+cb%*txsa
"Vtxb=X%(8)+cb%*txsb
"`tya=Y%(5)+cb%*tysa
"jtyb=Y%(8)+cb%*tysb
"tF�inpic:�3,63:�69,300,300:�69,300,300:�mapln:�outpic:�quickdrawmain
"~�
"��spinit
"�ș "Hourglass_Off"
"��
"�
"���mapln
"�� ns%,fxs,fys,txs,tys,c%
"�'ns%=1+�((txb-txa)^2+(tya-tyb)^2) �2
"�'fxs=(fxb-fxa)/ns%:txs=(txb-txa)/ns%
"�'fys=(fyb-fya)/ns%:tys=(tyb-tya)/ns%
"�� c%=0 � ns%
"�]ș&2E,297,SPBUF%,"PIC",(fxa+c%*fxs)�2,(fya+c%*fys)�4 � ,,,,,col%,tin%:� USE%,col% Ȝ tin%
"�A� TRASP%?�findpalent(col%,tin%)=0 � �69,txa+c%*txs,tya+c%*tys
# �
#
�
#
#��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:�
#2� 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:�
#F0� BUT%<>4 � (OX%=X%(0) � OY%=Y%(0)) � � �t`c
#P��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
#Z�GRN$="GRAB":ș&2E,272,SPBUF%,"GRAB",,X%(0),Y%(0),X%,Y%:� �high(8,14) � ș&2E,285,SPBUF%,"GRAB":GRABM%=8:�fillmask � GRABM%=0
#d'GRWI%=�(X%-X%(0)):GRHE%=�(Y%-Y%(0))
#n� X%<X%(0) � Ȕ X%(0),X%
#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% � �
#�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
#��
#�
#���rectpoll
#Ҙ� 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)) � � �Tbd
#�:�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
$6�
$@
$J��pgrab(DX%,DY%,PL%)
$TXR=GRXM%/GRXD%
$^YR=GRYM%/GRYD%
$h!SCALE%=GRXM%
$rSCALE%!4=GRYM%
$|SCALE%!8=GRXD%
$�SCALE%!12=GRYD%
$�Wș&2E,308,SPBUF%,"GRAB",DX%-((GRWI% � 2)*XR),DY%-((GRHE% � 2)*YR),PL%+GRABM%,SCALE%
$��
$�
$���pimport(DX%,DY%,PL%)
$�!XR=GRXM%/GRXD%:YR=GRYM%/GRYD%
$�IO%!20=(!IO%)*GRXM%
$�IO%!24=(IO%!4)*GRYM%
$�IO%!28=(IO%!8)*GRXD%
$�IO%!32=(IO%!12)*GRYD%
$�� � 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))
%0�l(X%(1),Y%(1),DX%,DY%)
%:%� LITY%-4,X%(0)-X%(1),Y%(0)-Y%(1)
%D� LITY%,X%(0),Y%(0)
%N�
%X� X%(0),Y%(0),X%(1),Y%(1)
%b� X%(1),Y%(1),DX%,DY%
%l�1,X%(0)-X%(1),Y%(0)-Y%(1)
%v�5,X%(0),Y%(0)
%��
%��
%�
%���elip(PL%,DX%,DY%)
%�� X%(0),Y%(0)
%�� X%(1),Y%(1)
%�� PL%,DX%,DY%
%��
%�
%���tri(PL%,DX%,DY%)
%�� 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%
%��
%�
&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:�
&4
&>"��letgo:�:ȗ X%,Y%,H%:� H%=0:�
&H
&R��killf
&\Ȏ FUSE% �
&f
�spbuf(0)
&pL� 2:� FUST%>0 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�outpic:�quickdrawmain
&z� 3:�closewind(4)
&�i� 4:�closewind(5):� FUST%>0 � �inpic:�paintscale:�eorback:�paintbrush(OX%,OY%):�outpic:�quickdrawmain
&�Y� 5:� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
&�\� 6:� FUST%=1 � �inpic:�eoc:ȓ Ȑ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
&�T� 7:� FUST%=1 � �inpic:�eoc:ȏ X%(0),Y%(0),�dist(OX%,OY%):�outpic:�quickdrawmain
&�W� 8:� FUST%=1 � �inpic:�eoc:ȏ Ȑ X%(0),Y%(0),�dist(OX%,OY%):�outpic:�quickdrawmain
&�L� 9:� FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�outpic:�quickdrawmain
&�B� FUST%=2 � �inpic:�eoc:�tri(5,OX%,OY%):�outpic:�quickdrawmain
&�M� 10:� FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�outpic:�quickdrawmain
&�C� FUST%=2 � �inpic:�eoc:�tri(85,OX%,OY%):�outpic:�quickdrawmain
&�M� 11:� FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�outpic:�quickdrawmain
&�E� FUST%=2 � �inpic:�eoc:�elip(&C5,OX%,OY%):�outpic:�quickdrawmain
&�M� 12:� FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�outpic:�quickdrawmain
&�E� FUST%=2 � �inpic:�eoc:�elip(&CD,OX%,OY%):�outpic:�quickdrawmain
'M� 13:� FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�outpic:�quickdrawmain
'E� FUST%=2 � �inpic:�eoc:�para(0,0,OX%,OY%):�outpic:�quickdrawmain
'M� 14:� FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�outpic:�quickdrawmain
'$E� FUST%=2 � �inpic:�eoc:�para(0,1,OX%,OY%):�outpic:�quickdrawmain
'.M� 15:� FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�outpic:�quickdrawmain
'8E� FUST%=2 � �inpic:�eoc:�elip(&A5,OX%,OY%):�outpic:�quickdrawmain
'BM� 16:� FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�outpic:�quickdrawmain
'LE� FUST%=2 � �inpic:�eoc:�elip(&B5,OX%,OY%):�outpic:�quickdrawmain
'VM� 17:� FUST%=1 � �inpic:�eoc:� X%(0),Y%(0),OX%,OY%:�outpic:�quickdrawmain
'`E� FUST%=2 � �inpic:�eoc:�elip(&AD,OX%,OY%):�outpic:�quickdrawmain
'jh� 18:�closewind(8):� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
'tG� FUST%=2 � �inpic:�pgrab(OX%,OY%,3):�outpic:�quickdrawmain:�spinit
'~h� 19:�closewind(8):� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
'�G� FUST%=2 � �inpic:�pgrab(OX%,OY%,3):�outpic:�quickdrawmain:�spinit
'�Z� 20:� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
'�Z� 21:� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
'�Z� 22:� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
'��� 23:�closewind(8):� FUCO%=1 � FUST%=1 � �inpic:�eoc:ȓ X%(1),Y%(1),X%(2)-X%(1),Y%(2)-Y%(1):ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain:� �TXi
'�`� FUCO%=1 � �inpic:�eoc:ȓ X%(1),Y%(1),X%(2)-X%(1),Y%(2)-Y%(1):�outpic:�quickdrawmain:� �TXi
'�U� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
'�� 25:�inpic
'��eoc
'�Ȏ FUCO% �
'�� 2:� X%(1),Y%(1),X%,Y%
'�5� 3:� X%(1),Y%(1),X%(2),Y%(2):� X%(2),Y%(2),X%,Y%
( c� 4:� X%(1),Y%(1),X%(2),Y%(2):� X%(2),Y%(2),X%(3),Y%(3):� X%(3),Y%(3),X%,Y%:� X%,Y%,X%(1),Y%(1)
(
o� 5:� X%(1),Y%(1),X%(2),Y%(2):� X%(2),Y%(2),X%(3),Y%(3):� X%(3),Y%(3),X%(4),Y%(4):� X%(4),Y%(4),X%(1),Y%(1)
(�� 6:� X%(1),Y%(1),X%(2),Y%(2):� X%(2),Y%(2),X%(3),Y%(3):� X%(3),Y%(3),X%(4),Y%(4):� X%(4),Y%(4),X%(1),Y%(1):� X%(5),Y%(5),X%,Y%
(�� 7:� X%(1),Y%(1),X%(2),Y%(2):� X%(2),Y%(2),X%(3),Y%(3):� X%(3),Y%(3),X%(4),Y%(4):� X%(4),Y%(4),X%(1),Y%(1):� X%(5),Y%(5),X%(6),Y%(6):� X%(6),Y%(6),X%,Y%
((�� 8:� X%(1),Y%(1),X%(2),Y%(2):� X%(2),Y%(2),X%(3),Y%(3):� X%(3),Y%(3),X%(4),Y%(4):� X%(4),Y%(4),X%(1),Y%(1):� X%(5),Y%(5),X%(6),Y%(6):� X%(6),Y%(6),X%(7),Y%(7):� X%(7),Y%(7),X%,Y%:� X%(5),Y%(5),X%,Y%
(2�
(<)FUCO%=1:�outpic:�quickdrawmain:�letgo
(FZ� 27:� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
(PZ� 28:� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
(Zk� 29:�closewind(5):� FUST%>0 � �inpic:�paintscale2:�eorback:�paintbrush(OX%,OY%):�outpic:�quickdrawmain
(dk� 30:�closewind(5):� FUST%>0 � �inpic:�paintscale2:�eorback:�paintbrush(OX%,OY%):�outpic:�quickdrawmain
(nN� 32:�restpic:�forcedrawmain:�closewind(14):�spinit:� FONT%<>0 � �losefont
(x� 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)
(�Q� 36:� FUST%<>0 � �inpic:�eoc:ȓ OX%,OY%,FRW%*2,FRH%*4:�outpic:�quickdrawmain
(�� 37:�spinit:�closewind(20)
(�q� 38:�closewind(21):�spinit:� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
(�q� 39:�closewind(22):�spinit:� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
(�q� 40:�closewind(23):�spinit:� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
)q� 41:�closewind(24):�spinit:� FUST%=1 � �inpic:�eoc:ȓ X%(0),Y%(0),OX%-X%(0),OY%-Y%(0):�outpic:�quickdrawmain
)?� FUST%=3 � �inpic:�protbox(OX%,OY%):�outpic:�quickdrawmain
)�
)"�
),
)6��eoc:�3,63 Ȝ 192:�
)@
)J��eorback:�3,191 Ȝ 192:�
)T
)^
��pickcol
)h4BLK%!8=HAND%(3):ș "Wimp_GetWindowState",,BLK%+8
)r0XOF%=(!BLK%)-(BLK%!12):� XOF%>766 � XOF%=766
)|1YOF%=(BLK%!4)-(BLK%!16):� YOF%>220 � YOF%=220
)�d� MOUB%=4 � COL%=(XOF% � 24)+((YOF% � 28)*32) � � MOUB%=1 � �trasp((XOF% � 24)+((YOF% � 28)*32))
)��forcedrawpal(PAL%)
)��
)�
)���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%
*&5Y%=936-((((BLK%!24)-(BLK%!4))-(BLK%!32)) � ZOOM%)
*0� X%<0 � X%=0
*:� X%>1232 � X%=1232
*D� Y%<0 � Y%=0
*N� Y%>934 � Y%=934
*X� � GRLO% � �
*bXOF%=(GRWI%-GRBX%)*2
*lYOF%=(GRHE%-GRBY%)*4
*vX%+=XOF%:Y%+=YOF%
*�'X%=-XOF%+((X% � (2*GRWI%))*2*GRWI%)
*�'Y%=-YOF%+((Y% � (4*GRHE%))*4*GRHE%)
*�(� VDU4:PRINTTAB(0,1);X%,Y%,XOF%,YOF%
*��
*�
*���getor
*�WOX%=BLK%!4-BLK%!20
*�&WOY%=(BLK%!16-BLK%!24)-(936*ZOOM%)
*��
*�
*���getbrushor
*�WOX%=BLK%!4-BLK%!20
*�WOY%=(BLK%!16-BLK%!24)-260
+�
+
+��getpatfillor
+ WOX%=BLK%!4-BLK%!20
+*WOY%=(BLK%!16-BLK%!24)-108
+4�
+>
+H��getedbruor
+RWOX%=BLK%!4-BLK%!20
+\WOY%=(BLK%!16-BLK%!24)-640
+f�
+p
+z��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%)
+�2!BLK%=HAND%(WH%):ș "Wimp_GetWindowInfo",,BLK%
+�)BLK%!28=-1:ș "Wimp_OpenWindow",,BLK%
+��
+�
+���closewind(WH%)
,0!BLK%=HAND%(WH%):ș "Wimp_CloseWindow",,BLK%
,�
,
,$��opmain
,.ș "Wimp_OpenWindow",,BLK%
,8�
,B
,L��clmain:MOP%=�
,Vș "Wimp_CloseWindow",,BLK%
,`�
,j
,t��airnoz
,~0H%=-1:�L%=9 � 15:� �high(4,L%) � H%=L%:L%=15
,��
,�Ȏ H% �
,�� 9:XR=1:YR=.25
,�� 10:XR=1:YR=.5
,�� 11:XR=1:YR=.75
,�� 12:XR=1:YR=1
,�� 13:XR=.75:YR=1
,�� 14:XR=.5:YR=1
,�� 15:XR=.25:YR=1
,��
,��
,�
- ��paintscale
-
!SCALE%=BXM%
-SCALE%!4=BYM%
-SCALE%!8=BXD%
-(SCALE%!12=BYD%
-2XR=BXM%/BXD%
-<YR=BYM%/BYD%
-F�
-P
-Z��paintscale2
-d
!SCALE%=1
-nSCALE%!4=1
-xSCALE%!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%):� �Tjp
-ܚ� MOUB%=4 � �picpos:�inpic:CO%=�X%,Y%):TI%=Ȝ(X%,Y%):�3,63 Ȝ 192:�69,400,400:�69,400,400:�outpic:COL%=�findpalent(CO%,TI%):�forcedrawpal(PAL%):� �Tjp
-�?� 0:�picpos:�inpic:�setcol:�69,X%,Y%:�outpic:�quickdrawmain
-� � 3:�airnoz:� H%=-1 � � �Tjp
-���picpos:�inpic:�setcol:D%=�(�geticon(4,1)):R%=�(�geticon(4,3)):�L%=1 � D%:A=�(3600)/10:�69,�(�(A))*�((R%*XR))+X%,�(�(A))*�((R%*YR))+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
.6� 24:� MOUB%<>4 � � �Tjp
.@��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.")
.J2�trace(X%,Y%,TCO%,TTI%):�outpic:�quickdrawmain
.T� 26:� MOUB%<>4 � �
.^G�inpic:�23,17,4,1,0|:�L%=1 � 4:�23,L%+1:�K%=1 � 8:� ECF%(K%,L%):�:�
.ht�picpos:�0,�X%,Y%)+128 Ȝ Ȝ(X%,Y%):�setcol:ș "Hourglass_On":Ȑ X%,Y%:ș "Hourglass_Off":�outpic:�quickdrawmain
.r$� 29:�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%
.�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
/08OX%=X%:OY%=Y%:FUST%=1:�eorback:�paintbrush2(OX%,OY%)
/:�outpic:�quickdrawmain
/D!� 31:� MOUB%<>4 � GRTY%=1 � �
/N-�spinit:�spbuf(145*1024):� Q% � �spbuferr
/X�backuppic
/bX�inbackup:�picpos:FBC%=�X%,Y%):FBT%=Ȝ(X%,Y%):�0,FBC%+128 Ȝ FBT%:FUT%=(FBC%+1) � 64
/l9�0,FUT% Ȝ FBT%:ș "Hourglass_On":Ȑ X%,Y%:�outbackup
/v-A%=VARS:B%=PIC%:C%=SPBUF%:� findchangebox
/�FMINX%=(!VARS)*2
/�FMINY%=(VARS!4)*4
/�FMAXX%=(VARS!8)*2
/�FMAXY%=(VARS!12)*4
/� �fill
/�ș "Hourglass_Off"
/�� 37:� MOUB%<>4 � �
/�-�spinit:�spbuf(145*1024):� Q% � �spbuferr
/��backuppic
/�X�inbackup:�picpos:FBC%=�X%,Y%):FBT%=Ȝ(X%,Y%):�0,FBC%+128 Ȝ FBT%:FUT%=(FBC%+1) � 64
/�9�0,FUT% Ȝ FBT%:ș "Hourglass_On":Ȑ X%,Y%:�outbackup
/�-A%=VARS:B%=PIC%:C%=SPBUF%:� findchangebox
/�KFMINX%=(!VARS)*2:FMINY%=(VARS!4)*4:FMAXX%=(VARS!8)*2:FMAXY%=(VARS!12)*4
0:VARS!4=PIC%:VARS!8=SPBUF%:VARS!12=PFILLS%:VARS!16=CPF%
0
� patfill
0ș"Hourglass_Off"
0 �spinit:�forcedrawmain
0*�
04�
0>
0H
��fill
0RNOS%=��geticon(13,44)
0\NOF%=GRFN%
0f ET%=0
0p� �high(13,55) � ET%=1
0z� �high(13,56) � ET%=2
0�� �high(13,57) � ET%=3
0�� �high(13,58) � ET%=4
0�FIT%=-1
0�� �high(13,22) � FIT%=1
0�� �high(13,23) � FIT%=2
0�� �high(13,64) � FIT%=3
0�� �high(13,65) � FIT%=4
0�� �high(13,24) � FIT%=5
0�� �high(13,25) � FIT%=6
0�� ET%=1 � ET%=2 � FIT%=1
0�� ET%=3 � ET%=4 � FIT%=4
0�E� FIT%=-1 � �spinit:�message(0,"You must choose a type of fill.")
0�
Ȏ FIT% �
13� 1:FIW%=FMAXX%-FMINX%:FIFC%=0:LAFC%=255:FID%=1
14� 2:FIW%=FMAXX%-FMINX%:FIFC%=255:LAFC%=0:FID%=-1
13� 4:FIW%=FMAXY%-FMINY%:FIFC%=0:LAFC%=255:FID%=1
1$4� 3:FIW%=FMAXY%-FMINY%:FIFC%=255:LAFC%=0:FID%=-1
1. � 5:FIFC%=0:LAFC%=255:FID%=1
18!� 6:FIFC%=255:LAFC%=0:FID%=-1
1B�
1L� FIT%=5 � FIT%=6 �
1V?� (FMAXX%-X%)>(X%-FMINX%) � XOF%=FMAXX%-X% � XOF%=X%-FMINX%
1`?� (FMAXY%-Y%)>(Y%-FMINY%) � YOF%=FMAXY%-Y% � YOF%=Y%-FMINY%
1jFIW%=�((XOF%^2)+(YOF%^2))
1t�
1~1CPP%=(255<<8) � FIW%:CPS%=(255<<8) � (NOS%-1)
1�HI%=IO%:�L%=0 � 15:?I%=GRFI%(L%,0,NOF%):I%?1=GRFI%(L%,1,NOF%):I%+=2:�
1�6!VARS=PIC%:� GRTY%=0 � VARS!4=SPBUF% � VARS!4=PIC%
1��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%
1�VARS!68=RAND%:VARS!72=0
1�VARS!76=��geticon(13,39)
1�*� �high(13,54) � VARS!80=1 � VARS!80=0
1�9VARS!84=ET%:VARS!88=TRASP%:VARS!92=GRTY%:VARS!96=BTC%
1�'�L%=0 � 4092 � 4:RAND%!L%=�(CPS%):�
1�A%=VARS
1�� graduatedfill
1��spinit:�forcedrawmain
1��
2
2
��hg:ș "Hourglass_Smash":�
2
2��swapcorns
2(� X%(0)>OX% � Ȕ X%(0),OX%
22� Y%(0)>OY% � Ȕ Y%(0),OY%
2<�
2F
2PEݤsamecol(x1%,y1%,col%,tin%):=(�x1%,y1%)=col% � Ȝ(x1%,y1%)=tin%)
2Z
2d5��l(x1%,y1%,x2%,y2%):�4,x1%,y1%:� LITY%,x2%,y2%:�
2n
2xg��r(x1%,y1%,x2%,y2%):�4,x1%,y1%:� LITY%-4,x2%,0:� LITY%-4,0,y2%:� LITY%-4,-x2%,0:� LITY%-4,0,-y2%:�
2�
2���trace(X%,Y%,TCO%,TTI%)
2�ș "Hourglass_On"
2�� dir%,x%,px%,py%
2�g� �samecol(X%,Y%,TCO%,TTI%) � �message(0,"Cannot trace from an adjacent pixel of the same colour.")
2�px%=X%:py%=Y%
2�
dir%=3
2��incdir
2��
2�C� � �samecol(x%,y%,TCO%,TTI%) � �69,x%,y%:px%=x%:py%=y%:�decdir
2��incdir
2�� x%=X% � y%=Y%
2�
�69,x%,y%
3ș "Hourglass_Off"
3�
3
3"��incdir
3,dir%=(dir%+1)�4
36
Ȏ dir% �
3@� 0:x%=px%-2:y%=py%
3J� 1:x%=px%:y%=py%+4
3T� 2:x%=px%+2:y%=py%
3^� 3:x%=px%:y%=py%-4
3h�
3r�
3|
3���decdir
3�dir%=(dir%+2)�4
3��
3�
3�ݤfindpalent(CO%,TI%)
3�=CTT%?((CO%*4)+(TI% � 64))
3�
3�>��setcol:� USE%,PALTAB%?(COL%*2) Ȝ PALTAB%?((COL%*2)+1):�
3�
3�H��setbackcol:� USE%,(PALTAB%?(COL%*2))+128 Ȝ PALTAB%?((COL%*2)+1):�
3�
3���col(C%,T%,U%)
3�ș&35,-1,9 � ,,BP%
4� BP%=3 � �U%,C% Ȝ T%:�
4+R%=((C% � %11)*4)+(T% � 64):R%+=(R%<<4)
42G%=(((C% � %1100)>>2)*4)+(T% � 64):G%+=(G%<<4)
4&4B%=(((C% � %110000)>>4)*4)+(T% � 64):B%+=(B%<<4)
40>ș "ColourTrans_SetGCOL",((B%<<24)+(G%<<16)+(R%<<8)),,,,U%
4:�
4D
4N��anticol(C%,T%,U%)
4X+R%=((C% � %11)*4)+(T% � 64):R%+=(R%<<4)
4b2G%=(((C% � %1100)>>2)*4)+(T% � 64):G%+=(G%<<4)
4l4B%=(((C% � %110000)>>4)*4)+(T% � 64):B%+=(B%<<4)
4vNș "ColourTrans_ReturnOppGCOLForMode",((B%<<24)+(G%<<16)+(R%<<8)),15 � GC%
4�#� U%,(GC%>>2) Ȝ (GC% � %11)*64
4��
4�
4�
��gridcol
4��col(GRCO%,GRTI%,0)
4��
4�
4���makerr
4�ș "Wimp_DragBox",,0
4�!BLK%=�
4�ER=�
4�
Ȏ � �
4�4� 222:$(BLK%+4)="File cannot be found"+�(0):ER=�
5
5�$(BLK%+4)="Archrome has suffered a serious internal error ("+ß+"/"+Þ+") You should save your work and re-start as soon as possible."+�(0)
5�
5 +ș "Wimp_ReportError",BLK%,1,"Archrome"
5*
�action:�
54�
5>
5H��message(M%,M$):�outpic
5R[ș "Wimp_DragBox",,0:!BLK%=M%:$(BLK%+4)=M$+�(0):ș "Wimp_ReportError",BLK%,1,"Archrome"
5\�forcedrawmain
5f
�action:�
5p�
5z
5���mouse
5�FMOUX%=!BLK%:MOUY%=BLK%!4:MOUB%=BLK%!8:MOUH%=BLK%!12:MOUIC%=BLK%!16
5�Ȏ MOUB% �
5�� 4,1:Ȏ MOUH% �
5�� -2:�openmain
5�$� HAND%(0):� BLK%!16=2 � �saveok
5�*� HAND%(7):� BLK%!16=2 � �spritesaveok
5�� HAND%(2):�picclick
5�� HAND%(3):�pickcol
5�� HAND%(4):�airbclick
5�� HAND%(5):�brushclick
5�� HAND%(6):�gridclick
5�� HAND%(8):�grabclick
6� HAND%(10):�linepatclick
6� HAND%(11):�ecfclick
6� HAND%(12):�edbruclick
6$� HAND%(13):�fillclick
6.� HAND%(14):�textclick
68� HAND%(15):�tbackclick
6B� HAND%(16):�tparclick
6L� HAND%(17):�fillcontclick
6V� HAND%(18):�colrepclick
6`� HAND%(19):�frameclick
6j� HAND%(20):�patfillclick
6t� HAND%(21):�rgbcontclick
6~� HAND%(22):�greyscaleclick
6�� HAND%(23):�pixelateclick
6�� HAND%(24):�rotateclick
6��
6�=� 2:� MOUH%=-2 � �iconmenu � � MOUH%=HAND%(2) � �windmenu
6�1� 16,64:� MOUH%=HAND%(0) � DRAG%=0:�startdrag
6�)� MOUH%=HAND%(7) � DRAG%=7:�startdrag
6��
6��
6�
6���rotateclick
6�� MOUIC%<>1 � MOUIC%<3 � �
6�)� FUST%>=2 � �inpic:�protbox(OX%,OY%)
7 -� MOUIC%=1 � ROT%-=1:� ROT%<0 � ROT%+=360
7
"� MOUIC%=3 � ROT%=(ROT%+1)�360
7.� MOUIC%=4 � ROT%-=10:� ROT%<0 � ROT%+=360
7#� MOUIC%=5 � ROT%=(ROT%+10)�360
7(9� FUST%>=2 � �protbox(OX%,OY%):�outpic:�quickdrawmain
72�seticon(24,2,�ROT%)
7<�
7F
7P��rgbcontclick
7Z4RP%=�perc(21,4):GP%=�perc(21,7):BP%=�perc(21,10)
7dIRP%=RP%:IGP%=GP%:IBP%=BP%
7n'� MOUIC%=3 � RP%-=1:� RP%<0 � RP%=0
7x+� MOUIC%=5 � RP%+=1:� RP%>200 � RP%=200
7�'� MOUIC%=6 � GP%-=1:� GP%<0 � GP%=0
7�+� MOUIC%=8 � GP%+=1:� GP%>200 � GP%=200
7�'� MOUIC%=9 � BP%-=1:� BP%<0 � BP%=0
7�,� MOUIC%=11 � BP%+=1:� BP%>200 � BP%=200
7�+� RP%<>IRP% � �seticon(21,4,�(RP%)+"%")
7�+� GP%<>IGP% � �seticon(21,7,�(GP%)+"%")
7�,� BP%<>IBP% � �seticon(21,10,�(BP%)+"%")
7��
7�
7���greyscaleclick
7�M�arrows(22,3,5,4,0,9,1):�arrows(22,6,8,7,0,9,1):�arrows(22,9,11,10,0,9,1)
7��
7�
8��pixelateclick
87�arrows(23,2,4,3,1,100,1):�arrows(23,5,7,6,1,100,1)
8�
8"
8,��frameclick
867�arrows(19,5,7,3,1,618,1):�arrows(19,6,8,4,1,234,1)
8@� MOUIC%<>2 � �
8J
�killf
8T$V%=��geticon(19,3):� V%<1 � V%=1
8^� V%>618 � V%=618
8h�seticon(19,3,�V%)
8r$W%=��geticon(19,4):� W%<1 � W%=1
8|� W%>234 � W%=618
8��seticon(19,4,�W%)
8�OFRW%=V%+1:FRH%=W%+1:FUSE%=36:FUST%=0:�help:�windname(2,PIC$+" [Set frame]")
8�� MOUB%=4 � �menoff
8��
8�
8���colrepclick
8� MOUIC%=3 � ș "Hourglass_On":�L%=0 � 22596 � 4:SPBUF%!L%=OPAL%!L%:�:�L%=0 � 255:REPS%?L%=L%:�:ș "Hourglass_Off":�forcedrawcolrep:�
8�5BLK%!8=HAND%(18):ș "Wimp_GetWindowState",,BLK%+8
8�<XOF%=(!BLK%)-((BLK%!12)-(BLK%!28)):� XOF%>766 � XOF%=766
8�CYOF%=(BLK%!4)-(((BLK%!24)-(BLK%!32))-556):� YOF%>550 � YOF%=550
8�� VDU4:PRINT XOF%,YOF%
8�E� YOF%<=220 � SREP%=(XOF% � 24)+((YOF% � 28)*32):�forcedrawcolrep
8�� YOF%>=290 � YOF%<514 �
9�YOF%-=290: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)
9Bȓ Ȑ FX%,FY%,20,20:�outsprite:REPS%?SREP%=C%:�forcedrawcolrep
9�
9&�
90
9:'��arrows(W%,DI%,UI%,TI%,LV%,UV%,I%)
9DV%=��geticon(W%,TI%):OV%=V%
9N+� MOUIC%=DI% � V%-=I%:� V%<LV% � V%=LV%
9X+� MOUIC%=UI% � V%+=I%:� V%>UV% � V%=UV%
9b&� V%<>OV% � �seticon(W%,TI%,�(V%))
9l�
9v
9���tparclick
9���arrows(16,6,18,12,0,1024,8):�arrows(16,7,19,13,0,999,1):�arrows(16,8,20,14,0,999,1):�arrows(16,9,21,15,0,999,1):�arrows(16,10,22,16,0,999,1):�arrows(16,11,23,17,0,999,1)
9��� MOUIC%=24 � ș "Font_SetFontMax",(��geticon(16,12))*1024,(��geticon(16,13))*1152,(��geticon(16,14))*1152,(��geticon(16,15))*1152,(��geticon(16,16))*1152,(��geticon(16,17))*1152
9�#� MOUIC%=24 � MOUB%=4 � �menoff
9�� MOUIC%=25 �
9��("Configure FontMax "+�geticon(16,12)+"K"):�("Configure FontMax1 "+�geticon(16,13)):�("Configure FontMax2 "+�geticon(16,14)):�("Configure FontMax3 "+�geticon(16,15)):�("Configure FontMax4 "+�geticon(16,16))
9�,�("Configure FontMax5 "+�geticon(16,17))
9��
9��
9�
9���losefont
9�9� FONT%<>0 � �inpic:ș "Font_LoseFont",FHAND%:�outpic
9��
:
:
��getfont
:,� ��geticon(14,4)<6 � �seticon(14,4,"6")
: ,� ��geticon(14,5)<6 � �seticon(14,5,"6")
:*1FONTX%=��geticon(14,4):FONTY%=��geticon(14,5)
:+1� VDU4:PRINT'FONT%,FO$,FONTX%,FONTY%," 14900"
:, � END
:4T� FONT%<>0 � �inpic:ș "Font_FindFont",,FO$,FONTX%*16,FONTY%*16 � FHAND%:�outpic
:>�
:H
:R
��restpic
:\
�inpic
:fș&2E,290,SPBUF%,"PIC"
:p�outpic
:z�
:�
:���textclick
:�� MOUIC%<>6 � � �tvz
:�*V%=��geticon(14,4):V%-=1:� V%<6 � V%=6
:��seticon(14,4,�V%)
:�� MOUIC%<>7 � � �dTz
:�.V%=��geticon(14,4):V%+=1:� V%>999 � V%=999
:��seticon(14,4,�V%)
:�� MOUIC%<>8 � � �drz
:�*V%=��geticon(14,5):V%-=1:� V%<6 � V%=6
:��seticon(14,5,�V%)
:�� MOUIC%<>9 � � �TP{
:�.V%=��geticon(14,5):V%+=1:� V%>999 � V%=999
;�seticon(14,5,�V%)
;� MOUIC%<>12 � �
; � VDU4:PRINT FONT%,FUST%,FO$
;� FONT%<>0 �
;$2� FUST%<>0 � �restpic:�losefont:�forcedrawmain
;.�getfont
;/� GOTO 15230
;80TEXT$=�geticon(14,11):� TEXT$="" � TEXT$=" "
;BDFCOL%=PALTAB%?(COL%*2):FTIN%=PALTAB%?((COL%*2)+1):FTIN%=FTIN%>>2
;LqFPAL%=((((FCOL% � %11)<<6)+FTIN%)<<8)+((((FCOL% � %1100)<<4)+FTIN%)<<16)+((((FCOL% � %110000)<<2)+FTIN%)<<24)
;VHFCOL%=PALTAB%?(FONTB%*2):FTIN%=PALTAB%?((FONTB%*2)+1):FTIN%=FTIN%>>2
;`qBPAL%=((((FCOL% � %11)<<6)+FTIN%)<<8)+((((FCOL% � %1100)<<4)+FTIN%)<<16)+((((FCOL% � %110000)<<2)+FTIN%)<<24)
;a� GOTO 15230
;jO�inpic:ș "ColourTrans_SetFontColours",FHAND%,BPAL%,FPAL%,14:�outpic:EFM%=�
;tFUST%=1:OX%=-1:OY%=-1
;~�
;�(� FUST%<>0 � �restpic:�forcedrawmain
;�0TEXT$=�geticon(14,11):� TEXT$="" � TEXT$=" "
;�1FUST%=1:OX%=-1:OY%=-1:TCOL%=COL%:TBAK%=FONTB%
;�,� ��geticon(14,4)<1 � �seticon(14,4,"1")
;�,� ��geticon(14,5)<1 � �seticon(14,5,"1")
;�1FONTX%=��geticon(14,4):FONTY%=��geticon(14,5)
;�!IO%=FONTX%:IO%!4=FONTY%
;�IO%!8=8:IO%!12=8
;��
;��
;�
;���ostext(TX%,TY%)
<