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% <