home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 5
/
DATAFILE_PDCD5.iso
/
education
/
a
/
factors
/
!Factors
/
!RunImageT
< prev
next >
Wrap
Text File
|
1992-05-03
|
11KB
|
441 lines
10REM > <Factors$Dir>.!RunImage
20
30DIM q% 2500
40$q%="TASK"
50SYS "Wimp_Initialise",200,!q%,"Factors" TO ,task%
60SYS "Wimp_ClaimInterface",task%
70SYS "Hourglass_On"
80:
90S%=OPENIN "<Factors$Dir>.!Sprites":T%=EXT#S%+16:CLOSE #S%
100DIM sp T%:!sp=T%:sp!4=0
110sp!8=16:sp!12=16
120SYS "OS_SpriteOp",&209,sp
130SYS "OS_SpriteOp",&20A,sp,"<Factors$Dir>.!Sprites"
140sicon=FNicon_create(-1,0,0,68,68,0,0,&3002,"!Factors")
150:
160DIM text$(50),setting(50),flags(50)
170DIM submenu(50),ref(50),menupos(20)
180DIM menu% 512
190DIM indirect% &2000
200DIM msgblk% 256
210sendtofile$=""
220my_filetype%=&FFF
230numbert$=""
240iptr%=indirect%:iend%=iptr%+&2000
250ON ERROR OSCLI "Error "+REPORT$+" : "+STR$(ERL)
260:
270PROCopentemplatefile("<Factors$Dir>.Templates")
280PROCloadtemplate("main")
290SYS "Wimp_CreateWindow",,q% TO main%
300PROCloadtemplate("info")
310SYS "Wimp_CreateWindow",,q% TO info%
320PROCloadtemplate("save")
330SYS "Wimp_CreateWindow",,q% TO save%
331PROCloadtemplateasd("me")
332SYS "Wimp_CreateWindow",,q% TO me%
340PROCclosetemplatefile
350:
360PROCicon_putdata(q%,main%,5,"Ready",0)
370SYS "Hourglass_Off"
380REPEAT
390 PROCaction(FNpoll(0))
400UNTIL FALSE
410:
420DEFPROCclosedown
430$q%="TASK"
440SYS "Wimp_CloseDown",task%,q%!0
450END
460ENDPROC
470:
480DEFPROCclickwindow(mousex%,mousey%,button%,handle%,icon%,ob%)
490CASE handle% OF
500 WHEN main% :PROCclickmain(button%,icon%)
510 WHEN save% :PROCclicksave(button%,icon%)
515 WHEN info% :PROCclickinfo(button%,icon%)
516 WHEN me% :PROCclickme(button%,icon%)
520 WHEN -2 :PROCclickiconbar(button%,icon%)
530ENDCASE
540ENDPROC
550:
560DEFPROCclickiconbar(button%,icon%)
570IF icon%<0 THEN ENDPROC
580CASE TRUE OF
590 WHEN button%=2
600 IF icon%=sicon THEN
610 PROCmenu_sicon
620 ENDIF
630 WHEN button%=4
640 PROCopenwindow(main%,FALSE,-1)
650 open%=TRUE
660 ENDIF
670ENDCASE
680ENDPROC
690:
700DEFPROCmenu_sicon
710no=0:MOUSE x,y,b
720PROCdefine_menu_text("Info",no,0,0,0,0,&10021,info%,0):no+=1
730PROCdefine_menu_text("Quit",no,0,0,0,0,&10021,0,-1):no+=1
740PROCcreate_menu("Factors",no,100,x-64,96+(no*40))
750menu_nr%=0
760claimmenu$="sicon"
770ENDPROC
780:
790DEFPROCreceive(q%)
800CASE q%!16 OF
810WHEN 0 :PROCclosedown
820WHEN 2 :PROCdatasave(q%)
830ENDCASE
840ENDPROC
850:
860DEFPROCopenwindow(handle%,full%,front%)
870q%!0=handle%
880IF NOT full% THEN SYS "Wimp_GetWindowState",0,q%
890IF front% THEN q%!28=-1
900SYS "Wimp_OpenWindow",0,q%
910ENDPROC
920
930DEFPROCclosewindow(handle%)
940IF FNoktoclosew(handle%) THEN
950 q%!0=handle%
960 SYS "Wimp_CloseWindow",0,q%
970ENDIF
980ENDPROC
990
1000DEFFNpoll(mask%)
1010SYS "Wimp_Poll",mask%,q% TO a%
1020SYS "Wimp_PollPointer",a%,,task%
1030=a%
1040
1050DEFPROCaction(evnt%)
1060CASE evnt% OF
1070 WHEN 0:PROCdo_background_task
1080 WHEN 1:PROCredrawwindow(q%!0)
1090 WHEN 2:PROCopenwindow(q%!0,TRUE,0)
1100 WHEN 3:PROCclosewindow(q%!0)
1110 WHEN 4:
1120 WHEN 5:
1130 WHEN 6:PROCclickwindow(!q%,q%!4,q%!8,q%!12,q%!16,q%!20)
1140 WHEN 7:IF claimdrag$<>"" THEN junk=EVAL("FNuserdrag_"+claimdrag$)
1150 WHEN 8:
1160 WHEN 9:IF claimmenu$<>"" THEN PROCwhichmenu(claimmenu$)
1170 WHEN 17,18:PROCreceive(q%)
1180ENDCASE
1190ENDPROC
1200
1210DEFPROCreceive(q%)
1220CASE q%!16 OF
1230WHEN 0 :$q%="TASK":SYS "Wimp_CloseDown",task%,q%!0:END
1240ENDCASE
1250ENDPROC
1260
1270DEFPROClwaorigin(b,RETURN x%,RETURN y%)
1280x%=b!0-b!16:y%=b!12-b!20
1290ENDPROC
1300
1310DEFFNicon_create(window%,minx%,miny%,width%,height%,fg%,bg%,flg%,data$)
1320LOCAL i%
1330q%!0=window%
1340q%!4=minx%:q%!8=miny%
1350q%!12=minx%+width%:q%!16=miny%+height%
1360q%!20=flg% OR bg%<<28 OR fg%<<24
1370IF q%!20 AND &100 THEN
1380 i%=INSTR(data$,",")
1390 q%!24=EVAL(LEFT$(data$,i%-1))
1400 q%!28=-1
1410 q%!32=EVAL(MID$(data$,i%+1))
1420ELSE
1430$(q%+24)=LEFT$(data$,11)
1440ENDIF
1450SYS "Wimp_CreateIcon",0,q% TO i%
1460=i%
1470
1480DEFPROCicon_putdata(b,wh%,ih%,text$,rd)
1490b!0=wh%:b!4=ih%
1500SYS "Wimp_GetIconState",,b
1510SYS "Wimp_DeleteIcon",,b
1520b!4=wh%:$(b!28)=text$:b+=4
1530SYS "Wimp_CreateIcon",,b
1540IF rd THEN SYS "Wimp_ForceRedraw",b!0,b!4,b!8,b!12,b!16
1550b-=4
1560ENDPROC
1570
1580DEFPROCicon_putdata(q%,whandle%,ihandle%,data$,redraw)
1590q%!0=whandle%
1600q%!4=ihandle%
1610SYS "Wimp_GetIconState",,q%
1620$(q%!28)=data$
1630IF redraw THEN
1640 SYS "Wimp_ForceRedraw",whandle%,q%!8,q%!12,q%!16,q%!20
1650ENDIF
1660ENDPROC
1670
1680DEFFNicon_getdata(q%,whandle%,ihandle%)
1690q%!0=whandle%
1700q%!4=ihandle%
1710SYS "Wimp_GetIconState",,q%
1720=$(q%!28)
1730
1740DEFPROCnewvals
1750gtx=q%!36:gty=q%!40
1760wbx=q%!4:wby=q%!8
1770wtx=q%!12:wty=q%!16
1780xsc=q%!20:ysc=q%!24
1790hp=wtx-wbx:vp=wty-wby:ebx=xsc
1800etx=xsc+hp:ety=ysc:eby=ysc-vp
1810ENDPROC
1820
1830DEFPROCdefine_menu_text(text$,n,w,t,d,s,flags,sm,l)
1840text$(n)=text$
1850setting(n)=0
1860IF w THEN setting(n)=setting(n) OR &04:flags=flags OR &100
1870IF t THEN setting(n)=setting(n) OR &01
1880IF d THEN setting(n)=setting(n) OR &02
1890IF l THEN setting(n)=setting(n) OR &80
1900IF s THEN flags=flags OR &400000
1910flags(n)=flags
1920submenu(n)=sm
1930ENDPROC
1940
1950DEFPROCcreate_menu(title$,n,width%,x,y)
1960mb%=menu%
1970menus=0:q=0
1980REPEAT
1990 menupos(menus)=mb%:menus+=1
2000 $mb%=title$
2010 mb%?12=7
2020 mb%?13=2
2030 mb%?14=7
2040 mb%?15=0
2050 mb%!16=width%
2060 mb%!20=40 :REM height of menu items
2070 mb%!24=0 :REM vertical gap between items (also top & bottom)
2080 itemptr=mb%+28
2090 REPEAT
2100 itemptr!0=setting(q)
2110 ref(q)=itemptr+4
2120 itemptr!8=flags(q) OR 0<<28 OR 7<<24
2130 IF (flags(q) AND &100)=0 THEN
2140 $(itemptr+12)=text$(q)
2150 ELSE
2160 pos=INSTR(text$(q),"(")
2170 itemptr!12=EVAL(LEFT$(text$(q),pos-1))
2180 itemptr!16=-1
2190 itemptr!20=EVAL(RIGHT$(text$(q),LEN(text$(q))-pos))
2200 ENDIF
2210 itemptr+=24:q+=1
2220 UNTIL (setting(q-1) AND &80)>0
2230 mb%=itemptr
2240 IF q<>n THEN title$=text$(q):q+=1
2250UNTIL q=n
2260
2270FOR q=0 TO n-1
2280 IF submenu(q)>0 AND submenu(q)<menus THEN
2290 !ref(q)=menupos(submenu(q))
2300 ELSE
2310 !ref(q)=submenu(q):REM was -1 i.e. submenu disallowed! This change
2320 :REM allows a window handle to be used
2330 ENDIF
2340NEXT q
2350SYS "Wimp_CreateMenu",,menu%,x,y
2360ENDPROC
2370
2380DEFPROCopentemplatefile(file$)
2390SYS "Wimp_OpenTemplate",,file$
2400ENDPROC
2410
2420DEFPROCloadtemplate(name$)
2430LOCAL type%,pos%,x%
2440SYS "Wimp_LoadTemplate",,q%,iptr%,iend%,-1,name$,0 TO type%,,iptr%,,,,pos%
2450ENDPROC
2451
2452DEFPROCloadtemplateasd(name$)
2453LOCAL type%,pos%,x%
2454SYS "Wimp_LoadTemplate",,q%,iptr%,iend%,-1,name$,0 TO type%,,iptr%,,,,pos%
2455GOTO 332
2460
2470DEFPROCclosetemplatefile
2480SYS "Wimp_CloseTemplate"
2490ENDPROC
2500
2510DEFFNleaf(path$)
2520WHILE INSTR(path$,".")
2530 path$=MID$(path$,INSTR(path$,".")+1)
2540ENDWHILE
2550=path$
2560
2570DEFFNgname(ptr)
2580f$=""
2590WHILE ?ptr<>0 AND ?ptr<>13
2600 f$=f$+CHR$?ptr:ptr+=1
2610ENDWHILE
2620=f$
2630
2640DEFPROCdo_background_task
2650ENDPROC
2660
2670DEFPROCredrawwindow(handle%)
2680LOCAL void%
2690q%!0=handle%
2700SYS "Wimp_RedrawWindow",0,q% TO more%
2710PROClwaorigin(q%+4,x0%,y0%)
2720WHILE more%
2730 PROCnewvals
2740 CASE handle% OF
2750 ENDCASE
2760 SYS "Wimp_BorderWindow",,q%
2770 SYS "Wimp_GetRectangle",0,q% TO more%
2780ENDWHILE
2790ENDPROC
2800:
2810DEFFNoktoclosew(handle%)
2820LOCAL shutting%
2830shutting%=TRUE
2840=shutting%
2850
2860DEFPROCclickmain(button%,icon%)
2870CASE TRUE OF
2880WHEN (button% AND 4)=4 AND icon%<>-1 OR (button% AND 1)=1 AND icon%<>-1
2890 CASE icon% OF
2900 WHEN 3 :PROCslabicon
2910 PROCopenwindow(save%,FALSE,-1)
2920 WHEN 4 :PROCslabicon
2930 PROCextractfactors
2940 ENDCASE
2950ENDCASE
2960ENDPROC
2970:
2980DEFPROCslabicon
2990SYS "Wimp_BorderIcon",,q%
3000q%!8=0
3010SYS "Wimp_BorderIcon",,q%
3020ENDPROC
3030:
3040DEFPROCclicksave(button%,icon%)
3050CASE TRUE OF
3060WHEN (button% AND 4)=4 AND icon%=5
3070 PROCslabicon:PROCsavefile(FNicon_getdata(q%,save%,4))
3080WHEN (button% AND 4)=4 AND icon%=3
3090 claimdrag$="save"
3100 !q%=save%
3110 SYS "Wimp_GetWindowState",,q%
3120 wex=q%!4-q%!20
3130