Home » Archimedes archive » Archimedes World » AW-1994-07-Disc1.adf » Disk1Jul94 » !AWJuly94/Goodies/CardNV/!Card2/!RunImage
!AWJuly94/Goodies/CardNV/!Card2/!RunImage
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
| Tape/disk: | Home » Archimedes archive » Archimedes World » AW-1994-07-Disc1.adf » Disk1Jul94 |
| Filename: | !AWJuly94/Goodies/CardNV/!Card2/!RunImage |
| Read OK: | ✔ |
| File size: | D4BC bytes |
| Load address: | 0000 |
| Exec address: | 0000 |
File contents
10ON ERROR PROCerror(REPORT$+" : at line "+STR$ERL):END
20REM ***>$.!Card2.!RunImage
30REM ***Main Program for !Card2 - Business Card creator
40REM Version 2.05 (17 April '94) - Debugged Version
50REM LEN J. Robbins
60DIM block 10*1024, mblock 1024, menu% 6*1024, curbuf% 5*1024, icond 5*1024, q% 1024, text% &1000
70maxlev%=32
80DIM start%(maxlev%),box%(maxlev%)
90DIM l%(maxlev%),b%(maxlev%),r%(maxlev%),t%(maxlev%)
100DIM hexc(4),defpal% 255
110DIM scal% 20,scalblok% 255,temp% 100,palette% 255,winpal(15),cardpos(16)
120DIM matrix 100, origin 100, box 100, box2 100
130FOR c=1 TO 16
140READ a
150cardpos(c)=a
160NEXT
170 hexc(0)=&FFFFFF00
180FOR I=0 TO 15
190READ hexa
200winpal(I)=hexa
210defpal%!(I*4)=hexa
220NEXT
230DATA 25,625,290,625,25,445,290,445,25,265,290,265,25,85,290,85
240DATA &FFFFFF10,&DDDDDD10,&BBBBBB10,&99999910,&77777710,&55555510,&33333310,&010
250DATA &99440010,&EEEE10,&CC0010,&DD10,&BBEEEE10,&885510,&BBFF10,&FFBB0010
260 end%=-1:textc=FALSE:cardb=FALSE:hex=0:RED=(hex>>8)AND&FF:BLUE=RED:GREEN=RED
270endbuf%=curbuf%+&6000
280picmenu3$="":picmenu2$="":picmenu$="":picmenu4$=""
290j=0:gee=0:geecus=0:family$="Trinity.Medium":fsize=12:in=FALSE:close=0:nono=0:ns=0:ni=0
300savef=TRUE:noprint=FALSE:printing=FALSE:quiting=FALSE:full=FALSE:prequit=FALSE:prequitwait=FALSE
310fmcreated%=FALSE:fcount%=0
320reinter=&81683
330SYS "Wimp_Initialise",200,&4B534154,"!Card2" TO version%,mytask%
340SYS "Wimp_ClaimInterface",mytask%
350end%=FALSE:drag%=0:drive%=0:sfile$="":Shear=TRUE:curspr$="":progneed=112*1024
360size%=48:font%=-1:family%=0:style%=-1:n_font%=1:noofcards=8:force=FALSE:centred=FALSE:boxit=TRUE:tile=FALSE
370PROCtemplate
380SYS "OS_GetEnv" TO env$
390IF INSTR(env$,"-quit") THEN
400I%=INSTR(env$,"""")
410I%=INSTR(env$,"""",I%+1)
420REPEAT
430I%+=1
440UNTIL MID$(env$,I%,1)<>" "
450env$=MID$(env$,I%)
460print$=RIGHT$(env$,7)
470noic=0
480SYS"Wimp_SlotSize",-1,-1 TO orig
490max=HIMEM-END:max=INT(max/1024)*1024
500max-=&4000
510REM PRINT TAB(0,0)max
520SYS"Wimp_SlotSize",-1,-1 TO current
530HIMEM=HIMEM-max:hsizeb=max:heap%=HIMEM
540IF hsizeb<0 THEN END
550SYS"OS_Heap",0,heap%,,hsizeb
560SYS"OS_Heap",2,heap%,,1024 TO ,,sppool%
570origheap=hsizeb
580IF print$=" -print" THEN env$=LEFT$(env$,LENenv$-7):noic=1
590IF print$=" -print" THEN PROCpresent:PROCload(env$):PROCopenwin(print%)
600IF print$<>" -print" AND env$<>"" PROCload(env$)
610IF noic=0 THEN initic=FNicon
620SYS"Hourglass_On"
630PROCfmenucr
640SYS"Hourglass_Off"
650PROCpollit
660DEFPROCpollit
670REPEAT
680 SYS"Wimp_Poll",0,block TO eventcode
690 SYS "Wimp_PollPointer",eventcode,,version%
700CASE eventcode OF
710WHEN 0:IF savef AND prequit SYS"Wimp_ProcessKey",&1FC
720WHEN 1:PROCredraw(block!0)
730WHEN 2:SYS "Wimp_OpenWindow",,block
740WHEN 3:SYS "Wimp_CloseWindow",,block
750IF noic=1 THEN SYSreinter,mytask%:SYS"Wimp_CloseDown"
760IF block!0=saved% AND prequit THEN prequit=FALSE
770WHEN 6:PROCclick(block)
780WHEN 7:PROCout
790WHEN 8:PROCprocess
800WHEN 9:PROCselect
810WHEN 17,18:PROCmessagein
820ENDCASE
830UNTIL FALSE
840ENDPROC
850END
860DEFFNicon
870!icond=-1
880icond!4=0
890icond!8=0:icond!12=68:icond!16=68
900icond!20=%11010+((2^12)*3):icond?23=112
910$(icond+24)="!Card2"+CHR$13
920SYS "Wimp_CreateIcon",,icond TO icon
930=icon
940DEFFNinf(handle,icon)
950PROCgee(handle,icon)
960=icond!28
970 DEFFNbit(a$)
980WHILE INSTR(a$,":")>0
990a$=MID$(a$,INSTR(a$,":")+1)
1000ENDWHILE
1010WHILE INSTR(a$,".")>0
1020a$=MID$(a$,INSTR(a$,".")+1)
1030ENDWHILE
1040=a$
1050DEFFNwool(wool%)
1060LOCAL cot$
1070 WHILE ?wool%>=32
1080cot$+=CHR$(?wool%)
1090wool%+=1
1100ENDWHILE
1110=cot$
1120DEFPROCtemplate
1130SYS"Wimp_OpenTemplate",,"<Card$Dir>.Templates"
1140indir=curbuf%
1150info%=FNtemplate("ProgInfo")
1160save%=FNtemplate("save")
1170card%=FNtemplate("Card")
1180details%=FNtemplate("details")
1190saved%=FNtemplate("savetext")
1200print%=FNtemplate("print")
1210colour%=FNtemplate("colours")
1220savepic%=FNtemplate("SavePIC")
1230query%=FNtemplate("query")
1240quit%=FNtemplate("quitbox")
1250SYS "Wimp_CloseTemplate"
1260stex=FNinfo(save%,1)
1270stexd=FNinfo(saved%,1)
1280stextpic=FNinfo(savepic%,1)
1290ENDPROC
1300DEFFNtemplate(a$)
1310SYS"Wimp_LoadTemplate",,block,indir,endbuf%,-1,a$,0 TO ,,indir,,,,c%
1320IF c%=0 THEN PROCmess("Template "+a$+" not found."):END
1330block!64=1
1340SYS"Wimp_CreateWindow",,block TO handle
1350=handle
1360DEFFNinfo(handle,icon)
1370PROCgee(handle,icon)
1380=icond!28
1390DEFPROCinfo(handle,icon,text$)
1400!block=handle:block!4=icon:SYS"Wimp_GetIconState",,block
1410$(block!28)=text$:block!36=LEN(text$)+1
1420block!8=0:block!12=0
1430SYS"Wimp_SetIconState",,block
1440ENDPROC
1450DEFPROCgee(handle,icon)
1460!icond=handle:icond!4=icon
1470SYS"Wimp_GetIconState",,icond
1480ENDPROC
1490DEFPROCpresent
1500a$=""
1510LOCAL ERROR
1520ON ERROR LOCAL a$="Not Present":RESTORE ERROR:ENDPROC
1530SYS"PDriver_Info" TO a,,,,name
1540WHILE ?name
1550a$=a$+CHR$(?name)
1560name+=1
1570ENDWHILE
1580$FNinfo(print%,0)=a$
1590RESTORE ERROR
1600ENDPROC
1610DEFPROCcmenus
1620PROCpresent
1630nogo=FALSE
1640gee=0
1650menuopen=-44
1660menuptr=menu%
1670MOUSE x,y,b
1680IF block!16=27 AND sfile$<>"" THEN HJK=TRUE ELSE HJK=FALSE
1690IF HJK sprmen%=FNmenu("Sprite List",(largest*14)+40,men$):gee=2
1700picmenu$="Force Scale,Centred"
1710IF centred AND picmenu$<>"{�}Centred" centred=TRUE
1720IF force picmenu4$="{�}Force Scale,"
1730IF NOT force picmenu4$="Force Scale,"
1740IF centred picmenu$="{�}Centred"
1750IF NOT centred picmenu$="Centred"
1760IF curspr$<>"" iconmenu$="{b|picmenu%}Picture" ELSE iconmenu$="{-|picmenu%}Picture"
1770picmenu%=FNmenu("Picture",190,"{_}Del Pic,{u|savepic%}Save Pic,"+picmenu4$+picmenu$)
1780savemenu%=FNmenu("Save",174,"{b|save%}Draw,{b|saved%}Data")
1790iconmenu%=FNmenu("!Card",174,"{b|info%}Info,{b|savemenu%}Save,{b|print%}Print,Details,View,"+iconmenu$+",Quit")
1800detmenu%=FNmenu("!Card",174,"{b|info%}Info,{b|savemenu%}Save,{b|print%}Print,View,"+iconmenu$+",Quit")
1810viewmenu%=FNmenu("!Card",174,"{b|info%}Info,{b|savemenu%}Save,{b|print%}Print,Details,Back Col,"+iconmenu$+",Quit")
1820CASE block!12 OF
1830WHEN -2:IF block!8=2 THEN openmenu%=iconmenu%:a=x-75:b=(7+2)*48
1840WHEN details%:IF HJK THEN openmenu%=sprmen%:a=x:b=y:ELSE openmenu%=detmenu%:a=x:b=y
1850WHEN card%:IF block!8=2 THEN openmenu%=viewmenu%:a=x:b=y
1860OTHERWISE:ENDPROC
1870ENDCASE
1880PROCopenmenu(a,b)
1890ENDPROC
1900DEFPROCopenmenu(x,y)
1910SYS"Wimp_CreateMenu",,openmenu%,x,y
1920ENDPROC
1930DEFFNmenu(tit$,wid,menu$)
1940menu$+=","
1950oldmenu=menuptr
1960$menuptr=tit$
1970menuptr?12=7
1980menuptr?13=2
1990menuptr?14=7
2000menuptr?15=0
2010menuptr!16=wid
2020menuptr!20=48
2030menuptr!24=0
2040menuptr+=28
2050REPEAT
2060PROCthing(menu$)
2070menu$=MID$(menu$,INSTR(menu$,",")+1)
2080menuptr+=24
2090UNTIL menu$=""
2100menuptr!-24=(menuptr!-24) OR %10000000
2110=oldmenu
2120DEFPROCthing(m$)
2130m$=LEFT$(m$,INSTR(m$,",")-1)
2140i$="":j$=""
2150IF INSTR(m$,"{")>0 THEN
2160i$=LEFT$(m$,INSTR(m$,"}")-1)
2170m$=MID$(m$,INSTR(m$,"}")+1)
2180j$=LEFT$(i$,INSTR(i$,"|")-1)
2190i$=MID$(i$,INSTR(i$,"|")+1)
2200ENDIF
2210ijack=&07000021
2220mjack=0
2230submenu=-1
2240IF INSTR(j$,"b")>0 THEN submenu=EVAL(i$)
2250IF INSTR(j$,"_")>0 THEN mjack=mjack OR 2
2260IF INSTR(j$,"�")>0 THEN mjack=mjack OR 1
2270IF INSTR(j$,"u")>0 THEN mjack=mjack OR 2:submenu=EVAL(i$)
2280IF INSTR(j$,"-")>0 THEN ijack=ijack OR &400000:submenu=EVAL(i$)
2290IF INSTR(j$,"s")>0 THEN ijack=ijack OR &400000
2300!menuptr=mjack
2310menuptr!4=submenu
2320menuptr!8=ijack
2330$(menuptr+12)=m$
2340ENDIF
2350ENDPROC
2360DEFPROCclick(block)
2370keepb%=block!12
2380IF FNcheckit(block!12,block!16)=983040 THEN
2390PROCslabin(keepb%):PROCslabout(keepb%)
2400ENDIF
2410IF quiting THEN quiting=FALSE:PROCclose(quit%)
2420IF block!12=card% AND block!8=4 io=0:hex=hexc(0):PROCsetper
2430IF block!12=-2 AND block!8=4 PROCopenwin(details%)
2440IF block!12=-2 AND block!8=1 PROCopenwin(card%)
2450IF block!12=details% AND block!8=2 THEN
2460IF block!16=3 OR block!16=2 OR block!16=4 OR block!16=19 THEN MOUSE x,y,b:gee=1:icy=block!16:SYS"Wimp_CreateMenu",,fmenu%,x-75,y:ENDPROC
2470ENDIF
2480IF block!8=2 THEN PROCcmenus:ENDPROC
2490IF block!12=details% THEN savef=FALSE:PROCtitle(details%,"")
2500IF block!12=save% AND block!16=2 winsave%=block!12:PROCdefsave
2510IF block!12=saved% AND block!16=2 winsave%=block!12:PROCdefsave
2520IF block!12=savepic% AND block!16=2 winsave%=block!12:PROCdefsave
2530IF block!12=save% AND block!16=0 winsave%=block!12:PROCsave($FNinfo(winsave%,1))
2540IF block!12=saved% AND block!16=0 winsave%=block!12:PROCsave($FNinfo(winsave%,1))
2550IF block!12=savepic% AND block!16=0 winsave%=block!12:PROCsave($FNinfo(winsave%,1))
2560IF block!12=details% AND block!16=22 io=1:hex=hexc(io):textc=TRUE:cardb=FALSE:PROCsetper
2570IF block!12=details% AND block!16=23 io=2:hex=hexc(io):textc=TRUE:cardb=FALSE:PROCsetper
2580IF block!12=details% AND block!16=24 io=3:hex=hexc(io):textc=TRUE:cardb=FALSE:PROCsetper
2590IF block!12=details% AND block!16=25 io=4:hex=hexc(io):textc=TRUE:cardb=FALSE:PROCsetper
2600IF block!12=details% AND block!16>28 AND block!16<31 PROCdrawsprite
2610IF block!12=colour% AND block!16>=14 AND block!16<=29 PROCselectcol(block!16)
2620IF block!12=colour% AND block!16=13 THEN PROCaddcol
2630IF block!12=colour% AND block!16=12 THEN PROCclose(colour%)
2640IF block!12=colour% AND block!16=-1 THEN PROCdragcol
2650IF block!12=colour% AND block!16>0 AND block!16<11 THEN PROCupanddown(block!16)
2660IF prequit THEN
2670IF block!12=quit% AND block!16=0 THEN SYS"Wimp_ProcessKey",&1FC:SYSreinter,mytask%:SYS"Wimp_CloseDown"
2680IF block!12=quit% AND block!16=2 THEN PROCclose(quit%):prequit=FALSE
2690IF block!12=quit% AND block!16=3 THEN PROCclose(quit%):PROCopenwin(saved%):prequitwait=TRUE
2700IF prequit AND NOT prequitwait prequit=FALSE
2710ELSE
2720IF block!12=quit% AND block!16=0 THEN SYSreinter,mytask%:SYS"Wimp_CloseDown":END
2730IF block!12=quit% AND block!16=2 THEN PROCclose(quit%)
2740IF block!12=quit% AND block!16=3 THEN PROCclose(quit%):PROCopenwin(saved%)
2750ENDIF
2760IF block!12=query% AND block!16=0 THEN PROCclose(query%):PROCendq
2770IF block!12=print% AND block!16=1 THEN
2780PROCprint
2790IF noic=1 THEN SYSreinter,mytask%:SYS"Wimp_CloseDown":END
2800ENDIF
2810IF block!12=print% AND block!16=5 THEN PROCmorecopies
2820IF block!12=print% AND block!16=3 THEN PROClesscopies
2830ENDPROC
2840DEFFNcheckflag(handle,icon,flag)
2850bit=FALSE
2860!icond=handle:icond!4=icon
2870SYS"Wimp_GetIconState",,icond
2880IF (icond!24AND(1<<flag))>0 bit=TRUE
2890=bit
2900DEFPROCsetshear(on)
2910!icond=details%:icond!4=29:SYS"Wimp_GetIconState",,icond
2920IF on=1 THEN
2930C=(1<<21):E=(1<<21)
2940ELSE
2950C=(0<<21):E=(1<<21)
2960ENDIF
2970icond!8=C:icond!12=E
2980SYS"Wimp_SetIconState",,icond
2990:
3000!icond=details%:icond!4=30:SYS"Wimp_GetIconState",,icond
3010IF on=0 THEN
3020C=(1<<21):E=(1<<21)
3030ELSE
3040C=(0<<21):E=(1<<21)
3050ENDIF
3060icond!8=C:icond!12=E
3070SYS"Wimp_SetIconState",,icond
3080ENDPROC
3090DEFPROCprocess
3100IF !block=details% AND block!24=13 THEN PROCcaret:ENDPROC
3110IF !block=save% AND block!24=13 THEN winsave%=!block:PROCsave($FNinfo(!block,1))
3120IF !block=saved% AND block!24=13 THEN winsave%=!block:PROCsave($FNinfo(!block,1))
3130IF !block=savepic% AND block!24=13 THEN winsave%=!block:PROCsave($FNinfo(!block,1))
3140SYS"Wimp_ProcessKey",block!24
3150ENDPROC
3160DEFPROCcaret
3170SYS"Wimp_GetCaretPosition",,block
3180IF block!0=details% THEN
3190CASE block!4 OF
3200 WHEN 0:np=5
3210 WHEN 5:np=6
3220 WHEN 6:np=7
3230 WHEN 7:np=18
3240 WHEN 18:np=10
3250 WHEN 10:np=21
3260 WHEN 21:np=0
3270 WHEN 13:np=14
3280 WHEN 14:np=17
3290 WHEN 17:np=15
3300 WHEN 15:np=0
3310 WHEN 31:np=32:PROCinfo(details%,13,$FNinfo(details%,block!4))
3320 WHEN 32:np=33:PROCinfo(details%,14,$FNinfo(details%,block!4))
3330 WHEN 33:np=34:PROCinfo(details%,17,$FNinfo(details%,block!4))
3340 WHEN 34:np=13:PROCinfo(details%,15,$FNinfo(details%,block!4))
3350 ENDCASE
3360 SYS "Wimp_SetCaretPosition",details%,np,0,0,-1,LEN($FNinfo(details%,np))
3370 ENDIF
3380 ENDPROC
3390DEFPROCselect
3400IF gee=1 THEN
3410IF version%>300 THEN SYS"Font_DecodeMenu",0,fmenu%,block,icond,255TO,,,,size:$icond=LEFT$($icond,size-1):$icond=RIGHT$($icond,LEN($icond)-2):$icond=LEFT$($icond,LEN$icond-(LEN$icond-INSTR($icond,"\"))-1):ELSE SYS"Wimp_DecodeMenu",,fmenu%,block,icond
3420family$=$icond
3430PROCinfo(details%,icy,family$)
3440PROCredraw(card%)
3450gee=0
3460ENDPROC
3470ENDIF
3480IF gee=2 THEN
3490SYS"Wimp_DecodeMenu",,sprmen%,block,icond
3500curspr$=$icond
3510PROCdrawsprite
3520gee=0
3530ENDPROC
3540ENDIF
3550SYS"Wimp_DecodeMenu",,openmenu%,block,icond
3560iffy=TRUE
3570IF $icond="Quit" THEN PROCareyousure:quiting%=TRUE
3580IF $icond="Details" THEN PROCopenwin(details%)
3590IF $icond="View" THEN PROCopenwin(card%):PROCredraw(card%)
3600IF $icond="Picture.Del Pic" THEN PROCkillspr
3610IF $icond="Back Col" THEN io=0:hex=hexc(io):PROCsetper
3620IF $icond="Picture.Force Scale" AND iffy AND force force=FALSE:iffy=FALSE:PROCdrawsprite
3630IF $icond="Picture.Force Scale" AND iffy AND NOT force force=TRUE:iffy=FALSE:PROCdrawsprite
3640IF $icond="Picture.Centred" AND iffy AND centred centred=FALSE:iffy=FALSE:PROCdrawsprite
3650IF $icond="Picture.Centred" AND iffy AND NOT centred centred=TRUE:iffy=FALSE:PROCdrawsprite
3660IF $icond="Save.Draw" PROCopenwin(save%)
3670IF $icond="Save.Data" PROCopenwin(saved%)
3680SYS"Wimp_GetPointerInfo",,block
3690IF block!8=1 THEN
3700IF menuopen=-44 THEN PROCcmenus
3710SYS"Wimp_CreateMenu",,openmenu%
3720ELSE
3730SYS"Wimp_CreateMenu",,-1
3740ENDIF
3750ENDPROC
3760DEFPROCkillspr
3770SYS"OS_Heap",6,heap%,sppool% TO ,,,ohs
3780SYS"OS_Heap",4,heap%,sppool%,1024-ohs TO ,,sppool%
3790IF origheap-hsizeb<0 THEN SYS"OS_Heap",5,heap%,,origheap-hsizeb:hsizeb+=origheap-hsizeb
3800SYS"Wimp_SlotSize",-1,-1 TO current
3810SYS"Wimp_SlotSize",orig,-1
3820ENDIF
3830sfile$="":curspr$="":spr%=0
3840!block=details%
3850SYS"Wimp_GetWindowInfo",,block
3860workx%=block!4-block!20
3870worky%=block!16-block!24
3880SYS"Wimp_ForceRedraw",-1,workx%+400,worky%-352,workx%+564,worky%-208
3890!block=card%
3900SYS"Wimp_GetWindowInfo",,block
3910workx%=block!4-block!20
3920worky%=block!16-block!24
3930SYS"Wimp_ForceRedraw",-1,workx%+390,worky%-300,workx%+564,worky%-156
3940ENDPROC
3950DEFPROCmess(mess$)
3960!icond=0:$(icond+4)=mess$+CHR$0
3970SYS"Wimp_ReportError",icond,1,"!Card"
3980ENDPROC
3990DEFPROCerror(err$)
4000IF ERR=523 THEN
4010PROCmess("Font "+font$+" not found")
4020CASE font$ OF
4030WHEN fontname$:PROCinfo(details%,3,"Trinity.Medium")
4040WHEN fontextra$:PROCinfo(details%,2,"Trinity.Medium")
4050WHEN fontad1$:PROCinfo(details%,19,"Trinity.Medium")
4060WHEN fonttel$:PROCinfo(details%,4,"Trinity.Medium")
4070ENDCASE
4080PROCredraw(card%):PROCpollit
4090ENDIF
4100!icond=0:$(icond+4)=err$+"."+" Press OK to continue or Cancel to quit"+CHR$0
4110SYS"Wimp_ReportError",icond,3,"!Card" TO ,but
4120IF but=2 THEN SYSreinter,mytask%:SYS"Wimp_CloseDown":END
4130ENDPROC
4140DEFPROCout
4150IF winsave%=save% THEN stext=stex:ft=&AFF
4160IF winsave%=saved% THEN stext=stexd:ft=&00C
4170IF winsave%=savepic% THEN stext=stextpic:ft=&FF9
4180IF drive%=1 THEN
4190SYS "Wimp_GetPointerInfo",,mblock
4200win=mblock!12:icon=mblock!16:xout=!mblock:yout=mblock!4:
4210mblock!20=mblock!12:mblock!24=mblock!16:mblock!28=!mblock:mblock!32=mblock!4
4220mblock!12=0:mblock!16=1:mblock!36=1024:mblock!40=ft
4230$stext=$FNinfo(winsave%,1)
4240$stext=FNgetleaf($stext)
4250FOR I=0 TO 255:IF I?stext<32 THEN I?stext=13
4260NEXT
4270!mblock=44+4*(1+(LEN$stext)DIV4)
4280$(mblock+44)=FNbit($stext)+CHR$0:!mblock=60
4290SYS "Wimp_SendMessage",17,mblock,mblock!20,mblock!24:REM DataSave
4300drag%=0
4310ENDIF
4320ENDPROC
4330DEFPROCdefsave
4340PROCMode
4350!block=winsave%
4360SYS "Wimp_GetWindowState",,block
4370ysize%=block!16-block!8
4380x%=block!4:y%=block!8:block!4=2
4390SYS"Wimp_GetIconState",,block
4400block!8+=x%:block!12+=y%+ysize%
4410block!16+=x%:block!20+=y%+ysize%
4420block!24=0:block!28=0:block!32=xmax:block!36=ymax
4430!block=0:block!4=5:drag%=TRUE:drive%=1
4440SYS"Wimp_DragBox",,block
4450ENDPROC
4460DEFPROCMode
4470!block=130:block!4=131:block!8=-1:SYS"OS_ReadVduVariables",block,block+128
4480SYS"OS_ReadModeVariable",MODE,4 TO ,,Xeig%
4490SYS"OS_ReadModeVariable",MODE,5 TO ,,Yeig%
4500xmax=((block!128)+1)*2^Xeig%:ymax=((block!132)+1)*2^Yeig%
4510ENDPROC
4520DEFFNgetleaf(leaf$)
4530WHILE INSTR(leaf$,".")
4540leaf$=MID$(leaf$,INSTR(leaf$,".")+1)
4550ENDWHILE:=leaf$
4560DEFPROCsave(save$)
4570IF 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
4580IF winsave%=saved%
4590LOCAL ERROR
4600ON ERROR LOCAL IF ERR=71622:PROCquery("Disc Full"):full=TRUE:RESTORE ERROR:ENDPROC:ELSE RESTORE ERROR:PROCerror(REPORT$+" : at line "+STR$ERL):END
4610 endtext%=text%
4620$endtext%="Card2 Data File"+CHR$10
4630 endtext%+=16
4640IF curspr$<>"" THEN
4650$endtext%="Sprites"+CHR$10
4660endtext%+=8
4670$endtext%=curspr$+CHR$10:endtext%+=LEN(curspr$)+1:$endtext%=STR$spr_len%+CHR$(10):endtext%+=LEN(STR$spr_len%)+1
4680IF centred c$="centred" ELSE c$="origin"
4690IF force f$="forced" ELSE f$="s/s"
4700IF Shear g$="1" ELSE g$="0"
4710$endtext%=g$+CHR$10
4720endtext%+=2
4730$endtext%=c$+CHR$10
4740endtext%+=LENc$+1
4750$endtext%=f$+CHR$10
4760endtext%+=LENf$+1
4770ELSE
4780$endtext%="NoSprites"+CHR$10:endtext%+=10
4790ENDIF
4800 $endtext%=$FNinfo(details%,3)+CHR$10
4810 endtext%+=LEN($FNinfo(details%,3))+1
4820 $endtext%=$FNinfo(details%,0)+CHR$(10)
4830 endtext%+=LEN($FNinfo(details%,0))+1
4840 $endtext%=$FNinfo(details%,13)+CHR$(10)
4850endtext%+=LEN($FNinfo(details%,13))+1
4860$endtext%=$FNinfo(details%,31)+CHR$(10)
4870endtext%+=LEN($FNinfo(details%,31))+1
4880 $endtext%=$FNinfo(details%,2)+CHR$10
4890 endtext%+=LEN($FNinfo(details%,2))+1
4900 $endtext%=$FNinfo(details%,5)+CHR$(10)
4910 endtext%+=LEN($FNinfo(details%,5))+1
4920 $endtext%=$FNinfo(details%,14)+CHR$(10)
4930endtext%+=LEN($FNinfo(details%,14))+1
4940 $endtext%=$FNinfo(details%,32)+CHR$(10)
4950endtext%+=LEN($FNinfo(details%,32))+1
4960$endtext%=$FNinfo(details%,19)+CHR$10
4970 endtext%+=LEN($FNinfo(details%,19))+1
4980 $endtext%=$FNinfo(details%,6)+CHR$(10)
4990 endtext%+=LEN($FNinfo(details%,6))+1
5000 $endtext%=$FNinfo(details%,17)+CHR$(10)
5010endtext%+=LEN($FNinfo(details%,17))+1
5020 $endtext%=$FNinfo(details%,33)+CHR$(10)
5030endtext%+=LEN($FNinfo(details%,33))+1
5040$endtext%=$FNinfo(details%,7)+CHR$(10)
5050endtext%+=LEN($FNinfo(details%,7))+1
5060$endtext%=$FNinfo(details%,18)+CHR$(10)
5070endtext%+=LEN($FNinfo(details%,18))+1
5080$endtext%=$FNinfo(details%,10)+CHR$(10)
5090endtext%+=LEN($FNinfo(details%,10))+1
5100$endtext%=$FNinfo(details%,4)+CHR$(10)
5110endtext%+=LEN($FNinfo(details%,4))+1
5120$endtext%=$FNinfo(details%,21)+CHR$(10)
5130endtext%+=LEN($FNinfo(details%,21))+1
5140$endtext%=$FNinfo(details%,15)+CHR$(10)
5150endtext%+=LEN($FNinfo(details%,15))+1
5160$endtext%=$FNinfo(details%,34)+CHR$(10)
5170endtext%+=LEN($FNinfo(details%,34))+1
5180$endtext%=STR$hexc(0)+CHR$(10)
5190 endtext%+=LEN(STR$hexc(0))+1
5200 $endtext%=STR$hexc(1)+CHR$(10)
5210 endtext%+=LEN(STR$hexc(1))+1
5220$endtext%=STR$hexc(2)+CHR$(10)
5230 endtext%+=LEN(STR$hexc(2))+1
5240$endtext%=STR$hexc(3)+CHR$(10)
5250 endtext%+=LEN(STR$hexc(3))+1
5260$endtext%=STR$hexc(4)+CHR$(10)
5270 endtext%+=LEN(STR$hexc(4))+1
5280 SYS"OS_File",0,save$,0,0,text%,endtext%
5290 OSCLI("Settype "+save$+" &0cc")
5300IF curspr$<>""THEN
5310SYS"OS_File",5,save$ TO,,,,length
5320SYS"OS_Find",&C0,save$ TO fs
5330SYS"OS_GBPB",1,fs,spr%+4,spr_len%,length
5340CLOSE#fs
5350ENDIF
5360RESTORE ERROR
5370IF save$<>"<Wimp$Scrap>" THEN savef=TRUE:PROCtitle(details%,save$)
5380ENDIF
5390IF winsave%=save% THEN PROCmakefile
5400IF winsave%=savepic% THEN
5410LOCAL ERROR
5420ON 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
5430Current=FNcheckflag(savepic%,3,21)
5440CASE Current OF
5450WHEN TRUE:
5460SYS 46,&118,spr%,curspr$ TO ,,sptr%
5470SYS"OS_Find",&80,save$ TO ile%
5480BPUT#ile%,&01
5490BPUT#ile%,0
5500BPUT#ile%,0
5510BPUT#ile%,0
5520BPUT#ile%,&10
5530BPUT#ile%,0
5540BPUT#ile%,0
5550BPUT#ile%,0
5560BPUT#ile%,!sptr%+16 AND &FF
5570BPUT#ile%,(!sptr%+16>>>8) AND &FF
5580BPUT#ile%,(!sptr%+16>>>16) AND &FF
5590BPUT#ile%,(!sptr%+16>>>24) AND &FF
5600SYS"OS_GBPB",&02,ile%,sptr%,!sptr%
5610SYS"OS_Find",0,ile%
5620SYS"OS_File",&12,save$,&ff9
5630WHEN FALSE:
5640SYS"OS_File",0,save$,0,0,spr%+4,spr%+(spr_len%+4)
5650SYS"OS_File",&12,save$,&ff9
5660ENDCASE
5670ENDIF
5680IF save$<>"<Wimp$Scrap>" PROCinfo(winsave%,1,save$)
5690ENDPROC
5700DEFPROCmessagein
5710mblock=block
5720ref=mblock!8:task=mblock!4
5730CASE mblock!16 OF
5740WHEN 8:IF NOT prequit mblock!12=mblock!8:SYS"Wimp_SendMessage",19,mblock:prequit=TRUE:PROCareyousure
5750WHEN 0:SYSreinter,mytask%:SYS"Wimp_CloseDown":END
5760WHEN 2:
5770IF drive%=1 THEN
5780PROCsave(FNwool(mblock+44))
5790mblock!12=ref
5800mblock!16=3
5810mblock!36=-1
5820!mblock=256
5830sendm=&400E7
5840SYS sendm,18,mblock,task:REM DataLoad
5850ENDIF
5860WHEN 3:
5870IF mblock!40<>&0CC AND mblock!40<>&FF9 THEN PROCmess("Only CardData files or Sprites can be dropped into here"):ENDPROC
5880in=TRUE
5890IF mblock!40=&FF9 THEN PROCinsprites:ENDPROC
5900PROCload(FNwool(block+44))
5910WHEN 5:
5920IF block!40=&0CC THEN
5930block!12=block!8:block!16=4
5940sendm=&400E7
5950SYS sendm,18,block,block!4:REM DataLoadAck
5960PROCload(FNwool(block+44))
5970ENDIF
5980ENDCASE
5990ENDPROC
6000DEFPROCload(load$)
6010SYS"OS_Find",&40,load$ TO file%
6020t$=""
6030t$=FNreadfile
6040 first$=t$
6050 IF t$<>"Card Data File" AND t$<>"Card2 Data File" THEN PROCmess("This is not a Card data file"):SYS"OS_Find",0,file%:ENDPROC
6060IF first$="Card Data File" new=FLASE:PROCloadold:PROCkillspr
6070IF first$="Card2 Data File" new=TRUE:PROCloadnew
6080SYS"OS_Find",0,file%
6090$FNinfo(saved%,1)=load$
6100IF noic=0 PROCopenwin(details%)
6110IF noic=0 savef=TRUE:PROCtitle(details%,load$)
6120IF noic=0 AND curspr$<>"" THEN PROCdrawsprite
6130ENDPROC
6140DEFPROCloadnew
6150IF FNreadfile="Sprites" THEN PROCloadspr:ENDPROC
6160PROCkillspr
6170PROCloadindet
6180FOR I=0 TO 4
6190hexc(I)=VAL(FNreadfile)
6200NEXT I
6210ENDPROC
6220DEFPROCloadspr
6230IF curspr$<>"" THEN PROCkillspr
6240curspr$=FNreadfile
6250sfile$="Internal"
6260spr_len%=VAL(FNreadfile)
6270IF VAL(FNreadfile)=1 THEN PROCsetshear(1) ELSE PROCsetshear(0)
6280IF FNreadfile="centred" THEN centred=TRUE
6290IF FNreadfile="forced" THEN force=TRUE
6300PROCloadindet
6310FOR I=0 TO 4
6320hexc(I)=VAL(FNreadfile)
6330NEXT I
6340men$="":largest=0
6350spr%=FNclaim(spr_len%+64)
6360SYS"OS_File",5,load$ TO ,,,,length
6370SYS"OS_GBPB",3,file%,spr%+4,spr_len%,length-spr_len%
6380SYS "OS_SpriteOp",&108,spr% TO ,,,sprites%
6390FOR i%=0 TO sprites%-1
6400 SYS "OS_SpriteOp",&10D,spr%,temp%,&100,i%+1 TO ,,,j%
6410 temp%?j%=13
6420 IF LEN(men$)<243 THEN men$=men$+$temp%+","
6430 IF LEN($temp%)>largest largest=LEN($temp%)
6440NEXT
6450men$=LEFT$(men$,LEN(men$)-1)
6460ENDPROC
6470DEFPROCloadold
6480PROCloadindet
6490FOR I=1 TO 4
6500hexc(I)=0
6510NEXT
6520hexc(0)=&FFFFFF00
6530ENDPROC
6540DEFPROCloadindet
6550PROCinfo(details%,3,FNreadfile)
6560PROCinfo(details%,0,FNreadfile)
6570PROCinfo(details%,13,FNreadfile)
6580IF new PROCinfo(details%,31,FNreadfile)
6590PROCinfo(details%,2,FNreadfile)
6600PROCinfo(details%,5,FNreadfile)
6610PROCinfo(details%,14,FNreadfile)
6620IF new PROCinfo(details%,32,FNreadfile)
6630PROCinfo(details%,19,FNreadfile)
6640PROCinfo(details%,6,FNreadfile)
6650PROCinfo(details%,17,FNreadfile)
6660IF new PROCinfo(details%,33,FNreadfile)
6670PROCinfo(details%,7,FNreadfile)
6680PROCinfo(details%,18,FNreadfile)
6690PROCinfo(details%,10,FNreadfile)
6700PROCinfo(details%,4,FNreadfile)
6710PROCinfo(details%,21,FNreadfile)
6720PROCinfo(details%,15,FNreadfile)
6730IF new PROCinfo(details%,34,FNreadfile)
6740ENDPROC
6750DEFFNreadfile
6760 t$=""
6770 REPEAT
6780 SYS"OS_BGet",,file% TO byte%
6790 IF byte%=254 SYS"OS_Find",0,file%:PROCopenwin(details%):
6800 t$=t$+CHR$(byte%)
6810 UNTIL byte%=13 OR byte%=10
6820 =LEFT$(t$,LEN(t$)-1)
6830DEFPROCinsprites
6840 men$="":largest=0
6850 load$=FNwool(block+44)
6860 sfile$=load$
6870SYS "OS_File",5,load$ TO ,,,,spr_len%
6880spr%=FNclaim(spr_len%+256)
6890SYS "OS_File",&FF,load$,spr%+4
6900SYS "OS_SpriteOp",&108,spr% TO ,,,sprites%
6910FOR i%=0 TO sprites%-1
6920 SYS "OS_SpriteOp",&10D,spr%,temp%,&100,i%+1 TO ,,,j%
6930 temp%?j%=13
6940 IF LEN(men$)<243 THEN men$=men$+$temp%+","
6950 IF LEN($temp%)>largest largest=LEN($temp%)
6960NEXT
6970men$=LEFT$(men$,LEN(men$)-1)
6980curspr$=LEFT$(men$,INSTR(men$,",")-1)
6990PROCopenwin(details%):PROCdrawsprite
7000 ENDPROC
7010DEFPROCopenwin(handle%)
7020!block=handle%
7030SYS"Wimp_GetWindowState",,block
7040open=block!32 AND (1<<16)
7050IF block!28<>-1 OR open=0 OR handle%=card% THEN
7060block!28=-1
7070SYS"Wimp_OpenWindow",,block
7080ENDIF
7090ENDPROC
7100DEFPROCfmenucr
7110IF version%>300 THEN
7120fflag%=0
7130fflag%+=1<<19
7140fflag%+=1<<20
7150SYS"Font_ListFonts",,0,fflag%,,0 TO r,s,t,A,u,B
7160DIM fmenu% A,fbuf% B
7170SYS"Font_ListFonts",,fmenu%,fflag%,A,fbuf%,B,1
7180ELSE
7190PROCfmenucrRO2
7200ENDIF
7210ENDPROC
7220DEFPROCfmenucrRO2
7230NULL=0
7240DIM f_p% 900
7250!f_p%=NULL
7260c%=0
7270REPEAT
7280 SYS "Font_ListFonts",,q%,c%,-1 TO ,,c%
7290 IF c%<>-1 THEN PROCFamily(FNInfo(q%))
7300UNTIL c%=-1
7310
7320DIM fmenu% 28+24*n_font%
7330$fmenu%="Fonts list":fmenu%!12=&0207:fmenu%!20=40:fmenu%!24=0
7340fmenu%!28=1:fmenu%!32=-1:fmenu%!36=&07000021:$(fmenu%+40)="System"
7350
7360width%=8:p%=fmenu%+28:r%=f_p%:n%=2
7370WHILE n%<=n_font%
7380 p%+=24
7390 f$=FNInfo(!r%+12)
7400 width%=FNMax(width%,LEN(f$)+1)
7410 !p%=0:p%!8=&07000121
7420 p%!12=!r%+12
7430 p%!16=-1:p%!20=LEN(f$)
7440 v%=!r%+4
7450 IF (!(!r%+8) = 1) AND FNInfo(!v%+4) = "" THEN
7460 p%!4 = -1
7470 ELSE
7480 DIM p%!4 28+24*!(!r%+8)
7490 t%=p%!4
7500 $t%=f$:t%!12=&0207:t%!20=40:t%!24=0
7510 u%=t%+4
7520 width2%=LEN(f$)-2
7530 FOR s%=1 TO !(!r%+8)
7540 u%+=24
7550 f$=FNInfo(!v%+4)
7560 width2%=FNMax(width2%,LEN(f$)+1)
7570 !u%=0:u%!4=-1:u%!8=&07000121
7580 u%!12=!v%+4
7590 u%!16=-1:u%!20=LEN(f$)
7600 v%=!v%
7610 NEXT
7620 !u%= !u% OR &80:t%!16=16*width2%
7630 ENDIF
7640 r%=!r%
7650 n%+=1
7660ENDWHILE
7670!p%= !p% OR &80:fmenu%!16=16*width%
7680ENDPROC
7690DEF PROCFamily(font$)
7700LOCAL family$,style$,p%,flag%,pos%
7710
7720pos%=INSTR(font$,".")
7730family$=LEFT$(font$,pos%-1)
7740IF pos% = 0 THEN
7750 style$=""
7760ELSE
7770 style$=MID$(font$,pos%+1)
7780ENDIF
7790p%=f_p%:flag%=FALSE
7800WHILE (!p% <> NULL AND flag%=FALSE)
7810 IF family$ = FNInfo(!p%+12) THEN flag%= TRUE
7820 p% =!p%
7830ENDWHILE
7840IF flag%=FALSE THEN
7850 DIM p%!0 LEN(family$)+13
7860 p%=!p%
7870 !p%=NULL
7880 p%!8=1
7890 $(p%+12)=family$
7900 DIM p%!4 LEN(style$)+5
7910 p%=p%!4
7920 !p%=NULL
7930 $(p%+4)=style$
7940 n_font%+=1
7950ELSE
7960 p%!8=p%!8+1
7970 p%=p%+4
7980 WHILE (!p% <> NULL)
7990 p%=!p%
8000 ENDWHILE
8010 DIM p%!0 LEN(style$)+5
8020 p%=!p%
8030 !p%=NULL
8040 $(p%+4)=style$
8050ENDIF
8060ENDPROC
8070DEFFNMax(a%,b%)
8080IF a%>b% THEN =a% ELSE =b%
8090DEFFNInfo(p%)
8100LOCAL a$
8110a$=""
8120WHILE (?p%<>0 AND ?p%<>13)
8130 a$+=CHR$(?p%)
8140 p%+=1
8150ENDWHILE
8160=a$
8170DEFPROCredraw(handle)
8180 block!0=handle
8190LOCALmore%
8200SYS "Wimp_RedrawWindow",,block TO more%
8210WHILE more%
8220 CASE handle OF
8230 WHEN card%
8240 PROCapplication_redraw
8250 WHEN colour%
8260 PROCapplication_redraw2
8270 SYS "Wimp_BorderWindow",,block
8280 WHEN details%
8290 PROCapp_re3
8300 SYS "Wimp_BorderWindow",,block
8310 OTHERWISE
8320 SYS "Wimp_BorderWindow",,block
8330 ENDCASE
8340 SYS "Wimp_GetRectangle",,block TO more%
8350ENDWHILE
8360IF close=1 THEN PROCclose(card%):close=0
8370IF nono=1 THEN PROCinfo(details%,ni,STR$ns)
8380ENDPROC
8390DEFPROCapplication_redraw
8400!block=card%
8410SYS"Wimp_GetWindowInfo",,block
8420workx%=block!4-block!20
8430worky%=block!16-block!24
8440PROCdrawcard(workx%,worky%)
8450PROCcardsprite(workx%,worky%)
8460ENDPROC
8470DEFPROCcardsprite(cxco,cyco)
8480IF curspr$<>"" THEN
8490curss$=curspr$
8500IF LENcurss$<12 THEN
8510REPEAT
8520curss$+=CHR$0
8530UNTIL LENcurss$=12
8540ENDIF
8550SYS "ColourTrans_SetGCOL",hexc(0),,,&100,0
8560RECTANGLE FILL workx%+390,worky%-300,82*2,72*2
8570SYS &2E,256+40,spr%,curspr$ TO A,B,C,w%,h%,D,mode%
8580SYS"OS_ReadModeVariable",mode%,3 TOc,cl,cols
8590SYS"OS_ReadModeVariable",mode%,4 TO,,xeig%
8600SYS"OS_ReadModeVariable",mode%,5 TO,,yeig%
8610wi%=w%<<xeig%
8620he%=h%<<yeig%
8630IF spr%!4>0 THEN
8640next=spr%!8
8650REPEAT
8660add=next+4
8670offset=spr%!add
8680name$=""
8690REPEAT
8700name$+=CHR$spr%!add
8710add+=1
8720UNTIL add=next+16
8730old=next
8740next+=spr%!next
8750UNTIL curss$=name$
8760IF spr%!(32+old)>44 THEN
8770FOR col%=0 TO 15
8780palette%!(col%*4)=!(old+44+col%*8+spr%)
8790NEXT col%
8800SYS "ColourTrans_SelectTable",!(40+old+spr%),palette%,-1,-1,scalblok%
8810ELSE
8820SYS "ColourTrans_SelectTable",!(40+old+spr%),defpal%,-1,-1,scalblok%
8830ENDIF
8840ENDIF
8850xoff=0:yoff=0
8860IF h%>w% shear=72 ELSE shear=82
8870SYS"OS_ReadModeVariable",MODE,11 TO,,C
8880SYS"OS_ReadModeVariable",MODE,12 TO,,B
8890C+=1:B+=1
8900IF B/C=.75 AND FNvga(mode%) THEN hscale=1
8910IF B/C<>.8 AND B/C<>.75 AND FNvga(mode%) hscale=2
8920IF B/C=.8 OR B/C=.75 THEN modsc=1 ELSE modsc=2
8930Shear=FNcheckflag(details%,29,21)
8940CASE Shear OF
8950WHEN FALSE
8960IF B/C=.8 AND NOT FNvga(mode%) THEN hscale=1
8970IF B/C=.75 AND NOT FNvga(mode%) THEN hscale=1
8980IF B/C<>.8 AND B/C<>.75 AND NOT FNvga(mode%) hscale=2
8990IF FNvga(mode%) AND w%>82 AND h%>72 AND h%<w% THEN SCw=w%/82:SCh=SCw
9000IF FNvga(mode%) AND w%>82 AND h%>72 AND h%>w% THEN SCh=h%/72:SCw=SCh
9010IF NOT FNvga(mode%) AND w%>82 AND h%*2>72 AND h%*2<w% THEN SCw=w%/82:SCh=SCw*hscale
9020IF NOT FNvga(mode%) AND w%>82 AND h%*2>72 AND h%*2>w% THEN SCh=(h%/(72/hscale))*2:SCw=(h%/72)*2
9030IF w%>82 AND h%<72 THEN SCw=w%/shear:SCh=1
9040IF w%<82 AND h%>72 THEN SCw=1:SCh=h%/(shear/hscale)
9050IF force THEN
9060IF w%<82 AND h%<72 AND h%=w% AND FNvga(mode%) THEN SCh=h%/(72/hscale):SCw=w%/72
9070IF w%<82 AND h%<72 AND h%<w% AND FNvga(mode%) THEN SCw=w%/shear:SCh=w%/(shear/hscale)
9080IF w%<82 AND h%<72 AND h%>w% AND FNvga(mode%) THEN SCw=h%/shear:SCh=h%/(shear/hscale)
9090IF w%<82 AND h%<72 AND h%*2=w% AND NOT FNvga(mode%) THEN SCh=h%/(36/hscale):SCw=w%/72
9100IF w%<82 AND h%<36 AND (h%*2)<w% AND NOT FNvga(mode%) THEN SCw=w%/shear:SCh=w%/(shear/hscale)
9110IF w%<82 AND h%<36 AND (h%*2)>w% AND NOT FNvga(mode%) THEN SCw=h%/shear:SCh=h%/(shear/hscale)
9120ELSE
9130IF w%<82 AND h%<72 THEN SCw=1:SCh=modsc
9140ENDIF
9150CASE centred OF
9160 WHEN TRUE
9170 IF FNvga(mode%) AND NOT force AND h%*SCh=72 THEN yoff=0
9180 IF FNvga(mode%) AND NOT force AND h%*SCh<70 THEN yoff=72-(h%*SCh)
9190 IF FNvga(mode%) AND force THEN yoff=(72-((1/SCh)*h%))
9200 IF NOT FNvga(mode%) AND force yoff=(72-((1/SCh)*h%))/2
9210 IF NOT FNvga(mode%) AND h%/SCh<36 THEN yoff=INT(36-(h%/SCh))*2
9220 IF NOT FNvga(mode%) AND h%/SCh>=35 THEN yoff=0
9230 xoff=(82-((1/SCw)*w%))
9240 IF force AND h%>72 AND w%>82 AND h%<w% AND FNvga(mode%) THEN xoff=0
9250 IF force AND h%>72 AND w%>82 AND h%>w% AND FNvga(mode%) THEN yoff=0
9260 IF force AND h%=w% AND FNvga(mode%) THEN xoff=10:yoff=0
9270 IF force AND h%*2=w% AND NOT FNvga(mode%) THEN xoff=10:yoff=0
9280 IF force AND h%*2>72 AND w%>82 AND (h%*2)<w% AND NOT FNvga(mode%) THEN xoff=0
9290 IF force AND h%*2>72 AND w%>82 AND (h%*2)>w% AND NOT FNvga(mode%) THEN yoff=0
9300 ENDCASE
9310WHEN TRUE
9320IF B/C=.8 AND NOT FNvga(mode%) THEN hscale=2
9330IF B/C=.75 AND NOT FNvga(mode%) THEN hscale=2
9340IF B/C<>.8 AND B/C<>.75 AND NOT FNvga(mode%) hscale=4
9350SCw=w%/82:SCh=h%/(72/hscale)
9360ENDCASE
9370!scal%=wi%:scal%!4=he%:scal%!8=INT((w%/((1/SCw)/2))+0.5):scal%!12=INT((h%/((1/SCh)/2))+0.5)
9380SYS 46,&134,spr%,curspr$,cxco+390+xoff,cyco-300+yoff,8,scal%,scalblok%
9390ENDIF
9400ENDPROC
9410DEFFNwidth(text$,font$,xs,ys)
9420SYS "Font_FindFont",,font$,xs*16,ys*16 TO font%
9430SYS "Font_SetFont",font%
9440SYS "Font_StringWidth",,text$,228000,228000,31,LEN(text$) TO ,,x%,y%
9450SYS "Font_ConverttoOS",,x%,y% TO ,x,y
9460=x
9470DEFPROCmakefile
9480SYS"Hourglass_On"
9490LOCAL ERROR
9500ON ERROR LOCAL IF ERR=71622:PROCquery("Disc Full"):full=TRUE:CLOSE#c%:OSCLI("Delete "+save$):RESTORE ERROR:ENDPROC:ELSE RESTORE ERROR:PROCerror(REPORT$+" : at line "+STR$ERL):CLOSE#c%:ENDPROC
9510IF FNcheckflag(save%,3,21) noofcards=1 ELSE noofcards=8
9520big%=&7FFFFFFF
9530EF=0.552256944
9540i%=0:c%=0
9550inch=&B400
9560point=640
9570cm=18140
9580black%=0
9590white%=&FFFFFF00
9600none%=-1
9610name$=$FNinfo(details%,0):fontname$=$FNinfo(details%,3)
9620sizename=VAL($FNinfo(details%,31)):hname=VAL($FNinfo(details%,13))
9630extra$=$FNinfo(details%,5):fontextra$=$FNinfo(details%,2)
9640sizeextra=VAL($FNinfo(details%,32)):hextra=VAL($FNinfo(details%,14))
9650ad1$=$FNinfo(details%,6):fontad1$=$FNinfo(details%,19)
9660sizead1=VAL($FNinfo(details%,33)):had1=VAL($FNinfo(details%,17))
9670ad2$=$FNinfo(details%,7)
9680ad3$=$FNinfo(details%,18)
9690ad4$=$FNinfo(details%,10)
9700tel$=$FNinfo(details%,21):fonttel$=$FNinfo(details%,4)
9710sizetel=VAL($FNinfo(details%,34)):htel=VAL($FNinfo(details%,15))
9720PROCdrawfile_start(save$)
9730PROCputw(0)
9740PROChead_here(FALSE)
9750PROCputs(CHR$(1)+fontname$)
9760PROCputs(CHR$(2)+fontextra$)
9770PROCputs(CHR$(3)+fontad1$)
9780PROCputs(CHR$(4)+fonttel$)
9790PROCalign
9800PROChead_now
9810RESTORE
9820IF noofcards=8 THEN PROCgroup_start
9830FOR carddraw=1 TO noofcards*2 STEP 2
9840ax=cardpos(carddraw):by=cardpos(carddraw+1)
9850xpos=ax:ypos=by
9860PROCgroup_start
9870PROCpath_start(0,0,1*point,&0,hexc(0))
9880PROCpath_draw(0,152)
9890PROCpath_draw(228,152)
9900PROCpath_draw(228,0)
9910PROCpath_draw(0,0)
9920PROCpath_close
9930PROCpath_end
9940xco=(2/5)*FNwidth(name$,fontname$,sizename,hname)
9950IF x/(2/5)=0 AND name$<>"" THEN PROCmess("The name text is too long or the font is too large"):PROCdrawfile_end:OSCLI"Delete "+save$:ENDPROC
9960xco=228-xco
9970xco=xco/2
9980PROCgroup_start
9990PROCtext(xco,126,name$,sizename*&280,hname*&280,1,hexc(1),hexc(1))
10000start=xco-2:finish=xco+((2/5)*x)+2
10010PROCpath_start(start,123,1.5*&280,hexc(1),&FFFFFFFF)
10020PROCpath_draw(finish,123)
10030PROCpath_close
10040PROCpath_end
10050PROCgroup_end
10060PROCgroup_start
10070x=FNwidth(ad1$,fontad1$,sizead1,had1)
10080IF ad1$>"" AND x=0 OR x>560 THEN PROCmess("The 1st address text is too long or the font is too large"):PROCdrawfile_end:OSCLI"Delete "+save$:ENDPROC
10090PROCtext(13,81,ad1$,sizead1*&280,had1*&280,3,hexc(3),hexc(3))
10100x=FNwidth(ad2$,fontad1$,sizead1,had1)
10110IF ad2$>"" AND x=0 OR x>560 THEN PROCmess("The 2nd address text is too long or the font is too large"):PROCdrawfile_end:OSCLI"Delete "+save$:ENDPROC
10120PROCtext(13,65,ad2$,sizead1*&280,had1*&280,3,hexc(3),hexc(3))
10130x=FNwidth(ad3$,fontad1$,sizead1,had1)
10140IF ad3$>"" AND x=0 OR x>560 THEN PROCmess("The 3rd address text is too long or the font is too large"):PROCdrawfile_end:OSCLI"Delete "+save$:ENDPROC
10150PROCtext(13,49,ad3$,sizead1*&280,had1*&280,3,hexc(3),hexc(3))
10160x=FNwidth(ad4$,fontad1$,sizead1,had1)
10170IF ad4$>"" AND x=0 OR x>560 THEN PROCmess("The 4th address text is too long or the font is too large"):PROCdrawfile_end:OSCLI"Delete "+save$:ENDPROC
10180PROCtext(13,33,ad4$,sizead1*&280,had1*&280,3,hexc(3),hexc(3))
10190PROCgroup_end
10200xco=(2/5)*FNwidth(extra$,fontextra$,sizeextra,hextra)
10210IF x/(2/5)=0 AND extra$<>"" THEN PROCmess("The trade text is too long or the font is too large"):PROCdrawfile_end:OSCLI"Delete "+save$:ENDPROC
10220xco=228-xco:xco=xco/2:
10230PROCtext(xco,102,extra$,sizeextra*&280,hextra*&280,2,hexc(2),hexc(2))
10240xco=(2/5)*FNwidth("Tel :- "+tel$,fonttel$,sizetel,htel)
10250IF x/(2/5)=0 AND tel$<>"" THEN PROCmess("The telephone text is too long or the font is too large"):PROCdrawfile_end:OSCLI"Delete "+save$:ENDPROC
10260xco=218-xco
10270PROCtext(xco,10,"Tel :- "+tel$,sizetel*&280,htel*&280,4,hexc(4),hexc(4))
10280IF curspr$<>"" THEN PROCsprite
10290PROCgroup_end
10300IF noofcards=8 SYS"Hourglass_Percentage",(carddraw/(noofcards*2))*100
10310NEXT
10320PROCdrawfile_end
10330SYS"Hourglass_Smash"
10340RESTORE ERROR
10350ENDPROC
10360DEF PROCdrawfile_start(D$)
10370c%=OPENOUT(D$)
10380IF c%=0 THEN ERROR 1234,"Can't open output file"
10390drawfile$=D$
10400PROCputw(&77617244):PROCputw(201):PROCputw(0)
10410PROCputs12("!Card")
10420lev%=-1
10430PROChead_here(TRUE)
10440ENDPROC
10450DEF PROCputw(A%)
10460BPUT#c%,A% AND &FF
10470BPUT#c%,(A%>>>8) AND &FF
10480BPUT#c%,(A%>>>16) AND &FF
10490BPUT#c%,(A%>>>24) AND &FF
10500ENDPROC
10510DEF PROCputs12(A$)
10520LOCAL A%
10530A$=A$+STRING$(12," ")
10540FOR A%=1 TO 12:BPUT#c%,ASC(MID$(A$,A%,1)):NEXT
10550ENDPROC
10560:
10570DEF PROCputs(A$)
10580LOCAL A%
10590FOR A%=1 TO LEN(A$):BPUT#c%,ASC(MID$(A$,A%,1)):NEXT
10600BPUT#c%,0
10610ENDPROC
10620:
10630DEF PROChead_here(box%)
10640IF lev%=maxlev% THEN ERROR 1234,"Too many nested groups. Edit program to increase limit."
10650lev%+=1
10660box%(lev%)=box%
10670start%(lev%)=PTR#c%
10680IF lev%>0 THEN PROCputw(0)
10690IF box% THEN
10700 PROCputw(0):PROCputw(0)
10710 PROCputw(0):PROCputw(0)
10720ENDIF
10730l%(lev%)=big%:b%(lev%)=big%
10740r%(lev%)=-big%:t%(lev%)=-big%
10750ENDPROC
10760:
10770DEF PROChead_now
10780LOCAL end%
10790end%=PTR#c%
10800PTR#c%=start%(lev%)
10810IF lev%>0 THEN PROCputw(end%-start%(lev%)+4)
10820IF box%(lev%) THEN
10830 PROCputw(l%(lev%)):PROCputw(b%(lev%))
10840 PROCputw(r%(lev%)+1):PROCputw(t%(lev%)+1)
10850ENDIF
10860IF lev%>0 THEN
10870 lev%-=1
10880 IF l%(lev%+1)<l%(lev%) THEN l%(lev%)=l%(lev%+1)
10890 IF b%(lev%+1)<b%(lev%) THEN b%(lev%)=b%(lev%+1)
10900 IF r%(lev%+1)>r%(lev%) THEN r%(lev%)=r%(lev%+1)
10910 IF t%(lev%+1)>t%(lev%) THEN t%(lev%)=t%(lev%+1)
10920ENDIF
10930PTR#c%=end%
10940ENDPROC
10950DEF PROCalign
10960WHILE PTR#c% AND 3:BPUT#c%,0:ENDWHILE
10970ENDPROC
10980DEF PROCgroup_start
10990REM groups cannot be nested in this version
11000PROCputw(6)
11010PROChead_here(TRUE)
11020PROCputs12("group")
11030ENDPROC
11040:
11050DEF PROCgroup_end
11060PROChead_now
11070ENDPROC
11080DEF PROCtext(x%,y%,text$,xsize%,ysize%,font%,col%,bcol%)
11090x%=(x%+xpos)*point:y%=(y%+ypos)*point
11100PROCputw(1)
11110PROChead_here(FALSE)
11120PROCputxy(x%,y%-ysize%*.5)
11130PROCputxy(x%+LEN(text$)*xsize%,y%+ysize%)
11140PROCputw(col%)
11150PROCputw(bcol%)
11160PROCputw(font%)
11170PROCputw(xsize%):PROCputw(ysize%)
11180PROCputxy(x%,y%)
11190PROCputs(text$):PROCalign
11200PROChead_now
11210ENDPROC
11220DEF PROCputxy(x%,y%)
11230PROCputw(x%):PROCputw(y%)
11240IF x%<l%(lev%) THEN l%(lev%)=x%
11250IF y%<b%(lev%) THEN b%(lev%)=y%
11260IF x%>r%(lev%) THEN r%(lev%)=x%
11270IF y%>t%(lev%) THEN t%(lev%)=y%
11280ENDPROC
11290DEF PROCpath_start(x%,y%,width%,lcol%,fcol%)
11300PROCputw(2)
11310PROChead_here(TRUE)
11320PROCputw(fcol%):REM fill
11330PROCputw(lcol%):REM colour
11340PROCputw(width%):REM width
11350PROCputw(0):REM path style
11360PROCpath_move(x%,y%)
11370ENDPROC
11380:
11390DEF PROCpath_move(x%,y%)
11400x%=(x%+xpos)*point:y%=(y%+ypos)*point
11410PROCputw(2)
11420PROCputxy(x%,y%)
11430ENDPROC
11440:
11450DEF PROCpath_draw(xx%,yy%)
11460xx%=(xx%+xpos)*point:yy%=(yy%+ypos)*point
11470PROCputw(8)
11480PROCputxy(xx%,yy%)
11490ENDPROC
11500DEF PROCpath_close
11510PROCputw(5)
11520ENDPROC
11530:
11540DEF PROCpath_end
11550PROCputw(0)
11560PROChead_now
11570ENDPROC
11580DEF PROCdrawfile_end
11590REM draw unfinished IF lev%>0 THEN
11600PROChead_now
11610CLOSE#c%:c%=0
11620OSCLI("SetType "+drawfile$+" AFF")
11630ENDPROC
11640DEFPROCsprite
11650SYS 46,&118,spr%,curspr$ TO ,,sptr%
11660SYS &2E,256+40,spr%,curspr$ TO A,B,C,w%,h%,D,mode%
11670IF h%>w% shear=72 ELSE shear=82
11680IF FNvga(mode%) THEN hscale=1:ELSE hscale=2
11690Shear=FNcheckflag(details%,29,21)
11700xoff=0:yoff=0
11710CASE Shear OF
11720WHEN FALSE
11730IF FNvga(mode%) AND w%>82 AND h%>72 AND h%<w% THEN SCw=82/w%:SCh=SCw
11740IF FNvga(mode%) AND w%>82 AND h%>72 AND h%>w% THEN SCh=72/h%:SCw=SCh
11750IF NOT FNvga(mode%) AND w%>82 AND h%>72 AND h%*2<w% THEN SCw=82/w%:SCh=SCw
11760IF NOT FNvga(mode%) AND w%>82 AND h%>72 AND h%*2>w% THEN SCh=72/h%:SCw=SCh
11770IF w%>82 AND h%<72 THEN SCw=82/w%:SCh=SCw
11780IF w%<82 AND h%>72 THEN SCh=82/h%:SCw=SCh
11790IF force THEN
11800IF w%<82 AND h%<72 AND h%=w% AND FNvga(mode%) THEN SCh=72/h%:SCw=72/w%
11810IF w%<82 AND h%<72 AND h%<w% AND FNvga(mode%) THEN SCw=82/w%:SCh=82/h%
11820IF w%<82 AND h%<72 AND h%>w% AND FNvga(mode%) THEN SCw=72/h%:SCh=72/h%
11830IF w%<82 AND h%<72 AND h%*2=w% AND NOT FNvga(mode%) THEN SCh=72/h%:SCw=72/h%
11840IF w%<82 AND h%<36 AND (h%*2)<w% AND NOT FNvga(mode%) THEN SCw=82/w%:SCh=82/w%
11850IF w%<82 AND h%<36 AND (h%*2)>w% AND NOT FNvga(mode%) THEN SCw=72/h%:SCh=72/h%
11860ELSE
11870IF w%<82 AND h%<72 THEN SCw=1:SCh=1
11880ENDIF
11890CASE centred OF
11900 WHEN TRUE
11910IF FNvga(mode%) AND NOT force AND h%>72 THEN yoff=0
11920IF FNvga(mode%) AND NOT force AND h%<72 THEN yoff=(72-h%)/2
11930IF FNvga(mode%) AND force THEN yoff=(72-((1/SCh)*h%))
11940IF NOT FNvga(mode%) AND force yoff=(72-((1/SCh)*h%))/2
11950IF NOT FNvga(mode%) AND h%/SCh<36 AND h%<72 THEN yoff=(72-h%)/2
11960IF NOT FNvga(mode%) AND h%/SCh>=35 AND h%>72 THEN yoff=0
11970xoff=82-(SCw*w%)
11980IF force AND h%<w% AND FNvga(mode%) THEN xoff=0
11990IF force AND h%>w% AND FNvga(mode%) THEN yoff=0
12000IF force AND h%=w% AND FNvga(mode%) THEN xoff=10:yoff=0
12010IF force AND h%*2=w% AND NOT FNvga(mode%) THEN xoff=10:yoff=0
12020IF force AND (h%*2)<w% AND NOT FNvga(mode%) THEN xoff=0
12030IF force AND (h%*2)>w% AND NOT FNvga(mode%) THEN yoff=0
12040 ENDCASE
12050WHEN TRUE
12060SCw=82/w%:SCh=72/h%:hscale=1
12070ENDCASE
12080x%=155:y%=33
12090x%=(x%+xpos+(xoff/5))*point:y%=(y%+ypos+(yoff/5))*point
12100width%=((w%*SCw)/1.25)*point:height%=((h%*SCh)*hscale/1.25)*point
12110PROCputw(5)
12120PROChead_here(FALSE)
12130PROCputxy(x%,y%)
12140PROCputxy(x%+width%+1,y%+height%+1)
12150SYS"OS_GBPB",&02,c%,sptr%,!sptr%
12160PROCalign
12170PROChead_now
12180ENDPROC
12190DEFPROCclose(!block)
12200SYS"Wimp_CloseWindow",,block
12210ENDPROC
12220DEFFNcheckit(hnd%,ic%)
12230!icond=hnd%:icond!4=ic%
12240SYS"Wimp_GetIconState",,icond
12250flags%=icond!24
12260=flags%AND&F0000
12270DEFPROCslabicn(handle,icn)
12280icond!12=handle
12290icond!16=2
12300SYS "Wimp_BorderIcon",,icond
12310icond!8=0
12320SYS "Wimp_BorderIcon",,icond
12330ENDPROC
12340DEF PROCslabin(handle)
12350!icond=handle
12360SYS "Wimp_GetPointerInfo",,icond
12370SYS "Wimp_BorderIcon",,icond
12380ENDPROC
12390DEF PROCslabout(handle)
12400!icond=handle
12410SYS "Wimp_GetPointerInfo",,icond
12420icond!8 = 0
12430SYS "Wimp_BorderIcon",,icond
12440ENDPROC
12450DEFPROCselectcol(colno)
12460hex=winpal(colno-14)
12470RED=(hex>>8)AND&FF
12480GREEN=(hex>>16)AND&FF
12490BLUE=(hex>>24)AND&FF
12500!block=colour%
12510SYS"Wimp_GetWindowInfo",,block
12520workx%=block!4-block!20
12530worky%=block!16-block!24
12540SYS "ColourTrans_SetGCOL",hex,,,&100,0
12550RECTANGLE FILL workx%+234,worky%-247,175,48
12560 SYS "Wimp_SetColour",1,1
12570 RECTANGLE FILL workx%+270,worky%-170,344,147
12580 SYS "ColourTrans_SetGCOL",&0000FF00,,,&100,0
12590 RECTANGLE FILL workx%+271,worky%-55,(RED/255)*344,32
12600 SYS "ColourTrans_SetGCOL",&00FF0000,,,&100,0
12610 RECTANGLE FILL workx%+271,worky%-111,(GREEN/255)*344,32
12620 SYS "ColourTrans_SetGCOL",&FF000000,,,&100,0
12630 RECTANGLE FILL workx%+271,worky%-167,(BLUE/255)*344,32
12640 SYS "ColourTrans_SetGCOL",0,,,&100,0:RECTANGLE workx%+233,worky%-248,176,49
12650 RECTANGLE workx%+270,worky%-58,344,34
12660 RECTANGLE workx%+270,worky%-114,344,34
12670 RECTANGLE workx%+270,worky%-170,344,34
12680geecol=hex
12690 PROCinfo(colour%,3,STR$RED)
12700 PROCinfo(colour%,7,STR$GREEN)
12710 PROCinfo(colour%,11,STR$BLUE)
12720ENDPROC
12730DEFPROCapplication_redraw2
12740RED=(hex>>8)AND&FF
12750GREEN=(hex>>16)AND&FF
12760BLUE=(hex>>24)AND&FF
12770workx%=block!4-block!20
12780worky%=block!16-block!24
12790SYS "ColourTrans_SetGCOL",hex,,,&100,0
12800RECTANGLE FILL workx%+234,worky%-247,175,48
12810SYS "Wimp_SetColour",1,1
12820 RECTANGLE FILL workx%+270,worky%-170,344,147
12830 SYS "ColourTrans_SetGCOL",&0000FF00,,,&100,0
12840 RECTANGLE FILL workx%+271,worky%-55,(RED/255)*344,32
12850 SYS "ColourTrans_SetGCOL",&00FF0000,,,&100,0
12860 RECTANGLE FILL workx%+271,worky%-111,(GREEN/255)*344,32
12870 SYS "ColourTrans_SetGCOL",&FF000000,,,&100,0
12880 RECTANGLE FILL workx%+271,worky%-167,(BLUE/255)*344,32
12890SYS "ColourTrans_SetGCOL",0,,,&100,0:RECTANGLE workx%+233,worky%-248,176,49
12900RECTANGLE workx%+270,worky%-58,344,34
12910RECTANGLE workx%+270,worky%-114,344,34
12920RECTANGLE workx%+270,worky%-170,344,34
12930geecol=hex
12940ENDPROC
12950 DEFPROCdragcol
12960 !block=colour%
12970SYS"Wimp_GetWindowInfo",,block
12980workx%=block!4-block!20
12990worky%=block!16-block!24
13000 MOUSE r,s,t
13010 IF r>workx%+268 AND r<workx%+268+348 AND s>worky%-58 AND s<worky%-(58-35) THEN
13020 MOUSE RECTANGLE workx%+270,worky%-57,344,30
13030nred=INT(((r-(workx%+270))/344)*255)
13040IF nred=-1 nred=0
13050PROCinfo(colour%,3,STR$nred)
13060RED=nred
13070SYS "Wimp_SetColour",1,1
13080RECTANGLE FILL workx%+272+(RED/255)*344,worky%-55,342-(RED/255)*344,30
13090SYS "ColourTrans_SetGCOL",&0000FF00,,,&100,0
13100RECTANGLE FILL workx%+270,worky%-55,(RED/255)*344,30
13110SYS "ColourTrans_SetGCOL",0,,,&100,0
13120RECTANGLE workx%+270,worky%-58,344,34
13130hex=(BLUE<<24)+(GREEN<<16)+(RED<<8)
13140SYS "ColourTrans_SetGCOL",hex,,,&100,0
13150RECTANGLE FILL workx%+234,worky%-247,175,48
13160SYS "ColourTrans_SetGCOL",0,,,&100,0:RECTANGLE workx%+233,worky%-248,176,49
13170MOUSE r,s,t:IF t=1 OR t=4 PROCdragcol
13180PROCMode
13190MOUSE RECTANGLE 0,0,xmax-1,ymax-1
13200 ENDPROC
13210ENDIF
13220IF r>workx%+268 AND r<workx%+268+348 AND s>worky%-114 AND s<worky%-(114-35) THEN
13230MOUSE RECTANGLE workx%+270,worky%-112,344,30
13240ngreen=INT(((r-(workx%+270))/344)*255)
13250IF ngreen=-1 ngreen=0
13260PROCinfo(colour%,7,STR$ngreen)
13270GREEN=ngreen
13280SYS "Wimp_SetColour",1,1
13290RECTANGLE FILL workx%+272+(GREEN/255)*344,worky%-111,342-(GREEN/255)*344,30
13300SYS "ColourTrans_SetGCOL",&00FF0000,,,&100,0
13310RECTANGLE FILL workx%+271,worky%-111,(GREEN/255)*344,30
13320SYS "ColourTrans_SetGCOL",0,,,&100,0
13330RECTANGLE workx%+270,worky%-114,344,34
13340hex=(BLUE<<24)+(GREEN<<16)+(RED<<8)
13350SYS "ColourTrans_SetGCOL",hex,,,&100,0
13360RECTANGLE FILL workx%+234,worky%-247,175,48
13370SYS "ColourTrans_SetGCOL",0,,,&100,0:RECTANGLE workx%+233,worky%-248,176,49
13380MOUSE r,s,t:IF t=1 OR t=4 PROCdragcol
13390PROCMode
13400MOUSE RECTANGLE 0,0,xmax-1,ymax-1
13410ENDPROC
13420ENDIF
13430IF r>workx%+268 AND r<workx%+268+348 AND s>worky%-170 AND s<worky%-(170-35) THEN
13440MOUSE RECTANGLE workx%+270,worky%-168,344,30
13450nblue=INT(((r-(workx%+270))/344)*255)
13460IF nblue=-1 nblue=0
13470BLUE=nblue
13480PROCinfo(colour%,11,STR$nblue)
13490SYS "Wimp_SetColour",1,1
13500RECTANGLE FILL workx%+272+(BLUE/255)*344,worky%-167,342-((BLUE/255)*344),30
13510SYS "ColourTrans_SetGCOL",&FF000000,,,&100,0
13520RECTANGLE FILL workx%+270,worky%-167,(BLUE/255)*344,30
13530SYS "ColourTrans_SetGCOL",0,,,&100,0
13540RECTANGLE workx%+270,worky%-170,344,34
13550hex=(BLUE<<24)+(GREEN<<16)+(RED<<8)
13560SYS "ColourTrans_SetGCOL",hex,,,&100,0
13570RECTANGLE FILL workx%+234,worky%-247,175,48
13580SYS "ColourTrans_SetGCOL",0,,,&100,0:RECTANGLE workx%+233,worky%-248,176,49
13590REM Blue
13600MOUSE r,s,t:IF t=1 OR t=4 PROCdragcol
13610PROCMode
13620MOUSE RECTANGLE 0,0,xmax-1,ymax-1
13630ENDPROC
13640ENDIF
13650ENDPROC
13660DEFPROCapp_re3
13670 workx%=block!4-block!20
13680 worky%=block!16-block!24
13690SYS "ColourTrans_SetGCOL",hexc(1),,,&100,0
13700RECTANGLE FILL workx%+1122,worky%-58,50,42
13710SYS "ColourTrans_SetGCOL",hexc(2),,,&100,0
13720RECTANGLE FILL workx%+1122,worky%-116,50,42
13730SYS "ColourTrans_SetGCOL",hexc(3),,,&100,0
13740RECTANGLE FILL workx%+1122,worky%-180,50,42
13750SYS "ColourTrans_SetGCOL",hexc(4),,,&100,0
13760RECTANGLE FILL workx%+1122,worky%-430,50,42
13770IF curspr$<>"" THEN
13780curss$=curspr$
13790IF LENcurss$<12 THEN
13800REPEAT
13810curss$+=CHR$0
13820UNTIL LENcurss$=12
13830SYS "ColourTrans_SetGCOL",hexc(0),,,&100,0
13840RECTANGLE FILL workx%+400,worky%-352,163,144
13850SYS &2E,256+40,spr%,curspr$ TO A,B,C,w%,h%,D,mode%
13860SYS"OS_ReadModeVariable",mode%,3 TOc,cl,cols
13870SYS"OS_ReadModeVariable",mode%,4 TO,,xeig%
13880SYS"OS_ReadModeVariable",mode%,5 TO,,yeig%
13890wi%=w%<<xeig%
13900he%=h%<<yeig%
13910IF spr%!4>0 THEN
13920next=spr%!8
13930REPEAT
13940add=next+4
13950offset=spr%!add
13960name$=""
13970REPEAT
13980name$+=CHR$spr%!add
13990add+=1
14000UNTIL add=next+16
14010old=next
14020next+=spr%!next
14030UNTIL curss$=name$
14040IF spr%!(32+old)>44 THEN
14050FOR col%=0 TO 15
14060palette%!(col%*4)=!(old+44+col%*8+spr%)
14070NEXT col%
14080SYS "ColourTrans_SelectTable",!(40+old+spr%),palette%,-1,-1,scalblok%
14090ELSE
14100SYS "ColourTrans_SelectTable",!(40+old+spr%),defpal%,-1,-1,scalblok%
14110ENDIF
14120ENDIF
14130xoff=0:yoff=0
14140IF FNvga(mode%) THEN
14150IF h%>w% shear=72 ELSE shear=82
14160ELSE
14170IF (h%*2)>w% shear=36 ELSE shear=82
14180ENDIF
14190SYS"OS_ReadModeVariable",MODE,11 TO,,C
14200SYS"OS_ReadModeVariable",MODE,12 TO,,B
14210C+=1:B+=1
14220IF B/C=.8 AND FNvga(mode%) THEN hscale=1: REM 1 means VGA, square pixels
14230IF B/C=.75 AND FNvga(mode%) THEN hscale=1
14240IF B/C<>.8 AND B/C<>.75 AND FNvga(mode%) hscale=2
14250IF B/C=.8 OR B/C=.75 THEN modsc=1 ELSE modsc=2
14260Shear=FNcheckflag(details%,29,21)
14270CASE Shear OF
14280WHEN FALSE
14290IF B/C=.8 AND NOT FNvga(mode%) THEN hscale=1
14300IF B/C=.75 AND NOT FNvga(mode%) THEN hscale=1
14310IF B/C<>.8 AND B/C<>.75 AND NOT FNvga(mode%) hscale=2
14320IF FNvga(mode%) AND w%>82 AND h%>72 AND h%<w% THEN SCw=w%/82:SCh=w%/82
14330IF FNvga(mode%) AND w%>82 AND h%>72 AND h%>w% THEN SCh=h%/72:SCw=SCh
14340IF NOT FNvga(mode%) AND w%>82 AND h%*2>72 AND h%*2<w% THEN SCw=(w%/82):SCh=SCw*hscale
14350IF NOT FNvga(mode%) AND w%>82 AND h%*2>72 AND h%*2>w% THEN SCh=(h%/(72/hscale))*2:SCw=(h%/72)*2
14360IF w%>82 AND h%<72 THEN SCw=w%/shear:SCh=1
14370IF w%<82 AND h%>72 THEN SCw=1:SCh=h%/(shear/hscale)
14380IF force THEN
14390IF w%<82 AND h%<72 AND h%=w% AND FNvga(mode%) THEN SCh=h%/(72/hscale):SCw=w%/72
14400IF w%<82 AND h%<72 AND h%<w% AND FNvga(mode%) THEN SCw=w%/shear:SCh=w%/(shear/hscale)
14410IF w%<82 AND h%<72 AND h%>w% AND FNvga(mode%) THEN SCw=h%/shear:SCh=h%/(shear/hscale)
14420IF w%<82 AND h%<72 AND h%*2=w% AND NOT FNvga(mode%) THEN SCh=h%/(36/hscale):SCw=w%/72
14430IF w%<82 AND h%<36 AND (h%*2)<w% AND NOT FNvga(mode%) THEN SCw=w%/shear:SCh=w%/(shear/hscale)
14440IF w%<82 AND h%<36 AND (h%*2)>w% AND NOT FNvga(mode%) THEN SCw=h%/shear:SCh=h%/(shear/hscale)
14450ELSE
14460IF w%<82 AND h%<72 THEN SCw=1:SCh=modsc
14470ENDIF
14480 CASE centred OF
14490 WHEN TRUE
14500 IF FNvga(mode%) AND NOT force AND h%*SCh=72 THEN yoff=0
14510 IF FNvga(mode%) AND NOT force AND h%*SCh<70 THEN yoff=72-(h%*SCh)
14520 IF FNvga(mode%) AND force THEN yoff=(72-((1/SCh)*h%))
14530 IF NOT FNvga(mode%) AND force yoff=(72-((1/SCh)*h%))/2
14540 IF NOT FNvga(mode%) AND h%/SCh<36 THEN yoff=INT(36-(h%/SCh))*2
14550 IF NOT FNvga(mode%) AND h%/SCh>=35 THEN yoff=0
14560 xoff=(82-((1/SCw)*w%))
14570 IF force AND h%>72 AND w%>82 AND h%<w% AND FNvga(mode%) THEN xoff=0
14580 IF force AND h%>72 AND w%>82 AND h%>w% AND FNvga(mode%) THEN yoff=0
14590 IF force AND h%=w% AND FNvga(mode%) THEN xoff=10:yoff=0
14600 IF force AND h%*2=w% AND NOT FNvga(mode%) THEN xoff=10:yoff=0
14610 IF force AND h%*2>72 AND w%>82 AND (h%*2)<w% AND NOT FNvga(mode%) THEN xoff=0
14620 IF force AND h%*2>72 AND w%>82 AND (h%*2)>w% AND NOT FNvga(mode%) THEN yoff=0
14630 ENDCASE
14640WHEN TRUE
14650IF B/C=.8 AND NOT FNvga(mode%) THEN hscale=2
14660IF B/C=.75 AND NOT FNvga(mode%) THEN hscale=2
14670IF B/C<>.8 AND B/C<>.75 AND NOT FNvga(mode%) hscale=4
14680SCw=w%/82:SCh=h%/(72/hscale)
14690ENDCASE
14700!scal%=wi%:scal%!4=he%:scal%!8=INT((w%/((1/SCw)/2))+0.5):scal%!12=INT((h%/((1/SCh)/2))+0.5)
14710SYS 46,&134,spr%,curspr$,workx%+400+xoff,worky%-352+yoff,8,scal%,scalblok%
14720ENDIF
14730ENDPROC
14740DEFPROCaddcol
14750hexc(io)=hex
14760PROCclose(colour%)
14770 !block=details%
14780 SYS"Wimp_GetWindowInfo",,block
14790 workx%=block!4-block!20
14800 worky%=block!16-block!24
14810 CASE io OF
14820 WHEN 1:
14830 SYS"Wimp_ForceRedraw",-1,workx%+1120,worky%-58,workx%+1180,worky%-10
14840 PROCredraw(card%)
14850 WHEN 2:
14860 SYS"Wimp_ForceRedraw",-1,workx%+1120,worky%-120,workx%+1180,worky%-72
14870 PROCredraw(card%)
14880 WHEN 3:
14890 SYS"Wimp_ForceRedraw",-1,workx%+1120,worky%-182,workx%+1180,worky%-134
14900 PROCredraw(card%)
14910 WHEN 4:
14920 SYS"Wimp_ForceRedraw",-1,workx%+1120,worky%-430,workx%+1180,worky%-382
14930 PROCredraw(card%)
14940 WHEN 0:
14950 SYS"Wimp_ForceRedraw",-1,workx%+400,worky%-352,workx%+564,worky%-210
14960 PROCredraw(card%)
14970 ENDCASE
14980ENDPROC
14990DEFPROCdrawsprite
15000IF curspr$="" ENDPROC
15010!block=details%
15020SYS"Wimp_GetWindowInfo",,block
15030workx%=block!4-block!20
15040worky%=block!16-block!24
15050SYS"Wimp_ForceRedraw",-1,workx%+400,worky%-352,workx%+564,worky%-208
15060!block=card%
15070SYS"Wimp_GetWindowState",,block
15080open=block!32 AND (1<<16)
15090IF open<>0 THEN
15100!block=card%
15110SYS"Wimp_GetWindowInfo",,block
15120workx%=block!4-block!20
15130worky%=block!16-block!24
15140SYS"Wimp_ForceRedraw",-1,workx%+390,worky%-300,workx%+564,worky%-156
15150ENDIF
15160ENDIF
15170ENDPROC
15180DEFFNclaim(amount%)
15190SYS"OS_Heap",6,heap%,sppool% TO ,,,ohs
15200SYS"OS_Heap",4,heap%,sppool%,1024-ohs TO ,,sppool%
15210IF origheap-hsizeb<0 THEN SYS"OS_Heap",5,heap%,,origheap-hsizeb:hsizeb+=origheap-hsizeb
15220SYS"Wimp_SlotSize",-1,-1 TO current
15230SYS"Wimp_SlotSize",orig,-1
15240ENDIF
15250IF amount%>512 AND amount%<max THEN
15260SYS"OS_Heap",4,heap%,sppool%,amount%-1024 TO ,,sppool%
15270ENDIF
15280IF amount%>512 AND amount%>max THEN
15290SYS"Wimp_SlotSize",orig+(amount%-max)+1024,-1
15300increase=(amount%-hsizeb)DIV4*4+1024
15310SYS"OS_Heap",5,heap%,,increase
15320hsizeb+=increase
15330SYS"OS_Heap",4,heap%,sppool%,amount%-1024 TO ,,sppool%
15340ENDIF
15350=sppool%
15360DEFFNvga(mod)
15370SYS"OS_ReadModeVariable",mod,11 TO,,c
15380SYS"OS_ReadModeVariable",mod,12 TO,,b
15390c+=1:b+=1
15400CASE b/c OF
15410WHEN 0.8:g=TRUE
15420WHEN .75:g=TRUE
15430OTHERWISE: g=FALSE
15440ENDCASE
15450=g
15460DEFPROCareyousure
15470IF NOT savef THEN
15480PROCopenwin(quit%)
15490VDU 7
15500PROCinfo(quit%,1,"Your file has been modified.")
15510!block=130:block!4=131:block!8=-1:SYS"OS_ReadVduVariables",block,block+128
15520SYS"OS_ReadModeVariable",MODE,4 TO ,,x
15530SYS"OS_ReadModeVariable",MODE,5 TO ,,y
15540MOUSE RECTANGLE 0,0,(((block!128)+1)*2^x)-1,((block!132)+1)*2^y
15550ENDIF
15560IF savef SYSreinter,mytask%:SYS"Wimp_CloseDown":END
15570ENDPROC
15580DEFPROCquery(qu$)
15590PROCopenwin(query%)
15600VDU 7
15610!block=query%
15620SYS"Wimp_GetWindowInfo",,block
15630workx%=block!12-block!4
15640worky%=block!16-block!8
15650MOUSE RECTANGLE block!4,block!8,workx%,worky%
15660PROCinfo(query%,1,qu$)
15670ENDPROC
15680DEFPROCendq
15690PROCclose(query%)
15700!block=130:block!4=131:block!8=-1:SYS"OS_ReadVduVariables",block,block+128
15710SYS"OS_ReadModeVariable",MODE,4 TO ,,x
15720SYS"OS_ReadModeVariable",MODE,5 TO ,,y
15730MOUSE RECTANGLE 0,0,(((block!128)+1)*2^x)-1,((block!132)+1)*2^y
15740ENDPROC
15750DEFPROCtitle(handle,new$)
15760!icond=handle
15770SYS"Wimp_GetWindowInfo",,icond
15780title$=$(icond!76)
15790IF new$="" THEN
15800IF RIGHT$(title$,LEN(title$)-LEN(title$)+1)<>"*" THEN new$=title$+" *":ELSE ENDPROC
15810ENDIF
15820_p% = !(icond+76):$_p%=new$:SYS"Wimp_ForceRedraw",-1,icond!4,(icond!16),icond!12,(icond!16)+36
15830ENDPROC
15840DEFPROCprint
15850noofpages=VAL($FNinfo(print%,4))
15860IF $FNinfo(print%,0)="Not Present" THEN PROCquery("Can not print, no printer driver present."):noprint=TRUE:ENDPROC
15870IF FNcheckflag(print%,6,21) THEN copies$="single card.":fullsheet=0:ELSE copies$="full sheet.":fullsheet=1
15880SYS "ColourTrans_SetGCOL",&DDDDDD00,,,&100,0
15890RECTANGLE FILL 288,466,738,194
15900SYS "ColourTrans_SetGCOL",0,,,&100,0
15910RECTANGLE 286,464,740,196
15920SYS"Wimp_CreateMenu",,-1
15930VDU 5
15940MOVE 410,630
15950PRINT "Printing in progress..."
15960MOVE 380,580
15970PRINT "Prining ";noofpages;" copies, ";copies$
15980MOVE 400,530
15990PRINT "Press Escape to cancel"
16000VDU 4
16010printing=TRUE
16020fh%=-1
16030LOCAL ERROR
16040ON ERROR LOCAL:RESTORE ERROR:PROCprinterr:ENDPROC
16050SYS"Hourglass_On"
16060fh%=OPENOUT("printer:")
16070SYS"PDriver_SelectJob",fh% TO job
16080SYS"PDriver_PageSize" TO,,,l%,b%,r%,t%
16090box!0=-10
16100matrix!0=66000:matrix!4=0:matrix!8=0:matrix!12=66000:REM 66000,0,0,66000
16110IF fullsheet=1 origin!0=l%:origin!4=75000:box!8=(290*2.5)+580:box!12=(625*2.5)+400:box!4=-200
16120IF fullsheet=0 origin!0=l%:origin!4=623000:box!8=590:box!12=390:box!4=-10
16130SYS"PDriver_GiveRectangle",0,box,matrix,origin,&FFFFFF00
16140SYS"PDriver_DrawPage",noofpages,box2,0,0 TO more
16150WHILE more<>0
16160PROCdraw
16170SYS"PDriver_GetRectangle",0,box2 TO more
16180ENDWHILE
16190SYS"PDriver_EndJob",fh%
16200CLOSE#fh%
16210SYS"PDriver_SelectJob",job
16220SYS"Hourglass_Smash"
16230SYS"Wimp_ForceRedraw",-1,286,464,740+288,196+466
16240ENDPROC
16250DEFPROCdraw
16260IF fullsheet=1 THEN
16270FOR cardco=1 TO 16 STEP 2
16280PROCdrawcard(cardpos(cardco)*2.5,cardpos(cardco+1)*2.5)
16290PROCcardsprite(cardpos(cardco)*2.5,cardpos(cardco+1)*2.5)
16300NEXT cardco
16310ELSE
16320PROCdrawcard(10,380)
16330PROCcardsprite(10,380)
16340ENDIF
16350ENDPROC
16360DEFPROCdrawcard(pxco,pyco)
16370SYS "ColourTrans_SetGCOL",hexc(0),,,&100,0
16380RECTANGLE FILL pxco+8,pyco-386,566,378
16390SYS "ColourTrans_SetGCOL",0,,,&100,0
16400RECTANGLE pxco+6,pyco-386,568,380
16410RECTANGLE pxco+4,pyco-388,568,380
16420name$=$FNinfo(details%,0):fontname$=$FNinfo(details%,3)
16430sizename=VAL($FNinfo(details%,31)):hname=VAL($FNinfo(details%,13))
16440extra$=$FNinfo(details%,5):fontextra$=$FNinfo(details%,2)
16450sizeextra=VAL($FNinfo(details%,32)):hextra=VAL($FNinfo(details%,14))
16460ad1$=$FNinfo(details%,6):fontad1$=$FNinfo(details%,19)
16470sizead1=VAL($FNinfo(details%,33)):had1=VAL($FNinfo(details%,17))
16480ad2$=$FNinfo(details%,7)
16490ad3$=$FNinfo(details%,18)
16500ad4$=$FNinfo(details%,10)
16510tel$=$FNinfo(details%,21):fonttel$=$FNinfo(details%,4)
16520sizetel=VAL($FNinfo(details%,34)):htel=VAL($FNinfo(details%,15))
16530IF sizename=0 THEN sizename=20:PROCmess("Font sizes can not be 0"):nono=1:ns=20:ni=13
16540IF sizeextra=0 THEN sizeextra=16:PROCmess("Font sizes can not be 0"):nono=1:ns=16:ni=14
16550IF sizead1=0 THEN sizead1=14:PROCmess("Font sizes can not be 0"):nono=1:ns=14:ni=17
16560IF sizetel=0 THEN sizetel=16:PROCmess("Font sizes can not be 0"):nono=1:ns=16:ni=15
16570font$=fontname$
16580x=FNwidth(name$,fontname$,sizename,hname)
16590IF x=0 AND name$<>"" THEN PROCmess("The name text is too long or the font is too large"):close=1:ENDPROC
16600 xco=566-x:xco=xco/2:
16610 SYS "ColourTrans_SetFontColours",font%,hexc(1),hexc(1)
16620 SYS"Font_Paint",,name$,%10010,pxco+xco+8,pyco-70
16630SYS "ColourTrans_SetGCOL",hexc(1),,,&100,0
16640RECTANGLE FILLpxco+xco+5,pyco-74,566-xco-xco+3,-4
16650font$=fontextra$
16660x=FNwidth(extra$,fontextra$,sizeextra,hextra)
16670IF x=0 AND extra$<>"" THEN PROCmess("The trade text is too long or the font is too large"):close=1:ENDPROC
16680xco=566-x:xco=xco/2
16690 SYS "ColourTrans_SetFontColours",font%,hexc(2),hexc(2)
16700SYS"Font_Paint",,extra$,%10010,pxco+xco+8,pyco-130
16710font$=fontad1$
16720x=FNwidth(ad1$,fontad1$,sizead1,had1)
16730IF ad1$>"" AND x=0 OR x>530 THEN PROCmess("The 1st address text is too long or the font is too large"):close=1:ENDPROC
16740 SYS "ColourTrans_SetFontColours",font%,hexc(3),hexc(3)
16750SYS"Font_Paint",,ad1$,%10010,pxco+38,pyco-185
16760x=FNwidth(ad2$,fontad1$,sizead1,had1)
16770IF ad2$>"" AND x=0 OR x>560 THEN PROCmess("The 2nd address text is too long or the font is too large"):close=1:ENDPROC
16780SYS"Font_Paint",,ad2$,%10010,pxco+38,pyco-225
16790x=FNwidth(ad3$,fontad1$,sizead1,had1)
16800IF ad3$>"" AND x=0 OR x>560 THEN PROCmess("The 3rd address text is too long or the font is too large"):close=1:ENDPROC
16810SYS"Font_Paint",,ad3$,%10010,pxco+38,pyco-265
16820x=FNwidth(ad4$,fontad1$,sizead1,had1)
16830IF ad4$>"" AND x=0 OR x>560 THEN PROCmess("The 4th address text is too long or the font is too large"):close=1:ENDPROC
16840SYS"Font_Paint",,ad4$,%10010,pxco+38,pyco-305
16850font$=fonttel$
16860x=FNwidth("Tel :- "+tel$,fonttel$,sizetel,htel)
16870IF x=0 AND tel$<>"" THEN PROCmess("The telephone text is too long or the font is too large"):close=1:ENDPROC
16880xco=566-x:xco-=16
16890 SYS "ColourTrans_SetFontColours",font%,hexc(4),hexc(4)
16900SYS"Font_Paint",,"Tel :- "+tel$,%10010,pxco+xco,pyco-360
16910ENDPROC
16920DEFPROCprinterr
16930IF ERR=17 THEN
16940SYS"PDriver_AbortJob",fh%:
16950REM SYS"PDriver_SelectJob",job:
16960CLOSE#fh%
16970PROCmess("Escape: Print Canceled")
16980SYS"OS_ReadModeVariable",MODE,4 TO ,,x
16990SYS"OS_ReadModeVariable",MODE,5 TO ,,y
17000MOUSE RECTANGLE 0,0,(((block!128)+1)*2^x)-1,((block!132)+1)*2^y
17010SYS"Hourglass_Smash"
17020SYS"Wimp_ForceRedraw",-1,286,464,740+288,196+466
17030ENDPROC
17040ENDIF
17050IF fh%<>-1 THEN SYS"PDriver_AbortJob",fh%:SYS"PDriver_SelectJob",job:CLOSE#fh%
17060SYS"Hourglass_Smash"
17070SYS"OS_ReadModeVariable",MODE,4 TO ,,x
17080SYS"OS_ReadModeVariable",MODE,5 TO ,,y
17090MOUSE RECTANGLE 0,0,(((block!128)+1)*2^x)-1,((block!132)+1)*2^y
17100SYS"Wimp_ForceRedraw",-1,286,464,740+288,196+466
17110PROCerror(REPORT$+": at line "+STR$ERL+" whilst printing"):ENDPROC
17120ENDPROC
17130DEFPROCmorecopies
17140IF VAL($FNinfo(print%,4))=99 THEN ENDPROC
17150PROCinfo(print%,4,STR$(VAL$FNinfo(print%,4)+1))
17160ENDPROC
17170DEFPROClesscopies
17180IF VAL($FNinfo(print%,4))=1 THEN ENDPROC
17190PROCinfo(print%,4,STR$(VAL$FNinfo(print%,4)-1))
17200ENDPROC
17210DEFPROCupanddown(icn)
17220!block=colour%:SYS"Wimp_GetWindowInfo",,block
17230workx%=block!4-block!20
17240worky%=block!16-block!24
17250valuer=VAL$FNinfo(colour%,3)
17260valueg=VAL$FNinfo(colour%,7)
17270valueb=VAL$FNinfo(colour%,11)
17280CASE icn OF
17290WHEN 1:
17300IF valuer>0 PROCinfo(colour%,3,STR$(valuer-1)):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
17310WHEN 2:
17320IF valuer<255 PROCinfo(colour%,3,STR$(valuer+1)):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
17330WHEN 5:
17340IF valueg>0 PROCinfo(colour%,7,STR$(valueg-1)):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
17350WHEN 6:
17360IF valueg<255 PROCinfo(colour%,7,STR$(valueg+1)):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
17370WHEN 9:
17380IF valueb>0 PROCinfo(colour%,11,STR$(valueb-1)):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
17390WHEN 10:
17400IF valueb<255 PROCinfo(colour%,11,STR$(valueb+1)):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
17410ENDCASE
17420ENDPROC
17430DEFPROCsetper
17440RED=(hex>>8)AND&FF
17450GREEN=(hex>>16)AND&FF
17460BLUE=(hex>>24)AND&FF
17470PROCinfo(colour%,3,STR$RED)
17480PROCinfo(colour%,7,STR$GREEN)
17490PROCinfo(colour%,11,STR$BLUE)
17500PROCopenwin(colour%)
17510!block=colour%:SYS"Wimp_GetWindowInfo",,block
17520workx%=block!4-block!20
17530worky%=block!16-block!24
17540SYS"Wimp_ForceRedraw",-1,workx%+270,worky%-170,workx%+614,worky%-24
17550SYS"Wimp_ForceRedraw",-1,workx%+234,worky%-247,workx%+410,worky%-199
17560ENDPROC
17570
17580
%� � �error(�$+" : at line "+Þ):�
� ***>$.!Card2.!RunImage
8� ***Main Program for !Card2 - Business Card creator
(4� Version 2.05 (17 April '94) - Debugged Version
2� � J. Robbins
<c� block 10*1024, mblock 1024, menu% 6*1024, curbuf% 5*1024, icond 5*1024, q% 1024, text% &1000
Fmaxlev%=32
P#� start%(maxlev%),box%(maxlev%)
Z5� l%(maxlev%),b%(maxlev%),r%(maxlev%),t%(maxlev%)
d� hexc(4),defpal% 255
nJ� scal% 20,scalblok% 255,temp% 100,palette% 255,winpal(15),cardpos(16)
x/� matrix 100, origin 100, box 100, box2 100
�� c=1 � 16
�� a
�cardpos(c)=a
��
� hexc(0)=&FFFFFF00
�� 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
�P� &FFFFFF10,&DDDDDD10,&BBBBBB10,&99999910,&77777710,&55555510,&33333310,&010
�I� &99440010,&EEEE10,&CC0010,&DD10,&BBEEEE10,&885510,&BBFF10,&FFBB0010
F end%=-1:textc=�:cardb=�:hex=0:RED=(hex>>8)�&FF:BLUE=RED:GREEN=RED
endbuf%=curbuf%+&6000
6picmenu3$="":picmenu2$="":picmenu$="":picmenu4$=""
"Vj=0:gee=0:geecus=0:family$="Trinity.Medium":fsize=12:in=�:close=0:nono=0:ns=0:ni=0
,Isavef=�:noprint=�:printing=�:quiting=�:full=�:prequit=�:prequitwait=�
6fmcreated%=�:fcount%=0
@reinter=&81683
JBș "Wimp_Initialise",200,&4B534154,"!Card2" � version%,mytask%
T$ș "Wimp_ClaimInterface",mytask%
^Jend%=�:drag%=0:drive%=0:sfile$="":Shear=�:curspr$="":progneed=112*1024
h`size%=48:font%=-1:family%=0:style%=-1:n_font%=1:noofcards=8:force=�:centred=�:boxit=�:tile=�
r
�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
� max=�-�:max=�(max/1024)*1024
�max-=&4000
�� PRINT TAB(0,0)max
%ș"Wimp_SlotSize",-1,-1 � current
�=�-max:hsizeb=max:heap%=�
� hsizeb<0 � �
&ș"OS_Heap",0,heap%,,hsizeb
0)ș"OS_Heap",2,heap%,,1024 � ,,sppool%
:origheap=hsizeb
D3� print$=" -print" � env$=�env$,�env$-7):noic=1
N>� print$=" -print" � �present:�load(env$):�openwin(print%)
X.� print$<>" -print" � env$<>"" �load(env$)
b� noic=0 � initic=�icon
lș"Hourglass_On"
v�fmenucr
�ș"Hourglass_Off"
��pollit
���pollit
��
�& ș"Wimp_Poll",0,block � eventcode
�. ș "Wimp_PollPointer",eventcode,,version%
�Ȏ eventcode �
�2� 0:� savef � prequit ș"Wimp_ProcessKey",&1FC
�� 1:�redraw(block!0)
�#� 2:ș "Wimp_OpenWindow",,block
�$� 3:ș "Wimp_CloseWindow",,block
�3� noic=1 � șreinter,mytask%:ș"Wimp_CloseDown"
�*� block!0=saved% � prequit � prequit=�
� 6:�click(block)
� 7:�out
� 8:�process
� 9:�select
*� 17,18:�messagein
4�
>� �
H�
R�
\
ݤicon
f
!icond=-1
p
icond!4=0
z%icond!8=0:icond!12=68:icond!16=68
�+icond!20=%11010+((2^12)*3):icond?23=112
�$(icond+24)="!Card2"+�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$
. ȕ ?wool%>=32
8cot$+=�(?wool%)
Bwool%+=1
L�
V =cot$
`��template
j1ș"Wimp_OpenTemplate",,"<Card$Dir>.Templates"
tindir=curbuf%
~info%=�template("ProgInfo")
�save%=�template("save")
�card%=�template("Card")
�!details%=�template("details")
� saved%=�template("savetext")
�print%=�template("print")
� colour%=�template("colours")
�!savepic%=�template("SavePIC")
�query%=�template("query")
�quit%=�template("quitbox")
�ș "Wimp_CloseTemplate"
�stex=�info(save%,1)
�stexd=�info(saved%,1)
stextpic=�info(savepic%,1)
�
ݤtemplate(a$)
Fș"Wimp_LoadTemplate",,block,indir,endbuf%,-1,a$,0 � ,,indir,,,,c%
(2� c%=0 � �mess("Template "+a$+" not found."):�
2block!64=1
<)ș"Wimp_CreateWindow",,block � handle
F=handle
Pݤinfo(handle,icon)
Z�gee(handle,icon)
d
=icond!28
n��info(handle,icon,text$)
x;!block=handle:block!4=icon:ș"Wimp_GetIconState",,block
�)$(block!28)=text$:block!36=�(text$)+1
�block!8=0:block!12=0
� ș"Wimp_SetIconState",,block
��
���gee(handle,icon)
�!icond=handle:icond!4=icon
� ș"Wimp_GetIconState",,icond
��
�
��present
� a$=""
�� �
� � � � a$="Not Present":� �:�
� ș"PDriver_Info" � a,,,,name
ȕ ?name
a$=a$+�(?name)
name+=1
"�
,$�info(print%,0)=a$
6� �
@�
J��cmenus
T�present
^
nogo=�
h gee=0
rmenuopen=-44
|menuptr=menu%
�ȗ x,y,b
�.� block!16=27 � sfile$<>"" � HJK=� � HJK=�
�A� HJK sprmen%=�menu("Sprite List",(largest*14)+40,men$):gee=2
�"picmenu$="Force Scale,Centred"
�0� centred � picmenu$<>"{�}Centred" centred=�
�'� force picmenu4$="{�}Force Scale,"
�&� � force picmenu4$="Force Scale,"
�#� centred picmenu$="{�}Centred"
�"� � centred picmenu$="Centred"
�S� curspr$<>"" iconmenu$="{b|picmenu%}Picture" � iconmenu$="{-|picmenu%}Picture"
�Wpicmenu%=�menu("Picture",190,"{_}Del Pic,{u|savepic%}Save Pic,"+picmenu4$+picmenu$)
�>savemenu%=�menu("Save",174,"{b|save%}Draw,{b|saved%}Data")
�riconmenu%=�menu("!Card",174,"{b|info%}Info,{b|savemenu%}Save,{b|print%}Print,Details,View,"+iconmenu$+",Quit")
idetmenu%=�menu("!Card",174,"{b|info%}Info,{b|savemenu%}Save,{b|print%}Print,View,"+iconmenu$+",Quit")
vviewmenu%=�menu("!Card",174,"{b|info%}Info,{b|savemenu%}Save,{b|print%}Print,Details,Back Col,"+iconmenu$+",Quit")
Ȏ block!12 �
&<� -2:� block!8=2 � openmenu%=iconmenu%:a=x-75:b=(7+2)*48
0M� details%:� HJK � openmenu%=sprmen%:a=x:b=y:� openmenu%=detmenu%:a=x:b=y
:5� card%:� block!8=2 � openmenu%=viewmenu%:a=x:b=y
D:�
N�
X�openmenu(a,b)
b�
l��openmenu(x,y)
v&ș"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$=""
4)menuptr!-24=(menuptr!-24) � %10000000
>=oldmenu
H��thing(m$)
Rm$=�m$,�m$,",")-1)
\i$="":j$=""
f� �m$,"{")>0 �
pi$=�m$,�m$,"}")-1)
zm$=�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$
$�
.�
8��click(block)
Bkeepb%=block!12
L*� �checkit(block!12,block!16)=983040 �
V$�slabin(keepb%):�slabout(keepb%)
`�
j'� quiting � quiting=�:�close(quit%)
t9� block!12=card% � block!8=4 io=0:hex=hexc(0):�setper
~0� block!12=-2 � block!8=4 �openwin(details%)
�-� block!12=-2 � block!8=1 �openwin(card%)
�%� block!12=details% � block!8=2 �
�{� block!16=3 � block!16=2 � block!16=4 � block!16=19 � ȗ x,y,b:gee=1:icy=block!16:ș"Wimp_CreateMenu",,fmenu%,x-75,y:�
��
�� block!8=2 � �cmenus:�
�5� block!12=details% � savef=�:�title(details%,"")
�<� block!12=save% � block!16=2 winsave%=block!12:�defsave
�=� block!12=saved% � block!16=2 winsave%=block!12:�defsave
�?� block!12=savepic% � block!16=2 winsave%=block!12:�defsave
�M� block!12=save% � block!16=0 winsave%=block!12:�save($�info(winsave%,1))
�N� block!12=saved% � block!16=0 winsave%=block!12:�save($�info(winsave%,1))
�P� block!12=savepic% � block!16=0 winsave%=block!12:�save($�info(winsave%,1))
O� block!12=details% � block!16=22 io=1:hex=hexc(io):textc=�:cardb=�:�setper
O� block!12=details% � block!16=23 io=2:hex=hexc(io):textc=�:cardb=�:�setper
O� block!12=details% � block!16=24 io=3:hex=hexc(io):textc=�:cardb=�:�setper
O� block!12=details% � block!16=25 io=4:hex=hexc(io):textc=�:cardb=�:�setper
(?� block!12=details% � block!16>28 � block!16<31 �drawsprite
2I� block!12=colour% � block!16>=14 � block!16<=29 �selectcol(block!16)
<.� block!12=colour% � block!16=13 � �addcol
F6� block!12=colour% � block!16=12 � �close(colour%)
P/� block!12=colour% � block!16=-1 � �dragcol
ZH� block!12=colour% � block!16>0 � block!16<11 � �upanddown(block!16)
d� prequit �
na� block!12=quit% � block!16=0 � ș"Wimp_ProcessKey",&1FC:șreinter,mytask%:ș"Wimp_CloseDown"
x;� block!12=quit% � block!16=2 � �close(quit%):prequit=�
�P� block!12=quit% � block!16=3 � �close(quit%):�openwin(saved%):prequitwait=�
�'� prequit � � prequitwait prequit=�
��
�J� block!12=quit% � block!16=0 � șreinter,mytask%:ș"Wimp_CloseDown":�
�1� block!12=quit% � block!16=2 � �close(quit%)
�B� block!12=quit% � block!16=3 � �close(quit%):�openwin(saved%)
��
�9� block!12=query% � block!16=0 � �close(query%):�endq
�$� block!12=print% � block!16=1 �
�
�print
�5� noic=1 � șreinter,mytask%:ș"Wimp_CloseDown":�
��
�0� block!12=print% � block!16=5 � �morecopies
0� block!12=print% � block!16=3 � �lesscopies
�
!ݤcheckflag(handle,icon,flag)
" bit=�
,!icond=handle:icond!4=icon
6 ș"Wimp_GetIconState",,icond
@"� (icond!24�(1<<flag))>0 bit=�
J=bit
T��setshear(on)
^;!icond=details%:icond!4=29:ș"Wimp_GetIconState",,icond
h� on=1 �
rC=(1<<21):E=(1<<21)
|�
�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,1))
0K� !block=saved% � block!24=13 � winsave%=!block:�save($�info(!block,1))
:M� !block=savepic% � block!24=13 � winsave%=!block:�save($�info(!block,1))
D ș"Wimp_ProcessKey",block!24
N�
X��caret
b$ș"Wimp_GetCaretPosition",,block
l� block!0=details% �
vȎ block!4 �
�
� 0:np=5
�
� 5:np=6
�
� 6:np=7
� � 7:np=18
� � 18:np=10
� � 10:np=21
� � 21:np=0
� � 13:np=14
� � 14:np=17
� � 17:np=15
� � 15:np=0
�; � 31:np=32:�info(details%,13,$�info(details%,block!4))
�; � 32:np=33:�info(details%,14,$�info(details%,block!4))
; � 33:np=34:�info(details%,17,$�info(details%,block!4))
; � 34:np=13:�info(details%,15,$�info(details%,block!4))
�
I ș "Wimp_SetCaretPosition",details%,np,0,0,-1,�($�info(details%,np))
* �
4 �
>��select
H
� gee=1 �
R�� version%>300 � ș"Font_DecodeMenu",0,fmenu%,block,icond,255�,,,,size:$icond=�$icond,size-1):$icond=�$icond,�($icond)-2):$icond=�$icond,�$icond-(�$icond-�$icond,"\"))-1):� ș"Wimp_DecodeMenu",,fmenu%,block,icond
\family$=$icond
f�info(details%,icy,family$)
p�redraw(card%)
z gee=0
��
��
�
� gee=2 �
�,ș"Wimp_DecodeMenu",,sprmen%,block,icond
�curspr$=$icond
��drawsprite
� gee=0
��
��
�.ș"Wimp_DecodeMenu",,openmenu%,block,icond
�
iffy=�
�,� $icond="Quit" � �areyousure:quiting%=�
�+� $icond="Details" � �openwin(details%)
4� $icond="View" � �openwin(card%):�redraw(card%)
)� $icond="Picture.Del Pic" � �killspr
3� $icond="Back Col" � io=0:hex=hexc(io):�setper
$L� $icond="Picture.Force Scale" � iffy � force force=�:iffy=�:�drawsprite
.N� $icond="Picture.Force Scale" � iffy � � force force=�:iffy=�:�drawsprite
8L� $icond="Picture.Centred" � iffy � centred centred=�:iffy=�:�drawsprite
BN� $icond="Picture.Centred" � iffy � � centred centred=�:iffy=�:�drawsprite
L(� $icond="Save.Draw" �openwin(save%)
V)� $icond="Save.Data" �openwin(saved%)
`"ș"Wimp_GetPointerInfo",,block
j� block!8=1 �
t� menuopen=-44 � �cmenus
~"ș"Wimp_CreateMenu",,openmenu%
��
�ș"Wimp_CreateMenu",,-1
��
��
�
��killspr
�(ș"OS_Heap",6,heap%,sppool% � ,,,ohs
�4ș"OS_Heap",4,heap%,sppool%,1024-ohs � ,,sppool%
�V� origheap-hsizeb<0 � ș"OS_Heap",5,heap%,,origheap-hsizeb:hsizeb+=origheap-hsizeb
�%ș"Wimp_SlotSize",-1,-1 � current
�ș"Wimp_SlotSize",orig,-1
��
�sfile$="":curspr$="":spr%=0
!block=details%
!ș"Wimp_GetWindowInfo",,block
workx%=block!4-block!20
worky%=block!16-block!24
(Gș"Wimp_ForceRedraw",-1,workx%+400,worky%-352,workx%+564,worky%-208
2!block=card%
<!ș"Wimp_GetWindowInfo",,block
Fworkx%=block!4-block!20
Pworky%=block!16-block!24
ZGș"Wimp_ForceRedraw",-1,workx%+390,worky%-300,workx%+564,worky%-156
d�
n��mess(mess$)
x !icond=0:$(icond+4)=mess$+�0
�(ș"Wimp_ReportError",icond,1,"!Card"
��
���error(err$)
�
� �=523 �
�%�mess("Font "+font$+" not found")
�Ȏ font$ �
�2� fontname$:�info(details%,3,"Trinity.Medium")
�3� fontextra$:�info(details%,2,"Trinity.Medium")
�2� fontad1$:�info(details%,19,"Trinity.Medium")
�1� fonttel$:�info(details%,4,"Trinity.Medium")
��
��redraw(card%):�pollit
��
M!icond=0:$(icond+4)=err$+"."+" Press OK to continue or Cancel to quit"+�0
/ș"Wimp_ReportError",icond,3,"!Card" � ,but
4� but=2 � șreinter,mytask%:ș"Wimp_CloseDown":�
"�
, ��out
6)� winsave%=save% � stext=stex:ft=&AFF
@+� winsave%=saved% � stext=stexd:ft=&00C
J0� winsave%=savepic% � stext=stextpic:ft=&FF9
T� drive%=1 �
^$ș "Wimp_GetPointerInfo",,mblock
h<win=mblock!12:icon=mblock!16:xout=!mblock:yout=mblock!4:
rPmblock!20=mblock!12:mblock!24=mblock!16:mblock!28=!mblock:mblock!32=mblock!4
|7mblock!12=0:mblock!16=1:mblock!36=1024:mblock!40=ft
�$stext=$�info(winsave%,1)
�$stext=�getleaf($stext)
�)� I=0 � 255:� I?stext<32 � I?stext=13
��
� !mblock=44+4*(1+(�$stext)�4)
�+$(mblock+44)=�bit($stext)+�0:!mblock=60
�Bș "Wimp_SendMessage",17,mblock,mblock!20,mblock!24:� DataSave
�drag%=0
��
��
�
��defsave
� �Mode
�!block=winsave%
#ș "Wimp_GetWindowState",,block
ysize%=block!16-block!8
#x%=block!4:y%=block!8:block!4=2
& ș"Wimp_GetIconState",,block
0#block!8+=x%:block!12+=y%+ysize%
:$block!16+=x%:block!20+=y%+ysize%
D5block!24=0:block!28=0:block!32=xmax:block!36=ymax
N'!block=0:block!4=5:drag%=�:drive%=1
Xș"Wimp_DragBox",,block
b�
l
��Mode
vM!block=130:block!4=131:block!8=-1:ș"OS_ReadVduVariables",block,block+128
�)ș"OS_ReadModeVariable",�,4 � ,,Xeig%
�)ș"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%=saved%
�� �
�X� � � � �=71622:�query("Disc Full"):full=�:� �:�:� � �:�error(�$+" : at line "+Þ):�
endtext%=text%
#$endtext%="Card2 Data File"+�10
endtext%+=16
� curspr$<>"" �
*$endtext%="Sprites"+�10
4endtext%+=8
>c$endtext%=curspr$+�10:endtext%+=�(curspr$)+1:$endtext%=�spr_len%+�(10):endtext%+=�(�spr_len%)+1
H(� centred c$="centred" � c$="origin"
R"� force f$="forced" � f$="s/s"
\� Shear g$="1" � g$="0"
f$endtext%=g$+�10
pendtext%+=2
z$endtext%=c$+�10
�endtext%+=�c$+1
�$endtext%=f$+�10
�endtext%+=�f$+1
��
�*$endtext%="NoSprites"+�10:endtext%+=10
��
�% $endtext%=$�info(details%,3)+�10
�& endtext%+=�($�info(details%,3))+1
�' $endtext%=$�info(details%,0)+�(10)
�& endtext%+=�($�info(details%,0))+1
�( $endtext%=$�info(details%,13)+�(10)
�&endtext%+=�($�info(details%,13))+1
�'$endtext%=$�info(details%,31)+�(10)
&endtext%+=�($�info(details%,31))+1
% $endtext%=$�info(details%,2)+�10
& endtext%+=�($�info(details%,2))+1
$' $endtext%=$�info(details%,5)+�(10)
.& endtext%+=�($�info(details%,5))+1
8( $endtext%=$�info(details%,14)+�(10)
B&endtext%+=�($�info(details%,14))+1
L( $endtext%=$�info(details%,32)+�(10)
V&endtext%+=�($�info(details%,32))+1
`%$endtext%=$�info(details%,19)+�10
j' endtext%+=�($�info(details%,19))+1
t' $endtext%=$�info(details%,6)+�(10)
~& endtext%+=�($�info(details%,6))+1
�( $endtext%=$�info(details%,17)+�(10)
�&endtext%+=�($�info(details%,17))+1
�( $endtext%=$�info(details%,33)+�(10)
�&endtext%+=�($�info(details%,33))+1
�&$endtext%=$�info(details%,7)+�(10)
�%endtext%+=�($�info(details%,7))+1
�'$endtext%=$�info(details%,18)+�(10)
�&endtext%+=�($�info(details%,18))+1
�'$endtext%=$�info(details%,10)+�(10)
�&endtext%+=�($�info(details%,10))+1
�&$endtext%=$�info(details%,4)+�(10)
�%endtext%+=�($�info(details%,4))+1
'$endtext%=$�info(details%,21)+�(10)
&endtext%+=�($�info(details%,21))+1
'$endtext%=$�info(details%,15)+�(10)
&endtext%+=�($�info(details%,15))+1
('$endtext%=$�info(details%,34)+�(10)
2&endtext%+=�($�info(details%,34))+1
<$endtext%=�hexc(0)+�(10)
F endtext%+=�(�hexc(0))+1
P $endtext%=�hexc(1)+�(10)
Z endtext%+=�(�hexc(1))+1
d$endtext%=�hexc(2)+�(10)
n endtext%+=�(�hexc(2))+1
x$endtext%=�hexc(3)+�(10)
� endtext%+=�(�hexc(3))+1
�$endtext%=�hexc(4)+�(10)
� endtext%+=�(�hexc(4))+1
�+ ș"OS_File",0,save$,0,0,text%,endtext%
� �("Settype "+save$+" &0cc")
�� curspr$<>""�
�#ș"OS_File",5,save$ �,,,,length
�ș"OS_Find",&C0,save$ � fs
�+ș"OS_GBPB",1,fs,spr%+4,spr_len%,length
��#fs
��
�� �
�<� save$<>"<Wimp$Scrap>" � savef=�:�title(details%,save$)
�
� winsave%=save% � �makefile
� winsave%=savepic% �
"� �
,^� � � � �=71622:�query("Disc Full"):full=�:� �:�:� � �:�error(�$+" : at line "+Þ):�#ile:�
6%Current=�checkflag(savepic%,3,21)
@Ȏ Current �
J� �:
T%ș 46,&118,spr%,curspr$ � ,,sptr%
^ ș"OS_Find",&80,save$ � ile%
h�#ile%,&01
r�#ile%,0
|�#ile%,0
��#ile%,0
��#ile%,&10
��#ile%,0
��#ile%,0
��#ile%,0
��#ile%,!sptr%+16 � &FF
� �#ile%,(!sptr%+16>>>8) � &FF
�!�#ile%,(!sptr%+16>>>16) � &FF
�!�#ile%,(!sptr%+16>>>24) � &FF
�%ș"OS_GBPB",&02,ile%,sptr%,!sptr%
�ș"OS_Find",0,ile%
�ș"OS_File",&12,save$,&ff9
�� �:
4ș"OS_File",0,save$,0,0,spr%+4,spr%+(spr_len%+4)
ș"OS_File",&12,save$,&ff9
�
&�
03� save$<>"<Wimp$Scrap>" �info(winsave%,1,save$)
:�
D��messagein
Nmblock=block
Xref=mblock!8:task=mblock!4
bȎ mblock!16 �
l[� 8:� � prequit mblock!12=mblock!8:ș"Wimp_SendMessage",19,mblock:prequit=�:�areyousure
v.� 0:șreinter,mytask%:ș"Wimp_CloseDown":�
�� 2:
�� drive%=1 �
��save(�wool(mblock+44))
�mblock!12=ref
�mblock!16=3
�mblock!36=-1
�!mblock=256
�sendm=&400E7
�&ș sendm,18,mblock,task:� DataLoad
��
�� 3:
�l� mblock!40<>&0CC � mblock!40<>&FF9 � �mess("Only CardData files or Sprites can be dropped into here"):�
�in=�
#� mblock!40=&FF9 � �insprites:�
�load(�wool(block+44))
� 5:
� block!40=&0CC �
*block!12=block!8:block!16=4
4sendm=&400E7
>+ș sendm,18,block,block!4:� DataLoadAck
H�load(�wool(block+44))
R�
\�
f�
p��load(load$)
z!ș"OS_Find",&40,load$ � file%
� t$=""
�t$=�readfile
� first$=t$
�q � t$<>"Card Data File" � t$<>"Card2 Data File" � �mess("This is not a Card data file"):ș"OS_Find",0,file%:�
�9� first$="Card Data File" new=FLASE:�loadold:�killspr
�-� first$="Card2 Data File" new=�:�loadnew
�ș"OS_Find",0,file%
�$�info(saved%,1)=load$
�� noic=0 �openwin(details%)
�+� noic=0 savef=�:�title(details%,load$)
�(� noic=0 � curspr$<>"" � �drawsprite
��
�
��loadnew
&� �readfile="Sprites" � �loadspr:�
�killspr
�loadindet
$
� I=0 � 4
.hexc(I)=�(�readfile)
8� I
B�
L
��loadspr
V� curspr$<>"" � �killspr
`curspr$=�readfile
jsfile$="Internal"
tspr_len%=�(�readfile)
~2� �(�readfile)=1 � �setshear(1) � �setshear(0)
�%� �readfile="centred" � centred=�
�"� �readfile="forced" � force=�
��loadindet
�
� I=0 � 4
�hexc(I)=�(�readfile)
�� I
�men$="":largest=0
�spr%=�claim(spr_len%+64)
�$ș"OS_File",5,load$ � ,,,,length
�7ș"OS_GBPB",3,file%,spr%+4,spr_len%,length-spr_len%
�,ș "OS_SpriteOp",&108,spr% � ,,,sprites%
�� i%=0 � sprites%-1
7 ș "OS_SpriteOp",&10D,spr%,temp%,&100,i%+1 � ,,,j%
temp%?j%=13
) � �(men$)<243 � men$=men$+$temp%+","
* � �($temp%)>largest largest=�($temp%)
(�
2men$=�men$,�(men$)-1)
<�
F
��loadold
P�loadindet
Z
� I=1 � 4
d
hexc(I)=0
n�
xhexc(0)=&FFFFFF00
��
���loadindet
��info(details%,3,�readfile)
��info(details%,0,�readfile)
� �info(details%,13,�readfile)
�&� new �info(details%,31,�readfile)
��info(details%,2,�readfile)
��info(details%,5,�readfile)
� �info(details%,14,�readfile)
�&� new �info(details%,32,�readfile)
� �info(details%,19,�readfile)
��info(details%,6,�readfile)
� �info(details%,17,�readfile)
&� new �info(details%,33,�readfile)
�info(details%,7,�readfile)
�info(details%,18,�readfile)
" �info(details%,10,�readfile)
,�info(details%,4,�readfile)
6 �info(details%,21,�readfile)
@ �info(details%,15,�readfile)
J&� new �info(details%,34,�readfile)
T�
^ݤreadfile
h
t$=""
r �
| ș"OS_BGet",,file% � byte%
�8 � byte%=254 ș"OS_Find",0,file%:�openwin(details%):
� t$=t$+�(byte%)
� � byte%=13 � byte%=10
� =�t$,�(t$)-1)
���insprites
� men$="":largest=0
� load$=�wool(block+44)
� sfile$=load$
�'ș "OS_File",5,load$ � ,,,,spr_len%
�spr%=�claim(spr_len%+256)
�!ș "OS_File",&FF,load$,spr%+4
�,ș "OS_SpriteOp",&108,spr% � ,,,sprites%
�� i%=0 � sprites%-1
7 ș "OS_SpriteOp",&10D,spr%,temp%,&100,i%+1 � ,,,j%
temp%?j%=13
) � �(men$)<243 � men$=men$+$temp%+","
&* � �($temp%)>largest largest=�($temp%)
0�
:men$=�men$,�(men$)-1)
Dcurspr$=�men$,�men$,",")-1)
N"�openwin(details%):�drawsprite
X �
b��openwin(handle%)
l!block=handle%
v"ș"Wimp_GetWindowState",,block
�open=block!32 � (1<<16)
�-� block!28<>-1 � open=0 � handle%=card% �
�block!28=-1
�ș"Wimp_OpenWindow",,block
��
��
�
��fmenucr
�� version%>300 �
�fflag%=0
�fflag%+=1<<19
�fflag%+=1<<20
�1ș"Font_ListFonts",,0,fflag%,,0 � r,s,t,A,u,B
�� fmenu% A,fbuf% B
1ș"Font_ListFonts",,fmenu%,fflag%,A,fbuf%,B,1
�
�fmenucrRO2
�
*�
4��fmenucrRO2
>
NULL=0
H� f_p% 900
R!f_p%=NULL
\c%=0
f�
p) ș "Font_ListFonts",,q%,c%,-1 � ,,c%
z" � c%<>-1 � �Family(�Info(q%))
�� c%=-1
�
�� fmenu% 28+24*n_font%
�A$fmenu%="Fonts list":fmenu%!12=&0207:fmenu%!20=40:fmenu%!24=0
�Ffmenu%!28=1:fmenu%!32=-1:fmenu%!36=&07000021:$(fmenu%+40)="System"
�
�&width%=8:p%=fmenu%+28:r%=f_p%:n%=2
�ȕ n%<=n_font%
� p%+=24
� f$=�Info(!r%+12)
� width%=�Max(width%,�(f$)+1)
� !p%=0:p%!8=&07000121
� p%!12=!r%+12
p%!16=-1:p%!20=�(f$)
v%=!r%+4
+ � (!(!r%+8) = 1) � �Info(!v%+4) = "" �
$ p%!4 = -1
. �
8 � p%!4 28+24*!(!r%+8)
B
t%=p%!4
L) $t%=f$:t%!12=&0207:t%!20=40:t%!24=0
V
u%=t%+4
` width2%=�(f$)-2
j � s%=1 � !(!r%+8)
t
u%+=24
~ f$=�Info(!v%+4)
�$ width2%=�Max(width2%,�(f$)+1)
�# !u%=0:u%!4=-1:u%!8=&07000121
� u%!12=!v%+4
� u%!16=-1:u%!20=�(f$)
�
v%=!v%
� �
�% !u%= !u% � &80:t%!16=16*width2%
� �
� r%=!r%
�
n%+=1
��
�&!p%= !p% � &80:fmenu%!16=16*width%
�
� �Family(font$)
"� family$,style$,p%,flag%,pos%
(pos%=�font$,".")
2family$=�font$,pos%-1)
<� pos% = 0 �
F style$=""
P�
Z style$=�font$,pos%+1)
d�
np%=f_p%:flag%=�
xȕ (!p% <> NULL � flag%=�)
�) � family$ = �Info(!p%+12) � flag%= �
� p% =!p%
��
�� flag%=� �
� � p%!0 �(family$)+13
� p%=!p%
�
!p%=NULL
� p%!8=1
� $(p%+12)=family$
� � p%!4 �(style$)+5
� p%=p%!4
�
!p%=NULL
� $(p%+4)=style$
n_font%+=1
�
p%!8=p%!8+1
" p%=p%+4
, ȕ (!p% <> NULL)
6 p%=!p%
@ �
J � p%!0 �(style$)+5
T p%=!p%
^
!p%=NULL
h $(p%+4)=style$
r�
|�
�ݤMax(a%,b%)
�� a%>b% � =a% � =b%
�ݤInfo(p%)
�� a$
� a$=""
�ȕ (?p%<>0 � ?p%<>13)
� a$+=�(?p%)
�
p%+=1
��
�=a$
���redraw(handle)
� block!0=handle
�
�more%
)ș "Wimp_RedrawWindow",,block � more%
ȕ more%
Ȏ handle �
& � card%
0 �application_redraw
: � colour%
D �application_redraw2
N" ș "Wimp_BorderWindow",,block
X � details%
b
�app_re3
l" ș "Wimp_BorderWindow",,block
v
�" ș "Wimp_BorderWindow",,block
� �
�+ ș "Wimp_GetRectangle",,block � more%
��
�%� close=1 � �close(card%):close=0
�%� nono=1 � �info(details%,ni,�ns)
��
���application_redraw
�!block=card%
�!ș"Wimp_GetWindowInfo",,block
�workx%=block!4-block!20
�worky%=block!16-block!24
��drawcard(workx%,worky%)
!�cardsprite(workx%,worky%)
!�
!��cardsprite(cxco,cyco)
! � curspr$<>"" �
!*curss$=curspr$
!4� �curss$<12 �
!>�
!Hcurss$+=�0
!R� �curss$=12
!\�
!f-ș "ColourTrans_SetGCOL",hexc(0),,,&100,0
!p)ȓ Ȑ workx%+390,worky%-300,82*2,72*2
!z4ș &2E,256+40,spr%,curspr$ � A,B,C,w%,h%,D,mode%
!�.ș"OS_ReadModeVariable",mode%,3 �c,cl,cols
!�,ș"OS_ReadModeVariable",mode%,4 �,,xeig%
!�,ș"OS_ReadModeVariable",mode%,5 �,,yeig%
!�wi%=w%<<xeig%
!�he%=h%<<yeig%
!�� spr%!4>0 �
!�next=spr%!8
!��
!�add=next+4
!�offset=spr%!add
!�name$=""
!��
!�name$+=�spr%!add
"
add+=1
"� add=next+16
"old=next
"$next+=spr%!next
".� curss$=name$
"8� spr%!(32+old)>44 �
"B� col%=0 � 15
"L+palette%!(col%*4)=!(old+44+col%*8+spr%)
"V
� col%
"`Hș "ColourTrans_SelectTable",!(40+old+spr%),palette%,-1,-1,scalblok%
"j�
"tGș "ColourTrans_SelectTable",!(40+old+spr%),defpal%,-1,-1,scalblok%
"~�
"��
"�xoff=0:yoff=0
"�� h%>w% shear=72 � shear=82
"�%ș"OS_ReadModeVariable",�,11 �,,C
"�%ș"OS_ReadModeVariable",�,12 �,,B
"�
C+=1:B+=1
"�&� B/C=.75 � �vga(mode%) � hscale=1
"�/� B/C<>.8 � B/C<>.75 � �vga(mode%) hscale=2
"�*� B/C=.8 � B/C=.75 � modsc=1 � modsc=2
"�$Shear=�checkflag(details%,29,21)
"�Ȏ Shear �
"�� �
# '� B/C=.8 � � �vga(mode%) � hscale=1
#
(� B/C=.75 � � �vga(mode%) � hscale=1
#1� B/C<>.8 � B/C<>.75 � � �vga(mode%) hscale=2
#=� �vga(mode%) � w%>82 � h%>72 � h%<w% � SCw=w%/82:SCh=SCw
#(=� �vga(mode%) � w%>82 � h%>72 � h%>w% � SCh=h%/72:SCw=SCh
#2J� � �vga(mode%) � w%>82 � h%*2>72 � h%*2<w% � SCw=w%/82:SCh=SCw*hscale
#<V� � �vga(mode%) � w%>82 � h%*2>72 � h%*2>w% � SCh=(h%/(72/hscale))*2:SCw=(h%/72)*2
#F(� w%>82 � h%<72 � SCw=w%/shear:SCh=1
#P1� w%<82 � h%>72 � SCw=1:SCh=h%/(shear/hscale)
#Z
� force �
#dH� w%<82 � h%<72 � h%=w% � �vga(mode%) � SCh=h%/(72/hscale):SCw=w%/72
#nN� w%<82 � h%<72 � h%<w% � �vga(mode%) � SCw=w%/shear:SCh=w%/(shear/hscale)
#xN� w%<82 � h%<72 � h%>w% � �vga(mode%) � SCw=h%/shear:SCh=h%/(shear/hscale)
#�L� w%<82 � h%<72 � h%*2=w% � � �vga(mode%) � SCh=h%/(36/hscale):SCw=w%/72
#�T� w%<82 � h%<36 � (h%*2)<w% � � �vga(mode%) � SCw=w%/shear:SCh=w%/(shear/hscale)
#�T� w%<82 � h%<36 � (h%*2)>w% � � �vga(mode%) � SCw=h%/shear:SCh=h%/(shear/hscale)
#��
#�%� w%<82 � h%<72 � SCw=1:SCh=modsc
#��
#�Ȏ centred �
#� � �
#�1 � �vga(mode%) � � force � h%*SCh=72 � yoff=0
#�; � �vga(mode%) � � force � h%*SCh<70 � yoff=72-(h%*SCh)
#�3 � �vga(mode%) � force � yoff=(72-((1/SCh)*h%))
#�5 � � �vga(mode%) � force yoff=(72-((1/SCh)*h%))/2
#�8 � � �vga(mode%) � h%/SCh<36 � yoff=�(36-(h%/SCh))*2
$* � � �vga(mode%) � h%/SCh>=35 � yoff=0
$ xoff=(82-((1/SCw)*w%))
$; � force � h%>72 � w%>82 � h%<w% � �vga(mode%) � xoff=0
$"; � force � h%>72 � w%>82 � h%>w% � �vga(mode%) � yoff=0
$,3 � force � h%=w% � �vga(mode%) � xoff=10:yoff=0
$67 � force � h%*2=w% � � �vga(mode%) � xoff=10:yoff=0
$@C � force � h%*2>72 � w%>82 � (h%*2)<w% � � �vga(mode%) � xoff=0
$JC � force � h%*2>72 � w%>82 � (h%*2)>w% � � �vga(mode%) � yoff=0
$T �
$^� �
$h'� B/C=.8 � � �vga(mode%) � hscale=2
$r(� B/C=.75 � � �vga(mode%) � hscale=2
$|1� B/C<>.8 � B/C<>.75 � � �vga(mode%) hscale=4
$� SCw=w%/82:SCh=h%/(72/hscale)
$��
$�[!scal%=wi%:scal%!4=he%:scal%!8=�((w%/((1/SCw)/2))+0.5):scal%!12=�((h%/((1/SCh)/2))+0.5)
$�Iș 46,&134,spr%,curspr$,cxco+390+xoff,cyco-300+yoff,8,scal%,scalblok%
$��
$��
$�ݤwidth(text$,font$,xs,ys)
$�1ș "Font_FindFont",,font$,xs*16,ys*16 � font%
$�ș "Font_SetFont",font%
$�Dș "Font_StringWidth",,text$,228000,228000,31,�(text$) � ,,x%,y%
$�'ș "Font_ConverttoOS",,x%,y% � ,x,y
$�=x
$���makefile
%ș"Hourglass_On"
%� �
%u� � � � �=71622:�query("Disc Full"):full=�:�#c%:�("Delete "+save$):� �:�:� � �:�error(�$+" : at line "+Þ):�#c%:�
%&6� �checkflag(save%,3,21) noofcards=1 � noofcards=8
%0big%=&7FFFFFFF
%:EF=0.552256944
%D
i%=0:c%=0
%Ninch=&B400
%X
point=640
%bcm=18140
%lblack%=0
%vwhite%=&FFFFFF00
%�none%=-1
%�9name$=$�info(details%,0):fontname$=$�info(details%,3)
%�@sizename=�($�info(details%,31)):hname=�($�info(details%,13))
%�;extra$=$�info(details%,5):fontextra$=$�info(details%,2)
%�Bsizeextra=�($�info(details%,32)):hextra=�($�info(details%,14))
%�8ad1$=$�info(details%,6):fontad1$=$�info(details%,19)
%�>sizead1=�($�info(details%,33)):had1=�($�info(details%,17))
%�ad2$=$�info(details%,7)
%�ad3$=$�info(details%,18)
%�ad4$=$�info(details%,10)
%�8tel$=$�info(details%,21):fonttel$=$�info(details%,4)
%�>sizetel=�($�info(details%,34)):htel=�($�info(details%,15))
%��drawfile_start(save$)
&�putw(0)
&�head_here(�)
&�puts(�(1)+fontname$)
& �puts(�(2)+fontextra$)
&*�puts(�(3)+fontad1$)
&4�puts(�(4)+fonttel$)
&>
�align
&H
�head_now
&R�
&\ � noofcards=8 � �group_start
&f"� carddraw=1 � noofcards*2 � 2
&p/ax=cardpos(carddraw):by=cardpos(carddraw+1)
&zxpos=ax:ypos=by
&��group_start
&�'�path_start(0,0,1*point,&0,hexc(0))
&��path_draw(0,152)
&��path_draw(228,152)
&��path_draw(228,0)
&��path_draw(0,0)
&��path_close
&�
�path_end
&�4xco=(2/5)*�width(name$,fontname$,sizename,hname)
&�z� x/(2/5)=0 � name$<>"" � �mess("The name text is too long or the font is too large"):�drawfile_end:�"Delete "+save$:�
&�xco=228-xco
&�
xco=xco/2
&��group_start
'C�text(xco,126,name$,sizename*&280,hname*&280,1,hexc(1),hexc(1))
'&start=xco-2:finish=xco+((2/5)*x)+2
'5�path_start(start,123,1.5*&280,hexc(1),&FFFFFFFF)
'$�path_draw(finish,123)
'.�path_close
'8
�path_end
'B�group_end
'L�group_start
'V(x=�width(ad1$,fontad1$,sizead1,had1)
'`�� ad1$>"" � x=0 � x>560 � �mess("The 1st address text is too long or the font is too large"):�drawfile_end:�"Delete "+save$:�
'j>�text(13,81,ad1$,sizead1*&280,had1*&280,3,hexc(3),hexc(3))
't(x=�width(ad2$,fontad1$,sizead1,had1)
'~�� ad2$>"" � x=0 � x>560 � �mess("The 2nd address text is too long or the font is too large"):�drawfile_end:�"Delete "+save$:�
'�>�text(13,65,ad2$,sizead1*&280,had1*&280,3,hexc(3),hexc(3))
'�(x=�width(ad3$,fontad1$,sizead1,had1)
'��� ad3$>"" � x=0 � x>560 � �mess("The 3rd address text is too long or the font is too large"):�drawfile_end:�"Delete "+save$:�
'�>�text(13,49,ad3$,sizead1*&280,had1*&280,3,hexc(3),hexc(3))
'�(x=�width(ad4$,fontad1$,sizead1,had1)
'��� ad4$>"" � x=0 � x>560 � �mess("The 4th address text is too long or the font is too large"):�drawfile_end:�"Delete "+save$:�
'�>�text(13,33,ad4$,sizead1*&280,had1*&280,3,hexc(3),hexc(3))
'��group_end
'�8xco=(2/5)*�width(extra$,fontextra$,sizeextra,hextra)
'�|� x/(2/5)=0 � extra$<>"" � �mess("The trade text is too long or the font is too large"):�drawfile_end:�"Delete "+save$:�
'�xco=228-xco:xco=xco/2:
'�F�text(xco,102,extra$,sizeextra*&280,hextra*&280,2,hexc(2),hexc(2))
( :xco=(2/5)*�width("Tel :- "+tel$,fonttel$,sizetel,htel)
(
~� x/(2/5)=0 � tel$<>"" � �mess("The telephone text is too long or the font is too large"):�drawfile_end:�"Delete "+save$:�
(xco=218-xco
(I�text(xco,10,"Tel :- "+tel$,sizetel*&280,htel*&280,4,hexc(4),hexc(4))
((� curspr$<>"" � �sprite
(2�group_end
(<G� noofcards=8 ș"Hourglass_Percentage",(carddraw/(noofcards*2))*100
(F�
(P�drawfile_end
(Zș"Hourglass_Smash"
(d� �
(n�
(x� �drawfile_start(D$)
(�c%=�(D$)
(�,� c%=0 � � 1234,"Can't open output file"
(�drawfile$=D$
(�(�putw(&77617244):�putw(201):�putw(0)
(��puts12("!Card")
(�lev%=-1
(��head_here(�)
(��
(�� �putw(A%)
(��#c%,A% � &FF
(��#c%,(A%>>>8) � &FF
(��#c%,(A%>>>16) � &FF
(��#c%,(A%>>>24) � &FF
)�
)� �puts12(A$)
)� A%
)"A$=A$+�12," ")
),#� A%=1 � 12:�#c%,�(�A$,A%,1)):�
)6�
)@:
)J� �puts(A$)
)T� A%
)^&� A%=1 � �(A$):�#c%,�(�A$,A%,1)):�
)h
�#c%,0
)r�
)|:
)�� �head_here(box%)
)�V� lev%=maxlev% � � 1234,"Too many nested groups. Edit program to increase limit."
)�lev%+=1
)�box%(lev%)=box%
)�start%(lev%)=�#c%
)�� lev%>0 � �putw(0)
)�� box% �
)� �putw(0):�putw(0)
)� �putw(0):�putw(0)
)��
)�l%(lev%)=big%:b%(lev%)=big%
)�!r%(lev%)=-big%:t%(lev%)=-big%
)��
*:
*� �head_now
*
� end%
*&
end%=�#c%
*0�#c%=start%(lev%)
*:)� lev%>0 � �putw(end%-start%(lev%)+4)
*D� box%(lev%) �
*N$ �putw(l%(lev%)):�putw(b%(lev%))
*X( �putw(r%(lev%)+1):�putw(t%(lev%)+1)
*b�
*l� lev%>0 �
*v lev%-=1
*�0 � l%(lev%+1)<l%(lev%) � l%(lev%)=l%(lev%+1)
*�0 � b%(lev%+1)<b%(lev%) � b%(lev%)=b%(lev%+1)
*�0 � r%(lev%+1)>r%(lev%) � r%(lev%)=r%(lev%+1)
*�0 � t%(lev%+1)>t%(lev%) � t%(lev%)=t%(lev%+1)
*��
*�
�#c%=end%
*��
*�� �align
*�ȕ �#c% � 3:�#c%,0:�
*��
*�� �group_start
*�-� groups cannot be nested in this version
*��putw(6)
+�head_here(�)
+�puts12("group")
+�
+ :
+*� �group_end
+4
�head_now
+>�
+H7� �text(x%,y%,text$,xsize%,ysize%,font%,col%,bcol%)
+R)x%=(x%+xpos)*point:y%=(y%+ypos)*point
+\�putw(1)
+f�head_here(�)
+p�putxy(x%,y%-ysize%*.5)
+z(�putxy(x%+�(text$)*xsize%,y%+ysize%)
+��putw(col%)
+��putw(bcol%)
+��putw(font%)
+��putw(xsize%):�putw(ysize%)
+��putxy(x%,y%)
+��puts(text$):�align
+�
�head_now
+��
+�� �putxy(x%,y%)
+��putw(x%):�putw(y%)
+�� x%<l%(lev%) � l%(lev%)=x%
+�� y%<b%(lev%) � b%(lev%)=y%
+�� x%>r%(lev%) � r%(lev%)=x%
,� y%>t%(lev%) � t%(lev%)=y%
,�
,+� �path_start(x%,y%,width%,lcol%,fcol%)
,$�putw(2)
,.�head_here(�)
,8�putw(fcol%):� fill
,B�putw(lcol%):� colour
,L�putw(width%):� width
,V�putw(0):� path style
,`�path_move(x%,y%)
,j�
,t:
,~� �path_move(x%,y%)
,�)x%=(x%+xpos)*point:y%=(y%+ypos)*point
,��putw(2)
,��putxy(x%,y%)
,��
,�:
,�� �path_draw(xx%,yy%)
,�-xx%=(xx%+xpos)*point:yy%=(yy%+ypos)*point
,��putw(8)
,��putxy(xx%,yy%)
,��
,�� �path_close
,��putw(5)
- �
-
:
-� �path_end
-�putw(0)
-(
�head_now
-2�
-<� �drawfile_end
-F$� draw unfinished IF lev%>0 THEN
-P
�head_now
-Z
�#c%:c%=0
-d"�("SetType "+drawfile$+" AFF")
-n�
-x��sprite
-�%ș 46,&118,spr%,curspr$ � ,,sptr%
-�4ș &2E,256+40,spr%,curspr$ � A,B,C,w%,h%,D,mode%
-�� h%>w% shear=72 � shear=82
-�'� �vga(mode%) � hscale=1:� hscale=2
-�$Shear=�checkflag(details%,29,21)
-�xoff=0:yoff=0
-�Ȏ Shear �
-�� �
-�=� �vga(mode%) � w%>82 � h%>72 � h%<w% � SCw=82/w%:SCh=SCw
-�=� �vga(mode%) � w%>82 � h%>72 � h%>w% � SCh=72/h%:SCw=SCh
-�A� � �vga(mode%) � w%>82 � h%>72 � h%*2<w% � SCw=82/w%:SCh=SCw
-�A� � �vga(mode%) � w%>82 � h%>72 � h%*2>w% � SCh=72/h%:SCw=SCh
-�'� w%>82 � h%<72 � SCw=82/w%:SCh=SCw
.'� w%<82 � h%>72 � SCh=82/h%:SCw=SCh
.
� force �
.?� w%<82 � h%<72 � h%=w% � �vga(mode%) � SCh=72/h%:SCw=72/w%
."?� w%<82 � h%<72 � h%<w% � �vga(mode%) � SCw=82/w%:SCh=82/h%
.,?� w%<82 � h%<72 � h%>w% � �vga(mode%) � SCw=72/h%:SCh=72/h%
.6C� w%<82 � h%<72 � h%*2=w% � � �vga(mode%) � SCh=72/h%:SCw=72/h%
.@E� w%<82 � h%<36 � (h%*2)<w% � � �vga(mode%) � SCw=82/w%:SCh=82/w%
.JE� w%<82 � h%<36 � (h%*2)>w% � � �vga(mode%) � SCw=72/h%:SCh=72/h%
.T�
.^!� w%<82 � h%<72 � SCw=1:SCh=1
.h�
.rȎ centred �
.| � �
.�,� �vga(mode%) � � force � h%>72 � yoff=0
.�4� �vga(mode%) � � force � h%<72 � yoff=(72-h%)/2
.�2� �vga(mode%) � force � yoff=(72-((1/SCh)*h%))
.�4� � �vga(mode%) � force yoff=(72-((1/SCh)*h%))/2
.�8� � �vga(mode%) � h%/SCh<36 � h%<72 � yoff=(72-h%)/2
.�1� � �vga(mode%) � h%/SCh>=35 � h%>72 � yoff=0
.�xoff=82-(SCw*w%)
.�*� force � h%<w% � �vga(mode%) � xoff=0
.�*� force � h%>w% � �vga(mode%) � yoff=0
.�2� force � h%=w% � �vga(mode%) � xoff=10:yoff=0
.�6� force � h%*2=w% � � �vga(mode%) � xoff=10:yoff=0
.�0� force � (h%*2)<w% � � �vga(mode%) � xoff=0
.�0� force � (h%*2)>w% � � �vga(mode%) � yoff=0
/ �
/� �
/ SCw=82/w%:SCh=72/h%:hscale=1
/&�
/0x%=155:y%=33
/:;x%=(x%+xpos+(xoff/5))*point:y%=(y%+ypos+(yoff/5))*point
/DEwidth%=((w%*SCw)/1.25)*point:height%=((h%*SCh)*hscale/1.25)*point
/N�putw(5)
/X�head_here(�)
/b�putxy(x%,y%)
/l$�putxy(x%+width%+1,y%+height%+1)
/v#ș"OS_GBPB",&02,c%,sptr%,!sptr%
/�
�align
/�
�head_now
/��
/���close(!block)
/�ș"Wimp_CloseWindow",,block
/��
/�ݤcheckit(hnd%,ic%)
/�!icond=hnd%:icond!4=ic%
/� ș"Wimp_GetIconState",,icond
/�flags%=icond!24
/�=flags%�&F0000
/���slabicn(handle,icn)
/�icond!12=handle
0icond!16=2
0ș "Wimp_BorderIcon",,icond
0
icond!8=0
0 ș "Wimp_BorderIcon",,icond
0*�
04� �slabin(handle)
0>!icond=handle
0H#ș "Wimp_GetPointerInfo",,icond
0Rș "Wimp_BorderIcon",,icond
0\�
0f� �slabout(handle)
0p!icond=handle
0z#ș "Wimp_GetPointerInfo",,icond
0�icond!8 = 0
0�ș "Wimp_BorderIcon",,icond
0��
0���selectcol(colno)
0�hex=winpal(colno-14)
0�RED=(hex>>8)�&FF
0�GREEN=(hex>>16)�&FF
0�BLUE=(hex>>24)�&FF
0�!block=colour%
0�!ș"Wimp_GetWindowInfo",,block
0�workx%=block!4-block!20
0�worky%=block!16-block!24
0�)ș "ColourTrans_SetGCOL",hex,,,&100,0
1&ȓ Ȑ workx%+234,worky%-247,175,48
1 ș "Wimp_SetColour",1,1
1( ȓ Ȑ workx%+270,worky%-170,344,147
1$0 ș "ColourTrans_SetGCOL",&0000FF00,,,&100,0
1.0 ȓ Ȑ workx%+271,worky%-55,(RED/255)*344,32
180 ș "ColourTrans_SetGCOL",&00FF0000,,,&100,0
1B3 ȓ Ȑ workx%+271,worky%-111,(GREEN/255)*344,32
1L0 ș "ColourTrans_SetGCOL",&FF000000,,,&100,0
1V2 ȓ Ȑ workx%+271,worky%-167,(BLUE/255)*344,32
1`H ș "ColourTrans_SetGCOL",0,,,&100,0:ȓ workx%+233,worky%-248,176,49
1j# ȓ workx%+270,worky%-58,344,34
1t$ ȓ workx%+270,worky%-114,344,34
1~$ ȓ workx%+270,worky%-170,344,34
1�geecol=hex
1� �info(colour%,3,�RED)
1� �info(colour%,7,�GREEN)
1� �info(colour%,11,�BLUE)
1��
1���application_redraw2
1�RED=(hex>>8)�&FF
1�GREEN=(hex>>16)�&FF
1�BLUE=(hex>>24)�&FF
1�workx%=block!4-block!20
1�worky%=block!16-block!24
1�)ș "ColourTrans_SetGCOL",hex,,,&100,0
2 &ȓ Ȑ workx%+234,worky%-247,175,48
2
ș "Wimp_SetColour",1,1
2( ȓ Ȑ workx%+270,worky%-170,344,147
20 ș "ColourTrans_SetGCOL",&0000FF00,,,&100,0
2(0 ȓ Ȑ workx%+271,worky%-55,(RED/255)*344,32
220 ș "ColourTrans_SetGCOL",&00FF0000,,,&100,0
2<3 ȓ Ȑ workx%+271,worky%-111,(GREEN/255)*344,32
2F0 ș "ColourTrans_SetGCOL",&FF000000,,,&100,0
2P2 ȓ Ȑ workx%+271,worky%-167,(BLUE/255)*344,32
2ZGș "ColourTrans_SetGCOL",0,,,&100,0:ȓ workx%+233,worky%-248,176,49
2d"ȓ workx%+270,worky%-58,344,34
2n#ȓ workx%+270,worky%-114,344,34
2x#ȓ workx%+270,worky%-170,344,34
2�geecol=hex
2��
2� ��dragcol
2� !block=colour%
2�!ș"Wimp_GetWindowInfo",,block
2�workx%=block!4-block!20
2�worky%=block!16-block!24
2�
ȗ r,s,t
2�I � r>workx%+268 � r<workx%+268+348 � s>worky%-58 � s<worky%-(58-35) �
2�& ȗ ȓ workx%+270,worky%-57,344,30
2�&nred=�(((r-(workx%+270))/344)*255)
2�� nred=-1 nred=0
2��info(colour%,3,�nred)
3RED=nred
3ș "Wimp_SetColour",1,1
3Aȓ Ȑ workx%+272+(RED/255)*344,worky%-55,342-(RED/255)*344,30
3"/ș "ColourTrans_SetGCOL",&0000FF00,,,&100,0
3,/ȓ Ȑ workx%+270,worky%-55,(RED/255)*344,30
36'ș "ColourTrans_SetGCOL",0,,,&100,0
3@"ȓ workx%+270,worky%-58,344,34
3J'hex=(BLUE<<24)+(GREEN<<16)+(RED<<8)
3T)ș "ColourTrans_SetGCOL",hex,,,&100,0
3^&ȓ Ȑ workx%+234,worky%-247,175,48
3hGș "ColourTrans_SetGCOL",0,,,&100,0:ȓ workx%+233,worky%-248,176,49
3r!ȗ r,s,t:� t=1 � t=4 �dragcol
3| �Mode
3�ȗ ȓ 0,0,xmax-1,ymax-1
3� �
3��
3�J� r>workx%+268 � r<workx%+268+348 � s>worky%-114 � s<worky%-(114-35) �
3�&ȗ ȓ workx%+270,worky%-112,344,30
3�(ngreen=�(((r-(workx%+270))/344)*255)
3�� ngreen=-1 ngreen=0
3��info(colour%,7,�ngreen)
3�GREEN=ngreen
3�ș "Wimp_SetColour",1,1
3�Fȓ Ȑ workx%+272+(GREEN/255)*344,worky%-111,342-(GREEN/255)*344,30
3�/ș "ColourTrans_SetGCOL",&00FF0000,,,&100,0
3�2ȓ Ȑ workx%+271,worky%-111,(GREEN/255)*344,30
4'ș "ColourTrans_SetGCOL",0,,,&100,0
4#ȓ workx%+270,worky%-114,344,34
4'hex=(BLUE<<24)+(GREEN<<16)+(RED<<8)
4&)ș "ColourTrans_SetGCOL",hex,,,&100,0
40&ȓ Ȑ workx%+234,worky%-247,175,48
4:Gș "ColourTrans_SetGCOL",0,,,&100,0:ȓ workx%+233,worky%-248,176,49
4D!ȗ r,s,t:� t=1 � t=4 �dragcol
4N �Mode
4Xȗ ȓ 0,0,xmax-1,ymax-1
4b�
4l�
4vJ� r>workx%+268 � r<workx%+268+348 � s>worky%-170 � s<worky%-(170-35) �
4�&ȗ ȓ workx%+270,worky%-168,344,30
4�'nblue=�(((r-(workx%+270))/344)*255)
4�� nblue=-1 nblue=0
4�BLUE=nblue
4��info(colour%,11,�nblue)
4�ș "Wimp_SetColour",1,1
4�Fȓ Ȑ workx%+272+(BLUE/255)*344,worky%-167,342-((BLUE/255)*344),30
4�/ș "ColourTrans_SetGCOL",&FF000000,,,&100,0
4�1ȓ Ȑ workx%+270,worky%-167,(BLUE/255)*344,30
4�'ș "ColourTrans_SetGCOL",0,,,&100,0
4�#ȓ workx%+270,worky%-170,344,34
4�'hex=(BLUE<<24)+(GREEN<<16)+(RED<<8)
4�)ș "ColourTrans_SetGCOL",hex,,,&100,0
5&ȓ Ȑ workx%+234,worky%-247,175,48
5Gș "ColourTrans_SetGCOL",0,,,&100,0:ȓ workx%+233,worky%-248,176,49
5
� Blue
5 !ȗ r,s,t:� t=1 � t=4 �dragcol
5* �Mode
54ȗ ȓ 0,0,xmax-1,ymax-1
5>�
5H�
5R�
5\
��app_re3
5f workx%=block!4-block!20
5p worky%=block!16-block!24
5z-ș "ColourTrans_SetGCOL",hexc(1),,,&100,0
5�%ȓ Ȑ workx%+1122,worky%-58,50,42
5�-ș "ColourTrans_SetGCOL",hexc(2),,,&100,0
5�&ȓ Ȑ workx%+1122,worky%-116,50,42
5�-ș "ColourTrans_SetGCOL",hexc(3),,,&100,0
5�&ȓ Ȑ workx%+1122,worky%-180,50,42
5�-ș "ColourTrans_SetGCOL",hexc(4),,,&100,0
5�&ȓ Ȑ workx%+1122,worky%-430,50,42
5�� curspr$<>"" �
5�curss$=curspr$
5�� �curss$<12 �
5��
5�curss$+=�0
5�� �curss$=12
6-ș "ColourTrans_SetGCOL",hexc(0),,,&100,0
6'ȓ Ȑ workx%+400,worky%-352,163,144
64ș &2E,256+40,spr%,curspr$ � A,B,C,w%,h%,D,mode%
6$.ș"OS_ReadModeVariable",mode%,3 �c,cl,cols
6.,ș"OS_ReadModeVariable",mode%,4 �,,xeig%
68,ș"OS_ReadModeVariable",mode%,5 �,,yeig%
6Bwi%=w%<<xeig%
6Lhe%=h%<<yeig%
6V� spr%!4>0 �
6`next=spr%!8
6j�
6tadd=next+4
6~offset=spr%!add
6�name$=""
6��
6�name$+=�spr%!add
6�
add+=1
6�� add=next+16
6�old=next
6�next+=spr%!next
6�� curss$=name$
6�� spr%!(32+old)>44 �
6�� col%=0 � 15
6�+palette%!(col%*4)=!(old+44+col%*8+spr%)
6�
� col%
7 Hș "ColourTrans_SelectTable",!(40+old+spr%),palette%,-1,-1,scalblok%
7
�
7Gș "ColourTrans_SelectTable",!(40+old+spr%),defpal%,-1,-1,scalblok%
7�
7(�
72xoff=0:yoff=0
7<� �vga(mode%) �
7F� h%>w% shear=72 � shear=82
7P�
7Z#� (h%*2)>w% shear=36 � shear=82
7d�
7n%ș"OS_ReadModeVariable",�,11 �,,C
7x%ș"OS_ReadModeVariable",�,12 �,,B
7�
C+=1:B+=1
7�C� B/C=.8 � �vga(mode%) � hscale=1: � 1 means VGA, square pixels
7�&� B/C=.75 � �vga(mode%) � hscale=1
7�/� B/C<>.8 � B/C<>.75 � �vga(mode%) hscale=2
7�*� B/C=.8 � B/C=.75 � modsc=1 � modsc=2
7�$Shear=�checkflag(details%,29,21)
7�Ȏ Shear �
7�� �
7�'� B/C=.8 � � �vga(mode%) � hscale=1
7�(� B/C=.75 � � �vga(mode%) � hscale=1
7�1� B/C<>.8 � B/C<>.75 � � �vga(mode%) hscale=2
7�?� �vga(mode%) � w%>82 � h%>72 � h%<w% � SCw=w%/82:SCh=w%/82
7�=� �vga(mode%) � w%>82 � h%>72 � h%>w% � SCh=h%/72:SCw=SCh
8L� � �vga(mode%) � w%>82 � h%*2>72 � h%*2<w% � SCw=(w%/82):SCh=SCw*hscale
8V� � �vga(mode%) � w%>82 � h%*2>72 � h%*2>w% � SCh=(h%/(72/hscale))*2:SCw=(h%/72)*2
8(� w%>82 � h%<72 � SCw=w%/shear:SCh=1
8"1� w%<82 � h%>72 � SCw=1:SCh=h%/(shear/hscale)
8,
� force �
86H� w%<82 � h%<72 � h%=w% � �vga(mode%) � SCh=h%/(72/hscale):SCw=w%/72
8@N� w%<82 � h%<72 � h%<w% � �vga(mode%) � SCw=w%/shear:SCh=w%/(shear/hscale)
8JN� w%<82 � h%<72 � h%>w% � �vga(mode%) � SCw=h%/shear:SCh=h%/(shear/hscale)
8TL� w%<82 � h%<72 � h%*2=w% � � �vga(mode%) � SCh=h%/(36/hscale):SCw=w%/72
8^T� w%<82 � h%<36 � (h%*2)<w% � � �vga(mode%) � SCw=w%/shear:SCh=w%/(shear/hscale)
8hT� w%<82 � h%<36 � (h%*2)>w% � � �vga(mode%) � SCw=h%/shear:SCh=h%/(shear/hscale)
8r�
8|%� w%<82 � h%<72 � SCw=1:SCh=modsc
8��
8� Ȏ centred �
8� � �
8�1 � �vga(mode%) � � force � h%*SCh=72 � yoff=0
8�; � �vga(mode%) � � force � h%*SCh<70 � yoff=72-(h%*SCh)
8�3 � �vga(mode%) � force � yoff=(72-((1/SCh)*h%))
8�5 � � �vga(mode%) � force yoff=(72-((1/SCh)*h%))/2
8�8 � � �vga(mode%) � h%/SCh<36 � yoff=�(36-(h%/SCh))*2
8�* � � �vga(mode%) � h%/SCh>=35 � yoff=0
8� xoff=(82-((1/SCw)*w%))
8�; � force � h%>72 � w%>82 � h%<w% � �vga(mode%) � xoff=0
8�; � force � h%>72 � w%>82 � h%>w% � �vga(mode%) � yoff=0
8�3 � force � h%=w% � �vga(mode%) � xoff=10:yoff=0
97 � force � h%*2=w% � � �vga(mode%) � xoff=10:yoff=0
9C � force � h%*2>72 � w%>82 � (h%*2)<w% � � �vga(mode%) � xoff=0
9C � force � h%*2>72 � w%>82 � (h%*2)>w% � � �vga(mode%) � yoff=0
9& �
90� �
9:'� B/C=.8 � � �vga(mode%) � hscale=2
9D(� B/C=.75 � � �vga(mode%) � hscale=2
9N1� B/C<>.8 � B/C<>.75 � � �vga(mode%) hscale=4
9X SCw=w%/82:SCh=h%/(72/hscale)
9b�
9l[!scal%=wi%:scal%!4=he%:scal%!8=�((w%/((1/SCw)/2))+0.5):scal%!12=�((h%/((1/SCh)/2))+0.5)
9vMș 46,&134,spr%,curspr$,workx%+400+xoff,worky%-352+yoff,8,scal%,scalblok%
9��
9��
9���addcol
9�hexc(io)=hex
9��close(colour%)
9� !block=details%
9�" ș"Wimp_GetWindowInfo",,block
9� workx%=block!4-block!20
9� worky%=block!16-block!24
9� Ȏ io �
9� � 1:
9�H ș"Wimp_ForceRedraw",-1,workx%+1120,worky%-58,workx%+1180,worky%-10
9� �redraw(card%)
: � 2:
:I ș"Wimp_ForceRedraw",-1,workx%+1120,worky%-120,workx%+1180,worky%-72
: �redraw(card%)
: � 3:
:*J ș"Wimp_ForceRedraw",-1,workx%+1120,worky%-182,workx%+1180,worky%-134
:4 �redraw(card%)
:> � 4:
:HJ ș"Wimp_ForceRedraw",-1,workx%+1120,worky%-430,workx%+1180,worky%-382
:R �redraw(card%)
:\ � 0:
:fH ș"Wimp_ForceRedraw",-1,workx%+400,worky%-352,workx%+564,worky%-210
:p �redraw(card%)
:z �
:��
:���drawsprite
:�� curspr$="" �
:�!block=details%
:�!ș"Wimp_GetWindowInfo",,block
:�workx%=block!4-block!20
:�worky%=block!16-block!24
:�Gș"Wimp_ForceRedraw",-1,workx%+400,worky%-352,workx%+564,worky%-208
:�!block=card%
:�"ș"Wimp_GetWindowState",,block
:�open=block!32 � (1<<16)
:�� open<>0 �
:�!block=card%
;!ș"Wimp_GetWindowInfo",,block
;workx%=block!4-block!20
;worky%=block!16-block!24
;$Gș"Wimp_ForceRedraw",-1,workx%+390,worky%-300,workx%+564,worky%-156
;.�
;8�
;B�
;Lݤclaim(amount%)
;V(ș"OS_Heap",6,heap%,sppool% � ,,,ohs
;`4ș"OS_Heap",4,heap%,sppool%,1024-ohs � ,,sppool%
;jV� origheap-hsizeb<0 � ș"OS_Heap",5,heap%,,origheap-hsizeb:hsizeb+=origheap-hsizeb
;t%ș"Wimp_SlotSize",-1,-1 � current
;~ș"Wimp_SlotSize",orig,-1
;��
;�!� amount%>512 � amount%<max �
;�8ș"OS_Heap",4,heap%,sppool%,amount%-1024 � ,,sppool%
;��
;�!� amount%>512 � amount%>max �
;�0ș"Wimp_SlotSize",orig+(amount%-max)+1024,-1
;�&increase=(amount%-hsizeb)�4*4+1024
;�!ș"OS_Heap",5,heap%,,increase
;�hsizeb+=increase
;�8ș"OS_Heap",4,heap%,sppool%,amount%-1024 � ,,sppool%
;��
;�=sppool%
<