Home » Archimedes archive » Acorn User » AU 1996-03 B.adf » Others » Shareware/Stationer/!Stationer/!RunImage
Shareware/Stationer/!Stationer/!RunImage
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
| Tape/disk: | Home » Archimedes archive » Acorn User » AU 1996-03 B.adf » Others |
| Filename: | Shareware/Stationer/!Stationer/!RunImage |
| Read OK: | ✔ |
| File size: | EE14 bytes |
| Load address: | 0000 |
| Exec address: | 0000 |
File contents
10ON ERROR PROCmess(REPORT$+" : at line "+STR$ERL):END
20REM ***>$.!Stationer.!RunImage
30REM ***Main Program for !Stationer - Business communications media creator
40REM Version 1.11U (21 Jan 96)
50REM LEN J. Robbins
60REM
70DIM block 10*1024, mblock 1024, menu% 6*1024, curbuf% 9*1024, icond 5*1024, text% &1000
80DIM defpal% 255, fontblk% 256, scale% 20,PixTrans% 256,temp% 100,palette% 1024
90DIM winpal(15),cardpos(2,16),drawfont$(18)
100DIM matrix 100, origin 100, box 100, box2 100
110DIM workblk 8*1024
120maxlev%=32
130DIM start%(maxlev%),box%(maxlev%)
140DIM l%(maxlev%),b%(maxlev%),r%(maxlev%),t%(maxlev%)
150detptr=2304:deslen=60:desblk=1848:style=298
160FOR c=1 TO 16 : READ a :cardpos(0,c)=a:NEXT
170FOR c=1 TO 6 : READ a :cardpos(1,c)=a:NEXT
180cardpos(2,1)=25:cardpos(2,2)=670
190FOR I=0 TO 15
200 READ hexa
210 winpal(I)=hexa
220 defpal%!(I*4)=hexa
230NEXT
240DATA 25,625,290,625,25,445,290,445,25,265,290,265,25,85,290,85
250DATA 25,561,25,312,25,62
260DATA &FFFFFF10,&DDDDDD10,&BBBBBB10,&99999910,&77777710,&55555510,&33333310,&010
270DATA &99440010,&EEEE10,&CC0010,&DD10,&BBEEEE10,&885510,&BBFF10,&FFBB0010
280end%=-1:textc=FALSE:cardb=FALSE:hex=0:RED=(hex>>8)AND&FF:BLUE=RED:GREEN=RED
290endbuf%=curbuf%+&6000
300j=0:FMopen=0:in=FALSE:close=0
310savef=TRUE:noprint=FALSE:printing=FALSE:full=FALSE
320prequitwait=FALSE:quiting=FALSE:quitsave=FALSE:shutdown=FALSE
330fmcreated%=FALSE:fcount%=0
340end%=FALSE:drag%=0:drive%=0
350curspr$="":drawing=FALSE:sprites=FALSE:drawk=0
360font%=-1:noofcards=8:dfont=FALSE
370itemdrag=FALSE:itempull=FALSE
380sx1=-1:sy1=-1:sx2=-1:sy2=-1:select=-1:curdes=-1:seldes=-1:olddes=-1
390osx1=-2:osy1=-2:osx2=-2:osxy=-2:oldselect=-2
400backgrnd=-1
410task=&4B534154
420SYS "Wimp_Initialise",200,task,"!Stationer" TO version%,mytask%
430PROCtemplate
440SYS "OS_GetEnv" TO env$
450IF INSTR(env$,"-quit") THEN
460I%=INSTR(env$,"""")
470I%=INSTR(env$,"""",I%+1)
480REPEAT
490I%+=1
500UNTIL MID$(env$,I%,1)<>" "
510env$=MID$(env$,I%)
520print$=RIGHT$(env$,7)
530ENDIF
540noic=0
550SYS"Wimp_SlotSize",-1,-1 TO orig
560max=HIMEM-END:max=INT(max/1024)*1024
570max-=&4000
580SYS"Wimp_SlotSize",-1,-1 TO current
590HIMEM=HIMEM-max:hsizeb=max:heap%=HIMEM
600IF hsizeb<1024 THEN END
610SYS"OS_Heap",0,heap%,,hsizeb
620origheap=hsizeb:origappsize=current
630SYS"OS_Byte",161,28 TO ,,cmos
640IF (cmos AND (1<<1))>0 THEN daspr=TRUE ELSE daspr=FALSE
650IF print$=" -print" THEN env$=LEFT$(env$,LENenv$-7):noic=1
660IF print$=" -print" THEN PROCpresent:PROCload(env$):PROCopenwin(print%)
670IF print$<>" -print" AND env$<>"" PROCload(env$)
680IF print$<>" -print" AND env$="" PROCload("<Stat$Dir>.DefaultDt"):PROCinfo(save%,2,"StatData")
690IF noic=0 THEN initic=FNicon
700SYS"Hourglass_On"
710PROCfmenucr
720SYS"Hourglass_Off"
730PROCtitlewin
740ON ERROR PROCerror(REPORT$+" : at line "+STR$ERL)
750REPEAT
760SYS"Wimp_Poll",0,block TO eventcode
770SYS"OS_Mouse" TO ,,button
780UNTIL button>0
790PROCclose(title%)
800PROCmess("This program is SHAREWARE and is currently UNREGISTERED. You are authorised to use it for 2 weeks, after which you must register or delete it. Please refer to Help file for further information")
810REPEAT
820SYS"Wimp_Poll",0,block TO eventcode
830CASE eventcode OF
840WHEN 0:IF savef AND prequitwait SYS"Wimp_ProcessKey",&1FC
850WHEN 1:PROCredraw(block!0)
860WHEN 2:SYS "Wimp_OpenWindow",,block
870WHEN 3:SYS "Wimp_CloseWindow",,block
880WHEN 6:PROCclick(block)
890WHEN 7:PROCdragin
900WHEN 8:PROCprocess
910WHEN 9:PROCselect
920WHEN 17,18:PROCmessagein
930ENDCASE
940UNTIL FALSE
950PROCend
960END
970
980DEFPROCend
990SYS"Wimp_CloseDown",mytask%,task
1000END
1010ENDPROC
1020
1030DEFPROCtitlewin
1040PROCinfo(title%,1,"Business stationary designer. Comprising Compliment slip, Letter head and Business card creators.")
1050$FNinfo(title%,3)="Version 1.11U (21 Jan 1996)"
1060PROCopencen(title%)
1070titleopen=TRUE
1080ENDPROC
1090
1100DEFFNicon
1110!icond=-1
1120icond!4=0
1130icond!8=0:icond!12=68:icond!16=68
1140icond!20=%11010+((2^12)*3):icond?23=112
1150$(icond+24)="!Stationer"+CHR$13
1160SYS "Wimp_CreateIcon",,icond TO icon
1170=icon
1180
1190DEFFNinf(handle,icon)
1200PROCgee(handle,icon)
1210=icond!28
1220 DEFFNbit(a$)
1230WHILE INSTR(a$,":")>0
1240a$=MID$(a$,INSTR(a$,":")+1)
1250ENDWHILE
1260WHILE INSTR(a$,".")>0
1270a$=MID$(a$,INSTR(a$,".")+1)
1280ENDWHILE
1290=a$
1300
1310DEFFNwool(wool%)
1320LOCAL cot$
1330 WHILE ?wool%>=32
1340cot$+=CHR$(?wool%)
1350wool%+=1
1360ENDWHILE
1370=cot$
1380
1390DEFPROCtemplate
1400SYS"Wimp_OpenTemplate",,"<Stat$Dir>.Templates"
1410indir=curbuf%
1420info%=FNtemplate("ProgInfo")
1430save%=FNtemplate("SaveData")
1440savedraw%=FNtemplate("SaveDraw")
1450savepic%=FNtemplate("SavePic")
1460card%=FNtemplate("Card")
1470letter%=FNtemplate("LetterHead")
1480comp%=FNtemplate("CompSlip")
1490picture%=FNtemplate("Picture")
1500details%=FNtemplate("details")
1510type%=FNtemplate("Type")
1520back%=FNtemplate("Back")
1530colour%=FNtemplate("colours")
1540print%=FNtemplate("print")
1550query%=FNtemplate("query")
1560quit%=FNtemplate("quitbox")
1570title%=FNtemplate("title")
1580SYS "Wimp_CloseTemplate"
1590stex=FNinfo(save%,2)
1600stexd=FNinfo(savedraw%,2)
1610stextpic=FNinfo(savepic%,2)
1620ENDPROC
1630
1640DEFFNtemplate(a$)
1650SYS"Wimp_LoadTemplate",,block,indir,endbuf%,-1,a$,0 TO ,,indir,,,,c%
1660IF c%=0 THEN PROCmess("Template "+a$+" not found."):END
1670block!64=1
1680SYS"Wimp_CreateWindow",,block TO handle
1690=handle
1700
1710DEFFNinfo(handle,icon)
1720PROCgee(handle,icon)
1730=icond!28
1740
1750DEFFNtoOS(in)
1760SYS"Font_ConverttoOS",,in*1000 TO,out
1770=out
1780
1790DEFPROCinfo(handle,icon,text$)
1800!block=handle:block!4=icon:SYS"Wimp_GetIconState",,block
1810$(block!28)=text$:block!36=LEN(text$)+1
1820block!8=0:block!12=0
1830SYS"Wimp_SetIconState",,block
1840ENDPROC
1850
1860DEFPROCgee(handle,icon)
1870!icond=handle:icond!4=icon
1880SYS"Wimp_GetIconState",,icond
1890ENDPROC
1900
1910DEFPROCseticstate(handle%,ic%,clear,eor):REM as in PRM (CE)
1920!block=handle%:block!4=ic%:block!8=eor:block!12=clear
1930SYS"Wimp_SetIconState",,block
1940ENDPROC
1950
1960DEFPROCpresent
1970a$=""
1980LOCAL ERROR
1990ON ERROR LOCAL a$="Not Present":RESTORE ERROR:ENDPROC
2000SYS"PDriver_Info" TO a,,,,name
2010WHILE ?name
2020a$=a$+CHR$(?name)
2030name+=1
2040ENDWHILE
2050$FNinfo(print%,0)=a$
2060RESTORE ERROR
2070ENDPROC
2080
2090DEFPROCcmenus
2100PROCpresent
2110nogo=FALSE
2120FMopen=0
2130menuptr=menu%
2140MOUSE x,y,b
2150IF block!16=27 AND sprites THEN piccy=TRUE ELSE piccy=FALSE
2160IF sprites sprmen%=FNmenu("Sprite List",(largest*14)+40,men$)
2170picmenu%=FNmenu("Picture",174,"Delete,{b|savepic%}Save")
2180IF (sprites OR drawing) iconmenu$="{b|picmenu%}Picture" ELSE iconmenu$="{-|picmenu%}Picture"
2190IF (sprites OR drawing) AND block!12=-2 picmenu%=FNmenu("Picture",190,"Del Pic,{b|savepic%}Save Pic")
2200IF (sprites OR drawing) AND block!12<>-2 picmenu%=FNmenu("Picture",190,"Insert,Remove,{b|savepic%}Save Pic")
2210view%=FNmenu("View",200,"Bus. Cards,Comp Slips,LetterHeads")
2220savemenu%=FNmenu("Save",100,"{b|savedraw%}Draw,{b|save%}Data")
2230iconmenu%=FNmenu("!Stationer",174,"{b|info%}Info,{b|savemenu%}Save,{b|print%}Print,Details,{b|view%}View,"+iconmenu$+",Quit")
2240detmenu%=FNmenu("!Stationer",174,"{b|info%}Info,{b|savemenu%}Save,{b|print%}Print,{b|view%}View,"+iconmenu$+",Quit")
2250viewmenu%=FNmenu("!Stationer",174,"{b|info%}Info,{b|savemenu%}Save,{b|print%}Print,Details,{b|view%}View,"+iconmenu$+",Show All,Quit")
2260menuwin=block!12
2270CASE menuwin OF
2280WHEN -2:IF block!8=2 THEN openmenu%=iconmenu%:a=x-75:b=(7+2)*48
2290WHEN details%:openmenu%=detmenu%:a=x:b=y
2300WHEN picture%:IF block!16=4 THEN openmenu%=sprmen%:a=x:b=y:FMopen=2:ELSE ENDPROC
2310WHEN card%,comp%,letter%:IF block!8=2 THEN openmenu%=viewmenu%:a=x:b=y
2320OTHERWISE:ENDPROC
2330ENDCASE
2340IF sprites PROCseticstate(savepic%,4,1<<22,0<<22) ELSE PROCseticstate(savepic%,4,1<<22,1<<22)
2350IF drawing PROCseticstate(savepic%,5,1<<22,0<<22) ELSE PROCseticstate(savepic%,5,1<<22,1<<22)
2360PROCseticstate(savepic%,4,1<<21,0<<21):PROCseticstate(savepic%,5,1<<21,0<<21)
2370IF sprites PROCseticstate(savepic%,4,1<<21,1<<21) ELSE PROCseticstate(savepic%,5,1<<21,1<<21)
2380PROCopenmenu(a,b)
2390ENDPROC
2400
2410DEFPROCopenmenu(x,y)
2420SYS"Wimp_CreateMenu",,openmenu%,x,y
2430ENDPROC
2440DEFFNmenu(tit$,wid,menu$)
2450menu$+=","
2460oldmenu=menuptr
2470$menuptr=tit$
2480menuptr?12=7
2490menuptr?13=2
2500menuptr?14=7
2510menuptr?15=0
2520menuptr!16=wid
2530menuptr!20=48
2540menuptr!24=0
2550menuptr+=28
2560REPEAT
2570PROCthing(menu$)
2580menu$=MID$(menu$,INSTR(menu$,",")+1)
2590menuptr+=24
2600UNTIL menu$=""
2610menuptr!-24=(menuptr!-24) OR %10000000
2620=oldmenu
2630DEFPROCthing(m$)
2640m$=LEFT$(m$,INSTR(m$,",")-1)
2650i$="":j$=""
2660IF INSTR(m$,"{")>0 THEN
2670i$=LEFT$(m$,INSTR(m$,"}")-1)
2680m$=MID$(m$,INSTR(m$,"}")+1)
2690j$=LEFT$(i$,INSTR(i$,"|")-1)
2700i$=MID$(i$,INSTR(i$,"|")+1)
2710ENDIF
2720ijack=&07000021
2730mjack=0
2740submenu=-1
2750IF INSTR(j$,"b")>0 THEN submenu=EVAL(i$)
2760IF INSTR(j$,"_")>0 THEN mjack=mjack OR 2
2770IF INSTR(j$,"�")>0 THEN mjack=mjack OR 1
2780IF INSTR(j$,"u")>0 THEN mjack=mjack OR 2:submenu=EVAL(i$)
2790IF INSTR(j$,"-")>0 THEN ijack=ijack OR &400000:submenu=EVAL(i$)
2800IF INSTR(j$,"s")>0 THEN ijack=ijack OR &400000
2810!menuptr=mjack
2820menuptr!4=submenu
2830menuptr!8=ijack
2840$(menuptr+12)=m$
2850ENDPROC
2860
2870DEFPROCclick(block)
2880IF quitsave AND block!12<>save% THEN quiting=FALSE:quitsave=FALSE:PROCclose(save%)
2890IF prequitwait AND block!12<>save% THEN prequitwait=FALSE:shutdown=FALSE:PROCclose(save%)
2900IF block!12=card% OR block!12=comp% OR block!12=letter% savef=FALSE:PROCtitles("*")
2910IF block!12<>type% AND (block!12<>colour% AND backgrnd<>0) THEN PROCclose(type%)
2920IF block!12<>back% AND (block!12<>colour% AND backgrnd<>1) THEN PROCclose(back%)
2930IF block!12<>colour% THEN PROCclose(colour%)
2940IF block!12<>picture% THEN PROCclose(picture%)
2950IF block!8=1024 AND (block!12=card% OR block!12=comp% OR block!12=letter%) THEN PROCselectitem
2960IF block!8=4 AND (block!12=card% OR block!12=comp% OR block!12=letter%) THEN PROCgetstyle
2970IF block!8=&40 AND (block!12=card% OR block!12=comp% OR block!12=letter%) THEN PROCdragitem
2980IF block!8=&10 AND (block!12=card% OR block!12=comp% OR block!12=letter%) THEN PROCpullitem
2990IF block!12=-2 AND block!8=4 PROCopendet
3000IF block!12=-2 AND block!8=1 PROCopenwin(card%)
3010IF block!12=type% AND block!16=1 THEN MOUSE x,y,b:FMopen=1:SYS"Wimp_CreateMenu",,fmenu%,x-75,y:ENDPROC
3020IF block!8=2 THEN PROCcmenus:ENDPROC
3030IF block!12=save% AND block!16=1 winsave%=block!12:PROCdefsave
3040IF block!12=savedraw% AND block!16=1 winsave%=block!12:PROCdefsave
3050IF block!12=savepic% AND block!16=1 winsave%=block!12:PROCdefsave
3060IF block!12=save% AND block!16=3 winsave%=block!12:PROCsave($FNinfo(winsave%,2))
3070IF block!12=savedraw% AND block!16=3 winsave%=block!12:PROCsave($FNinfo(winsave%,2))
3080IF block!12=savepic% AND block!16=3 winsave%=block!12:PROCsave($FNinfo(winsave%,2))
3090IF block!12=details% AND block!16=16 PROCsetdet:savef=FALSE:PROCtitles("*"):PROCclose(details%)
3100IF block!12=details% AND block!16=15 PROCclose(details%)
3110IF block!12=details% AND block!16=17 PROCresetdet
3120IF block!12=back% AND block!16=14 THEN PROCclose(back%)
3130IF block!12=back% AND block!16=15 THEN PROCapplystyle:PROCclose(back%)
3140IF block!12=back% AND block!16=13 THEN PROCsetper(0)
3150IF block!12=type% THEN
3160 CASE block!16 OF
3170 WHEN 4 : PROCincrement(1,7,999,type%,3)
3180 WHEN 5 : PROCincrement(-1,7,999,type%,3)
3190 WHEN 7 : PROCincrement(5,30,995,type%,8)
3200 WHEN 9 : PROCincrement(-5,30,995,type%,8)
3210 WHEN 16 : PROCclose(type%)
3220 WHEN 17 : PROCapplystyle:PROCclose(type%)
3230 WHEN 15 : PROCsetper(1)
3240 ENDCASE
3250ENDIF
3260IF block!12=picture% THEN
3270 CASE block!16 OF
3280 WHEN 7 : PROCclose(picture%)
3290 WHEN 8 : PROCapplystyle:PROCclose(picture%)
3300 WHEN 1,2,3 : PROCredopic
3310 WHEN 4 : PROCcmenus
3320 WHEN 5,6 : PROCswappic
3330 ENDCASE
3340ENDIF
3350IF block!12=colour% AND block!16>=14 AND block!16<=29 PROCselectcol(block!16)
3360IF block!12=colour% AND block!16=13 THEN PROCaddcol
3370IF block!12=colour% AND block!16=12 THEN PROCclose(colour%)
3380IF block!12=colour% AND block!16=-1 THEN PROCdragcol
3390IF block!12=colour% AND block!16>0 AND block!16<11 THEN PROCupanddown(block!16)
3400IF block!12=print% AND block!16=3 THEN PROCmorecopies
3410IF block!12=print% AND block!16=5 THEN PROClesscopies
3420IF shutdown THEN
3430 IF block!12=quit% AND block!16=0 THEN SYS"Wimp_ProcessKey",&1FC:PROCend
3440 IF block!12=quit% AND block!16=2 THEN PROCclose(quit%):shutdown=FALSE
3450 IF block!12=quit% AND block!16=3 THEN PROCclose(quit%):PROCopenwin(save%):prequitwait=TRUE
3460ENDIF
3470IF quiting THEN
3480 IF block!12=quit% AND block!16=0 THEN PROCend
3490 IF block!12=quit% AND block!16=2 THEN PROCclose(quit%):quiting=FALSE
3500 IF block!12=quit% AND block!16=3 THEN PROCclose(quit%):PROCopenwin(save%):quitsave=TRUE
3510ENDIF
3520IF block!12=query% AND block!16=0 THEN PROCclose(query%):PROCendq
3530IF block!12=print% AND block!16=1 THEN
3540 PROCprint
3550 IF noic=1 THEN PROCend
3560ENDIF
3570ENDPROC
3580
3590DEFFNcheckflag(handle,icon,flag)
3600bit=FALSE
3610!icond=handle:icond!4=icon
3620SYS"Wimp_GetIconState",,icond
3630IF (icond!24AND(1<<flag))>0 bit=TRUE
3640=bit
3650
3660DEFPROCsetshear(on)
3670!icond=details%:icond!4=29:SYS"Wimp_GetIconState",,icond
3680IF on=1 THEN
3690C=(1<<21):E=(1<<21)
3700ELSE
3710C=(0<<21):E=(1<<21)
3720ENDIF
3730icond!8=C:icond!12=E
3740SYS"Wimp_SetIconState",,icond
3750:
3760!icond=details%:icond!4=30:SYS"Wimp_GetIconState",,icond
3770IF on=0 THEN
3780C=(1<<21):E=(1<<21)
3790ELSE
3800C=(0<<21):E=(1<<21)
3810ENDIF
3820icond!8=C:icond!12=E
3830SYS"Wimp_SetIconState",,icond
3840ENDPROC
3850
3860DEFPROCprocess
3870IF !block=details% AND block!24=13 THEN PROCcaret:ENDPROC
3880IF !block=save% AND block!24=13 THEN winsave%=!block:PROCsave($FNinfo(!block,2))
3890IF !block=savedraw% AND block!24=13 THEN winsave%=!block:PROCsave($FNinfo(!block,2))
3900IF !block=savepic% AND block!24=13 THEN winsave%=!block:PROCsave($FNinfo(!block,2))
3910SYS"Wimp_ProcessKey",block!24
3920ENDPROC
3930
3940DEFPROCcaret
3950SYS"Wimp_GetCaretPosition",,block
3960IF block!0=details% THEN
3970 IF block!4>=0 AND block!4<=7 THEN np=block!4+1
3980 IF block!4=8 THEN np=0
3990 SYS "Wimp_SetCaretPosition",details%,np,0,0,-1,LEN($FNinfo(details%,np))
4000ENDIF
4010ENDPROC
4020
4030DEFPROCselect
4040IF FMopen=1 THEN
4050SYS"Font_DecodeMenu",0,fmenu%,block,fontblk%,256 TO,,,,size
4060$fontblk%=LEFT$($fontblk%,size-1):$fontblk%=RIGHT$($fontblk%,LEN($fontblk%)-2):$fontblk%=LEFT$($fontblk%,LEN$fontblk%-(LEN$fontblk%-INSTR($fontblk%,"\"))-1)
4070family$=$fontblk%
4080PROCinfo(type%,0,family$)
4090FMopen=0
4100ENDPROC
4110ENDIF
4120IF FMopen=2 THEN
4130SYS"Wimp_DecodeMenu",,sprmen%,block,icond
4140curspr$=$icond
4150PROCredopic
4160FMopen=0
4170ENDPROC
4180ENDIF
4190SYS"Wimp_DecodeMenu",,openmenu%,block,icond
4200IF $icond="Quit" THEN PROCareyousure:quiting=TRUE
4210IF $icond="Details" THEN PROCopendet
4220IF $icond="View.LetterHeads" THEN PROCopenwin(letter%):PROCredraw(letter%)
4230IF $icond="View.Comp Slips" THEN PROCopenwin(comp%):PROCredraw(comp%)
4240IF $icond="View.Bus. Cards" THEN PROCopenwin(card%):PROCredraw(card%)
4250IF $icond="Picture.Insert" THEN PROCinsert(menuwin)
4260IF $icond="Picture.Remove" THEN PROCremove(menuwin)
4270IF $icond="Picture.Del Pic" THEN PROCdeleteall
4280IF $icond="Show All" THEN PROCshowall(menuwin)
4290IF $icond="Save.Draw" PROCopenwin(save%)
4300IF $icond="Save.Data" PROCopenwin(saved%)
4310SYS"Wimp_GetPointerInfo",,block
4320IF block!8=1 THEN
4330block!12=menuwin
4340PROCcmenus
4350SYS"Wimp_CreateMenu",,openmenu%
4360ELSE
4370SYS"Wimp_CreateMenu",,-1
4380ENDIF
4390ENDPROC
4400
4410DEFPROCmess(mess$)
4420!icond=0:$(icond+4)=mess$+CHR$0
4430SYS"Wimp_ReportError",icond,1,"!Stationer"
4440ENDPROC
4450
4460DEFPROCerror(err$)
4470IF ERR=523 THEN
4480PROCmess("Font "+font$+" not found")
4490PROCclose(card%):PROCclose(comp%):PROCclose(letter%)
4500ELSE
4510!icond=0:$(icond+4)=err$+"."+" Press OK to continue or Cancel to quit"+CHR$0
4520SYS"Wimp_ReportError",icond,3,"!Stationer" TO ,but
4530IF but=2 THEN PROCend
4540ENDIF
4550ENDPROC
4560
4570DEFPROCout
4580SYS"DragASprite_Stop"
4590IF winsave%=savedraw% THEN stext=stexd:ft=&AFF
4600IF winsave%=savedraw% THEN stext=stexd:ft=&00C
4610IF winsave%=savepic% AND FNcheckflag(savepic%,4,21) stext=stextpic:ft=&FF9 ELSE stext=stextpic:ft=&AFF
4620IF drive%=1 THEN
4630SYS "Wimp_GetPointerInfo",,mblock
4640win=mblock!12:icon=mblock!16:xout=!mblock:yout=mblock!4:
4650mblock!20=mblock!12:mblock!24=mblock!16:mblock!28=!mblock:mblock!32=mblock!4
4660mblock!12=0:mblock!16=1:mblock!36=1024:mblock!40=ft
4670$stext=$FNinfo(winsave%,2)
4680$stext=FNgetleaf($stext)
4690FOR I=0 TO 255:IF I?stext<32 THEN I?stext=13
4700NEXT
4710!mblock=44+4*(1+(LEN$stext)DIV4)
4720$(mblock+44)=FNbit($stext)+CHR$0:!mblock=60
4730SYS "Wimp_SendMessage",17,mblock,mblock!20,mblock!24:REM DataSave
4740drag%=FALSE
4750ENDIF
4760ENDPROC
4770
4780DEFPROCdefsave
4790PROCMode
4800IF winsave%=savedraw% THEN ft$="file_AFF"
4810IF winsave%=save% THEN ft$="file_00C"
4820IF winsave%=savepic% AND FNcheckflag(savepic%,4,21) ft$="file_FF9" ELSE ft$="file_AFF"
4830!block=winsave%
4840SYS "Wimp_GetWindowState",,block
4850ysize%=block!16-block!8
4860x%=block!4:y%=block!8:block!4=1
4870SYS"Wimp_GetIconState",,block
4880block!8+=x%:block!12+=y%+ysize%
4890block!16+=x%:block!20+=y%+ysize%
4900block!24=0:block!28=0:block!32=xmax:block!36=ymax
4910!block=0:block!4=5:drag%=TRUE:drive%=1
4920IF daspr THEN SYS"DragASprite_Start",%10000101,1,ft$,block+8 ELSE SYS"Wimp_DragBox",,block
4930ENDPROC
4940
4950DEFPROCMode
4960!block=130:block!4=131:block!8=-1:SYS"OS_ReadVduVariables",block,block+128
4970SYS"OS_ReadModeVariable",MODE,4 TO ,,Xeig%
4980SYS"OS_ReadModeVariable",MODE,5 TO ,,Yeig%
4990xmax=((block!128)+1)*2^Xeig%:ymax=((block!132)+1)*2^Yeig%
5000ENDPROC
5010
5020DEFFNgetleaf(leaf$)
5030WHILE INSTR(leaf$,".")
5040leaf$=MID$(leaf$,INSTR(leaf$,".")+1)
5050ENDWHILE:=leaf$
5060
5070DEFPROCsave(save$)
5080IF INSTR(save$,".")<1 AND INSTR(save$,":")<1 AND save$<>"<Wimp$Scrap>" THEN PROCquery("To save, drag the save icon to a directory viewer"):nosave=TRUE:ENDPROC
5090IF winsave%=save% THEN PROCmess("Sorry, this version is unable to save. Register for full version. See Help file for further details")
5100IF winsave%=savedraw% THEN PROCmess("Sorry, this version is unable to save. Register for full version. See Help file for further details")
5110IF winsave%=savepic% THEN PROCsavepic
5120ENDPROC
5130
5140DEFPROCsavepic
5150LOCAL ERROR
5160ON ERROR LOCAL IF ERR=71622:PROCquery("Disc Full"):full=TRUE:RESTORE ERROR:ENDPROC:ELSE RESTORE ERROR:PROCerror(REPORT$+" : at line "+STR$ERL):CLOSE#ile:END
5170SSpr=FNcheckflag(savepic%,4,21)
5180IF SSpr THEN
5190SYS"OS_File",0,save$,0,0,spr%+4,spr%+(sprlen+4)
5200SYS"OS_File",&12,save$,&ff9
5210ENDIF
5220IF NOT SSpr THEN
5230SYS"OS_File",0,save$,0,0,drawptr%,drawptr%+drawk
5240SYS"OS_File",&12,save$,&AFF
5250ENDIF
5260IF save$<>"<Wimp$Scrap>" PROCinfo(savepic%,2,save$)
5270ENDPROC
5280
5290DEFPROCdragin
5300IF itempull THEN PROCresizeitem
5310IF itemdrag THEN PROCdropitem
5320IF drag% THEN PROCout
5330ENDPROC
5340
5350DEFPROCmessagein
5360mblock=block
5370ref=mblock!8:task=mblock!4
5380CASE mblock!16 OF
5390WHEN 8:
5400IF NOT savef THEN
5410IF (mblock!20 AND (1<<0))>0 THEN quiting=TRUE ELSE shutdown=TRUE
5420IF quiting THEN PRINTTAB(0,0)"Quit"
5430IF shutdown THEN PRINTTAB(1,1)"Shutdown"
5440mblock!12=mblock!8:SYS"Wimp_SendMessage",19,mblock:PROCareyousure
5450ENDIF
5460WHEN 0:PROCend
5470WHEN 2:
5480IF drive%=1 THEN
5490PROCsave(FNwool(mblock+44))
5500mblock!12=ref
5510mblock!16=3
5520mblock!36=-1
5530!mblock=256
5540sendm=&400E7
5550SYS sendm,18,mblock,task:REM DataLoad
5560ENDIF
5570WHEN 3:
5580IF mblock!40<>&0CD AND mblock!40<>&FF9 AND mblock!40<>&AFF THEN PROCmess("Only Stationer Data files or Sprites can be dropped into here"):ENDPROC
5590in=TRUE
5600PROCclose(colour%):PROCclose(type%):PROCclose(back%):PROCclose(picture%)
5610IF mblock!40=&FF9 THEN PROCinsprites
5620IF mblock!40=&AFF THEN PROCindraw
5630IF mblock!40=&0CD THEN PROCload(FNwool(block+44))
5640WHEN 5:
5650IF block!40=&0CD THEN
5660block!12=block!8:block!16=4
5670sendm=&400E7
5680SYS sendm,18,block,block!4:REM DataLoadAck
5690PROCload(FNwool(block+44))
5700ENDIF
5710ENDCASE
5720ENDPROC
5730
5740DEFPROCload(load$)
5750SYS"OS_Find",&40,load$ TO file%
5760t$=""
5770t$=FNreadfile
5780IF t$<>"Stationer Data File" THEN PROCmess("This is not a Stationer data file"):SYS"OS_Find",0,file%:ENDPROC
5790PROCdeleteall
5800IF FNreadfile="Sprites" THEN sprites=TRUE:sprlen=VAL(FNreadfile)
5810IF FNreadfile="Drawing" THEN drawing=TRUE:drawk=VAL(FNreadfile)
5820SYS"OS_GBPB",4,file%,workblk,8*1024
5830IF sprites THEN spr%=(FNclaim(sprlen+256)):SYS"OS_GBPB",4,file%,spr%+4,sprlen:PROCsprmen
5840IF drawing THEN drawptr%=(FNclaim(drawk+256)):SYS"OS_GBPB",4,file%,drawptr%,drawk
5850SYS"OS_Find",0,file%
5860$FNinfo(save%,2)=load$
5870IF noic=0 savef=TRUE:PROCtitles("")
5880PROCredraw(card%):PROCredraw(comp%):PROCredraw(letter%)
5890IF load$<>"<Stat$Dir>.DefaultDt" PROCopendet
5900ENDPROC
5910
5920DEFFNreadfile
5930 t$=""
5940 REPEAT
5950 SYS"OS_BGet",,file% TO byte%
5960 IF byte%=254 SYS"OS_Find",0,file%:PROCopenwin(details%):
5970 t$=t$+CHR$(byte%)
5980 UNTIL byte%=13 OR byte%=10
5990 =LEFT$(t$,LEN(t$)-1)
6000DEFPROCinsprites
6010 load$=FNwool(block+44)
6020IF sprites THEN PROCdelete(1)
6030SYS "OS_File",5,load$ TO ,,,,sprlen
6040spr%=FNclaim(sprlen+256)
6050SYS "OS_File",&FF,load$,spr%+4
6060PROCsprmen
6070sprites=TRUE
6080FOR i=0 TO 2
6090ptr=detptr+(desblk*i)
6100IF workblk?(ptr+5)=1 THEN $(workblk+(ptr+6))=curspr$
6110NEXT
6120PROCredraw(card%)
6130PROCredraw(letter%)
6140PROCredraw(comp%)
6150ENDPROC
6160
6170DEFPROCsprmen
6180men$="":largest=0
6190SYS "OS_SpriteOp",&108,spr% TO ,,,sprites%
6200FOR i%=0 TO sprites%-1
6210 SYS "OS_SpriteOp",256+13,spr%,temp%,&100,i%+1 TO ,,,j%
6220 temp%?j%=13
6230 IF INSTR($temp%,",")>0 THEN SYS"OS_SpriteOp",256+26,spr%,$temp%,"No"+STR$(i%+1):$temp%="No"+STR$(i%+1)
6240 IF LEN(men$)<243 THEN men$=men$+$temp%+","
6250 IF i%=0 THEN defspr$=$temp%
6260 IF LEN($temp%)>largest largest=LEN($temp%)
6270NEXT
6280men$=LEFT$(men$,LEN(men$)-1)
6290curspr$=LEFT$(men$,INSTR(men$,",")-1)
6300ENDPROC
6310
6320DEFPROCindraw
6330load$=FNwool(block+44)
6340IF drawing THEN PROCdelete(2)
6350SYS"OS_File",5,load$ TO ,,,,drawk
6360drawptr%=FNclaim(drawk+256)
6370SYS"OS_File",&FF,load$,drawptr%
6380drawing=TRUE
6390ENDPROC
6400
6410DEFPROCopenwin(handle%)
6420!block=handle%
6430SYS"Wimp_GetWindowState",,block
6440open=block!32 AND (1<<16)
6450IF block!28<>-1 OR open=0 OR (handle%=card% OR handle%=comp% OR handle%=letter%) THEN
6460block!28=-1
6470SYS"Wimp_OpenWindow",,block
6480ENDIF
6490ENDPROC
6500
6510DEFPROCopencen(handle%)
6520PROCMode
6530!block=handle%
6540SYS"Wimp_GetWindowInfo",,block
6550workx%=block!12-block!4
6560worky%=block!16-block!8
6570block!4=(xmax-workx%)/2
6580block!12=workx%+block!4
6590block!8=(ymax-worky%)/2
6600block!16=worky%+block!8
6610block!28=-1
6620SYS"Wimp_OpenWindow",,block
6630ENDPROC
6640
6650DEFPROCfmenucr
6660SYS"Font_ListFonts",,temp%,0,&100
6670deffont$=$temp%
6680fflag%=0
6690fflag%+=1<<19
6700fflag%+=0<<20
6710SYS"Font_ListFonts",,0,fflag%,,0 TO r,s,t,A,u,B
6720DIM fmenu% A,fbuf% B
6730SYS"Font_ListFonts",,fmenu%,fflag%,A,fbuf%,B,1
6740ENDPROC
6750
6760DEFFNMax(a%,b%)
6770IF a%>b% THEN =a%
6780=b%
6790
6800DEFFNInfo(p%)
6810LOCAL a$
6820a$=""
6830WHILE (?p%<>0 AND ?p%<>13)
6840 a$+=CHR$(?p%)
6850 p%+=1
6860ENDWHILE
6870=a$
6880
6890DEFPROCopendet
6900!block=details%
6910SYS"Wimp_GetWindowState",,block
6920open=block!32 AND (1<<16)
6930IF open=0 THEN
6940$FNinfo(details%,0)=$(workblk+0)
6950$FNinfo(details%,1)=$(workblk+256)
6960$FNinfo(details%,6)=$(workblk+512)
6970$FNinfo(details%,7)=$(workblk+768)
6980$FNinfo(details%,8)=$(workblk+1024)
6990$FNinfo(details%,2)=$(workblk+1280)
7000$FNinfo(details%,3)=$(workblk+1536)
7010$FNinfo(details%,4)=$(workblk+1792)
7020$FNinfo(details%,5)=$(workblk+2048)
7030ENDIF
7040PROCopenwin(details%)
7050ENDPROC
7060
7070DEFPROCsetdet
7080$(workblk+0)=$FNinfo(details%,0)
7090$(workblk+256)=$FNinfo(details%,1)
7100$(workblk+512)=$FNinfo(details%,6)
7110$(workblk+768)=$FNinfo(details%,7)
7120$(workblk+1024)=$FNinfo(details%,8)
7130$(workblk+1280)=$FNinfo(details%,2)
7140$(workblk+1536)=$FNinfo(details%,3)
7150$(workblk+1792)=$FNinfo(details%,4)
7160$(workblk+2048)=$FNinfo(details%,5)
7170FOR design=0 TO 2
7180aptr=detptr+(desblk*design)+deslen
7190FOR i=0 TO 4
7200ptr=aptr+(style*i)
7210font$=$(workblk+ptr)
7220pt=workblk!(ptr+256)
7230width=workblk!(ptr+260)
7240PROCbbox($(workblk+(i*256)),font$,pt,width)
7250workblk!(ptr+278)=workblk!(ptr+270)+bbx1
7260workblk!(ptr+282)=workblk!(ptr+274)-bby1
7270workblk!(ptr+286)=bbx
7280workblk!(ptr+290)=bby
7290NEXT i
7300ptr=aptr+(style*5)
7310font$=$(workblk+ptr)
7320pt=workblk!(ptr+256)
7330width=workblk!(ptr+260)
7340PROCbbox($(workblk+(5*256)),font$,pt,width)
7350bbxm=bbx
7360PROCbbox($(workblk+(6*256)),font$,pt,width)
7370IF bbx>bbxm THEN bbxm=bbx
7380PROCbbox($(workblk+(7*256)),font$,pt,width)
7390IF bbx>bbxm THEN bbxm=bbx
7400PROCbbox($(workblk+(8*256)),font$,pt,width)
7410IF bbx>bbxm THEN bbxm=bbx
7420PROCbbox("WFMgjq",font$,pt,width)
7430workblk!(ptr+278)=workblk!(ptr+270)+bbx1
7440workblk!(ptr+282)=workblk!(ptr+274)-bby1
7450workblk!(ptr+286)=bbxm
7460workblk!(ptr+290)=bby
7470NEXT design
7480select=-1
7490PROCredraw(card%)
7500PROCredraw(comp%)
7510PROCredraw(letter%)
7520ENDPROC
7530
7540DEFPROCresetdet
7550FOR i=0 TO 8
7560PROCinfo(details%,i,"")
7570NEXT
7580ENDPROC
7590
7600DEFPROCredraw(handle)
7610 block!0=handle
7620LOCALmore%
7630SYS "Wimp_RedrawWindow",,block TO more%
7640WHILE more%
7650 CASE handle OF
7660 WHEN card% : PROCredrawcard
7670 WHEN comp% : PROCredrawcomp
7680 WHEN letter% : PROCredrawlett
7690 WHEN colour% : PROCredrawcol
7700 WHEN picture% : PROCredrawpic
7710 WHEN type% : PROCredrawtype
7720 WHEN back% : PROCredrawback
7730 ENDCASE
7740 SYS "Wimp_GetRectangle",,block TO more%
7750ENDWHILE
7760IF close=1 THEN PROCclose(card%):close=0
7770ENDPROC
7780
7790DEFPROCredrawcard
7800SYS"OS_Byte",113,2
7810SYS"OS_Byte",112,1
7820workx%=block!4-block!20
7830worky%=block!16-block!24
7840xmin=block!28-workx%
7850xmax=block!36-workx%
7860ymin=block!32-worky%
7870ymax=block!40-worky%
7880PROCdrawdesign(workx%,worky%,0,card%)
7890ENDPROC
7900
7910DEFPROCredrawcomp
7920workx%=block!4-block!20
7930worky%=block!16-block!24
7940xmin=block!28-workx%
7950xmax=block!36-workx%
7960ymin=block!32-worky%
7970ymax=block!40-worky%
7980PROCdrawdesign(workx%,worky%,1,comp%)
7990ENDPROC
8000
8010DEFPROCredrawlett
8020workx%=block!4-block!20
8030worky%=block!16-block!24
8040xmin=block!28-workx%
8050xmax=block!36-workx%
8060ymin=block!32-worky%
8070ymax=block!40-worky%
8080PROCdrawdesign(workx%,worky%,2,letter%)
8090ENDPROC
8100
8110DEFPROCredrawtype
8120workx%=block!4-block!20
8130worky%=block!16-block!24
8140SYS "ColourTrans_SetGCOL",InterHex,,,&100,0
8150RECTANGLE FILL workx%+406,worky%-204,140,50
8160SYS "ColourTrans_SetGCOL",0,,,&100,0
8170RECTANGLE workx%+406,worky%-204,140,50
8180ENDPROC
8190
8200DEFPROCredrawback
8210workx%=block!4-block!20
8220worky%=block!16-block!24
8230SYS "ColourTrans_SetGCOL",InterHex,,,&100,0
8240RECTANGLE FILL workx%+342,worky%-110,260,48
8250SYS "ColourTrans_SetGCOL",0,,,&100,0
8260RECTANGLE workx%+342,worky%-110,260,48
8270ENDPROC
8280
8290DEFPROCredrawcol
8300RED=(hex>>8)AND&FF
8310GREEN=(hex>>16)AND&FF
8320BLUE=(hex>>24)AND&FF
8330workx%=block!4-block!20
8340worky%=block!16-block!24
8350SYS "ColourTrans_SetGCOL",hex,,,&100,0
8360RECTANGLE FILL workx%+234,worky%-247,175,48
8370SYS "Wimp_SetColour",1,1
8380RECTANGLE FILL workx%+270,worky%-170,344,147
8390SYS "ColourTrans_SetGCOL",&0000FF00,,,&100,0
8400RECTANGLE FILL workx%+271,worky%-55,(RED/255)*344,32
8410SYS "ColourTrans_SetGCOL",&00FF0000,,,&100,0
8420RECTANGLE FILL workx%+271,worky%-111,(GREEN/255)*344,32
8430SYS "ColourTrans_SetGCOL",&FF000000,,,&100,0
8440RECTANGLE FILL workx%+271,worky%-167,(BLUE/255)*344,32
8450SYS "ColourTrans_SetGCOL",0,,,&100,0
8460RECTANGLE workx%+233,worky%-248,176,49
8470RECTANGLE workx%+270,worky%-58,344,34
8480RECTANGLE workx%+270,worky%-114,344,34
8490RECTANGLE workx%+270,worky%-170,344,34
8500ENDPROC
8510
8520DEFPROCredrawpic
8530 workx%=block!4-block!20
8540 worky%=block!16-block!24
8550redraw=FALSE
8560xmin=block!28-workx%
8570xmax=block!36-workx%
8580ymin=block!32-worky%
8590ymax=block!40-worky%
8600redraw=FNoverlaps(16,-218,216,-18,xmin,ymin,xmax,ymax)
8610IF redraw THEN
8620ptr=detptr+(desblk*design)
8630Red=workblk?(ptr+1)
8640Green=workblk?(ptr+2)
8650Blue=workblk?(ptr+3)
8660InterHex=(Blue<<24)+(Green<<16)+(Red<<8)
8670SYS "ColourTrans_SetGCOL",InterHex,,,&100,0
8680RECTANGLE FILL workx%+16,worky%-218,200,200
8690IF FNcheckflag(picture%,5,21) THEN picpic=1 ELSE picpic=2
8700IF picpic=1 THEN
8710SYS"Wimp_ReadPixTrans",&100,1,"sizeing",,,,scale%
8720hpix=scale%!4:vpix=scale%!12
8730boxw=100/hpix:boxh=100/vpix
8740PROCscale(100,100,curspr$)
8750SYS &2E,256+40,spr%,curspr$ TO A,B,C,w%,h%,D,mode%
8760realx=w%*(scale%!0/scale%!8):realy=h%*(scale%!4/scale%!12)
8770xmul=(boxw/realx)*100:ymul=(boxh/realy)*100
8780Lock=FNcheckflag(picture%,1,21)
8790Centred=FNcheckflag(picture%,2,21)
8800Front=FNcheckflag(picture%,3,21)
8810IF Lock AND xmul<ymul THEN ymul=xmul
8820IF Lock AND xmul>ymul THEN xmul=ymul
8830PROCgetpal(curspr$)
8840xoff=0:yoff=0
8850newx=realx*xmul/100:newy=realy*ymul/100
8860IF Centred THEN xoff=(boxw-newx)*hpix:yoff=(boxh-newy)*vpix
8870xdiv=100:ydiv=100
8880scale%!0=scale%!0*xmul:scale%!4=scale%!4*ymul:scale%!8=scale%!8*xdiv:scale%!12=scale%!12*ydiv
8890SYS &2E,256+52,spr%,curspr$,workx%+16+xoff,worky%-218+ yoff,8,scale%,PixTrans%
8900ENDIF
8910IF picpic=2 THEN
8920Lock=FNcheckflag(picture%,1,21)
8930Centred=FNcheckflag(picture%,2,21)
8940Front=FNcheckflag(picture%,3,21)
8950icond!0=65536:icond!4=0:icond!8=0:icond!12=65536:icond!16=0*256:icond!20=0*256
8960SYS"DrawFile_BBox",0,drawptr%,drawk,icond,matrix
8970width=(matrix!8-matrix!0)/256:height=(matrix!12-matrix!4)/256
8980xmul=200/width:ymul=200/height
8990IF Lock AND xmul<ymul THEN ymul=xmul
9000IF Lock AND xmul>ymul THEN xmul=ymul
9010neww=width*xmul:newh=height*ymul
9020cxoff=0:cyoff=0
9030IF Centred THEN cxoff=(200-neww)/2:cyoff=(200-newh)/2
9040icond!0=xmul*65536:icond!12=ymul*65536
9050SYS"DrawFile_BBox",0,drawptr%,drawk,icond,matrix
9060width=(matrix!8-matrix!0)/256:height=(matrix!12-matrix!4)/256
9070xoff=(0-matrix!0/256):yoff=(0-matrix!4/256)
9080icond!0=xmul*65536:icond!4=0:icond!8=0:icond!12=ymul*65536:icond!16=(workx%+16+xoff+cxoff)*256:icond!20=(worky%-218+yoff+cyoff)*256
9090SYS"DrawFile_Render",%00,drawptr%,drawk,icond,0
9100GCOL 2
9110ENDIF
9120ENDIF
9130ENDPROC
9140
9150DEFPROCdrawdesign(pxco,pyco,design,handle)
9160ptr=detptr+(desblk*design)
9170border=workblk?(ptr+0)
9180BRed=workblk?(ptr+1)
9190BGreen=workblk?(ptr+2)
9200BBlue=workblk?(ptr+3)
9210BTran=workblk?(ptr+4)
9220pictype=workblk?(ptr+5)
9230Front=workblk?(ptr+24)
9240bx1=workblk!(ptr+28)
9250by1=workblk!(ptr+32)
9260bx2=workblk!(ptr+36)
9270by2=workblk!(ptr+40)
9280BCol=(BBlue<<24)+(BGreen<<16)+(BRed<<8)
9290CASE border OF
9300WHEN 1:
9310SYS "ColourTrans_SetGCOL",BCol,,,&100,0
9320RECTANGLE FILL pxco+bx1,pyco-by1,bx2,by2
9330SYS "ColourTrans_SetGCOL",&00000000,,,&100,0
9340RECTANGLE pxco+bx1,pyco-by1,bx2,by2
9350WHEN 2:
9360SYS "ColourTrans_SetGCOL",BCol,,,&100,0
9370RECTANGLE FILL pxco+bx1,pyco-by1,bx2,by2
9380SYS "ColourTrans_SetGCOL",&00000000,,,&100,0
9390RECTANGLE pxco+bx1,pyco-by1,bx2,by2
9400RECTANGLE pxco+bx1+2,pyco-by1+2,bx2-4,by2-4
9410WHEN 3:
9420SYS "ColourTrans_SetGCOL",BCol,,,&100,0
9430RECTANGLE FILL pxco+bx1,pyco-by1,bx2,by2
9440SYS "ColourTrans_SetGCOL",&00000000,,,&100,0
9450RECTANGLE pxco+bx1,pyco-by1,bx2,by2
9460RECTANGLE pxco+bx1+2,pyco-by1+2,bx2-4,by2-4
9470RECTANGLE pxco+bx1+4,pyco-by1+4,bx2-8,by2-8
9480WHEN 4:
9490SYS "ColourTrans_SetGCOL",BCol,,,&100,0
9500RECTANGLE FILL pxco+bx1,pyco-by1,bx2,by2
9510SYS "ColourTrans_SetGCOL",&00000000,,,&100,0
9520RECTANGLE pxco+bx1,pyco-by1,bx2,by2
9530RECTANGLE pxco+bx1+4,pyco-by1+4,bx2-8,by2-8
9540RECTANGLE pxco+bx1+6,pyco-by1+6,bx2-12,by2-12
9550WHEN 5:
9560SYS "ColourTrans_SetGCOL",BCol,,,&100,0
9570RECTANGLE FILL pxco+bx1,pyco-by1,bx2,by2
9580SYS "ColourTrans_SetGCOL",&00000000,,,&100,0
9590RECTANGLE pxco+bx1,pyco-by1,bx2,by2
9600RECTANGLE pxco+bx1+2,pyco-by1+2,bx2-4,by2-4
9610RECTANGLE pxco+bx1+6,pyco-by1+6,bx2-12,by2-12
9620ENDCASE
9630IF Front=0 AND pictype=1 THEN PROCdessprite(pxco,pyco,design)
9640IF Front=0 AND pictype=2 THEN PROCdesdraw(pxco,pyco,design)
9650 FOR item=0 TO 5
9660 PROCdrawitem(design,item,pxco,pyco)
9670 NEXT
9680IF Front=1 AND pictype=1 THEN PROCdessprite(pxco,pyco,design)
9690IF Front=1 AND pictype=2 THEN PROCdesdraw(pxco,pyco,design)
9700IF select<>-1 AND handle=curdes THEN
9710 x1=sx1:y1=0-sy1:x2=sx1+sx2:y2=0-sy1+sy2:a1=xmin:b1=ymin:a2=xmax:b2=ymax
9720 redraw=FNoverlaps(x1,y1,x2,y2,a1,b1,a2,b2)
9730 IF redraw THEN
9740 SYS"ColourTrans_SetGCOL",&0000FF00,,,&100,0
9750 MOVE workx%+sx1,worky%-sy1
9760 VDU 23,6,&CC|
9770 PLOT 17,sx2,0
9780 PLOT 17,0,sy2
9790 PLOT 17,0-sx2,0
9800 PLOT 17,0,0-sy2
9810 ENDIF
9820ENDIF
9830ENDPROC
9840
9850DEFPROCdrawitem(design,item,pxco,pyco)
9860ptr=detptr+(desblk*design)+deslen+(style*item)
9870hide=workblk?(ptr+294)
9880IF hide=0 THEN ENDPROC
9890redraw=FALSE
9900FxPos=workblk!(ptr+270)
9910FyPos=workblk!(ptr+274)
9920Fx1=workblk!(ptr+278)
9930Fy1=workblk!(ptr+282)
9940Fx2=workblk!(ptr+286)
9950Fy2=workblk!(ptr+290)
9960u=workblk?(ptr+265)
9970IF u=1 THEN line=4+4 ELSE line=0
9980x1=Fx1:y1=0-Fy1-line:x2=Fx1+Fx2:y2=0-Fy1+Fy2:a1=xmin:b1=ymin:a2=xmax:b2=ymax
9990IF item=5 THEN y2=Fy2*4+6*3
10000redraw=FNoverlaps(x1,y1,x2,y2,a1,b1,a2,b2)
10010IF redraw THEN
10020text$=$(workblk+item*256)
10030IF item=5 THEN
10040text2$=$(workblk+(item+1)*256)
10050text3$=$(workblk+(item+2)*256)
10060text4$=$(workblk+(item+3)*256)
10070ENDIF
10080font$=$(workblk+ptr)
10090SYS"XFont_FindFont",,font$,16,16,0,0 TO fhnd%
10100IF fhnd%!0=523 THEN
10110SYS"XFont_FindFont",,"Trinity.Medium",16,16,0,0 TO fhnd%
10120IF fhnd%!0=523 THEN font$=deffont$ ELSE font$="Trinity.Medium"
10130ENDIF
10140pt=workblk!(ptr+256)
10150w=workblk!(ptr+260)
10160j=workblk?(ptr+264)
10170FRed=workblk?(ptr+266)
10180FGreen=workblk?(ptr+267)
10190FBlue=workblk?(ptr+268)
10200FTran=workblk?(ptr+269)
10210FCol=(FBlue<<24)+(FGreen<<16)+(FRed<<8)
10220x=FNwidth(text$,font$,pt,w)
10230SYS "ColourTrans_SetFontColours",font%,BCol,FCol,14
10240IF item=5 THEN
10250jus=%10010
10260nFx=FxPos
10270IF j=3 THEN jus=%10001:MOVE pxco+FxPos+Fx2,pyco-FyPos
10280width=FNwidth(text4$,font$,pt,w)
10290IF j=2 nFx=FxPos+(Fx2-width)
10300IF j=1 nFx=FxPos+(Fx2-width)/2
10310SYS"Font_Paint",,text4$,jus,pxco+nFx,pyco-FyPos
10320width=FNwidth(text3$,font$,pt,w)
10330IF j=2 nFx=FxPos+(Fx2-width)
10340IF j=1 nFx=FxPos+(Fx2-width)/2
10350SYS"Font_Paint",,text3$,jus,pxco+nFx,pyco-FyPos+((Fy2+6)*1)
10360width=FNwidth(text2$,font$,pt,w)
10370IF j=2 nFx=FxPos+(Fx2-width)
10380IF j=1 nFx=FxPos+(Fx2-width)/2
10390SYS"Font_Paint",,text2$,jus,pxco+nFx,pyco-FyPos+((Fy2+6)*2)
10400width=FNwidth(text$,font$,pt,w)
10410IF j=2 nFx=FxPos+(Fx2-width)
10420IF j=1 nFx=FxPos+(Fx2-width)/2
10430SYS"Font_Paint",,text$,jus,pxco+nFx,pyco-FyPos+((Fy2+6)*3)
10440ELSE
10450SYS"Font_Paint",,text$,%10010,pxco+FxPos,pyco-FyPos
10460ENDIF
10470IF u=1 THEN
10480SYS "ColourTrans_SetGCOL",FCol,,,&100,0
10490RECTANGLE FILL pxco+Fx1,pyco-Fy1-4,x,-4
10500ENDIF
10510ENDIF
10520ENDPROC
10530
10540DEFFNoverlaps(x1,y1,x2,y2,a1,b1,a2,b2)
10550interx=FALSE:intery=FALSE
10560IF (x1>=a1 AND x1<=a2) THEN interx=TRUE
10570IF (x2>=a1 AND x2<=a2) THEN interx=TRUE
10580IF (a1>=x1 AND a1<=x2) THEN interx=TRUE
10590IF (a2>=x1 AND a2<=x2) THEN interx=TRUE
10600IF (y1>=b1 AND y1<=b2) THEN intery=TRUE
10610IF (y2>=b1 AND y2<=b2) THEN intery=TRUE
10620IF (b1>=y1 AND b1<=y2) THEN intery=TRUE
10630IF (b2>=y1 AND b2<=y2) THEN intery=TRUE
10640IF interx AND intery THEN =TRUE
10650=FALSE
10660
10670DEFPROCdessprite(cxco,cyco,design)
10680redraw=FALSE
10690ptr=detptr+(desblk*design)
10700Spx1=workblk!(ptr+44)
10710Spy1=workblk!(ptr+48)
10720Spx2=workblk!(ptr+52)
10730Spy2=workblk!(ptr+56)
10740x1=Spx1:y1=0-Spy1:x2=Spx1+Spx2:y2=0-Spy1+Spy2:a1=xmin:b1=ymin:a2=xmax:b2=ymax
10750redraw=FNoverlaps(x1,y1,x2,y2,a1,b1,a2,b2)
10760IF sprites AND redraw THEN
10770curspr$=$(workblk+(ptr+6))
10780Lock=workblk?(ptr+22)
10790Centred=workblk?(ptr+23)
10800Front=workblk?(ptr+24)
10810SYS"Wimp_ReadPixTrans",&100,1,"sizeing",,,,scale%
10820hpix=scale%!4:vpix=scale%!12
10830Spx2=Spx2/hpix:Spy2=Spy2/vpix
10840SYS &2E,256+40,spr%,curspr$ TO ,,,w%,h%,D,mode%
10850PROCscale(Spx2,Spy2,curspr$)
10860PROCgetpal(curspr$)
10870newx=w%*(scale%!0/scale%!8):newy=h%*(scale%!4/scale%!12)
10880xmul=((Spx2/2)/newx)*100:ymul=((Spy2/2)/newy)*100
10890xoff=0:yoff=0
10900xoff1=(w%*xmul*scale%!0*2)/100:yoff1=(h%*ymul*scale%!4*2)/100
10910IF Lock=1 AND xmul<ymul THEN ymul=xmul
10920IF Lock=1 AND xmul>ymul THEN xmul=ymul
10930IF Centred=1 THEN
10940xoff2=(w%*xmul*scale%!0*2)/100:yoff2=(h%*ymul*scale%!4*2)/100
10950xoff=(xoff1-xoff2)/2*hpix:yoff=(yoff1-yoff2)/2*vpix
10960ENDIF
10970xdiv=100:ydiv=100
10980scale%!0=scale%!0*xmul:scale%!4=scale%!4*ymul:scale%!8=scale%!8*xdiv:scale%!12=scale%!12*ydiv
10990SYS &2E,256+52,spr%,curspr$,cxco+Spx1+xoff,cyco-Spy1+yoff,8,scale%,PixTrans%
11000ENDIF
11010ENDPROC
11020
11030DEFPROCdesdraw(cxco,cyco,design)
11040redraw=FALSE
11050ptr=detptr+(desblk*design)
11060Spx1=workblk!(ptr+44)
11070Spy1=workblk!(ptr+48)
11080Spx2=workblk!(ptr+52)
11090Spy2=workblk!(ptr+56)
11100x1=Spx1:y1=0-Spy1:x2=Spx1+Spx2:y2=0-Spy1+Spy2:a1=xmin:b1=ymin:a2=xmax:b2=ymax
11110redraw=FNoverlaps(x1,y1,x2,y2,a1,b1,a2,b2)
11120IF drawing AND redraw THEN
11130Lock=workblk?(ptr+22)
11140Centred=workblk?(ptr+23)
11150Front=workblk?(ptr+24)
11160icond!0=65536:icond!4=0:icond!8=0:icond!12=65536:icond!16=0*256:icond!20=0*256
11170SYS"DrawFile_BBox",0,drawptr%,drawk,icond,matrix
11180width=(matrix!8-matrix!0)/256:height=(matrix!12-matrix!4)/256
11190xmul=Spx2/width:ymul=Spy2/height
11200xoff=0:yoff=0
11210xoff1=xmul*width:yoff1=ymul*height
11220IF Lock AND xmul<ymul THEN ymul=xmul
11230IF Lock AND xmul>ymul THEN xmul=ymul
11240IF Centred=1 THEN
11250xoff2=xmul*width:yoff2=ymul*height
11260xoff=(xoff1-xoff2)/2:yoff=(yoff1-yoff2)/2
11270ENDIF
11280icond!0=xmul*65536:icond!12=ymul*65536
11290SYS"DrawFile_BBox",0,drawptr%,drawk,icond,matrix
11300width=(matrix!8-matrix!0)/256:height=(matrix!12-matrix!4)/256
11310bbxoff=(0-matrix!0/256):bbyoff=(0-matrix!4/256)
11320icond!0=xmul*65536:icond!4=0:icond!8=0:icond!12=ymul*65536:icond!16=(cxco+Spx1+bbxoff+xoff)*256:icond!20=(cyco-Spy1+bbyoff+yoff)*256
11330SYS"DrawFile_Render",%00,drawptr%,drawk,icond,0
11340ENDIF
11350ENDPROC
11360
11370DEFPROCscale(spw,sph,workspr$)
11380SYS"Wimp_ReadPixTrans",&100,spr%,workspr$,,,,scale%,palette%
11390ENDPROC
11400
11410DEFPROCgetpal(workspr$)
11420SYS "OS_SpriteOp",256+24,spr%,workspr$ TO ,,sptr%
11430SYS "OS_SpriteOp",256+40,spr%,workspr$ TO ,,,,,,mode%
11440SYS "OS_SpriteOp",256+37,spr%,workspr$,-1 TO ,,,palsize
11450SYS "OS_ReadModeVariable",mode%,9 TO ,,BitsPP
11460BitsPP=2^BitsPP
11470IF sptr%!32<>44 THEN
11480 FOR I%=0 TO sptr%!32-52 STEP 8
11490 palette%!(I%/2)=sptr%!(I%+44)
11500 NEXT
11510ENDIF
11520IF sptr%!32<>44 THEN
11530 IF sptr%!32<>44+2048 THEN
11540 SYS "ColourTrans_SelectTable",mode%,palette%,-1,-1,PixTrans%
11550 ELSE
11560 FOR Q%=0TO255
11570 SYS "ColourTrans_ReturnColourNumberForMode",palette%!(Q%<<2),-1,-1 TO PixTrans%?Q%
11580 NEXT
11590 ENDIF
11600ELSE
11610 IF BitsPP<8 THEN
11620 SYS "ColourTrans_SelectTable",mode%,defpal%,-1,-1,PixTrans%
11630 ELSE
11640 SYS "ColourTrans_SelectTable",mode%,-1,-1,-1,PixTrans%
11650 ENDIF
11660ENDIF
11670ENDPROC
11680
11690DEFPROCbbox(text$,font$,xs,ys)
11700SYS "Font_FindFont",,font$,(xs*(ys/100))*16,xs*16,0,0 TO font%
11710SYS "Font_SetFont",font%
11720SYS "Font_StringBBox",,text$ TO ,bbx1,bby1,bbx2,bby2
11730SYS "Font_StringWidth",,text$,&FFFFFF,&FFFFFFFF,-1,LEN(text$) TO ,,x,y
11740SYS "Font_ConverttoOS",,bbx1,bby1 TO ,bbx1,bby1
11750SYS "Font_ConverttoOS",,bbx2,bby2 TO ,bbx2,bby2
11760bbx=bbx2-bbx1:bby=bby2-bby1
11770ENDPROC
11780
11790DEFFNwidth(text$,font$,xs,ys)
11800SYS "Font_FindFont",,font$,(xs*(ys/100))*16,xs*16,0,0 TO font%
11810SYS "Font_SetFont",font%
11820SYS "Font_StringWidth",,text$,&FFFFFF,&FFFFFF,31,LEN(text$) TO ,,x%,y%
11830SYS "Font_ConverttoOS",,x%,y% TO ,x,y
11840=x
11850
11860DEFPROCclose(!block)
11870SYS"Wimp_CloseWindow",,block
11880ENDPROC
11890
11900DEFFNcheckit(hnd%,ic%)
11910!icond=hnd%:icond!4=ic%
11920SYS"Wimp_GetIconState",,icond
11930flags%=icond!24
11940=flags%AND&F0000
11950
11960DEFPROCgetstyle
11970changedes=block!12
11980mx=block!0:my=block!4
11990CASE changedes OF
12000WHEN card% : design=0
12010WHEN comp% : design=1
12020WHEN letter% : design=2
12030ENDCASE
12040change=select
12050IF change>-1 THEN
12060IF change>=0 AND change<=5 THEN
12070ptr=detptr+(desblk*design)+deslen+(style*change)
12080font$=$(workblk+ptr)
12090pt=workblk!(ptr+256)
12100width=workblk!(ptr+260)
12110j=workblk?(ptr+264)
12120u=workblk?(ptr+265)
12130ColR=workblk?(ptr+266)
12140ColG=workblk?(ptr+267)
12150ColB=workblk?(ptr+268)
12160ColT=workblk?(ptr+269)
12170hide=workblk?(ptr+294)
12180InterHex=(ColB<<24)+(ColG<<16)+(ColR<<8)
12190$FNinfo(type%,0)=font$
12200$FNinfo(type%,3)=STR$pt
12210$FNinfo(type%,8)=STR$width
12220PROCseticstate(type%,18,1<<21,1<<21)
12230IF hide=0 THEN PROCseticstate(type%,18,1<<21,0<<21)
12240IF change>=0 AND change<=4 THEN a=1<<22:b=1<<22:c=1<<21:d=0<<21:e=1<<22:f=0<<22
12250IF change=5 THEN a=1<<22:b=0<<22:c=1<<21:d=0<<21:e=1<<22:f=1<<22
12260PROCseticstate(type%,10,a,b)
12270PROCseticstate(type%,11,a,b)
12280PROCseticstate(type%,12,a,b)
12290PROCseticstate(type%,13,a,b)
12300PROCseticstate(type%,10,c,d)
12310PROCseticstate(type%,11,c,d)
12320PROCseticstate(type%,12,c,d)
12330PROCseticstate(type%,13,c,d)
12340PROCseticstate(type%,14,1<<21,0<<21)
12350PROCseticstate(type%,14,e,f)
12360PROCopenwin(type%)
12370IF change=5 THEN PROCseticstate(type%,10+j,1<<21,1<<21)
12380IF u=1 THEN PROCseticstate(type%,14,1<<21,1<<21)
12390ENDIF
12400IF change=6 THEN
12410ptr=detptr+(desblk*design)
12420pic=workblk?(ptr+5)
12430PROCseticstate(picture%,1,1<<21,0<<21)
12440PROCseticstate(picture%,2,1<<21,0<<21)
12450PROCseticstate(picture%,3,1<<21,0<<21)
12460Lock=workblk?(ptr+22)
12470Centre=workblk?(ptr+23)
12480Front=workblk?(ptr+24)
12490IF pic=1 THEN curspr$=$(workblk+(ptr+6))
12500IF Lock PROCseticstate(picture%,1,1<<21,1<<21)
12510IF Centre PROCseticstate(picture%,2,1<<21,1<<21)
12520IF Front PROCseticstate(picture%,3,1<<21,1<<21)
12530PROCseticstate(picture%,5,1<<22,0<<22)
12540PROCseticstate(picture%,4,1<<22,0<<22)
12550PROCseticstate(picture%,6,1<<22,0<<22)
12560IF pic=1 THEN PROCseticstate(picture%,5,1<<21,1<<21):PROCseticstate(picture%,6,1<<21,0<<21)
12570IF pic=2 THEN PROCseticstate(picture%,6,1<<21,1<<21):PROCseticstate(picture%,5,1<<21,0<<21)
12580IF NOT sprites THEN PROCseticstate(picture%,5,1<<22,1<<22):PROCseticstate(picture%,4,1<<22,1<<22)
12590IF NOT drawing THEN PROCseticstate(picture%,6,1<<22,1<<22)
12600PROCopenwin(picture%)
12610ENDIF
12620ENDIF
12630IF change=-1 THEN
12640ptr=detptr+(desblk*design)
12650border=workblk?(ptr)
12660ColR=workblk?(ptr+1)
12670ColG=workblk?(ptr+2)
12680ColB=workblk?(ptr+3)
12690ColT=workblk?(ptr+4)
12700InterHex=(ColB<<24)+(ColG<<16)+(ColR<<8)
12710FOR i=2 TO 10 STEP 2
12720IF border=i/2 THEN PROCseticstate(back%,i,1<<21,1<<21):ELSE PROCseticstate(back%,i,1<<21,0<<21)
12730NEXT
12740IF border=0 THEN PROCseticstate(back%,11,1<<21,1<<21):ELSE PROCseticstate(back%,11,1<<21,0<<21)
12750PROCopenwin(back%)
12760ENDIF
12770ENDPROC
12780
12790DEFPROCapplystyle
12800IF change>-1 THEN
12810IF change>=0 AND change<=5 THEN
12820ptr=detptr+(desblk*design)+deslen+(style*change)
12830font$=$FNinfo(type%,0)
12840pt=VAL($FNinfo(type%,3))
12850width=VAL($FNinfo(type%,8))
12860$(workblk+ptr)=font$
12870workblk!(ptr+256)=pt
12880workblk!(ptr+260)=width
12890workblk?(ptr+266)=(InterHex>>8) AND &FF
12900workblk?(ptr+267)=(InterHex>>16) AND &FF
12910workblk?(ptr+268)=(InterHex>>24) AND &FF
12920j=0:u=0
12930IF FNcheckflag(type%,10,21) THEN j=0
12940IF FNcheckflag(type%,11,21) THEN j=1
12950IF FNcheckflag(type%,12,21) THEN j=2
12960IF FNcheckflag(type%,13,21) THEN j=3
12970IF FNcheckflag(type%,14,21) THEN u=1
12980IF FNcheckflag(type%,18,21) THEN hide=1 ELSE hide=0:select=-1
12990workblk?(ptr+264)=j
13000workblk?(ptr+265)=u
13010workblk?(ptr+294)=hide
13020 IF change>=0 AND change<=4 THEN
13030 PROCbbox($(workblk+(change*256)),font$,pt,width)
13040 workblk!(ptr+278)=workblk!(ptr+270)+bbx1
13050 workblk!(ptr+282)=workblk!(ptr+274)-bby1
13060 workblk!(ptr+286)=bbx
13070 workblk!(ptr+290)=bby
13080 ax=sx2:by=sy2
13090 sx2=bbx:sy2=bby
13100 ENDIF
13110 IF change=5 THEN
13120 PROCbbox($(workblk+(5*256)),font$,pt,width)
13130 bbxm=bbx
13140 PROCbbox($(workblk+(6*256)),font$,pt,width)
13150 IF bbx>bbxm THEN bbxm=bbx
13160 PROCbbox($(workblk+(7*256)),font$,pt,width)
13170 IF bbx>bbxm THEN bbxm=bbx
13180 PROCbbox($(workblk+(8*256)),font$,pt,width)
13190 IF bbx>bbxm THEN bbxm=bbx
13200 PROCbbox("WFMgjq",font$,pt,width)
13210 workblk!(ptr+278)=workblk!(ptr+270)+bbx1
13220 workblk!(ptr+282)=workblk!(ptr+274)-bby1
13230 workblk!(ptr+286)=bbxm
13240 workblk!(ptr+290)=bby
13250 ax=sx2:by=sy2
13260 sx2=bbxm:sy2=bby*4+6*3
13270 ENDIF
13280IF ax>sx2 THEN ax=ax ELSE ax=sx2
13290IF by>sy2 THEN by=by ELSE by=sy2
13300SYS"Wimp_ForceRedraw",changedes,sx1,0-sy1-8,sx1+ax+2,0-sy1+by+2
13310ENDIF
13320IF change=6 THEN
13330ptr=detptr+(desblk*design)
13340sord=FNcheckflag(picture%,5,21)
13350Lock=FNcheckflag(picture%,1,21)
13360Centred=FNcheckflag(picture%,2,21)
13370Front=FNcheckflag(picture%,3,21)
13380IF sord THEN workblk?(ptr+5)=1 ELSE workblk?(ptr+5)=2
13390IF Lock workblk?(ptr+22)=1 ELSE workblk?(ptr+22)=0
13400IF Centred workblk?(ptr+23)=1 ELSE workblk?(ptr+23)=0
13410IF Front workblk?(ptr+24)=1 ELSE workblk?(ptr+24)=0
13420$(workblk+(ptr+6))=curspr$
13430SYS"Wimp_ForceRedraw",changedes,sx1,0-sy1,sx1+sx2+2,0-sy1+sy2+2
13440ENDIF
13450ENDIF
13460IF change=-1 THEN
13470ptr=detptr+(desblk*design)
13480workblk?(ptr+1)=(InterHex>>8)AND&FF
13490workblk?(ptr+2)=(InterHex>>16)AND&FF
13500workblk?(ptr+3)=(InterHex>>24)AND&FF
13510FOR i=2 TO 10 STEP 2
13520IF FNcheckflag(back%,i,21) THEN workblk?(ptr)=i/2
13530NEXT
13540IF FNcheckflag(back%,11,21) THEN workblk?(ptr)=0
13550PROCredraw(changedes)
13560ENDIF
13570IF change=-2 THEN
13580ptr=detptr+(desblk*design)
13590sord=FNcheckflag(picture%,5,21)
13600Lock=FNcheckflag(picture%,1,21)
13610Centred=FNcheckflag(picture%,2,21)
13620Front=FNcheckflag(picture%,3,21)
13630oldsord=workblk?(ptr+5)
13640IF sord THEN workblk?(ptr+5)=1 ELSE workblk?(ptr+5)=2
13650IF Lock workblk?(ptr+22)=1 ELSE workblk?(ptr+22)=0
13660IF Centred workblk?(ptr+23)=1 ELSE workblk?(ptr+23)=0
13670IF Front workblk?(ptr+24)=1 ELSE workblk?(ptr+24)=0
13680workblk!(ptr+44)=350
13690workblk!(ptr+48)=300
13700workblk!(ptr+52)=200
13710workblk!(ptr+56)=200
13720IF sord THEN $(workblk+(ptr+6))=curspr$
13730IF select=6 THEN select=-1
13740IF oldsord>0 THEN PROCredraw(curdes)
13750SYS"Wimp_ForceRedraw",curdes,350,-300,350+200,-300+200
13760ENDIF
13770ENDPROC
13780
13790DEFPROCshowall(handle)
13800CASE handle OF
13810WHEN card% : design=0
13820WHEN comp% : design=1
13830WHEN letter% : design=2
13840ENDCASE
13850FOR i=0 TO 5
13860ptr=detptr+(desblk*design)+deslen+(style*i)
13870workblk?(ptr+294)=1
13880NEXT
13890PROCredraw(handle)
13900ENDPROC
13910
13920DEFPROCremove(handle)
13930curdes=handle
13940CASE curdes OF
13950WHEN card% : design=0
13960WHEN comp% : design=1
13970WHEN letter% : design=2
13980ENDCASE
13990ptr=detptr+(desblk*design)
14000oldsord=workblk?(ptr+5)
14010workblk?(ptr+5)=0
14020$(workblk+(ptr+6))=""
14030IF select=6 THEN select=-1
14040IF oldsord>0 THEN PROCredraw(curdes)
14050ENDPROC
14060
14070DEFPROCinsert(handle)
14080curdes=handle
14090CASE curdes OF
14100WHEN card% : design=0
14110WHEN comp% : design=1
14120WHEN letter% : design=2
14130ENDCASE
14140PROCseticstate(picture%,1,1<<21,0<<21)
14150PROCseticstate(picture%,2,1<<21,0<<21)
14160PROCseticstate(picture%,3,1<<21,0<<21)
14170PROCseticstate(picture%,5,1<<21,0<<21)
14180PROCseticstate(picture%,6,1<<21,0<<21)
14190PROCseticstate(picture%,4,1<<22,0<<22)
14200PROCseticstate(picture%,5,1<<22,0<<22)
14210PROCseticstate(picture%,6,1<<22,0<<22)
14220IF NOT sprites THEN PROCseticstate(picture%,5,1<<22,1<<22):PROCseticstate(picture%,4,1<<22,1<<22)
14230IF NOT drawing THEN PROCseticstate(picture%,6,1<<22,1<<22)
14240IF sprites THEN
14250curspr$=defspr$
14260picpic=1
14270PROCseticstate(picture%,5,1<<21,1<<21)
14280ELSE
14290picpic=2
14300PROCseticstate(picture%,6,1<<21,1<<21)
14310ENDIF
14320PROCopenwin(picture%)
14330change=-2
14340ENDPROC
14350
14360DEFPROCswappic
14370button=block!16
14380IF button=5 THEN picpic=1:IF curspr$="" THEN curspr$=defspr$
14390IF button=6 THEN picpic=2
14400PROCredopic
14410ENDPROC
14420
14430DEFPROCredopic
14440SYS"Wimp_ForceRedraw",picture%,12,-222,222,12
14450ENDPROC
14460
14470DEFPROCselectitem
14480curdes=block!12
14490mx=block!0:my=block!4
14500CASE curdes OF
14510WHEN card% : design=0
14520WHEN comp% : design=1
14530WHEN letter% : design=2
14540ENDCASE
14550!block=curdes
14560SYS"Wimp_GetWindowInfo",,block
14570workx%=block!4-block!20
14580worky%=block!16-block!24
14590xcoord=mx-workx%
14600ycoord=my-worky%
14610oldselect=select
14620osx1=sx1:osy1=sy1:osx2=sx2:osy2=sy2:olddes=seldes
14630sx1=-1:sy1=-1:sx2=-1:sxy=-1:select=-1
14640I=0
14650REPEAT
14660 ptr=detptr+(desblk*design)+deslen+(style*I)
14670 hide=workblk?(ptr+294)
14680 IF hide=1 THEN
14690 x1=workblk!(ptr+278):a1=x1
14700 y1=workblk!(ptr+282):b1=y1
14710 x2=workblk!(ptr+286):a2=x2
14720 y2=workblk!(ptr+290):b2=y2
14730 y1=0-y1:x2=x1+x2:y2=y1+y2
14740 IF I=5 THEN y2=b2*4+6*3:b2=y2:y2=y1+y2
14750 IF xcoord>x1 AND ycoord>y1 AND xcoord<x2 AND ycoord<y2 THEN select=I:seldes=curdes:sx1=a1:sy1=b1:sx2=a2:sy2=b2
14760 ENDIF
14770 I+=1
14780UNTIL I=6 OR select>-1
14790ptr=detptr+(desblk*design)
14800pictype=workblk?(ptr+5)
14810IF select=-1 AND pictype>0 THEN
14820 x1=workblk!(ptr+44):a1=x1
14830 y1=workblk!(ptr+48):b1=y1
14840 x2=workblk!(ptr+52):a2=x2
14850 y2=workblk!(ptr+56):b2=y2
14860 y1=0-y1:x2=x1+x2:y2=y1+y2
14870 IF xcoord>x1 AND ycoord>y1 AND xcoord<x2 AND ycoord<y2 THEN select=6:seldes=curdes:sx1=a1:sy1=b1:sx2=a2:sy2=b2
14880ENDIF
14890IF (select<>-1 AND select<>oldselect) OR (seldes<>-1 AND seldes<>olddes) THEN
14900block!0=seldes:block!4=sx1:block!8=0-sy1:block!12=sx1+sx2+4:block!16=0-sy1+sy2+4
14910SYS"Wimp_UpdateWindow",,block TO more
14920WHILE more
14930 SYS"ColourTrans_SetGCOL",&0000FF00,,,&100,0
14940 MOVE workx%+sx1,worky%-sy1
14950 VDU 23,6,&CC|
14960 PLOT 17,sx2,0
14970 PLOT 17,0,sy2
14980 PLOT 17,0-sx2,0
14990 PLOT 17,0,0-sy2
15000 SYS"Wimp_GetRectangle",,block TO more
15010ENDWHILE
15020ENDIF
15030IF (oldselect<>-1 AND select<>oldselect) OR (olddes<>-1 AND olddes<>seldes) THEN
15040block!0=olddes:block!4=osx1:block!8=0-osy1:block!12=osx1+osx2+4:block!16=0-osy1+osy2+4
15050SYS"Wimp_UpdateWindow",,block TO more
15060WHILE more
15070 aptr=detptr+(desblk*design)
15080 ColR=workblk?(aptr+1):ColG=workblk?(aptr+2):ColB=workblk?(aptr+3)
15090 backcol=(ColB<<24)+(ColG<<16)+(ColR<<8)
15100 SYS"ColourTrans_SetGCOL",backcol,,,&100,0
15110 RECTANGLE workx%+osx1,worky%-osy1,osx2,osy2
15120 SYS"Wimp_GetRectangle",,block TO more
15130ENDWHILE
15140 IF oldselect=6 THEN
15150 SYS"Wimp_ForceRedraw",olddes,osx1,0-osy1,osx1+osx2+4,0-osy1+4
15160 SYS"Wimp_ForceRedraw",olddes,osx1,0-osy1,osx1+4,0-osy1+osy2+4
15170 SYS"Wimp_ForceRedraw",olddes,osx1,0-osy1+osy2,osx1+osx2+4,0-osy1+osy2+4
15180 SYS"Wimp_ForceRedraw",olddes,osx1+osx2,0-osy1,osx1+osx2+4,0-osy1+osy2+4
15190 ELSE
15200 SYS"Wimp_ForceRedraw",olddes,osx1,0-osy1,osx1+osx2+4,0-osy1+osy2+4
15210 ENDIF
15220ENDIF
15230ENDPROC
15240
15250DEFPROCdragitem
15260IF select=-1 THEN ENDPROC
15270mx=block!0:my=block!4
15280!block=seldes
15290CASE seldes OF
15300WHEN card% : design=0
15310WHEN comp% : design=1
15320WHEN letter% : design=2
15330ENDCASE
15340SYS"Wimp_GetWindowInfo",,block
15350a=block!4:b=block!8:c=block!12:d=block!16
15360workx%=block!4-block!20
15370worky%=block!16-block!24
15380xcoord=mx-workx%
15390ycoord=my-worky%
15400IF xcoord>sx1 AND ycoord>0-sy1 AND xcoord<sx1+sx2 AND ycoord<0-sy1+sy2 THEN
15410block!0=0:block!4=5
15420block!8=workx%+sx1:block!12=worky%-sy1:block!16=workx%+sx1+sx2+2:block!20=worky%-sy1+sy2+2
15430block!24=a-sx2+10:block!28=b-sy2+10:block!32=c+sx2-10:block!36=d+sy2-10
15440itemdrag=TRUE
15450SYS"Wimp_DragBox",,block
15460ENDIF
15470ENDPROC
15480
15490DEFPROCpullitem
15500IF select<6 THEN ENDPROC
15510mx=block!0:my=block!4
15520!block=seldes
15530CASE seldes OF
15540WHEN card% : design=0
15550WHEN comp% : design=1
15560WHEN letter% : design=2
15570ENDCASE
15580SYS"Wimp_GetWindowInfo",,block
15590a=block!4:b=block!8:c=block!12:d=block!16
15600workx%=block!4-block!20
15610worky%=block!16-block!24
15620xcoord=mx-workx%
15630ycoord=my-worky%
15640IF xcoord>sx1 AND ycoord>0-sy1 AND xcoord<sx1+sx2 AND ycoord<0-sy1+sy2 THEN
15650block!0=0:block!4=6
15660block!8=workx%+sx1:block!12=worky%-sy1:block!16=workx%+sx1+sx2+2:block!20=worky%-sy1+sy2+2
15670block!24=a-sx2:block!28=b:block!32=c:block!36=d+sy2
15680itempull=TRUE
15690SYS"Wimp_DragBox",,block
15700ENDIF
15710ENDPROC
15720
15730DEFPROCdropitem
15740mx=block!0:my=block!4
15750!block=seldes
15760SYS"Wimp_GetWindowInfo",,block
15770workx%=block!4-block!20
15780worky%=block!16-block!24
15790xcoord=mx-workx%
15800ycoord=0-(my-worky%)
15810IF select>=0 AND select<=4 THEN
15820ptr=detptr+(desblk*design)+deslen+(style*select)
15830workblk!(ptr+270)=xcoord-(workblk!(ptr+278)-workblk!(ptr+270))
15840workblk!(ptr+274)=ycoord-(workblk!(ptr+282)-workblk!(ptr+274))
15850workblk!(ptr+278)=xcoord
15860workblk!(ptr+282)=ycoord
15870xcoord=workblk!(ptr+278):ycoord=workblk!(ptr+282)
15880ENDIF
15890IF select=5 THEN
15900ptr=detptr+(desblk*design)+deslen+(style*select)
15910workblk!(ptr+270)=xcoord+(workblk!(ptr+278)-workblk!(ptr+270))
15920workblk!(ptr+274)=ycoord-(workblk!(ptr+282)-workblk!(ptr+274))
15930workblk!(ptr+278)=xcoord
15940workblk!(ptr+282)=ycoord
15950REM xcoord=!(ptr+270):ycoord=!(ptr+274)
15960ENDIF
15970IF select=6 THEN
15980ptr=detptr+(desblk*design)
15990workblk!(ptr+44)=xcoord
16000workblk!(ptr+48)=ycoord
16010ENDIF
16020SYS"Wimp_ForceRedraw",curdes,sx1-2,0-sy1-8-2,sx1+sx2+4,0-sy1+sy2+4
16030SYS"Wimp_ForceRedraw",curdes,xcoord,0-ycoord-8,xcoord+sx2+2,0-ycoord+sy2+2
16040sx1=xcoord:sy1=ycoord
16050itemdrag=FALSE
16060ENDPROC
16070
16080DEFPROCresizeitem
16090mx1=block!0:my1=block!4:mx2=block!8:my2=block!12
16100!block=curdes
16110SYS"Wimp_GetWindowInfo",,block
16120workx%=block!4-block!20
16130worky%=block!16-block!24
16140xcoord1=mx1-workx%
16150ycoord1=0-(my1-worky%)
16160xcoord2=mx2-workx%
16170ycoord2=0-(my2-worky%)
16180width=xcoord2-xcoord1
16190height=ycoord2-ycoord1
16200IF xcoord2>xcoord1 THEN xcoord=xcoord1:width=xcoord2-xcoord1
16210IF ycoord2<ycoord1 THEN ycoord=ycoord1:height=ycoord2-ycoord1
16220IF xcoord2<xcoord1 THEN xcoord=xcoord2:width=xcoord1-xcoord2
16230IF ycoord2>ycoord1 THEN ycoord=ycoord2:height=ycoord1-ycoord2
16240ptr=detptr+(desblk*design)
16250workblk!(ptr+44)=xcoord
16260workblk!(ptr+48)=ycoord
16270workblk!(ptr+52)=width
16280workblk!(ptr+56)=0-height
16290SYS"Wimp_ForceRedraw",curdes,sx1,0-sy1,sx1+sx2+2,0-sy1+sy2+2
16300sx1=xcoord:sy1=ycoord:sx2=width:sy2=0-height
16310SYS"Wimp_ForceRedraw",curdes,sx1,0-sy1,sx1+sx2+2,0-sy1+sy2+2
16320itempull=FALSE
16330ENDPROC
16340
16350DEFPROCselectcol(colno)
16360hex=winpal(colno-14)
16370RED=(hex>>8)AND&FF
16380GREEN=(hex>>16)AND&FF
16390BLUE=(hex>>24)AND&FF
16400!block=colour%
16410SYS"Wimp_GetWindowInfo",,block
16420workx%=block!4-block!20
16430worky%=block!16-block!24
16440SYS "ColourTrans_SetGCOL",hex,,,&100,0
16450RECTANGLE FILL workx%+234,worky%-247,175,48
16460 SYS "Wimp_SetColour",1,1
16470 RECTANGLE FILL workx%+270,worky%-170,344,147
16480 SYS "ColourTrans_SetGCOL",&0000FF00,,,&100,0
16490 RECTANGLE FILL workx%+271,worky%-55,(RED/255)*344,32
16500 SYS "ColourTrans_SetGCOL",&00FF0000,,,&100,0
16510 RECTANGLE FILL workx%+271,worky%-111,(GREEN/255)*344,32
16520 SYS "ColourTrans_SetGCOL",&FF000000,,,&100,0
16530 RECTANGLE FILL workx%+271,worky%-167,(BLUE/255)*344,32
16540 SYS "ColourTrans_SetGCOL",0,,,&100,0:RECTANGLE workx%+233,worky%-248,176,49
16550 RECTANGLE workx%+270,worky%-58,344,34
16560 RECTANGLE workx%+270,worky%-114,344,34
16570 RECTANGLE workx%+270,worky%-170,344,34
16580 PROCinfo(colour%,3,STR$RED)
16590 PROCinfo(colour%,7,STR$GREEN)
16600 PROCinfo(colour%,11,STR$BLUE)
16610ENDPROC
16620
16630DEFPROCdragcol
16640!block=colour%
16650SYS"Wimp_GetWindowInfo",,block
16660workx%=block!4-block!20
16670worky%=block!16-block!24
16680stopdrag=FALSE
16690REPEAT
16700MOUSE r,s,t
16710IF t<>1 AND t<>4 stopdrag=TRUE
16720IF r>workx%+268 AND r<workx%+268+348 AND s>worky%-58 AND s<worky%-(58-35) THEN
16730 MOUSE RECTANGLE workx%+270,worky%-57,344,30
16740 nred=INT(((r-(workx%+270))/344)*255)
16750 IF nred=-1 nred=0
16760 PROCupdateic(colour%,3,STR$nred,4,32)
16770 RED=nred
16780 PROCredrawbar(RED,&0000FF00,workx%,worky%,272,55)
16790ENDIF
16800IF r>workx%+268 AND r<workx%+268+348 AND s>worky%-114 AND s<worky%-(114-35) THEN
16810 MOUSE RECTANGLE workx%+270,worky%-112,344,30
16820 ngreen=INT(((r-(workx%+270))/344)*255)
16830 IF ngreen=-1 ngreen=0
16840 PROCupdateic(colour%,7,STR$ngreen,4,32)
16850 GREEN=ngreen
16860 PROCredrawbar(GREEN,&00FF0000,workx%,worky%,272,111)
16870ENDIF
16880IF r>workx%+268 AND r<workx%+268+348 AND s>worky%-170 AND s<worky%-(170-35) THEN
16890 MOUSE RECTANGLE workx%+270,worky%-168,344,30
16900 nblue=INT(((r-(workx%+270))/344)*255)
16910 IF nblue=-1 nblue=0
16920 PROCupdateic(colour%,11,STR$nblue,3,32)
16930 BLUE=nblue
16940 PROCredrawbar(BLUE,&FF000000,workx%,worky%,272,167)
16950ENDIF
16960UNTIL stopdrag
16970PROCMode
16980 MOUSE RECTANGLE 0,0,xmax-1,ymax-1
16990ENDPROC
17000
17010DEFPROCredrawbar(COL,RGB,workx%,worky%,xco,yco)
17020block!0=colour%:block!4=xco:block!8=0-yco-2:block!12=xco+344:block!16=0-yco+34
17030SYS"Wimp_UpdateWindow",,block TO more
17040WHILE more
17050SYS "Wimp_SetColour",1,1
17060RECTANGLE FILL workx%+xco+(COL/255)*344,worky%-yco,342-(COL/255)*344,30
17070SYS "ColourTrans_SetGCOL",RGB,,,&100,0
17080RECTANGLE FILL workx%+(xco-2),worky%-yco,(COL/255)*344,30
17090SYS "ColourTrans_SetGCOL",0,,,&100,0
17100RECTANGLE workx%+(xco-2),worky%-(yco+3),344,34
17110hex=(BLUE<<24)+(GREEN<<16)+(RED<<8)
17120SYS"Wimp_GetRectangle",,block TO more
17130ENDWHILE
17140block!0=colour%:block!4=232:block!8=-247:block!12=232+176:block!16=-247+50
17150SYS"Wimp_UpdateWindow",,block TO more
17160WHILE more
17170SYS "ColourTrans_SetGCOL",hex,,,&100,0
17180RECTANGLE FILL workx%+234,worky%-247,175,48
17190SYS "ColourTrans_SetGCOL",0,,,&100,0:RECTANGLE workx%+233,worky%-248,176,49
17200SYS"Wimp_GetRectangle",,block TO more
17210ENDWHILE
17220ENDPROC
17230
17240DEFPROCaddcol
17250IF backgrnd=0 THEN
17260InterHex=hex
17270PROCclose(colour%)
17280SYS"Wimp_ForceRedraw",back%,342,-110,642,-58
17290ENDIF
17300IF backgrnd=1 THEN
17310InterHex=hex
17320PROCclose(colour%)
17330SYS"Wimp_ForceRedraw",type%,406,-204,548,-152
17340ENDIF
17350ENDPROC
17360
17370DEFFNclaim(amount%)
17380SYS"OS_Heap",1,heap% TO ,,largest,free
17390IF amount%<largest THEN
17400SYS"OS_Heap",2,heap%,,amount%+8 TO ,,picpool%
17410ENDIF
17420IF amount%>largest THEN
17430SYS"Wimp_SlotSize",-1,-1 TO current
17440SYS"Wimp_SlotSize",current+(amount%-largest)+1024,-1
17450SYS"Wimp_SlotSize",-1,-1 TO newcur
17460increase=newcur-current
17470SYS"OS_Heap",5,heap%,,increase
17480hsizeb+=increase
17490SYS"OS_Heap",2,heap%,,amount%+8 TO ,,picpool%
17500ENDIF
17510=picpool%
17520
17530DEFPROCdeleteall
17540IF sprites THEN PROCdelete(1)
17550IF drawing THEN PROCdelete(2)
17560IF select=6 THEN select=-1
17570FOR i=0 TO 2
17580ptr=detptr+(desblk*i)
17590workblk?(ptr+5)=0
17600$(workblk+(ptr+6))=""
17610PROCredraw(card%):PROCredraw(comp%):PROCredraw(letter%)
17620ENDPROC
17630
17640DEFPROCdelete(type)
17650IF type=1 THEN
17660SYS"OS_Heap",3,heap%,spr%
17670sprites=FALSE
17680IF drawing THEN
17690SYS"OS_Heap",6,heap%,drawptr% TO ,,,blksize
17700SYS"OS_Heap",3,heap%,drawptr%
17710SYS"OS_Heap",2,heap%,,blksize-8 TO ,,scrap
17720 FOR i=0 TO blksize-8 STEP 4
17730 scrap!i=drawptr%!i
17740 NEXT
17750drawptr%=scrap
17760ENDIF
17770ENDIF
17780IF type=2 THEN
17790SYS"OS_Heap",3,heap%,drawptr%
17800drawing=FALSE
17810IF sprites THEN
17820SYS"OS_Heap",6,heap%,spr% TO ,,,blksize
17830SYS"OS_Heap",3,heap%,spr%
17840SYS"OS_Heap",2,heap%,,blksize-8 TO ,,scrap
17850 FOR i=0 TO blksize-8 STEP 4
17860 scrap!i=spr%!i
17870 NEXT
17880spr%=scrap
17890ENDIF
17900ENDIF
17910SYS"OS_Heap",1,heap% TO ,,largest,tfree
17920SYS"OS_ReadMemMapInfo" TO page
17930SYS"Wimp_SlotSize",-1,-1 TO current
17940IF largest>page THEN
17950amount=INT(largest/page)*page
17960newcur=current-amount
17970IF newcur<=origappsize THEN newcur=origappsize
17980decrease=current-newcur
17990IF decrease<>0 THEN SYS"OS_Heap",5,heap%,,0-decrease
18000SYS"Wimp_SlotSize",newcur,-1
18010hsizeb-=decrease
18020ENDIF
18030ENDPROC
18040
18050DEFFNvga(mod)
18060SYS"OS_ReadModeVariable",mod,11 TO,,c
18070SYS"OS_ReadModeVariable",mod,12 TO,,b
18080c+=1:b+=1
18090CASE b/c OF
18100WHEN 0.8:g=TRUE
18110WHEN .75:g=TRUE
18120OTHERWISE: g=FALSE
18130ENDCASE
18140=g
18150
18160DEFPROCareyousure
18170IF NOT savef THEN
18180PROCopencen(quit%)
18190VDU 7
18200PROCinfo(quit%,1,"Your file has been modified.")
18210PROCMode
18220MOUSE RECTANGLE 0,0,xmax,ymax
18230ENDIF
18240IF savef PROCend
18250ENDPROC
18260
18270DEFPROCquery(qu$)
18280PROCopencen(query%)
18290VDU 7
18300!block=query%
18310SYS"Wimp_GetWindowInfo",,block
18320workx%=block!12-block!4
18330worky%=block!16-block!8
18340MOUSE RECTANGLE block!4,block!8,workx%,worky%
18350PROCinfo(query%,1,qu$)
18360ENDPROC
18370
18380DEFPROCendq
18390PROCclose(query%)
18400PROCMode
18410MOUSE RECTANGLE 0,0,xmax,ymax
18420ENDPROC
18430
18440DEFPROCtitles(ext$)
18450PROCtitle(details%,ext$)
18460PROCtitle(card%,ext$)
18470PROCtitle(comp%,ext$)
18480PROCtitle(letter%,ext$)
18490ENDPROC
18500
18510DEFPROCtitle(handle,new$)
18520!icond=handle
18530SYS"Wimp_GetWindowInfo",,icond
18540title$=$(icond!76)
18550IF new$<>"" THEN
18560IF RIGHT$(title$,LEN(title$)-LEN(title$)+1)<>new$ THEN
18570new$=title$+" "+new$
18580$(!(icond+76))=new$:SYS"Wimp_ForceRedraw",-1,icond!4,(icond!16),icond!12,(icond!16)+36
18590ENDIF
18600ELSE
18610IF RIGHT$(title$,LEN(title$)-LEN(title$)+1)="*" THEN
18620new$=LEFT$(title$,LEN(title$)-2)
18630$(!(icond+76))=new$:SYS"Wimp_ForceRedraw",-1,icond!4,(icond!16),icond!12,(icond!16)+36
18640ENDIF
18650ENDIF
18660ENDPROC
18670
18680DEFPROCprint
18690noofpages=VAL($FNinfo(print%,4))
18700IF $FNinfo(print%,0)="Not Present" THEN PROCquery("Can not print, no printer driver present."):noprint=TRUE:ENDPROC
18710des$=""
18720IF FNcheckflag(print%,7,21) THEN des$+=" bus. card,"
18730IF FNcheckflag(print%,8,21) THEN des$+=" comp. slip,"
18740IF FNcheckflag(print%,9,21) THEN des$+=" letter head,"
18750IF FNcheckflag(print%,6,21) THEN copies$="single.":fullsheet=0:ELSE copies$="full sheet.":fullsheet=1
18760SYS "ColourTrans_SetGCOL",&DDDDDD00,,,&100,0
18770RECTANGLE FILL 288,466,738,194
18780SYS "ColourTrans_SetGCOL",0,,,&100,0
18790RECTANGLE 286,464,740,196
18800SYS"Wimp_CreateMenu",,-1
18810SYS"PDriver_PageSize" TO,,,l%,b%,r%,t%
18820VDU 5
18830MOVE 410,640
18840PRINT "Printing in progress..."
18850MOVE 380,600
18860PRINT "Prining ";noofpages;" copies, ";copies$
18870MOVE 380,560
18880PRINT "of ";des$
18890MOVE 400,520
18900PRINT "Press Escape to cancel"
18910VDU 4
18920printing=TRUE
18930fh%=-1
18940LOCAL ERROR
18950ON ERROR LOCAL:RESTORE ERROR:PROCprinterr:ENDPROC
18960SYS"Hourglass_On"
18970fh%=OPENOUT("printer:")
18980SYS"PDriver_SelectJob",fh% TO job
18990SYS"PDriver_PageSize" TO,,,l%,b%,r%,t%
19000IF FNcheckflag(print%,7,21) PROCprintdes(0)
19010IF FNcheckflag(print%,8,21) PROCprintdes(1)
19020IF FNcheckflag(print%,9,21) PROCprintdes(2)
19030SYS"PDriver_EndJob",fh%
19040CLOSE#fh%
19050SYS"PDriver_SelectJob",job
19060SYS"Hourglass_Smash"
19070SYS"Wimp_ForceRedraw",-1,286,464,740+288,196+466
19080ENDPROC
19090
19100DEFPROCprintdes(design)
19110IF fullsheet=0 THEN
19120 IF design=0 up=623-6:box1=-10:boxx=584+2:boxy=388+2
19130 IF design=1 up=561-6:box1=-10:boxx=(565+6)*2.5:boxy=622+2
19140 IF design=2 up=670-6:box1=-10:boxx=(565+6)*2.5:boxy=340+2
19150ENDIF
19160IF fullsheet=1 THEN
19170 IF design=0 up=85-6:box1=-200:boxx=(518+6)*2.5:boxy=(777+6)*2.5
19180 IF design=1 up=62-6:box1=-460:boxx=(565+6)*2.5:boxy=(802+6)*2.5
19190 IF design=2 up=670-6:box1=-10:boxx=(565+6)*2.5:boxy=340+2
19200ENDIF
19210matrix!0=66000:matrix!4=0:matrix!8=0:matrix!12=66000:REM 66000,0,0,66000
19220origin!0=l%:origin!4=up*1000
19230box!0=-10:box!4=box1:box!8=boxx:box!12=boxy
19240SYS"PDriver_GiveRectangle",0,box,matrix,origin,&FFFFFF00
19250SYS"PDriver_DrawPage",noofpages,box2,0,0 TO more
19260WHILE more<>0
19270PROCdraw(boxy,design)
19280SYS"PDriver_GetRectangle",0,box2 TO more
19290ENDWHILE
19300ENDPROC
19310
19320DEFPROCdraw(height,design)
19330xmin=0:xmax=1400:ymin=-800:ymax=0
19340IF fullsheet=1 THEN
19350 IF design=0 THEN
19360 FOR cardco=1 TO 16 STEP 2
19370 PROCdrawdesign(cardpos(0,cardco)*2.5,cardpos(0,cardco+1)*2.5,0,-1)
19380 NEXT cardco
19390 ENDIF
19400 IF design=1 THEN
19410 FOR cardco=1 TO 6 STEP 2
19420 PROCdrawdesign(cardpos(1,cardco)*2.5-50,cardpos(1,cardco+1)*2.5,1,-1)
19430 NEXT cardco
19440 ENDIF
19450 IF design=2 THEN PROCdrawdesign(10,height-4,design,-1)
19460ELSE
19470PROCdrawdesign(10,height-4,design,-1)
19480ENDIF
19490ENDPROC
19500
19510DEFPROCprinterr
19520IF ERR=17 THEN
19530SYS"PDriver_AbortJob",fh%:
19540REM SYS"PDriver_SelectJob",job:
19550CLOSE#fh%
19560PROCmess("Escape: Print Canceled")
19570SYS"OS_ReadModeVariable",MODE,4 TO ,,x
19580SYS"OS_ReadModeVariable",MODE,5 TO ,,y
19590MOUSE RECTANGLE 0,0,(((block!128)+1)*2^x)-1,((block!132)+1)*2^y
19600SYS"Hourglass_Smash"
19610SYS"Wimp_ForceRedraw",-1,286,464,740+288,196+466
19620ENDPROC
19630ENDIF
19640IF fh%<>-1 THEN SYS"PDriver_AbortJob",fh%:SYS"PDriver_SelectJob",job:CLOSE#fh%
19650SYS"Hourglass_Smash"
19660SYS"OS_ReadModeVariable",MODE,4 TO ,,x
19670SYS"OS_ReadModeVariable",MODE,5 TO ,,y
19680MOUSE RECTANGLE 0,0,(((block!128)+1)*2^x)-1,((block!132)+1)*2^y
19690SYS"Wimp_ForceRedraw",-1,286,464,740+288,196+466
19700PROCerror(REPORT$+": at line "+STR$ERL+" whilst printing"):ENDPROC
19710ENDPROC
19720
19730DEFPROCmorecopies
19740IF VAL($FNinfo(print%,4))=99 THEN ENDPROC
19750PROCinfo(print%,4,STR$(VAL$FNinfo(print%,4)+1))
19760ENDPROC
19770
19780DEFPROClesscopies
19790IF VAL($FNinfo(print%,4))=1 THEN ENDPROC
19800PROCinfo(print%,4,STR$(VAL$FNinfo(print%,4)-1))
19810ENDPROC
19820
19830DEFPROCupanddown(icn)
19840!block=colour%:SYS"Wimp_GetWindowInfo",,block
19850workx%=block!4-block!20
19860worky%=block!16-block!24
19870valuer=VAL$FNinfo(colour%,3)
19880valueg=VAL$FNinfo(colour%,7)
19890valueb=VAL$FNinfo(colour%,11)
19900CASE icn OF
19910WHEN 1:
19920IF valuer>0 PROCupdateic(colour%,3,STR$(valuer-1),4,32):hex=(valueb<<24)+(valueg<<16)+(valuer<<8):SYS"Wimp_ForceRedraw",-1,workx%+270,worky%-58,workx%+614,worky%-24:SYS"Wimp_ForceRedraw",-1,workx%+234,worky%-247,workx%+410,worky%-199:ELSE ENDPROC
19930WHEN 2:
19940IF valuer<255 PROCupdateic(colour%,3,STR$(valuer+1),4,32):hex=(valueb<<24)+(valueg<<16)+(valuer<<8):SYS"Wimp_ForceRedraw",-1,workx%+270,worky%-58,workx%+614,worky%-24:SYS"Wimp_ForceRedraw",-1,workx%+234,worky%-247,workx%+410,worky%-199:ELSE ENDPROC
19950WHEN 5:
19960IF valueg>0 PROCupdateic(colour%,7,STR$(valueg-1),4,32):hex=(valueb<<24)+(valueg<<16)+(valuer<<8):SYS"Wimp_ForceRedraw",-1,workx%+270,worky%-114,workx%+614,worky%-80:SYS"Wimp_ForceRedraw",-1,workx%+234,worky%-247,workx%+410,worky%-199:ELSE ENDPROC
19970WHEN 6:
19980IF valueg<255 PROCupdateic(colour%,7,STR$(valueg+1),4,32):hex=(valueb<<24)+(valueg<<16)+(valuer<<8):SYS"Wimp_ForceRedraw",-1,workx%+270,worky%-114,workx%+614,worky%-80:SYS"Wimp_ForceRedraw",-1,workx%+234,worky%-247,workx%+410,worky%-199:ELSE ENDPROC
19990WHEN 9:
20000IF valueb>0 PROCupdateic(colour%,11,STR$(valueb-1),4,32):hex=(valueb<<24)+(valueg<<16)+(valuer<<8):SYS"Wimp_ForceRedraw",-1,workx%+270,worky%-170,workx%+614,worky%-136:SYS"Wimp_ForceRedraw",-1,workx%+234,worky%-247,workx%+410,worky%-199:ELSE ENDPROC
20010WHEN 10:
20020IF valueb<255 PROCupdateic(colour%,11,STR$(valueb+1),4,32):hex=(valueb<<24)+(valueg<<16)+(valuer<<8):SYS"Wimp_ForceRedraw",-1,workx%+270,worky%-170,workx%+614,worky%-136:SYS"Wimp_ForceRedraw",-1,workx%+234,worky%-247,workx%+410,worky%-199:ELSE ENDPROC
20030ENDCASE
20040ENDPROC
20050
20060DEFPROCsetper(a)
20070backgrnd=a
20080IF backgrnd=0 THEN
20090coldes=coldes
20100ptr=detptr+(desblk*design)
20110RED=workblk?(ptr+1)
20120GREEN=workblk?(ptr+2)
20130BLUE=workblk?(ptr+3)
20140hex=(BLUE<<24)+(GREEN<<16)+(RED<<8)
20150InterHex=hex
20160PROCinfo(colour%,3,STR$RED)
20170PROCinfo(colour%,7,STR$GREEN)
20180PROCinfo(colour%,11,STR$BLUE)
20190ENDIF
20200IF backgrnd=1 THEN
20210coldes=changedes
20220hex=InterHex
20230RED=(hex>>8)AND&FF:GREEN=(hex>>16)AND&FF:BLUE=(hex>>24)AND&FF
20240PROCinfo(colour%,3,STR$RED)
20250PROCinfo(colour%,7,STR$GREEN)
20260PROCinfo(colour%,11,STR$BLUE)
20270ENDIF
20280PROCopenwin(colour%)
20290!block=colour%:SYS"Wimp_GetWindowInfo",,block
20300workx%=block!4-block!20
20310worky%=block!16-block!24
20320SYS"Wimp_ForceRedraw",-1,workx%+270,worky%-170,workx%+614,worky%-24
20330SYS"Wimp_ForceRedraw",-1,workx%+234,worky%-247,workx%+410,worky%-199
20340ENDPROC
20350
20360DEFPROCincrement(amount,min,max,handle,icon)
20370curval=VAL($FNinfo(handle,icon))
20380newval=curval+amount
20390IF newval>=min AND newval<=max THEN
20400PROCupdateic(handle,icon,STR$newval,14,32)
20410ENDIF
20420ENDPROC
20430
20440DEFPROCupdateic(handle,icon,data$,x,y)
20450$FNinfo(handle,icon)=data$
20460!block=handle:block!4=icon
20470SYS"Wimp_GetIconState",,block
20480x1=block!8:y1=block!12:x2=block!16:y2=block!20
20490rx1=x1+x:ry1=(y1+y2)/2-(y/2):rx2=x2-x:ry2=ry1+y
20500!block=handle:block!4=rx1:block!8=ry1:block!12=rx2:block!16=ry2
20510SYS"Wimp_UpdateWindow",,block TO more
20520WHILE more
20530SYS"Wimp_GetRectangle",,block TO more
20540ENDWHILE
20550ENDPROC
$� � �mess(�$+" : at line "+Þ):�
� ***>$.!Stationer.!RunImage
L� ***Main Program for !Stationer - Business communications media creator
(� Version 1.11U (21 Jan 96)
2� � J. Robbins
<�
FZ� block 10*1024, mblock 1024, menu% 6*1024, curbuf% 9*1024, icond 5*1024, text% &1000
PP� defpal% 255, fontblk% 256, scale% 20,PixTrans% 256,temp% 100,palette% 1024
Z,� winpal(15),cardpos(2,16),drawfont$(18)
d/� matrix 100, origin 100, box 100, box2 100
n� workblk 8*1024
xmaxlev%=32
�#� start%(maxlev%),box%(maxlev%)
�5� l%(maxlev%),b%(maxlev%),r%(maxlev%),t%(maxlev%)
�/detptr=2304:deslen=60:desblk=1848:style=298
�&� c=1 � 16 : � a :cardpos(0,c)=a:�
�%� c=1 � 6 : � a :cardpos(1,c)=a:�
�$cardpos(2,1)=25:cardpos(2,2)=670
�� I=0 � 15
� � hexa
� winpal(I)=hexa
� defpal%!(I*4)=hexa
��
�?� 25,625,290,625,25,445,290,445,25,265,290,265,25,85,290,85
�� 25,561,25,312,25,62
P� &FFFFFF10,&DDDDDD10,&BBBBBB10,&99999910,&77777710,&55555510,&33333310,&010
I� &99440010,&EEEE10,&CC0010,&DD10,&BBEEEE10,&885510,&BBFF10,&FFBB0010
Eend%=-1:textc=�:cardb=�:hex=0:RED=(hex>>8)�&FF:BLUE=RED:GREEN=RED
"endbuf%=curbuf%+&6000
,j=0:FMopen=0:in=�:close=0
6'savef=�:noprint=�:printing=�:full=�
@1prequitwait=�:quiting=�:quitsave=�:shutdown=�
Jfmcreated%=�:fcount%=0
Tend%=�:drag%=0:drive%=0
^*curspr$="":drawing=�:sprites=�:drawk=0
h font%=-1:noofcards=8:dfont=�
ritemdrag=�:itempull=�
|Gsx1=-1:sy1=-1:sx2=-1:sy2=-1:select=-1:curdes=-1:seldes=-1:olddes=-1
�0osx1=-2:osy1=-2:osx2=-2:osxy=-2:oldselect=-2
�backgrnd=-1
�task=&4B534154
�Aș "Wimp_Initialise",200,task,"!Stationer" � version%,mytask%
�
�template
�ș "OS_GetEnv" � env$
�� �env$,"-quit") �
�I%=�env$,"""")
�I%=�env$,"""",I%+1)
��
� I%+=1
�� �env$,I%,1)<>" "
�env$=�env$,I%)
print$=�env$,7)
�
noic=0
&"ș"Wimp_SlotSize",-1,-1 � orig
0 max=�-�:max=�(max/1024)*1024
:max-=&4000
D%ș"Wimp_SlotSize",-1,-1 � current
N�=�-max:hsizeb=max:heap%=�
X� hsizeb<1024 � �
bș"OS_Heap",0,heap%,,hsizeb
l'origheap=hsizeb:origappsize=current
vș"OS_Byte",161,28 � ,,cmos
�+� (cmos � (1<<1))>0 � daspr=� � daspr=�
�3� print$=" -print" � env$=�env$,�env$-7):noic=1
�>� print$=" -print" � �present:�load(env$):�openwin(print%)
�.� print$<>" -print" � env$<>"" �load(env$)
�Y� print$<>" -print" � env$="" �load("<Stat$Dir>.DefaultDt"):�info(save%,2,"StatData")
�� noic=0 � initic=�icon
�ș"Hourglass_On"
��fmenucr
�ș"Hourglass_Off"
�
�titlewin
�#� � �error(�$+" : at line "+Þ)
��
�%ș"Wimp_Poll",0,block � eventcode
ș"OS_Mouse" � ,,button
� button>0
�close(title%)
��mess("This program is SHAREWARE and is currently UNREGISTERED. You are authorised to use it for 2 weeks, after which you must register or delete it. Please refer to Help file for further information")
*�
4%ș"Wimp_Poll",0,block � eventcode
>Ȏ eventcode �
H6� 0:� savef � prequitwait ș"Wimp_ProcessKey",&1FC
R� 1:�redraw(block!0)
\#� 2:ș "Wimp_OpenWindow",,block
f$� 3:ș "Wimp_CloseWindow",,block
p� 6:�click(block)
z� 7:�dragin
�� 8:�process
�� 9:�select
�� 17,18:�messagein
��
�� �
��end
��
�
� ��end
�#ș"Wimp_CloseDown",mytask%,task
��
��
�
��titlewin
w�info(title%,1,"Business stationary designer. Comprising Compliment slip, Letter head and Business card creators.")
2$�info(title%,3)="Version 1.11U (21 Jan 1996)"
$�opencen(title%)
.titleopen=�
8�
B
L
ݤicon
V
!icond=-1
`
icond!4=0
j%icond!8=0:icond!12=68:icond!16=68
t+icond!20=%11010+((2^12)*3):icond?23=112
~ $(icond+24)="!Stationer"+�13
�&ș "Wimp_CreateIcon",,icond � icon
� =icon
�
�ݤinf(handle,icon)
��gee(handle,icon)
�
=icond!28
� ݤbit(a$)
�ȕ �a$,":")>0
�a$=�a$,�a$,":")+1)
��
�ȕ �a$,".")>0
�a$=�a$,�a$,".")+1)
�
=a$
ݤwool(wool%)
(
� cot$
2 ȕ ?wool%>=32
<cot$+=�(?wool%)
Fwool%+=1
P�
Z =cot$
d
n��template
x1ș"Wimp_OpenTemplate",,"<Stat$Dir>.Templates"
�indir=curbuf%
�info%=�template("ProgInfo")
�save%=�template("SaveData")
�#savedraw%=�template("SaveDraw")
�!savepic%=�template("SavePic")
�card%=�template("Card")
�#letter%=�template("LetterHead")
�comp%=�template("CompSlip")
�!picture%=�template("Picture")
�!details%=�template("details")
�type%=�template("Type")
�back%=�template("Back")
� colour%=�template("colours")
print%=�template("print")
query%=�template("query")
quit%=�template("quitbox")
"title%=�template("title")
,ș "Wimp_CloseTemplate"
6stex=�info(save%,2)
@stexd=�info(savedraw%,2)
Jstextpic=�info(savepic%,2)
T�
^
hݤtemplate(a$)
rFș"Wimp_LoadTemplate",,block,indir,endbuf%,-1,a$,0 � ,,indir,,,,c%
|2� c%=0 � �mess("Template "+a$+" not found."):�
�block!64=1
�)ș"Wimp_CreateWindow",,block � handle
�=handle
�
�ݤinfo(handle,icon)
��gee(handle,icon)
�
=icond!28
�
�ݤtoOS(in)
�'ș"Font_ConverttoOS",,in*1000 �,out
�=out
�
���info(handle,icon,text$)
;!block=handle:block!4=icon:ș"Wimp_GetIconState",,block
)$(block!28)=text$:block!36=�(text$)+1
block!8=0:block!12=0
& ș"Wimp_SetIconState",,block
0�
:
D��gee(handle,icon)
N!icond=handle:icond!4=icon
X ș"Wimp_GetIconState",,icond
b�
l
v8��seticstate(handle%,ic%,clear,eor):� as in PRM (CE)
�9!block=handle%:block!4=ic%:block!8=eor:block!12=clear
� ș"Wimp_SetIconState",,block
��
�
�
��present
� a$=""
�� �
� � � � a$="Not Present":� �:�
� ș"PDriver_Info" � a,,,,name
�ȕ ?name
�a$=a$+�(?name)
�name+=1
��
$�info(print%,0)=a$
� �
�
*��cmenus
4�present
>
nogo=�
HFMopen=0
Rmenuptr=menu%
\ȗ x,y,b
f/� block!16=27 � sprites � piccy=� � piccy=�
p?� sprites sprmen%=�menu("Sprite List",(largest*14)+40,men$)
z;picmenu%=�menu("Picture",174,"Delete,{b|savepic%}Save")
�[� (sprites � drawing) iconmenu$="{b|picmenu%}Picture" � iconmenu$="{-|picmenu%}Picture"
�d� (sprites � drawing) � block!12=-2 picmenu%=�menu("Picture",190,"Del Pic,{b|savepic%}Save Pic")
�k� (sprites � drawing) � block!12<>-2 picmenu%=�menu("Picture",190,"Insert,Remove,{b|savepic%}Save Pic")
�?view%=�menu("View",200,"Bus. Cards,Comp Slips,LetterHeads")
�Asavemenu%=�menu("Save",100,"{b|savedraw%}Draw,{b|save%}Data")
��iconmenu%=�menu("!Stationer",174,"{b|info%}Info,{b|savemenu%}Save,{b|print%}Print,Details,{b|view%}View,"+iconmenu$+",Quit")
�wdetmenu%=�menu("!Stationer",174,"{b|info%}Info,{b|savemenu%}Save,{b|print%}Print,{b|view%}View,"+iconmenu$+",Quit")
ʉviewmenu%=�menu("!Stationer",174,"{b|info%}Info,{b|savemenu%}Save,{b|print%}Print,Details,{b|view%}View,"+iconmenu$+",Show All,Quit")
�menuwin=block!12
�Ȏ menuwin �
�<� -2:� block!8=2 � openmenu%=iconmenu%:a=x-75:b=(7+2)*48
�)� details%:openmenu%=detmenu%:a=x:b=y
�D� picture%:� block!16=4 � openmenu%=sprmen%:a=x:b=y:FMopen=2:� �
C� card%,comp%,letter%:� block!8=2 � openmenu%=viewmenu%:a=x:b=y
:�
�
$W� sprites �seticstate(savepic%,4,1<<22,0<<22) � �seticstate(savepic%,4,1<<22,1<<22)
.W� drawing �seticstate(savepic%,5,1<<22,0<<22) � �seticstate(savepic%,5,1<<22,1<<22)
8K�seticstate(savepic%,4,1<<21,0<<21):�seticstate(savepic%,5,1<<21,0<<21)
BW� sprites �seticstate(savepic%,4,1<<21,1<<21) � �seticstate(savepic%,5,1<<21,1<<21)
L�openmenu(a,b)
V�
`
j��openmenu(x,y)
t&ș"Wimp_CreateMenu",,openmenu%,x,y
~�
�ݤmenu(tit$,wid,menu$)
�menu$+=","
�oldmenu=menuptr
�$menuptr=tit$
�menuptr?12=7
�menuptr?13=2
�menuptr?14=7
�menuptr?15=0
�menuptr!16=wid
�menuptr!20=48
�menuptr!24=0
�menuptr+=28
�
�thing(menu$)
menu$=�menu$,�menu$,",")+1)
menuptr+=24
(� menu$=""
2)menuptr!-24=(menuptr!-24) � %10000000
<=oldmenu
F��thing(m$)
Pm$=�m$,�m$,",")-1)
Zi$="":j$=""
d� �m$,"{")>0 �
ni$=�m$,�m$,"}")-1)
xm$=�m$,�m$,"}")+1)
�j$=�i$,�i$,"|")-1)
�i$=�i$,�i$,"|")+1)
��
�ijack=&07000021
�mjack=0
�submenu=-1
� � �j$,"b")>0 � submenu=�(i$)
�"� �j$,"_")>0 � mjack=mjack � 2
�"� �j$,"�")>0 � mjack=mjack � 1
�0� �j$,"u")>0 � mjack=mjack � 2:submenu=�(i$)
�6� �j$,"-")>0 � ijack=ijack � &400000:submenu=�(i$)
�(� �j$,"s")>0 � ijack=ijack � &400000
�!menuptr=mjack
menuptr!4=submenu
menuptr!8=ijack
$(menuptr+12)=m$
"�
,
6��click(block)
@E� quitsave � block!12<>save% � quiting=�:quitsave=�:�close(save%)
JL� prequitwait � block!12<>save% � prequitwait=�:shutdown=�:�close(save%)
TM� block!12=card% � block!12=comp% � block!12=letter% savef=�:�titles("*")
^I� block!12<>type% � (block!12<>colour% � backgrnd<>0) � �close(type%)
hI� block!12<>back% � (block!12<>colour% � backgrnd<>1) � �close(back%)
r)� block!12<>colour% � �close(colour%)
|+� block!12<>picture% � �close(picture%)
�W� block!8=1024 � (block!12=card% � block!12=comp% � block!12=letter%) � �selectitem
�R� block!8=4 � (block!12=card% � block!12=comp% � block!12=letter%) � �getstyle
�T� block!8=&40 � (block!12=card% � block!12=comp% � block!12=letter%) � �dragitem
�T� block!8=&10 � (block!12=card% � block!12=comp% � block!12=letter%) � �pullitem
�&� block!12=-2 � block!8=4 �opendet
�-� block!12=-2 � block!8=1 �openwin(card%)
�Z� block!12=type% � block!16=1 � ȗ x,y,b:FMopen=1:ș"Wimp_CreateMenu",,fmenu%,x-75,y:�
�� block!8=2 � �cmenus:�
�<� block!12=save% � block!16=1 winsave%=block!12:�defsave
�@� block!12=savedraw% � block!16=1 winsave%=block!12:�defsave
�?� block!12=savepic% � block!16=1 winsave%=block!12:�defsave
�M� block!12=save% � block!16=3 winsave%=block!12:�save($�info(winsave%,2))
�Q� block!12=savedraw% � block!16=3 winsave%=block!12:�save($�info(winsave%,2))
P� block!12=savepic% � block!16=3 winsave%=block!12:�save($�info(winsave%,2))
S� block!12=details% � block!16=16 �setdet:savef=�:�titles("*"):�close(details%)
6� block!12=details% � block!16=15 �close(details%)
&/� block!12=details% � block!16=17 �resetdet
02� block!12=back% � block!16=14 � �close(back%)
:>� block!12=back% � block!16=15 � �applystyle:�close(back%)
D/� block!12=back% � block!16=13 � �setper(0)
N� block!12=type% �
X Ȏ block!16 �
b& � 4 : �increment(1,7,999,type%,3)
l' � 5 : �increment(-1,7,999,type%,3)
v' � 7 : �increment(5,30,995,type%,8)
�( � 9 : �increment(-5,30,995,type%,8)
� � 16 : �close(type%)
�% � 17 : �applystyle:�close(type%)
� � 15 : �setper(1)
� �
��
�� block!12=picture% �
� Ȏ block!16 �
� � 7 : �close(picture%)
�' � 8 : �applystyle:�close(picture%)
� � 1,2,3 : �redopic
� � 4 : �cmenus
� � 5,6 : �swappic
�
�
I� block!12=colour% � block!16>=14 � block!16<=29 �selectcol(block!16)
.� block!12=colour% � block!16=13 � �addcol
*6� block!12=colour% � block!16=12 � �close(colour%)
4/� block!12=colour% � block!16=-1 � �dragcol
>H� block!12=colour% � block!16>0 � block!16<11 � �upanddown(block!16)
H0� block!12=print% � block!16=3 � �morecopies
R0� block!12=print% � block!16=5 � �lesscopies
\� shutdown �
fB � block!12=quit% � block!16=0 � ș"Wimp_ProcessKey",&1FC:�end
p= � block!12=quit% � block!16=2 � �close(quit%):shutdown=�
zP � block!12=quit% � block!16=3 � �close(quit%):�openwin(save%):prequitwait=�
��
�� quiting �
�) � block!12=quit% � block!16=0 � �end
�< � block!12=quit% � block!16=2 � �close(quit%):quiting=�
�M � block!12=quit% � block!16=3 � �close(quit%):�openwin(save%):quitsave=�
��
�9� block!12=query% � block!16=0 � �close(query%):�endq
�$� block!12=print% � block!16=1 �
� �print
� � noic=1 � �end
��
��
�
!ݤcheckflag(handle,icon,flag)
bit=�
!icond=handle:icond!4=icon
$ ș"Wimp_GetIconState",,icond
."� (icond!24�(1<<flag))>0 bit=�
8=bit
B
L��setshear(on)
V;!icond=details%:icond!4=29:ș"Wimp_GetIconState",,icond
`� on=1 �
jC=(1<<21):E=(1<<21)
t�
~C=(0<<21):E=(1<<21)
��
�icond!8=C:icond!12=E
� ș"Wimp_SetIconState",,icond
�:
�;!icond=details%:icond!4=30:ș"Wimp_GetIconState",,icond
�� on=0 �
�C=(1<<21):E=(1<<21)
��
�C=(0<<21):E=(1<<21)
��
�icond!8=C:icond!12=E
� ș"Wimp_SetIconState",,icond
�
��process
.� !block=details% � block!24=13 � �caret:�
(J� !block=save% � block!24=13 � winsave%=!block:�save($�info(!block,2))
2N� !block=savedraw% � block!24=13 � winsave%=!block:�save($�info(!block,2))
<M� !block=savepic% � block!24=13 � winsave%=!block:�save($�info(!block,2))
F ș"Wimp_ProcessKey",block!24
P�
Z
d��caret
n$ș"Wimp_GetCaretPosition",,block
x� block!0=details% �
�- � block!4>=0 � block!4<=7 � np=block!4+1
� � block!4=8 � np=0
�I ș "Wimp_SetCaretPosition",details%,np,0,0,-1,�($�info(details%,np))
��
��
�
���select
�� FMopen=1 �
�=ș"Font_DecodeMenu",0,fmenu%,block,fontblk%,256 �,,,,size
܅$fontblk%=�$fontblk%,size-1):$fontblk%=�$fontblk%,�($fontblk%)-2):$fontblk%=�$fontblk%,�$fontblk%-(�$fontblk%-�$fontblk%,"\"))-1)
�family$=$fontblk%
��info(type%,0,family$)
�FMopen=0
�
�
� FMopen=2 �
",ș"Wimp_DecodeMenu",,sprmen%,block,icond
,curspr$=$icond
6�redopic
@FMopen=0
J�
T�
^.ș"Wimp_DecodeMenu",,openmenu%,block,icond
h+� $icond="Quit" � �areyousure:quiting=�
r!� $icond="Details" � �opendet
|D� $icond="View.LetterHeads" � �openwin(letter%):�redraw(letter%)
�?� $icond="View.Comp Slips" � �openwin(comp%):�redraw(comp%)
�?� $icond="View.Bus. Cards" � �openwin(card%):�redraw(card%)
�0� $icond="Picture.Insert" � �insert(menuwin)
�0� $icond="Picture.Remove" � �remove(menuwin)
�+� $icond="Picture.Del Pic" � �deleteall
�+� $icond="Show All" � �showall(menuwin)
�(� $icond="Save.Draw" �openwin(save%)
�)� $icond="Save.Data" �openwin(saved%)
�"ș"Wimp_GetPointerInfo",,block
�� block!8=1 �
�block!12=menuwin
��cmenus
�"ș"Wimp_CreateMenu",,openmenu%
�
ș"Wimp_CreateMenu",,-1
�
&�
0
:��mess(mess$)
D !icond=0:$(icond+4)=mess$+�0
N-ș"Wimp_ReportError",icond,1,"!Stationer"
X�
b
l��error(err$)
v
� �=523 �
�%�mess("Font "+font$+" not found")
�/�close(card%):�close(comp%):�close(letter%)
��
�M!icond=0:$(icond+4)=err$+"."+" Press OK to continue or Cancel to quit"+�0
�4ș"Wimp_ReportError",icond,3,"!Stationer" � ,but
�� but=2 � �end
��
��
�
� ��out
�ș"DragASprite_Stop"
�.� winsave%=savedraw% � stext=stexd:ft=&AFF
�.� winsave%=savedraw% � stext=stexd:ft=&00C
c� winsave%=savepic% � �checkflag(savepic%,4,21) stext=stextpic:ft=&FF9 � stext=stextpic:ft=&AFF
� drive%=1 �
$ș "Wimp_GetPointerInfo",,mblock
<win=mblock!12:icon=mblock!16:xout=!mblock:yout=mblock!4:
*Pmblock!20=mblock!12:mblock!24=mblock!16:mblock!28=!mblock:mblock!32=mblock!4
47mblock!12=0:mblock!16=1:mblock!36=1024:mblock!40=ft
>$stext=$�info(winsave%,2)
H$stext=�getleaf($stext)
R)� I=0 � 255:� I?stext<32 � I?stext=13
\�
f !mblock=44+4*(1+(�$stext)�4)
p+$(mblock+44)=�bit($stext)+�0:!mblock=60
zBș "Wimp_SendMessage",17,mblock,mblock!20,mblock!24:� DataSave
�drag%=�
��
��
�
�
��defsave
� �Mode
�)� winsave%=savedraw% � ft$="file_AFF"
�%� winsave%=save% � ft$="file_00C"
�S� winsave%=savepic% � �checkflag(savepic%,4,21) ft$="file_FF9" � ft$="file_AFF"
�!block=winsave%
�#ș "Wimp_GetWindowState",,block
�ysize%=block!16-block!8
�#x%=block!4:y%=block!8:block!4=1
ș"Wimp_GetIconState",,block
#block!8+=x%:block!12+=y%+ysize%
$block!16+=x%:block!20+=y%+ysize%
$5block!24=0:block!28=0:block!32=xmax:block!36=ymax
.'!block=0:block!4=5:drag%=�:drive%=1
8U� daspr � ș"DragASprite_Start",%10000101,1,ft$,block+8 � ș"Wimp_DragBox",,block
B�
L
V
��Mode
`M!block=130:block!4=131:block!8=-1:ș"OS_ReadVduVariables",block,block+128
j)ș"OS_ReadModeVariable",�,4 � ,,Xeig%
t)ș"OS_ReadModeVariable",�,5 � ,,Yeig%
~=xmax=((block!128)+1)*2^Xeig%:ymax=((block!132)+1)*2^Yeig%
��
�
�ݤgetleaf(leaf$)
�ȕ �leaf$,".")
�leaf$=�leaf$,�leaf$,".")+1)
��:=leaf$
�
���save(save$)
� �save$,".")<1 � �save$,":")<1 � save$<>"<Wimp$Scrap>" � �query("To save, drag the save icon to a directory viewer"):nosave=�:�
�� winsave%=save% � �mess("Sorry, this version is unable to save. Register for full version. See Help file for further details")
�� winsave%=savedraw% � �mess("Sorry, this version is unable to save. Register for full version. See Help file for further details")
�"� winsave%=savepic% � �savepic
�
��savepic
� �
(^� � � � �=71622:�query("Disc Full"):full=�:� �:�:� � �:�error(�$+" : at line "+Þ):�#ile:�
2"SSpr=�checkflag(savepic%,4,21)
<� SSpr �
F2ș"OS_File",0,save$,0,0,spr%+4,spr%+(sprlen+4)
Pș"OS_File",&12,save$,&ff9
Z�
d� � SSpr �
n3ș"OS_File",0,save$,0,0,drawptr%,drawptr%+drawk
xș"OS_File",&12,save$,&AFF
��
�3� save$<>"<Wimp$Scrap>" �info(savepic%,2,save$)
��
�
���dragin
�� itempull � �resizeitem
�� itemdrag � �dropitem
�� drag% � �out
��
�
���messagein
�mblock=block
�ref=mblock!8:task=mblock!4
Ȏ mblock!16 �
� 8:
� � savef �
"5� (mblock!20 � (1<<0))>0 � quiting=� � shutdown=�
,� quiting � �0,0)"Quit"
6!� shutdown � �1,1)"Shutdown"
@Amblock!12=mblock!8:ș"Wimp_SendMessage",19,mblock:�areyousure
J�
T� 0:�end
^� 2:
h� drive%=1 �
r�save(�wool(mblock+44))
|mblock!12=ref
�mblock!16=3
�mblock!36=-1
�!mblock=256
�sendm=&400E7
�&ș sendm,18,mblock,task:� DataLoad
��
�� 3:
̄� mblock!40<>&0CD � mblock!40<>&FF9 � mblock!40<>&AFF � �mess("Only Stationer Data files or Sprites can be dropped into here"):�
�in=�
�@�close(colour%):�close(type%):�close(back%):�close(picture%)
�!� mblock!40=&FF9 � �insprites
�� mblock!40=&AFF � �indraw
�-� mblock!40=&0CD � �load(�wool(block+44))
� 5:
� block!40=&0CD �
block!12=block!8:block!16=4
&sendm=&400E7
0+ș sendm,18,block,block!4:� DataLoadAck
:�load(�wool(block+44))
D�
N�
X�
b
l��load(load$)
v!ș"OS_Find",&40,load$ � file%
� t$=""
�t$=�readfile
�b� t$<>"Stationer Data File" � �mess("This is not a Stationer data file"):ș"OS_Find",0,file%:�
��deleteall
�9� �readfile="Sprites" � sprites=�:sprlen=�(�readfile)
�8� �readfile="Drawing" � drawing=�:drawk=�(�readfile)
�&ș"OS_GBPB",4,file%,workblk,8*1024
�S� sprites � spr%=(�claim(sprlen+256)):ș"OS_GBPB",4,file%,spr%+4,sprlen:�sprmen
�O� drawing � drawptr%=(�claim(drawk+256)):ș"OS_GBPB",4,file%,drawptr%,drawk
�ș"OS_Find",0,file%
�$�info(save%,2)=load$
� � noic=0 savef=�:�titles("")
�2�redraw(card%):�redraw(comp%):�redraw(letter%)
,� load$<>"<Stat$Dir>.DefaultDt" �opendet
�
ݤreadfile
*
t$=""
4 �
> ș"OS_BGet",,file% � byte%
H8 � byte%=254 ș"OS_Find",0,file%:�openwin(details%):
R t$=t$+�(byte%)
\ � byte%=13 � byte%=10
f =�t$,�(t$)-1)
p��insprites
z load$=�wool(block+44)
�� sprites � �delete(1)
�%ș "OS_File",5,load$ � ,,,,sprlen
�spr%=�claim(sprlen+256)
�!ș "OS_File",&FF,load$,spr%+4
��sprmen
�
sprites=�
�
� i=0 � 2
�ptr=detptr+(desblk*i)
�4� workblk?(ptr+5)=1 � $(workblk+(ptr+6))=curspr$
��
��redraw(card%)
��redraw(letter%)
��redraw(comp%)
�
��sprmen
$men$="":largest=0
.,ș "OS_SpriteOp",&108,spr% � ,,,sprites%
8� i%=0 � sprites%-1
B9 ș "OS_SpriteOp",256+13,spr%,temp%,&100,i%+1 � ,,,j%
L temp%?j%=13
V[ � �$temp%,",")>0 � ș"OS_SpriteOp",256+26,spr%,$temp%,"No"+�(i%+1):$temp%="No"+�(i%+1)
`) � �(men$)<243 � men$=men$+$temp%+","
j � i%=0 � defspr$=$temp%
t* � �($temp%)>largest largest=�($temp%)
~�
�men$=�men$,�(men$)-1)
�curspr$=�men$,�men$,",")-1)
��
�
���indraw
�load$=�wool(block+44)
�� drawing � �delete(2)
�#ș"OS_File",5,load$ � ,,,,drawk
�drawptr%=�claim(drawk+256)
�"ș"OS_File",&FF,load$,drawptr%
�
drawing=�
��
��openwin(handle%)
!block=handle%
"ș"Wimp_GetWindowState",,block
(open=block!32 � (1<<16)
2Q� block!28<>-1 � open=0 � (handle%=card% � handle%=comp% � handle%=letter%) �
<block!28=-1
Fș"Wimp_OpenWindow",,block
P�
Z�
d
n��opencen(handle%)
x �Mode
�!block=handle%
�!ș"Wimp_GetWindowInfo",,block
�workx%=block!12-block!4
�worky%=block!16-block!8
�block!4=(xmax-workx%)/2
�block!12=workx%+block!4
�block!8=(ymax-worky%)/2
�block!16=worky%+block!8
�block!28=-1
�ș"Wimp_OpenWindow",,block
��
�
�
��fmenucr
$ș"Font_ListFonts",,temp%,0,&100
deffont$=$temp%
fflag%=0
"fflag%+=1<<19
,fflag%+=0<<20
61ș"Font_ListFonts",,0,fflag%,,0 � r,s,t,A,u,B
@� fmenu% A,fbuf% B
J1ș"Font_ListFonts",,fmenu%,fflag%,A,fbuf%,B,1
T�
^
hݤMax(a%,b%)
r� a%>b% � =a%
|=b%
�
�ݤInfo(p%)
�� a$
� a$=""
�ȕ (?p%<>0 � ?p%<>13)
� a$+=�(?p%)
�
p%+=1
��
�=a$
�
�
��opendet
�!block=details%
�"ș"Wimp_GetWindowState",,block
open=block!32 � (1<<16)
� open=0 �
#$�info(details%,0)=$(workblk+0)
&%$�info(details%,1)=$(workblk+256)
0%$�info(details%,6)=$(workblk+512)
:%$�info(details%,7)=$(workblk+768)
D&$�info(details%,8)=$(workblk+1024)
N&$�info(details%,2)=$(workblk+1280)
X&$�info(details%,3)=$(workblk+1536)
b&$�info(details%,4)=$(workblk+1792)
l&$�info(details%,5)=$(workblk+2048)
v�
��openwin(details%)
��
�
���setdet
�#$(workblk+0)=$�info(details%,0)
�%$(workblk+256)=$�info(details%,1)
�%$(workblk+512)=$�info(details%,6)
�%$(workblk+768)=$�info(details%,7)
�&$(workblk+1024)=$�info(details%,8)
�&$(workblk+1280)=$�info(details%,2)
�&$(workblk+1536)=$�info(details%,3)
�&$(workblk+1792)=$�info(details%,4)
�&$(workblk+2048)=$�info(details%,5)
� design=0 � 2
&aptr=detptr+(desblk*design)+deslen
� i=0 � 4
ptr=aptr+(style*i)
*font$=$(workblk+ptr)
4pt=workblk!(ptr+256)
>width=workblk!(ptr+260)
H,�bbox($(workblk+(i*256)),font$,pt,width)
R,workblk!(ptr+278)=workblk!(ptr+270)+bbx1
\,workblk!(ptr+282)=workblk!(ptr+274)-bby1
fworkblk!(ptr+286)=bbx
pworkblk!(ptr+290)=bby
z� i
�ptr=aptr+(style*5)
�font$=$(workblk+ptr)
�pt=workblk!(ptr+256)
�width=workblk!(ptr+260)
�,�bbox($(workblk+(5*256)),font$,pt,width)
�bbxm=bbx
�,�bbox($(workblk+(6*256)),font$,pt,width)
�� bbx>bbxm � bbxm=bbx
�,�bbox($(workblk+(7*256)),font$,pt,width)
�� bbx>bbxm � bbxm=bbx
�,�bbox($(workblk+(8*256)),font$,pt,width)
�� bbx>bbxm � bbxm=bbx
�"�bbox("WFMgjq",font$,pt,width)
,workblk!(ptr+278)=workblk!(ptr+270)+bbx1
,workblk!(ptr+282)=workblk!(ptr+274)-bby1
workblk!(ptr+286)=bbxm
$workblk!(ptr+290)=bby
.� design
8
select=-1
B�redraw(card%)
L�redraw(comp%)
V�redraw(letter%)
`�
j
t��resetdet
~
� i=0 � 8
��info(details%,i,"")
��
��
�
���redraw(handle)
� block!0=handle
�
�more%
�)ș "Wimp_RedrawWindow",,block � more%
�ȕ more%
� Ȏ handle �
� � card% : �redrawcard
� � comp% : �redrawcomp
� letter% : �redrawlett
� colour% : �redrawcol
� picture% : �redrawpic
� type% : �redrawtype
( � back% : �redrawback
2 �
<* ș "Wimp_GetRectangle",,block � more%
F�
P%� close=1 � �close(card%):close=0
Z�
d
n��redrawcard
xș"OS_Byte",113,2
�ș"OS_Byte",112,1
�workx%=block!4-block!20
�worky%=block!16-block!24
�xmin=block!28-workx%
�xmax=block!36-workx%
�ymin=block!32-worky%
�ymax=block!40-worky%
�&�drawdesign(workx%,worky%,0,card%)
��
�
���redrawcomp
�workx%=block!4-block!20
�worky%=block!16-block!24
xmin=block!28-workx%
xmax=block!36-workx%
ymin=block!32-worky%
"ymax=block!40-worky%
,&�drawdesign(workx%,worky%,1,comp%)
6�
@
J��redrawlett
Tworkx%=block!4-block!20
^worky%=block!16-block!24
hxmin=block!28-workx%
rxmax=block!36-workx%
|ymin=block!32-worky%
�ymax=block!40-worky%
�(�drawdesign(workx%,worky%,2,letter%)
��
�
���redrawtype
�workx%=block!4-block!20
�worky%=block!16-block!24
�.ș "ColourTrans_SetGCOL",InterHex,,,&100,0
�&ȓ Ȑ workx%+406,worky%-204,140,50
�'ș "ColourTrans_SetGCOL",0,,,&100,0
�#ȓ workx%+406,worky%-204,140,50
��
�
��redrawback
workx%=block!4-block!20
worky%=block!16-block!24
&.ș "ColourTrans_SetGCOL",InterHex,,,&100,0
0&ȓ Ȑ workx%+342,worky%-110,260,48
:'ș "ColourTrans_SetGCOL",0,,,&100,0
D#ȓ workx%+342,worky%-110,260,48
N�
X
b��redrawcol
lRED=(hex>>8)�&FF
vGREEN=(hex>>16)�&FF
�BLUE=(hex>>24)�&FF
�workx%=block!4-block!20
�worky%=block!16-block!24
�)ș "ColourTrans_SetGCOL",hex,,,&100,0
�&ȓ Ȑ workx%+234,worky%-247,175,48
�ș "Wimp_SetColour",1,1
�'ȓ Ȑ workx%+270,worky%-170,344,147
�/ș "ColourTrans_SetGCOL",&0000FF00,,,&100,0
�/ȓ Ȑ workx%+271,worky%-55,(RED/255)*344,32
�/ș "ColourTrans_SetGCOL",&00FF0000,,,&100,0
�2ȓ Ȑ workx%+271,worky%-111,(GREEN/255)*344,32
�/ș "ColourTrans_SetGCOL",&FF000000,,,&100,0
�1ȓ Ȑ workx%+271,worky%-167,(BLUE/255)*344,32
!'ș "ColourTrans_SetGCOL",0,,,&100,0
!#ȓ workx%+233,worky%-248,176,49
!"ȓ workx%+270,worky%-58,344,34
! #ȓ workx%+270,worky%-114,344,34
!*#ȓ workx%+270,worky%-170,344,34
!4�
!>
!H��redrawpic
!R workx%=block!4-block!20
!\ worky%=block!16-block!24
!fredraw=�
!pxmin=block!28-workx%
!zxmax=block!36-workx%
!�ymin=block!32-worky%
!�ymax=block!40-worky%
!�9redraw=�overlaps(16,-218,216,-18,xmin,ymin,xmax,ymax)
!�� redraw �
!�ptr=detptr+(desblk*design)
!�Red=workblk?(ptr+1)
!�Green=workblk?(ptr+2)
!�Blue=workblk?(ptr+3)
!�,InterHex=(Blue<<24)+(Green<<16)+(Red<<8)
!�.ș "ColourTrans_SetGCOL",InterHex,,,&100,0
!�&ȓ Ȑ workx%+16,worky%-218,200,200
!�5� �checkflag(picture%,5,21) � picpic=1 � picpic=2
!�� picpic=1 �
"4ș"Wimp_ReadPixTrans",&100,1,"sizeing",,,,scale%
" hpix=scale%!4:vpix=scale%!12
"boxw=100/hpix:boxh=100/vpix
"$�scale(100,100,curspr$)
".4ș &2E,256+40,spr%,curspr$ � A,B,C,w%,h%,D,mode%
"8>realx=w%*(scale%!0/scale%!8):realy=h%*(scale%!4/scale%!12)
"B/xmul=(boxw/realx)*100:ymul=(boxh/realy)*100
"L"Lock=�checkflag(picture%,1,21)
"V%Centred=�checkflag(picture%,2,21)
"`#Front=�checkflag(picture%,3,21)
"j"� Lock � xmul<ymul � ymul=xmul
"t"� Lock � xmul>ymul � xmul=ymul
"~�getpal(curspr$)
"�xoff=0:yoff=0
"�+newx=realx*xmul/100:newy=realy*ymul/100
"�;� Centred � xoff=(boxw-newx)*hpix:yoff=(boxh-newy)*vpix
"�xdiv=100:ydiv=100
"�ascale%!0=scale%!0*xmul:scale%!4=scale%!4*ymul:scale%!8=scale%!8*xdiv:scale%!12=scale%!12*ydiv
"�Qș &2E,256+52,spr%,curspr$,workx%+16+xoff,worky%-218+ yoff,8,scale%,PixTrans%
"��
"�� picpic=2 �
"�"Lock=�checkflag(picture%,1,21)
"�%Centred=�checkflag(picture%,2,21)
"�#Front=�checkflag(picture%,3,21)
"�Ricond!0=65536:icond!4=0:icond!8=0:icond!12=65536:icond!16=0*256:icond!20=0*256
# 3ș"DrawFile_BBox",0,drawptr%,drawk,icond,matrix
#
Awidth=(matrix!8-matrix!0)/256:height=(matrix!12-matrix!4)/256
#"xmul=200/width:ymul=200/height
#"� Lock � xmul<ymul � ymul=xmul
#("� Lock � xmul>ymul � xmul=ymul
#2$neww=width*xmul:newh=height*ymul
#<cxoff=0:cyoff=0
#F5� Centred � cxoff=(200-neww)/2:cyoff=(200-newh)/2
#P*icond!0=xmul*65536:icond!12=ymul*65536
#Z3ș"DrawFile_BBox",0,drawptr%,drawk,icond,matrix
#dAwidth=(matrix!8-matrix!0)/256:height=(matrix!12-matrix!4)/256
#n/xoff=(0-matrix!0/256):yoff=(0-matrix!4/256)
#x�icond!0=xmul*65536:icond!4=0:icond!8=0:icond!12=ymul*65536:icond!16=(workx%+16+xoff+cxoff)*256:icond!20=(worky%-218+yoff+cyoff)*256
#�2ș"DrawFile_Render",%00,drawptr%,drawk,icond,0
#�� 2
#��
#��
#��
#�
#�)��drawdesign(pxco,pyco,design,handle)
#�ptr=detptr+(desblk*design)
#�border=workblk?(ptr+0)
#�BRed=workblk?(ptr+1)
#�BGreen=workblk?(ptr+2)
#�BBlue=workblk?(ptr+3)
#�BTran=workblk?(ptr+4)
$pictype=workblk?(ptr+5)
$Front=workblk?(ptr+24)
$bx1=workblk!(ptr+28)
$"by1=workblk!(ptr+32)
$,bx2=workblk!(ptr+36)
$6by2=workblk!(ptr+40)
$@+BCol=(BBlue<<24)+(BGreen<<16)+(BRed<<8)
$JȎ border �
$T� 1:
$^*ș "ColourTrans_SetGCOL",BCol,,,&100,0
$h#ȓ Ȑ pxco+bx1,pyco-by1,bx2,by2
$r/ș "ColourTrans_SetGCOL",&00000000,,,&100,0
$| ȓ pxco+bx1,pyco-by1,bx2,by2
$�� 2:
$�*ș "ColourTrans_SetGCOL",BCol,,,&100,0
$�#ȓ Ȑ pxco+bx1,pyco-by1,bx2,by2
$�/ș "ColourTrans_SetGCOL",&00000000,,,&100,0
$� ȓ pxco+bx1,pyco-by1,bx2,by2
$�(ȓ pxco+bx1+2,pyco-by1+2,bx2-4,by2-4
$�� 3:
$�*ș "ColourTrans_SetGCOL",BCol,,,&100,0
$�#ȓ Ȑ pxco+bx1,pyco-by1,bx2,by2
$�/ș "ColourTrans_SetGCOL",&00000000,,,&100,0
$� ȓ pxco+bx1,pyco-by1,bx2,by2
$�(ȓ pxco+bx1+2,pyco-by1+2,bx2-4,by2-4
$�(ȓ pxco+bx1+4,pyco-by1+4,bx2-8,by2-8
%� 4:
%*ș "ColourTrans_SetGCOL",BCol,,,&100,0
%#ȓ Ȑ pxco+bx1,pyco-by1,bx2,by2
%&/ș "ColourTrans_SetGCOL",&00000000,,,&100,0
%0 ȓ pxco+bx1,pyco-by1,bx2,by2
%:(ȓ pxco+bx1+4,pyco-by1+4,bx2-8,by2-8
%D*ȓ pxco+bx1+6,pyco-by1+6,bx2-12,by2-12
%N� 5:
%X*ș "ColourTrans_SetGCOL",BCol,,,&100,0
%b#ȓ Ȑ pxco+bx1,pyco-by1,bx2,by2
%l/ș "ColourTrans_SetGCOL",&00000000,,,&100,0
%v ȓ pxco+bx1,pyco-by1,bx2,by2
%�(ȓ pxco+bx1+2,pyco-by1+2,bx2-4,by2-4
%�*ȓ pxco+bx1+6,pyco-by1+6,bx2-12,by2-12
%��
%�8� Front=0 � pictype=1 � �dessprite(pxco,pyco,design)
%�6� Front=0 � pictype=2 � �desdraw(pxco,pyco,design)
%� � item=0 � 5
%�& �drawitem(design,item,pxco,pyco)
%� �
%�8� Front=1 � pictype=1 � �dessprite(pxco,pyco,design)
%�6� Front=1 � pictype=2 � �desdraw(pxco,pyco,design)
%�"� select<>-1 � handle=curdes �
%�L x1=sx1:y1=0-sy1:x2=sx1+sx2:y2=0-sy1+sy2:a1=xmin:b1=ymin:a2=xmax:b2=ymax
%�. redraw=�overlaps(x1,y1,x2,y2,a1,b1,a2,b2)
& � redraw �
&/ ș"ColourTrans_SetGCOL",&0000FF00,,,&100,0
& � workx%+sx1,worky%-sy1
& � 23,6,&CC|
&* � 17,sx2,0
&4 � 17,0,sy2
&> � 17,0-sx2,0
&H � 17,0,0-sy2
&R �
&\�
&f�
&p
&z%��drawitem(design,item,pxco,pyco)
&�2ptr=detptr+(desblk*design)+deslen+(style*item)
&�hide=workblk?(ptr+294)
&�� hide=0 � �
&�redraw=�
&�FxPos=workblk!(ptr+270)
&�FyPos=workblk!(ptr+274)
&�Fx1=workblk!(ptr+278)
&�Fy1=workblk!(ptr+282)
&�Fx2=workblk!(ptr+286)
&�Fy2=workblk!(ptr+290)
&�u=workblk?(ptr+265)
&�� u=1 � line=4+4 � line=0
&�Px1=Fx1:y1=0-Fy1-line:x2=Fx1+Fx2:y2=0-Fy1+Fy2:a1=xmin:b1=ymin:a2=xmax:b2=ymax
'� item=5 � y2=Fy2*4+6*3
'-redraw=�overlaps(x1,y1,x2,y2,a1,b1,a2,b2)
'� redraw �
'$text$=$(workblk+item*256)
'.� item=5 �
'8"text2$=$(workblk+(item+1)*256)
'B"text3$=$(workblk+(item+2)*256)
'L"text4$=$(workblk+(item+3)*256)
'V�
'`font$=$(workblk+ptr)
'j/ș"XFont_FindFont",,font$,16,16,0,0 � fhnd%
't� fhnd%!0=523 �
'~:ș"XFont_FindFont",,"Trinity.Medium",16,16,0,0 � fhnd%
'�;� fhnd%!0=523 � font$=deffont$ � font$="Trinity.Medium"
'��
'�pt=workblk!(ptr+256)
'�w=workblk!(ptr+260)
'�j=workblk?(ptr+264)
'�FRed=workblk?(ptr+266)
'�FGreen=workblk?(ptr+267)
'�FBlue=workblk?(ptr+268)
'�FTran=workblk?(ptr+269)
'�+FCol=(FBlue<<24)+(FGreen<<16)+(FRed<<8)
'�x=�width(text$,font$,pt,w)
'�6ș "ColourTrans_SetFontColours",font%,BCol,FCol,14
( � item=5 �
(
jus=%10010
(
nFx=FxPos
(2� j=3 � jus=%10001:� pxco+FxPos+Fx2,pyco-FyPos
((#width=�width(text4$,font$,pt,w)
(2� j=2 nFx=FxPos+(Fx2-width)
(<!� j=1 nFx=FxPos+(Fx2-width)/2
(F2ș"Font_Paint",,text4$,jus,pxco+nFx,pyco-FyPos
(P#width=�width(text3$,font$,pt,w)
(Z� j=2 nFx=FxPos+(Fx2-width)
(d!� j=1 nFx=FxPos+(Fx2-width)/2
(n>ș"Font_Paint",,text3$,jus,pxco+nFx,pyco-FyPos+((Fy2+6)*1)
(x#width=�width(text2$,font$,pt,w)
(�� j=2 nFx=FxPos+(Fx2-width)
(�!� j=1 nFx=FxPos+(Fx2-width)/2
(�>ș"Font_Paint",,text2$,jus,pxco+nFx,pyco-FyPos+((Fy2+6)*2)
(�"width=�width(text$,font$,pt,w)
(�� j=2 nFx=FxPos+(Fx2-width)
(�!� j=1 nFx=FxPos+(Fx2-width)/2
(�=ș"Font_Paint",,text$,jus,pxco+nFx,pyco-FyPos+((Fy2+6)*3)
(��
(�6ș"Font_Paint",,text$,%10010,pxco+FxPos,pyco-FyPos
(��
(�� u=1 �
(�*ș "ColourTrans_SetGCOL",FCol,,,&100,0
(�"ȓ Ȑ pxco+Fx1,pyco-Fy1-4,x,-4
)�
)�
)�
)"
),'ݤoverlaps(x1,y1,x2,y2,a1,b1,a2,b2)
)6interx=�:intery=�
)@"� (x1>=a1 � x1<=a2) � interx=�
)J"� (x2>=a1 � x2<=a2) � interx=�
)T"� (a1>=x1 � a1<=x2) � interx=�
)^"� (a2>=x1 � a2<=x2) � interx=�
)h"� (y1>=b1 � y1<=b2) � intery=�
)r"� (y2>=b1 � y2<=b2) � intery=�
)|"� (b1>=y1 � b1<=y2) � intery=�
)�"� (b2>=y1 � b2<=y2) � intery=�
)�� interx � intery � =�
)�=�
)�
)�!��dessprite(cxco,cyco,design)
)�redraw=�
)�ptr=detptr+(desblk*design)
)�Spx1=workblk!(ptr+44)
)�Spy1=workblk!(ptr+48)
)�Spx2=workblk!(ptr+52)
)�Spy2=workblk!(ptr+56)
)�Qx1=Spx1:y1=0-Spy1:x2=Spx1+Spx2:y2=0-Spy1+Spy2:a1=xmin:b1=ymin:a2=xmax:b2=ymax
)�-redraw=�overlaps(x1,y1,x2,y2,a1,b1,a2,b2)
*� sprites � redraw �
*curspr$=$(workblk+(ptr+6))
*Lock=workblk?(ptr+22)
*&Centred=workblk?(ptr+23)
*0Front=workblk?(ptr+24)
*:4ș"Wimp_ReadPixTrans",&100,1,"sizeing",,,,scale%
*D hpix=scale%!4:vpix=scale%!12
*N!Spx2=Spx2/hpix:Spy2=Spy2/vpix
*X1ș &2E,256+40,spr%,curspr$ � ,,,w%,h%,D,mode%
*b�scale(Spx2,Spy2,curspr$)
*l�getpal(curspr$)
*v<newx=w%*(scale%!0/scale%!8):newy=h%*(scale%!4/scale%!12)
*�5xmul=((Spx2/2)/newx)*100:ymul=((Spy2/2)/newy)*100
*�xoff=0:yoff=0
*�Axoff1=(w%*xmul*scale%!0*2)/100:yoff1=(h%*ymul*scale%!4*2)/100
*�$� Lock=1 � xmul<ymul � ymul=xmul
*�$� Lock=1 � xmul>ymul � xmul=ymul
*�� Centred=1 �
*�Axoff2=(w%*xmul*scale%!0*2)/100:yoff2=(h%*ymul*scale%!4*2)/100
*�7xoff=(xoff1-xoff2)/2*hpix:yoff=(yoff1-yoff2)/2*vpix
*��
*�xdiv=100:ydiv=100
*�ascale%!0=scale%!0*xmul:scale%!4=scale%!4*ymul:scale%!8=scale%!8*xdiv:scale%!12=scale%!12*ydiv
*�Oș &2E,256+52,spr%,curspr$,cxco+Spx1+xoff,cyco-Spy1+yoff,8,scale%,PixTrans%
*��
+�
+
+��desdraw(cxco,cyco,design)
+ redraw=�
+*ptr=detptr+(desblk*design)
+4Spx1=workblk!(ptr+44)
+>Spy1=workblk!(ptr+48)
+HSpx2=workblk!(ptr+52)
+RSpy2=workblk!(ptr+56)
+\Qx1=Spx1:y1=0-Spy1:x2=Spx1+Spx2:y2=0-Spy1+Spy2:a1=xmin:b1=ymin:a2=xmax:b2=ymax
+f-redraw=�overlaps(x1,y1,x2,y2,a1,b1,a2,b2)
+p� drawing � redraw �
+zLock=workblk?(ptr+22)
+�Centred=workblk?(ptr+23)
+�Front=workblk?(ptr+24)
+�Ricond!0=65536:icond!4=0:icond!8=0:icond!12=65536:icond!16=0*256:icond!20=0*256
+�3ș"DrawFile_BBox",0,drawptr%,drawk,icond,matrix
+�Awidth=(matrix!8-matrix!0)/256:height=(matrix!12-matrix!4)/256
+�$xmul=Spx2/width:ymul=Spy2/height
+�xoff=0:yoff=0
+�&xoff1=xmul*width:yoff1=ymul*height
+�"� Lock � xmul<ymul � ymul=xmul
+�"� Lock � xmul>ymul � xmul=ymul
+�� Centred=1 �
+�&xoff2=xmul*width:yoff2=ymul*height
+�-xoff=(xoff1-xoff2)/2:yoff=(yoff1-yoff2)/2
,�
,*icond!0=xmul*65536:icond!12=ymul*65536
,3ș"DrawFile_BBox",0,drawptr%,drawk,icond,matrix
,$Awidth=(matrix!8-matrix!0)/256:height=(matrix!12-matrix!4)/256
,.3bbxoff=(0-matrix!0/256):bbyoff=(0-matrix!4/256)
,8�icond!0=xmul*65536:icond!4=0:icond!8=0:icond!12=ymul*65536:icond!16=(cxco+Spx1+bbxoff+xoff)*256:icond!20=(cyco-Spy1+bbyoff+yoff)*256
,B2ș"DrawFile_Render",%00,drawptr%,drawk,icond,0
,L�
,V�
,`
,j��scale(spw,sph,workspr$)
,t?ș"Wimp_ReadPixTrans",&100,spr%,workspr$,,,,scale%,palette%
,~�
,�
,���getpal(workspr$)
,�3ș "OS_SpriteOp",256+24,spr%,workspr$ � ,,sptr%
,�7ș "OS_SpriteOp",256+40,spr%,workspr$ � ,,,,,,mode%
,�9ș "OS_SpriteOp",256+37,spr%,workspr$,-1 � ,,,palsize
,�/ș "OS_ReadModeVariable",mode%,9 � ,,BitsPP
,�BitsPP=2^BitsPP
,�� sptr%!32<>44 �
,� � I%=0 � sptr%!32-52 � 8
,�" palette%!(I%/2)=sptr%!(I%+44)
,� �
,��
- � sptr%!32<>44 �
-
� sptr%!32<>44+2048 �
-@ ș "ColourTrans_SelectTable",mode%,palette%,-1,-1,PixTrans%
- �
-( � Q%=0�255
-2U ș "ColourTrans_ReturnColourNumberForMode",palette%!(Q%<<2),-1,-1 � PixTrans%?Q%
-< �
-F �
-P�
-Z � BitsPP<8 �
-d? ș "ColourTrans_SelectTable",mode%,defpal%,-1,-1,PixTrans%
-n �
-x: ș "ColourTrans_SelectTable",mode%,-1,-1,-1,PixTrans%
-� �
-��
-��
-�
-���bbox(text$,font$,xs,ys)
-�@ș "Font_FindFont",,font$,(xs*(ys/100))*16,xs*16,0,0 � font%
-�ș "Font_SetFont",font%
-�6ș "Font_StringBBox",,text$ � ,bbx1,bby1,bbx2,bby2
-�Fș "Font_StringWidth",,text$,&FFFFFF,&FFFFFFFF,-1,�(text$) � ,,x,y
-�1ș "Font_ConverttoOS",,bbx1,bby1 � ,bbx1,bby1
-�1ș "Font_ConverttoOS",,bbx2,bby2 � ,bbx2,bby2
-�bbx=bbx2-bbx1:bby=bby2-bby1
-��
.
.ݤwidth(text$,font$,xs,ys)
.@ș "Font_FindFont",,font$,(xs*(ys/100))*16,xs*16,0,0 � font%
."ș "Font_SetFont",font%
.,Fș "Font_StringWidth",,text$,&FFFFFF,&FFFFFF,31,�(text$) � ,,x%,y%
.6'ș "Font_ConverttoOS",,x%,y% � ,x,y
.@=x
.J
.T��close(!block)
.^ș"Wimp_CloseWindow",,block
.h�
.r
.|ݤcheckit(hnd%,ic%)
.�!icond=hnd%:icond!4=ic%
.� ș"Wimp_GetIconState",,icond
.�flags%=icond!24
.�=flags%�&F0000
.�
.���getstyle
.�changedes=block!12
.�mx=block!0:my=block!4
.�Ȏ changedes �
.�� card% : design=0
.�� comp% : design=1
.�� letter% : design=2
.��
/change=select
/� change>-1 �
/� change>=0 � change<=5 �
/&4ptr=detptr+(desblk*design)+deslen+(style*change)
/0font$=$(workblk+ptr)
/:pt=workblk!(ptr+256)
/Dwidth=workblk!(ptr+260)
/Nj=workblk?(ptr+264)
/Xu=workblk?(ptr+265)
/bColR=workblk?(ptr+266)
/lColG=workblk?(ptr+267)
/vColB=workblk?(ptr+268)
/�ColT=workblk?(ptr+269)
/�hide=workblk?(ptr+294)
/�,InterHex=(ColB<<24)+(ColG<<16)+(ColR<<8)
/�$�info(type%,0)=font$
/�$�info(type%,3)=�pt
/�$�info(type%,8)=�width
/�%�seticstate(type%,18,1<<21,1<<21)
/�0� hide=0 � �seticstate(type%,18,1<<21,0<<21)
/�M� change>=0 � change<=4 � a=1<<22:b=1<<22:c=1<<21:d=0<<21:e=1<<22:f=0<<22
/�@� change=5 � a=1<<22:b=0<<22:c=1<<21:d=0<<21:e=1<<22:f=1<<22
/��seticstate(type%,10,a,b)
/��seticstate(type%,11,a,b)
/��seticstate(type%,12,a,b)
0�seticstate(type%,13,a,b)
0�seticstate(type%,10,c,d)
0�seticstate(type%,11,c,d)
0 �seticstate(type%,12,c,d)
0*�seticstate(type%,13,c,d)
04%�seticstate(type%,14,1<<21,0<<21)
0>�seticstate(type%,14,e,f)
0H�openwin(type%)
0R4� change=5 � �seticstate(type%,10+j,1<<21,1<<21)
0\-� u=1 � �seticstate(type%,14,1<<21,1<<21)
0f�
0p� change=6 �
0zptr=detptr+(desblk*design)
0�pic=workblk?(ptr+5)
0�'�seticstate(picture%,1,1<<21,0<<21)
0�'�seticstate(picture%,2,1<<21,0<<21)
0�'�seticstate(picture%,3,1<<21,0<<21)
0�Lock=workblk?(ptr+22)
0�Centre=workblk?(ptr+23)
0�Front=workblk?(ptr+24)
0�(� pic=1 � curspr$=$(workblk+(ptr+6))
0�.� Lock �seticstate(picture%,1,1<<21,1<<21)
0�0� Centre �seticstate(picture%,2,1<<21,1<<21)
0�/� Front �seticstate(picture%,3,1<<21,1<<21)
0�'�seticstate(picture%,5,1<<22,0<<22)
0�'�seticstate(picture%,4,1<<22,0<<22)
1'�seticstate(picture%,6,1<<22,0<<22)
1U� pic=1 � �seticstate(picture%,5,1<<21,1<<21):�seticstate(picture%,6,1<<21,0<<21)
1U� pic=2 � �seticstate(picture%,6,1<<21,1<<21):�seticstate(picture%,5,1<<21,0<<21)
1$Y� � sprites � �seticstate(picture%,5,1<<22,1<<22):�seticstate(picture%,4,1<<22,1<<22)
1.5� � drawing � �seticstate(picture%,6,1<<22,1<<22)
18�openwin(picture%)
1B�
1L�
1V� change=-1 �
1`ptr=detptr+(desblk*design)
1jborder=workblk?(ptr)
1tColR=workblk?(ptr+1)
1~ColG=workblk?(ptr+2)
1�ColB=workblk?(ptr+3)
1�ColT=workblk?(ptr+4)
1�,InterHex=(ColB<<24)+(ColG<<16)+(ColR<<8)
1�� i=2 � 10 � 2
1�V� border=i/2 � �seticstate(back%,i,1<<21,1<<21):� �seticstate(back%,i,1<<21,0<<21)
1��
1�V� border=0 � �seticstate(back%,11,1<<21,1<<21):� �seticstate(back%,11,1<<21,0<<21)
1��openwin(back%)
1��
1��
1�
1���applystyle
2 � change>-1 �
2
� change>=0 � change<=5 �
24ptr=detptr+(desblk*design)+deslen+(style*change)
2font$=$�info(type%,0)
2(pt=�($�info(type%,3))
22width=�($�info(type%,8))
2<$(workblk+ptr)=font$
2Fworkblk!(ptr+256)=pt
2Pworkblk!(ptr+260)=width
2Z)workblk?(ptr+266)=(InterHex>>8) � &FF
2d*workblk?(ptr+267)=(InterHex>>16) � &FF
2n*workblk?(ptr+268)=(InterHex>>24) � &FF
2xj=0:u=0
2�#� �checkflag(type%,10,21) � j=0
2�#� �checkflag(type%,11,21) � j=1
2�#� �checkflag(type%,12,21) � j=2
2�#� �checkflag(type%,13,21) � j=3
2�#� �checkflag(type%,14,21) � u=1
2�9� �checkflag(type%,18,21) � hide=1 � hide=0:select=-1
2�workblk?(ptr+264)=j
2�workblk?(ptr+265)=u
2�workblk?(ptr+294)=hide
2� � change>=0 � change<=4 �
2�2 �bbox($(workblk+(change*256)),font$,pt,width)
2�- workblk!(ptr+278)=workblk!(ptr+270)+bbx1
2�- workblk!(ptr+282)=workblk!(ptr+274)-bby1
3 workblk!(ptr+286)=bbx
3 workblk!(ptr+290)=bby
3 ax=sx2:by=sy2
3" sx2=bbx:sy2=bby
3, �
36 � change=5 �
3@- �bbox($(workblk+(5*256)),font$,pt,width)
3J
bbxm=bbx
3T- �bbox($(workblk+(6*256)),font$,pt,width)
3^ � bbx>bbxm � bbxm=bbx
3h- �bbox($(workblk+(7*256)),font$,pt,width)
3r � bbx>bbxm � bbxm=bbx
3|- �bbox($(workblk+(8*256)),font$,pt,width)
3� � bbx>bbxm � bbxm=bbx
3�# �bbox("WFMgjq",font$,pt,width)
3�- workblk!(ptr+278)=workblk!(ptr+270)+bbx1
3�- workblk!(ptr+282)=workblk!(ptr+274)-bby1
3� workblk!(ptr+286)=bbxm
3� workblk!(ptr+290)=bby
3� ax=sx2:by=sy2
3� sx2=bbxm:sy2=bby*4+6*3
3� �
3�� ax>sx2 � ax=ax � ax=sx2
3�� by>sy2 � by=by � by=sy2
3�Bș"Wimp_ForceRedraw",changedes,sx1,0-sy1-8,sx1+ax+2,0-sy1+by+2
3��
4� change=6 �
4ptr=detptr+(desblk*design)
4"sord=�checkflag(picture%,5,21)
4&"Lock=�checkflag(picture%,1,21)
40%Centred=�checkflag(picture%,2,21)
4:#Front=�checkflag(picture%,3,21)
4D2� sord � workblk?(ptr+5)=1 � workblk?(ptr+5)=2
4N2� Lock workblk?(ptr+22)=1 � workblk?(ptr+22)=0
4X5� Centred workblk?(ptr+23)=1 � workblk?(ptr+23)=0
4b3� Front workblk?(ptr+24)=1 � workblk?(ptr+24)=0
4l$(workblk+(ptr+6))=curspr$
4vBș"Wimp_ForceRedraw",changedes,sx1,0-sy1,sx1+sx2+2,0-sy1+sy2+2
4��
4��
4�� change=-1 �
4�ptr=detptr+(desblk*design)
4�%workblk?(ptr+1)=(InterHex>>8)�&FF
4�&workblk?(ptr+2)=(InterHex>>16)�&FF
4�&workblk?(ptr+3)=(InterHex>>24)�&FF
4�� i=2 � 10 � 2
4�0� �checkflag(back%,i,21) � workblk?(ptr)=i/2
4��
4�/� �checkflag(back%,11,21) � workblk?(ptr)=0
4��redraw(changedes)
4��
5� change=-2 �
5ptr=detptr+(desblk*design)
5"sord=�checkflag(picture%,5,21)
5 "Lock=�checkflag(picture%,1,21)
5*%Centred=�checkflag(picture%,2,21)
54#Front=�checkflag(picture%,3,21)
5>oldsord=workblk?(ptr+5)
5H2� sord � workblk?(ptr+5)=1 � workblk?(ptr+5)=2
5R2� Lock workblk?(ptr+22)=1 � workblk?(ptr+22)=0
5\5� Centred workblk?(ptr+23)=1 � workblk?(ptr+23)=0
5f3� Front workblk?(ptr+24)=1 � workblk?(ptr+24)=0
5pworkblk!(ptr+44)=350
5zworkblk!(ptr+48)=300
5�workblk!(ptr+52)=200
5�workblk!(ptr+56)=200
5�'� sord � $(workblk+(ptr+6))=curspr$
5�� select=6 � select=-1
5�!� oldsord>0 � �redraw(curdes)
5�9ș"Wimp_ForceRedraw",curdes,350,-300,350+200,-300+200
5��
5��
5�
5���showall(handle)
5�Ȏ handle �
5�� card% : design=0
5�� comp% : design=1
6� letter% : design=2
6�
6
� i=0 � 5
6$/ptr=detptr+(desblk*design)+deslen+(style*i)
6.workblk?(ptr+294)=1
68�
6B�redraw(handle)
6L�
6V
6`��remove(handle)
6jcurdes=handle
6tȎ curdes �
6~� card% : design=0
6�� comp% : design=1
6�� letter% : design=2
6��
6�ptr=detptr+(desblk*design)
6�oldsord=workblk?(ptr+5)
6�workblk?(ptr+5)=0
6�$(workblk+(ptr+6))=""
6�� select=6 � select=-1
6�!� oldsord>0 � �redraw(curdes)
6��
6�
6���insert(handle)
7 curdes=handle
7
Ȏ curdes �
7� card% : design=0
7� comp% : design=1
7(� letter% : design=2
72�
7<'�seticstate(picture%,1,1<<21,0<<21)
7F'�seticstate(picture%,2,1<<21,0<<21)
7P'�seticstate(picture%,3,1<<21,0<<21)
7Z'�seticstate(picture%,5,1<<21,0<<21)
7d'�seticstate(picture%,6,1<<21,0<<21)
7n'�seticstate(picture%,4,1<<22,0<<22)
7x'�seticstate(picture%,5,1<<22,0<<22)
7�'�seticstate(picture%,6,1<<22,0<<22)
7�Y� � sprites � �seticstate(picture%,5,1<<22,1<<22):�seticstate(picture%,4,1<<22,1<<22)
7�5� � drawing � �seticstate(picture%,6,1<<22,1<<22)
7�� sprites �
7�curspr$=defspr$
7�picpic=1
7�'�seticstate(picture%,5,1<<21,1<<21)
7��
7�picpic=2
7�'�seticstate(picture%,6,1<<21,1<<21)
7��
7��openwin(picture%)
7�
change=-2
8�
8
8
��swappic
8"button=block!16
8,8� button=5 � picpic=1:� curspr$="" � curspr$=defspr$
86� button=6 � picpic=2
8@�redopic
8J�
8T
8^
��redopic
8h0ș"Wimp_ForceRedraw",picture%,12,-222,222,12
8r�
8|
8���selectitem
8�curdes=block!12
8�mx=block!0:my=block!4
8�Ȏ curdes �
8�� card% : design=0
8�� comp% : design=1
8�� letter% : design=2
8��
8�!block=curdes
8�!ș"Wimp_GetWindowInfo",,block
8�workx%=block!4-block!20
8�worky%=block!16-block!24
8�xcoord=mx-workx%
9ycoord=my-worky%
9oldselect=select
95osx1=sx1:osy1=sy1:osx2=sx2:osy2=sy2:olddes=seldes
9&)sx1=-1:sy1=-1:sx2=-1:sxy=-1:select=-1
90I=0
9:�
9D0 ptr=detptr+(desblk*design)+deslen+(style*I)
9N hide=workblk?(ptr+294)
9X � hide=1 �
9b x1=workblk!(ptr+278):a1=x1
9l y1=workblk!(ptr+282):b1=y1
9v x2=workblk!(ptr+286):a2=x2
9� y2=workblk!(ptr+290):b2=y2
9� y1=0-y1:x2=x1+x2:y2=y1+y2
9�' � I=5 � y2=b2*4+6*3:b2=y2:y2=y1+y2
9�i � xcoord>x1 � ycoord>y1 � xcoord<x2 � ycoord<y2 � select=I:seldes=curdes:sx1=a1:sy1=b1:sx2=a2:sy2=b2
9� �
9� I+=1
9�� I=6 � select>-1
9�ptr=detptr+(desblk*design)
9�pictype=workblk?(ptr+5)
9�� select=-1 � pictype>0 �
9� x1=workblk!(ptr+44):a1=x1
9� y1=workblk!(ptr+48):b1=y1
9� x2=workblk!(ptr+52):a2=x2
: y2=workblk!(ptr+56):b2=y2
: y1=0-y1:x2=x1+x2:y2=y1+y2
:i � xcoord>x1 � ycoord>y1 � xcoord<x2 � ycoord<y2 � select=6:seldes=curdes:sx1=a1:sy1=b1:sx2=a2:sy2=b2
: �
:*H� (select<>-1 � select<>oldselect) � (seldes<>-1 � seldes<>olddes) �
:4Tblock!0=seldes:block!4=sx1:block!8=0-sy1:block!12=sx1+sx2+4:block!16=0-sy1+sy2+4
:>'ș"Wimp_UpdateWindow",,block � more
:Hȕ more
:R/ ș"ColourTrans_SetGCOL",&0000FF00,,,&100,0
:\ � workx%+sx1,worky%-sy1
:f � 23,6,&CC|
:p � 17,sx2,0
:z � 17,0,sy2
:� � 17,0-sx2,0
:� � 17,0,0-sy2
:�( ș"Wimp_GetRectangle",,block � more
:��
:��
:�K� (oldselect<>-1 � select<>oldselect) � (olddes<>-1 � olddes<>seldes) �
:�Zblock!0=olddes:block!4=osx1:block!8=0-osy1:block!12=osx1+osx2+4:block!16=0-osy1+osy2+4
:�'ș"Wimp_UpdateWindow",,block � more
:�ȕ more
:� aptr=detptr+(desblk*design)
:�F ColR=workblk?(aptr+1):ColG=workblk?(aptr+2):ColB=workblk?(aptr+3)
:�, backcol=(ColB<<24)+(ColG<<16)+(ColR<<8)
:�- ș"ColourTrans_SetGCOL",backcol,,,&100,0
;) ȓ workx%+osx1,worky%-osy1,osx2,osy2
;( ș"Wimp_GetRectangle",,block � more
;�
;$ � oldselect=6 �
;.A ș"Wimp_ForceRedraw",olddes,osx1,0-osy1,osx1+osx2+4,0-osy1+4
;8A ș"Wimp_ForceRedraw",olddes,osx1,0-osy1,osx1+4,0-osy1+osy2+4
;BK ș"Wimp_ForceRedraw",olddes,osx1,0-osy1+osy2,osx1+osx2+4,0-osy1+osy2+4
;LK ș"Wimp_ForceRedraw",olddes,osx1+osx2,0-osy1,osx1+osx2+4,0-osy1+osy2+4
;V �
;`F ș"Wimp_ForceRedraw",olddes,osx1,0-osy1,osx1+osx2+4,0-osy1+osy2+4
;j �
;t�
;~�
;�
;���dragitem
;�� select=-1 � �
;�mx=block!0:my=block!4
;�!block=seldes
;�Ȏ seldes �
;�� card% : design=0
;�� comp% : design=1
;�� letter% : design=2
;��
;�!ș"Wimp_GetWindowInfo",,block
;�-a=block!4:b=block!8:c=block!12:d=block!16
<