Home » Archimedes archive » Acorn Computing » 1994 04 subscription disc.adf » 9404s » PD/BACKDROP/!StickyBrd/!RunImage
PD/BACKDROP/!StickyBrd/!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 Computing » 1994 04 subscription disc.adf » 9404s |
| Filename: | PD/BACKDROP/!StickyBrd/!RunImage |
| Read OK: | ✔ |
| File size: | D5B2 bytes |
| Load address: | 0000 |
| Exec address: | 0000 |
File contents
10REM >NewPD.!StickyBrd.!RunImage
20REM Public Domain
30REM By David J. Seery
40REM LEN David J. Seery 1992
50REM Current version: 0.80
60
70SYS "XHourglass_On"
80ON ERROR x%=FNerror("Fatal Error (type "+STR$ERR+"/internal error code "+STR$ERL+") "+REPORT$+"...Re-run & try again",1):END
90DIM q% 1200,ind% &400,ind2% &400,menu% 2600,ind3% &400
100DIM ind4% &400,pointer% 500,file$(80),type(80),ind5% &500,ind6% &600
110DIM x(80),y(80),ftype$(80),filetype(80),ind8% &400
120DIM ind9% &500,ind10% &400,filemen% 512
130DIM object% 20,ind14% &600,openparent% 20,main_w% 800
140DIM ind15% &500,fgb% 20,bgb% 20,ind16% &350,modlinfo% 800
150DIM modlmenu% 2000:REM plenty of space for module menu (!)
160DIM modl$(20),modl(20),modli$(20),modlp$(20),modla$(20),modlv$(20)
170DIM modlinf(20),mcode% 300,config_file% 3000,mcode2% 100
180DIM time_block% 20,time_buff% 20
190DIM sprite% &8500:sprite%!0=&8500:sprite%!8=16:SYS "XOS_SpriteOp",9+256,sprite%
200DIM cols% 16,scale% 16
210stayopen=FALSE:spritefile$="":desktop$="":f$="":clockhandle%=-1:clck=FALSE:appdata=FALSE:tiled=FALSE:adjust=FALSE:sploaded=FALSE:modlptr=0:clockx%=1079:clocky%=1023:clocking%=FALSE:new_app$="":file$()="":turbo%=FALSE:locked%=FALSE
220$q%="TASK"
230SYS "XWimp_Initialise",200,!q%,"StickyBrd" TO wimpver%,taskh%
240IF wimpver%<200 PROCtellemoff("Fatal Error (type -1): Wimp Manager out of date (requires 2.00 or later)"):SYS "XWimp_CloseDown":END
250SYS "XInterface_Initialise",taskh%
260SYS "XWimp_OpenTemplate",,"<StickyBrdRes$Dir>.Templates"
270SYS "XWimp_LoadTemplate",,q%,ind8%,ind8%+&400,-1,"clock",0
280SYS "XWimp_CreateWindow",,q% TO clock%
290SYS "XWimp_LoadTemplate",,q%,ind%,ind%+&400,-1,"info",0
300SYS "XWimp_CreateWindow",,q% TO infowind%
310SYS "XWimp_LoadTemplate",,q%,ind2%,ind2%+&400,-1,"moreinfo",0
320SYS "XWimp_CreateWindow",,q% TO moreinfo%
330SYS "XWimp_LoadTemplate",,main_w%,ind3%,ind3%+&400,-1,"main",0
340SYS "XWimp_CreateWindow",,main_w% TO main%
350SYS "XWimp_CreateWindow",,main_w% TO main1%
360SYS "XWimp_LoadTemplate",,q%,ind4%,ind4%+&400,-1,"backdrop",0
370SYS "XWimp_CreateWindow",,q% TO backdrop%
380SYS "XWimp_LoadTemplate",,q%,ind5%,ind5%+&500,-1,"saveas",0
390SYS "XWimp_CreateWindow",,q% TO saveas%
400SYS "XWimp_LoadTemplate",,q%,ind6%,ind6%+&600,-1,"about",0
410SYS "XWimp_CreateWindow",,q% TO about%
420SYS "XWimp_LoadTemplate",,q%,ind9%,ind9%+&500,-1,"warning",0
430SYS "XWimp_CreateWindow",,q% TO warning%
440SYS "XWimp_LoadTemplate",,q%,ind10%,ind10%+&400,-1,"loaded",0
450SYS "XWimp_CreateWindow",,q% TO loaded%
460SYS "XWimp_LoadTemplate",,q%,ind14%,ind14%+&600,-1,"abackdrop",0
470SYS "XWimp_CreateWindow",,q% TO aback%
480SYS "XWimp_LoadTemplate",,q%,ind15%,ind15%+&500,-1,"clockset",0
490SYS "XWimp_CreateWindow",,q% TO cset%
500SYS "XWimp_LoadTemplate",,modlinfo%,ind16%,ind16%+&350,-1,"modlinfo",0
510SYS "XWimp_CloseTemplate"
520PROCset_size
530exists%=OPENUP("<Wimp$Scrap>"):IF exists%>0 CLOSE#exists%
540IF exists%=0 OSCLI("Create <Wimp$Scrap>")
550PROCset_clock_flags(TRUE,FALSE,FALSE,FALSE,TRUE,TRUE)
560PROCmenu(1)
570PROCgrey_menu(menu%+2200,1)
580PROCassemble:!ind_q%=q%:!scl%=scale%:!col%=cols%
590
600PROCopenup(main%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%))
610firstrun%=TRUE
620quit%=FALSE
630
640ON ERROR CASE ERR OF
650 WHEN 175 : PROCtellemoff("Cannot copy error (type=1), handle="+STR$main%):appdata=FALSE
660 WHEN 214 : PROCtellemoff("Cannot copy error (type=2), handle="+STR$main%):appdata=FALSE
670 OTHERWISE : IF FNerror("Nonfatal error: "+REPORT$+" (internal error code "+STR$ERL+"), handle="+STR$main%+", sprite area at "+STR$~(sprite%)+" Shall I Quit ?",3)=1 PROCmodl_quit:SYS "XInterface_CloseDown",taskh%:SYS "XWimp_CloseDown":END
680ENDCASE
690IF firstrun% PROCload_modls
700SYS "XHourglass_Off"
710
720REPEAT
730SYS "XWimp_Poll",,q% TO reason%
740SYS "XInterface_PreProcessKey",reason%,q%,taskh%
750SYS "XInterface_Poll",reason%,q%,taskh%
760CASE reason% OF
770WHEN 1 : PROCredraw
780WHEN 2 : SYS "XWimp_OpenWindow",,q%
790WHEN 3 : SYS "XWimp_CloseWindow",,q%
800 IF !q%=backdrop% PROCputiconsprite(backdrop%,4,"toptoff")
810 IF INKEY TRUE PROCiconise(!q%)
820WHEN 6 : PROCcheckmouse
830WHEN 7 : sf$=FNlastbit(sf$):PROCdragend
840WHEN 9 : PROCprocess_menu
850WHEN 17,18 : PROCmessage
860WHEN 19 : PROCmess_ack
870WHEN 0 : PROCupdate_clock:PROCpass_null:PROCtitlemenu
880ENDCASE
890IF firstrun%=TRUE firstrun%=FALSE:PROCopenup(loaded%,315,662,650,300)
900IF clck PROCopenup(clock%,clockx%,clocky%,200,200)
910UNTIL quit%
920SYS "XInterface_CloseDown",taskh%
930SYS "XWimp_CloseDown":END
940
950DEF FNiconbar
960LOCAL i%
970q%!0=-1
980q%!4=0
990q%!8=0
1000q%!12=68
1010q%!16=96
1020q%!20=&2002
1030$(q%+24)="!StickyBrd"
1040SYS "XWimp_CreateIcon",,q% TO i%
1050=i%
1060
1070DEF PROCmessage
1080your_ref%=q%!8
1090my_ref%=q%!12
1100CASE (q%!16) OF
1110WHEN 0 : quit%=TRUE
1120WHEN 1 : IF q%!20<>saveas% THEN
1130 IF appdata=TRUE AND adjust=FALSE THEN
1140 PROCwarning
1150 ENDPROC
1160 ENDIF
1170 SYS "XOS_ReadVarVal","Wimp$Scrap",,-1,0,3 TO ,,exists%
1180 IF exists%=0 PROCtellemoff("Wimp$Scrap not defined"):ENDPROC
1190 q%!36=-1:PROCstring0(q%+44,"<Wimp$Scrap>")
1200 !q%=(48+LEN"<Wimp$Scrap>")ANDNOT3
1210 q%!12=q%!8:q%!16=2:SYS "XWimp_SendMessage",17,q%,q%!4
1220 scrapref%=q%!8:appdata=TRUE
1230 ENDIF
1240WHEN 2 : PROCdosave
1250WHEN 3 : PROClf
1260WHEN 5 : PROCintercept
1270WHEN 8 : PROCmodl_quit
1280WHEN &502 : PROCsendhelp
1290WHEN &400C0 : PROCmenu_message
1300WHEN &400C1 : PROCset_size:PROCpix_trans
1310ENDCASE
1320ENDPROC
1330
1340DEF PROCread_size(RETURN win_maxx%,RETURN win_maxy%,RETURN win_miny%)
1350SYS "XOS_ReadModeVariable",-1,4 TO ,,eig%
1360SYS "XOS_ReadModeVariable",-1,11 TO ,,limit%:limit%+=1
1370win_maxx%=limit%<<eig%
1380SYS "XOS_ReadModeVariable",-1,5 TO ,,eig%
1390SYS "XOS_ReadModeVariable",-1,12 TO ,,limit%:limit%+=1
1400win_maxy%=limit%<<eig%
1410win_miny%=140+(1<<eig%)
1420ENDPROC
1430
1440DEF PROCset_size:win_maxx%=0:win_maxy%=0:win_miny%=0
1450PROCread_size(win_maxx%,win_maxy%,win_miny%)
1460PROCshut(main%)
1470pointer%!0=main%:SYS "XWimp_DeleteWindow",,pointer%
1480pointer%!0=main1%:SYS "XWimp_DeleteWindow",,pointer%
1490main_w%!44=-(win_maxy%-win_miny%):main_w%!48=win_maxx%
1500SYS "Wimp_CreateWindow",,main_w% TO main%
1510SYS "Wimp_CreateWindow",,main_w% TO main1%
1520pointer%!0=main%:pointer%!4=0:SYS "Wimp_GetIconState",,pointer%
1530SYS "Wimp_DeleteIcon",,pointer%
1540pointer%!4=main%:pointer%!8=0:pointer%!12=-(win_maxy%-win_miny%)
1550pointer%!16=win_maxx%:pointer%!20=0
1560SYS "Wimp_CreateIcon",,pointer%+4
1570IF sploaded=TRUE AND tiled=FALSE PROCputiconsprite(main%,0,backspname$)
1580FOR I=0 TO 80
1590IF file$(I)<>"" THEN
1600 spname$=ftype$(I)
1610 SYS "XWimp_SpriteOp",40,,ftype$(I) TO ;flags%
1620 IF (flags% AND 1)=1 THEN
1630 IF filetype(I)=&2000 spname$="application"
1640 IF filetype(I)<>&2000 spname$="file_xxx"
1650 ENDIF
1660 fg$=STR$~(fg):bg$=STR$~(bg):flag$=bg$+fg$+"018039":flag=EVAL("&"+flag$)
1670 PROCcreate_icon(main%,0,x(I)-50,x(I)+115,-(1024-(y(I)-65)),65,spname$,&4701801A)
1680 name$=FNlastbit(file$(I)):wid%=(LENname$)*16
1690 PROCcreate_icon(main%,0,(x(I)-(wid%/2))+30,(x(I)+(wid%/2))+30,-(1024-(y(I)-115)),36,name$,flag)
1700 PROCputiconsprite(main%,i%-1,spname$)
1710ENDIF
1720NEXT
1730PROCopenup(main%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%))
1740ENDPROC
1750
1760DEF PROCcheckmouse
1770handle=(q%!12)
1780icon%=q%!16
1790CASE (q%!12) OF
1800WHEN main%,main1%
1810CASE (q%!8) OF
1820WHEN 4 : IF q%!16>0 PROCset_icon(q%!12,q%!16):PROCrun(icon%)
1830WHEN 2 : IF q%!16>0 THEN:PROCsetupinfo:PROCsetmenuitem:ENDIF
1840 IF q%!16=0 THEN:PROCsetclearmenu:ENDIF
1850 SYS "XWimp_CreateMenu",,menu%,!q%-64,q%!4
1860WHEN &10 : IF q%!16>0 adjust=TRUE:sf$=FNlastbit(file$(q%!16)):PROCdragabout(q%!16)
1870WHEN &40 : IF q%!16>0 adjust=FALSE:sf$=FNlastbit(file$(q%!16)):PROCdragabout(q%!16)
1880ENDCASE
1890WHEN infowind%
1900CASE (q%!8) OF
1910WHEN 4 : CASE q%!16 OF
1920WHEN 9 : PROCslabicon:SYS "XWimp_CreateMenu",,-1:PROCopenup(moreinfo%,240,762,800,600)
1930ENDCASE
1940ENDCASE
1950WHEN backdrop%
1960CASE (q%!8) OF
1970WHEN 4 : CASE q%!16 OF
1980WHEN 4 : PROCstaytoggle
1990WHEN 5 : PROCslabicon:PROCputiconsprite(main%,0,""):spritefile$="":sploaded=FALSE
2000WHEN 6 : tiled=TRUE:PROCputiconsprite(backdrop%,6,"tradioon"):PROCputiconsprite(backdrop%,8,"tradiooff")
2010WHEN 8 : tiled=FALSE:PROCputiconsprite(backdrop%,6,"tradiooff"):PROCputiconsprite(backdrop%,8,"tradioon")
2020ENDCASE
2030ENDCASE
2040WHEN saveas%
2050CASE (q%!8) OF
2060WHEN 4 : CASE q%!16 OF
2070WHEN 3 : PROCslabicon:PROCshut(saveas%):sf$=FNtrans("StickyBrdDesktop$Dir")+"."+FNgeticondata(saveas%,2)
2080 PROCload_new_desktop
2090WHEN 4 : PROCslabicon:PROCshut(saveas%):sf$=FNtrans("StickyBrdDesktop$Dir")+"."+FNgeticondata(saveas%,2)
2100 PROCsave_disc
2110ENDCASE
2120ENDCASE
2130WHEN moreinfo%
2140CASE q%!8 OF
2150WHEN 4 : CASE q%!16 OF
2160 WHEN 14 : PROCslabicon:PROCshut(moreinfo%):IF INKEY TRUE PROCiconise(moreinfo%)
2170ENDCASE
2180ENDCASE
2190WHEN warning%
2200CASE q%!8 OF
2210 WHEN 4 : CASE q%!16 OF
2220 WHEN 4 : PROCslabicon:PROCshut(warning%)
2230 WHEN 5 : PROCslabicon:PROCshut(warning%):appdata=0
2240 ENDCASE
2250ENDCASE
2260WHEN loaded%
2270CASE q%!8 OF
2280 WHEN 4 : CASE q%!16 OF
2290 WHEN 5 : PROCslabicon:PROCshut(loaded%)
2300 WHEN 6 : PROCslabicon:PROCshut(loaded%):OSCLI "WimpTask <StickyBrd$Dir>.!Help"
2310 ENDCASE
2320ENDCASE
2330WHEN cset%
2340CASE q%!8 OF
2350 WHEN 4 : CASE q%!16 OF
2360 WHEN 4 : PROCaddh(2)
2370 WHEN 5 : PROCsubh(2)
2380 WHEN 6 : PROCaddm(3)
2390 WHEN 7 : PROCsubm(3)
2400 WHEN 8 : PROCslabicon:PROCsettime(FNgeticondata(cset%,2),FNgeticondata(cset%,3))
2410 ENDCASE
2420ENDCASE
2430WHEN clock%
2440CASE q%!8 OF
2450 WHEN 4,1 : PROCsavedragbox(clock%,0):clocking%=TRUE
2460ENDCASE
2470OTHERWISE : PROCmodl_mclick(handle,icon%,q%!8)
2480ENDCASE
2490ENDPROC
2500
2510DEF PROCmenu(fvar)
2520LOCAL fg$,bg$,flag$
2530mblk%=menu%
2540flags=&7000021
2550IF fvar=1 fg=7:bg=4
2560fg$=STR$~(fg):bg$=STR$~(bg)
2570flag$=bg$+FNfgcol(bg)+"000121":bflag=EVAL("&"+flag$)
2580flag$=fg$+FNfgcol(fg)+"000121":fflag=EVAL("&"+flag$)
2590IF fvar=1 $object%="File ''"
2600IF fvar=1 $openparent%="Open Parent"
2610IF fvar=1 $fgb%="Text Foreground"
2620IF fvar=1 $bgb%="Text Background"
2630PROCheader("StickyBrd",18)
2640PROCentry(&02,menu%+400,flags,"Misc")
2650PROCindirect(&00,menu%+300,&07000121,object%)
2660PROCentry(&00,menu%+1900,flags,"Backdrop")
2670PROCentry(&00,-1,flags,"Clear All")
2680PROCentry(&00,menu%+500,flags,"Colours")
2690PROCentry(&00,menu%+1600,flags,"Options")
2700PROCentry(&02,modlmenu%,flags,"Modules")
2710PROCentry(&80,-1,flags,"Quit")
2720IF modlptr=0 PROCgrey_menu(menu%,6)
2730mblk%=menu%+300
2740PROCheader("Object",12)
2750PROCentry(&00,about%,flags,"Info")
2760PROCentry(&00,-1,flags,"Remove")
2770PROCindirect(&80,-1,&07000121,openparent%)
2780mblk%=menu%+400
2790PROCheader("Misc",9)
2800PROCentry(&00,infowind%,flags,"Info")
2810PROCentry(&00,about%,flags,"File")
2820PROCentry(&80,saveas%,flags,"Desktop")
2830mblk%=menu%+500
2840PROCheader("Colours",16)
2850PROCindirect(&00,menu%+600,fflag,fgb%)
2860PROCindirect(&80,menu%+1100,bflag,bgb%)
2870mblk%=menu%+600
2880PROCheader("Colour",4)
2890PROCentry(&00,-1,&07000019,"0")
2900PROCentry(&00,-1,&17000019,"1")
2910PROCentry(&00,-1,&27000019,"2")
2920PROCentry(&00,-1,&30000019,"3")
2930PROCentry(&00,-1,&40000019,"4")
2940PROCentry(&00,-1,&50000019,"5")
2950PROCentry(&00,-1,&60000019,"6")
2960PROCentry(&00,-1,&70000019,"7")
2970PROCentry(&00,-1,&80000019,"8")
2980PROCentry(&00,-1,&97000019,"9")
2990PROCentry(&00,-1,&A0000019,"10")
3000PROCentry(&00,-1,&B0000019,"11")
3010PROCentry(&00,-1,&C7000019,"12")
3020PROCentry(&00,-1,&D0000019,"13")
3030PROCentry(&00,-1,&E7000019,"14")
3040PROCentry(&80,-1,&F7000019,"15")
3050REM phew! and now again...
3060mblk%=menu%+1100
3070PROCheader("Colour",4)
3080REM here we go
3090PROCentry(&00,-1,&07000019,"0")
3100PROCentry(&00,-1,&17000019,"1")
3110PROCentry(&00,-1,&27000019,"2")
3120PROCentry(&00,-1,&30000019,"3")
3130PROCentry(&00,-1,&40000019,"4")
3140PROCentry(&00,-1,&50000019,"5")
3150PROCentry(&00,-1,&60000019,"6")
3160PROCentry(&00,-1,&70000019,"7")
3170PROCentry(&00,-1,&80000019,"8")
3180PROCentry(&00,-1,&97000019,"9")
3190PROCentry(&00,-1,&A0000019,"10")
3200PROCentry(&00,-1,&B0000019,"11")
3210PROCentry(&00,-1,&C7000019,"12")
3220PROCentry(&00,-1,&D0000019,"13")
3230PROCentry(&00,-1,&E7000019,"14")
3240PROCentry(&80,-1,&F7000019,"15")
3250PROCwimp_tick(menu%+600,7)
3260PROCwimp_tick(menu%+1100,4)
3270mblk%=menu%+1600
3280PROCheader("Options",13)
3290PROCentry(&00,-1,flags,"Hide")
3300PROCentry(&02,-1,flags,"Restore")
3310PROCentry(&00-clck,menu%+2100,flags,"Clock")
3320PROCentry(&00,-1,flags,"Update")
3330PROCentry(&80-locked%,-1,flags,"Locked")
3340mblk%=menu%+1900
3350PROCheader("Backdrop",9)
3360PROCentry(&00,backdrop%,flags,"Load")
3370PROCentry(&00,aback%,flags,"Info")
3380PROCentry(&00,-1,flags,"Restore")
3390PROCentry(&80-turbo%,-1,flags,"Turbo")
3400mblk%=menu%+2100
3410PROCheader("Clock",9)
3420PROCentry(&00-emboss,-1,flags,"Embossed")
3430PROCentry(&00-recess,-1,flags,"Recessed")
3440PROCentry(&02-border,-1,flags,"Bordered")
3450PROCentry(&00-twelve,-1,flags,"HH:MM")
3460PROCentry(&00-twfour,-1,flags,"HH:MM:SS")
3470PROCentry(&02-hour,-1,flags,"24 Hour")
3480PROCentry(&80,-1,flags,"Set...")
3490ENDPROC
3500
3510DEF FNfgcol(col)
3520CASE col OF
3530WHEN 0,1,2,9,12,14,15 : ="7"
3540WHEN 3,4,5,6,7,8,10,11,13 : ="0"
3550ENDCASE
3560ENDPROC
3570
3580DEF PROCheader(T$,w)
3590$mblk%=T$
3600mblk%!12=&70207
3610mblk%!16=w*16
3620mblk%!20=40
3630mblk%!24=0
3640mblk%+=28
3650ENDPROC
3660
3670DEF PROCentry(A%,B%,C%,T$)
3680mblk%!0=A%
3690mblk%!4=B%
3700mblk%!8=C%
3710$(mblk%+12)=T$
3720mblk%+=24
3730ENDPROC
3740
3750DEF PROCindirect(A%,B%,C%,D%)
3760mblk%!0=A%
3770mblk%!4=B%
3780mblk%!8=C%
3790mblk%!12=D%
3800mblk%!16=-1
3810mblk%!20=20
3820mblk%+=24
3830ENDPROC
3840
3850DEF FNerror(e$,b%):!q%=0:$(q%+4)=e$+CHR$0
3860SYS "XWimp_ReportError",q%,b%,"StickyBrd" TO ,b%
3870=b%
3880
3890DEF PROClf
3900REM
3910f$=STRING$(250," "):f$="":T%=q%+44
3920WHILE ?T%<>0:f$+=CHR$?T%:T%+=1:ENDWHILE
3930IF q%!20=backdrop% AND q%!24=2 THEN
3940PROCloadbackdrop
3950ELSE
3960PROCaddtodesktop
3970ENDIF
3980PROCmodl_dataload(f$,q%!20,q%!24)
3990q%!12=q%!8:q%!16=4:SYS "XWimp_SendMessage",17,q%
4000ENDPROC
4010
4020DEF PROCredraw
4030IF q%!0=main% THEN
4040 IF tiled=TRUE THEN
4050 IF sploaded=TRUE THEN
4060 B%=q%
4070 CALL mcode%
4080 PROCmodl_redraw
4090 ENDPROC
4100 ENDIF
4110 ENDIF
4120ENDIF
4130PROCmodl_redraw
4140SYS "XWimp_RedrawWindow",,q% TO flag
4150WHILE flag<>0
4160SYS "XInterface_Render3dWindow",,q%
4170SYS "XWimp_GetRectangle",,q% TO flag
4180ENDWHILE
4190ENDPROC
4200
4210DEF PROCassemble
4220FOR pass%=8 TO 11 STEP 2
4230P%=mcode%:L%=mcode%+300
4240[OPT pass%
4250.start%
4260SWI "Wimp_RedrawWindow" ; Get Wimp manager to redraw window
4270.rl ; Start of redraw loop
4280CMP R0,#0 ; More to redraw ?
4290MOVEQ PC,R14 ; No, so exit (Program Counter = Link)
4300LDR R2,[R1,#4] ; }
4310LDR R3,[R1,#8] ; }
4320LDR R4,[R1,#12] ; } Get PWA offsets
4330LDR R5,[R1,#16] ; } & such like from R1 (i.e. q%)
4340LDR R6,[R1,#20] ; }
4350LDR R7,[R1,#24] ; }
4360SUB R0,R2,R6 ; Get min x
4370STR R0,mix% ; Store min x
4380SUB R0,R5,R7 ; Get max y
4390SUB R0,R0,#4 ; Correct
4400STR R0,may% ; Store max y
4410SUB R0,R4,R6 ; Get max x
4420SUB R0,R0,#4 ; Correct
4430STR R0,max% ; Store max x
4440SUB R0,R3,R7 ; Get min y
4450STR R0,miy% ; Store min y
4460.spr_num
4470MOV R0,#512 ; 'Plot sprite' reason code -- use indirected
4480ADD R0,R0,#52 ; Make up to 564 - can't represent directly
4490LDR R1,sp% ; Get sprite area
4500LDR R2,name% ; Get sprite name
4510MOV R5,#8 ; Plot type - overwrite, use mask
4520LDR R6,scl% ; Null
4530LDR R7,col% ; Null
4540MOV R8,#0 ; Null
4550LDR R9,miy% ; Minimum Y value
4560.yloop
4570 LDR R10,mix% ; Minimum X value
4580 .xloop
4590 MOV R3,R10 ; X (Taken from loop)
4600 MOV R4,R9 ; Y (Taken from loop)
4610 SWI "OS_SpriteOp" ; Plot it
4620 LDR R11,xinc% ; Get step size
4630 ADD R10,R10,R11 ; Increment X by step size
4640 LDR R11,max% ; Get maximum X
4650 CMP R10,R11 ; Compare
4660 BLE xloop ; Loop back if < max
4670 LDR R11,yinc% ; Get step size
4680 ADD R9,R9,R11 ; Increment Y by step size
4690 LDR R11,may% ; Get maximum Y
4700 CMP R9,R11 ; Compare
4710 BLE yloop ; Loop back if < max
4720LDR R1,ind_q% ; Get address of param block
4730SWI "Wimp_GetRectangle" ; Get next rectangle
4740B rl ; Branch back
4750.sp% EQUD 0
4760.name% EQUD 0
4770.xinc% EQUD 0:.yinc% EQUD 0
4780.max% EQUD 0:.mix% EQUD 0:.may% EQUD 0:.miy% EQUD 0
4790.ind_q% EQUD 0:.scl% EQUD 0:.col% EQUD 0
4800ALIGN
4810.end%
4820]
4830NEXT pass%
4840FOR pass%=0 TO 3 STEP 2
4850P%=mcode2%:L%=mcode2%+100
4860[OPT pass%
4870ADR R1,time_block%
4880MOV R0,#3
4890STRB R0,[R1]
4900MOV R0,#14
4910SWI "OS_Word"
4920MOV PC,R14
4930]
4940NEXT pass%
4950ENDPROC
4960
4970DEF PROCre_asm(type%)
4980CASE type% OF
4990 WHEN TRUE : P%=spr_num
5000 [OPT 2
5010 MOV R0,#512
5020 ADD R0,R0,#34
5030 ]
5040 WHEN FALSE: P%=spr_num
5050 [OPT 2
5060 MOV R0,#512
5070 ADD R0,R0,#52
5080 ]
5090ENDCASE
5100ENDPROC
5110
5120DEF PROCpix_trans
5130IF sploaded THEN
5140SYS "Wimp_ReadPixTrans",&100,sprite%,backspname$,,,,scale%,cols%
5150ENDIF
5160ENDPROC
5170
5180DEF PROCprocess_menu
5190SYS "XWimp_GetPointerInfo",,pointer%:j%=(pointer%!8=1)
5200CASE handle OF
5210WHEN main%,main1%
5220 CASE q%!0 OF
5230 WHEN 1 : CASE q%!4 OF
5240 WHEN 1 : IF (icon% MOD 2=0) icon%-=1
5250 PROCdelete(icon%,1)
5260 PROCmodl_delete(icon%,type(icon%))
5270 WHEN 2 : IF (icon% MOD 2=0) icon%-=1
5280 OSCLI("WimpTask Filer_OpenDir "+FNdir(file$(icon%)))
5290 ENDCASE
5300 WHEN 2 : CASE q%!4 OF
5310 WHEN 2 : sf$=desktop$
5320 PROCload_new_desktop
5330 WHEN 3 : turbo%=NOT turbo%:PROCmenu(0):PROCre_asm(turbo%)
5340 ENDCASE
5350 WHEN 3 : PROCdeleteall
5360 WHEN 4 : CASE q%!4 OF
5370 WHEN 0 : IF q%!8<>-1 PROCfg
5380 WHEN 1 : IF q%!8<>-1 PROCbg
5390 ENDCASE
5400 WHEN 5 : CASE q%!4 OF
5410 WHEN 0 : PROCshut(main%):PROCopenup(main1%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%)):PROCgrey_menu(menu%+2200,0)
5420 PROCgrey_menu(menu%+2200,1)
5430 WHEN 1 : PROCshut(main1%):PROCopenup(main%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%)):IF clck=TRUE PROCopenup(clock%,clockx%,clocky%,200,200)
5440 PROCgrey_menu(menu%+2200,1)
5450 PROCgrey_menu(menu%+2200,0)
5460 WHEN 2 : CASE q%!8 OF
5470 WHEN -1 : clck=NOT clck:PROCmenu(0):PROCgrey_menu(menu%+2200,1):PROCclock
5480 WHEN 0 : PROCset_clock_flags(TRUE,FALSE,FALSE,twelve,twfour,hour):PROCmenu(0):PROCgrey_menu(menu%+2200,1):PROCrs
5490 WHEN 1 : PROCset_clock_flags(FALSE,TRUE,FALSE,twelve,twfour,hour):PROCmenu(0):PROCgrey_menu(menu%+2200,1):PROCrs
5500 WHEN 2 : PROCset_clock_flags(FALSE,FALSE,TRUE,twelve,twfour,hour):PROCmenu(0):PROCgrey_menu(menu%+2200,1):PROCrs
5510 WHEN 3 : PROCset_clock_flags(emboss,recess,border,TRUE,FALSE,hour):PROCmenu(0):PROCgrey_menu(menu%+2200,1)
5520 WHEN 4 : PROCset_clock_flags(emboss,recess,border,FALSE,TRUE,hour):PROCmenu(0):PROCgrey_menu(menu%+2200,1)
5530 WHEN 5 : PROCset_clock_flags(emboss,recess,border,twelve,twfour,NOT hour):PROCmenu(0):PROCgrey_menu(menu%+2200,1)
5540 WHEN 6 : cx%=pointer%!0:cy%=pointer%!4:PROCsetup_sclck:PROCopenup(cset%,cx%,cy%,500,250):SYS "XWimp_SetCaretPosition",cset%,2,,,-1,LEN(FNgeticondata(cset%,2))
5550 ENDCASE
5560 WHEN 3 : q%!8=fg:PROCfg
5570 WHEN 4 : locked%=NOT locked%:PROCmenu(0)
5580 ENDCASE
5590 WHEN 6 : PROCmodl_sendmenu
5600 WHEN 7 : PROCmodl_quit:quit%=TRUE
5610ENDCASE
5620WHEN &FFFFFFFF
5630 FOR step%=0 TO q%!0
5640 q$=$(filemen%+28+(24*step%)+12)
5650 filepath$+="."+q$
5660 NEXT
5670 SYS "XWimp_StartTask","Filer_OpenDir "+filepath$
5680ENDCASE
5690IF j% THEN SYS "XWimp_CreateMenu",,menu%,pointer%!0,pointer%!4
5700ENDPROC
5710
5720DEF PROCopenup(whandle,x,y,w,h)
5730pointer%!0=whandle
5740pointer%!4=x:pointer%!8=y-h
5750pointer%!12=x+w:pointer%!16=y
5760pointer%!20=0:pointer%!24=0
5770IF whandle=main% OR whandle=main1% OR whandle=clock% pointer%!28=-2 ELSE pointer%!28=-1
5780SYS "XWimp_OpenWindow",,pointer%
5790ENDPROC
5800
5810DEF PROCslabicon
5820SYS "XInterface_SlabButton",,q%
5830q%!8=0
5840SYS "XInterface_SlabButton",,q%
5850ENDPROC
5860
5870DEF FNgeticondata(window%,icon%)
5880pointer%!0=window%
5890pointer%!4=icon%
5900SYS "XWimp_GetIconState",,pointer%
5910=$(pointer%!28)
5920
5930DEF PROCputicondata(window%,icon%,T$)
5940pointer%!0=window%
5950pointer%!4=icon%
5960SYS "XWimp_GetIconState",,pointer%
5970pointer%!8=0
5980pointer%!12=0
5990$(pointer%!28)=T$
6000SYS "XWimp_SetIconState",,pointer%
6010ENDPROC
6020
6030DEF PROCloadbackdrop
6040sploaded=TRUE:PROCputiconsprite(main%,0,"")
6050LOCAL n%,o%,b%,q$,h%,x%,y%,v%,m%,var%,z$
6060OSCLI("IconSprites "+f$)
6070SYS "OS_SpriteOp",256+10,sprite%,f$
6080h%=OPENIN(f$)
6090n%=FNb:o%=FNb:b%=-4
6100PTR#h%=o%+b%:b%+=o%:o%=FNb
6110q$="":FOR var=1 TO 12:q$+=CHR$(BGET#h%):NEXT var
6120palette$="No"
6130x%=FNb:y%=FNb:v%=-FNb+FNb-31:m%=FNb:IFm%=PTR#h%-4 palette$="No" ELSE palette$="Yes"
6140IF m% EOR FNb:z$="Yes" ELSE z$="N"
6150m%=FNb:SYS "XOS_ReadModeVariable",m%,9 TO ,,var%
6160x%=(32*(x%+1)+v%) DIV 2^var%:spx%=x%:spy%=y%+1:backspname$=q$
6170SYS "XOS_ReadModeVariable",m%,4 TO ,,var%
6180sp1x%=spx%<<var%
6190SYS "XOS_ReadModeVariable",m%,5 TO ,,var%
6200sp1y%=spy%<<var%
6210CLOSE#h%
6220SYS "XOS_CheckModeValid",m% TO exists%
6230IF exists%<>-1 AND exists%<>-2 SYS "XWimp_SetMode",m%
6240PROCstring_at_address(backspname$,loc%)
6250!name%=loc%:!sp%=sprite%:!xinc%=sp1x%:!yinc%=sp1y%
6260PROCpix_trans
6270IF tiled=TRUE PROCtiled(m%,spx%,spy%,q$,x%,y%+1):ENDPROC
6280PROCputiconsprite(main%,0,backspname$)
6290spritefile$=f$
6300PROCputicondata(aback%,3,f$)
6310PROCputicondata(aback%,4,backspname$)
6320PROCputicondata(aback%,5,palette$)
6330PROCputicondata(aback%,7,"Centred")
6340PROCputicondata(aback%,14,STR$m%)
6350PROCputicondata(aback%,16,STR$x%)
6360PROCputicondata(aback%,18,STR$(y%+1))
6370SYS "XWimp_CreateMenu",,-1
6380ENDPROC
6390
6400DEF PROCdisplay_block(max)
6410REM debugging routine
6420REM
6430REM Displays wimp parameter block
6440:
6450FOR I=0 TO max STEP 4
6460IF I=24 x%=FNerror(STR$~(pointer%!I),1):NEXT
6470IF I=28 x%=FNerror($(pointer%+I),1):NEXT
6480IF I=32 x%=FNerror($(pointer%+I),1):NEXT:ENDPROC
6490REM and now general purpose stuff
6500x%=FNerror(STR$pointer%!I,1)
6510NEXT
6520:
6530ENDPROC
6540
6550DEF PROCputiconsprite(window%,icon%,T$)
6560pointer%!0=window%:pointer%!4=icon%
6570SYS "XWimp_GetIconState",,pointer%
6580SYS "XWimp_DeleteIcon",,pointer%
6590pointer%!4=window%:$(pointer%+28)=T$:pointer%+=4
6600SYS "XWimp_CreateIcon",,pointer%:SYS "XWimp_ForceRedraw",pointer%!0,pointer%!4,pointer%!8,pointer%!12,pointer%!16:pointer%-=4:ENDPROC
6610
6620DEF PROCcreate_icon(handle,addr,minx,maxx,miny,ht,t$,flags)
6630point%=q%+400
6640point%!0=handle
6650point%!4=minx
6660point%!8=miny
6670point%!12=maxx
6680point%!16=miny+ht
6690point%!20=flags
6700IF addr=0 THEN
6710$(point%+24)=t$
6720ELSE
6730point%!24=addr
6740point%!28=-1
6750point%!32=32
6760ENDIF
6770SYS "Wimp_CreateIcon",,point% TO i%
6780ENDPROC
6790
6800DEF PROCaddtodesktop
6810type$=""
6820IF q%!40<>&2000 AND q%!40<>&1000 type$=FNgetftype(q%!40)
6830IF q%!40=&2000 THEN type$=FNlastbit(f$)
6840IF q%!40=&1000 type$="directory"
6850spname$=type$
6860SYS "XWimp_SpriteOp",40,,type$ TO ;flags%
6870IF (flags% AND 1)=1 THEN
6880 IF q%!40=&2000 spname$="application"
6890 IF q%!40<>&2000 AND q%!40<>&1000 spname$="file_xxx"
6900ENDIF
6910fg$=STR$~(fg):bg$=STR$~(bg):flag$=bg$+fg$+"018039":flag=EVAL("&"+flag$)
6920SYS "XWimp_GetPointerInfo",,pointer%
6930pointer%!0-=32:pointer%!4+=32
6940PROCcreate_icon(main%,0,pointer%!0-50,pointer%!0+115,-(1024-(pointer%!4-65)),65,spname$,&4701801A):file$(i%)=f$:x(i%)=pointer%!0:y(i%)=pointer%!4:ftype$(i%)=type$:filetype(i%)=q%!40
6950IF q%!40=&2000 type(i%)=0 ELSE IF q%!40=&1000 type(i%)=1 ELSE type(i%)=2
6960name$=FNlastbit(f$):wid%=(LENname$)*16
6970PROCcreate_icon(main%,0,(pointer%!0-(wid%/2))+30,(pointer%!0+(wid%/2))+30,-(1024-(pointer%!4-115)),36,name$,flag)
6980PROCputiconsprite(main%,i%-1,spname$)
6990SYS "XWimp_ForceRedraw",point%!0,point%!4,point%!8,point%!12,point%!16
7000ENDPROC
7010
7020DEF PROCstaytoggle
7030IF stayopen=FALSE stayopen=TRUE ELSE stayopen=FALSE
7040IF stayopen=TRUE PROCputiconsprite(backdrop%,4,"topton"):pointer%!0=backdrop%:SYS "XWimp_GetWindowState",,pointer%:SYS "XWimp_CreateMenu",,-1:pointer%!28=-1:SYS "XWimp_OpenWindow",,pointer%
7050IF stayopen=FALSE PROCputiconsprite(backdrop%,4,"toptoff")
7060ENDPROC
7070
7080DEF FNrtoz(T%):q$="":WHILE ?T%<>0:q$+=CHR$?T%:T%+=1:ENDWHILE:=q$
7090
7100DEF FNxy
7110REM Debug FN
7120=STR$pointer%!0+"/"+STR$pointer%!4
7130
7140DEF FNzero(expression)
7150=0-expression
7160
7170DEF FNlastbit(s$)
7180IF s$="<Wimp$Scrap>" ="Tempory"
7190WHILE INSTR(s$,":")>0
7200s$=MID$(s$,INSTR(s$,":")+1)
7210ENDWHILE
7220WHILE INSTR(s$,".")>0
7230s$=MID$(s$,INSTR(s$,".")+1)
7240ENDWHILE
7250=s$
7260
7270DEF PROCrun(val)
7280IF (val MOD 2=0) val-=1
7290SYS "XWimp_GetPointerInfo",,pointer%
7300x=pointer%!0-32:y=pointer%!4+32
7310CASE type(val) OF
7320WHEN 3
7330CASE file$(val) OF
7340 WHEN "Info" : PROCopenup(infowind%,x,y,650,450)
7350 WHEN "More Info" : PROCopenup(moreinfo%,x,y,800,600)
7360 WHEN "Backdrop" : PROCopenup(backdrop%,x,y,540,450)
7370 WHEN "Save" : PROCopenup(saveas%,x,y,300,180)
7380 WHEN "Object" : PROCopenup(about%,x,y,780,350)
7390 WHEN "Clock" : PROCopenup(clock%,x,y,200,100)
7400 WHEN "Warning" : PROCopenup(warning%,x,y,650,300)
7410 WHEN "Loaded" : PROCopenup(loaded%,x,y,650,300)
7420 WHEN "BackInfo" : PROCopenup(aback%,x,y,780,360)
7430 WHEN "ClockSet" : PROCsetup_sclck:PROCopenup(cset%,x,y,500,250):SYS "XWimp_SetCaretPosition",cset%,2,,,-1,LEN(FNgeticondata(cset%,2))
7440 OTHERWISE : PROCsetmodlinfo(FNmodl_handle(file$(val))):PROCopenup(FNmodl_handle(file$(val)),x,y,FNmodl_xw(file$(val)),FNmodl_yh(file$(val)))
7450ENDCASE
7460 WHEN 1 : OSCLI("WimpTask Filer_OpenDir "+file$(val))
7470 WHEN 2 : PROCfile_run(file$(val),filetype(val))
7480 WHEN 0 : IF INKEY TRUE THEN
7490 OSCLI("WimpTask Filer_OpenDir "+file$(val))
7500 ENDIF
7510 IF NOT(INKEY TRUE) THEN
7520 OSCLI("WimpTask Run "+file$(val))
7530 ENDIF
7540 OTHERWISE : PROCmodl_click(type(val),file$(val),x,y)
7550ENDCASE
7560ENDPROC
7570
7580DEF PROCdelete(val,flag)
7590IF locked% ENDPROC
7600IF type(val)>3 AND flag=1 ENDPROC
7610pointer%!0=main%
7620pointer%!4=val
7630SYS "XWimp_GetIconState",,pointer%
7640SYS "XWimp_DeleteIcon",,pointer%
7650SYS "XWimp_ForceRedraw",pointer%!0,pointer%!4,pointer%!8,pointer%!12,pointer%!16
7660pointer%!4=val+1
7670SYS "XWimp_GetIconState",,pointer%
7680SYS "XWimp_DeleteIcon",,pointer%
7690SYS "XWimp_ForceRedraw",pointer%!0,pointer%!4,pointer%!8,pointer%!12,pointer%!16
7700IF clck PROCopenup(clock%,clockx%,clocky%,200,200)
7710file$(val)="":type(val)=0:x(val)=0:y(val)=0:ftype$(val)="":filetype(val)=0
7720ENDPROC
7730
7740DEF PROCshut(handle)
7750pointer%!0=handle
7760SYS "XWimp_CloseWindow",,pointer%
7770ENDPROC
7780
7790DEF PROCset(window,icon)
7800pointer%!0=window
7810pointer%!4=icon
7820pointer%!8=&200000
7830pointer%!12=0
7840SYS "XWimp_SetIconState",,pointer%
7850ENDPROC
7860
7870DEF PROCsavedragbox(window%,icon%)
7880LOCAL x%,y%,ysize%
7890!pointer%=window%
7900SYS "XWimp_GetWindowState",,pointer%
7910ysize%=pointer%!16-pointer%!8
7920x%=pointer%!4
7930y%=pointer%!8
7940IF window%=main% THEN
7950 pointer%!4=icon%+1
7960 SYS "XWimp_GetIconState",,pointer%
7970 ny%=pointer%!12
7980ENDIF
7990pointer%!4=icon%
8000SYS "XWimp_GetIconState",,pointer%
8010sf$=FNlastbit(sf$)
8020pointer%!8+=x%
8030IF window%=main% THEN
8040 pointer%!12=ny%+y%+ysize%
8050ELSE
8060 pointer%!12+=y%+ysize%
8070ENDIF
8080pointer%!16+=x%
8090pointer%!20+=y%+ysize%
8100pointer%!24=0
8110pointer%!28=0
8120pointer%!32=&7FFFFFFF
8130pointer%!36=&7FFFFFFF
8140pointer%!0=0
8150pointer%!4=5
8160SYS "XWimp_DragBox",,pointer%
8170ENDPROC
8180
8190DEF PROCimport
8200SYS "XWimp_GetPointerInfo",,pointer%
8210pointer%!32=pointer%!4 :thirtytwo%=pointer%!32
8220pointer%!28=pointer%!0 :twentyeight%=pointer%!28
8230pointer%!24=pointer%!16 :twentyfour%=pointer%!24
8240pointer%!20=pointer%!12 :twenty%=pointer%!20
8250pointer%!16=1
8260pointer%!12=0
8270pointer%!36=0
8280pointer%!40=0
8290!pointer%=64
8300$(pointer%+44)=sf$
8310SYS "XWimp_SendMessage",17,pointer%,pointer%!20,pointer%!24
8320myref%=pointer%!8
8330ENDPROC
8340
8350DEF PROCdosave
8360sf$=FNrtoz(q%+44)
8370IF adjust=TRUE PROCdragged ELSE PROCcopy_file
8380ENDPROC
8390
8400DEF PROCtellemoff(e$)
8410LOCAL er%
8420er%=pointer%
8430!er%=0
8440$(er%+4)=e$+CHR$0
8450SYS "XWimp_ReportError",er%,1,"StickyBrd"
8460ENDPROC
8470
8480DEF PROCsave_disc
8490h%=OPENOUT(sf$)
8500PRINT#h%,fg,bg,tiled,clck,emboss,recess,border,twelve,twfour
8510PRINT#h%,clockx%,clocky%,hour,locked%
8520FOR I=0 TO 80
8530PRINT#h%,file$(I),type(I),x(I),y(I),ftype$(I),filetype(I)
8540NEXT
8550CLOSE#h%
8560IF sploaded SYS "OS_SpriteOp",12+256,sprite%,FNtrans("StickyBrdDesktop$Dir")+"."+RIGHT$(FNlastbit(sf$),8)+"SP"
8570PROCmodl_saveconfig
8580SYS "Wimp_CreateMenu",,-1:PROCshut(saveas%)
8590ENDPROC
8600
8610DEF PROCintercept
8620f$=STRING$(250," "):f$="":f$=FNrtoz(q%+44):new_app$=f$
8630CASE q%!40 OF
8640WHEN &FFD : IF FNlastbit(f$)="!Config" PROCload_new_placeit_file(f$)
8650OTHERWISE : ENDPROC
8660ENDCASE
8670q%!12=q%!8:q%!16=4:SYS "XWimp_SendMessage",17,q%
8680ENDPROC
8690
8700DEF PROCload_new_desktop
8710h%=0:LOCAL ERROR
8720ON ERROR LOCAL PROCtellemoff("Desktop file load error #"+STR$ERL+" ("+REPORT$+")"):ENDPROC
8730SYS "XHourglass_On"
8740PROCdeleteall
8750PROCmodl_clearback(1,sf$)
8760desktop$=sf$
8770h%=OPENUP(sf$)
8780INPUT#h%,nfg,nbg,tiled,clck,emboss,recess,border,twelve,twfour
8790INPUT#h%,clockx%,clocky%,hour,locked%
8800FOR I=0 TO 80
8810 REM SYS "XHourglass_Percentage",I
8820 INPUT#h%,file$(I),type(I),x(I),y(I),ftype$(I),filetype(I)
8830NEXT
8840CLOSE#h%:h%=0
8850spritefile$=FNtrans("StickyBrdDesktop$Dir")+"."+RIGHT$(FNlastbit(sf$),8)+"SP"
8860j%=OPENUP(spritefile$)
8870t=FALSE:IF j%>0 t=TRUE
8880CLOSE#j%
8890IF t THEN
8900 f$=spritefile$
8910 PROCloadbackdrop
8920ENDIF
8930FOR I=0 TO 80
8940 IF file$(I)<>"" THEN
8950 IF filetype(I)=&2000 THEN
8960 SYS "XWimp_SpriteOp",40,,ftype$(I) TO ;flags%
8970 IF (flags% AND 1)=1 THEN
8980 IF NOT(INKEY-3) THEN
8990 h%=OPENUP(file$(I)+".!Boot")
9000 IF h%=0 THEN
9010 i%=OPENUP(file$(I)+".!Sprites")
9020 IF i%<>0 CLOSE#i%:OSCLI("IconSprites "+file$(I)+".!Sprites")
9030 IF i%=0 CLOSE#i%
9040 ENDIF
9050 IF h%<>0 THEN
9060 CLOSE#h%
9070 OSCLI("Obey "+file$(I)+".!Boot")
9080 ENDIF
9090 IF h%=0 CLOSE#h%
9100 ENDIF
9110 ENDIF
9120 ENDIF
9130 ENDIF
9140 IF file$(I)<>"" THEN
9150 spname$=ftype$(I)
9160 SYS "XWimp_SpriteOp",40,,spname$ TO ;flags%
9170 IF (flags% AND 1)=1 THEN
9180 IF type(I)=0 spname$="application"
9190 IF type(I)=2 spname$="file_xxx"
9200 ENDIF
9210 PROCcreate_icon(main%,0,x(I)-50,x(I)+115,-(1024-(y(I)-65)),65,spname$,&4701801A)
9220 name$=FNlastbit(file$(I)):wid%=(LENname$)*16
9230 fg$=STR$~(fg):bg$=STR$~(bg):flag$=bg$+fg$+"018039":flag=EVAL("&"+flag$)
9240 PROCcreate_icon(main%,0,(x(I)-(wid%/2))+30,(x(I)+(wid%/2))+30,-(1024-(y(I)-115)),36,name$,flag)
9250 PROCputiconsprite(main%,i%-1,spname$)
9260 ENDIF
9270NEXT
9280PROCmenu(0):PROCgrey_menu(menu%+2200,1)
9290PROCshut(main%)
9300PROCopenup(main%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%))
9310PROCrs
9320dummy=q%!8
9330q%!8=nfg:PROCfg
9340q%!8=nbg:PROCbg
9350q%!8=dummy
9360IF tiled=TRUE THEN
9370 PROCputiconsprite(backdrop%,6,"tradioon")
9380 PROCputiconsprite(backdrop%,8,"tradiooff")
9390 ELSE
9400 PROCputiconsprite(backdrop%,6,"tradiooff")
9410 PROCputiconsprite(backdrop%,8,"tradioon")
9420ENDIF
9430REM inform modules
9440PROCmodl_deskstart
9450PROCshut(saveas%)
9460SYS "XHourglass_Off"
9470RESTORE ERROR
9480ENDPROC
9490
9500DEF PROCsetupinfo
9510IF (icon% MOD 2=0) icon%-=1
9520fil$=file$(icon%):IF fil$="<Wimp$Scrap>" fil$="Application Data"
9530IF LEFT$(fil$,1)="*" fil$=FNlastbit(fil$)
9540PROCputicondata(about%,6,fil$)
9550PROCputicondata(about%,7,FNftype(filetype(icon%)))
9560PROCputicondata(about%,8,FNtype(type(icon%)))
9570PROCputicondata(about%,9,desktop$)
9580spname$=ftype$(icon%)
9590SYS "XWimp_SpriteOp",40,,spname$ TO ;flags%
9600IF (flags% AND 1)=1 THEN
9610 IF type(icon%)=0 spname$="application"
9620 IF type(icon%)=2 spname$="file_xxx"
9630ENDIF
9640PROCputiconsprite(about%,11,spname$)
9650ENDPROC
9660
9670DEF FNtype(type)
9680CASE type OF
9690 WHEN 0 : ="Runs Application"
9700 WHEN 1 : ="Opens Directory"
9710 WHEN 2 : ="Executes File"
9720 WHEN 3 : ="Opens Window"
9730 WHEN 4 : ="Executes Command"
9740ENDCASE
9750="Module-Specific"
9760
9770DEF FNftype(type)
9780IF type=&FFFF ="Iconised Window"
9790IF type=&2000 ="Application"
9800IF type=&1000 ="Directory"
9810IF type=&000 ="Module Icon"
9820SYS "XOS_FSControl",&12,,type TO ,,byte1,byte2
9830q$="":!pointer%=byte1:pointer%?4=13:q$+=$pointer%
9840!pointer%=byte2:pointer%?4=13:q$+=$pointer%
9850WHILE RIGHT$(q$,1)=" ":q$=LEFT$(q$,LENq$-1):ENDWHILE
9860type$=STR$~(type)
9870IF LEN(type$)=1 type$="00"+type$
9880IF LEN(type$)=2 type$="0"+type$
9890IF RIGHT$(q$,3)=type$ q$=""
9900q$+=" (&"+type$+")"
9910=q$
9920
9930DEF PROCdragabout(ic%)
9940IF (ic% MOD 2=0) ic%-=1
9950PROCsavedragbox(main%,ic%):file$=file$(ic%):ftype$=ftype$(ic%):filetype=filetype(ic%):iconhandle%=ic%:type=type(ic%)
9960ENDPROC
9970
9980DEF PROCdragend
9990IF clocking%=TRUE clocking%=FALSE:PROCmove_clock:ENDPROC
10000sf$=FNlastbit(file$)
10010PROCimport
10020ENDPROC
10030
10040DEF PROCcopy_file:IF sf$="<Wimp$Scrap>" PROCdragged:ENDPROC
10050PROCset_icon(handle,icon%)
10060IF (icon% MOD 2)=0 icon%-=1
10070move=FALSE:IF INKEY TRUE move=TRUE
10080CASE type(icon%) OF
10090WHEN 0,1,2
10100OSCLI("Set Copy$Options A ~C ~D ~F ~L ~N ~P ~Q R ~S ~T ~V")
10110file1$=sf$
10120OSCLI("Copy "+file$+" "+file1$)
10130IF FNlastbit(file1$)="Tempory" appdata=FALSE
10140IF move PROCdelete(icon%,0)
10150WHEN 3 : ENDCASE:ENDPROC
10160OTHERWISE : PROCmodl_dragend(file$,sf$,type(icon%))
10170ENDCASE
10180ENDPROC
10190
10200DEF PROCstring0(a%,a$)
10210$a%=a$:a%?LENa$=0
10220ENDPROC
10230
10240DEF PROCdeleteall
10250FOR I=0 TO 80
10260IF file$(I)<>"" PROCdelete(I,1)
10270NEXT
10280PROCmodl_clearback(0,"")
10290PROCshut(main%)
10300PROCopenup(main%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%))
10310ENDPROC
10320
10330DEF PROCwimp_tick(b%,n)
10340b%!(28+24*n)=b%!(28+24*n) EOR &01
10350ENDPROC
10360
10370DEF PROCfg
10380SYS "XHourglass_On"
10390PROCwimp_tick(menu%+600,fg)
10400fg=q%!8
10410PROCwimp_tick(menu%+600,fg)
10420fg$=STR$~(fg)
10430bg$=STR$~(bg)
10440flag$=bg$+fg$+"018039"
10450flag=EVAL("&"+flag$)
10460FOR I=0 TO 80
10470IF file$(I)<>"" THEN
10480pointer%!0=main%:pointer%!4=I
10490SYS "XWimp_DeleteIcon",,pointer%:pointer%!4=I+1
10500SYS "XWimp_DeleteIcon",,pointer%
10510spname$=ftype$(I)
10520SYS "XWimp_SpriteOp",40,,spname$ TO ;flag%
10530IF (flag% AND 1)=1 THEN
10540 IF type(I)=0 spname$="application"
10550 IF type(I)=2 spname$="file_xxx"
10560ENDIF
10570PROCcreate_icon(main%,0,x(I)-50,x(I)+115,-(1024-(y(I)-65)),65,spname$,&4701801A)
10580name$=FNlastbit(file$(I)):wid%=(LENname$)*16
10590PROCcreate_icon(main%,0,(x(I)-(wid%/2))+30,(x(I)+(wid%/2))+30,-(1024-(y(I)-115)),36,name$,flag)
10600PROCputiconsprite(main%,i%-1,spname$)
10610REM SYS "XWimp_ForceRedraw",point%!0,point%!4,point%!8,point%!12,point%!16
10620ENDIF
10630NEXT
10640fg$=STR$~(fg)
10650menuflag$=fg$+FNfgcol(fg)+"000121"
10660menuflag=EVAL("&"+menuflag$):menu%!536=menuflag
10670PROCshut(main%)
10680PROCopenup(main%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%))
10690SYS "XHourglass_Off"
10700ENDPROC
10710
10720DEF PROCbg
10730SYS "XHourglass_On"
10740PROCwimp_tick(menu%+1100,bg)
10750bg=q%!8
10760PROCwimp_tick(menu%+1100,bg)
10770fg$=STR$~(fg)
10780bg$=STR$~(bg)
10790flag$=bg$+fg$+"018039"
10800flag=EVAL("&"+flag$)
10810FOR I=0 TO 80
10820IF file$(I)<>"" THEN
10830pointer%!0=main%:pointer%!4=I
10840SYS "XWimp_DeleteIcon",,pointer%:pointer%!4=I+1
10850SYS "XWimp_DeleteIcon",,pointer%
10860spname$=ftype$(I)
10870SYS "XWimp_SpriteOp",40,,spname$ TO ;flags%
10880IF (flags% AND 1)=1 THEN
10890 IF type(I)=0 spname$="application"
10900 IF type(I)=2 spanme$="file_xxx"
10910ENDIF
10920PROCcreate_icon(main%,0,x(I)-50,x(I)+115,-(1024-(y(I)-65)),65,spname$,&4701801A)
10930name$=FNlastbit(file$(I)):wid%=(LENname$)*16
10940PROCcreate_icon(main%,0,(x(I)-(wid%/2))+30,(x(I)+(wid%/2))+30,-(1024-(y(I)-115)),36,FNlastbit(file$(I)),flag)
10950PROCputiconsprite(main%,i%-1,spname$)
10960REM SYS "XWimp_ForceRedraw",point%!0,point%!4,point%!8,point%!12,point%!16
10970ENDIF
10980NEXT
10990bg$=STR$~(bg)
11000menuflag$=bg$+FNfgcol(bg)+"000121"
11010menuflag=EVAL("&"+menuflag$)
11020menu%!560=menuflag
11030PROCshut(main%)
11040PROCopenup(main%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%))
11050SYS "XHourglass_Off"
11060ENDPROC
11070
11080DEF FNgetftype(type)
11090type$=STR$~(type)
11100IF LEN(type$)=1 type$="00"+type$
11110IF LEN(type$)=2 type$="0"+type$
11120="file_"+type$
11130
11140DEF FNb:=BGET#h%+BGET#h%*2^8+BGET#h%*2^16+BGET#h%*2^24
11150
11160DEF PROCdragged:LOCAL x%,y%:x%=q%!28:y%=q%!32
11170IF locked% ENDPROC
11180SYS "XHourglass_On":PROCset_icon(handle,icon%):pointer%!0=main%:pointer%!4=iconhandle%:SYS "XWimp_DeleteIcon",,pointer%:pointer%!4=iconhandle%+1:SYS "XWimp_DeleteIcon",,pointer%
11190IF clck PROCopenup(clock%,clockx%,clocky%,200,200)
11200pointer%!0=x%-32:pointer%!4=y%+32
11210spname$=ftype$:SYS "XWimp_SpriteOp",40,,spname$ TO ;flags%
11220IF (flags% AND 1)=1 THEN
11230 IF type=0 spname$="application"
11240 IF type=2 spname$="file_xxx"
11250ENDIF
11260PROCcreate_icon(main%,0,pointer%!0-50,pointer%!0+115,-(1024-(pointer%!4-65)),65,spname$,&4701801A):x(i%)=pointer%!0:y(i%)=pointer%!4:file$(i%)=file$:ftype$(i%)=ftype$:filetype(i%)=filetype
11270fg$=STR$~(fg)
11280bg$=STR$~(bg)
11290flag$=bg$+fg$+"018039"
11300flag=EVAL("&"+flag$):name$=FNlastbit(file$):wid%=(LENname$)*16
11310PROCcreate_icon(main%,0,(pointer%!0-(wid%/2))+30,(pointer%!0+(wid%/2))+30,-(1024-(pointer%!4-115)),36,FNlastbit(file$),flag)
11320PROCputiconsprite(main%,i%-1,spname$)
11330PROCshut(main%)
11340pointer%!0=main%:SYS "XWimp_GetWindowState",,pointer%:pointer%!28=-2:SYS "XWimp_OpenWindow",,pointer%
11350SYS "XHourglass_Off":appdata=FALSE
11360ENDPROC
11370
11380DEF PROCiconise(handle)
11390fg$=STR$~(fg)
11400bg$=STR$~(bg)
11410flag$=bg$+fg$+"018039"
11420flag=EVAL("&"+flag$)
11430SYS "XWimp_GetPointerInfo",,pointer%
11440pointer%!0-=32:pointer%!4+=32
11450PROCcreate_icon(main%,0,pointer%!0-50,pointer%!0+115,-(1024-(pointer%!4-65)),65,"iconise",&4701801A)
11460name$=FNtranslate(handle):wid%=(LENname$)*16
11470PROCcreate_icon(main%,0,(pointer%!0-(wid%/2))+30,(pointer%!0+(wid%/2))+30,-(1024-(pointer%!4-105)),36,FNtranslate(handle),flag)
11480PROCputiconsprite(main%,i%-1,"iconise")
11490i%-=1:file$(i%)=FNtranslate(handle)::ftype$(i%)="iconise":filetype(i%)=&FFFF:x(i%)=pointer%!0:y(i%)=pointer%!4:type(i%)=3
11500SYS "XWimp_ForceRedraw",point%!0,point%!4,point%!8,point%!12,point%!16
11510ENDPROC
11520
11530DEF FNtranslate(handle)
11540CASE handle OF
11550 WHEN infowind% : ="Info"
11560 WHEN moreinfo% : ="More Info"
11570 WHEN backdrop% : ="Backdrop"
11580 WHEN saveas% : ="Save"
11590 WHEN about% : ="Object"
11600 WHEN clock% : ="Clock"
11610 WHEN warning% : ="Warning"
11620 WHEN loaded% : ="Loaded"
11630 WHEN aback% : ="BackInfo"
11640 WHEN cset% : ="ClockSet"
11650ENDCASE
11660=FNmodl_trans(handle)
11670
11680DEF PROCclock
11690IF clck=-1 PROCopenup(clock%,clockx%,clocky%,200,200):ENDPROC
11700IF clck=0 PROCshut(clock%):ENDPROC
11710PROCtellemoff("Clock display error, clock handle "+STR$clock%+", returning to poll loop."):ENDPROC
11720
11730DEF PROCupdate_clock
11740time$=FNgeticondata(clock%,0)
11750CALL mcode2%
11760IF hour=TRUE THEN
11770IF twfour type$="%24:%MI:%SE" ELSE type$="%24:%MI"
11780ELSE
11790IF twfour type$="%12:%MI:%SE" ELSE type$="%12:%MI"
11800ENDIF
11810SYS "OS_ConvertDateAndTime",time_block%,time_buff%,20,type$
11820buff$=FNrtoz(time_buff%)
11830IF time$<>buff$ PROCputicondata(clock%,0,buff$)
11840ENDPROC
11850
11860DEF PROCwarning
11870PROCopenup(warning%,315,662,650,300)
11880ENDPROC
11890
11900DEF PROCtiled(mode%,sx%,sy%,spname$,x%,y%)
11910spritefile$=f$
11920PROCputicondata(aback%,3,f$)
11930PROCputicondata(aback%,4,spname$)
11940PROCputicondata(aback%,5,palette$)
11950PROCputicondata(aback%,7,"Tiled")
11960PROCputicondata(aback%,14,STR$mode%)
11970PROCputicondata(aback%,16,STR$x%)
11980PROCputicondata(aback%,18,STR$y%)
11990SYS "XOS_ReadModeVariable",mode%,4 TO ,,var%
12000sx%=sx%<<var%
12010SYS "XOS_ReadModeVariable",mode%,5 TO ,,var%
12020sy%=sy%<<var%
12030PROCshut(main%)
12040PROCopenup(main%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%))
12050SYS "XWimp_CreateMenu",,-1
12060ENDPROC
12070
12080DEF PROCgrey_icon(w%,i%)
12090pointer%!0=w%
12100pointer%!4=i%
12110pointer%!8=&400000
12120pointer%!12=0
12130SYS "XWimp_SetIconState",,pointer%
12140ENDPROC
12150
12160DEF PROCsetmenuitem
12170LOCAL ic%
12180ic%=q%!16
12190IF (ic% MOD 2=0) ic%-=1
12200ft$="File":tt$="File"
12210CASE type(ic%) OF
12220WHEN 0 : ft$="App.":tt$="Application"
12230 IF FNas(menu%+300,2)=1 PROCgrey_menu(menu%+300,2)
12240WHEN 1 : ft$="Dir.":tt$="Directory"
12250 IF FNas(menu%+300,2)=1 PROCgrey_menu(menu%+300,2)
12260WHEN 2 : ft$="File":tt$="File"
12270 IF FNas(menu%+300,2)=1 PROCgrey_menu(menu%+300,2)
12280WHEN 3 : ft$="Win.":tt$="Window"
12290 IF FNas(menu%+300,2)=0 PROCgrey_menu(menu%+300,2)
12300OTHERWISE : ft$="Obj.":tt$="Object"
12310 IF FNas(menu%+300,2)=0 PROCgrey_menu(menu%+300,2)
12320ENDCASE
12330$object%=ft$+" '"+FNlastbit(file$(ic%))+"'"
12340$(menu%+300)=tt$
12350IF FNas(menu%,1)=1 PROCgrey_menu(menu%,1)
12360IF FNas(menu%+400,1)=1 PROCgrey_menu(menu%+400,1)
12370ENDPROC
12380
12390DEF PROCset_icon(w%,i%)
12400pointer%!0=w%
12410pointer%!4=i%
12420pointer%!8=&200000
12430pointer%!12=0
12440SYS "XWimp_SetIconState",,pointer%
12450ENDPROC
12460
12470DEF PROCsendhelp
12480q%!12=q%!8:q%!16=&503:help%=q%+20
12490help%=FNhelp(q%!32,q%!36,help%):IF help%=0 ENDPROC
12500?help%=0
12510!q%=(help%+4-q%)ANDNOT3
12520SYS "XWimp_SendMessage",17,q%,q%!4
12530ENDPROC
12540
12550DEF FNhelp(w%,i%,h%)
12560$h%=""
12570CASE w% OF
12580 WHEN infowind%
12590 CASE i% OF
12600 WHEN -1,0,1,2,3,4,5,6,7,8
12610 $h%="This is the Info Window.|MIt provides information on !StickyBrd."
12620 OTHERWISE : SYS "XInterface_SendHelp",,q%:=0
12630 ENDCASE
12640 WHEN moreinfo%
12650 CASE i% OF
12660 WHEN -1,0,1,2,3,4,5,6,7,8,9,10,11,12,13
12670 $h%="This window gives more information on !StickyBrd."
12680 OTHERWISE : SYS "XInterface_SendHelp",,q%:=0
12690 ENDCASE
12700 WHEN backdrop%
12710 CASE i% OF
12720 WHEN -1,0,1,3,7,9
12730 $h%="This is the 'Load Backdrop' window.|MUse this window to load a new backdrop."
12740 WHEN 2
12750 $h%="This is the 'Load Sprite' icon.|MDrag a Sprite file to this icon to load it."
12760 WHEN 4
12770 $h%="This is the 'Stay Open' icon.|MClick it to keep the window open."
12780 WHEN 6
12790 $h%="This is the 'Tiled' radio button.|MClick on it to select 'Tiled' backdrops."
12800 WHEN 8
12810 $h%="This is the 'Centred' radio button.|MClick on it to select 'Centred' backdrops."
12820 OTHERWISE : SYS "XInterface_SendHelp",,q%:=0
12830 ENDCASE
12840 WHEN main%
12850 CASE i% OF
12860 WHEN 0 : $h%="This is the desktop backdrop.|MIt is now `sticky� and will accept directories, applications, and files.|MDrag these to the desktop backdrop to add them to it."
12870 OTHERWISE : ic%=i%
12880 IF (ic% MOD 2=0) ic%-=1
12890 $h%="This is the icon for `"
12900 $h%+=FNlastbit(file$(ic%))
12910 $h%+="�.|M"
12920 $h%+="Click on it to "
12930 $h%+=FNfindtype(type(ic%))
12940 $h%+="."
12950 ENDCASE
12960 WHEN about%
12970 $h%="This is the 'Object Information' window.|MIt provides information about the object the pointer is currently over."
12980 WHEN saveas%
12990 CASE i% OF
13000 WHEN -1
13010 $h%="This is the 'Save' window.|MUse it to save the current state of the desktop."
13020 OTHERWISE
13030 SYS "XInterface_SendHelp",,q%:=0
13040 ENDCASE
13050 WHEN warning%
13060 CASE i% OF
13070 WHEN 4,5 : SYS "XInterface_SendHelp",,q%:=0
13080 OTHERWISE : $h%="This is the 'Warning' window.|MIt indicates that you already have some application data saved into !StickyBrd."
13090 ENDCASE
13100 WHEN loaded%
13110 CASE i% OF
13120 WHEN 5,6 : SYS "XInterface_SendHelp",,q%:=0
13130 OTHERWISE : $h%="This is the 'Loaded' window.|MIt shows that !StickyBrd is loaded, and displays the copyright (�) message."
13140 ENDCASE
13150 SYS "XInterface_SendHelp",,q%:=0
13160 WHEN main1%
13170 $h%="This is the desktop backdrop.|MThe 'real' backdrop is currently 'hidden'.|MSelect 'Restore' from the 'Options' menu to view it."
13180 WHEN aback%
13190 $h%="This window gives information on the current backdrop.|MIt shows the sprite file, sprite name, determines whether it has a palette, and tells you whether the backdrop is tiled or centred."
13200 WHEN cset%
13210 CASE i% OF
13220 WHEN 2,3,8 : SYS "XInterface_SendHelp",,q%:=0
13230 WHEN 4 : $h%="This is the 'Up' icon.|MClick it to increase the hours by one."
13240 WHEN 5 : $h%="This is the 'Down' icon.|MClick it to decrease the hours by one."
13250 WHEN 6 : $h%="This is the 'Up' icon.|MClick it to increase the minutes by one."
13260 WHEN 7 : $h%="This is the 'Down' icon.|MClick it to decrease the minutes by one."
13270 OTHERWISE : $h%="This is the 'Set time' window.|MUse it to set the current time."
13280 ENDCASE
13290 OTHERWISE
13300 $h%=FNmodl_help(w%,i%)
13310ENDCASE
13320=h%+LEN($h%)
13330
13340DEF FNfindtype(type)
13350CASE type OF
13360 WHEN 0 : ="run the application"
13370 WHEN 1 : ="open the directory"
13380 WHEN 2 : ="execute the file"
13390 WHEN 3 : ="open the window"
13400 WHEN 4 : ="execute the command"
13410ENDCASE
13420="perform an operation"
13430
13440DEF PROCsetclearmenu
13450$object%="File ''"
13460IF FNas(menu%,1)=0 PROCgrey_menu(menu%,1)
13470IF FNas(menu%+400,1)=0 PROCgrey_menu(menu%+400,1)
13480ENDPROC
13490
13500DEF FNas(b%,n%)
13510=-((b%!(28+8+24*n%) AND &400000)=&400000)
13520
13530DEF PROCgrey_menu(b%,n%)
13540b%!(28+8+24*n%)=b%!(28+8+24*n%)EOR&400000
13550ENDPROC
13560
13570DEF PROCupdate_backdrop
13580pointer%!0=main%
13590SYS "Wimp_GetWindowOutline",,pointer%
13600SYS "Wimp_ForceRedraw",main%,pointer%!4,pointer%!16-44,pointer%!12,pointer%!16
13610ENDPROC
13620
13630DEF PROCbring_to_top(handle%)
13640pointer%!0=handle%
13650SYS "XWimp_GetWindowInfo",,pointer%
13660pointer%!28=-2
13670SYS "XWimp_OpenWindow",,pointer%
13680ENDPROC
13690
13700DEF PROCset_clock_flags(e,r,b,twe,twf,h)
13710emboss=e:recess=r:twelve=twe:twfour=twf:border=b:hour=h
13720ENDPROC
13730
13740DEF PROCsetup_sclck
13750PROCputicondata(cset%,2,MID$(TIME$,17,2))
13760PROCputicondata(cset%,3,MID$(TIME$,20,2))
13770ENDPROC
13780
13790DEF PROCaddh(addicon%)
13800current=VAL(FNgeticondata(cset%,addicon%))
13810current+=1
13820IF current>24 current=0
13830IF current<0 current=24
13840current$=STR$current:IF LENcurrent$=1 current$="0"+current$
13850PROCputicondata(cset%,addicon%,current$)
13860ENDPROC
13870
13880DEF PROCsubh(subicon%)
13890current=VAL(FNgeticondata(cset%,subicon%))
13900current-=1
13910IF current>24 current=0
13920IF current<0 current=24
13930current$=STR$current:IF LENcurrent$=1 current$="0"+current$
13940PROCputicondata(cset%,subicon%,current$)
13950ENDPROC
13960
13970DEF PROCaddm(addicon%)
13980current=VAL(FNgeticondata(cset%,addicon%))
13990current+=1
14000IF current>60 current=0
14010IF current<0 current=60
14020current$=STR$current:IF LENcurrent$=1 current$="0"+current$
14030PROCputicondata(cset%,addicon%,current$)
14040ENDPROC
14050
14060DEF PROCsubm(subicon%)
14070current=VAL(FNgeticondata(cset%,subicon%))
14080current-=1
14090IF current>60 current=0
14100IF current<0 current=60
14110current$=STR$current:IF LENcurrent$=1 current$="0"+current$
14120PROCputicondata(cset%,subicon%,current$)
14130ENDPROC
14140
14150DEF PROCsettime(hour$,minute$)
14160time$=""
14170time$=LEFT$(TIME$,16)+hour$+":"+minute$+":"+"00"
14180TIME$=time$:PROCshut(cset%)
14190ENDPROC
14200
14210DEF PROCrs
14220pointer%!0=clock%
14230pointer%!4=0
14240SYS "XWimp_GetIconState",,pointer%
14250pointer%!8=0:pointer%!12=0
14260IF emboss $(pointer%!32)="z0":pointer%!24=&17000139
14270IF recess $(pointer%!32)="z4":pointer%!24=&17000139
14280IF border $(pointer%!32)="z1":pointer%!24=&17000139
14290SYS "XWimp_SetIconState",,pointer%
14300pointer%!0=clock%
14310SYS "XWimp_GetWindowState",,pointer%
14320PROCshut(clock%)
14330pointer%!28=-2
14340IF clck SYS "XWimp_OpenWindow",,pointer%
14350ENDPROC
14360
14370DEF FNfract(val)
14380t$=STR$(val DIV 100)+"."+STR$(val MOD 100)
14390IF LENt$=3 t$+="0"
14400=t$
14410
14420DEF FNmodl_init(tname$,tpurp$,tauth$,tver$,pver,menblk%)
14430IF modlptr=20 PROCtellemoff("Extention module loading error: limit reached, no more modules will be loaded."):ENDPROC
14440IF pver>80 PROCtellemoff("Extension module "+tname$+" requires !StickyBrd manager "+FNfract(pver)+" or later."):ENDPROC
14450modl$(modlptr)=FNlower(tname$):modl(modlptr)=menblk%
14460modli$(modlptr)=tname$:modlp$(modlptr)=tpurp$
14470modla$(modlptr)=tauth$:modlv$(modlptr)=tver$:modlptr+=1
14480SYS "XWimp_CreateWindow",,modlinfo% TO taskhand%
14490modlinf(modlptr-1)=taskhand%
14500PROCaddtomenu(tname$,menblk%)
14510modl(modlptr-1)!32=taskhand%
14520=taskhand%
14530
14540DEF PROCaddtomenu(tn$,men%)
14550IF FNas(menu%,6)=1 PROCgrey_menu(menu%,6)
14560mblk%=modlmenu%
14570flags=&7000021
14580mlen%=0:FOR I=0 TO (modlptr-1)
14590IF LENmodl$(I)>mlen% mlen%=(LENmodl$(I))+1:NEXT:mlen%+=1
14600PROCheader("Modules",mlen%)
14610FOR I=0 TO (modlptr-1)
14620PROCentry(&00,modl(I),flags,FNcapital(modl$(I)))
14630NEXT
14640mblk%!-24=mblk%!-24 OR &80
14650ENDPROC
14660
14670DEF FNbd_hand:=main%
14680
14690DEF PROCload_modls
14700h%=OPENUP("<StickyBrdExt$Dir>.AutoRun")
14710REPEAT
14720buff$=GET$#h%
14730IF LEFT$(buff$,1)<>"|" THEN
14740 IF LEFT$(buff$,5)="{run}" THEN
14750 buff$=FNstrip(buff$)
14760 PROCload_modl(buff$)
14770 ENDIF
14780ENDIF
14790UNTIL buff$="{end}"
14800CLOSE#h%
14810ENDPROC
14820
14830DEF PROCload_modl(file$)
14840LIBRARY "<StickyBrdExt$Dir>."+buff$+".Module"
14850t%=EVAL("FN"+buff$+"_init")
14860ENDPROC
14870
14880DEF FNstrip(s$)
14890s$=RIGHT$(s$,(LENs$)-6)
14900s$=LEFT$(s$,(LENs$)-1)
14910=s$
14920
14930DEF PROCpass_null
14940IF modlptr=0 ENDPROC
14950FOR K=0 TO (modlptr-1)
14960t%=EVAL("FN"+modl$(K)+"_event(0,q%)")
14970NEXT K
14980ENDPROC
14990
15000DEF FNlower(text$)
15010$pointer%=text$:ptr%=0:REPEAT ptr%?pointer%=ptr%?pointer% OR &20:ptr%+=1:UNTIL ptr%?pointer%<33
15020=$pointer%
15030
15040DEF PROCmodl_sendmenu
15050modlflag=q%!4:IF q%!8=-1 ENDPROC
15060start=4:REPEAT q%!(start-4)=q%!(start+4):start+=4:UNTIL q%!(start-4)=-1
15070t%=EVAL("FN"+modl$(modlflag)+"_event(1,q%)")
15080ENDPROC
15090
15100DEF PROCmodl_quit
15110FOR K=0 TO (modlptr-1)
15120t%=EVAL("FN"+modl$(K)+"_event(13,q%)")
15130NEXT K
15140ENDPROC
15150
15160DEF FNmodl_help(w%,i%)
15170text$=""
15180pointer%!0=w%:pointer%!4=i%
15190FOR K=0 TO (modlptr-1)
15200t%=EVAL("FN"+modl$(K)+"_event(3,pointer%)")
15210IF $t%<>"" text$=$t%
15220pointer%!0=w%:pointer%!4=i%
15230NEXT K
15240IF text$="" text$="No help availible on this window"
15250=text$
15260
15270DEF PROCmodl_click(typ,fil$,x,y)
15280pointer%!0=x:pointer%!4=y:pointer%!8=typ:$(pointer%+12)=fil$
15290FOR K=0 TO (modlptr-1)
15300t%=EVAL("FN"+modl$(K)+"_event(4,pointer%)")
15310pointer%!0=x:pointer%!4=y:pointer%!8=typ:$(pointer%+12)=fil$
15320NEXT K
15330ENDPROC
15340
15350DEF PROCmodl_mclick(h,i,b)
15360pointer%!0=h:pointer%!4=i:pointer%!8=b
15370FOR K=0 TO (modlptr-1)
15380t%=EVAL("FN"+modl$(K)+"_event(5,pointer%)")
15390pointer%!0=h:pointer%!4=i:pointer%!8=b
15400NEXT K
15410ENDPROC
15420
15430DEF PROCputondesktop(spn$,x,y,t,t$,l)
15440LOCAL fg$,bg$,flag$,flag
15450fg$=STR$~(fg):bg$=STR$~(bg):flag$=bg$+fg$+"018039"
15460flag=EVAL("&"+flag$)
15470PROCcreate_icon(main%,0,x-50,x+115,-(1024-(y-65)),65,spn$,&4701801A)
15480file$(i%)=t$:x(i%)=x:y(i%)=y:ftype$(i%)=spn$:filetype(i%)=&000:type(i%)=t
15490t1$=""
15500IF l=1 t1$=FNlastbit(t$) ELSE t1$=t$:wid%=(LENt1$)*16
15510PROCcreate_icon(main%,0,(x-(wid%/2))+30,(x+(wid%/2))+30,-(1024-(y-115)),36,t1$,flag)
15520PROCputiconsprite(main%,i%-1,spn$)
15530SYS "XWimp_ForceRedraw",point%!0,point%!4,point%!8,point%!12,point%!16
15540ENDPROC
15550
15560DEF PROCmodl_slab(h,i,b)
15570pointer%!12=h
15580pointer%!16=i
15590pointer%!8=b
15600SYS "XInterface_SlabButton",,pointer%
15610pointer%!8=0
15620SYS "XInterface_SlabButton",,pointer%
15630ENDPROC
15640
15650DEF FNfirstbit(s$)
15660ptr=0:REPEAT:t$=MID$(s$,ptr,1)
15670IF t$="." ptr-=1:GOTO 15690
15680ptr+=1
15690UNTIL t$="."
15700=LEFT$(s$,ptr)
15710
15720DEF FNmodl_trans(h)
15730t$=""
15740pointer%!0=h
15750FOR K=0 TO (modlptr-1)
15760t%=EVAL("FN"+modl$(K)+"_event(6,pointer%)")
15770IF $t%<>"" t$=$t%
15780pointer%!0=h
15790NEXT K
15800=t$
15810
15820DEF FNmodl_handle(t$)
15830handle%=0
15840$pointer%=t$
15850FOR K=0 TO (modlptr-1)
15860t%=EVAL("FN"+modl$(K)+"_event(7,pointer%)")
15870IF t%<>0 handle%=t%
15880$pointer%=t$
15890NEXT K
15900=handle%
15910
15920DEF FNmodl_xw(t$)
15930xw%=0
15940$pointer%=t$
15950FOR K=0 TO (modlptr-1)
15960t%=EVAL("FN"+modl$(K)+"_event(8,pointer%)")
15970IF t%<>0 xw%=t%
15980$pointer%=t$
15990NEXT K
16000=xw%
16010
16020DEF FNmodl_yh(t$)
16030yh%=0
16040$pointer%=t$
16050FOR K=0 TO (modlptr-1)
16060t%=EVAL("FN"+modl$(K)+"_event(9,pointer%)")
16070IF t%<>0 yh%=t%
16080$pointer%=t$
16090NEXT K
16100=yh%
16110
16120DEF FNcapital(s$)
16130t$=RIGHT$(s$,(LENs$)-1)
16140i$=LEFT$(s$,1)
16150i$=CHR$(ASC(i$) EOR &20)
16160=i$+t$
16170
16180DEF FNexists(ty)
16190flag=0
16200FOR I=0 TO 80
16210IF file$(I)<>""
16220 IF type(I)=ty flag=I
16230ENDIF
16240NEXT
16250=flag
16260
16270DEF PROCmodl_dragend(f$,f1$,t)
16280FOR K=0 TO (modlptr-1)
16290pointer%!0=t
16300$(pointer%+4)=f$
16310$(pointer%+260)=f1$
16320t%=EVAL("FN"+modl$(K)+"_event(10,pointer%)")
16330NEXT K
16340ENDPROC
16350
16360DEF PROCmodl_dataload(f$,w,i)
16370FOR K=0 TO (modlptr-1)
16380pointer%!0=w:pointer%!4=i:$(pointer%+8)=f$
16390t%=EVAL("FN"+modl$(K)+"_event(11,pointer%)")
16400NEXT K
16410ENDPROC
16420
16430DEF PROCmodl_delete(icon%,type%)
16440FOR K=0 TO (modlptr-1)
16450pointer%!0=icon%:pointer%!4=type%
16460t%=EVAL("FN"+modl$(K)+"_event(12,pointer%)")
16470NEXT K
16480ENDPROC
16490
16500DEF PROCmodl_saveconfig
16510FOR K=0 TO (modlptr-1)
16520t%=EVAL("FN"+modl$(K)+"_event(2,pointer%)")
16530NEXT K
16540ENDPROC
16550
16560DEF PROCmodl_redraw
16570FOR K=0 TO (modlptr-1)
16580t%=EVAL("FN"+modl$(K)+"_event(14,q%)")
16590NEXT K
16600ENDPROC
16610
16620DEF FNmodl_interface(r0,r1%)
16630CASE r0 OF
16640 WHEN 0 : PROCtellemoff("Fatal; "+$r1%)
16650 PROCmodl_quit
16660 quit%=TRUE
16670 WHEN 1 : PROCtellemoff($r1%)
16680 =0
16690 WHEN 2 : PROCshut(main%)
16700 PROCopenup(main%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%))
16710 =0
16720 WHEN 3 : IF sploaded pointer%!0=1 ELSE pointer%!0=0
16730 IF tiled pointer%!4=1 ELSE pointer%!4=0
16740 =pointer%
16750 WHEN 4 : PROCputondesktop($r1%,r1%!24,r1%!28,r1%!32,$(r1%+12),r1%!36)
16760 =0
16770 WHEN 5 : PROCdelete(!r1%,0)
16780 =0
16790 WHEN 6 : SYS "XWimp_OpenMenu",,menu%,!r1%,r1%!4
16800 =0
16810 WHEN 7 : PROCdragabout(!r1%)
16820 =0
16830 WHEN 8 : PROCset_icon(!r1%)
16840 =0
16850 WHEN 9 : OSCLI("Filer_OpenDir "+FNdir(file$(!r1%)))
16860 =0
16870 WHEN 10 : PROCmodl_slab(!r1%,r1%!4,r1%!8)
16880 =0
16890 WHEN 11 : =FNexists(!r1%)
16900 WHEN 12 : res0%=r0:res1%=r1%
16910 FOR K=0 TO (modlptr-1)
16920 t%=EVAL("FN"+modl$(K)+"_message(!res1%,res1%!4)")
16930 NEXT
16940 =0
16950 WHEN 13 : PROCputicondata(r1%!0,r1%!4,$(r1%+8))
16960 =0
16970 WHEN 14 : $pointer%=FNgeticondata(!r1%,r1%!4)
16980 =pointer%
16990 WHEN 15 : $pointer%=FNlastbit($r1%)
17000 =pointer%
17010 WHEN 16 : $pointer%=FNdir($r1%)
17020 =pointer%
17030 WHEN 17 : PROCputiconsprite(!r1%,r1%!4,$(r1%+8))
17040 =0
17050ENDCASE
17060=0
17070
17080DEF FNdir(s$)
17090sptr=LENs$
17100REPEAT:g$=MID$(s$,sptr,1):IF g$="." GOTO 17110 ELSE sptr-=1
17110UNTIL g$="."
17120=LEFT$(s$,sptr-1)
17130
17140DEF PROCmodl_clearback(type,file$)
17150FOR K=0 TO (modlptr-1)
17160pointer%!0=type:$(pointer%+4)=file$
17170t%=EVAL("FN"+modl$(K)+"_event(15,pointer%)")
17180NEXT K
17190ENDPROC
17200
17210DEF PROCmodl_deskstart
17220FOR K=0 TO (modlptr-1)
17230t%=EVAL("FN"+modl$(K)+"_event(16,pointer%)")
17240NEXT K
17250ENDPROC
17260
17270DEF PROCmenu_message
17280IF q%!32=6 THEN
17290 PROCputicondata(modlinf(q%!36),4,modli$(q%!36))
17300 PROCputicondata(modlinf(q%!36),5,modlp$(q%!36))
17310 PROCputicondata(modlinf(q%!36),6,modla$(q%!36))
17320 PROCputicondata(modlinf(q%!36),7,modlv$(q%!36))
17330 SYS "XWimp_CreateSubMenu",,q%!20,q%!24,q%!28
17340ENDIF
17350ENDPROC
17360
17370DEF PROCsetmodlinfo(handle)
17380modlnumber=0:infoptr=0:REPEAT
17390IF modlinf(infoptr)=handle THEN modlnumber=infoptr
17400infoptr+=1
17410UNTIL infoptr=(modlptr+1)
17420PROCputicondata(handle,4,modli$(modlnumber))
17430PROCputicondata(handle,5,modlp$(modlnumber))
17440PROCputicondata(handle,6,modla$(modlnumber))
17450PROCputicondata(handle,7,modlv$(modlnumber))
17460ENDPROC
17470
17480DEF FNrmv(r0,r1)
17490SYS "XOS_ReadModeVariable",r0,r1 TO ,,r20
17500=r20
17510
17520DEF PROCstring_at_address(name$,RETURN num%)
17530SYS "OS_SpriteOp",256+24,sprite%,name$ TO ,,num%
17540ENDPROC
17550:
17560REM ** READING IN !PLACEIT FILES **
17570
17580DEF FNnext_byte
17590offset%+=1
17600=(config_file%?offset%)
17610
17620DEF FNbyte(offset%)
17630=(config_file%?offset%)
17640
17650DEF FNword(offset%)
17660=(config_file%!offset%)
17670
17680DEF FNstring(offset%)
17690LOCAL str$
17700str$=""
17710WHILE (config_file%?offset%)>31
17720 str$+=CHR$(config_file%?offset%)
17730 offset%+=1
17740ENDWHILE
17750=str$
17760
17770DEF PROCget_placeit_icon(icon%)
17780LOCAL ptr%
17790ptr%=length_options%
17800i%=0
17810WHILE i%<icon%
17820 ptr%+=FNword(ptr%+size_offset)-4
17830 i%+=1
17840ENDWHILE
17850iconhandle%=FNbyte(ptr%+handle_offset)
17860x_coord% =FNword(ptr%+x_offset)
17870y_coord% =FNword(ptr%+y_offset)
17880filetype% =FNword(ptr%+filetype_offset)
17890leafname$ =FNstring(ptr%+FNword(ptr%+leafname_offset)-4)
17900spritename$=FNstring(ptr%+sprite_offset)
17910iconselect%=FNbyte(ptr%+select_offset)
17920filename$ =FNstring(ptr%+filename_offset)
17930ENDPROC
17940
17950DEF PROCload_new_placeit_file(f$)
17960PROCdeleteall:PROCpurge1
17970PROCmodl_clearback(1,f$)
17980SYS "XOS_File",16,f$,config_file%,0
17990offset%=-1
18000size_offset =0
18010leafname_offset=4
18020handle_offset =8
18030select_offset =9
18040x_offset =12
18050y_offset =16
18060sprite_offset =20
18070filetype_offset=36
18080filename_offset=40
18090
18100version%=FNnext_byte:IF version%<>5 PROCtellemoff("Can't handle !PlaceIt config file other than version 5"):ENDPROC
18110nfg =FNnext_byte
18120nbg =FNnext_byte
18130dc_flag%=FNnext_byte
18140locked% =FNnext_byte
18150backgnd%=FNnext_byte
18160backtyp%=FNnext_byte
18170icons% =FNnext_byte
18180length_options%=offset%+1
18190FOR I=0 TO icons%-1
18200PROCget_placeit_icon(I):spritename$=RIGHT$(spritename$,LENspritename$-1)
18210PROCcreate_icon(main%,0,(x_coord%-50)+20,(x_coord%+115)+20,-(y_coord%-65)+100,65,spritename$,&4701801A):file$(i%)=filename$:x(i%)=x_coord%+20:y(i%)=y_coord%+100:ftype$(i%)=spritename$:filetype(i%)=filetype%
18220IF filetype%=&2000 type(i%)=0 ELSE IF filetype%=&1000 type(i%)=1 ELSE type(i%)=2
18230wid%=(LENleafname$)*16
18240PROCcreate_icon(main%,0,(x_coord%-(wid%/2))+60,(x_coord%+(wid%/2))+60,-(y_coord%-115)+100,36,leafname$,&47018039)
18250PROCputiconsprite(main%,i%-1,spritename$)
18260NEXT
18270IF backgnd%=1 THEN
18280 f1$=f$
18290 f$=FNleafname(f$):f$+=".Background"
18300 IF backtyp%=1 tiled=TRUE ELSE tiled=FALSE
18310 PROCloadbackdrop
18320 f$=f1$
18330ENDIF
18340PROCshut(main%)
18350PROCopenup(main%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%))
18360q%!8=nfg:PROCfg
18370q%!8=nbg:PROCbg
18380desktop$=f$
18390ENDPROC
18400
18410DEF FNleafname(s$)
18420WHILE RIGHT$(s$,1)<>"."
18430s$=LEFT$(s$,LENs$-1)
18440ENDWHILE
18450=LEFT$(s$,LENs$-1)
18460
18470DEF PROCmove_clock
18480IF locked% ENDPROC
18490SYS "Wimp_GetPointerInfo",,pointer%
18500clockx%=pointer%!0-60:clocky%=pointer%!4+10
18510PROCopenup(clock%,clockx%,clocky%,200,200)
18520ENDPROC
18530
18540DEF PROCmess_ack
18550IF q%!16=5 THEN
18560 SYS "XWimp_StartTask","Run "+runfile$
18570ENDIF
18580ENDPROC
18590
18600DEF PROCfile_run(f$,ft)
18610runfile$=f$
18620!pointer%=(48+LENrunfile$)ANDNOT3
18630pointer%!12=3
18640pointer%!16=5
18650pointer%!36=-2
18660pointer%!40=ft
18670$(pointer%+44)=runfile$+CHR$0
18680SYS "Wimp_SendMessage",18,pointer%,0
18690ENDPROC
18700
18710DEF FNtrans(var$)
18720FOR I=0 TO 100:pointer%?I=0:NEXT
18730SYS "OS_ReadVarVal",var$+CHR$0,pointer%,400,0
18740=FNrtoz(pointer%)
18750
18760DEF PROCtitlemenu
18770LOCAL x%,y%,z%,title$,q$
18780MOUSE x%,y%,z%
18790IF z%<>2 THEN ENDPROC
18800SYS "Wimp_GetPointerInfo",,q%
18810IF q%!16<>-4 THEN ENDPROC
18820q%!0=q%!12:SYS "Wimp_GetWindowInfo",,q%
18830IF (q%!60 AND 1<<8) THEN
18840 title$=FNrtoz(q%!76)
18850ELSE
18860 title$=FNrtoz(q%+76)
18870ENDIF
18880IF INSTR(title$,"::")=0 AND INSTR(title$,"#")=0 THEN ENDPROC
18890IF INSTR(title$,"$")=0 THEN ENDPROC
18900mblk%=filemen%
18910IF INSTR(title$,"::")>0 THEN
18920 PROCheader(LEFT$(title$,INSTR(title$,"::")-1),11)
18930ELSE
18940 PROCheader(LEFT$(title$,INSTR(title$,"#")-1),11)
18950ENDIF
18960filepath$=LEFT$(title$,INSTR(title$,".")-1)
18970title$=RIGHT$(title$,LENtitle$-(INSTR(title$,".")))
18980q$="":FOR I%=1 TO LENtitle$
18990q$+=MID$(title$,I%,1)
19000IF MID$(title$,I%,1)="." THEN
19010 PROCentry(&00,-1,&7000021,LEFT$(q$,LENq$-1))
19020 q$=""
19030ENDIF
19040NEXT
19050PROCentry(&80,-1,&7000021,q$)
19060SYS "Wimp_GetPointerInfo",,q%
19070handle=&FFFFFFFF
19080SYS "Wimp_CreateMenu",,filemen%,q%!0-64,q%!4-10
19090ENDPROC
!� >NewPD.!StickyBrd.!RunImage
� Public Domain
� By David J. Seery
(� � David J. Seery 1992
2� Current version: 0.80
<
Fș "XHourglass_On"
Pi� � x%=�error("Fatal Error (type "+ß+"/internal error code "+Þ+") "+�$+"...Re-run & try again",1):�
Z8� q% 1200,ind% &400,ind2% &400,menu% 2600,ind3% &400
dF� ind4% &400,pointer% 500,file$(80),type(80),ind5% &500,ind6% &600
n4� x(80),y(80),ftype$(80),filetype(80),ind8% &400
x)� ind9% &500,ind10% &400,filemen% 512
�7� object% 20,ind14% &600,openparent% 20,main_w% 800
�;� ind15% &500,fgb% 20,bgb% 20,ind16% &350,modlinfo% 800
�:� modlmenu% 2000:� plenty of space for module menu (!)
�D� modl$(20),modl(20),modli$(20),modlp$(20),modla$(20),modlv$(20)
�:� modlinf(20),mcode% 300,config_file% 3000,mcode2% 100
�"� time_block% 20,time_buff% 20
�P� sprite% &8500:sprite%!0=&8500:sprite%!8=16:ș "XOS_SpriteOp",9+256,sprite%
�� cols% 16,scale% 16
��stayopen=�:spritefile$="":desktop$="":f$="":clockhandle%=-1:clck=�:appdata=�:tiled=�:adjust=�:sploaded=�:modlptr=0:clockx%=1079:clocky%=1023:clocking%=�:new_app$="":file$()="":turbo%=�:locked%=�
�$q%="TASK"
�?ș "XWimp_Initialise",200,!q%,"StickyBrd" � wimpver%,taskh%
�� wimpver%<200 �tellemoff("Fatal Error (type -1): Wimp Manager out of date (requires 2.00 or later)"):ș "XWimp_CloseDown":�
�%ș "XInterface_Initialise",taskh%
;ș "XWimp_OpenTemplate",,"<StickyBrdRes$Dir>.Templates"
=ș "XWimp_LoadTemplate",,q%,ind8%,ind8%+&400,-1,"clock",0
(ș "XWimp_CreateWindow",,q% � clock%
":ș "XWimp_LoadTemplate",,q%,ind%,ind%+&400,-1,"info",0
,+ș "XWimp_CreateWindow",,q% � infowind%
6@ș "XWimp_LoadTemplate",,q%,ind2%,ind2%+&400,-1,"moreinfo",0
@+ș "XWimp_CreateWindow",,q% � moreinfo%
JAș "XWimp_LoadTemplate",,main_w%,ind3%,ind3%+&400,-1,"main",0
T,ș "XWimp_CreateWindow",,main_w% � main%
^-ș "XWimp_CreateWindow",,main_w% � main1%
h@ș "XWimp_LoadTemplate",,q%,ind4%,ind4%+&400,-1,"backdrop",0
r+ș "XWimp_CreateWindow",,q% � backdrop%
|>ș "XWimp_LoadTemplate",,q%,ind5%,ind5%+&500,-1,"saveas",0
�)ș "XWimp_CreateWindow",,q% � saveas%
�=ș "XWimp_LoadTemplate",,q%,ind6%,ind6%+&600,-1,"about",0
�(ș "XWimp_CreateWindow",,q% � about%
�?ș "XWimp_LoadTemplate",,q%,ind9%,ind9%+&500,-1,"warning",0
�*ș "XWimp_CreateWindow",,q% � warning%
�@ș "XWimp_LoadTemplate",,q%,ind10%,ind10%+&400,-1,"loaded",0
�)ș "XWimp_CreateWindow",,q% � loaded%
�Cș "XWimp_LoadTemplate",,q%,ind14%,ind14%+&600,-1,"abackdrop",0
�(ș "XWimp_CreateWindow",,q% � aback%
�Bș "XWimp_LoadTemplate",,q%,ind15%,ind15%+&500,-1,"clockset",0
�'ș "XWimp_CreateWindow",,q% � cset%
�Iș "XWimp_LoadTemplate",,modlinfo%,ind16%,ind16%+&350,-1,"modlinfo",0
�ș "XWimp_CloseTemplate"
�set_size
3exists%=�("<Wimp$Scrap>"):� exists%>0 �#exists%
(� exists%=0 �("Create <Wimp$Scrap>")
&!�set_clock_flags(�,�,�,�,�,�)
0�menu(1)
:�grey_menu(menu%+2200,1)
D1�assemble:!ind_q%=q%:!scl%=scale%:!col%=cols%
N
X>�openup(main%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%))
bfirstrun%=�
lquit%=�
v
�� � Ȏ � �
�O � 175 : �tellemoff("Cannot copy error (type=1), handle="+�main%):appdata=�
�O � 214 : �tellemoff("Cannot copy error (type=2), handle="+�main%):appdata=�
�� : � �error("Nonfatal error: "+�$+" (internal error code "+Þ+"), handle="+�main%+", sprite area at "+�~(sprite%)+" Shall I Quit ?",3)=1 �modl_quit:ș "XInterface_CloseDown",taskh%:ș "XWimp_CloseDown":�
��
�� firstrun% �load_modls
�ș "XHourglass_Off"
�
��
�!ș "XWimp_Poll",,q% � reason%
�3ș "XInterface_PreProcessKey",reason%,q%,taskh%
�*ș "XInterface_Poll",reason%,q%,taskh%
�Ȏ reason% �
� 1 : �redraw
'� 2 : ș "XWimp_OpenWindow",,q%
(� 3 : ș "XWimp_CloseWindow",,q%
F � !q%=backdrop% �puticonsprite(backdrop%,4,"toptoff")
*$ � � � �iconise(!q%)
4� 6 : �checkmouse
>(� 7 : sf$=�lastbit(sf$):�dragend
H� 9 : �process_menu
R� 17,18 : �message
\� 19 : �mess_ack
f1� 0 : �update_clock:�pass_null:�titlemenu
p�
z>� firstrun%=� firstrun%=�:�openup(loaded%,315,662,650,300)
�2� clck �openup(clock%,clockx%,clocky%,200,200)
�� quit%
�$ș "XInterface_CloseDown",taskh%
�ș "XWimp_CloseDown":�
�
�� �iconbar
�� i%
�q%!0=-1
�
q%!4=0
�
q%!8=0
�q%!12=68
�q%!16=96
�q%!20=&2002
$(q%+24)="!StickyBrd"
"ș "XWimp_CreateIcon",,q% � i%
=i%
$
.� �message
8your_ref%=q%!8
Bmy_ref%=q%!12
LȎ (q%!16) �
V� 0 : quit%=�
`!� 1 : � q%!20<>saveas% �
j* � appdata=� � adjust=� �
t �warning
~ �
� �
�F ș "XOS_ReadVarVal","Wimp$Scrap",,-1,0,3 � ,,exists%
�D � exists%=0 �tellemoff("Wimp$Scrap not defined"):�
�9 q%!36=-1:�string0(q%+44,"<Wimp$Scrap>")
�- !q%=(48+�"<Wimp$Scrap>")��3
�F q%!12=q%!8:q%!16=2:ș "XWimp_SendMessage",17,q%,q%!4
�* scrapref%=q%!8:appdata=�
� �
�� 2 : �dosave
�� 3 : �lf
�� 5 : �intercept
�� 8 : �modl_quit
� &502 : �sendhelp
� &400C0 : �menu_message
#� &400C1 : �set_size:�pix_trans
�
(�
2
<5� �read_size(� win_maxx%,� win_maxy%,� win_miny%)
F+ș "XOS_ReadModeVariable",-1,4 � ,,eig%
P8ș "XOS_ReadModeVariable",-1,11 � ,,limit%:limit%+=1
Zwin_maxx%=limit%<<eig%
d+ș "XOS_ReadModeVariable",-1,5 � ,,eig%
n8ș "XOS_ReadModeVariable",-1,12 � ,,limit%:limit%+=1
xwin_maxy%=limit%<<eig%
�win_miny%=140+(1<<eig%)
��
�
�3� �set_size:win_maxx%=0:win_maxy%=0:win_miny%=0
�-�read_size(win_maxx%,win_maxy%,win_miny%)
��shut(main%)
�6pointer%!0=main%:ș "XWimp_DeleteWindow",,pointer%
�7pointer%!0=main1%:ș "XWimp_DeleteWindow",,pointer%
�:main_w%!44=-(win_maxy%-win_miny%):main_w%!48=win_maxx%
�+ș "Wimp_CreateWindow",,main_w% � main%
�,ș "Wimp_CreateWindow",,main_w% � main1%
�Bpointer%!0=main%:pointer%!4=0:ș "Wimp_GetIconState",,pointer%
�"ș "Wimp_DeleteIcon",,pointer%
Dpointer%!4=main%:pointer%!8=0:pointer%!12=-(win_maxy%-win_miny%)
'pointer%!16=win_maxx%:pointer%!20=0
$ș "Wimp_CreateIcon",,pointer%+4
">� sploaded=� � tiled=� �puticonsprite(main%,0,backspname$)
,� I=0 � 80
6� file$(I)<>"" �
@ spname$=ftype$(I)
J1 ș "XWimp_SpriteOp",40,,ftype$(I) � ;flags%
T � (flags% � 1)=1 �
^1 � filetype(I)=&2000 spname$="application"
h/ � filetype(I)<>&2000 spname$="file_xxx"
r �
|D fg$=�~(fg):bg$=�~(bg):flag$=bg$+fg$+"018039":flag=�("&"+flag$)
�S �create_icon(main%,0,x(I)-50,x(I)+115,-(1024-(y(I)-65)),65,spname$,&4701801A)
�/ name$=�lastbit(file$(I)):wid%=(�name$)*16
�b �create_icon(main%,0,(x(I)-(wid%/2))+30,(x(I)+(wid%/2))+30,-(1024-(y(I)-115)),36,name$,flag)
�( �puticonsprite(main%,i%-1,spname$)
��
��
�>�openup(main%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%))
��
�
�� �checkmouse
�handle=(q%!12)
�icon%=q%!16
�Ȏ (q%!12) �
� main%,main1%
Ȏ (q%!8) �
6� 4 : � q%!16>0 �set_icon(q%!12,q%!16):�run(icon%)
&/� 2 : � q%!16>0 �:�setupinfo:�setmenuitem:�
0( � q%!16=0 �:�setclearmenu:�
:5 ș "XWimp_CreateMenu",,menu%,!q%-64,q%!4
DK� &10 : � q%!16>0 adjust=�:sf$=�lastbit(file$(q%!16)):�dragabout(q%!16)
NK� &40 : � q%!16>0 adjust=�:sf$=�lastbit(file$(q%!16)):�dragabout(q%!16)
X�
b� infowind%
lȎ (q%!8) �
v� 4 : Ȏ q%!16 �
�P� 9 : �slabicon:ș "XWimp_CreateMenu",,-1:�openup(moreinfo%,240,762,800,600)
��
��
�� backdrop%
�Ȏ (q%!8) �
�� 4 : Ȏ q%!16 �
�� 4 : �staytoggle
�H� 5 : �slabicon:�puticonsprite(main%,0,""):spritefile$="":sploaded=�
�`� 6 : tiled=�:�puticonsprite(backdrop%,6,"tradioon"):�puticonsprite(backdrop%,8,"tradiooff")
�`� 8 : tiled=�:�puticonsprite(backdrop%,6,"tradiooff"):�puticonsprite(backdrop%,8,"tradioon")
��
��
�
� saveas%
Ȏ (q%!8) �
� 4 : Ȏ q%!16 �
a� 3 : �slabicon:�shut(saveas%):sf$=�trans("StickyBrdDesktop$Dir")+"."+�geticondata(saveas%,2)
�load_new_desktop
*a� 4 : �slabicon:�shut(saveas%):sf$=�trans("StickyBrdDesktop$Dir")+"."+�geticondata(saveas%,2)
4 �save_disc
>�
H�
R� moreinfo%
\
Ȏ q%!8 �
f� 4 : Ȏ q%!16 �
p@ � 14 : �slabicon:�shut(moreinfo%):� � � �iconise(moreinfo%)
z�
��
�� warning%
�
Ȏ q%!8 �
� � 4 : Ȏ q%!16 �
�% � 4 : �slabicon:�shut(warning%)
�/ � 5 : �slabicon:�shut(warning%):appdata=0
� �
��
�
� loaded%
�
Ȏ q%!8 �
� � 4 : Ȏ q%!16 �
�$ � 5 : �slabicon:�shut(loaded%)
�G � 6 : �slabicon:�shut(loaded%):� "WimpTask <StickyBrd$Dir>.!Help"
�
�
� cset%
$
Ȏ q%!8 �
. � 4 : Ȏ q%!16 �
8 � 4 : �addh(2)
B � 5 : �subh(2)
L � 6 : �addm(3)
V � 7 : �subm(3)
`K � 8 : �slabicon:�settime(�geticondata(cset%,2),�geticondata(cset%,3))
j �
t�
~� clock%
�
Ȏ q%!8 �
�/ � 4,1 : �savedragbox(clock%,0):clocking%=�
��
�' : �modl_mclick(handle,icon%,q%!8)
��
��
�
�� �menu(fvar)
�� fg$,bg$,flag$
�mblk%=menu%
�flags=&7000021
�� fvar=1 fg=7:bg=4
fg$=�~(fg):bg$=�~(bg)
4flag$=bg$+�fgcol(bg)+"000121":bflag=�("&"+flag$)
4flag$=fg$+�fgcol(fg)+"000121":fflag=�("&"+flag$)
� fvar=1 $object%="File ''"
('� fvar=1 $openparent%="Open Parent"
2$� fvar=1 $fgb%="Text Foreground"
<$� fvar=1 $bgb%="Text Background"
F�header("StickyBrd",18)
P&�entry(&02,menu%+400,flags,"Misc")
Z.�indirect(&00,menu%+300,&07000121,object%)
d+�entry(&00,menu%+1900,flags,"Backdrop")
n$�entry(&00,-1,flags,"Clear All")
x)�entry(&00,menu%+500,flags,"Colours")
�*�entry(&00,menu%+1600,flags,"Options")
�)�entry(&02,modlmenu%,flags,"Modules")
��entry(&80,-1,flags,"Quit")
�#� modlptr=0 �grey_menu(menu%,6)
�mblk%=menu%+300
��header("Object",12)
�#�entry(&00,about%,flags,"Info")
�!�entry(&00,-1,flags,"Remove")
�+�indirect(&80,-1,&07000121,openparent%)
�mblk%=menu%+400
��header("Misc",9)
�&�entry(&00,infowind%,flags,"Info")
�#�entry(&00,about%,flags,"File")
'�entry(&80,saveas%,flags,"Desktop")
mblk%=menu%+500
�header("Colours",16)
"'�indirect(&00,menu%+600,fflag,fgb%)
,(�indirect(&80,menu%+1100,bflag,bgb%)
6mblk%=menu%+600
@�header("Colour",4)
J �entry(&00,-1,&07000019,"0")
T �entry(&00,-1,&17000019,"1")
^ �entry(&00,-1,&27000019,"2")
h �entry(&00,-1,&30000019,"3")
r �entry(&00,-1,&40000019,"4")
| �entry(&00,-1,&50000019,"5")
� �entry(&00,-1,&60000019,"6")
� �entry(&00,-1,&70000019,"7")
� �entry(&00,-1,&80000019,"8")
� �entry(&00,-1,&97000019,"9")
�!�entry(&00,-1,&A0000019,"10")
�!�entry(&00,-1,&B0000019,"11")
�!�entry(&00,-1,&C7000019,"12")
�!�entry(&00,-1,&D0000019,"13")
�!�entry(&00,-1,&E7000019,"14")
�!�entry(&80,-1,&F7000019,"15")
�� phew! and now again...
�mblk%=menu%+1100
��header("Colour",4)
� here we go
�entry(&00,-1,&07000019,"0")
�entry(&00,-1,&17000019,"1")
& �entry(&00,-1,&27000019,"2")
0 �entry(&00,-1,&30000019,"3")
: �entry(&00,-1,&40000019,"4")
D �entry(&00,-1,&50000019,"5")
N �entry(&00,-1,&60000019,"6")
X �entry(&00,-1,&70000019,"7")
b �entry(&00,-1,&80000019,"8")
l �entry(&00,-1,&97000019,"9")
v!�entry(&00,-1,&A0000019,"10")
�!�entry(&00,-1,&B0000019,"11")
�!�entry(&00,-1,&C7000019,"12")
�!�entry(&00,-1,&D0000019,"13")
�!�entry(&00,-1,&E7000019,"14")
�!�entry(&80,-1,&F7000019,"15")
��wimp_tick(menu%+600,7)
��wimp_tick(menu%+1100,4)
�mblk%=menu%+1600
��header("Options",13)
��entry(&00,-1,flags,"Hide")
�"�entry(&02,-1,flags,"Restore")
�-�entry(&00-clck,menu%+2100,flags,"Clock")
�!�entry(&00,-1,flags,"Update")
)�entry(&80-locked%,-1,flags,"Locked")
mblk%=menu%+1900
�header("Backdrop",9)
&�entry(&00,backdrop%,flags,"Load")
*#�entry(&00,aback%,flags,"Info")
4"�entry(&00,-1,flags,"Restore")
>'�entry(&80-turbo%,-1,flags,"Turbo")
Hmblk%=menu%+2100
R�header("Clock",9)
\*�entry(&00-emboss,-1,flags,"Embossed")
f*�entry(&00-recess,-1,flags,"Recessed")
p*�entry(&02-border,-1,flags,"Bordered")
z'�entry(&00-twelve,-1,flags,"HH:MM")
�*�entry(&00-twfour,-1,flags,"HH:MM:SS")
�'�entry(&02-hour,-1,flags,"24 Hour")
�!�entry(&80,-1,flags,"Set...")
��
�
�� �fgcol(col)
�Ȏ col �
�� 0,1,2,9,12,14,15 : ="7"
�!� 3,4,5,6,7,8,10,11,13 : ="0"
��
��
�
�� �header(T$,w)
$mblk%=T$
mblk%!12=&70207
mblk%!16=w*16
$mblk%!20=40
.mblk%!24=0
8
mblk%+=28
B�
L
V� �entry(A%,B%,C%,T$)
`mblk%!0=A%
jmblk%!4=B%
tmblk%!8=C%
~$(mblk%+12)=T$
�
mblk%+=24
��
�
�� �indirect(A%,B%,C%,D%)
�mblk%!0=A%
�mblk%!4=B%
�mblk%!8=C%
�mblk%!12=D%
�mblk%!16=-1
�mblk%!20=20
�
mblk%+=24
��
'� �error(e$,b%):!q%=0:$(q%+4)=e$+�0
2ș "XWimp_ReportError",q%,b%,"StickyBrd" � ,b%
=b%
(
2 � �lf
<�
Ff$=�250," "):f$="":T%=q%+44
Pȕ ?T%<>0:f$+=�?T%:T%+=1:�
Z!� q%!20=backdrop% � q%!24=2 �
d�loadbackdrop
n�
x�addtodesktop
��
�"�modl_dataload(f$,q%!20,q%!24)
�3q%!12=q%!8:q%!16=4:ș "XWimp_SendMessage",17,q%
��
�
�
� �redraw
�� q%!0=main% �
� � tiled=� �
� � sploaded=� �
� B%=q%
� � mcode%
� �modl_redraw
� �
�
�
�
"�modl_redraw
,&ș "XWimp_RedrawWindow",,q% � flag
6ȕ flag<>0
@&ș "XInterface_Render3dWindow",,q%
J&ș "XWimp_GetRectangle",,q% � flag
T�
^�
h
r� �assemble
|� pass%=8 � 11 � 2
�P%=mcode%:L%=mcode%+300
�[OPT pass%
�.start%
�ASWI "Wimp_RedrawWindow" ; Get Wimp manager to redraw window
�4.rl ; Start of redraw loop
�0CMP R0,#0 ; More to redraw ?
�A�Q PC,R14 ; No, so exit (Program Counter = Link)
�!LDR R2,[R1,#4] ; }
�!LDR R3,[R1,#8] ; }
�1LDR R4,[R1,#12] ; } Get PWA offsets
�?LDR R5,[R1,#16] ; } & such like from R1 (i.e. q%)
�!LDR R6,[R1,#20] ; }
�!LDR R7,[R1,#24] ; }
)SUB R0,R2,R6 ; Get min x
+STR R0,mix% ; Store min x
)SUB R0,R5,R7 ; Get max y
&'SUB R0,R0,#4 ; Correct
0+STR R0,may% ; Store max y
:)SUB R0,R4,R6 ; Get max x
D'SUB R0,R0,#4 ; Correct
N+STR R0,max% ; Store max x
X)SUB R0,R3,R7 ; Get min y
b+STR R0,miy% ; Store min y
l.spr_num
vKMOV R0,#512 ; 'Plot sprite' reason code -- use indirected
�IADD R0,R0,#52 ; Make up to 564 - can't represent directly
�/LDR R1,sp% ; Get sprite area
�/LDR R2,name% ; Get sprite name
�?MOV R5,#8 ; Plot type - overwrite, use mask
�$LDR R6,scl% ; Null
�$LDR R7,col% ; Null
�$MOV R8,#0 ; Null
�/LDR R9,miy% ; Minimum Y value
�
.yloop
�/ LDR R10,mix% ; Minimum X value
� .xloop
�3 MOV R3,R10 ; X (Taken from loop)
�3 MOV R4,R9 ; Y (Taken from loop)
' SWI "OS_SpriteOp" ; Plot it
- LDR R11,xinc% ; Get step size
8 ADD R10,R10,R11 ; Increment X by step size
- LDR R11,max% ; Get maximum X
*' CMP R10,R11 ; Compare
42 BLE xloop ; Loop back if < max
>- LDR R11,yinc% ; Get step size
H8 ADD R9,R9,R11 ; Increment Y by step size
R- LDR R11,may% ; Get maximum Y
\' CMP R9,R11 ; Compare
f2 BLE yloop ; Loop back if < max
p:LDR R1,ind_q% ; Get address of param block
z2SWI "Wimp_GetRectangle" ; Get next rectangle
�+B rl ; Branch back
�.sp% EQUD 0
�.name% EQUD 0
�.xinc% EQUD 0:.yinc% EQUD 0
�7.max% EQUD 0:.mix% EQUD 0:.may% EQUD 0:.miy% EQUD 0
�,.ind_q% EQUD 0:.scl% EQUD 0:.col% EQUD 0
� ALIGN
� .end%
�]
�� pass%
�� pass%=0 � 3 � 2
�P%=mcode2%:L%=mcode2%+100
�[OPT pass%
ADR R1,time_block%
MOV R0,#3
STRB R0,[R1]
$MOV R0,#14
.SWI "OS_Word"
8MOV PC,R14
B]
L� pass%
V�
`
j� �re_asm(type%)
tȎ type% �
~ � � : P%=spr_num
� [OPT 2
� MOV R0,#512
� ADD R0,R0,#34
� ]
� � �: P%=spr_num
� [OPT 2
� MOV R0,#512
� ADD R0,R0,#52
� ]
��
��
�
� �pix_trans
� sploaded �
Cș "Wimp_ReadPixTrans",&100,sprite%,backspname$,,,,scale%,cols%
�
(�
2
<� �process_menu
F9ș "XWimp_GetPointerInfo",,pointer%:j%=(pointer%!8=1)
PȎ handle �
Z� main%,main1%
d Ȏ q%!0 �
n � 1 : Ȏ q%!4 �
x$ � 1 : � (icon% � 2=0) icon%-=1
� �delete(icon%,1)
�. �modl_delete(icon%,type(icon%))
�$ � 2 : � (icon% � 2=0) icon%-=1
�> �("WimpTask Filer_OpenDir "+�dir(file$(icon%)))
� �
� � 2 : Ȏ q%!4 �
� � 2 : sf$=desktop$
� �load_new_desktop
�4 � 3 : turbo%=� turbo%:�menu(0):�re_asm(turbo%)
� �
� � 3 : �deleteall
� � 4 : Ȏ q%!4 �
� � 0 : � q%!8<>-1 �fg
� 1 : � q%!8<>-1 �bg
�
� 5 : Ȏ q%!4 �
"m � 0 : �shut(main%):�openup(main1%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%)):�grey_menu(menu%+2200,0)
,' �grey_menu(menu%+2200,1)
6� � 1 : �shut(main1%):�openup(main%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%)):� clck=� �openup(clock%,clockx%,clocky%,200,200)
@& �grey_menu(menu%+2200,1)
J& �grey_menu(menu%+2200,0)
T � 2 : Ȏ q%!8 �
^B � -1 : clck=� clck:�menu(0):�grey_menu(menu%+2200,1):�clock
h] � 0 : �set_clock_flags(�,�,�,twelve,twfour,hour):�menu(0):�grey_menu(menu%+2200,1):�rs
r] � 1 : �set_clock_flags(�,�,�,twelve,twfour,hour):�menu(0):�grey_menu(menu%+2200,1):�rs
|] � 2 : �set_clock_flags(�,�,�,twelve,twfour,hour):�menu(0):�grey_menu(menu%+2200,1):�rs
�^ � 3 : �set_clock_flags(emboss,recess,border,�,�,hour):�menu(0):�grey_menu(menu%+2200,1)
�^ � 4 : �set_clock_flags(emboss,recess,border,�,�,hour):�menu(0):�grey_menu(menu%+2200,1)
�j � 5 : �set_clock_flags(emboss,recess,border,twelve,twfour,� hour):�menu(0):�grey_menu(menu%+2200,1)
�� � 6 : cx%=pointer%!0:cy%=pointer%!4:�setup_sclck:�openup(cset%,cx%,cy%,500,250):ș "XWimp_SetCaretPosition",cset%,2,,,-1,�(�geticondata(cset%,2))
� �
� � 3 : q%!8=fg:�fg
�& � 4 : locked%=� locked%:�menu(0)
� �
� � 6 : �modl_sendmenu
� � 7 : �modl_quit:quit%=�
��
�� &FFFFFFFF
� � step%=0 � q%!0
' q$=$(filemen%+28+(24*step%)+12)
filepath$+="."+q$
�
&5 ș "XWimp_StartTask","Filer_OpenDir "+filepath$
0�
:=� j% � ș "XWimp_CreateMenu",,menu%,pointer%!0,pointer%!4
D�
N
X� �openup(whandle,x,y,w,h)
bpointer%!0=whandle
lpointer%!4=x:pointer%!8=y-h
v!pointer%!12=x+w:pointer%!16=y
�pointer%!20=0:pointer%!24=0
�U� whandle=main% � whandle=main1% � whandle=clock% pointer%!28=-2 � pointer%!28=-1
�#ș "XWimp_OpenWindow",,pointer%
��
�
�� �slabicon
�"ș "XInterface_SlabButton",,q%
�
q%!8=0
�"ș "XInterface_SlabButton",,q%
��
�
�!� �geticondata(window%,icon%)
�pointer%!0=window%
pointer%!4=icon%
%ș "XWimp_GetIconState",,pointer%
=$(pointer%!28)
*$� �puticondata(window%,icon%,T$)
4pointer%!0=window%
>pointer%!4=icon%
H%ș "XWimp_GetIconState",,pointer%
Rpointer%!8=0
\pointer%!12=0
f$(pointer%!28)=T$
p%ș "XWimp_SetIconState",,pointer%
z�
�
�� �loadbackdrop
�)sploaded=�:�puticonsprite(main%,0,"")
�(� n%,o%,b%,q$,h%,x%,y%,v%,m%,var%,z$
��("IconSprites "+f$)
�&ș "OS_SpriteOp",256+10,sprite%,f$
�h%=�(f$)
�n%=�b:o%=�b:b%=-4
��#h%=o%+b%:b%+=o%:o%=�b
�(q$="":� var=1 � 12:q$+=�(�#h%):� var
�palette$="No"
�Lx%=�b:y%=�b:v%=-�b+�b-31:m%=�b:�m%=�#h%-4 palette$="No" � palette$="Yes"
�� m% � �b:z$="Yes" � z$="N"
1m%=�b:ș "XOS_ReadModeVariable",m%,9 � ,,var%
?x%=(32*(x%+1)+v%) � 2^var%:spx%=x%:spy%=y%+1:backspname$=q$
+ș "XOS_ReadModeVariable",m%,4 � ,,var%
$sp1x%=spx%<<var%
.+ș "XOS_ReadModeVariable",m%,5 � ,,var%
8sp1y%=spy%<<var%
B�#h%
L(ș "XOS_CheckModeValid",m% � exists%
V5� exists%<>-1 � exists%<>-2 ș "XWimp_SetMode",m%
`(�string_at_address(backspname$,loc%)
j6!name%=loc%:!sp%=sprite%:!xinc%=sp1x%:!yinc%=sp1y%
t�pix_trans
~/� tiled=� �tiled(m%,spx%,spy%,q$,x%,y%+1):�
�'�puticonsprite(main%,0,backspname$)
�spritefile$=f$
��puticondata(aback%,3,f$)
�&�puticondata(aback%,4,backspname$)
�#�puticondata(aback%,5,palette$)
�$�puticondata(aback%,7,"Centred")
��puticondata(aback%,14,�m%)
��puticondata(aback%,16,�x%)
�#�puticondata(aback%,18,�(y%+1))
�ș "XWimp_CreateMenu",,-1
��
�
� �display_block(max)
� debugging routine
�
#� Displays wimp parameter block
(:
2� I=0 � max � 4
<(� I=24 x%=�error(�~(pointer%!I),1):�
F'� I=28 x%=�error($(pointer%+I),1):�
P)� I=32 x%=�error($(pointer%+I),1):�:�
Z#� and now general purpose stuff
dx%=�error(�pointer%!I,1)
n�
x:
��
�
�&� �puticonsprite(window%,icon%,T$)
�'pointer%!0=window%:pointer%!4=icon%
�%ș "XWimp_GetIconState",,pointer%
�#ș "XWimp_DeleteIcon",,pointer%
�4pointer%!4=window%:$(pointer%+28)=T$:pointer%+=4
ȁș "XWimp_CreateIcon",,pointer%:ș "XWimp_ForceRedraw",pointer%!0,pointer%!4,pointer%!8,pointer%!12,pointer%!16:pointer%-=4:�
�
�:� �create_icon(handle,addr,minx,maxx,miny,ht,t$,flags)
�point%=q%+400
�point%!0=handle
�point%!4=minx
point%!8=miny
point%!12=maxx
point%!16=miny+ht
"point%!20=flags
,� addr=0 �
6$(point%+24)=t$
@�
Jpoint%!24=addr
Tpoint%!28=-1
^point%!32=32
h�
r%ș "Wimp_CreateIcon",,point% � i%
|�
�
�� �addtodesktop
�type$=""
�8� q%!40<>&2000 � q%!40<>&1000 type$=�getftype(q%!40)
�&� q%!40=&2000 � type$=�lastbit(f$)
�#� q%!40=&1000 type$="directory"
�spname$=type$
�+ș "XWimp_SpriteOp",40,,type$ � ;flags%
�� (flags% � 1)=1 �
�( � q%!40=&2000 spname$="application"
�5 � q%!40<>&2000 � q%!40<>&1000 spname$="file_xxx"
��
�Bfg$=�~(fg):bg$=�~(bg):flag$=bg$+fg$+"018039":flag=�("&"+flag$)
'ș "XWimp_GetPointerInfo",,pointer%
!pointer%!0-=32:pointer%!4+=32
��create_icon(main%,0,pointer%!0-50,pointer%!0+115,-(1024-(pointer%!4-65)),65,spname$,&4701801A):file$(i%)=f$:x(i%)=pointer%!0:y(i%)=pointer%!4:ftype$(i%)=type$:filetype(i%)=q%!40
&D� q%!40=&2000 type(i%)=0 � � q%!40=&1000 type(i%)=1 � type(i%)=2
0'name$=�lastbit(f$):wid%=(�name$)*16
:r�create_icon(main%,0,(pointer%!0-(wid%/2))+30,(pointer%!0+(wid%/2))+30,-(1024-(pointer%!4-115)),36,name$,flag)
D&�puticonsprite(main%,i%-1,spname$)
NIș "XWimp_ForceRedraw",point%!0,point%!4,point%!8,point%!12,point%!16
X�
b
l� �staytoggle
v(� stayopen=� stayopen=� � stayopen=�
��� stayopen=� �puticonsprite(backdrop%,4,"topton"):pointer%!0=backdrop%:ș "XWimp_GetWindowState",,pointer%:ș "XWimp_CreateMenu",,-1:pointer%!28=-1:ș "XWimp_OpenWindow",,pointer%
�6� stayopen=� �puticonsprite(backdrop%,4,"toptoff")
��
�
�4� �rtoz(T%):q$="":ȕ ?T%<>0:q$+=�?T%:T%+=1:�:=q$
�
� � �xy
�� Debug FN
� =�pointer%!0+"/"+�pointer%!4
�
�� �zero(expression)
�=0-expression
�
� �lastbit(s$)
"� s$="<Wimp$Scrap>" ="Tempory"
ȕ �s$,":")>0
s$=�s$,�s$,":")+1)
*�
4ȕ �s$,".")>0
>s$=�s$,�s$,".")+1)
H�
R=s$
\
f� �run(val)
p� (val � 2=0) val-=1
z'ș "XWimp_GetPointerInfo",,pointer%
�#x=pointer%!0-32:y=pointer%!4+32
�Ȏ type(val) �
�� 3
�Ȏ file$(val) �
�3 � "Info" : �openup(infowind%,x,y,650,450)
�3 � "More Info" : �openup(moreinfo%,x,y,800,600)
�3 � "Backdrop" : �openup(backdrop%,x,y,540,450)
�1 � "Save" : �openup(saveas%,x,y,300,180)
�0 � "Object" : �openup(about%,x,y,780,350)
�0 � "Clock" : �openup(clock%,x,y,200,100)
�2 � "Warning" : �openup(warning%,x,y,650,300)
�1 � "Loaded" : �openup(loaded%,x,y,650,300)
�0 � "BackInfo" : �openup(aback%,x,y,780,360)
~ � "ClockSet" : �setup_sclck:�openup(cset%,x,y,500,250):ș "XWimp_SetCaretPosition",cset%,2,,,-1,�(�geticondata(cset%,2))
� : �setmodlinfo(�modl_handle(file$(val))):�openup(�modl_handle(file$(val)),x,y,�modl_xw(file$(val)),�modl_yh(file$(val)))
�
$< � 1 : �("WimpTask Filer_OpenDir "+file$(val))
.8 � 2 : �file_run(file$(val),filetype(val))
8 � 0 : � � � �
B? �("WimpTask Filer_OpenDir "+file$(val))
L �
V" � �(� �) �
`5 �("WimpTask Run "+file$(val))
j �
t5 : �modl_click(type(val),file$(val),x,y)
~�
��
�
�� �delete(val,flag)
�� locked% �
�� type(val)>3 � flag=1 �
�pointer%!0=main%
�pointer%!4=val
�%ș "XWimp_GetIconState",,pointer%
�#ș "XWimp_DeleteIcon",,pointer%
�Sș "XWimp_ForceRedraw",pointer%!0,pointer%!4,pointer%!8,pointer%!12,pointer%!16
�pointer%!4=val+1
�%ș "XWimp_GetIconState",,pointer%
#ș "XWimp_DeleteIcon",,pointer%
Sș "XWimp_ForceRedraw",pointer%!0,pointer%!4,pointer%!8,pointer%!12,pointer%!16
2� clck �openup(clock%,clockx%,clocky%,200,200)
Nfile$(val)="":type(val)=0:x(val)=0:y(val)=0:ftype$(val)="":filetype(val)=0
(�
2
<� �shut(handle)
Fpointer%!0=handle
P$ș "XWimp_CloseWindow",,pointer%
Z�
d
n� �set(window,icon)
xpointer%!0=window
�pointer%!4=icon
�pointer%!8=&200000
�pointer%!12=0
�%ș "XWimp_SetIconState",,pointer%
��
�
�!� �savedragbox(window%,icon%)
�� x%,y%,ysize%
�!pointer%=window%
�'ș "XWimp_GetWindowState",,pointer%
�!ysize%=pointer%!16-pointer%!8
�x%=pointer%!4
�y%=pointer%!8
� window%=main% �
pointer%!4=icon%+1
' ș "XWimp_GetIconState",,pointer%
" ny%=pointer%!12
,�
6pointer%!4=icon%
@%ș "XWimp_GetIconState",,pointer%
Jsf$=�lastbit(sf$)
Tpointer%!8+=x%
^� window%=main% �
h pointer%!12=ny%+y%+ysize%
r�
| pointer%!12+=y%+ysize%
��
�pointer%!16+=x%
�pointer%!20+=y%+ysize%
�pointer%!24=0
�pointer%!28=0
�pointer%!32=&7FFFFFFF
�pointer%!36=&7FFFFFFF
�pointer%!0=0
�pointer%!4=5
� ș "XWimp_DragBox",,pointer%
��
�
�
� �import
'ș "XWimp_GetPointerInfo",,pointer%
5pointer%!32=pointer%!4 :thirtytwo%=pointer%!32
7pointer%!28=pointer%!0 :twentyeight%=pointer%!28
&6pointer%!24=pointer%!16 :twentyfour%=pointer%!24
02pointer%!20=pointer%!12 :twenty%=pointer%!20
:pointer%!16=1
Dpointer%!12=0
Npointer%!36=0
Xpointer%!40=0
b!pointer%=64
l$(pointer%+44)=sf$
v>ș "XWimp_SendMessage",17,pointer%,pointer%!20,pointer%!24
�myref%=pointer%!8
��
�
�
� �dosave
�sf$=�rtoz(q%+44)
�$� adjust=� �dragged � �copy_file
��
�
�� �tellemoff(e$)
� � er%
�er%=pointer%
�
!er%=0
�$(er%+4)=e$+�0
!,ș "XWimp_ReportError",er%,1,"StickyBrd"
!�
!
! � �save_disc
!*
h%=�(sf$)
!4<�#h%,fg,bg,tiled,clck,emboss,recess,border,twelve,twfour
!>%�#h%,clockx%,clocky%,hour,locked%
!H� I=0 � 80
!R9�#h%,file$(I),type(I),x(I),y(I),ftype$(I),filetype(I)
!\�
!f�#h%
!ph� sploaded ș "OS_SpriteOp",12+256,sprite%,�trans("StickyBrdDesktop$Dir")+"."+¤lastbit(sf$),8)+"SP"
!z�modl_saveconfig
!�+ș "Wimp_CreateMenu",,-1:�shut(saveas%)
!��
!�
!�� �intercept
!�2f$=�250," "):f$="":f$=�rtoz(q%+44):new_app$=f$
!�Ȏ q%!40 �
!�@� &FFD : � �lastbit(f$)="!Config" �load_new_placeit_file(f$)
!� : �
!��
!�3q%!12=q%!8:q%!16=4:ș "XWimp_SendMessage",17,q%
!��
!�
!�� �load_new_desktop
"h%=0:� �
"B� � � �tellemoff("Desktop file load error #"+Þ+" ("+�$+")"):�
"ș "XHourglass_On"
"$�deleteall
".�modl_clearback(1,sf$)
"8desktop$=sf$
"B
h%=�(sf$)
"L>�#h%,nfg,nbg,tiled,clck,emboss,recess,border,twelve,twfour
"V%�#h%,clockx%,clocky%,hour,locked%
"`� I=0 � 80
"j$ � SYS "XHourglass_Percentage",I
"t: �#h%,file$(I),type(I),x(I),y(I),ftype$(I),filetype(I)
"~�
"�
�#h%:h%=0
"�Ispritefile$=�trans("StickyBrdDesktop$Dir")+"."+¤lastbit(sf$),8)+"SP"
"�j%=�(spritefile$)
"�t=�:� j%>0 t=�
"��#j%
"� � t �
"� f$=spritefile$
"� �loadbackdrop
"��
"�� I=0 � 80
"� � file$(I)<>"" �
"� � filetype(I)=&2000 �
# 3 ș "XWimp_SpriteOp",40,,ftype$(I) � ;flags%
#
� (flags% � 1)=1 �
# � �(�-3) �
#! h%=�(file$(I)+".!Boot")
#( � h%=0 �
#2% i%=�(file$(I)+".!Sprites")
#<> � i%<>0 �#i%:�("IconSprites "+file$(I)+".!Sprites")
#F � i%=0 �#i%
#P �
#Z � h%<>0 �
#d �#h%
#n' �("Obey "+file$(I)+".!Boot")
#x �
#� � h%=0 �#h%
#�
�
#� �
#� �
#� �
#� � file$(I)<>"" �
#� spname$=ftype$(I)
#�/ ș "XWimp_SpriteOp",40,,spname$ � ;flags%
#� � (flags% � 1)=1 �
#�( � type(I)=0 spname$="application"
#�% � type(I)=2 spname$="file_xxx"
#� �
#�S �create_icon(main%,0,x(I)-50,x(I)+115,-(1024-(y(I)-65)),65,spname$,&4701801A)
$/ name$=�lastbit(file$(I)):wid%=(�name$)*16
$D fg$=�~(fg):bg$=�~(bg):flag$=bg$+fg$+"018039":flag=�("&"+flag$)
$b �create_icon(main%,0,(x(I)-(wid%/2))+30,(x(I)+(wid%/2))+30,-(1024-(y(I)-115)),36,name$,flag)
$"( �puticonsprite(main%,i%-1,spname$)
$, �
$6�
$@%�menu(0):�grey_menu(menu%+2200,1)
$J�shut(main%)
$T>�openup(main%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%))
$^�rs
$hdummy=q%!8
$rq%!8=nfg:�fg
$|q%!8=nbg:�bg
$�q%!8=dummy
$�� tiled=� �
$�+ �puticonsprite(backdrop%,6,"tradioon")
$�, �puticonsprite(backdrop%,8,"tradiooff")
$� �
$�, �puticonsprite(backdrop%,6,"tradiooff")
$�+ �puticonsprite(backdrop%,8,"tradioon")
$��
$�� inform modules
$��modl_deskstart
$��shut(saveas%)
$�ș "XHourglass_Off"
$�� �
%�
%
%� �setupinfo
%&� (icon% � 2=0) icon%-=1
%0Cfil$=file$(icon%):� fil$="<Wimp$Scrap>" fil$="Application Data"
%:&� �fil$,1)="*" fil$=�lastbit(fil$)
%D�puticondata(about%,6,fil$)
%N2�puticondata(about%,7,�ftype(filetype(icon%)))
%X-�puticondata(about%,8,�type(type(icon%)))
%b#�puticondata(about%,9,desktop$)
%lspname$=ftype$(icon%)
%v-ș "XWimp_SpriteOp",40,,spname$ � ;flags%
%�� (flags% � 1)=1 �
%�* � type(icon%)=0 spname$="application"
%�' � type(icon%)=2 spname$="file_xxx"
%��
%�%�puticonsprite(about%,11,spname$)
%��
%�
%�� �type(type)
%�
Ȏ type �
%� � 0 : ="Runs Application"
%� � 1 : ="Opens Directory"
%� � 2 : ="Executes File"
%� � 3 : ="Opens Window"
& � 4 : ="Executes Command"
&�
&="Module-Specific"
&
&*� �ftype(type)
&4#� type=&FFFF ="Iconised Window"
&>� type=&2000 ="Application"
&H� type=&1000 ="Directory"
&R� type=&000 ="Module Icon"
&\0ș "XOS_FSControl",&12,,type � ,,byte1,byte2
&f5q$="":!pointer%=byte1:pointer%?4=13:q$+=$pointer%
&p/!pointer%=byte2:pointer%?4=13:q$+=$pointer%
&z!ȕ �q$,1)=" ":q$=�q$,�q$-1):�
&�type$=�~(type)
&�!� �(type$)=1 type$="00"+type$
&� � �(type$)=2 type$="0"+type$
&�� �q$,3)=type$ q$=""
&�q$+=" (&"+type$+")"
&�=q$
&�
&�� �dragabout(ic%)
&�� (ic% � 2=0) ic%-=1
&�u�savedragbox(main%,ic%):file$=file$(ic%):ftype$=ftype$(ic%):filetype=filetype(ic%):iconhandle%=ic%:type=type(ic%)
&��
&�
&�� �dragend
'+� clocking%=� clocking%=�:�move_clock:�
'sf$=�lastbit(file$)
'�import
'$�
'.
'80� �copy_file:� sf$="<Wimp$Scrap>" �dragged:�
'B�set_icon(handle,icon%)
'L� (icon% � 2)=0 icon%-=1
'Vmove=�:� � � move=�
'`Ȏ type(icon%) �
'j� 0,1,2
't;�("Set Copy$Options A ~C ~D ~F ~L ~N ~P ~Q R ~S ~T ~V")
'~file1$=sf$
'��("Copy "+file$+" "+file1$)
'�*� �lastbit(file1$)="Tempory" appdata=�
'�� move �delete(icon%,0)
'�
� 3 : �:�
'�, : �modl_dragend(file$,sf$,type(icon%))
'��
'��
'�
'�� �string0(a%,a$)
'�$a%=a$:a%?�a$=0
'��
'�
( � �deleteall
(
� I=0 � 80
(� file$(I)<>"" �delete(I,1)
(�
((�modl_clearback(0,"")
(2�shut(main%)
(<>�openup(main%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%))
(F�
(P
(Z� �wimp_tick(b%,n)
(d#b%!(28+24*n)=b%!(28+24*n) � &01
(n�
(x
(� � �fg
(�ș "XHourglass_On"
(��wimp_tick(menu%+600,fg)
(�fg=q%!8
(��wimp_tick(menu%+600,fg)
(�fg$=�~(fg)
(�bg$=�~(bg)
(�flag$=bg$+fg$+"018039"
(�flag=�("&"+flag$)
(�� I=0 � 80
(�� file$(I)<>"" �
(�!pointer%!0=main%:pointer%!4=I
(�2ș "XWimp_DeleteIcon",,pointer%:pointer%!4=I+1
)#ș "XWimp_DeleteIcon",,pointer%
)spname$=ftype$(I)
),ș "XWimp_SpriteOp",40,,spname$ � ;flag%
)"� (flag% � 1)=1 �
),& � type(I)=0 spname$="application"
)6# � type(I)=2 spname$="file_xxx"
)@�
)JQ�create_icon(main%,0,x(I)-50,x(I)+115,-(1024-(y(I)-65)),65,spname$,&4701801A)
)T-name$=�lastbit(file$(I)):wid%=(�name$)*16
)^`�create_icon(main%,0,(x(I)-(wid%/2))+30,(x(I)+(wid%/2))+30,-(1024-(y(I)-115)),36,name$,flag)
)h&�puticonsprite(main%,i%-1,spname$)
)rL� SYS "XWimp_ForceRedraw",point%!0,point%!4,point%!8,point%!12,point%!16
)|�
)��
)�fg$=�~(fg)
)�%menuflag$=fg$+�fgcol(fg)+"000121"
)�0menuflag=�("&"+menuflag$):menu%!536=menuflag
)��shut(main%)
)�>�openup(main%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%))
)�ș "XHourglass_Off"
)��
)�
)� � �bg
)�ș "XHourglass_On"
)��wimp_tick(menu%+1100,bg)
)�bg=q%!8
*�wimp_tick(menu%+1100,bg)
*fg$=�~(fg)
*bg$=�~(bg)
*&flag$=bg$+fg$+"018039"
*0flag=�("&"+flag$)
*:� I=0 � 80
*D� file$(I)<>"" �
*N!pointer%!0=main%:pointer%!4=I
*X2ș "XWimp_DeleteIcon",,pointer%:pointer%!4=I+1
*b#ș "XWimp_DeleteIcon",,pointer%
*lspname$=ftype$(I)
*v-ș "XWimp_SpriteOp",40,,spname$ � ;flags%
*�� (flags% � 1)=1 �
*�& � type(I)=0 spname$="application"
*�# � type(I)=2 spanme$="file_xxx"
*��
*�Q�create_icon(main%,0,x(I)-50,x(I)+115,-(1024-(y(I)-65)),65,spname$,&4701801A)
*�-name$=�lastbit(file$(I)):wid%=(�name$)*16
*�m�create_icon(main%,0,(x(I)-(wid%/2))+30,(x(I)+(wid%/2))+30,-(1024-(y(I)-115)),36,�lastbit(file$(I)),flag)
*�&�puticonsprite(main%,i%-1,spname$)
*�L� SYS "XWimp_ForceRedraw",point%!0,point%!4,point%!8,point%!12,point%!16
*��
*��
*�bg$=�~(bg)
*�%menuflag$=bg$+�fgcol(bg)+"000121"
+menuflag=�("&"+menuflag$)
+menu%!560=menuflag
+�shut(main%)
+ >�openup(main%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%))
+*ș "XHourglass_Off"
+4�
+>
+H� �getftype(type)
+Rtype$=�~(type)
+\!� �(type$)=1 type$="00"+type$
+f � �(type$)=2 type$="0"+type$
+p="file_"+type$
+z
+�+� �b:=�#h%+�#h%*2^8+�#h%*2^16+�#h%*2^24
+�
+�(� �dragged:� x%,y%:x%=q%!28:y%=q%!32
+�� locked% �
+��ș "XHourglass_On":�set_icon(handle,icon%):pointer%!0=main%:pointer%!4=iconhandle%:ș "XWimp_DeleteIcon",,pointer%:pointer%!4=iconhandle%+1:ș "XWimp_DeleteIcon",,pointer%
+�2� clck �openup(clock%,clockx%,clocky%,200,200)
+�%pointer%!0=x%-32:pointer%!4=y%+32
+�<spname$=ftype$:ș "XWimp_SpriteOp",40,,spname$ � ;flags%
+�� (flags% � 1)=1 �
+�# � type=0 spname$="application"
+� � type=2 spname$="file_xxx"
+��
+���create_icon(main%,0,pointer%!0-50,pointer%!0+115,-(1024-(pointer%!4-65)),65,spname$,&4701801A):x(i%)=pointer%!0:y(i%)=pointer%!4:file$(i%)=file$:ftype$(i%)=ftype$:filetype(i%)=filetype
,fg$=�~(fg)
,bg$=�~(bg)
,flag$=bg$+fg$+"018039"
,$<flag=�("&"+flag$):name$=�lastbit(file$):wid%=(�name$)*16
,.|�create_icon(main%,0,(pointer%!0-(wid%/2))+30,(pointer%!0+(wid%/2))+30,-(1024-(pointer%!4-115)),36,�lastbit(file$),flag)
,8&�puticonsprite(main%,i%-1,spname$)
,B�shut(main%)
,Lgpointer%!0=main%:ș "XWimp_GetWindowState",,pointer%:pointer%!28=-2:ș "XWimp_OpenWindow",,pointer%
,V!ș "XHourglass_Off":appdata=�
,`�
,j
,t� �iconise(handle)
,~fg$=�~(fg)
,�bg$=�~(bg)
,�flag$=bg$+fg$+"018039"
,�flag=�("&"+flag$)
,�'ș "XWimp_GetPointerInfo",,pointer%
,�!pointer%!0-=32:pointer%!4+=32
,�e�create_icon(main%,0,pointer%!0-50,pointer%!0+115,-(1024-(pointer%!4-65)),65,"iconise",&4701801A)
,�-name$=�translate(handle):wid%=(�name$)*16
,��create_icon(main%,0,(pointer%!0-(wid%/2))+30,(pointer%!0+(wid%/2))+30,-(1024-(pointer%!4-105)),36,�translate(handle),flag)
,�(�puticonsprite(main%,i%-1,"iconise")
,�|i%-=1:file$(i%)=�translate(handle)::ftype$(i%)="iconise":filetype(i%)=&FFFF:x(i%)=pointer%!0:y(i%)=pointer%!4:type(i%)=3
,�Iș "XWimp_ForceRedraw",point%!0,point%!4,point%!8,point%!12,point%!16
,��
-
-
� �translate(handle)
-Ȏ handle �
- � infowind% : ="Info"
-( � moreinfo% : ="More Info"
-2 � backdrop% : ="Backdrop"
-< � saveas% : ="Save"
-F � about% : ="Object"
-P � clock% : ="Clock"
-Z � warning% : ="Warning"
-d � loaded% : ="Loaded"
-n � aback% : ="BackInfo"
-x � cset% : ="ClockSet"
-��
-�=�modl_trans(handle)
-�
-�� �clock
-�7� clck=-1 �openup(clock%,clockx%,clocky%,200,200):�
-�� clck=0 �shut(clock%):�
-�Z�tellemoff("Clock display error, clock handle "+�clock%+", returning to poll loop."):�
-�
-�� �update_clock
-� time$=�geticondata(clock%,0)
-�
� mcode2%
-�� hour=� �
-�2� twfour type$="%24:%MI:%SE" � type$="%24:%MI"
.�
.2� twfour type$="%12:%MI:%SE" � type$="%12:%MI"
.�
.">ș "OS_ConvertDateAndTime",time_block%,time_buff%,20,type$
.,buff$=�rtoz(time_buff%)
.6/� time$<>buff$ �puticondata(clock%,0,buff$)
.@�
.J
.T� �warning
.^%�openup(warning%,315,662,650,300)
.h�
.r
.|)� �tiled(mode%,sx%,sy%,spname$,x%,y%)
.�spritefile$=f$
.��puticondata(aback%,3,f$)
.�"�puticondata(aback%,4,spname$)
.�#�puticondata(aback%,5,palette$)
.�"�puticondata(aback%,7,"Tiled")
.�"�puticondata(aback%,14,�mode%)
.��puticondata(aback%,16,�x%)
.��puticondata(aback%,18,�y%)
.�.ș "XOS_ReadModeVariable",mode%,4 � ,,var%
.�sx%=sx%<<var%
.�.ș "XOS_ReadModeVariable",mode%,5 � ,,var%
.�sy%=sy%<<var%
.��shut(main%)
/>�openup(main%,0,win_maxy%,win_maxx%,(win_maxy%-win_miny%))
/ș "XWimp_CreateMenu",,-1
/�
/&
/0� �grey_icon(w%,i%)
/:pointer%!0=w%
/Dpointer%!4=i%
/Npointer%!8=&400000
/Xpointer%!12=0
/b%ș "XWimp_SetIconState",,pointer%
/l�
/v
/�� �setmenuitem
/� � ic%
/�
ic%=q%!16
/�� (ic% � 2=0) ic%-=1
/�ft$="File":tt$="File"
/�Ȏ type(ic%) �
/�&� 0 : ft$="App.":tt$="Application"
/�9 � �as(menu%+300,2)=1 �grey_menu(menu%+300,2)
/�$� 1 : ft$="Dir.":tt$="Directory"
/�9 � �as(menu%+300,2)=1 �grey_menu(menu%+300,2)
/�� 2 : ft$="File":tt$="File"
/�9 � �as(menu%+300,2)=1 �grey_menu(menu%+300,2)
/�!� 3 : ft$="Win.":tt$="Window"
09 � �as(menu%+300,2)=0 �grey_menu(menu%+300,2)
0 : ft$="Obj.":tt$="Object"
09 � �as(menu%+300,2)=0 �grey_menu(menu%+300,2)
0 �
0*.$object%=ft$+" '"+�lastbit(file$(ic%))+"'"
04$(menu%+300)=tt$
0>(� �as(menu%,1)=1 �grey_menu(menu%,1)
0H0� �as(menu%+400,1)=1 �grey_menu(menu%+400,1)
0R�
0\
0f� �set_icon(w%,i%)
0ppointer%!0=w%
0zpointer%!4=i%
0�pointer%!8=&200000
0�pointer%!12=0
0�%ș "XWimp_SetIconState",,pointer%
0��
0�
0�� �sendhelp
0�%q%!12=q%!8:q%!16=&503:help%=q%+20
0�.help%=�help(q%!32,q%!36,help%):� help%=0 �
0�?help%=0
0�!q%=(help%+4-q%)��3
0�%ș "XWimp_SendMessage",17,q%,q%!4
0��
0�
1� �help(w%,i%,h%)
1
$h%=""
1Ȏ w% �
1$ � infowind%
1. Ȏ i% �
18 � -1,0,1,2,3,4,5,6,7,8
1BL $h%="This is the Info Window.|MIt provides information on !StickyBrd."
1L) : ș "XInterface_SendHelp",,q%:=0
1V �
1` � moreinfo%
1j Ȏ i% �
1t* � -1,0,1,2,3,4,5,6,7,8,9,10,11,12,13
1~= $h%="This window gives more information on !StickyBrd."
1�) : ș "XInterface_SendHelp",,q%:=0
1� �
1� � backdrop%
1� Ȏ i% �
1� � -1,0,1,3,7,9
1�X $h%="This is the 'Load Backdrop' window.|MUse this window to load a new backdrop."
1� � 2
1�X $h%="This is the 'Load Sprite' icon.|MDrag a Sprite file to this icon to load it."
1� � 4
1�L $h%="This is the 'Stay Open' icon.|MClick it to keep the window open."
1� � 6
1�W $h%="This is the 'Tiled' radio button.|MClick on it to select 'Tiled' backdrops."
2 � 8
2
[ $h%="This is the 'Centred' radio button.|MClick on it to select 'Centred' backdrops."
2) : ș "XInterface_SendHelp",,q%:=0
2 �
2( � main%
22 Ȏ i% �
2<� � 0 : $h%="This is the desktop backdrop.|MIt is now `sticky� and will accept directories, applications, and files.|MDrag these to the desktop backdrop to add them to it."
2F : ic%=i%
2P& � (ic% � 2=0) ic%-=1
2Z. $h%="This is the icon for `"
2d+ $h%+=�lastbit(file$(ic%))
2n $h%+="�.|M"
2x( $h%+="Click on it to "
2�+ $h%+=�findtype(type(ic%))
2� $h%+="."
2� �
2�
� about%
2�} $h%="This is the 'Object Information' window.|MIt provides information about the object the pointer is currently over."
2� � saveas%
2� Ȏ i% �
2�
� -1
2�X $h%="This is the 'Save' window.|MUse it to save the current state of the desktop."
2�
2�% ș "XInterface_SendHelp",,q%:=0
2� �
2� � warning%
3 Ȏ i% �
3- � 4,5 : ș "XInterface_SendHelp",,q%:=0
3~ : $h%="This is the 'Warning' window.|MIt indicates that you already have some application data saved into !StickyBrd."
3" �
3, � loaded%
36 Ȏ i% �
3@- � 5,6 : ș "XInterface_SendHelp",,q%:=0
3Jy : $h%="This is the 'Loaded' window.|MIt shows that !StickyBrd is loaded, and displays the copyright (�) message."
3T �
3^$ ș "XInterface_SendHelp",,q%:=0
3h
� main1%
3r� $h%="This is the desktop backdrop.|MThe 'real' backdrop is currently 'hidden'.|MSelect 'Restore' from the 'Options' menu to view it."
3|
� aback%
3�� $h%="This window gives information on the current backdrop.|MIt shows the sprite file, sprite name, determines whether it has a palette, and tells you whether the backdrop is tiled or centred."
3� � cset%
3� Ȏ i% �
3�/ � 2,3,8 : ș "XInterface_SendHelp",,q%:=0
3�P � 4 : $h%="This is the 'Up' icon.|MClick it to increase the hours by one."
3�R � 5 : $h%="This is the 'Down' icon.|MClick it to decrease the hours by one."
3�R � 6 : $h%="This is the 'Up' icon.|MClick it to increase the minutes by one."
3�T � 7 : $h%="This is the 'Down' icon.|MClick it to decrease the minutes by one."
3�O : $h%="This is the 'Set time' window.|MUse it to set the current time."
3� �
3�
3� $h%=�modl_help(w%,i%)
3��
4=h%+�($h%)
4
4� �findtype(type)
4&
Ȏ type �
40! � 0 : ="run the application"
4: � 1 : ="open the directory"
4D � 2 : ="execute the file"
4N � 3 : ="open the window"
4X! � 4 : ="execute the command"
4b�
4l="perform an operation"
4v
4�� �setclearmenu
4�$object%="File ''"
4�(� �as(menu%,1)=0 �grey_menu(menu%,1)
4�0� �as(menu%+400,1)=0 �grey_menu(menu%+400,1)
4��
4�
4�� �as(b%,n%)
4�+=-((b%!(28+8+24*n%) � &400000)=&400000)
4�
4�� �grey_menu(b%,n%)
4�+b%!(28+8+24*n%)=b%!(28+8+24*n%)�&400000
4��
4�
5� �update_backdrop
5pointer%!0=main%
5(ș "Wimp_GetWindowOutline",,pointer%
5 Qș "Wimp_ForceRedraw",main%,pointer%!4,pointer%!16-44,pointer%!12,pointer%!16
5*�
54
5>� �bring_to_top(handle%)
5Hpointer%!0=handle%
5R&ș "XWimp_GetWindowInfo",,pointer%
5\pointer%!28=-2
5f#ș "XWimp_OpenWindow",,pointer%
5p�
5z
5�'� �set_clock_flags(e,r,b,twe,twf,h)
5�;emboss=e:recess=r:twelve=twe:twfour=twf:border=b:hour=h
5��
5�
5�� �setup_sclck
5�#�puticondata(cset%,2,��$,17,2))
5�#�puticondata(cset%,3,��$,20,2))
5��
5�
5�� �addh(addicon%)
5�+current=�(�geticondata(cset%,addicon%))
5�current+=1
5�� current>24 current=0
6� current<0 current=24
69current$=�current:� �current$=1 current$="0"+current$
6)�puticondata(cset%,addicon%,current$)
6$�
6.
68� �subh(subicon%)
6B+current=�(�geticondata(cset%,subicon%))
6Lcurrent-=1
6V� current>24 current=0
6`� current<0 current=24
6j9current$=�current:� �current$=1 current$="0"+current$
6t)�puticondata(cset%,subicon%,current$)
6~�
6�
6�� �addm(addicon%)
6�+current=�(�geticondata(cset%,addicon%))
6�current+=1
6�� current>60 current=0
6�� current<0 current=60
6�9current$=�current:� �current$=1 current$="0"+current$
6�)�puticondata(cset%,addicon%,current$)
6��
6�
6�� �subm(subicon%)
6�+current=�(�geticondata(cset%,subicon%))
7 current-=1
7
� current>60 current=0
7� current<0 current=60
79current$=�current:� �current$=1 current$="0"+current$
7()�puticondata(cset%,subicon%,current$)
72�
7<
7F� �settime(hour$,minute$)
7Ptime$=""
7Z,time$=��$,16)+hour$+":"+minute$+":"+"00"
7d�$=time$:�shut(cset%)
7n�
7x
7� � �rs
7�pointer%!0=clock%
7�pointer%!4=0
7�%ș "XWimp_GetIconState",,pointer%
7�pointer%!8=0:pointer%!12=0
7�6� emboss $(pointer%!32)="z0":pointer%!24=&17000139
7�6� recess $(pointer%!32)="z4":pointer%!24=&17000139
7�6� border $(pointer%!32)="z1":pointer%!24=&17000139
7�%ș "XWimp_SetIconState",,pointer%
7�pointer%!0=clock%
7�'ș "XWimp_GetWindowState",,pointer%
7��shut(clock%)
7�pointer%!28=-2
8*� clck ș "XWimp_OpenWindow",,pointer%
8�
8
8"� �fract(val)
8,$t$=�(val � 100)+"."+�(val � 100)
86� �t$=3 t$+="0"
8@=t$
8J
8T9� �modl_init(tname$,tpurp$,tauth$,tver$,pver,menblk%)
8^o� modlptr=20 �tellemoff("Extention module loading error: limit reached, no more modules will be loaded."):�
8hp� pver>80 �tellemoff("Extension module "+tname$+" requires !StickyBrd manager "+�fract(pver)+" or later."):�
8r7modl$(modlptr)=�lower(tname$):modl(modlptr)=menblk%
8|1modli$(modlptr)=tname$:modlp$(modlptr)=tpurp$
8�;modla$(modlptr)=tauth$:modlv$(modlptr)=tver$:modlptr+=1
8�2ș "XWimp_CreateWindow",,modlinfo% � taskhand%
8� modlinf(modlptr-1)=taskhand%
8��addtomenu(tname$,menblk%)
8� modl(modlptr-1)!32=taskhand%
8�=taskhand%
8�
8�� �addtomenu(tn$,men%)
8�(� �as(menu%,6)=1 �grey_menu(menu%,6)
8�mblk%=modlmenu%
8�flags=&7000021
8�mlen%=0:� I=0 � (modlptr-1)
8�4� �modl$(I)>mlen% mlen%=(�modl$(I))+1:�:mlen%+=1
9�header("Modules",mlen%)
9� I=0 � (modlptr-1)
90�entry(&00,modl(I),flags,�capital(modl$(I)))
9&�
90mblk%!-24=mblk%!-24 � &80
9:�
9D
9N� �bd_hand:=main%
9X
9b� �load_modls
9l&h%=�("<StickyBrdExt$Dir>.AutoRun")
9v�
9�buff$=�#h%
9�� �buff$,1)<>"|" �
9� � �buff$,5)="{run}" �
9� buff$=�strip(buff$)
9� �load_modl(buff$)
9� �
9��
9�� buff$="{end}"
9��#h%
9��
9�
9�� �load_modl(file$)
9�,ț "<StickyBrdExt$Dir>."+buff$+".Module"
:t%=�("FN"+buff$+"_init")
:�
:
: � �strip(s$)
:*s$=�s$,(�s$)-6)
:4s$=�s$,(�s$)-1)
:>=s$
:H
:R� �pass_null
:\� modlptr=0 �
:f� K=0 � (modlptr-1)
:p&t%=�("FN"+modl$(K)+"_event(0,q%)")
:z� K
:��
:�
:�� �lower(text$)
:�Y$pointer%=text$:ptr%=0:� ptr%?pointer%=ptr%?pointer% � &20:ptr%+=1:� ptr%?pointer%<33
:�=$pointer%
:�
:�� �modl_sendmenu
:�modlflag=q%!4:� q%!8=-1 �
:�Bstart=4:� q%!(start-4)=q%!(start+4):start+=4:� q%!(start-4)=-1
:�-t%=�("FN"+modl$(modlflag)+"_event(1,q%)")
:��
:�
:�� �modl_quit
;� K=0 � (modlptr-1)
;'t%=�("FN"+modl$(K)+"_event(13,q%)")
;� K
;$�
;.
;8� �modl_help(w%,i%)
;Btext$=""
;Lpointer%!0=w%:pointer%!4=i%
;V� K=0 � (modlptr-1)
;`,t%=�("FN"+modl$(K)+"_event(3,pointer%)")
;j� $t%<>"" text$=$t%
;tpointer%!0=w%:pointer%!4=i%
;~� K
;�7� text$="" text$="No help availible on this window"
;�
=text$
;�
;�� �modl_click(typ,fil$,x,y)
;�@pointer%!0=x:pointer%!4=y:pointer%!8=typ:$(pointer%+12)=fil$
;�� K=0 � (modlptr-1)
;�,t%=�("FN"+modl$(K)+"_event(4,pointer%)")
;�@pointer%!0=x:pointer%!4=y:pointer%!8=typ:$(pointer%+12)=fil$
;�� K
;��
;�
;�� �modl_mclick(h,i,b)
<