Home » Archimedes archive » Acorn User » AU 1995-01.adf » !Labeller_Label » !Label/!RunImage
!Label/!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 » Acorn User » AU 1995-01.adf » !Labeller_Label |
| Filename: | !Label/!RunImage |
| Read OK: | ✔ |
| File size: | 9DB5 bytes |
| Load address: | 0000 |
| Exec address: | 0000 |
File contents
10REM > <Label$Dir>.!RunImage
20PROCinitiate
30ON ERROR PROCerror
40
50WHILE NOTexit
60PROCpoll(1+dragging%)
70ENDWHILE
80PROCclosedown
90
100DEF PROCinitiate
110changed%=FALSE
120lft%=&50
130PROCwimpinit("Label printing","!label","Label",7,2000)
140PROCwindowinfo(w%(tools%))
150toolsheight%=wh%
160toolswidth%=ww%
170maxwidth%=40:maxheight%=8
180bsize%=maxwidth%*maxheight%
190maxl%=64
200tsize%=bsize%*maxl%
210DIM char% tsize%,style% tsize%
220bold=1:italic=2:ulined=4:super=8:sub=16:dw=32
230width%=maxwidth%:height%=maxheight%
240dragging%=FALSE
250ftype%=-1
260font%=0
270editmode%=0
280DIM set%(4)
290DIM sizedata% 4
300?sizedata%=7
310sizedata%?1=8
320sizedata%?2=255
330DIM printdata% 4
340?printdata%=1
350printdata%?1=6
360printdata%?2=8
370printdata%?3=255
380PROCresetsettings
390PROCloadsettings
400ls%=255
410PROCsetflags(0)
420width%=maxwidth%:height%=maxheight%
430PROCinitprinter
440IF autoload$<>"" THEN
450 d%=FNload50(autoload$)
460ELSE
470 IF set%(4) THEN d%=FNload50(setfile$)
480ENDIF
490PROCselecticon(w%(tools%),14,(editmode%=0))
500ENDPROC
510
520DEF PROCedittitle
530IF changed% THEN a$=" *" ELSE a$=""
540PROCnewtitle(w%(edit%),FNlastbit(filename$)+" Label"+a$)
550ENDPROC
560
570DEF PROCchanged
580changed%=TRUE
590PROCedittitle
600ENDPROC
610
620DEF PROCinitprinter
630DIM pc$(5,1), pd$(5)
640pd$()="bold","italic","underline","super","sub","double"
650file=OPENIN(dir$+".PrintCodes")
660FOR p%=0 TO 5
670 pc$(p%,1)=FNreadcode(pd$(p%))
680 pc$(p%,0)=FNreadcode("c"+pd$(p%))
690NEXT p%
700header$=FNreadcode("header")
710footer$=FNreadcode("footer")
720newline$=FNreadcode("newline")
730CLOSE#file
740ENDPROC
750
760DEF FNreadcode(key$)
770found$=""
780PTR#file=0
790WHILE NOTEOF#file
800 read$=GET$#file
810 i%=INSTR(read$,":")
820 IF i% THEN
830 IF LEFT$(read$,i%-1)=key$ THEN
840 read$=MID$(read$,i%+1)
850 found$=""
860 WHILE LENread$
870 IF LEFT$(read$,1)="|" THEN
880 found$+=CHR$(ASC(MID$(read$,2,1))-64)
890 read$=MID$(read$,3)
900 ELSE
910 found$+=LEFT$(read$,1)
920 read$=MID$(read$,2)
930 ENDIF
940 ENDWHILE
950 ENDIF
960 ENDIF
970ENDWHILE
980=found$
990
1000DEF PROCinitwindows
1010info%=FNinfowindow("Label","Label printer","Barry Wickett","1.01 (10-Dec-1993")
1020PROCiconbarmenu("Label,Info>,w%(info%),Quit")
1030size%=FNwindow("size","size",0,0)
1040save%=FNsavebox(lft%,"Untitled")
1050print%=FNwindow("print","print",0,%100)
1060settings%=FNwindow("settings","settings",0,0)
1070menu3%=FNmenu("Move,Up,Down,Left,Right")
1080menu0%=FNmenu("Label,Size>-,w%(size%),Add,Delete,Wipe-,Move>,menu3%")
1090stylemenu%=FNmenu("Style,Bold,Italic,Underlined,Superscript,Subscript,Double width")
1100menu1%=FNmenu("Misc,Save>-,w%(save%),Print>-,w%(print%),Settings...")
1110menu2%=FNmenu("Justify,Left,Centre,Right")
1120edit%=FNwindow("edit","edit",FNmenu("Label,Misc>-,menu1%,Label>,menu0%,Style>,stylemenu%,Justify>,menu2%"),%111)
1130tools%=FNwindow("tools","tools",0,0)
1140multiprint%=FNwindow("printing","printing",0,0)
1150ENDPROC
1160
1170DEF FNpremenuedit
1180FOR b%=0 TO 5
1190 PROCtick(stylemenu%,b%,(cstyle%AND(1<<b%)))
1200NEXT b%
1210PROCgetcaret
1220IF cwind%=w%(edit%) OR selected% THEN shade%=FALSE ELSE shade%=TRUE
1230PROCshademenu(menu%(edit%),2,shade%)
1240PROCshademenu(menu%(edit%),3,(cwind%<>w%(edit%)))
1250PROCseticontext(w%(size%),7,STR$(width%))
1260PROCseticontext(w%(size%),8,STR$(height%))
1270d%=FNpremenuprint
1280d%=FNopensave
1290=0
1300
1310DEF FNopensave
1320PROCseticontext(w%(save%),2,filename$)
1330=0
1340
1350DEF FNpremenuprint
1360PROCseticontext(w%(print%),1,"1")
1370PROCseticontext(w%(print%),6,STR$(labels%))
1380PROCseticontext(w%(print%),8,"1")
1390=0
1400
1410DEF FNopenedit
1420PROCwindowinfo(w%(edit%))
1430!blk%=w%(tools%)
1440blk%!8-=toolsheight%+pixelh%
1450blk%!12=blk%!4+toolswidth%
1460blk%!16=blk%!8+toolsheight%
1470blk%!20=0
1480blk%!24=0
1490PROCopenwindow
1500=0
1510
1520DEF FNcloseedit
1530IF changed% THEN
1540 CASE FNquestion("File has been edited.","Save","Discard","Cancel") OF
1550 WHEN 1 : PROCopenwindowasmenu(w%(save%))
1560 WHEN 2 : changed%=FALSE
1570 ENDCASE
1580ENDIF
1590IF NOTchanged% THEN PROCclosewindow(w%(tools%))
1600=NOTchanged%
1610
1620DEF FNkeyedit
1630taken=TRUE
1640CASE TRUE OF
1650 WHEN key%=127 : PROCdeletechar
1660 WHEN key%=&18C : IF cx%>0 THEN PROCnewpos(cx%-1+(char%?FNdp(cx%-1,cy%)=0),cy%)
1670 WHEN key%=&18D : IF cx%<width% THEN PROCnewpos(cx%+1,cy%)
1680 WHEN key%=&18E : IF cy%<height%-1 THEN PROCnewpos(cx%,cy%+1)
1690 WHEN key%=&18F : IF cy%>0 THEN PROCnewpos(cx%,cy%-1)
1700 WHEN key%=&19C OR key%=&1AC : PROCnewpos(0,cy%)
1710 WHEN key%=&19D OR key%=&1AD : PROCnewpos(width%,cy%)
1720 WHEN key%=&19E OR key%=&1AE : PROCnewpos(cx%,height%-1)
1730 WHEN key%=&19F OR key%=&1AF : PROCnewpos(cx%,0)
1740 WHEN key%=13 : PROCnewpos(0,cy%-(cy%<height%-1))
1750 WHEN key%>=32 AND key%<=255 : PROCaddchar
1760OTHERWISE
1770 taken=FALSE
1780ENDCASE
1790=taken
1800
1810DEF PROCdeletechar
1820IF cx%>0 THEN
1830 ocx%=cx%
1840 PROCchanged
1850 cx%-=1
1860 char%?FNdp(cx%,cy%)=32
1870 IF style%?FNdp(cx%,cy%)ANDdw THEN
1880 style%?FNdp(cx%,cy%)=0
1890 IF editmode%>0 THEN PROCredochar(cx%,cy%)
1900 cx%-=1
1910 char%?FNdp(cx%,cy%)=32
1920 ENDIF
1930 style%?FNdp(cx%,cy%)=0
1940 IF editmode%=0 THEN
1950 endline%=ocx%
1960 tx%=cx%
1970 WHILE tx%<width%
1980 IF ocx%<width% THEN
1990 tc%=char%?FNdp(ocx%,cy%)
2000 ts%=style%?FNdp(ocx%,cy%)
2010 ELSE
2020 tc%=32
2030 ts%=0
2040 ENDIF
2050 IF tc%<>32 OR ts%<>0 THEN endline%=ocx%
2060 char%?FNdp(tx%,cy%)=tc%
2070 style%?FNdp(tx%,cy%)=ts%
2080 tx%+=1
2090 ocx%+=1
2100 ENDWHILE
2110 PROCredoline(cy%,cx%,endline%+1)
2120 ELSE
2130 PROCredochar(cx%,cy%)
2140 PROClosefont
2150 ENDIF
2160 PROCnewpos(cx%,cy%)
2170ENDIF
2180ENDPROC
2190
2200DEF PROCaddchar
2210dwflag%=((cstyle%ANDdw)>0)
2220redonext%=((style%?FNdp(cx%,cy%)ANDdw)>0)
2230endline%=-1
2240ocx%=cx%
2250IF cx%<width%+dwflag% THEN
2260 IF editmode%=0 THEN
2270 tx%=width%-1
2280 WHILE tx%>cx%+dwflag%
2290 ps%=FNdp(tx%-1+dwflag%,cy%)
2300 pd%=FNdp(tx%,cy%)
2310 char%?pd%=char%?ps%
2320 style%?pd%=style%?ps%
2330 IF (char%?pd%<>32 OR style%?pd%<>0) AND endline%=-1 THEN endline%=tx%
2340 tx%-=1
2350 ENDWHILE
2360 IF endline%=-1 THEN endline%=cx%
2370 IF style%?FNdp(width%-1,cy%)ANDdw AND char%?FNdp(width%-1,cy%)=0 THEN
2380 char%?FNdp(width%-1,cy%)=0
2390 style%?FNdp(width%-1,cy%)=32
2400 ENDIF
2410 ENDIF
2420 PROCchanged
2430 char%?FNdp(cx%,cy%)=key%
2440 style%?FNdp(cx%,cy%)=cstyle%
2450 IF dwflag% THEN
2460 char%?FNdp(cx%+1,cy%)=0
2470 style%?FNdp(cx%+1,cy%)=cstyle%
2480 ENDIF
2490 IF editmode%=0 THEN
2500 PROCredoline(cy%,cx%,endline%+1)
2510 ELSE
2520 IF redonext% AND NOTdwflag% THEN
2530 style%?FNdp(cx%+1,cy%)=0
2540 char%?FNdp(cx%+1,cy%)=32
2550 PROCredochar(cx%+1,cy%)
2560 ENDIF
2570 PROCredochar(cx%,cy%)
2580 ENDIF
2590 PROCnewpos(cx%+1-dwflag%,cy%)
2600 PROClosefont
2610ENDIF
2620ENDPROC
2630
2640DEF PROCnewpos(newx%,newy%)
2650PROCalignpos(newx%,newy%)
2660cstyle%=style%?FNdp(cx%+(cx%>0),cy%)
2670PROCsetflags(cstyle%)
2680PROCplacecaret
2690ENDPROC
2700
2710DEF PROCalignpos(newx%,newy%)
2720IF char%?FNdp(newx%,newy%)=0 THEN newx%+=1
2730cx%=newx%
2740cy%=newy%
2750ENDPROC
2760
2770DEF PROCredochar(x%,y%)
2780cs%=style%?FNdp(x%,y%)
2790PROCsetfontcolours
2800PROCwindowinfo(w%(edit%))
2810!blk%=w%(edit%)
2820blk%!4=x%*xsize%
2830blk%!8=-(y%+1)*ysize%
2840blk%!12=blk%!4+xsize%
2850blk%!16=blk%!8+ysize%
2860IF cs% AND dw THEN blk%!12+=xsize%
2870SYS"Wimp_UpdateWindow",,blk% TO more%
2880PROCgetfont(cs%)
2890WHILE more%
2900 CLG
2910 PROCdochar(x%,y%)
2920 SYS"Wimp_GetRectangle",,blk% TO more%
2930ENDWHILE
2940ENDPROC
2950
2960DEF PROCdochar(x%,y%)
2970p%=FNdp(x%,y%)
2980c%=char%?p%
2990IF c%=0 THEN
3000 x%-=1
3010 p%=FNdp(x%,y%)
3020 c%=char%?p%
3030ENDIF
3040yoff%=wy%-(y%+1)*ysize%+8
3050IF style%?p% AND super THEN yoff%+=ysize%/2-4
3060IF c%<>32 THEN SYS"Font_Paint",,CHR$(c%),%10100,wx%+x%*xsize%+2,yoff%
3070IF style%?p% AND ulined THEN
3080 SYS"Wimp_SetColour",7
3090 RECTANGLE FILL wx%+x%*xsize%,yoff%-4,(1-((style%?p% AND dw)>0))*xsize%-pixelw%,3
3100ENDIF
3110ENDPROC
3120
3130DEF PROCgetfont(type%)
3140IF type%<>ftype% THEN
3150IF font% THEN PROClosefont
3160font$="Corpus"
3170ys%=14*16
3180xs%=14*16
3190IF type% AND bold THEN font$+=".Bold" ELSE font$+=".Medium"
3200IF type% AND italic THEN font$+=".Oblique"
3210IF type% AND sub THEN ys%=ys%/2
3220IF type% AND super THEN ys%=ys%/2
3230IF type% AND dw THEN xs%=xs%*2
3240SYS"Font_FindFont",,font$,xs%,ys% TO font%
3250SYS"Font_SetFont",font%
3260ftype%=type%
3270ENDIF
3280ENDPROC
3290
3300DEF PROClosefont
3310IF font% THEN SYS"Font_LoseFont",font%
3320font%=0
3330ftype%=-1
3340ENDPROC
3350
3360DEF FNredrawedit
3370minx%=x0%/xsize%
3380miny%=-y1%/ysize%
3390maxx%=x1%/xsize%
3400maxy%=-y0%/ysize%
3410PROCsetfontcolours
3420FOR y%=miny% TO maxy%
3430 FOR x%=minx% TO maxx%
3440 IF x%>=0 AND x%<width% AND y%>=0 AND y%<height% THEN
3450 IF char%?FNdp(x%,y%)<>32 THEN
3460 PROCgetfont(style%?FNdp(x%,y%))
3470 PROCdochar(x%,y%)
3480 ELSE
3490 IF style%?FNdp(x%,y%)ANDulined THEN PROCdochar(x%,y%)
3500 ENDIF
3510 ENDIF
3520 NEXT x%
3530NEXT y%
3540IF selected% THEN PROCinvert(dsx%,dsy%,dex%,dey%)
3550PROClosefont
3560=0
3570
3580DEF FNclicksettings
3590CASE icon% OF
3600 WHEN 6
3610 PROCgetsettings
3620 PROCclosewindow(wind%)
3630 WHEN 7
3640 PROCgetsettings
3650 PROCsavesettings
3660 PROCclosewindow(wind%)
3670 WHEN 8 : PROCresetsettings
3680 WHEN 9 : PROCclosewindow(wind%)
3690 WHEN 12 : PROCshadeicon(wind%,14,NOTFNselected(wind%,icon%))
3700 WHEN 15 : PROCloadsettings
3710ENDCASE
3720=0
3730
3740DEF PROCloadsettings
3750file=OPENIN(dir$+".Settings")
3760FOR i%=0 TO 4
3770 INPUT#file,set%(i%)
3780NEXT i%
3790INPUT#file,setfile$
3800CLOSE#file
3810PROCsetsettings
3820ENDPROC
3830
3840DEF PROCsavesettings
3850file=OPENOUT(dir$+".Settings")
3860FOR i%=0 TO 4
3870 PRINT#file,set%(i%)
3880NEXT i%
3890PRINT#file,setfile$
3900CLOSE#file
3910ENDPROC
3920
3930DEF PROCgetsettings
3940FOR i%=0 TO 3
3950 set%(i%)=FNselected(w%(settings%),i%+2)
3960NEXT i%
3970set%(4)=FNselected(w%(settings%),12)
3980setfile$=FNicontext(w%(settings%),14)
3990beep%=set%(3)
4000ENDPROC
4010
4020DEF FNclickprint
4030CASE TRUE OF
4040 WHEN FNincicon(1,2,3,1,labels%)
4050 WHEN FNincicon(6,5,7,1,labels%)
4060 WHEN FNincicon(8,10,9,1,99)
4070OTHERWISE
4080 IF icon%=12 THEN PROCprint
4090ENDCASE
4100=0
4110
4120DEF PROCprint
4130LOCAL label%,status%
4140print=0
4150status%=1
4160fromlabel%=VALFNicontext(w%(print%),1)
4170tolabel%=VALFNicontext(w%(print%),6)
4180times%=VALFNicontext(w%(print%),8)
4190PROCclosemenu
4200IF fromlabel%>tolabel% OR tolabel%>labels% THEN
4210 PROCreport("Bad from/to parameters, print cancelled.")
4220ELSE
4230 pstyle%=0
4240 print=OPENOUT("Printer:")
4250 printing%=TRUE
4260 BPUT#print,header$;
4270 time%=1:label%=fromlabel%:y%=0
4280 IF FNselected(w%(print%),13) THEN
4290 paused%=FALSE
4300 PROCquickclosewindow(w%(edit%))
4310 PROCquickclosewindow(w%(tools%))
4320 PROCsetprinticons
4330 PROCseticontext(w%(multiprint%),5,"Pause")
4340 PROCopenup(w%(multiprint%))
4350 WHILE printing%
4360 SYS"OS_ReadMonotonicTime" TO mtime%
4370 mtime%+=50
4380 SYS"Wimp_PollIdle",0,blk%,mtime% TO reason%
4390 CASE reason% OF
4400 WHEN 0:IF NOTpaused% AND FNfreeinbuffer>256 THEN PROCnullprint
4410 WHEN 1:PROCredraw
4420 WHEN 2:PROCopenwindow
4430 WHEN 6:IF blk%!12=w%(multiprint%) THEN PROCclick(!blk%,blk%!4,blk%!8,blk%!12,blk%!16)
4440 WHEN 17,18:PROCmessage(blk%!4,blk%!8,blk%!16)
4450 ENDCASE
4460 ENDWHILE
4470 PROCclosewindow(w%(multiprint%))
4480 PROCfrontopenwindow(w%(edit%))
4490 ELSE
4500 SYS"Hourglass_On"
4510 WHILE printing%
4520 PROCnullprint
4530 ENDWHILE
4540 SYS"Hourglass_Off"
4550 ENDIF
4560 BPUT#print,footer$;
4570 CLOSE#print
4580ENDIF
4590ENDPROC
4600
4610DEF FNclickprinting
4620CASE icon% OF
4630 WHEN 5
4640 paused%=NOTpaused%
4650 IF paused% THEN PROCseticontext(w%(multiprint%),5,"Continue") ELSE PROCseticontext(w%(multiprint%),5,"Pause")
4660 WHEN 6 : printing%=FALSE
4670ENDCASE
4680=0
4690
4700DEF FNfreeinbuffer
4710SYS"OS_Byte",21,3
4720SYS"OS_Byte",128,252 TO ,low%,high%
4730=low%+(high%<<8)
4740
4750DEF PROCsetprinticons
4760PROCseticontext(w%(multiprint%),1,STR$(label%))
4770PROCseticontext(w%(multiprint%),4,STR$(time%))
4780pc%=100*((1+tolabel%-fromlabel%)*(time%-1)+label%-1)/((1+tolabel%-fromlabel%)*times%)
4790IF pc%>99 THEN pc%=99
4800PROCseticontext(w%(multiprint%),8,STR$(pc%))
4810ENDPROC
4820
4830DEF PROCnullprint
4840speed%=0
4850WHILE printing% AND speed%<4
4860FOR x%=0 TO width%-1
4870 p%=FNdp(x%,y%)
4880 IF char%?p% THEN
4890 IF style%?p%<>pstyle% THEN PROCpstyle(style%?p%)
4900 BPUT#print,char%?p%
4910 ENDIF
4920NEXT x%
4930PROCpstyle(0)
4940BPUT#print,newline$;
4950y%+=1
4960IF y%=height% THEN
4970 BPUT#print,newline$;
4980 y%=0
4990 label%+=1
5000 IF label%>tolabel% THEN
5010 label%=fromlabel%
5020 time%+=1
5030 IF time%>times% THEN printing%=FALSE
5040 ENDIF
5050 PROCsetprinticons
5060ENDIF
5070speed%+=1
5080ENDWHILE
5090ENDPROC
5100
5110DEF PROCpstyle(new%)
5120change%=new%EORpstyle%
5130FOR c%=0 TO 5
5140 IF change%AND(1<<c%) THEN
5150 BPUT#file,pc$(c%,-((new%AND(1<<c%))>0));
5160 ENDIF
5170NEXT c%
5180pstyle%=new%
5190ENDPROC
5200
5210DEF FNclicksize
5220CASE TRUE OF
5230 WHEN FNincicon(7,1,2,8,maxwidth%)
5240 WHEN FNincicon(8,4,3,1,maxheight%)
5250OTHERWISE
5260 IF icon%=9 THEN PROCnewsize
5270ENDCASE
5280=0
5290
5300DEF FNkeysize
5310taken=FNiconkeys(sizedata%)
5320IF taken=-2 THEN PROCnewsize
5330=taken
5340
5350DEF FNkeyprint
5360taken=FNiconkeys(printdata%)
5370IF taken=-2 THEN PROCprint
5380=taken
5390
5400DEF PROCnewsize
5410tw%=VALFNicontext(w%(size%),7)
5420th%=VALFNicontext(w%(size%),8)
5430IF tw%<8 OR tw%>maxwidth% OR th%<1 OR th%>maxheight% THEN
5440 PROCreport("Bad label size.")
5450ELSE
5460 width%=tw%
5470 height%=th%
5480 PROCsetwindowsize
5490 PROCnewpos(width%/2,height%/2)
5500 PROCopenfully(w%(edit%),FALSE)
5510 PROCchanged
5520ENDIF
5530PROCclosemenu
5540ENDPROC
5550
5560DEF FNmenuedit
5570CASE !blk% OF
5580 WHEN 0
5590 CASE blk%!4 OF
5600 WHEN 1 : PROCopenwindowsasmenu(w%(print%))
5610 WHEN 2
5620 PROCsetsettings
5630 PROCopenup(w%(settings%))
5640 ENDCASE
5650 WHEN 1
5660 CASE blk%!4 OF
5670 WHEN 1 : PROCaddlabel
5680 WHEN 2 : PROCdeletelabel
5690 WHEN 3 : PROCwipelabel
5700 WHEN 4
5710 CASE blk%!8 OF
5720 WHEN 0 : PROCmovelabel(0,-1)
5730 WHEN 1 : PROCmovelabel(0,1)
5740 WHEN 2 : PROCmovelabel(-1,0)
5750 WHEN 3 : PROCmovelabel(1,0)
5760 ENDCASE
5770 ENDCASE
5780 WHEN 2
5790 CASE blk%!4 OF
5800 WHEN 0,1,2,3,4,5
5810 oldstyle%=cstyle%
5820 IF blk%!4=3 OR blk%!4=4 THEN cstyle%=cstyle% ANDNOT(1<<(7-blk%!4))
5830 cstyle%=cstyle% EOR (1<<(blk%!4))
5840 PROCsetflags(cstyle%)
5850 IF oldstyle%<>cstyle% AND selected% THEN PROCchangeselected
5860 ENDCASE
5870 WHEN 3 : IF blk%!4>-1 THEN PROCpara(blk%!4-1)
5880ENDCASE
5890=0
5900
5910DEF PROCmovelabel(ix%,iy%)
5920SYS"Hourglass_On"
5930fx%=0:tx%=width%-1
5940fy%=0:ty%=height%-1
5950IF ix%>0 THEN SWAP fx%,tx%
5960IF iy%>0 THEN SWAP fy%,ty%
5970FOR x%=fx% TO tx% STEP SGN(tx%-fx%)
5980 FOR y%=fy% TO ty% STEP SGN(ty%-fy%)
5990 sx%=x%-ix%:sy%=y%-iy%
6000 IF sx%>=0 AND sx%<width% AND sy%>=0 AND sy%<height% THEN
6010 c%=char%?FNdp(sx%,sy%)
6020 s%=style%?FNdp(sx%,sy%)
6030 ELSE
6040 c%=32
6050 s%=0
6060 ENDIF
6070 char%?FNdp(x%,y%)=c%
6080 style%?FNdp(x%,y%)=s%
6090 NEXT y%
6100NEXT x%
6110FOR y%=0 TO height%-1
6120 IF char%?FNdp(0,y%)=0 THEN
6130 char%?FNdp(0,y%)=32
6140 style%?FNdp(0,y%)=0
6150 ENDIF
6160 p%=FNdp(width%-1,y%)
6170 IF char%?p%>=32 AND (style%?p%ANDdw)>0 THEN
6180 char%?p%=32
6190 style%?p%=0
6200 ENDIF
6210NEXT y%
6220PROCforceredraw(w%(edit%))
6230SYS"Hourglass_Off"
6240ENDPROC
6250
6260DEF PROCresetsettings
6270set%()=-1,-1,-1,-1,0
6280defaultfile$="drag file here"
6290setfile$=defaultfile$
6300PROCsetsettings
6310ENDPROC
6320
6330DEF PROCsetsettings
6340FOR i%=0 TO 3
6350 PROCselecticon(w%(settings%),i%+2,set%(i%))
6360NEXT i%
6370PROCselecticon(w%(settings%),12,set%(4))
6380PROCshadeicon(w%(settings%),12,(setfile$=defaultfile$))
6390PROCshadeicon(w%(settings%),14,NOTset%(4))
6400PROCseticontext(w%(settings%),14,setfile$)
6410ENDPROC
6420
6430DEF PROClocatecaretpos
6440PROCwindowinfo(wind%)
6450cx%=((mx%+xsize%/2)-wx%)/xsize%
6460cy%=(wy%-my%)/ysize%
6470IF cx%>width% THEN cx%=width%
6480IF cy%>=height% THEN cy%=height%-1
6490ENDPROC
6500
6510DEF FNclickedit
6520IF selected% THEN PROCdeselect
6530PROClocatecaretpos
6540CASE but% OF
6550 WHEN 4 : PROCnewpos(cx%,cy%)
6560 WHEN 1
6570 PROCalignpos(cx%,cy%)
6580 PROClosecaret
6590 dragid%=edit%
6600 PROCwindowinfo(w%(edit%))
6610 !blk%=w%(edit%)
6620 blk%!4=7
6630 blk%!8=mx%
6640 blk%!12=my%
6650 blk%!16=mx%
6660 blk%!20=my%
6670 blk%!24=wx%
6680 blk%!28=wy%-wh%
6690 blk%!32=wx%+ww%
6700 blk%!36=wy%
6710 SYS"Wimp_DragBox",,blk%
6720 dragging%=TRUE
6730 dsx%=cx%:dsy%=cy%
6740 dex%=cx%:dey%=cy%
6750 selected%=TRUE
6760ENDCASE
6770=0
6780
6790DEF FNdropedit
6800dragging%=FALSE
6810CASE TRUE OF
6820 WHEN dsx%=dex% AND dsy%=dey% : selected%=FALSE
6830 WHEN dsy%>dey% : SWAP dsx%,dex% : SWAP dsy%,dey%
6840 WHEN dsy%=dey% AND dsx%>dex% : SWAP dsx%,dex%
6850ENDCASE
6860IF selected% THEN
6870 IF dsx%=width% THEN dsx%=0:dsy%+=1
6880 cstyle%=style%?FNdp(dsx%,dsy%)
6890 PROCsetflags(cstyle%)
6900ENDIF
6910=0
6920
6930DEF PROCnull
6940PROCmouseinfo
6950IF but%=1 THEN
6960PROClocatecaretpos
6970PROCalignpos(cx%,cy%)
6980IF cx%<>dex% OR cy%<>dey% THEN
6990 PROCupdateinvert(cx%,cy%,dex%,dey%)
7000 dex%=cx%:dey%=cy%
7010ENDIF
7020ELSE
7030dragging%=FALSE
7040ENDIF
7050ENDPROC
7060
7070DEF PROCupdateinvert(ix0%,iy0%,ix1%,iy1%)
7080!blk%=w%(edit%)
7090blk%!4=0
7100blk%!8=-wh%
7110blk%!12=ww%
7120blk%!16=0
7130SYS"Wimp_UpdateWindow",,blk% TO more%
7140WHILE more%
7150 PROCinvert(ix0%,iy0%,ix1%,iy1%)
7160 SYS"Wimp_GetRectangle",,blk% TO more%
7170ENDWHILE
7180ENDPROC
7190
7200DEF PROCinvert(ix0%,iy0%,ix1%,iy1%)
7210IF iy0%>iy1% THEN
7220 SWAP ix0%,ix1%
7230 SWAP iy0%,iy1%
7240ENDIF
7250IF iy0%=iy1% AND ix0%>ix1% THEN
7260 SWAP ix0%,ix1%
7270ENDIF
7280IF ix0%<>ix1% OR iy0%<>iy1% THEN
7290 SYS"Wimp_SetColour",7+3*16
7300 IF iy0%=iy1% THEN
7310 RECTANGLE FILL ix0%*xsize%+wx%,-(iy0%+1)*ysize%+wy%,(ix1%-ix0%)*xsize%-pixelw%,ysize%-pixelh%
7320 ELSE
7330 IF iy1%>iy0%+1 THEN
7340 FOR y%=iy0%+1 TO iy1%-1
7350 RECTANGLE FILL wx%,-(y%+1)*ysize%+wy%,width%*xsize%,ysize%-pixelh%
7360 NEXT y%
7370 ENDIF
7380 RECTANGLE FILL ix0%*xsize%+wx%,-(iy0%+1)*ysize%+wy%,(width%-ix0%)*xsize%-pixelw%,ysize%-pixelh%
7390 RECTANGLE FILL wx%,-(iy1%+1)*ysize%+wy%,ix1%*xsize%-pixelw%,ysize%-pixelh%
7400 ENDIF
7410ENDIF
7420ENDPROC
7430
7440DEF PROCdeselect
7450PROCupdateinvert(dsx%,dsy%,dex%,dey%)
7460selected%=FALSE
7470ENDPROC
7480
7490DEF PROCplacecaret
7500SYS"Wimp_SetCaretPosition",w%(edit%),-1,cx%*xsize%,-(cy%+1)*ysize%,ysize%,0
7510ENDPROC
7520
7530DEF FNclicktools
7540CASE icon% OF
7550 WHEN 4 : IF label%>1 THEN PROCinclabel(-1)
7560 WHEN 6 : IF label%<labels% THEN PROCinclabel(1)
7570 WHEN 0,7,8,9,10,3
7580 IF icon%=9 THEN PROCselecticon(wind%,10,FALSE)
7590 IF icon%=10 THEN PROCselecticon(wind%,9,FALSE)
7600 oldstyle%=cstyle%
7610 PROCgetstyle
7620 IF oldstyle%<>cstyle% AND selected% THEN PROCchangeselected
7630 WHEN 13 : PROCpara(-1)
7640 WHEN 12 : PROCpara(0)
7650 WHEN 11 : PROCpara(1)
7660 WHEN 1 : PROCaddlabel
7670 WHEN 2 : PROCdeletelabel
7680 WHEN 14 : editmode%=1+FNselected(wind%,icon%)
7690ENDCASE
7700ENDIF
7710=0
7720
7730DEF PROCaddlabel
7740IF labels%<maxl% THEN
7750 PROCchanged
7760 labels%+=1
7770 label%=labels%
7780 PROCblanklabel
7790 PROCsetlabel
7800 PROCnewpos(width%/2,height%/2)
7810 PROCforceredraw(w%(edit%))
7820ELSE
7830 PROCreport("Sorry, no room to add another label.")
7840ENDIF
7850ENDPROC
7860
7870DEF PROCwipelabel
7880okay%=NOTset%(2)
7890IF NOTokay% THEN okay%=(FNquestion("Are you sure that you want to wipe this label?","","Yes","No")=2)
7900IF okay% THEN
7910 PROCchanged
7920 PROCblanklabel
7930 PROCnewpos(width%/2,height%/2)
7940 PROCforceredraw(w%(edit%))
7950ENDIF
7960ENDPROC
7970
7980DEF PROCdeletelabel
7990okay%=NOTset%(1)
8000IF NOTokay% THEN okay%=(FNquestion("Are you sure that you want to delete this label?","","Yes","No")=2)
8010IF okay% THEN
8020 PROCchanged
8030 PROCblanklabel
8040 labels%-=1
8050 t%=label%
8060 IF label%<=labels% THEN
8070 label%=t%+1
8080 s0%=FNdp(0,0)
8090 label%=labels%+1
8100 s1%=FNdp(maxwidth%-1,maxheight%-1)
8110 label%=t%
8120 d0%=FNdp(0,0)
8130 FOR p%=s0% TO s1%
8140 char%?d0%=char%?p%
8150 style%?d0%=style%?p%
8160 d0%+=1
8170 NEXT p%
8180 ELSE
8190 IF labels%<1 THEN labels%=1
8200 label%=labels%
8210 ENDIF
8220 PROCsetlabel
8230 PROCnewpos(width%/2,height%/2)
8240 PROCforceredraw(w%(edit%))
8250ENDIF
8260ENDPROC
8270
8280DEF PROCpara(newpara%)
8290PROCgetcaret
8300IF cwind%=w%(edit%) THEN
8310 flag%=FALSE
8320 FOR x%=0 TO width%-1
8330 IF char%?FNdp(x%,cy%)<>32 THEN flag%=TRUE
8340 NEXT x%
8350 IF flag% THEN
8360 leftx%=0
8370 WHILE char%?FNdp(leftx%,cy%)=32
8380 leftx%+=1
8390 ENDWHILE
8400 rightx%=width%-1
8410 WHILE char%?FNdp(rightx%,cy%)=32
8420 rightx%-=1
8430 ENDWHILE
8440 CASE newpara% OF
8450 WHEN -1 : PROCmove(leftx%,rightx%,0,TRUE)
8460 WHEN 0 : PROCmove(leftx%,rightx%,(width%-(rightx%-leftx%))/2,TRUE)
8470 WHEN 1 : PROCmove(leftx%,rightx%,width%-(1+rightx%-leftx%),TRUE)
8480 ENDCASE
8490 ENDIF
8500ENDIF
8510ENDPROC
8520
8530DEF PROCmove(lx%,rx%,tx%,movecaret)
8540PROCchanged
8550i%=1
8560IF lx%<>tx% THEN
8570IF lx%<tx% THEN
8580 i%=-i%
8590 tx%+=rx%-lx%
8600 SWAP lx%,rx%
8610ENDIF
8620FOR x%=lx% TO rx% STEP i%
8630 char%?FNdp(tx%,cy%)=char%?FNdp(x%,cy%)
8640 style%?FNdp(tx%,cy%)=style%?FNdp(x%,cy%)
8650 char%?FNdp(x%,cy%)=32
8660 style%?FNdp(x%,cy%)=0
8670 tx%+=i%
8680NEXT x%
8690IF movecaret THEN
8700 cx%+=tx%-x%
8710 PROCplacecaret
8720ENDIF
8730ENDIF
8740PROCredoline(cy%,0,width%)
8750ENDPROC
8760
8770DEF PROCredoline(y%,x0%,x1%)
8780PROCredobox(w%(edit%),x0%*xsize%,-(y%+1)*ysize%,x1%*xsize%,-y%*ysize%)
8790ENDPROC
8800
8810DEF PROCchangeselected
8820PROCchanged
8830change%=oldstyle%EORcstyle%
8840bits%=NOT((NOTchange%)ORoldstyle%)
8850IF dsy%=dey% THEN
8860 FOR cx%=dsx% TO dex%-1
8870 PROCcc(cx%,dsy%)
8880 NEXT cx%
8890 PROCredoline(dsy%,dsx%,dex%)
8900ELSE
8910 FOR cx%=dsx% TO width%-1
8920 PROCcc(cx%,dsy%)
8930 NEXT cx%
8940 PROCredoline(dsy%,dsx%,width%)
8950 IF dey%>dsy%+1 THEN
8960 FOR cy%=dsy%+1 TO dey%-1
8970 FOR cx%=0 TO width%-1
8980 PROCcc(cx%,cy%)
8990 NEXT cx%
9000 PROCredoline(cy%,0,width%)
9010 NEXT cy%
9020 ENDIF
9030 FOR cx%=0 TO dex%-1
9040 PROCcc(cx%,dey%)
9050 NEXT cx%
9060 PROCredoline(dey%,0,dex%)
9070ENDIF
9080ENDPROC
9090
9100DEF PROCcc(x%,y%)
9110p%=FNdp(x%,y%)
9120os%=style%?p%
9130style%?p%=(style%?p% ANDNOTchange%)ORbits%
9140ENDPROC
9150
9160DEF PROCgetstyle
9170cstyle%=FNselected(w%(tools%),0)ANDbold
9180cstyle%=cstyle% OR (FNselected(w%(tools%),7)ANDitalic)
9190cstyle%=cstyle% OR (FNselected(w%(tools%),8)ANDulined)
9200cstyle%=cstyle% OR (FNselected(w%(tools%),9)ANDsuper)
9210cstyle%=cstyle% OR (FNselected(w%(tools%),10)ANDsub)
9220cstyle%=cstyle% OR (FNselected(w%(tools%),3)ANDdw)
9230ls%=cstyle%
9240ENDPROC
9250
9260DEF PROCinclabel(inc%)
9270label%+=inc%
9280PROCsetlabel
9290PROCnewpos(width%/2,height%/2)
9300PROCforceredraw(w%(edit%))
9310ENDPROC
9320
9330DEF FNmenuiconbar
9340IF !blk%=1 THEN
9350 IF active%(edit%) THEN PROCclosewindow(w%(edit%))
9360 IF NOTactive%(edit%) THEN PROCclosedown
9370ENDIF
9380=0
9390
9400DEF FNclickiconbar
9410IF NOTactive%(edit%) THEN
9420filename$=FNstandardfilename(w%(save%))
9430width%=maxwidth%
9440height%=maxheight%
9450labels%=1
9460changed%=FALSE
9470PROCstartup
9480PROCblanklabel
9490PROCedittitle
9500ELSE
9510PROCopenup(w%(edit%))
9520ENDIF
9530=0
9540
9550DEF PROCstartup
9560selected%=FALSE
9570PROCsetwindowsize
9580cstyle%=0
9590label%=1
9600PROCsetlabel
9610PROCopenfully(w%(edit%),TRUE)
9620ENDPROC
9630
9640DEF PROCsetwindowsize
9650xsize%=24:ysize%=32
9660PROCsetwindowextent(w%(edit%),0,-height%*ysize%,width%*xsize%,0)
9670ENDPROC
9680
9690DEF FNdp(x%,y%)=label%*bsize%+x%+y%*maxwidth%
9700
9710DEF PROCsetflags(s%)
9720c%=s%EORls%
9730IF c%ANDbold THEN PROCselecticon(w%(tools%),0,s%ANDbold)
9740IF c%ANDitalic THEN PROCselecticon(w%(tools%),7,s%ANDitalic)
9750IF c%ANDulined THEN PROCselecticon(w%(tools%),8,s%ANDulined)
9760IF c%ANDsuper THEN PROCselecticon(w%(tools%),9,s%ANDsuper)
9770IF c%ANDsub THEN PROCselecticon(w%(tools%),10,s%ANDsub)
9780IF c%ANDdw THEN PROCselecticon(w%(tools%),3,s%ANDdw)
9790ls%=s%
9800ENDPROC
9810
9820DEF PROCsetlabel
9830PROCseticontext(w%(tools%),5,STR$(label%)+"/"+STR$(labels%))
9840ENDPROC
9850
9860DEF PROCblanklabel
9870FOR x%=0 TO maxwidth%-1
9880FOR y%=0 TO maxheight%-1
9890t%=FNdp(x%,y%)
9900char%?t%=32
9910style%?t%=0
9920NEXT y%
9930NEXT x%
9940ENDPROC
9950
9960DEF FNprepare50
9970filesize%=-1
9980=-2
9990
10000DEF FNsave50
10010LOCAL label%
10020file=OPENOUT(filename$)
10030PRINT#file,labels%
10040PRINT#file,width%
10050PRINT#file,height%
10060FOR label%=1 TO labels%
10070FOR x%=0 TO width%-1
10080FOR y%=0 TO height%-1
10090BPUT#file,char%?FNdp(x%,y%)
10100BPUT#file,style%?FNdp(x%,y%)
10110NEXT y%
10120NEXT x%
10130NEXT label%
10140CLOSE#file
10150PROCsetfiletype(filename$,lft%)
10160label%=1
10170PROCinclabel(0)
10180changed%=FALSE
10190PROCedittitle
10200=0
10210
10220DEF PROCload(file$,filetype%)
10230ok%=TRUE
10240CASE filetype% OF
10250 WHEN lft%
10260OTHERWISE
10270 ok%=FALSE
10280ENDCASE
10290IF ok% THEN ok%=FNfileexist(file$)
10300IF ok% THEN
10310 PROCreply(18,4)
10320 d%=EVAL("FNload"+STR$~(filetype%)+"(file$)")
10330ELSE
10340 IF message%<>5 THEN
10350 PROCreply(18,4)
10360 PROCreport("Cannot load this file.")
10370 ENDIF
10380ENDIF
10390ENDPROC
10400
10410DEF FNload50(file$)
10420PROCmouseinfo
10430IF wind%=w%(settings%) THEN
10440PROCseticontext(w%(settings%),14,file$)
10450PROCshadeicon(w%(settings%),12,FALSE)
10460PROCselecticon(w%(settings%),12,TRUE)
10470ELSE
10480IF changed% THEN
10490PROCreport("Current file has been changed and you cannot edit multiple files.")
10500ELSE
10510file=OPENIN(file$)
10520INPUT#file,labels%
10530INPUT#file,width%
10540INPUT#file,height%
10550FOR label%=1 TO labels%
10560FOR x%=0 TO width%-1
10570FOR y%=0 TO height%-1
10580char%?FNdp(x%,y%)=BGET#file
10590style%?FNdp(x%,y%)=BGET#file
10600NEXT y%
10610NEXT x%
10620NEXT label%
10630CLOSE#file
10640filename$=file$
10650PROCstartup
10660PROClosecaret
10670PROCforceredraw(w%(edit%))
10680changed%=FALSE
10690PROCedittitle
10700ENDIF
10710ENDIF
10720=0
10730
10740DEF FNdropsave
10750prepared%=EVAL("FNprepare"+STR$~(misc%(dragid%)))
10760IF prepared% THEN PROCdropfile(FNicontext(w%(dragid%),2),misc%(dragid%),filesize%)
10770=0
10780
10790DEF FNclicksave
10800IF icon%=0 THEN PROCsave(id%,FNicontext(wind%,2),FALSE)
10810=0
10820
10830DEF FNkeysave
10840IF key%=13 THEN PROCsave(id%,FNicontext(wind%,2),FALSE):=TRUE
10850=0
10860
10870REM ----WIMP Library routines----
10880
10890REM ==== message routines ====
10900
10910DEF PROCpoll(pollflags%)
10920SYS"Wimp_Poll",pollflags%,blk% TO reason%
10930CASE reason% OF
10940 WHEN 0:PROCnull
10950 WHEN 1:PROCredraw
10960 WHEN 2:PROCopenwindow
10970 WHEN 3:PROCclosewindow(!blk%)
10980 WHEN 4:REM pointer leaving
10990 WHEN 5:REM pointer entering
11000 WHEN 6:PROCclick(!blk%,blk%!4,blk%!8,blk%!12,blk%!16)
11010 WHEN 7:PROCenddrag
11020 WHEN 8:PROCkey(!blk%,blk%!4,blk%!8,blk%!24)
11030 WHEN 9:PROCmenuselect
11040 WHEN 10:REM scroll request
11050 WHEN 11:mycaret%=FALSE
11060 WHEN 12:mycaret%=TRUE
11070 WHEN 17,18:PROCmessage(blk%!4,blk%!8,blk%!16)
11080ENDCASE
11090ENDPROC
11100
11110DEF PROCmessage(task%,ref%,message%)
11120IF status%>0 AND message%>=1 AND message%<=7 THEN message%=-1
11130CASE message% OF
11140 WHEN 0 : PROCquit
11150 WHEN 2
11160 PROCsave(dragid%,FNstring(blk%+44),prepared%)
11170 IF saved% THEN PROCtelltoload ELSE PROCreport("Could not save file")
11180 WHEN 3 : PROCload(FNstring(blk%+44),blk%!40)
11190 WHEN 5 : PROCload(FNstring(blk%+44),blk%!40)
11200 WHEN 8 : PROCprequit
11210 WHEN 10: PROCaddtobootfile(blk%!20)
11220 WHEN &400C1 : PROCnewmode
11230ENDCASE
11240ENDPROC
11250
11260DEF PROCprequit
11270IF changed% THEN
11280 PROCreply(17,8)
11290 PROCclosewindow(w%(edit%))
11300ENDIF
11310ENDPROC
11320
11330DEF PROCaddtobootfile(handle%)
11340BPUT#file,"Run "+dir$
11350ENDPROC
11360
11370DEF PROCtelltoload
11380PROCmouseinfo
11390blk%!20=wind%
11400blk%!24=icon%
11410blk%!28=mx%
11420blk%!32=my%
11430blk%!36=filesize%
11440blk%!40=filetype%
11450$(blk%+44)=filename$+CHR$0
11460!blk%=(LEN$(blk%+44)+48)ANDNOT3
11470PROCreply(17,3)
11480ENDPROC
11490
11500DEF PROCdropfile(filename$,filetype%,filesize%)
11510PROCmouseinfo
11520blk%!12=0
11530blk%!16=1
11540blk%!20=wind%
11550blk%!24=icon%
11560blk%!28=mx%
11570blk%!32=my%
11580blk%!36=filesize%
11590blk%!40=filetype%
11600$(blk%+44)=FNlastbit(filename$)+CHR$0
11610!blk%=(LEN$(blk%+44)+48)ANDNOT3
11620SYS"Wimp_SendMessage",17,blk%,blk%!20,blk%!24
11630trans%=0
11640ENDPROC
11650
11660DEF PROCloadsprites
11670spritefile$=dir$+".Sprites"
11680PROCfileinfo(spritefile$)
11690IF exist%=1 THEN
11700ssize%=filesize%+16
11710DIM sprites% ssize%
11720!sprites%=ssize%
11730sprites%!4=0
11740sprites%!8=16
11750sprites%!12=16
11760SYS"OS_SpriteOp",10+256,sprites%,spritefile$
11770ELSE
11780sprites%=-1
11790ENDIF
11800ENDPROC
11810
11820DEF PROCfileinfo(file$)
11830SYS"OS_File",5,file$ TO exist%,,,,filesize%
11840ENDPROC
11850
11860DEF FNfilesize(file$)
11870LOCAL exist%,filesize%
11880PROCfileinfo(file$)
11890=filesize%
11900
11910DEF FNfileexist(file$)
11920LOCAL exist%,filesize%
11930PROCfileinfo(file$)
11940=exist%
11950
11960DEF PROCreply(type%,blk%!16)
11970blk%!12=ref%
11980SYS"Wimp_SendMessage",type%,blk%,task%
11990ENDPROC
12000
12010DEF PROCnewmode
12020!q%=11:q%!4=12:q%!8=4:q%!12=5:q%!16=3:q%!20=-1
12030SYS"OS_ReadVduVariables",q%,q%
12040scx%=(!q%+1)<<(q%!8)
12050scy%=(q%!4+1)<<(q%!12)
12060pixelw%=1<<q%!8:pixelh%=1<<q%!12
12070cols%=q%!16
12080SYS"Wimp_ReadPalette",,pal%
12090ENDPROC
12100
12110DEF PROCsetfontcolours
12120CASE cols% OF
12130 WHEN 1 : SYS"Font_SetFontColours",,0,1,0
12140 WHEN 3 : SYS"Font_SetFontColours",,0,1,2
12150 WHEN 15 : SYS"Font_SetFontColours",,0,1,6
12160 WHEN 15 : SYS"Font_SetFontColours",,0,1,14,!pal%,pal%!28
12170ENDCASE
12180ENDPROC
12190
12200DEF FNloadtemplate(title$)
12210SYS"Wimp_LoadTemplate",,blk%,ind%,indend%,fonttable%,title$ TO ,,ind%
12220IF sprites%<>-1 THEN blk%!64=sprites%
12230SYS"Wimp_CreateWindow",,blk% TO wind%
12240=wind%
12250
12260DEF PROCtick(menu%,item%,tick%)
12270p%=menu%+28+item%*24
12280IF tick% THEN !p%=!p% OR1 ELSE !p%=!p% ANDNOT1
12290ENDPROC
12300
12310DEF FNmenu(text$)
12320oldptr%=menuptr%
12330items%=0
12340text$+=","
12350title$=FNnextword(text$)
12360$menuptr%=title$
12370max%=LENtitle$
12380menuptr%!12=&70207
12390menuptr%!20=44
12400menuptr%!24=0
12410menuptr%+=4
12420WHILE text$<>""
12430items%+=1
12440menuptr%+=24
12450!menuptr%=0
12460menuptr%!4=0
12470word$=FNnextword(text$)
12480token$=FNtoken(word$)
12490i1%=-1
12500WHILE token$<>""
12510CASE token$ OF
12520WHEN ">" : menuptr%!4=EVAL(FNnextword(text$))
12530WHEN "/" : !menuptr%=!menuptr% OR 1
12540WHEN "-" : !menuptr%=!menuptr% OR 2
12550WHEN "!"
12560 !menuptr%=!menuptr% OR 4
12570 valid$=FNnextword(text$)
12580 IF LENvalid$ THEN
12590 DIM i1% LENvalid$+1
12600 $i1%=valid$
12610 ENDIF
12620ENDCASE
12630token$=FNtoken(word$)
12640ENDWHILE
12650menuptr%!8=(7<<24) OR %10001
12660IF !menuptr% AND 4 OR token$="#" THEN
12670PROCinditem(EVAL(FNnextword(text$)),i1%,EVAL(word$))
12680ELSE
12690IF LENword$<=12 THEN
12700$(menuptr%+12)=word$
12710ELSE
12720DIM i0% LENword$+1
12730$i0%=word$
12740PROCinditem(i0%,-1,LENword$+1)
12750ENDIF
12760IF LENword$>max% THEN max%=LENword$
12770ENDIF
12780ENDWHILE
12790!menuptr%=!menuptr% OR &80
12800menuptr%+=24
12810oldptr%!16=max%*16+12
12820=oldptr%
12830
12840DEF PROCinditem(i0%,i1%,i2%)
12850menuptr%!8=menuptr%!8 OR 1<<8
12860menuptr%!12=i0%
12870menuptr%!16=i1%
12880menuptr%!20=i2%
12890IF i2%-1>max% AND (!menuptr% AND 4)=0 THEN max%=i2%-1
12900ENDPROC
12910
12920DEF FNtoken(RETURN word$)
12930token$=""
12940IF INSTR(">/!#-",RIGHT$(word$)) THEN
12950token$=RIGHT$(word$,1)
12960word$=LEFT$(word$,LENword$-1)
12970ENDIF
12980=token$
12990
13000DEF FNnextword(RETURN text$)
13010LOCAL word$,pos%
13020pos%=INSTR(text$,",")
13030word$=LEFT$(text$,pos%-1)
13040text$=MID$(text$,pos%+1)
13050=word$
13060
13070DEF FNcricon(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,$(q%+24))
13080SYS"Wimp_CreateIcon",,q% TO icon%
13090=icon%
13100
13110DEF FNcheck(message$)
13120SYS"Wimp_DragBox",,0
13130!q%=0
13140$(q%+4)=message$
13150SYS"Wimp_ReportError",q%,19,"Message from "+program$ TO ,answer%
13160IF answer%=1 THEN =TRUE ELSE =FALSE
13170
13180DEF FNquestion(ans$(0),ans$(1),ans$(2),ans$(3))
13190LOCAL status%
13200status%=2
13210PROCclosemenu
13220FOR i%=0 TO 3
13230 IF ans$(i%)="" THEN
13240 PROCremoveicon(w%(report%),i%)
13250 ELSE
13260 PROCreiniticon(w%(report%),i%)
13270 PROCseticontext(w%(report%),i%,ans$(i%))
13280 ENDIF
13290NEXT i%
13300PROClosecaret
13310PROCopenincentre(w%(report%))
13320IF beep% THEN VDU 7
13330answer%=0
13340REPEAT
13350 SYS"Wimp_Poll",1,blk% TO reason%
13360 CASE reason% OF
13370 WHEN 1:PROCredraw
13380 WHEN 6:IF blk%!12=w%(report%) AND blk%!16>-1 THEN answer%=blk%!16
13390 WHEN 17,18:PROCmessage(blk%!4,blk%!8,blk%!16)
13400 ENDCASE
13410UNTIL answer%
13420PROCclosewindow(w%(report%))
13430=answer%
13440
13450DEF FNstring(b%)
13460LOCAL s$
13470s$=""
13480WHILE ?b%>31
13490s$+=CHR$(?b%)
13500b%+=1
13510ENDWHILE
13520=s$
13530
13540DEF PROCreport(message$)
13550d%=FNquestion(message$,"OK","","")
13560ENDPROC
13570
13580DEF FNbuttype(!q%,q%!4)
13590IF q%!4>=0 THEN SYS"Wimp_GetIconState",,q% ELSE q%!24=0
13600=((q%!24)>>12)AND15
13610
13620DEF PROCselecticon(!q%,q%!4,select%)
13630SYS"Wimp_GetIconState",,q%
13640IF select% THEN q%!8=1<<21 ELSE q%!8=0
13650q%!12=1<<21
13660IF (q%!24 AND q%!12)<>q%!8 THEN SYS"Wimp_SetIconState",,q%
13670ENDPROC
13680
13690DEF PROCseticonfc(!q%,q%!4,col%)
13700SYS"Wimp_GetIconState",,q%
13710q%!8=col%<<24
13720q%!12=15<<24
13730IF (q%!24 AND q%!12)<>q%!8 THEN SYS"Wimp_SetIconState",,q%
13740ENDPROC
13750
13760DEF PROCseticontext(!q%,q%!4,text$)
13770SYS"Wimp_GetIconState",,q%
13780text$=LEFT$(text$,q%!36-1)
13790IF $(q%!28)<>text$ THEN
13800$(q%!28)=text$
13810q%!8=0
13820q%!12=0
13830SYS"Wimp_SetIconState",,q%
13840ENDIF
13850ENDPROC
13860
13870DEF FNicontp(!q%,q%!4)
13880SYS"Wimp_GetIconState",,q%
13890=q%!28
13900
13910DEF PROCwindowinfo(!blk%)
13920SYS"Wimp_GetWindowInfo",,blk%
13930wx%=blk%!4-blk%!20
13940wy%=blk%!16-blk%!24
13950ww%=blk%!12-blk%!4
13960wh%=blk%!16-blk%!8
13970ENDPROC
13980
13990DEF FNsavebox(filetype%,standard$)
14000wind%=FNwindow("save","save",0,0)
14010PROCseticontext(w%(wind%),3,"file_"+RIGHT$("00"+STR$~(filetype%),3))
14020PROCseticontext(w%(wind%),1,standard$)
14030misc%(wind%)=filetype%
14040=wind%
14050
14060DEF FNlastbit(file$)
14070WHILE INSTR(file$,".")
14080file$=MID$(file$,INSTR(file$,".")+1)
14090ENDWHILE
14100=file$
14110
14120DEF FNnameok(file$)
14130result%=TRUE
14140IF INSTR(file$,":")+INSTR(file$,".")=0 THEN
14150PROCreport("To save, drag icon to a directory viewer "+file$)
14160result%=FALSE
14170ENDIF
14180=result%
14190
14200DEF PROCquit
14210PROCclosedown
14220ENDPROC
14230
14240DEF PROCclosedown
14250FOR i%=1 TO 255
14260WHILE fonttable%?i%
14270SYS"Font_LoseFont",i%
14280fonttable%?i%-=1
14290ENDWHILE
14300NEXT i%
14310SYS"Wimp_CloseDown",mytask%
14320END
14330
14340DEF PROCclosewindow(wind%)
14350LOCAL cid%,close%
14360cid%=FNid(wind%)
14370IF sysflags%(cid%)AND2 THEN close%=EVAL("FNclose"+id$(cid%)) ELSE close%=TRUE
14380IF close% THEN
14390 active%(cid%)=FALSE
14400 PROCquickclosewindow(w%(cid%))
14410ENDIF
14420ENDPROC
14430
14440DEF PROCquickclosewindow(!q%)
14450SYS"Wimp_CloseWindow",,q%
14460ENDPROC
14470
14480DEF PROCmouseinfo
14490SYS"Wimp_GetPointerInfo",,q%
14500mx%=!q%
14510my%=q%!4
14520but%=q%!8
14530wind%=q%!12
14540icon%=q%!16
14550ENDPROC
14560
14570DEF PROCclosemenu
14580SYS"Wimp_CreateMenu",,-1
14590ENDPROC
14600
14610DEF PROCreopen(!blk%)
14620SYS"Wimp_GetWindowState",,blk%
14630PROCopenwindow
14640PROCforceredraw(!blk%)
14650ENDPROC
14660
14670DEF PROCsetwindowextent(wind%,!q%,q%!4,q%!8,q%!12)
14680SYS"Wimp_SetExtent",wind%,q%
14690ENDPROC
14700
14710DEF PROCforceredraw(!blk%)
14720SYS"Wimp_GetWindowInfo",,blk%
14730SYS"Wimp_ForceRedraw",!blk%,blk%!44,blk%!48,blk%!52,blk%!56
14740ENDPROC
14750
14760DEF PROCopenfully(!blk%,top%)
14770SYS"Wimp_GetWindowInfo",,blk%
14780blk%!12=blk%!4+(blk%!52-blk%!44)
14790blk%!8=blk%!16-(blk%!56-blk%!48)
14800IF top% THEN blk%!28=-1
14810PROCopenwindow
14820ENDPROC
14830
14840DEF PROCstartdrag(id%,icon%)
14850dragid%=id%
14860dragicon%=icon%
14870wind%=w%(dragid%)
14880PROCwindowinfo(wind%)
14890!blk%=wind%
14900blk%!4=icon%
14910SYS"Wimp_GetIconState",,blk%
14920!blk%=0
14930blk%!4=5
14940blk%!8+=wx%
14950blk%!12+=wy%
14960blk%!16+=wx%
14970blk%!20+=wy%
14980blk%!24=0
14990blk%!28=0
15000blk%!32=scx%
15010blk%!36=scy%
15020IF drag% THEN
15030SYS"DragASprite_Start",197,1,FNicontext(wind%,icon%),blk%+8,blk%+24
15040ELSE
15050SYS"Wimp_DragBox",,blk%
15060ENDIF
15070ENDPROC
15080
15090DEF PROCopenincentre(!blk%)
15100SYS"Wimp_GetWindowState",,blk%
15110m1%=blk%!12-blk%!4
15120m2%=blk%!16-blk%!8
15130blk%!4=(scx%-m1%)>>1
15140blk%!8=(scy%-m2%)>>1
15150blk%!12=(scx%+m1%)>>1
15160blk%!16=(scy%+m2%)>>1
15170blk%!28=-1
15180PROCopenwindow
15190ENDPROC
15200
15210DEF PROCsetfiletype(file$,filetype%)
15220SYS"OS_File",&12,file$,filetype%
15230ENDPROC
15240
15250DEF PROCnewtitle(!blk%,title$)
15260SYS"Wimp_GetWindowInfo",,blk%
15270IF $(blk%!76)<>title$ THEN
15280$(blk%!76)=title$
15290IF active%(FNid(!blk%)) THEN
15300 SYS"Wimp_GetWindowOutline",,blk%
15310 SYS"Wimp_ForceRedraw",-1,blk%!4,blk%!16-44,blk%!12,blk%!16
15320ENDIF
15330ENDIF
15340ENDPROC
15350
15360DEF FNicontext(!q%,q%!4)
15370SYS"Wimp_GetIconState",,q%
15380IF q%!24AND(1<<8) THEN text$=$(q%!28) ELSE text$=$(q%+28)
15390=text$
15400
15410DEF PROCredoicon(!q%,q%!4)
15420SYS"Wimp_GetIconState",,q%
15430SYS"Wimp_ForceRedraw",!q%,q%!8,q%!12,q%!16,q%!20
15440ENDPROC
15450
15460DEF PROCdeleteicon(!q%,q%!4)
15470SYS"Wimp_DeleteIcon",,q%
15480ENDPROC
15490
15500DEF PROCiconinfo(wind%,icon%)
15510!blk%=wind%
15520blk%!4=icon%
15530SYS"Wimp_GetIconState",,blk%
15540ENDPROC
15550
15560DEF FNselected(!q%,q%!4)
15570SYS"Wimp_GetIconState",,q%
15580=(((q%!24)AND(1<<21))>0)
15590
15600DEF PROCshademenu(menu%,item%,shade%)
15610p%=menu%+36+item%*24
15620!p%=!p% ANDNOT(1<<22)
15630IF shade% THEN !p%=!p% OR(1<<22)
15640ENDPROC
15650
15660DEF PROCshadeicon(!q%,q%!4,shade%)
15670IF shade% THEN q%!8=1<<22 ELSE q%!8=0
15680q%!12=1<<22
15690SYS"Wimp_SetIconState",,q%
15700ENDPROC
15710
15720DEF PROCgetcaret
15730SYS"Wimp_GetCaretPosition",,q%
15740cwind%=!q%
15750cicon%=q%!4
15760cxoff%=q%!8
15770cyoff%=q%!12
15780cheight%=q%!16
15790cindex%=q%!20
15800ENDPROC
15810
15820DEF PROCputcaret(wind%,icon%,index%)
15830len%=LENFNicontext(wind%,icon%)
15840IF index%>len% THEN index%=len%
15850SYS"Wimp_SetCaretPosition",wind%,icon%,,,-1,index%
15860ENDPROC
15870
15880DEF PROCresetcaret(wind%,icon%)
15890SYS"Wimp_GetCaretPosition",,q%
15900IF (!q%=wind% AND q%!4=icon%) THEN
15910 index%=q%!20
15920 len%=LENFNicontext(wind%,icon%)
15930 IF index%>len% THEN index%=len%
15940 SYS"Wimp_SetCaretPosition",wind%,icon%,,,-1,index%
15950ENDIF
15960IF wind%=0 THEN SYS"Wimp_SetCaretPosition",!q%,q%!4,q%!8,q%!12,q%!16,q%!20
15970ENDPROC
15980
15990DEF PROClosecaret
16000IF mycaret% THEN SYS"Wimp_SetCaretPosition",-1
16010ENDPROC
16020
16030DEF PROCflashicon(!q%,q%!4)
16040FOR f%=1 TO 3
16050WAIT:WAIT
16060PROCselecticon(!q%,q%!4,FALSE)
16070WAIT:WAIT
16080PROCselecticon(!q%,q%!4,TRUE)
16090NEXT f%
16100ENDPROC
16110
16120DEF PROCopeniconmenu(!q%,q%!4,wind%)
16130openmenu%=wind%
16140SYS"Wimp_GetIconState",,q%
16150menux%=q%!16
16160menuy%=q%!20
16170PROCwindowinfo(!q%)
16180menux%+=wx%
16190menuy%+=wy%
16200SYS"Wimp_CreateMenu",,openmenu%,menux%,menuy%
16210ENDPROC
16220
16230DEF FNinfowindow(i1$,i2$,i3$,i4$)
16240wind%=FNwindow("info","",0,0)
16250PROCseticontext(w%(wind%),1,i1$)
16260PROCseticontext(w%(wind%),2,i2$)
16270PROCseticontext(w%(wind%),3,i3$)
16280PROCseticontext(w%(wind%),4,i4$)
16290=wind%
16300
16310DEF PROCwimpinit(name$,sprite$,work$,no%,isize%)
16320SYS"OS_GetEnv" TO autoload$
16330autoload$=MID$(autoload$,INSTR(autoload$,CHR$34,INSTR(autoload$,CHR$34)+1)+2)
16340status%=0
16350mycaret%=FALSE
16360windows%=no%+3
16370program$=name$
16380DIM blk% 2000,q% 256,ind% isize%,pal% 256
16390indend%=ind%+isize%
16400$blk%="TASK"
16410SYS"Wimp_Initialise",200,!blk%,program$ TO ,mytask%
16420iconbar%=FNcricon(-1,0,0,68,68,&2002,sprite$)
16430$q%=work$+"$Dir"
16440SYS"OS_ReadVarVal",q%,blk%,256,0,3 TO ,,len%
16450blk%?len%=13
16460dir$=$blk%
16470SYS"XOS_SWINumberFromString",,"DragASprite_Start" TO ;drag%
16480drag%=(drag% AND 1)=0
16490SYS"OS_Byte",161,28 TO ,,bit%
16500IF (bit% AND 2)=0 THEN drag%=FALSE
16510SYS"Wimp_SlotSize",-1,-1 TO appsize%
16520PROCloadsprites
16530PROCnewmode
16540tft%=&FFF
16550dft%=&AFF
16560exit=FALSE
16570DIM menubuffer% 2000,fonttable% 256
16580twind%=0
16590DIM w%(windows%),menu%(windows%),id$(windows%),misc%(windows%),active%(windows%),default%(5,windows%),sysflags%(windows%)
16600menuptr%=menubuffer%
16610FOR i%=1 TO 255
16620fonttable%?i%=0
16630NEXT i%
16640w%(0)=-2:id$(0)="iconbar"
16650SYS"Wimp_OpenTemplate",,dir$+".Templates"
16660PROCinitwindows
16670report%=FNwindow("report","report",0,0)
16680SYS"Wimp_CloseTemplate"
16690DIM ans$(3)
16700beep%=TRUE
16710ENDPROC
16720
16730REM ==== memory management ====
16740
16750DEF FNspace(size%)
16760block%=HIMEM
16770SYS"XWimp_SlotSize",appsize%+size%,-1 TO new%;noroom%
16780room%=((noroom%AND1)=0)
16790IF new%=appsize% THEN room%=FALSE
16800appinc%=new%-appsize%
16810=room%
16820
16830DEF PROCresetslot
16840SYS"Wimp_SlotSize",appsize%,-1
16850ENDPROC
16860
16870REM ==== filing system routines ====
16880
16890DEF FNstandardfilename(wind%)
16900=FNicontext(wind%,1)
16910
16920DEF PROCsave(id%,file$,prepared%)
16930filename$=file$
16940saved%=FALSE
16950IF FNnameok(filename$) THEN
16960IF prepared%=FALSE THEN prepared%=EVAL("FNprepare"+STR$~(misc%(id%)))
16970CASE prepared% OF
16980 WHEN -1
16990 SYS"OS_File",10,filename$,misc%(id%),,savebuff%,savebuff%+filesize%
17000 PROCresetslot
17010 WHEN -2
17020 d%=EVAL("FNsave"+STR$~(misc%(id%)))
17030ENDCASE
17040PROCclosemenu
17050PROCseticontext(w%(id%),2,filename$)
17060saved%=TRUE
17070ENDIF
17080ENDIF
17090ENDPROC
17100
17110REM ==== menu routines ====
17120
17130DEF PROCopenwindowasmenu(window%)
17140PROCwindowinfo(window%)
17150PROCmouseinfo
17160menux%=mx%-ww%/2
17170menuy%=my%+wh%/2
17180openmenu%=window%
17190id%=FNid(window%)
17200PROCreopenmenu
17210ENDPROC
17220
17230DEF PROCiconbarmenu(text$)
17240menu%(0)=FNmenu(text$)
17250barheight%=items%*44+96
17260ENDPROC
17270
17280DEF PROCmenuselect
17290d%=EVAL("FNmenu"+id$(menuid%))
17300PROCmouseinfo
17310IF but%=1 THEN PROCreopenmenu
17320ENDPROC
17330
17340DEF PROCreopenmenu
17350IF sysflags%(id%)AND4 THEN d%=EVAL("FNpremenu"+id$(id%))
17360SYS"Wimp_CreateMenu",,openmenu%,menux%,menuy%
17370ENDPROC
17380
17390DEF PROCopenmenu(id%)
17400IF menu%(id%) THEN
17410menuid%=id%
17420openmenu%=menu%(id%)
17430IF id%=0 THEN menuy%=barheight% ELSE menuy%=my%
17440menux%=mx%-(openmenu%!16)/2-16
17450PROCreopenmenu
17460ENDIF
17470ENDPROC
17480
17490REM ==== window routines ====
17500
17510DEF FNwindow(wind$,name$,menu%,flags%)
17520twind%+=1
17530w%(twind%)=FNloadtemplate(wind$)
17540PROCwindowinfo(w%(twind%))
17550FOR d%=0 TO 5
17560default%(d%,twind%)=!(blk%+(d%<<2)+4)
17570NEXT d%
17580id$(twind%)=name$
17590menu%(twind%)=menu%
17600sysflags%(twind%)=flags%
17610=twind%
17620
17630DEF PROCredraw
17640id%=FNid(!blk%)
17650PROCwindowinfo(!blk%)
17660SYS"Wimp_RedrawWindow",,blk% TO more%
17670WHILE more%
17680x0%=blk%!28-wx%
17690y0%=blk%!32-wy%
17700x1%=blk%!36-wx%
17710y1%=blk%!40-wy%
17720d%=EVAL("FNredraw"+id$(id%))
17730SYS"Wimp_GetRectangle",,blk% TO more%
17740ENDWHILE
17750ENDPROC
17760
17770DEF FNid(find%)
17780found%=windows%
17790FOR i%=0 TO windows%
17800IF w%(i%)=find% THEN found%=i%
17810NEXT i%
17820=found%
17830
17840DEF PROCopenup(wind%)
17850!blk%=wind%
17860id%=FNid(wind%)
17870IF NOTactive%(id%) THEN
17880FOR d%=0 TO 5
17890!(blk%+(d%<<2)+4)=default%(d%,id%)
17900NEXT d%
17910ELSE
17920SYS"Wimp_GetWindowState",,blk%
17930ENDIF
17940blk%!28=-1
17950PROCopenwindow
17960ENDPROC
17970
17980DEF PROCopenwindow
17990id%=FNid(!blk%)
18000SYS"Wimp_OpenWindow",,blk%
18010active%(id%)=TRUE
18020IF sysflags%(id%)AND1 THEN d%=EVAL("FNopen"+id$(id%))
18030ENDPROC
18040
18050DEF PROCfrontopenwindow(!blk%)
18060SYS"Wimp_GetWindowState",,blk%
18070blk%!28=-1
18080PROCopenwindow
18090ENDPROC
18100
18110DEF PROCredobox(wind%,x0%,y0%,x1%,y1%)
18120IF x1%<x0% THEN SWAP x0%,x1%
18130IF y1%<y0% THEN SWAP y0%,y1%
18140SYS"Wimp_ForceRedraw",wind%,x0%,y0%,x1%,y1%
18150ENDPROC
18160
18170DEF PROCdeletewindow(RETURN !q%)
18180SYS"Wimp_DeleteWindow",,q%
18190!q%=0
18200ENDPROC
18210
18220REM ==== icon routines ====
18230
18240DEF PROCclick(mx%,my%,but%,wind%,icon%)
18250IF FNbuttype(wind%,icon%)=9 THEN PROCflashicon(wind%,icon%)
18260id%=FNid(wind%)
18270CASE but% OF
18280WHEN 64
18290 CASE FNbuttype(w%(id%),icon%) OF
18300 WHEN 6,7,8,10,14 : PROCstartdrag(id%,icon%)
18310 ENDCASE
18320WHEN 2 : PROCopenmenu(id%)
18330OTHERWISE
18340d%=EVAL("FNclick"+id$(id%))
18350ENDCASE
18360ENDPROC
18370
18380DEF PROCenddrag
18390PROCmouseinfo
18400IF drag% THEN SYS"DragASprite_Stop"
18410d%=EVAL("FNdrop"+id$(dragid%))
18420ENDPROC
18430
18440DEF PROCkey(wind%,icon%,xpos%,key%)
18450taken=EVAL("FNkey"+id$(FNid(wind%)))
18460IF taken=FALSE THEN SYS"Wimp_ProcessKey",key%
18470ENDPROC
18480
18490DEF FNincicon(iicon%,dec%,inc%,lb%,ub%)
18500change%=FALSE
18510IF icon%=dec% OR icon%=inc% THEN
18520val%=VALFNicontext(wind%,iicon%)
18530val%+=(icon%=dec%)*2+1
18540IF val%>ub% THEN val%=ub% ELSE IF val%<lb% THEN val%=lb%
18550PROCseticontext(wind%,iicon%,STR$(val%))
18560PROCresetcaret(wind%,iicon%)
18570change%=TRUE
18580ENDIF
18590ENDIF
18600=change%
18610
18620DEF PROCremoveicon(!q%,q%!4)
18630q%!8=(1<<24)
18640q%!12=(1<<2)OR(1<<5)OR(15<<24)OR(15<<12)
18650SYS"Wimp_SetIconState",,q%
18660ENDPROC
18670
18680DEF PROCreiniticon(!q%,q%!4)
18690q%!8=(1<<2)OR(1<<5)OR(7<<24)OR(3<<12)
18700q%!12=(1<<2)OR(1<<5)OR(15<<12)OR(15<<24)
18710SYS"Wimp_SetIconState",,q%
18720ENDPROC
18730
18740DEF FNiconkeys(data%)
18750taken=TRUE
18760icons%=0
18770WHILE data%?icons%<255
18780 icons%+=1
18790ENDWHILE
18800icons%-=1
18810found%=-1
18820FOR p%=0 TO icons%
18830 IF data%?p%=icon% THEN found%=p%
18840NEXT p%
18850newicon%=-1
18860IF found%>=0 THEN
18870 CASE key% OF
18880 WHEN 13 : newicon%=found%+1
18890 WHEN &18E : IF found%<icons% THEN newicon%=found%+1
18900 WHEN &18F : IF found%>0 THEN newicon%=found%-1
18910 WHEN &19E,&1AE,&1BE : newicon%=icons%
18920 WHEN &19F,&1AF,&1BF : newicon%=0
18930 OTHERWISE
18940 taken=FALSE
18950 ENDCASE
18960ENDIF
18970IF newicon%>icons% THEN taken=-2:newicon%=-1
18980IF newicon%>=0 THEN
18990 PROCgetcaret
19000 PROCputcaret(wind%,data%?newicon%,cindex%)
19010ENDIF
19020=taken
19030
19040REM ==== and the rest ====
19050
19060DEF FNclick=0
19070
19080DEF FNredraw=0
19090
19100DEF FNkey=0
19110
19120DEF FNdrop=0
19130
19140DEF PROCtemp(st$)
19150FOR a%=1 TO LENst$
19160 PRINTASCMID$(st$,a%,1)
19170NEXT a%
19180ENDPROC
19190
19200DEF PROCerror
19210SYS"Hourglass_Smash"
19220CASE status% OF
19230 WHEN 1
19240 IF print THEN CLOSE#print
19250 report$="Print error, print cancelled"
19260OTHERWISE
19270 report$="An uncontrolable error has occured ("+REPORT$+STR$(ERL)+"), shall I exit?"
19280ENDCASE
19290exit=FNcheck(report$)
19300status%=0
19310ENDPROC
� > <Label$Dir>.!RunImage
�initiate
� � �error
(
2ȕ �exit
<�poll(1+dragging%)
F�
P�closedown
Z
d� �initiate
nchanged%=�
xlft%=&50
�7�wimpinit("Label printing","!label","Label",7,2000)
��windowinfo(w%(tools%))
�toolsheight%=wh%
�toolswidth%=ww%
�maxwidth%=40:maxheight%=8
�bsize%=maxwidth%*maxheight%
�maxl%=64
�tsize%=bsize%*maxl%
� � char% tsize%,style% tsize%
�1bold=1:italic=2:ulined=4:super=8:sub=16:dw=32
�'width%=maxwidth%:height%=maxheight%
�dragging%=�
�
ftype%=-1
font%=0
editmode%=0
� set%(4)
"� sizedata% 4
,?sizedata%=7
6sizedata%?1=8
@sizedata%?2=255
J� printdata% 4
T?printdata%=1
^printdata%?1=6
hprintdata%?2=8
rprintdata%?3=255
|�resetsettings
��loadsettings
�ls%=255
��setflags(0)
�'width%=maxwidth%:height%=maxheight%
��initprinter
�� autoload$<>"" �
� d%=�load50(autoload$)
��
�& � set%(4) � d%=�load50(setfile$)
��
�,�selecticon(w%(tools%),14,(editmode%=0))
��
�
� �edittitle
� changed% � a$=" *" � a$=""
8�newtitle(w%(edit%),�lastbit(filename$)+" Label"+a$)
&�
0
:� �changed
Dchanged%=�
N�edittitle
X�
b
l� �initprinter
v� pc$(5,1), pd$(5)
�<pd$()="bold","italic","underline","super","sub","double"
�file=�(dir$+".PrintCodes")
�� p%=0 � 5
�" pc$(p%,1)=�readcode(pd$(p%))
�& pc$(p%,0)=�readcode("c"+pd$(p%))
�� p%
�header$=�readcode("header")
�footer$=�readcode("footer")
�!newline$=�readcode("newline")
�
�#file
��
�
�� �readcode(key$)
found$=""
�#file=0
ȕ ��#file
read$=�#file
* i%=�read$,":")
4 � i% �
> � �read$,i%-1)=key$ �
H read$=�read$,i%+1)
R found$=""
\ ȕ �read$
f � �read$,1)="|" �
p* found$+=�(�(�read$,2,1))-64)
z read$=�read$,3)
�
�
� found$+=�read$,1)
� read$=�read$,2)
�
�
� �
� �
� �
��
�=found$
�
�� �initwindows
�Rinfo%=�infowindow("Label","Label printer","Barry Wickett","1.01 (10-Dec-1993")
�.�iconbarmenu("Label,Info>,w%(info%),Quit")
$size%=�window("size","size",0,0)
#save%=�savebox(lft%,"Untitled")
*print%=�window("print","print",0,%100)
$0settings%=�window("settings","settings",0,0)
.+menu3%=�menu("Move,Up,Down,Left,Right")
8Hmenu0%=�menu("Label,Size>-,w%(size%),Add,Delete,Wipe-,Move>,menu3%")
BWstylemenu%=�menu("Style,Bold,Italic,Underlined,Superscript,Subscript,Double width")
LHmenu1%=�menu("Misc,Save>-,w%(save%),Print>-,w%(print%),Settings...")
V-menu2%=�menu("Justify,Left,Centre,Right")
`redit%=�window("edit","edit",�menu("Label,Misc>-,menu1%,Label>,menu0%,Style>,stylemenu%,Justify>,menu2%"),%111)
j'tools%=�window("tools","tools",0,0)
t2multiprint%=�window("printing","printing",0,0)
~�
�
�� �premenuedit
�� b%=0 � 5
�, �tick(stylemenu%,b%,(cstyle%�(1<<b%)))
�� b%
�
�getcaret
�8� cwind%=w%(edit%) � selected% � shade%=� � shade%=�
�%�shademenu(menu%(edit%),2,shade%)
�2�shademenu(menu%(edit%),3,(cwind%<>w%(edit%)))
�'�seticontext(w%(size%),7,�(width%))
�(�seticontext(w%(size%),8,�(height%))
�d%=�premenuprint
d%=�opensave
=0
� �opensave
('�seticontext(w%(save%),2,filename$)
2=0
<
F� �premenuprint
P"�seticontext(w%(print%),1,"1")
Z)�seticontext(w%(print%),6,�(labels%))
d"�seticontext(w%(print%),8,"1")
n=0
x
�� �openedit
��windowinfo(w%(edit%))
�!blk%=w%(tools%)
� blk%!8-=toolsheight%+pixelh%
�blk%!12=blk%!4+toolswidth%
�blk%!16=blk%!8+toolsheight%
�
blk%!20=0
�
blk%!24=0
��openwindow
�=0
�
�� �closeedit
�� changed% �
G Ȏ �question("File has been edited.","Save","Discard","Cancel") �
* � 1 : �openwindowasmenu(w%(save%))
� 2 : changed%=�
" �
,�
6*� �changed% � �closewindow(w%(tools%))
@=�changed%
J
T� �keyedit
^taken=�
h
Ȏ � �
r � key%=127 : �deletechar
|I � key%=&18C : � cx%>0 � �newpos(cx%-1+(char%?�dp(cx%-1,cy%)=0),cy%)
�5 � key%=&18D : � cx%<width% � �newpos(cx%+1,cy%)
�8 � key%=&18E : � cy%<height%-1 � �newpos(cx%,cy%+1)
�0 � key%=&18F : � cy%>0 � �newpos(cx%,cy%-1)
�. � key%=&19C � key%=&1AC : �newpos(0,cy%)
�3 � key%=&19D � key%=&1AD : �newpos(width%,cy%)
�6 � key%=&19E � key%=&1AE : �newpos(cx%,height%-1)
�. � key%=&19F � key%=&1AF : �newpos(cx%,0)
�0 � key%=13 : �newpos(0,cy%-(cy%<height%-1))
�' � key%>=32 � key%<=255 : �addchar
�
�
taken=�
��
�
=taken
� �deletechar
� cx%>0 �
& ocx%=cx%
0 �changed
: cx%-=1
D char%?�dp(cx%,cy%)=32
N � style%?�dp(cx%,cy%)�dw �
X style%?�dp(cx%,cy%)=0
b* � editmode%>0 � �redochar(cx%,cy%)
l cx%-=1
v char%?�dp(cx%,cy%)=32
� �
� style%?�dp(cx%,cy%)=0
� � editmode%=0 �
� endline%=ocx%
� tx%=cx%
� ȕ tx%<width%
� � ocx%<width% �
�# tc%=char%?�dp(ocx%,cy%)
�$ ts%=style%?�dp(ocx%,cy%)
� �
� tc%=32
� ts%=0
� �
, � tc%<>32 � ts%<>0 � endline%=ocx%
char%?�dp(tx%,cy%)=tc%
! style%?�dp(tx%,cy%)=ts%
tx%+=1
* ocx%+=1
4 �
>% �redoline(cy%,cx%,endline%+1)
H �
R �redochar(cx%,cy%)
\ �losefont
f �
p �newpos(cx%,cy%)
z�
��
�
�� �addchar
�dwflag%=((cstyle%�dw)>0)
�*redonext%=((style%?�dp(cx%,cy%)�dw)>0)
�endline%=-1
�ocx%=cx%
�� cx%<width%+dwflag% �
� � editmode%=0 �
� tx%=width%-1
� ȕ tx%>cx%+dwflag%
�$ ps%=�dp(tx%-1+dwflag%,cy%)
� pd%=�dp(tx%,cy%)
char%?pd%=char%?ps%
style%?pd%=style%?ps%
H � (char%?pd%<>32 � style%?pd%<>0) � endline%=-1 � endline%=tx%
$ tx%-=1
. �
8$ � endline%=-1 � endline%=cx%
BC � style%?�dp(width%-1,cy%)�dw � char%?�dp(width%-1,cy%)=0 �
L# char%?�dp(width%-1,cy%)=0
V% style%?�dp(width%-1,cy%)=32
` �
j �
t �changed
~ char%?�dp(cx%,cy%)=key%
�! style%?�dp(cx%,cy%)=cstyle%
� � dwflag% �
� char%?�dp(cx%+1,cy%)=0
�% style%?�dp(cx%+1,cy%)=cstyle%
� �
� � editmode%=0 �
�% �redoline(cy%,cx%,endline%+1)
� �
� � redonext% � �dwflag% �
�! style%?�dp(cx%+1,cy%)=0
�! char%?�dp(cx%+1,cy%)=32
� �redochar(cx%+1,cy%)
�
�redochar(cx%,cy%)
�
�newpos(cx%+1-dwflag%,cy%)
( �losefont
2�
<�
F
P� �newpos(newx%,newy%)
Z�alignpos(newx%,newy%)
d'cstyle%=style%?�dp(cx%+(cx%>0),cy%)
n�setflags(cstyle%)
x�placecaret
��
�
�� �alignpos(newx%,newy%)
�)� char%?�dp(newx%,newy%)=0 � newx%+=1
�
cx%=newx%
�
cy%=newy%
��
�
�� �redochar(x%,y%)
�cs%=style%?�dp(x%,y%)
��setfontcolours
��windowinfo(w%(edit%))
�!blk%=w%(edit%)
blk%!4=x%*xsize%
blk%!8=-(y%+1)*ysize%
blk%!12=blk%!4+xsize%
"blk%!16=blk%!8+ysize%
, � cs% � dw � blk%!12+=xsize%
6'ș"Wimp_UpdateWindow",,blk% � more%
@�getfont(cs%)
Jȕ more%
T �
^ �dochar(x%,y%)
h) ș"Wimp_GetRectangle",,blk% � more%
r�
|�
�
�� �dochar(x%,y%)
�p%=�dp(x%,y%)
�c%=char%?p%
�� c%=0 �
� x%-=1
� p%=�dp(x%,y%)
� c%=char%?p%
��
�yoff%=wy%-(y%+1)*ysize%+8
�+� style%?p% � super � yoff%+=ysize%/2-4
�A� c%<>32 � ș"Font_Paint",,�(c%),%10100,wx%+x%*xsize%+2,yoff%
�� style%?p% � ulined �
ș"Wimp_SetColour",7
K ȓ Ȑ wx%+x%*xsize%,yoff%-4,(1-((style%?p% � dw)>0))*xsize%-pixelw%,3
�
&�
0
:� �getfont(type%)
D� type%<>ftype% �
N� font% � �losefont
Xfont$="Corpus"
b
ys%=14*16
l
xs%=14*16
v6� type% � bold � font$+=".Bold" � font$+=".Medium"
�(� type% � italic � font$+=".Oblique"
�� type% � sub � ys%=ys%/2
�� type% � super � ys%=ys%/2
�� type% � dw � xs%=xs%*2
�,ș"Font_FindFont",,font$,xs%,ys% � font%
�ș"Font_SetFont",font%
�ftype%=type%
��
��
�
�� �losefont
�%� font% � ș"Font_LoseFont",font%
�font%=0
ftype%=-1
�
� �redrawedit
*minx%=x0%/xsize%
4miny%=-y1%/ysize%
>maxx%=x1%/xsize%
Hmaxy%=-y0%/ysize%
R�setfontcolours
\� y%=miny% � maxy%
f � x%=minx% � maxx%
p2 � x%>=0 � x%<width% � y%>=0 � y%<height% �
z" � char%?�dp(x%,y%)<>32 �
�' �getfont(style%?�dp(x%,y%))
� �dochar(x%,y%)
� �
�7 � style%?�dp(x%,y%)�ulined � �dochar(x%,y%)
� �
� �
�
� x%
�� y%
�.� selected% � �invert(dsx%,dsy%,dex%,dey%)
�
�losefont
�=0
�
�� �clicksettings
Ȏ icon% �
� 6
�getsettings
$ �closewindow(wind%)
. � 7
8 �getsettings
B �savesettings
L �closewindow(wind%)
V � 8 : �resetsettings
` � 9 : �closewindow(wind%)
j9 � 12 : �shadeicon(wind%,14,��selected(wind%,icon%))
t � 15 : �loadsettings
~�
�=0
�
�� �loadsettings
�file=�(dir$+".Settings")
�� i%=0 � 4
� �#file,set%(i%)
�� i%
��#file,setfile$
�
�#file
��setsettings
��
�
� �savesettings
file=�(dir$+".Settings")
� i%=0 � 4
�#file,set%(i%)
(� i%
2�#file,setfile$
<
�#file
F�
P
Z� �getsettings
d� i%=0 � 3
n, set%(i%)=�selected(w%(settings%),i%+2)
x� i%
�'set%(4)=�selected(w%(settings%),12)
�(setfile$=�icontext(w%(settings%),14)
�beep%=set%(3)
��
�
�� �clickprint
�
Ȏ � �
�! � �incicon(1,2,3,1,labels%)
�! � �incicon(6,5,7,1,labels%)
� � �incicon(8,10,9,1,99)
�
� � icon%=12 � �print
��
=0
� �print
"� label%,status%
,print=0
6
status%=1
@'fromlabel%=��icontext(w%(print%),1)
J%tolabel%=��icontext(w%(print%),6)
T#times%=��icontext(w%(print%),8)
^�closemenu
h.� fromlabel%>tolabel% � tolabel%>labels% �
r9 �report("Bad from/to parameters, print cancelled.")
|�
� pstyle%=0
� print=�("Printer:")
� printing%=�
� �#print,header$;
�$ time%=1:label%=fromlabel%:y%=0
�" � �selected(w%(print%),13) �
� paused%=�
�$ �quickclosewindow(w%(edit%))
�% �quickclosewindow(w%(tools%))
� �setprinticons
�/ �seticontext(w%(multiprint%),5,"Pause")
� �openup(w%(multiprint%))
� ȕ printing%
+ ș"OS_ReadMonotonicTime" � mtime%
mtime%+=50
3 ș"Wimp_PollIdle",0,blk%,mtime% � reason%
& Ȏ reason% �
0; � 0:� �paused% � �freeinbuffer>256 � �nullprint
: � 1:�redraw
D � 2:�openwindow
NW � 6:� blk%!12=w%(multiprint%) � �click(!blk%,blk%!4,blk%!8,blk%!12,blk%!16)
X3 � 17,18:�message(blk%!4,blk%!8,blk%!16)
b �
l �
v% �closewindow(w%(multiprint%))
�# �frontopenwindow(w%(edit%))
� �
� ș"Hourglass_On"
� ȕ printing%
� �nullprint
� �
� ș"Hourglass_Off"
� �
� �#print,footer$;
�
�#print
��
��
�
� �clickprinting
Ȏ icon% �
� 5
paused%=�paused%
*h � paused% � �seticontext(w%(multiprint%),5,"Continue") � �seticontext(w%(multiprint%),5,"Pause")
4 � 6 : printing%=�
>�
H=0
R
\� �freeinbuffer
fș"OS_Byte",21,3
p%ș"OS_Byte",128,252 � ,low%,high%
z=low%+(high%<<8)
�
�� �setprinticons
�-�seticontext(w%(multiprint%),1,�(label%))
�,�seticontext(w%(multiprint%),4,�(time%))
�Ypc%=100*((1+tolabel%-fromlabel%)*(time%-1)+label%-1)/((1+tolabel%-fromlabel%)*times%)
�� pc%>99 � pc%=99
�*�seticontext(w%(multiprint%),8,�(pc%))
��
�
�� �nullprint
�speed%=0
�ȕ printing% � speed%<4
�� x%=0 � width%-1
p%=�dp(x%,y%)
� char%?p% �
1 � style%?p%<>pstyle% � �pstyle(style%?p%)
$ �#print,char%?p%
. �
8� x%
B�pstyle(0)
L�#print,newline$;
V y%+=1
`� y%=height% �
j �#print,newline$;
t
y%=0
~ label%+=1
� � label%>tolabel% �
� label%=fromlabel%
� time%+=1
�$ � time%>times% � printing%=�
� �
� �setprinticons
��
�
speed%+=1
��
��
�
�� �pstyle(new%)
change%=new%�pstyle%
� c%=0 � 5
� change%�(1<<c%) �
+ �#file,pc$(c%,-((new%�(1<<c%))>0));
( �
2� c%
<pstyle%=new%
F�
P
Z� �clicksize
d
Ȏ � �
n# � �incicon(7,1,2,8,maxwidth%)
x$ � �incicon(8,4,3,1,maxheight%)
�
� � icon%=9 � �newsize
��
�=0
�
�� �keysize
�taken=�iconkeys(sizedata%)
�� taken=-2 � �newsize
�
=taken
�
�� �keyprint
�taken=�iconkeys(printdata%)
�� taken=-2 � �print
=taken
� �newsize
"tw%=��icontext(w%(size%),7)
,th%=��icontext(w%(size%),8)
66� tw%<8 � tw%>maxwidth% � th%<1 � th%>maxheight% �
@ �report("Bad label size.")
J�
T width%=tw%
^ height%=th%
h �setwindowsize
r! �newpos(width%/2,height%/2)
| �openfully(w%(edit%),�)
� �changed
��
��closemenu
��
�
�� �menuedit
�Ȏ !blk% �
� � 0
� Ȏ blk%!4 �
�. � 1 : �openwindowsasmenu(w%(print%))
�
� 2
� �setsettings
�" �openup(w%(settings%))
�
� 1
Ȏ blk%!4 �
& � 1 : �addlabel
0 � 2 : �deletelabel
: � 3 : �wipelabel
D
� 4
N Ȏ blk%!8 �
X$ � 0 : �movelabel(0,-1)
b# � 1 : �movelabel(0,1)
l$ � 2 : �movelabel(-1,0)
v# � 3 : �movelabel(1,0)
�
�
� �
� � 2
� Ȏ blk%!4 �
� � 0,1,2,3,4,5
� oldstyle%=cstyle%
�E � blk%!4=3 � blk%!4=4 � cstyle%=cstyle% ��(1<<(7-blk%!4))
�+ cstyle%=cstyle% � (1<<(blk%!4))
� �setflags(cstyle%)
�> � oldstyle%<>cstyle% � selected% � �changeselected
� �
�) � 3 : � blk%!4>-1 � �para(blk%!4-1)
��
=0
� �movelabel(ix%,iy%)
ș"Hourglass_On"
*fx%=0:tx%=width%-1
4fy%=0:ty%=height%-1
>� ix%>0 � Ȕ fx%,tx%
H� iy%>0 � Ȕ fy%,ty%
R� x%=fx% � tx% � �(tx%-fx%)
\! � y%=fy% � ty% � �(ty%-fy%)
f sx%=x%-ix%:sy%=y%-iy%
p6 � sx%>=0 � sx%<width% � sy%>=0 � sy%<height% �
z c%=char%?�dp(sx%,sy%)
� s%=style%?�dp(sx%,sy%)
� �
� c%=32
� s%=0
� �
� char%?�dp(x%,y%)=c%
� style%?�dp(x%,y%)=s%
�
� y%
�� x%
�� y%=0 � height%-1
� � char%?�dp(0,y%)=0 �
� char%?�dp(0,y%)=32
� style%?�dp(0,y%)=0
�
p%=�dp(width%-1,y%)
) � char%?p%>=32 � (style%?p%�dw)>0 �
$ char%?p%=32
. style%?p%=0
8 �
B� y%
L�forceredraw(w%(edit%))
Vș"Hourglass_Off"
`�
j
t� �resetsettings
~set%()=-1,-1,-1,-1,0
�!defaultfile$="drag file here"
�setfile$=defaultfile$
��setsettings
��
�
�� �setsettings
�� i%=0 � 3
�. �selecticon(w%(settings%),i%+2,set%(i%))
�� i%
�)�selecticon(w%(settings%),12,set%(4))
�8�shadeicon(w%(settings%),12,(setfile$=defaultfile$))
�)�shadeicon(w%(settings%),14,�set%(4))
+�seticontext(w%(settings%),14,setfile$)
�
� �locatecaretpos
(�windowinfo(wind%)
2#cx%=((mx%+xsize%/2)-wx%)/xsize%
<cy%=(wy%-my%)/ysize%
F� cx%>width% � cx%=width%
P"� cy%>=height% � cy%=height%-1
Z�
d
n� �clickedit
x� selected% � �deselect
��locatecaretpos
�
Ȏ but% �
� � 4 : �newpos(cx%,cy%)
� � 1
� �alignpos(cx%,cy%)
� �losecaret
� dragid%=edit%
� �windowinfo(w%(edit%))
� !blk%=w%(edit%)
� blk%!4=7
� blk%!8=mx%
� blk%!12=my%
� blk%!16=mx%
blk%!20=my%
blk%!24=wx%
blk%!28=wy%-wh%
" blk%!32=wx%+ww%
, blk%!36=wy%
6 ș"Wimp_DragBox",,blk%
@ dragging%=�
J dsx%=cx%:dsy%=cy%
T dex%=cx%:dey%=cy%
^ selected%=�
h�
r=0
|
�� �dropedit
�dragging%=�
�
Ȏ � �
�+ � dsx%=dex% � dsy%=dey% : selected%=�
�/ � dsy%>dey% : Ȕ dsx%,dex% : Ȕ dsy%,dey%
�, � dsy%=dey% � dsx%>dex% : Ȕ dsx%,dex%
��
�� selected% �
�$ � dsx%=width% � dsx%=0:dsy%+=1
�# cstyle%=style%?�dp(dsx%,dsy%)
� �setflags(cstyle%)
��
�=0
� �null
�mouseinfo
&� but%=1 �
0�locatecaretpos
:�alignpos(cx%,cy%)
D� cx%<>dex% � cy%<>dey% �
N& �updateinvert(cx%,cy%,dex%,dey%)
X dex%=cx%:dey%=cy%
b�
l�
vdragging%=�
��
��
�
�(� �updateinvert(ix0%,iy0%,ix1%,iy1%)
�!blk%=w%(edit%)
�blk%!4=0
�blk%!8=-wh%
�blk%!12=ww%
�
blk%!16=0
�'ș"Wimp_UpdateWindow",,blk% � more%
�ȕ more%
�" �invert(ix0%,iy0%,ix1%,iy1%)
�) ș"Wimp_GetRectangle",,blk% � more%
�
�
"� �invert(ix0%,iy0%,ix1%,iy1%)
*� iy0%>iy1% �
4 Ȕ ix0%,ix1%
> Ȕ iy0%,iy1%
H�
R� iy0%=iy1% � ix0%>ix1% �
\ Ȕ ix0%,ix1%
f�
p� ix0%<>ix1% � iy0%<>iy1% �
z ș"Wimp_SetColour",7+3*16
� � iy0%=iy1% �
�\ ȓ Ȑ ix0%*xsize%+wx%,-(iy0%+1)*ysize%+wy%,(ix1%-ix0%)*xsize%-pixelw%,ysize%-pixelh%
� �
� � iy1%>iy0%+1 �
� � y%=iy0%+1 � iy1%-1
�E ȓ Ȑ wx%,-(y%+1)*ysize%+wy%,width%*xsize%,ysize%-pixelh%
� � y%
� �
�^ ȓ Ȑ ix0%*xsize%+wx%,-(iy0%+1)*ysize%+wy%,(width%-ix0%)*xsize%-pixelw%,ysize%-pixelh%
�I ȓ Ȑ wx%,-(iy1%+1)*ysize%+wy%,ix1%*xsize%-pixelw%,ysize%-pixelh%
� �
��
��
� �deselect
&�updateinvert(dsx%,dsy%,dex%,dey%)
$selected%=�
.�
8
B� �placecaret
LNș"Wimp_SetCaretPosition",w%(edit%),-1,cx%*xsize%,-(cy%+1)*ysize%,ysize%,0
V�
`
j� �clicktools
tȎ icon% �
~& � 4 : � label%>1 � �inclabel(-1)
�+ � 6 : � label%<labels% � �inclabel(1)
� � 0,7,8,9,10,3
�+ � icon%=9 � �selecticon(wind%,10,�)
�+ � icon%=10 � �selecticon(wind%,9,�)
� oldstyle%=cstyle%
� �getstyle
�: � oldstyle%<>cstyle% � selected% � �changeselected
� � 13 : �para(-1)
� � 12 : �para(0)
� � 11 : �para(1)
� � 1 : �addlabel
� � 2 : �deletelabel
/ � 14 : editmode%=1+�selected(wind%,icon%)
�
�
=0
(
2� �addlabel
<� labels%<maxl% �
F �changed
P labels%+=1
Z label%=labels%
d �blanklabel
n �setlabel
x! �newpos(width%/2,height%/2)
� �forceredraw(w%(edit%))
��
�5 �report("Sorry, no room to add another label.")
��
��
�
�� �wipelabel
�okay%=�set%(2)
�b� �okay% � okay%=(�question("Are you sure that you want to wipe this label?","","Yes","No")=2)
�
� okay% �
� �changed
� �blanklabel
�! �newpos(width%/2,height%/2)
�forceredraw(w%(edit%))
�
�
"
,� �deletelabel
6okay%=�set%(1)
@d� �okay% � okay%=(�question("Are you sure that you want to delete this label?","","Yes","No")=2)
J
� okay% �
T �changed
^ �blanklabel
h labels%-=1
r t%=label%
| � label%<=labels% �
� label%=t%+1
� s0%=�dp(0,0)
� label%=labels%+1
�) s1%=�dp(maxwidth%-1,maxheight%-1)
� label%=t%
� d0%=�dp(0,0)
� � p%=s0% � s1%
� char%?d0%=char%?p%
� style%?d0%=style%?p%
� d0%+=1
� � p%
� �
� � labels%<1 � labels%=1
label%=labels%
�
�setlabel
&! �newpos(width%/2,height%/2)
0 �forceredraw(w%(edit%))
:�
D�
N
X� �para(newpara%)
b
�getcaret
l� cwind%=w%(edit%) �
v
flag%=�
� � x%=0 � width%-1
�) � char%?�dp(x%,cy%)<>32 � flag%=�
�
� x%
� � flag% �
� leftx%=0
�# ȕ char%?�dp(leftx%,cy%)=32
� leftx%+=1
� �
� rightx%=width%-1
�$ ȕ char%?�dp(rightx%,cy%)=32
� rightx%-=1
� �
� Ȏ newpara% �
!* � -1 : �move(leftx%,rightx%,0,�)
!D � 0 : �move(leftx%,rightx%,(width%-(rightx%-leftx%))/2,�)
!B � 1 : �move(leftx%,rightx%,width%-(1+rightx%-leftx%),�)
! �
!* �
!4�
!>�
!H
!R"� �move(lx%,rx%,tx%,movecaret)
!\�changed
!fi%=1
!p� lx%<>tx% �
!z� lx%<tx% �
!� i%=-i%
!� tx%+=rx%-lx%
!� Ȕ lx%,rx%
!��
!�� x%=lx% � rx% � i%
!�* char%?�dp(tx%,cy%)=char%?�dp(x%,cy%)
!�, style%?�dp(tx%,cy%)=style%?�dp(x%,cy%)
!� char%?�dp(x%,cy%)=32
!� style%?�dp(x%,cy%)=0
!�
tx%+=i%
!�� x%
!�� movecaret �
!� cx%+=tx%-x%
" �placecaret
"�
"�
"$�redoline(cy%,0,width%)
".�
"8
"B� �redoline(y%,x0%,x1%)
"LG�redobox(w%(edit%),x0%*xsize%,-(y%+1)*ysize%,x1%*xsize%,-y%*ysize%)
"V�
"`
"j� �changeselected
"t�changed
"~change%=oldstyle%�cstyle%
"�!bits%=�((�change%)�oldstyle%)
"�� dsy%=dey% �
"� � cx%=dsx% � dex%-1
"� �cc(cx%,dsy%)
"� � cx%
"� �redoline(dsy%,dsx%,dex%)
"��
"� � cx%=dsx% � width%-1
"� �cc(cx%,dsy%)
"� � cx%
"�! �redoline(dsy%,dsx%,width%)
"� � dey%>dsy%+1 �
# � cy%=dsy%+1 � dey%-1
#
� cx%=0 � width%-1
# �cc(cx%,cy%)
# � cx%
#(! �redoline(cy%,0,width%)
#2
� cy%
#< �
#F � cx%=0 � dex%-1
#P �cc(cx%,dey%)
#Z � cx%
#d �redoline(dey%,0,dex%)
#n�
#x�
#�
#�� �cc(x%,y%)
#�p%=�dp(x%,y%)
#�os%=style%?p%
#�)style%?p%=(style%?p% ��change%)�bits%
#��
#�
#�� �getstyle
#�(cstyle%=�selected(w%(tools%),0)�bold
#�6cstyle%=cstyle% � (�selected(w%(tools%),7)�italic)
#�6cstyle%=cstyle% � (�selected(w%(tools%),8)�ulined)
#�5cstyle%=cstyle% � (�selected(w%(tools%),9)�super)
#�4cstyle%=cstyle% � (�selected(w%(tools%),10)�sub)
$2cstyle%=cstyle% � (�selected(w%(tools%),3)�dw)
$ls%=cstyle%
$�
$"
$,� �inclabel(inc%)
$6label%+=inc%
$@
�setlabel
$J�newpos(width%/2,height%/2)
$T�forceredraw(w%(edit%))
$^�
$h
$r� �menuiconbar
$|� !blk%=1 �
$�0 � active%(edit%) � �closewindow(w%(edit%))
$�$ � �active%(edit%) � �closedown
$��
$�=0
$�
$�� �clickiconbar
$�� �active%(edit%) �
$�*filename$=�standardfilename(w%(save%))
$�width%=maxwidth%
$�height%=maxheight%
$�
labels%=1
$�changed%=�
$��startup
%�blanklabel
%�edittitle
%�
%&�openup(w%(edit%))
%0�
%:=0
%D
%N� �startup
%Xselected%=�
%b�setwindowsize
%l
cstyle%=0
%vlabel%=1
%�
�setlabel
%��openfully(w%(edit%),�)
%��
%�
%�� �setwindowsize
%�xsize%=24:ysize%=32
%�A�setwindowextent(w%(edit%),0,-height%*ysize%,width%*xsize%,0)
%��
%�
%�.� �dp(x%,y%)=label%*bsize%+x%+y%*maxwidth%
%�
%�� �setflags(s%)
%�
c%=s%�ls%
&1� c%�bold � �selecticon(w%(tools%),0,s%�bold)
&5� c%�italic � �selecticon(w%(tools%),7,s%�italic)
&5� c%�ulined � �selecticon(w%(tools%),8,s%�ulined)
& 3� c%�super � �selecticon(w%(tools%),9,s%�super)
&*0� c%�sub � �selecticon(w%(tools%),10,s%�sub)
&4-� c%�dw � �selecticon(w%(tools%),3,s%�dw)
&>
ls%=s%
&H�
&R
&\� �setlabel
&f7�seticontext(w%(tools%),5,�(label%)+"/"+�(labels%))
&p�
&z
&�� �blanklabel
&�� x%=0 � maxwidth%-1
&�� y%=0 � maxheight%-1
&�t%=�dp(x%,y%)
&�char%?t%=32
&�style%?t%=0
&�� y%
&�� x%
&��
&�
&�� �prepare50
&�filesize%=-1
&�=-2
'
'
� �save50
'� label%
'$file=�(filename$)
'.�#file,labels%
'8�#file,width%
'B�#file,height%
'L� label%=1 � labels%
'V� x%=0 � width%-1
'`� y%=0 � height%-1
'j�#file,char%?�dp(x%,y%)
't�#file,style%?�dp(x%,y%)
'~� y%
'�� x%
'�� label%
'�
�#file
'� �setfiletype(filename$,lft%)
'�label%=1
'��inclabel(0)
'�changed%=�
'��edittitle
'�=0
'�
'�� �load(file$,filetype%)
'� ok%=�
( Ȏ filetype% �
(
� lft%
(
( ok%=�
((�
(2!� ok% � ok%=�fileexist(file$)
(<� ok% �
(F �reply(18,4)
(P, d%=�("FNload"+�~(filetype%)+"(file$)")
(Z�
(d � message%<>5 �
(n �reply(18,4)
(x) �report("Cannot load this file.")
(� �
(��
(��
(�
(�� �load50(file$)
(��mouseinfo
(�� wind%=w%(settings%) �
(�(�seticontext(w%(settings%),14,file$)
(�"�shadeicon(w%(settings%),12,�)
(�#�selecticon(w%(settings%),12,�)
(��
(�� changed% �
(�P�report("Current file has been changed and you cannot edit multiple files.")
)�
)file=�(file$)
)�#file,labels%
)"�#file,width%
),�#file,height%
)6� label%=1 � labels%
)@� x%=0 � width%-1
)J� y%=0 � height%-1
)Tchar%?�dp(x%,y%)=�#file
)^style%?�dp(x%,y%)=�#file
)h� y%
)r� x%
)|� label%
)�
�#file
)�filename$=file$
)��startup
)��losecaret
)��forceredraw(w%(edit%))
)�changed%=�
)��edittitle
)��
)��
)�=0
)�
)�� �dropsave
)�/prepared%=�("FNprepare"+�~(misc%(dragid%)))
*N� prepared% � �dropfile(�icontext(w%(dragid%),2),misc%(dragid%),filesize%)
*=0
*
*&� �clicksave
*0/� icon%=0 � �save(id%,�icontext(wind%,2),�)
*:=0
*D
*N� �keysave
*X2� key%=13 � �save(id%,�icontext(wind%,2),�):=�
*b=0
*l
*v#� ----WIMP Library routines----
*�
*� � ==== message routines ====
*�
*�� �poll(pollflags%)
*�+ș"Wimp_Poll",pollflags%,blk% � reason%
*�Ȏ reason% �
*� � 0:�null
*� � 1:�redraw
*� � 2:�openwindow
*� � 3:�closewindow(!blk%)
*� � 4:� pointer leaving
*� � 5:� pointer entering
*�5 � 6:�click(!blk%,blk%!4,blk%!8,blk%!12,blk%!16)
+ � 7:�enddrag
++ � 8:�key(!blk%,blk%!4,blk%!8,blk%!24)
+ � 9:�menuselect
+ � 10:� scroll request
+* � 11:mycaret%=�
+4 � 12:mycaret%=�
+>- � 17,18:�message(blk%!4,blk%!8,blk%!16)
+H�
+R�
+\
+f#� �message(task%,ref%,message%)
+p9� status%>0 � message%>=1 � message%<=7 � message%=-1
+zȎ message% �
+� � 0 : �quit
+� � 2
+�1 �save(dragid%,�string(blk%+44),prepared%)
+�? � saved% � �telltoload � �report("Could not save file")
+�+ � 3 : �load(�string(blk%+44),blk%!40)
+�+ � 5 : �load(�string(blk%+44),blk%!40)
+� � 8 : �prequit
+�# � 10: �addtobootfile(blk%!20)
+� � &400C1 : �newmode
+��
+��
+�
+�� �prequit
,� changed% �
, �reply(17,8)
, �closewindow(w%(edit%))
,$�
,.�
,8
,B� �addtobootfile(handle%)
,L�#file,"Run "+dir$
,V�
,`
,j� �telltoload
,t�mouseinfo
,~blk%!20=wind%
,�blk%!24=icon%
,�blk%!28=mx%
,�blk%!32=my%
,�blk%!36=filesize%
,�blk%!40=filetype%
,�$(blk%+44)=filename$+�0
,�!blk%=(�$(blk%+44)+48)��3
,��reply(17,3)
,��
,�
,�.� �dropfile(filename$,filetype%,filesize%)
,��mouseinfo
-
blk%!12=0
-
blk%!16=1
-blk%!20=wind%
-blk%!24=icon%
-(blk%!28=mx%
-2blk%!32=my%
-<blk%!36=filesize%
-Fblk%!40=filetype%
-P%$(blk%+44)=�lastbit(filename$)+�0
-Z!blk%=(�$(blk%+44)+48)��3
-d0ș"Wimp_SendMessage",17,blk%,blk%!20,blk%!24
-ntrans%=0
-x�
-�
-�� �loadsprites
-�spritefile$=dir$+".Sprites"
-��fileinfo(spritefile$)
-�� exist%=1 �
-�ssize%=filesize%+16
-�� sprites% ssize%
-�!sprites%=ssize%
-�sprites%!4=0
-�sprites%!8=16
-�sprites%!12=16
-�/ș"OS_SpriteOp",10+256,sprites%,spritefile$
-��
.sprites%=-1
.�
.�
."
.,� �fileinfo(file$)
.6-ș"OS_File",5,file$ � exist%,,,,filesize%
.@�
.J
.T� �filesize(file$)
.^� exist%,filesize%
.h�fileinfo(file$)
.r=filesize%
.|
.�� �fileexist(file$)
.�� exist%,filesize%
.��fileinfo(file$)
.�=exist%
.�
.�� �reply(type%,blk%!16)
.�blk%!12=ref%
.�)ș"Wimp_SendMessage",type%,blk%,task%
.��
.�
.�� �newmode
.�2!q%=11:q%!4=12:q%!8=4:q%!12=5:q%!16=3:q%!20=-1
.�!ș"OS_ReadVduVariables",q%,q%
/scx%=(!q%+1)<<(q%!8)
/scy%=(q%!4+1)<<(q%!12)
/$pixelw%=1<<q%!8:pixelh%=1<<q%!12
/&cols%=q%!16
/0ș"Wimp_ReadPalette",,pal%
/:�
/D
/N� �setfontcolours
/XȎ cols% �
/b* � 1 : ș"Font_SetFontColours",,0,1,0
/l* � 3 : ș"Font_SetFontColours",,0,1,2
/v+ � 15 : ș"Font_SetFontColours",,0,1,6
/�: � 15 : ș"Font_SetFontColours",,0,1,14,!pal%,pal%!28
/��
/��
/�
/�� �loadtemplate(title$)
/�Gș"Wimp_LoadTemplate",,blk%,ind%,indend%,fonttable%,title$ � ,,ind%
/�%� sprites%<>-1 � blk%!64=sprites%
/�'ș"Wimp_CreateWindow",,blk% � wind%
/�
=wind%
/�
/�� �tick(menu%,item%,tick%)
/�p%=menu%+28+item%*24
/�&� tick% � !p%=!p% �1 � !p%=!p% ��1
0�
0
0� �menu(text$)
0 oldptr%=menuptr%
0*items%=0
04text$+=","
0>title$=�nextword(text$)
0H$menuptr%=title$
0Rmax%=�title$
0\menuptr%!12=&70207
0fmenuptr%!20=44
0pmenuptr%!24=0
0zmenuptr%+=4
0�ȕ text$<>""
0�
items%+=1
0�menuptr%+=24
0�!menuptr%=0
0�menuptr%!4=0
0�word$=�nextword(text$)
0�token$=�token(word$)
0�
i1%=-1
0�ȕ token$<>""
0�Ȏ token$ �
0�*� ">" : menuptr%!4=�(�nextword(text$))
0�#� "/" : !menuptr%=!menuptr% � 1
0�#� "-" : !menuptr%=!menuptr% � 2
1 � "!"
1 !menuptr%=!menuptr% � 4
1 valid$=�nextword(text$)
1$ � �valid$ �
1. � i1% �valid$+1
18 $i1%=valid$
1B �
1L�
1Vtoken$=�token(word$)
1`�
1jmenuptr%!8=(7<<24) � %10001
1t"� !menuptr% � 4 � token$="#" �
1~.�inditem(�(�nextword(text$)),i1%,�(word$))
1��
1�� �word$<=12 �
1�$(menuptr%+12)=word$
1��
1�� i0% �word$+1
1�$i0%=word$
1��inditem(i0%,-1,�word$+1)
1��
1�� �word$>max% � max%=�word$
1��
1��
1�!menuptr%=!menuptr% � &80
2 menuptr%+=24
2
oldptr%!16=max%*16+12
2=oldptr%
2
2(� �inditem(i0%,i1%,i2%)
22 menuptr%!8=menuptr%!8 � 1<<8
2<menuptr%!12=i0%
2Fmenuptr%!16=i1%
2Pmenuptr%!20=i2%
2Z1� i2%-1>max% � (!menuptr% � 4)=0 � max%=i2%-1
2d�
2n
2x� �token(� word$)
2�
token$=""
2�� �">/!#-",�word$)) �
2�token$=�word$,1)
2�word$=�word$,�word$-1)
2��
2�=token$
2�
2�� �nextword(� text$)
2�� word$,pos%
2�pos%=�text$,",")
2�word$=�text$,pos%-1)
2�text$=�text$,pos%+1)
2�
=word$
3
37� �cricon(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,$(q%+24))
3#ș"Wimp_CreateIcon",,q% � icon%
3"
=icon%
3,
36� �check(message$)
3@ș"Wimp_DragBox",,0
3J !q%=0
3T$(q%+4)=message$
3^Bș"Wimp_ReportError",q%,19,"Message from "+program$ � ,answer%
3h� answer%=1 � =� � =�
3r
3|0� �question(ans$(0),ans$(1),ans$(2),ans$(3))
3�
� status%
3�
status%=2
3��closemenu
3�� i%=0 � 3
3� � ans$(i%)="" �
3�# �removeicon(w%(report%),i%)
3� �
3�# �reiniticon(w%(report%),i%)
3�- �seticontext(w%(report%),i%,ans$(i%))
3� �
3�� i%
3��losecaret
3��openincentre(w%(report%))
4� beep% � � 7
4
answer%=0
4�
4&$ ș"Wimp_Poll",1,blk% � reason%
40 Ȏ reason% �
4: � 1:�redraw
4D@ � 6:� blk%!12=w%(report%) � blk%!16>-1 � answer%=blk%!16
4N/ � 17,18:�message(blk%!4,blk%!8,blk%!16)
4X �
4b
� answer%
4l�closewindow(w%(report%))
4v=answer%
4�
4�� �string(b%)
4�� s$
4� s$=""
4�
ȕ ?b%>31
4�s$+=�(?b%)
4� b%+=1
4��
4�=s$
4�
4�� �report(message$)
4�%d%=�question(message$,"OK","","")
4��
5
5� �buttype(!q%,q%!4)
53� q%!4>=0 � ș"Wimp_GetIconState",,q% � q%!24=0
5 =((q%!24)>>12)�15
5*
54#� �selecticon(!q%,q%!4,select%)
5>ș"Wimp_GetIconState",,q%
5H#� select% � q%!8=1<<21 � q%!8=0
5Rq%!12=1<<21
5\7� (q%!24 � q%!12)<>q%!8 � ș"Wimp_SetIconState",,q%
5f�
5p
5z� �seticonfc(!q%,q%!4,col%)
5�ș"Wimp_GetIconState",,q%
5�q%!8=col%<<24
5�q%!12=15<<24
5�7� (q%!24 � q%!12)<>q%!8 � ș"Wimp_SetIconState",,q%
5��
5�
5�"� �seticontext(!q%,q%!4,text$)
5�ș"Wimp_GetIconState",,q%
5�text$=�text$,q%!36-1)
5�� $(q%!28)<>text$ �
5�$(q%!28)=text$
5�
q%!8=0
5�q%!12=0
6ș"Wimp_SetIconState",,q%
6�
6�
6$
6.� �icontp(!q%,q%!4)
68ș"Wimp_GetIconState",,q%
6B
=q%!28
6L
6V� �windowinfo(!blk%)
6` ș"Wimp_GetWindowInfo",,blk%
6jwx%=blk%!4-blk%!20
6twy%=blk%!16-blk%!24
6~ww%=blk%!12-blk%!4
6�wh%=blk%!16-blk%!8
6��
6�
6�#� �savebox(filetype%,standard$)
6�$wind%=�window("save","save",0,0)
6�<�seticontext(w%(wind%),3,"file_"+�"00"+�~(filetype%),3))
6�'�seticontext(w%(wind%),1,standard$)
6�misc%(wind%)=filetype%
6�
=wind%
6�
6�� �lastbit(file$)
6�ȕ �file$,".")
7 file$=�file$,�file$,".")+1)
7
�
7
=file$
7
7(� �nameok(file$)
72
result%=�
7<!� �file$,":")+�file$,".")=0 �
7F>�report("To save, drag icon to a directory viewer "+file$)
7P
result%=�
7Z�
7d=result%
7n
7x� �quit
7��closedown
7��
7�
7�� �closedown
7�� i%=1 � 255
7�ȕ fonttable%?i%
7�ș"Font_LoseFont",i%
7�fonttable%?i%-=1
7��
7�� i%
7�ș"Wimp_CloseDown",mytask%
7��
7�
8� �closewindow(wind%)
8� cid%,close%
8cid%=�id(wind%)
8"B� sysflags%(cid%)�2 � close%=�("FNclose"+id$(cid%)) � close%=�
8,� close% �
86 active%(cid%)=�
8@! �quickclosewindow(w%(cid%))
8J�
8T�
8^
8h� �quickclosewindow(!q%)
8rș"Wimp_CloseWindow",,q%
8|�
8�
8�� �mouseinfo
8�ș"Wimp_GetPointerInfo",,q%
8�mx%=!q%
8�my%=q%!4
8�
but%=q%!8
8�wind%=q%!12
8�icon%=q%!16
8��
8�
8�� �closemenu
8�ș"Wimp_CreateMenu",,-1
8��
9
9� �reopen(!blk%)
9!ș"Wimp_GetWindowState",,blk%
9&�openwindow
90�forceredraw(!blk%)
9:�
9D
9N1� �setwindowextent(wind%,!q%,q%!4,q%!8,q%!12)
9Xș"Wimp_SetExtent",wind%,q%
9b�
9l
9v� �forceredraw(!blk%)
9� ș"Wimp_GetWindowInfo",,blk%
9�>ș"Wimp_ForceRedraw",!blk%,blk%!44,blk%!48,blk%!52,blk%!56
9��
9�
9�� �openfully(!blk%,top%)
9� ș"Wimp_GetWindowInfo",,blk%
9�$blk%!12=blk%!4+(blk%!52-blk%!44)
9�$blk%!8=blk%!16-(blk%!56-blk%!48)
9�� top% � blk%!28=-1
9��openwindow
9��
9�
9�� �startdrag(id%,icon%)
:dragid%=id%
:dragicon%=icon%
:wind%=w%(dragid%)
: �windowinfo(wind%)
:*!blk%=wind%
:4blk%!4=icon%
:>ș"Wimp_GetIconState",,blk%
:H!blk%=0
:Rblk%!4=5
:\blk%!8+=wx%
:fblk%!12+=wy%
:pblk%!16+=wx%
:zblk%!20+=wy%
:�
blk%!24=0
:�
blk%!28=0
:�blk%!32=scx%
:�blk%!36=scy%
:�
� drag% �
:�Eș"DragASprite_Start",197,1,�icontext(wind%,icon%),blk%+8,blk%+24
:��
:�ș"Wimp_DragBox",,blk%
:��
:��
:�
:�� �openincentre(!blk%)
:�!ș"Wimp_GetWindowState",,blk%
;m1%=blk%!12-blk%!4
;m2%=blk%!16-blk%!8
;blk%!4=(scx%-m1%)>>1
;$blk%!8=(scy%-m2%)>>1
;.blk%!12=(scx%+m1%)>>1
;8blk%!16=(scy%+m2%)>>1
;Bblk%!28=-1
;L�openwindow
;V�
;`
;j#� �setfiletype(file$,filetype%)
;t#ș"OS_File",&12,file$,filetype%
;~�
;�
;�� �newtitle(!blk%,title$)
;� ș"Wimp_GetWindowInfo",,blk%
;�� $(blk%!76)<>title$ �
;�$(blk%!76)=title$
;�� active%(�id(!blk%)) �
;�% ș"Wimp_GetWindowOutline",,blk%
;�? ș"Wimp_ForceRedraw",-1,blk%!4,blk%!16-44,blk%!12,blk%!16
;��
;��
;��
;�
<