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 ;�� ;�� ;�� ;� <