Home » Archimedes archive » Archimedes World » AW-1992-08.adf » AWaug92 » !AWaug92/Goodies/Wimped/!WimpEd/!RunImage
!AWaug92/Goodies/Wimped/!WimpEd/!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-1992-08.adf » AWaug92 |
| Filename: | !AWaug92/Goodies/Wimped/!WimpEd/!RunImage |
| Read OK: | ✔ |
| File size: | 10991 bytes |
| Load address: | 0000 |
| Exec address: | 0000 |
File contents
10REM------------------------------
20REM MAIN PROGRAM
30REM------------------------------
40REM
50
60 block_memory%=30*1024 : icon_memory%=20*1024
70 wimp_memory%=0:indirect%=0
80 :
90 Task$=FNWimp_Start("WimpEd")
100 PROCCreate_Windows
110 PROCCreate_Icons
120 PROCCreate_Menus
130 PROCCreate_Initialise
140
150 PROCWimp_WaitForEvent(draw%+mouse%+menu%+message%+drag%+key%)
160 PROCWimp_CloseDown
170END
180:
190REM------------------------------
200REM------------------------------
210REM INDEX OF EVENTS TO DEAL WITH
220REM------------------------------
230REM------------------------------
240REM
250REMEvent0 : THE NULL EVENT
260REMEvent1 : DRAWING WINDOWS REQUEST
270REMEvent2 : OPEN WINDOW REQUEST
280REMEvent3 : CLOSE WINDOW REQUEST
290REMEvent4 : POINTER LEAVING WINDOW
300REMEvent5 : POINTER ENTERING WINDOW
310REMEvent6 : MOUSE CLICKS
320REMEvent7 : DRAGS
330REMEvent8 : KEY PRESSES
340REMEvent9 : MENU CHOICES
350REMEvent10: SCROLL REQUESTS
360REMEvent11: LOSE CARET
370REMEvent12: GAIN CARET
380REM
390REMEvents17/18/19: MESSAGES
400REM!
410REM------------------------------
420REM------------------------------
430:
440:
450REM------------------------------
460REM INITIAL PROCEDURES
470REM------------------------------
480:
490DEF PROCCreate_Windows
500 Info_Window%=FNWindow_Load("info")
510 Save_Window%=FNWindow_Load("save")
520ENDPROC
530:
540DEF PROCCreate_Icons
550 Bar_Icon%=FNIcon_Bar("!WimpEd")
560ENDPROC
570:
580DEF PROCCreate_Menus
590 Bar_Menu%=FNMenu_Create("WimpEd\Info\Choices\Windows\Icon Bar\Save\Quit")
600 Choice_Menu%=FNMenu_Create("Choices\No REMs\Terse\Library\LoadToEditor\Interface")
610 PROCMenu_Glue(Bar_Menu%,1,Info_Window%)
620 PROCMenu_Glue(Bar_Menu%,2,Choice_Menu%)
630 PROCMenu_Glue(Bar_Menu%,5,Save_Window%)
640 PROCMenu_Disable(Bar_Menu%,3)
650 PROCMenu_Disable(Bar_Menu%,4)
660 PROCMenu_DottedLine(Bar_Menu%,2)
670 PROCMenu_DottedLine(Bar_Menu%,4)
680 PROCMenu_DottedLine(Choice_Menu%,4)
690 col%=FNWimp_ColourMenu
700ENDPROC
710:
720DEF PROCCreate_Initialise
730 PROCcode
740 wimp_memory%=0 : indirect%=0
750 Template$="" : SSprite$="" : Sprite$="" : next%=0
760 Name$="Task" : interface%=FALSE
770 NoOfMenus%=16 : NoOfItems%=16 : NoOfWindows%=0 : Bar%=FALSE
780 NoOfColourMenus%=0
790 Buffer_Length%=12 : prolix%=TRUE : terse%=FALSE : cmenu%=0 : Library%=FALSE
800 Editor%=FALSE
810 DIM Buffer% Buffer_Length%
820 DIM Buffer1% Buffer_Length%
830 DIM Buffer2% Buffer_Length%
840 DIM Menus%(NoOfMenus%) : DIM ColourMenu%(16)
850 DIM Menu_Block% NoOfMenus%*(28+NoOfItems%*24)
860 DIM date% 50 : DIM Type$(16) : Type$()=""
870 make$=FNWimp_ReadVariable("Make$Dir")
880 file$=make$+".Data"
890 file%=OPENUP(file$)
900 INPUT#file%,prolix%,terse%,Library%,Editor%
910 CLOSE#file%:file%=0
920 IF NOT(prolix%) THEN PROCMenu_Tick(Choice_Menu%,1)
930 IF terse% THEN PROCMenu_Tick(Choice_Menu%,2)
940 IF Library% THEN PROCMenu_Tick(Choice_Menu%,3)
950 IF Editor% THEN PROCMenu_Tick(Choice_Menu%,4)
960ENDPROC
970:
980REM------------------------------
990REMEvent1 : DRAWING WINDOWS REQUEST
1000REM------------------------------
1010:
1020DEF PROCEvent_DrawWindow(window%)
1030ENDPROC
1040:
1050REM------------------------------
1060REMEvent6 : MOUSE CLICKS
1070REM------------------------------
1080:
1090DEF PROCEvent_DealWithMouseClick(button%,window%,icon%,x%,y%)
1100CASE button% OF
1110 WHEN 2 : PROCPopUpMenu(window%,icon%,x%,y%)
1120 OTHERWISE : IF interface% SYS"Wimp_BorderIcon",,wimp%
1130ENDCASE
1140ENDPROC
1150:
1160 DEF PROCPopUpMenu(window%,icon%,x%,y%)
1170 IF window%=0 THEN xxx%=640 : yyy%=512 ELSE xxx%=x% : yyy%=y%
1180 LOCAL i%
1190 CASE window% OF
1200 WHEN Bar_Window%
1210 CASE icon% OF
1220 WHEN Bar_Icon% : PROCBarMenu_PopUp(x%,y%)
1230 ENDCASE
1240 OTHERWISE
1250 i%=-1
1260 REPEAT i%+=1
1270 IF window%=Window%(i%) THEN PROCWindowsMenu_PopUp(i%,x%,y%)
1280 UNTIL (i%=NoOfWindows%) OR (window%=Window%(i%))
1290 ENDCASE
1300 ENDPROC
1310 :
1320 DEF PROCWindowsMenu_PopUp(i%,x%,y%)
1330 LOCAL n%
1340 xx%=x% : yy%=y%
1350 window_menu%=i%
1360 PROCMenu_Build(Menus%(),Menu$(),i%)
1370 PROCMenu_PopUp(Menus%(0),x%,y%)
1380 ENDPROC
1390:
1400REM------------------------------
1410REMEvent7 : DRAGS
1420REM------------------------------
1430:
1440REM------------------------------
1450REMEvent8 : KEY PRESSES
1460REM------------------------------
1470:
1480DEF PROCEvent_DealWithKeyPressed(window%,icon%,key%)
1490CASE key% OF
1500 WHEN 13 :
1510 OTHERWISE : SYS "Wimp_ProcessKey",wimp%!24
1520ENDCASE
1530ENDPROC
1540:
1550REM------------------------------
1560REMEvent9 : MENU CHOICES
1570REM------------------------------
1580:
1590DEF PROCEvent_DealWithMenuChoice
1600 CASE menu% OF
1610 WHEN Bar_Menu% : PROCDealWithBar_Menu
1620 WHEN Edit_Menu%: PROCDealWithEditMenu
1630 OTHERWISE : PROCDealWithWindowMenu(window_menu%)
1640 ENDCASE
1650ENDPROC
1660:
1670 DEF PROCDealWithEditMenu
1680 menu$=Menu$(Wind%,Menu%)
1690 CASE FNMenu_Item(0) OF
1700 WHEN 1 : Menu$(Wind%,Menu%)=FNEditItem(menu$,Item%)
1710 WHEN 2 : PROCDeleteItem
1720 WHEN 3 : CASE FNMenu_Item(1) OF
1730 WHEN 1 :PROCInsertAbove
1740 ENDCASE
1750 WHEN 4 : CASE FNMenu_Item(1) OF
1760 WHEN 0 : PROCRemoveSubMenu
1770 WHEN 1 : PROCAddSubMenu
1780 WHEN 2 : PROCAddColourMenu
1790 OTHERWISE : PROCWindowLeaf
1800 ENDCASE
1810 ENDCASE
1820 IF Wind%=0 THEN xxx%=640 : yyy%=512
1830 PROCWindowsMenu_PopUp(Wind%,xxx%,yyy%)
1840 ENDPROC
1850:
1860 DEF PROCAddColourMenu
1870 LOCAL i%,j%,k% : i%=0 : j%=0
1880 men$=Menu$(Wind%,Menu%)
1890 REPEAT : i%+=1 : j%=INSTR(menu$,"\",j%+1) : UNTIL i%=Item%+1
1900 i%=FNWimp_ColourMenu
1910 men$=LEFT$(men$,j%-1)+">"+STR$(i%)+"C"+RIGHT$(men$,LEN(men$)-j%+1)
1920 Menu$(Wind%,Menu%)=men$
1930 ENDPROC
1940:
1950 DEF FNEditItem(menu$,k%)
1960 LOCAL i%,j%,s%,item$,insert$: i%=0 : j%=0
1970
1980 insert$=$Buffer%
1990 CASE insert$ OF
2000 WHEN "" : =menu$
2010 OTHERWISE
2020 REPEAT : i%+=1 : j%=INSTR(menu$,"\",j%+1) : UNTIL i%=k%
2030 i%=INSTR(menu$,"\",j%+1)
2040 item$=MID$(menu$,j%+1,i%-j%-1)
2050 s%=INSTR(item$,">")+j%
2060 CASE s% OF
2070 WHEN j% :
2080 OTHERWISE :
2090 insert$=insert$+MID$(menu$,s%,i%-s%)
2100 s%=VAL(MID$(menu$,s%+1,i%-s%-1))
2110 IF s%<100 THEN PROCChangeTitle(s%,$Buffer%)
2120 ENDCASE
2130 =LEFT$(menu$,j%)+insert$+RIGHT$(menu$,LENmenu$-i%+1)
2140 ENDCASE
2150:
2160 DEF PROCChangeTitle(s%,insert$)
2170 LOCAL i%,men$ : men$=Menu$(Wind%,s%)
2180 i%=INSTR(men$,"\")
2190 Menu$(Wind%,s%)=insert$+RIGHT$(men$,LENmen$-i%+1)
2200 ENDPROC
2210:
2220 DEF PROCRemoveSubMenu
2230 LOCAL i%,j% : i%=0 : j%=0
2240 menu$=Menu$(Wind%,Menu%)
2250 REPEAT : i%+=1 : j%=INSTR(menu$,"\",j%+1) : UNTIL i%=Item%
2260 i%=INSTR(menu$,"\",j%+1)
2270 item$=MID$(menu$,j%+1,i%-j%-1)
2280 s%=INSTR(item$,">")
2290 CASE s% OF
2300 WHEN 0 :
2310 CASE FNMenu_Item(1) OF
2320 WHEN 1 : PROCAddSubMenu
2330 OTHERWISE : PROCWindowLeaf
2340 ENDCASE
2350 OTHERWISE :
2360 CASE FNCancelBox(Task$,"Delete Submenus?") OF
2370 WHEN 1 : s%=VAL(RIGHT$(item$,LENitem$-s%))
2380 IF s%<100 THEN PROCRemoveTree(Wind%,s%)
2390 CASE FNMenu_Item(1) OF
2400 WHEN 1 : PROCAddSubMenu
2410 OTHERWISE : PROCWindowLeaf
2420 ENDCASE
2430
2440 ENDCASE
2450 ENDCASE
2460 ENDPROC
2470:
2480 DEF PROCAddSubMenu
2490 LOCAL i%,j% : i%=0 : j%=0
2500 NoOfSubmenus%(Wind%)+=1
2510 menu$=Menu$(Wind%,Menu%)
2520 REPEAT : i%+=1 : j%=INSTR(menu$,"\",j%+1) : UNTIL i%=Item%+1
2530 menu$=LEFT$(menu$,j%-1)+">"+STR$NoOfSubmenus%(Wind%)+RIGHT$(menu$,LENmenu$-j%+1)
2540 Menu$(Wind%,Menu%)=menu$
2550 Menu$(Wind%,NoOfSubmenus%(Wind%))=$Buffer%+"\"+$Buffer1%+"\"
2560 ENDPROC
2570:
2580 DEF PROCWindowLeaf
2590 LOCAL i%,j% : i%=0 : j%=0
2600 menu$=Menu$(Wind%,Menu%)
2610 wind%=Window%(FNMenu_Item(1)-2)
2620 REPEAT : i%+=1 : j%=INSTR(menu$,"\",j%+1) : UNTIL i%=Item%+1
2630 menu$=LEFT$(menu$,j%-1)+">"+STR$(wind%)+RIGHT$(menu$,LEN(menu$)-j%+1)
2640 Menu$(Wind%,Menu%)=menu$
2650 ENDPROC
2660:
2670 DEF PROCDeleteItem
2680 LOCAL i%,j%,k%,item$ : i%=0 : j%=0
2690 menu$=Menu$(Wind%,Menu%)
2700 REPEAT : i%+=1 : j%=INSTR(menu$,"\",j%+1) : UNTIL i%=Item%
2710 i%=INSTR(menu$,"\",j%+1)
2720 Menu$(Wind%,Menu%)=LEFT$(menu$,j%-1)+RIGHT$(menu$,LENmenu$-i%+1)
2730 item$=MID$(menu$,j%+1,i%-j%-1)
2740 k%=INSTR(item$,">")
2750 CASE k% OF
2760 WHEN 0 :
2770 OTHERWISE :
2780 s%=VAL(RIGHT$(item$,LENitem$-k%))
2790 CASE s%<100 OF
2800 WHEN TRUE:
2810 tot%=0:PROCRemoveTree(Wind%,s%):PROCUpdateTree(Wind%,s%)
2820 NoOfSubmenus%(Wind%)-=tot%
2830 ENDCASE
2840 ENDCASE
2850 ENDPROC
2860:
2870 DEF PROCRemoveTree(Wind%,k%)
2880 LOCAL i%,j% : i%=0
2890 REPEAT
2900 i%=INSTR(Menu$(Wind%,k%),">",i%+1)
2910 j%=VAL(RIGHT$(Menu$(Wind%,k%),LEN(Menu$(Wind%,k%))-i%))
2920 IF i%<>0 AND j%<100 THEN PROCRemoveTree(Wind%,j%)
2930 UNTIL i%=0
2940 Menu$(Wind%,k%)="" : tot%+=1
2950 ENDPROC
2960:
2970 DEF PROCUpdateTree(Wind%,s%)
2980 LOCAL i%
2990 CASE s% OF
3000 WHEN NoOfSubmenus%(Wind%) :
3010 OTHERWISE : i%=s%
3020 REPEAT : i%+=1 : UNTIL Menu$(Wind%,i%)<>"" OR i%>NoOfSubmenus%(Wind%)
3030 CASE TRUE OF
3040 WHEN i%<=NoOfSubmenus%(Wind%) :
3050 Menu$(Wind%,s%)=Menu$(Wind%,i%)
3060 Menu$(Wind%,i%)=""
3070 PROCRelabel(Wind%,s%,i%)
3080 ENDCASE
3090 ENDCASE
3100 IF s%<NoOfSubmenus%(Wind%) THEN PROCUpdateTree(Wind%,s%+1)
3110 ENDPROC
3120:
3130 DEF PROCRelabel(Wind%,s%,i%)
3140 LOCAL j%,k%,t%,x$,y$ : j%=0 : x$=">"+STR$i%+"\"
3150 REPEAT : j%+=1 : k%=INSTR(Menu$(Wind%,j%),x$) : UNTIL k%<>0 OR j%>s%
3160 y$=Menu$(Wind%,j%) : t%=INSTR(y$,"\",k%)
3170 Menu$(Wind%,j%)=LEFT$(y$,k%)+STR$s%+RIGHT$(y$,LENy$-t%+1)
3180 ENDPROC
3190:
3200 DEF PROCInsertAbove
3210 LOCAL i%,j% : i%=0 : j%=0
3220 menu$=Menu$(Wind%,Menu%)
3230 REPEAT : i%+=1 : j%=INSTR(menu$,"\",j%+1) : UNTIL i%=Item%
3240 menu$=LEFT$(menu$,j%)+$Buffer2%+"\"+RIGHT$(menu$,LENmenu$-j%)
3250 Menu$(Wind%,Menu%)=menu$
3260 ENDPROC
3270:
3280 DEF PROCDealWithBar_Menu
3290 LOCAL file%
3300 CASE FNMenu_Item(0) OF
3310 WHEN 1 :
3320
3330 WHEN 2 : CASE FNMenu_Item(1) OF
3340 WHEN 1 : prolix%=NOT(prolix%)
3350 PROCMenu_Tick(Choice_Menu%,1)
3360 CASE NOT(prolix%) AND NOTterse% OF
3370 WHEN TRUE
3380 terse%=NOT(terse%)
3390 PROCMenu_Tick(Choice_Menu%,2)
3400 ENDCASE
3410 PROCMenu_AdjustOn(menu%)
3420 WHEN 2 : terse%=NOT(terse%)
3430 PROCMenu_Tick(Choice_Menu%,2)
3440 CASE NOTterse% AND NOTprolix% OF
3450 WHEN TRUE
3460 prolix%=NOTprolix%
3470 PROCMenu_Tick(Choice_Menu%,1)
3480 ENDCASE
3490 PROCMenu_AdjustOn(menu%)
3500 WHEN 3 : Library%=NOT(Library%)
3510 PROCMenu_Tick(Choice_Menu%,3)
3520 PROCMenu_AdjustOn(menu%)
3530 WHEN 4 : Editor%=NOT(Editor%)
3540 PROCMenu_Tick(Choice_Menu%,4)
3550 PROCMenu_AdjustOn(menu%)
3560 WHEN 5 :
3570 *set interface$ true
3580 *if "<System$Path>" = "" then Error 0 System resources cannot be found
3590 *RMEnsure SharedCLibrary 0 RMLoad System:modules.CLib
3600 *RMEnsure SharedCLibrary 0 set interface$=false
3610 *RMEnsure InterfaceManager 1.25 RMLoad System:modules.Interface
3620 *RMEnsure InterfaceManager 1.25 set interface$ false
3630 CASE FNWimp_ReadVariable("interface$") OF
3640 WHEN "true" :
3650 interface%=NOT(interface%)
3660 PROCMenu_Tick(Choice_Menu%,5)
3670 PROCMenu_AdjustOn(menu%)
3680 OTHERWISE :
3690 PROCAlertBox("WimpEd","Interface module couldn't be loaded!")
3700 ENDCASE
3710 ENDCASE
3720 WHEN 3 :
3730 CASE FNMenu_Item(1) OF
3740 WHEN 0 :
3750 OTHERWISE : itm%=FNMenu_Item(1)
3760 PROCWindow_BringToTop(Window%(itm%))
3770 PROCMenu_AdjustOn(menu%)
3780 ENDCASE
3790 WHEN 4 : CASE NoOfWindows% OF
3800 WHEN 0 : PROCAlertBox(Task$,"No templates file loaded!")
3810 OTHERWISE :
3820 SYS "Wimp_GetPointerInfo",,pointer_wimp%
3830 CASE ((pointer_wimp%!8)AND1) OF
3840 WHEN 1 : CASE Bar% OF
3850 WHEN TRUE
3860 CASE FNCancelBox(Task$,"No icon to be placed on Bar?") OF
3870 WHEN 1:
3880 PROCMenu_Tick(Bar_Menu%,4)
3890 Bar%=FALSE
3900 ENDCASE
3910 ENDCASE
3920 OTHERWISE :IF NOTBar% THEN PROCMenu_Tick(Bar_Menu%,4)
3930 Bar%=TRUE
3940 PROCWindowsMenu_PopUp(0,640,512)
3950 ENDCASE
3960 ENDCASE
3970 WHEN 5 :
3980 WHEN 6 : PROCWimp_Quit
3990 ENDCASE
4000 ENDPROC
4010:
4020 DEF PROCDealWithWindowMenu(window%)
4030 LOCAL item%
4040 Buffer$=$Buffer%
4050 CASE FNMenu_Item(0) OF
4060 WHEN 1 :
4070 CASE window% OF
4080 WHEN 0 : SYS "Wimp_CreateMenu",-1
4090 OTHERWISE : PROCWindow_Close(Window%(window%))
4100 ENDCASE
4110 WHEN 2 :
4120 CASE FNMenu_Item(1) OF
4130 WHEN 0 : PROCDeleteWindowMenu(window%)
4140 OTHERWISE : PROCDealWithSelection(window%)
4150 ENDCASE
4160 WHEN 3 :
4170 CASE window% OF
4180 WHEN 0 :
4190 item%=FNMenu_Item(1)
4200 CASE item% OF
4210 WHEN 0:
4220 OTHERWISE:
4230 Click%(item%)=NOT(Click%(item%))
4240 PROCMenu_Tick(Wind_Menu%,item%)
4250 PROCWindowsMenu_PopUp(0,640,512)
4260 ENDCASE
4270 OTHERWISE : Open%(window%)=NOT(Open%(window%))
4280 ENDCASE
4290 WHEN 4 : Exit%(window%)=NOT(Exit%(window%))
4300 ENDCASE
4310 ENDPROC
4320:
4330 DEF PROCDeleteWindowMenu(window%)
4340 LOCAL i%
4350 CASE FNCancelBox(Task$,"Delete "+Window$(window%)+" menu?") OF
4360 WHEN 1 : FOR i%=1 TO NoOfSubmenus%(window%)
4370 Menu$(window%,i%)=""
4380 NEXT
4390 Menu$(window%,1)=Window$(window%)+"\"
4400 WHEN 2 :
4410 ENDCASE
4420 ENDPROC
4430:
4440 DEF PROCDealWithSelection(window%)
4450 LOCAL menu$,x$,i%,j%,k% : j%=1 : i%=1
4460 menu$=Menu$(window%,1)
4470 WHILE FNMenu_Item(j%)<>0
4480 menu$=FNMenu(menu$,FNMenu_Item(j%))
4490 k%=i%
4500 i%=INSTR(menu$,">") : i%=VAL(RIGHT$(menu$,LEN(menu$)-i%))
4510 IF i%<100 THEN menu$=Menu$(window%,i%)
4520 j%+=1
4530 ENDWHILE
4540 j%=FNMenu_Item(j%-1) : menu$=FNMenu(Menu$(window%,k%),j%)
4550 CASE menu$ OF
4560 WHEN "" : CASE Buffer$ OF
4570 WHEN "" :
4580 OTHERWISE :
4590 PROCAddMenuItem(window%,k%)
4600 IF window%=0 THEN xxx%=640 : yyy%=512
4610 PROCWindowsMenu_PopUp(window_menu%,xxx%,yyy%)
4620 ENDCASE
4630 OTHERWISE : PROCEditMenuItem(window%,k%,j%)
4640 ENDCASE
4650 ENDPROC
4660 :
4670 DEF PROCAddMenuItem(window%,menu%)
4680 LOCAL k%
4690 CASE (window%=0) AND (menu%=1) OF
4700 WHEN TRUE
4710 k%=INSTR(Menu$(0,1),"\Quit\")
4720 Menu$(0,1)=LEFT$(Menu$(0,1),k%)+Buffer$+"\Quit\"
4730 WHEN FALSE
4740 Menu$(window%,menu%)+=Buffer$+"\"
4750 ENDCASE
4760 ENDPROC
4770 :
4780 DEF PROCEditMenuItem(window%,men%,item%)
4790 i%=INSTR(menu$,">")
4800 IF i%<>0 THEN menu$=LEFT$(menu$,i%-1)
4810 $Buffer%=menu$ : $Buffer1%="" : $Buffer2%=""
4820 Wind%=window% : Menu%=men% : Item%=item%
4830 SYS "Wimp_GetPointerInfo",,wimp%
4840 PROCMenu_PopUp(Edit_Menu%,wimp%!0,wimp%!4)
4850 ENDPROC
4860 :
4870 DEF FNMenu(menu$,item%)
4880 LOCAL i%,k%
4890 k%=0 : i%=0
4900 REPEAT
4910 k%=INSTR(menu$,"\",k%+1) : i%+=1
4920 UNTIL i%=item%
4930 i%=INSTR(menu$,"\",k%+1)
4940 IF i%=0 THEN=RIGHT$(menu$,LENmenu$-k%) ELSE=MID$(menu$,k%+1,i%-k%-1)
4950 :
4960REM------------------------------
4970REMEvents17/18/19: MESSAGES
4980REM----------- -------------------
4990:
5000DEF PROCEvent_DealWithMessages(message%)
5010CASE message% OF
5020 WHEN message_quit% : PROCWimp_Quit
5030 WHEN message_save% : PROCDealWithSavingOfFile(FNFile_PathName)
5040 WHEN message_load% : PROCDealWithLoadingOfFile
5050 WHEN &400C0 : window_menu%=0
5060ENDCASE
5070PROCMenu_Close
5080ENDPROC
5090:
5100 DEF PROCDealWithSavingOfFile(file$)
5110 SYS "Hourglass_On"
5120 file%=OPENUP(make$+".Data ")
5130 PRINT#file%, prolix%,terse%,Library%,Editor%
5140 CLOSE#file%:file%=0
5150 LOCAL c$ : c$="F~C~V"
5160 OSCLI("*CDIR "+file$) : REM Create Application Directory
5170 IF Template$<>"" THEN OSCLI("* COPY "+Template$+" "+file$+".Templates "+c$)
5180 IF Sprite$<>"" THEN OSCLI("*COPY "+Sprite$+" "+file$+".Sprites "+c$)
5190 CASE SSprite$ OF
5200 WHEN "" :
5210 OSCLI("*COPY "+make$+".Library.!Sprites "+file$+".!Sprites "+c$)
5220 OTHERWISE:
5230 OSCLI("*COPY "+SSprite$+" "+file$+".!Sprites "+c$)
5240 ENDCASE
5250 PROCCreate_RunFile(file$)
5260 PROCCreate_HelpFile(file$)
5270 PROCCreate_RunImage(file$)
5280 SYS "Hourglass_Off"
5290 CASE Library% OF
5300 WHEN TRUE :
5310 f$=make$+".Library.WimpB"
5320 c$="F~C~V"
5330 OSCLI("*COPY "+f$+" "+g$+".Wimp "+c$)
5340 OTHERWISE :
5350 f$=make$+".Library.Wimp"
5360REM s%=OPENIN f$ : t%=EXT#s% : CLOSE#s% : s%=0
5370REM OSCLI("LOAD "+f$+" "+STR$~ptr%)
5380REM ptr%+=t%
5390 F%=OPENUP(file$+".!RunImage")
5400 PTR#F%=EXT#F%
5410 G%=OPENIN(f$)
5420REM PTR#F%=PTR#F% - 2:REM for BASIC files
5430 CALL append%
5440REM REPEAT:B%=BGET#G%:BPUT#F%,B%:UNTIL EOF#G%
5450 CLOSE#F%:F%=0
5460 CLOSE#G%:G%=0
5470 ENDCASE
5480
5490 CASE Editor% OF
5500 WHEN TRUE
5510 *set Dialogue$ yes
5520 *RmEnsure Dialogue 0.00 *set Dialogue$ no
5530 CASE FNWimp_ReadVariable("Dialogue$") OF
5540 WHEN "yes"
5550 OSCLI("WimpTask MESSAGE StrongED2_OpenDoc "+file$+".!RunImage 128 960 528 520 0 0 -wrap 80 -wordwrap -bcol 7 -fcol 0")
5560 ENDCASE
5570 PROCWimp_SendToEdit(file$+".!RunImage")
5580 ENDCASE
5590
5600 ENDPROC
5610:
5620 DEF PROCCreate_RunFile(file$)
5630 LOCAL ptr% : ptr%=wimp% : application$=LEFT$(FNGetLeaf(file$))
5640 PROCAdd_Line("",0)
5650 PROCAdd_Line("| ----------------------------"+STRING$(LENName$,"-"),0)
5660 PROCAdd_Line("| Run file for application : "+Name$,0)
5670 PROCAdd_Line("| ----------------------------"+STRING$(LENName$,"-"),0)
5680 PROCAdd_Line("",0)
5690 application$=RIGHT$(application$,LENapplication$-1)
5700 PROCAdd_Line("Set "+application$+"$Dir <Obey$Dir>",2)
5710 CASE SSprite$ OF
5720 WHEN "" :
5730 OTHERWISE :
5740 PROCAdd_Line("IconSprites <Obey$Dir>.!Sprites",2)
5750 ENDCASE
5760 CASE interface% OF
5770 WHEN TRUE:
5780 PROCAdd_Line("",0)
5790 PROCAdd_Line("| Loading interface module:",0)
5800 PROCAdd_Line("",0)
5810 PROCAdd_Line("If ""<System$Path>""="""" then Error 0 System resources cannot be found",2)
5820 PROCAdd_Line("RMEnsure SharedCLibrary 0 RMLoad System:modules.CLib",2)
5830 PROCAdd_Line("RMEnsure InterfaceManager 1.25 RMLoad System:modules.Interface",2)
5840 PROCAdd_Line("RMEnsure InterfaceManager 1.25 Error Couldn't load Interface module",2)
5850 ENDCASE
5860 PROCAdd_Line("",0)
5870 PROCAdd_Line("WimpSlot -min 64K -max 64K",2)
5880 PROCAdd_Line("Run <Obey$Dir>.!RunImage ",2)
5890 file$+=".!Run"
5900 SYS "OS_File",10,file$,&FEB,,wimp%,ptr%
5910 ENDPROC
5920 :
5930 DEF PROCCreate_HelpFile(file$)
5940 LOCAL ptr%,i% : ptr%=wimp%
5950 date%!0=0
5960 SYS "OS_Word",14,date%
5970 y$=$date%
5980 PROCAdd_Line(" ",0)
5990 PROCAdd_Line(STRING$(40,"-"),18)
6000 PROCAdd_Line("Application : "+Name$,(63-LENName$)DIV2)
6010 PROCAdd_Line("",0)
6020 PROCAdd_Line("Help for Version 1.0 : ("+MID$(y$,5,11)+")",20)
6030 PROCAdd_Line(" ",0)
6040 PROCAdd_Line(STRING$(40,"-"),18)
6050 FOR i%=1 TO 5 :PROCAdd_Line("",0):NEXT
6060 PROCAdd_Line("<User writes help here>",26)
6070 PROCAdd_Line("",0)
6080 file$+=".!Help"
6090 SYS "OS_File",10,file$,&FFF,,wimp%,ptr%
6100 ENDPROC
6110 :
6120REM------------------------------
6130REM>>>>>>>>>>>!RunImage
6140REM------------------------------
6150REM
6160 DEF PROCCreate_RunImage(file$)
6170 LOCAL ptr%
6180 ptr%=wimp%
6190 PROCIndex
6200 PROCMainProgram
6210 PROCCreate_Procedures
6220 PROCEvent_Procedures
6230 g$=file$
6240 file$+=".!RunImage"
6250 SYS "OS_File",10,file$,&FD1,,wimp%,ptr%
6260 ENDPROC
6270:
6280 DEF PROCIndex
6290 x$=LEFT$(FNGetLeaf(file$))
6300 indent%=20
6310 PROCComment2("PROGRAM INDEX : "+x$,indent%)
6320 indent%=25
6330 PROCAdd_REM(STRING$(30,"-"),indent%-5)
6340 PROCAdd_REM("",0)
6350 PROCAdd_REM("1.�MAIN�PROGRAM",indent%)
6360 PROCAdd_REM("",0)
6370 PROCAdd_REM("2.�CREATE�PROCEDURES",indent%)
6380 PROCAdd_REM("",0)
6390 PROCAdd_REM("2.1�Create�Initial�Data",indent%+4)
6400 PROCAdd_REM("2.2�Create�Windows",indent%+4)
6410 PROCAdd_REM("2.3�Create�Menus",indent%+4)
6420 PROCAdd_REM("",0)
6430 PROCAdd_REM("3.�EVENT�PROCEDURES",indent%)
6440 PROCAdd_REM("",0)
6450 PROCAdd_REM("3.0�Window�Closing",indent%+4)
6460 PROCAdd_REM("3.1�Window�Drawing",indent%+4)
6470 PROCAdd_REM("3.2�Mouse�Clicks",indent%+4)
6480 PROCAdd_REM("3.3�Key�Presses",indent%+4)
6490 PROCAdd_REM("3.4�Menu�Choices",indent%+4)
6500 PROCAdd_REM("3.5�File�Loading",indent%+4)
6510 PROCAdd_REM("3.6�File�Saving",indent%+4)
6520 PROCAdd_REM("",0)
6530 PROCAdd_REM(STRING$(30,"-"),indent%-5)
6540 PROCAdd_REM("",0)
6550 ENDPROC
6560 :
6570 DEF PROCMainProgram
6580 PROCAdd_REMS(2)
6590 PROCHeading("1.�MAIN�PROGRAM",20)
6600 indent%=24
6610 PROCAdd_REMS(2)
6620 IF Library% THEN PROCAdd_Line("LIBRARY "+"""<Obey$Dir>.Wimp""",indent%)
6630 PROCAdd_REMS(1)
6640 arg$=""""
6650 arg$+=application$
6660 arg$+=""""
6670 arg$+=","+STR$wimp_memory%+","+STR$indirect%
6680 PROCAdd_Line("PROCWimp_Start("+arg$+")",indent%)
6690 PROCAdd_REMS(1)
6700 PROCAdd_Line("PROCUser_SetInitialData",indent%)
6710 PROCAdd_REMS(1)
6720 PROCAdd_Line("PROCCreate_Windows",indent%)
6730 PROCAdd_Line("PROCCreate_Menus",indent%)
6740 PROCAdd_REMS(1)
6750 PROCAdd_Line("PROCWimp_WaitForEvent",indent%)
6760 PROCAdd_REMS(1)
6770 PROCAdd_Line("PROCWimp_CloseDown",indent%)
6780 PROCAdd_REMS(1)
6790 PROCAdd_Line("END",indent%)
6800 PROCAdd_REMS(5)
6810 ENDPROC
6820 :
6830 DEF PROCCreate_Procedures
6840 PROCUser_SetInitialData
6850 PROCWindows
6860 PROCMenus
6870 ENDPROC
6880 :
6890 DEF PROCUser_SetInitialData
6900 indent%=4
6910 PROCHeader("2.1�Create�Initial�Data",indent%)
6920 PROCAdd_PROC("User_SetInitialData",indent%)
6930 IF interface% THEN PROCAdd_Line("interface%=TRUE",indent%)
6940 CASE NOT(terse%) OF
6950 WHEN TRUE :
6960 PROCHeading("Users Initial Data goes here",indent%+10)
6970 PROCAdd_REMS(1)
6980 ENDCASE
6990 PROCFooter("End of Initial Data",indent%)
7000 ENDPROC
7010 :
7020 DEF FNMemory(j%)
7030 LOCAL memory%,x$ : memory%=0
7040 flag%=Templates%!j%
7050 CASE TRUE OF
7060 WHEN (flag%AND(1<<8))=(1<<8)
7070 CASE TRUE OF
7080 WHEN (flag%AND1)=1
7090 m%=Templates%!(j%+12) : memory%+=m%
7100 CASE Templates%!(j%+8) OF
7110 WHEN -1 :
7120 OTHERWISE:
7130 REM validated!
7140 m%=Templates%!(j%+8)
7150 x$=$m%
7160 m%=20*LEN(x$)+1
7170 memory%+=m%
7180 ENDCASE
7190 ENDCASE
7200 ENDCASE
7210 =memory%
7220 :
7230 DEF FNTitle
7240 LOCAL memory%,j%,x$ : memory%=0 : j%=72
7250 flag%=Templates%!60
7260 CASE TRUE OF
7270 WHEN (flag%AND(1<<8))=(1<<8)
7280 CASE TRUE OF
7290 WHEN (flag%AND1)=1
7300 m%=Templates%!(j%+12) : memory%=m%
7310 CASE Templates%!(j%+8) OF
7320 WHEN -1 :
7330 OTHERWISE:
7340 REM validated!
7350 m%=Templates%!(j%+8)
7360 x$=$m%
7370 m%=20*LEN(x$)+1
7380 memory%+=m%
7390 ENDCASE
7400 ENDCASE
7410 ENDCASE
7420 =memory%
7430:
7440 DEF FNIconMemory
7450 LOCAL i%,j%,n%,memory%
7460 CASE NoOfWindows% OF
7470 WHEN 0
7480 OTHERWISE
7490 FOR i%=1 TO NoOfWindows%
7500 Templates%!0=Window%(i%)
7510 SYS "Wimp_GetWindowInfo",,Templates%
7520 memory%=FNTitle
7530 n%=Templates%!88
7540 j%=92+16
7550 REPEAT
7560 memory%+=FNMemory(j%)
7570 j%+=32
7580 UNTIL j%>=(n%*32+92+16)
7590 NEXT
7600 ENDCASE
7610 =memory%
7620 :
7630 DEF PROCHeader(x$,indent%)
7640 PROCHeading(x$,16+indent%)
7650 PROCAdd_REMS(2)
7660 PROCAdd_REM(STRING$(65,"~"),indent%)
7670 PROCAdd_REMS(1)
7680 ENDPROC
7690 :
7700 DEF PROCFooter(x$,indent%)
7710 PROCAdd_REMS(1)
7720 PROCAdd_Line("ENDPROC",indent%)
7730 PROCAdd_REMS(1)
7740 PROCAdd_REM(STRING$(65,"~"),indent%)
7750 PROCAdd_REM(STRING$(65-LENx$," ")+x$,indent%)
7760 PROCAdd_REMS(3)
7770 ENDPROC
7780 :
7790 DEF PROCFooter1(x$,indent%)
7800 PROCAdd_REMS(1)
7810 PROCAdd_REM(STRING$(65,"~"),indent%)
7820 PROCAdd_REM(STRING$(65-LENx$," ")+x$,indent%)
7830 PROCAdd_REMS(3)
7840 ENDPROC
7850 :
7860 DEF PROCWindows
7870 LOCAL i%,x$
7880 indent%=4
7890 PROCHeader("2.2�Create�Windows",indent%)
7900 PROCAdd_PROC("Create_Windows",indent%)
7910 PROCAdd_REMS(1)
7920
7930 CASE Sprite$ OF
7940 WHEN "" :
7950 IF NOT(terse%) THEN PROCHeading("No sprite file",indent%+10)
7960 OTHERWISE :
7970 PROCAdd_REMS(1)
7980 PROCAdd_Line("PROCWimp_SpritesLoad",indent%+2)
7990 PROCAdd_REMS(1)
8000 ENDCASE
8010 CASE NoOfWindows% OF
8020 WHEN 0 :
8030 IF NOT(terse%) THEN PROCHeading("No windows defined",indent%+10)
8040 OTHERWISE :
8050 PROCAdd_REMS(1)
8060 FOR i%=1 TO NoOfWindows%
8070 x$=Window$(i%)
8080 x$=STRING$(15-LENx$," ")+x$
8090 x$+="_Window%=FNWimp_WindowLoad("""+Window$(i%)+""")"
8100 PROCAdd_Line(x$,indent%)
8110 NEXT
8120 PROCAdd_REMS(1)
8130 open%=FALSE
8140 FOR i%=1 TO NoOfWindows%
8150 CASE Open%(i%) OF
8160 WHEN TRUE :
8170 PROCAdd_Line("PROCWimp_WindowBringToTop("+Window$(i%)+"_Window%)",indent%+1)
8180 open%=TRUE
8190 ENDCASE
8200 NEXT
8210 CASE NOTopen% AND NOT(terse%) OF
8220 WHEN TRUE:
8230 PROCHeading("No windows opened at run time!",indent%+10)
8240 ENDCASE
8250 ENDCASE
8260 CASE Bar% OF
8270 WHEN TRUE:
8280 PROCAdd_Line("Bar_Icon%=FNWimp_IconBar("""+"!"+application$+""")",indent%)
8290 WHEN FALSE
8300 IF NOT(terse%) THEN PROCHeading("No icon defined for icon bar",indent%+10)
8310 ENDCASE
8320 PROCAdd_Line("ENDPROC",indent%)
8330 PROCAdd_Line(":",indent%+1)
8340 CASE FNSaveTrue OF
8350 WHEN TRUE:
8360 PROCAdd_Line("DEF FNEvent_Save(window%)",indent%+1)
8370 PROCAdd_Line("CASE window% OF",indent%+3)
8380 FOR i%=1 TO NoOfWindows%
8390 CASE LEFT$(Window$(i%),4) OF
8400 WHEN "Save","save","SAVE"
8410 PROCAdd_Line("WHEN "+Window$(i%)+"_Window% :=TRUE",indent%+5)
8420 ENDCASE
8430 NEXT
8440 PROCAdd_Line("OTHERWISE :=FALSE",indent%+5)
8450 PROCAdd_Line("ENDCASE",indent%+3)
8460 OTHERWISE
8470 PROCAdd_Line("DEF FNEvent_Save(window%)=FALSE",indent%+1)
8480 ENDCASE
8490 PROCAdd_REMS(1)
8500 PROCAdd_Line(":",indent%+1)
8510 PROCAdd_Line("DEF FNEvent_Sprites(window%)=sprites%",indent%+1)
8520 PROCAdd_REMS(1)
8530 PROCFooter1("End of Create Windows",indent%)
8540 ENDPROC
8550 :
8560 DEF PROCAdd_PROC(x$,indent%)
8570 PROCAdd_Line(":",indent%)
8580 PROCAdd_Line("DEF PROC"+x$,indent%)
8590 PROCAdd_REMS(1)
8600 ENDPROC
8610 :
8620 DEF PROCMenus
8630 indent%=4
8640 PROCHeader("2.3�Create�Menus",indent%)
8650 PROCAdd_PROC("Create_Menus",indent%)
8660 CASE TRUE OF
8670 WHEN NoOfWindows%=0 AND Bar%=0 :
8680 IF NOT(terse%) THEN PROCHeading("No menus defined!",indent%+10)
8690 OTHERWISE :
8700 FOR i%=0 TO NoOfWindows%
8710 k%=NoOfSubmenus%(i%)-1 : x$=Window$(i%)+"_Menu%"
8720 CASE k% OF
8730 WHEN 0 :
8740 menu$=LEFT$(Menu$(i%,1))
8750 CASE INSTR(menu$,"\") OF
8760 WHEN 0 :
8770 CASE NOTterse% OF
8780 WHEN TRUE
8790 PROCAdd_REM("No menu for window: "+Window$(i%),indent%)
8800 ENDCASE
8810 OTHERWISE
8820 IF NOT((i%=0) AND (Bar%=FALSE)) THEN
8830 CASE NOTterse% OF
8840 WHEN TRUE
8850 PROCAdd_REMS(1)
8860 PROCAdd_REM("Menu for window: "+Window$(i%),indent%)
8870 PROCAdd_REMS(1)
8880 ENDCASE
8890 PROCAdd_Menu(" "+x$,Menu$(i%,1),-1,indent%)
8900 ENDIF
8910 PROCAdd_REMS(1)
8920 ENDCASE
8930 OTHERWISE :
8940 CASE NOTterse% OF
8950 WHEN TRUE
8960 PROCAdd_REMS(1)
8970 PROCAdd_REM("Menu for window: "+Window$(i%),indent%)
8980 PROCAdd_REMS(1)
8990 ENDCASE
9000 PROCAdd_Line(" DIM "+x$+"("+STR$k%+")",indent%)
9010 PROCAdd_REMS(1)
9020 FOR j%=k% TO 0 STEP-1
9030 PROCAdd_Menu(x$,Menu$(i%,j%+1),j%,indent%)
9040 NEXT
9050 PROCAdd_REMS(1)
9060 ENDCASE
9070 NEXT
9080 ENDCASE
9090 PROCAdd_Line("ENDPROC",indent%)
9100 PROCAdd_Line(":",indent%+1)
9110 PROCMousePopUp
9120 PROCFooter1("End of Menu Definitions",indent%)
9130 ENDPROC
9140 :
9150 DEF PROCMousePopUp
9160 indent%=4
9170 PROCAdd_Line("DEF FNEvent_Menu(window%)",indent%+1)
9180 CASE TRUE OF
9190 WHEN NoOfWindows%=0 AND Bar%=0 :
9200 PROCAdd_Line("=FALSE",indent%+1)
9210 OTHERWISE :
9220 PROCAdd_Line("CASE window% OF",indent%+1)
9230 FOR i%=0 TO NoOfWindows%
9240 x$="WHEN "+Window$(i%)+"_Window%"
9250 x$+=STRING$(24-LENx$," ")+": ="
9260 menu$=LEFT$(Menu$(i%,1))
9270 CASE INSTR(menu$,"\") OF
9280 WHEN 0 :
9290 OTHERWISE : CASE i% OF
9300 WHEN 0 :
9310 CASE Bar% OF
9320 WHEN TRUE : x$+="Bar_Menu%"
9330 OTHERWISE : x$+="FALSE"
9340 ENDCASE
9350 OTHERWISE: x$+=Window$(i%)+"_Menu%"
9360 ENDCASE
9370 PROCAdd_Line(x$,indent%+2)
9380 ENDCASE
9390 NEXT
9400 PROCAdd_Line("OTHERWISE : =FALSE",indent%+2)
9410 PROCAdd_Line("ENDCASE",indent%+1)
9420 PROCAdd_REMS(1)
9430 ENDCASE
9440 PROCAdd_REMS(1)
9450 ENDPROC
9460:
9470 DEF PROCAdd_Menu(x$,menu$,j%,indent%)
9480 menu$=FNAmend_Menu(x$,menu$)
9490 menu$=LEFT$(menu$)
9500 CASE j% OF
9510 WHEN -1,0 :
9520 PROCAdd_MenuLine(" "+x$,menu$,indent%)
9530 OTHERWISE :
9540 PROCAdd_MenuLine(" "+x$+"("+STR$j%+")",menu$,indent%)
9550 ENDCASE
9560 ENDPROC
9570 :
9580 DEF PROCAdd_MenuLine(x$,menu$,indent%)
9590 LOCAL i%,j%,k%,len%,s$
9600 i%=60-LENx$-LEN("=FNWimp_MenuCreate")
9610 CASE TRUE OF
9620 WHEN i%>LEN(menu$)
9630 PROCAdd_Line(x$+"=FNWimp_MenuCreate("""+menu$+""")",indent%)
9640 OTHERWISE:
9650 len%=60-LEN("menu$=")-4
9660 CASE TRUE OF
9670 WHEN LEN(menu$)<=len%
9680 PROCAdd_Line("menu$="+""""+menu$+"""",indent%+2)
9690 OTHERWISE
9700 s$="-" : j%=0
9710 REPEAT
9720 REPEAT : k%=j%:j%=INSTR(menu$,"\",j%+1) : UNTIL (j%>len%) OR (j%=0)
9730 IF j%>58 OR LENmenu$>58 THEN j%=k%
9740 CASE s$ OF
9750 WHEN "-" : s$=" "
9760 OTHERWISE: s$="+"
9770 ENDCASE
9780 CASE j% OF
9790 WHEN 0
9800 PROCAdd_Line("menu$"+s$+"="+""""+menu$+"""",indent%+2)
9810 menu$=""
9820 OTHERWISE
9830 PROCAdd_Line("menu$"+s$+"="+""""+LEFT$(menu$,j%)+"""",indent%+2)
9840 menu$=RIGHT$(menu$,LENmenu$-j%)
9850 ENDCASE
9860 UNTIL menu$=""
9870 ENDCASE
9880 PROCAdd_Line(x$+"=FNWimp_MenuCreate(menu$)",indent%)
9890 ENDCASE
9900 ENDPROC
9910 :
9920 DEF FNAmend_Menu(x$,menu$)
9930 LOCAL i%,j%,k%,n%,z$ : i%=0
9940 REPEAT :
9950 i%=INSTR(menu$,">",i%+1)
9960 CASE i% OF
9970 WHEN 0 :
9980 OTHERWISE :
9990 j%=INSTR(menu$,"\",i%+1)
10000 k%=VAL(MID$(menu$,i%+1,j%-i%-1))
10010 CASE TRUE OF
10020 WHEN k%<100
10030 z$=x$+"("+STR$(k%-1)+")"
10040 OTHERWISE
10050 CASE INSTR(MID$(menu$,i%+1,j%-i%-1),"C") OF
10060 WHEN 0 :
10070 n%=1
10080 WHILE Window%(n%)<>k% : n%+=1 :ENDWHILE
10090 z$=Window$(n%)+"_Window%"
10100 OTHERWISE:
10110 n%=i% : REPEAT : n%-=1 : UNTIL MID$(menu$,n%,1)="\"
10120 z$=MID$(menu$,n%+1,i%-n%-1)+"_CMenu%"
10130 PROCAdd_MenuLine(z$,"Colours",indent%)
10140 ENDCASE
10150 ENDCASE
10160 menu$=LEFT$(menu$,i%)+z$+RIGHT$(menu$,LENmenu$-j%+1)
10170 ENDCASE
10180 UNTIL i%=0
10190 =menu$
10200:
10210:
10220REM------------------------------
10230REM# WRITING EVENT PROCEDURES
10240REM------------------------------
10250REM
10260:
10270 DEF PROCEvent_Procedures
10280 PROCWindowClose
10290 PROCWindowDraw
10300 PROCMouseClick
10310 PROCKeys
10320 PROCUser_MenuChoice
10330 PROCFileLoading
10340 PROCFileSaving
10350 ENDPROC
10360 :
10370 DEF PROCWindowClose
10380 indent%=4
10390 PROCHeader("3.0�Window�Closing",indent%)
10400 PROCAdd_PROC("Event_WindowClose(window%,buttons%)",indent%)
10410 CASE NoOfWindows% OF
10420 WHEN 0 : IF NOT(terse%) THEN PROCHeading("No windows defined",indent%+10)
10430 OTHERWISE :
10440 PROCAdd_Line("CASE window% OF",indent%)
10450 FOR i%=1 TO NoOfWindows%
10460 x$="WHEN "+Window$(i%)+"_Window%"
10470 x$+=STRING$(25-LENx$," ")+":"
10480 CASE Exit%(i%) OF
10490 WHEN FALSE :
10500 x$+=" REM No closing action defined!"
10510 IF NOT(terse%) THEN PROCAdd_Line(x$,indent%+1)
10520 OTHERWISE :
10530 x$+=" finished%=TRUE"
10540 PROCAdd_Line(x$,indent%+1)
10550 ENDCASE
10560 NEXT
10570 PROCAdd_Line("ENDCASE",indent%)
10580 ENDCASE
10590 PROCAdd_REMS(1)
10600 PROCAdd_Line("ENDPROC",indent%)
10610 PROCAdd_REMS(2)
10620 PROCFooter1("End of Window Close Routines",indent%)
10630 ENDPROC
10640:
10650 DEF FNWindowDraw
10660 LOCAL i%,draw% : draw%=FALSE
10670 CASE NoOfWindows% OF
10680 WHEN 0:
10690 OTHERWISE:
10700 FOR i%=1 TO NoOfWindows%
10710 Templates%!0=Window%(i%)
10720 SYS "Wimp_GetWindowInfo",,Templates%
10730 Flag%(i%)=!(Templates%+32)
10740 Flag%(i%)=Flag%(i%)>>>4
10750 Flag%(i%)=Flag%(i%)MOD2
10760 IF Flag%(i%)<>1 THEN draw%=TRUE
10770 NEXT
10780 ENDCASE
10790 =draw%
10800 :
10810 DEF PROCWindowDraw
10820 indent%=4
10830 PROCHeader("3.1�Window�Drawing",indent%)
10840 PROCAdd_PROC("Event_Draw(window%,x_origin%,y_origin%)",indent%)
10850 CASE NoOfWindows% OF
10860 WHEN 0 : IF NOT(terse%) THEN PROCHeading("No windows defined",indent%+10)
10870 OTHERWISE :
10880 PROCAdd_Line("CASE window% OF",indent%)
10890 FOR i%=1 TO NoOfWindows%
10900 x$="WHEN "+Window$(i%)+"_Window%"
10910 x$+=STRING$(25-LENx$," ")+":"
10920 CASE Flag%(i%) OF
10930 WHEN 1 :
10940 x$+=" REM Redrawn automatically!"
10950 IF NOT(terse%) THEN PROCAdd_Line(x$,indent%+1)
10960 OTHERWISE :
10970 x$+=" PROCUser_Draw"+Window$(i%)+"Window"
10980 PROCAdd_Line(x$,indent%+1)
10990 ENDCASE
11000 NEXT
11010 PROCAdd_Line("ENDCASE",indent%)
11020 ENDCASE
11030 PROCAdd_REMS(1)
11040 PROCAdd_Line("ENDPROC",indent%)
11050 PROCAdd_REMS(2)
11060 CASE NoOfWindows% OF
11070 WHEN 0 :
11080 OTHERWISE:
11090 FOR i%=1 TO NoOfWindows%
11100 CASE Flag%(i%) OF
11110 WHEN 1 :
11120 OTHERWISE
11130 PROCAdd_PROC("User_Draw"+Window$(i%)+"Window",indent%+6)
11140 IF prolix% PROCHeading("User to provide code here",indent%+10)
11150 PROCAdd_Line("ENDPROC",indent%+6)
11160 PROCAdd_REMS(2)
11170 ENDCASE
11180 NEXT
11190 ENDCASE
11200 PROCFooter1("End of Window Drawing Routines",indent%)
11210 ENDPROC
11220:
11230 DEF FNMenuExist
11240 LOCAL i%,menu% : i%=-1 : menu%=FALSE
11250 CASE NoOfWindows% OF
11260 WHEN 0
11270 IF Bar% THEN menu%=TRUE
11280 OTHERWISE
11290 REPEAT : i%+=1
11300 IF INSTR(LEFT$(Menu$(i%,1)),"\")<>0 THEN menu%=TRUE
11310 UNTIL i%=NoOfWindows% OR menu%=TRUE
11320 ENDCASE
11330=menu%
11340 :
11350
11360 DEF FNMouseClick
11370 LOCAL i%,click% : click%=FALSE
11380 CASE NoOfWindows% OF
11390 WHEN 0 : IF Bar%<>0 THEN click%=TRUE
11400 OTHERWISE
11410 IF Bar% THEN click%=TRUE
11420 FOR i%=1 TO NoOfWindows%
11430 Templates%!0=Window%(i%)
11440 SYS "Wimp_GetWindowInfo",,Templates%
11450 Flag%(i%)=Templates%!64
11460 Flag%(i%)=Flag%(i%)>>>12
11470 CASE Window$(i%) OF
11480 WHEN "Save","save","SAVE" : Flag%(i%)=-1
11490 OTHERWISE
11500 IF Flag%(i%)<>0 THEN click%=TRUE
11510 ENDCASE
11520 NEXT
11530 ENDCASE
11540=click%
11550:
11560DEF PROCMouseClick
11570 indent%=4
11580 PROCHeader("3.2�Mouse�Clicks",indent%)
11590 PROCAdd_PROC("Event_MouseClick(window%,icon%,button%,x%,y%)",indent%)
11600 PROCAdd_Line("CASE window% OF",indent%)
11610 PROCBarMouse
11620 CASE NoOfWindows% OF
11630 WHEN 0 :
11640 IF NOT(terse%) THEN PROCHeading("No windows defined!",indent%+10)
11650 OTHERWISE
11660 PROCMouseContents
11670 ENDCASE
11680 PROCAdd_Line("ENDCASE",indent%)
11690 PROCAdd_REMS(1)
11700 PROCAdd_Line("ENDPROC",indent%)
11710 IF NoOfWindows%<>0 THEN PROCMouseSubs
11720 PROCFooter1("End of Dealing with Mouse Clicks",indent%)
11730 ENDPROC
11740 :
11750 DEF PROCBarMouse
11760 CASE Bar% OF
11770 WHEN TRUE :
11780 x$="WHEN Bar_Window% :"
11790 PROCAdd_Line(x$+" PROCUser_MouseBar",indent%+1)
11800 OTHERWISE :
11810 x$="WHEN Bar_Window% : REM No Icon on icon bar!"
11820 IF NOTterse% THEN PROCAdd_Line(x$,indent%+1)
11830 ENDCASE
11840 ENDPROC
11850 :
11860 DEF PROCMouseContents
11870 LOCAL nn%,mm%
11880 FOR i%=1 TO NoOfWindows%
11890 CASE LEFT$(Window$(i%),4) OF
11900 WHEN "Save","save","SAVE" : Flag%(i%)=-1
11910 OTHERWISE :
11920 Templates%!0=Window%(i%)
11930 SYS "Wimp_GetWindowInfo",,Templates%
11940 nn%=Templates%!88
11950 mm%=Templates%!(92+16)
11960 Flag%(i%)=Templates%!64
11970 Flag%(i%)=Flag%(i%)>>>12
11980 CASE nn%=0 OR Flag%(i%)<>0 OF
11990 WHEN TRUE:
12000 OTHERWISE :
12010 pattern%=(1<<12)+(1<<13)+(1<<14)+(1<<15)
12020 SYS "Wimp_WhichIcon",Window%(i%),Templates%,pattern%,0
12030 mm%=0
12040 WHILE (Templates%!mm%)<>-1 : mm%+=4 : ENDWHILE
12050 mm%=(mm%DIV4)
12060 IF nn%<>mm% THEN Flag%(i%)=1
12070 ENDCASE
12080 ENDCASE
12090 PROCMice
12100 NEXT
12110 ENDPROC
12120 :
12130 DEF PROCMice
12140 x$="WHEN "+Window$(i%)+"_Window%"
12150 x$+=STRING$(24-LENx$," ")+": "
12160 CASE Flag%(i%) OF
12170 WHEN 0 : CASE terse% OF
12180 WHEN FALSE
12190 x$+="REM Mouse clicks are ignored!"
12200 PROCAdd_Line(x$,indent%+1)
12210 ENDCASE
12220 WHEN -1 :
12230 OTHERWISE : x$+="PROCUser_Mouse"+Window$(i%)+"( button%,icon%)"
12240 PROCAdd_Line(x$,indent%+1)
12250 ENDCASE
12260 ENDPROC
12270 :
12280 DEF PROCMouseSubs
12290 IF Bar% THEN PROCBarSub
12300 FOR i%=1 TO NoOfWindows%
12310 CASE Flag%(i%) OF
12320 WHEN 0,-1 :
12330 OTHERWISE :
12340 PROCAdd_REMS(2)
12350 x$="User_Mouse"+Window$(i%)+"( button%,icon%)"
12360 PROCAdd_PROC(x$,indent%+2)
12370 PROCAdd_Line("PROCWimp_WindowAlert("+""""+Window$(i%)+""""+","+"""Mouse button="""+"+STR$button%+"+"""icon="""+"+STR$icon%)",indent%+3)
12380 PROCAdd_REMS(1)
12390 PROCAdd_Line("ENDPROC",indent%+2)
12400 ENDCASE
12410 NEXT
12420 ENDPROC
12430 :
12440 DEF PROCBarSub
12450 PROCAdd_REMS(2)
12460 PROCAdd_PROC("User_MouseBar",indent%+2)
12470 click%=FALSE
12480 FOR i%=1 TO NoOfWindows%
12490 CASE TRUE OF
12500 WHEN Click%(i%)
12510 x$="PROCWimp_WindowBringToTop("+Window$(i%)+"_Window%)"
12520 PROCAdd_Line(x$,indent%+3)
12530 click%=TRUE
12540 ENDCASE
12550 NEXT
12560 CASE prolix% OF
12570 WHEN TRUE
12580 IF NOT(click%) THEN PROCHeading("Use PROCWimp_WindowBringToTop() here ",indent%+8)
12590 ENDCASE
12600 PROCAdd_REMS(1)
12610 PROCAdd_Line("ENDPROC",indent%+2)
12620 ENDPROC
12630:
12640 DEF FNKeys
12650 LOCAL write% : write%=FALSE
12660 CASE LEFT$(Window$(i%),4) OF
12670 WHEN "SAVE","Save","save" : write%=1
12680 OTHERWISE :
12690 pattern%=(1<<12)+(1<<13)+(1<<14)+(1<<15)
12700 SYS "Wimp_WhichIcon",Window%(i%),Templates%,pattern%,pattern%
12710 IF (Templates%!0)<>-1 THEN write%=TRUE
12720 ENDCASE
12730 =write%
12740 :
12750 DEF PROCKeys
12760 indent%=4
12770 PROCHeader("3.3�Key�Presses",indent%)
12780 PROCAdd_PROC("Event_KeyPress(window%,icon%,key%)",indent%)
12790 CASE NoOfWindows% OF
12800 WHEN 0
12810 IF NOT(terse%) THEN PROCHeading("No windows defined!",indent%+10)
12820 OTHERWISE
12830 PROCAdd_Line("CASE window% OF",indent%+3)
12840 FOR i%=1 TO NoOfWindows%
12850 x$="WHEN "+Window$(i%)+"_Window%"
12860 x$+=STRING$(24-LENx$," ")+": "
12870 CASE FNKeys OF
12880 WHEN 1 :
12890 WHEN TRUE
12900 PROCAdd_Line(x$+"PROCUser_KeyPress"+Window$(i%)+"( icon%,key%)",indent%+4)
12910 WHEN FALSE
12920 IF NOT(terse%) THEN PROCAdd_Line(x$+"REM No writeable icons!",indent%+4)
12930 ENDCASE
12940 NEXT
12950 PROCAdd_Line("ENDCASE",indent%+3)
12960 PROCAdd_REMS(1)
12970 ENDCASE
12980 PROCAdd_Line("ENDPROC",indent%)
12990 PROCAdd_REMS(2)
13000 IF NoOfWindows%<>0 THEN PROCKey2
13010 PROCFooter1("End of key press procedures",indent%)
13020 ENDPROC
13030:
13040 DEF PROCKey2
13050 FOR i%=1 TO NoOfWindows%
13060 CASE FNKeys OF
13070 WHEN -1
13080 PROCAdd_REMS(1)
13090 PROCAdd_PROC("User_KeyPress"+Window$(i%)+"( icon%,key%)",indent%+2)
13100 PROCAdd_Line("PROCWimp_WindowAlert("+""""+Window$(i%)+""""+","+"""Key pressed="""+"+STR$key%+"+"""icon="""+"+STR$icon%)",indent%+2)
13110 PROCAdd_REMS(1)
13120 PROCAdd_Line("ENDPROC",indent%+2)
13130 ENDCASE
13140 NEXT
13150 ENDPROC
13160:
13170 DEF PROCUser_MenuChoice
13180 indent%=4
13190 PROCHeader("3.4�Menu�Choices",indent%)
13200 PROCAdd_PROC("Event_MenuChoice(menu%)",indent%)
13210 CASE TRUE OF
13220 WHEN NoOfWindows%=0 AND Bar%=0 :
13230 IF NOT(terse%) THEN PROCHeading("No windows defined!",indent%+10)
13240 OTHERWISE
13250 PROCAdd_Line("CASE menu% OF",indent%+1)
13260 PROCAdd_REMS(1)
13270 FOR i%=0 TO NoOfWindows%
13280 x$="WHEN "+Window$(i%)+"_Menu%"
13290 x$+=STRING$(24-LENx$," ")+": "
13300 menu$=LEFT$(Menu$(i%,1))
13310 CASE i% OF
13320 WHEN 0 :
13330 IF Bar%<>0 THEN x$+="PROCUser_MenuChoice"+Window$(i%): PROCAdd_Line(x$,indent%+7)
13340 OTHERWISE :
13350 CASE INSTR(menu$,"\") OF
13360 WHEN 0:
13370 IF NOT(terse%) THEN x$+="REM No menu defined!":PROCAdd_Line(x$,indent%+7)
13380 OTHERWISE :
13390 x$+="PROCUser_MenuChoice"+Window$(i%)
13400 PROCAdd_Line(x$,indent%+7)
13410 ENDCASE
13420 ENDCASE
13430 NEXT
13440 PROCAdd_REMS(1)
13450 PROCAdd_Line("ENDCASE",indent%+1)
13460 ENDCASE
13470 PROCAdd_REMS(1)
13480 PROCAdd_Line("ENDPROC",indent%)
13490 PROCMenuDealer
13500 PROCFooter1("End of Menu Choice Procedures",indent%)
13510 ENDPROC
13520:
13530 DEF PROCMenuDealer
13540 LOCAL i%
13550 CASE TRUE OF
13560 WHEN NoOfWindows%=0 AND Bar%=0 :
13570 OTHERWISE :
13580 FOR i%=0 TO NoOfWindows%
13590 menu$=LEFT$(Menu$(i%,1))
13600 CASE INSTR(menu$,"\") OF
13610 WHEN 0:
13620 OTHERWISE :
13630 CASE i%=0 AND Bar%=0 OF
13640 WHEN TRUE:
13650 OTHERWISE:
13660 PROCAdd_REMS(2)
13670 PROCAdd_PROC("User_MenuChoice"+Window$(i%),indent%)
13680 PROCMenuPrint(Menu$(i%,1),0)
13690 PROCAdd_Line("ENDPROC",indent%)
13700 ENDCASE
13710 ENDCASE
13720 NEXT
13730 ENDCASE
13740 ENDPROC
13750:
13760 DEF PROCMenuPrint(menu$,level%)
13770 LOCAL j%,k%,s%,t%,v%,item$,itm$ : k%=INSTR(menu$,"\") : v%=0
13780 PROCAdd_Line("CASE FNWimp_MenuChoice("+STR$level%+") OF",2*level%+5)
13790 REPEAT : v%+=1
13800 IF v%<10 THEN c$=" :" ELSE c$=":"
13810 j%=k% : k%=INSTR(menu$,"\",j%+1)
13820 CASE k% OF
13830 WHEN 0
13840 OTHERWISE :
13850 item$=MID$(menu$,j%+1,k%-j%-1) : itm$=item$
13860 s%=INSTR(item$,">")
13870 CASE s% OF
13880 WHEN 0 :
13890 x$=""""+item$+""""
13900 item$="WHEN "+STR$v%+c$
13910 CASE itm$ OF
13920 WHEN "Quit" :
13930 item$+="finished%=TRUE"
13940 OTHERWISE:
13950 item$+=" PROCWimp_WindowAlert("+""""+Window$(i%)
13960 item$+=" Menu"+""""+","+x$+")"
13970 ENDCASE
13980 PROCAdd_Line(item$,2*level%+6)
13990 OTHERWISE :
14000 t%=VAL(RIGHT$(item$,LENitem$-s%))
14010 item$=LEFT$(item$,s%-1)
14020 item$="WHEN "+STR$v%+c$
14030 PROCAdd_Line(item$,2*level%+6)
14040 CASE RIGHT$(itm$) OF
14050 WHEN "C"
14060 x$="IF FNWimp_MenuChoice("+STR$(level%+1)+")<>0 THEN"
14070 PROCAdd_Line(x$,2*level%+8)
14080 x$="col%=FNWimp_MenuChoice("+STR$(level%+1)+")-1"
14090 PROCAdd_Line(x$,2*level%+10)
14100 x$="PROCWimp_WindowAlert("+""""+Window$(i%)+" Menu"
14110 item$=x$+""",""Colour Chosen=""+STR$col%)"
14120 PROCAdd_Line(item$,2*level%+10)
14130 PROCAdd_Line("ENDIF",2*level%+8)
14140 ENDCASE
14150 IF t%<100 THEN PROCMenuPrint(Menu$(i%,t%),level%+1)
14160 ENDCASE
14170 ENDCASE
14180 UNTIL k%=0
14190 PROCAdd_Line("ENDCASE",2*level%+5)
14200 ENDPROC
14210:
14220 DEF PROCFileLoading
14230 indent%=4
14240
14250 PROCHeader("3.5�File�Loading",indent%)
14260 PROCAdd_PROC("Event_LoadFile(file$,type$)",indent%)
14270 CASE next% OF
14280 WHEN 0:
14290 IF NOT(terse%) THEN PROCHeading("No files loaded!",indent%+8)
14300 OTHERWISE
14310 PROCAdd_Line("CASE type$ OF",indent%+2)
14320 FOR i%=1 TO next%
14330 x$ ="WHEN "+""""+Type$(i%)+""""+STRING$(13-LEN(Type$(i%))," ")+": "
14340 x$+="PROCUser_LoadFile"+Type$(i%)+"(file$)"
14350 PROCAdd_Line(x$,indent%+4)
14360 NEXT
14370 PROCAdd_Line("ENDCASE",indent%+2)
14380 ENDCASE
14390 PROCAdd_REMS(1)
14400 PROCAdd_Line("ENDPROC",indent%)
14410 CASE next% OF
14420 WHEN 0:
14430 OTHERWISE
14440 FOR i%=1 TO next%
14450 PROCAdd_REMS(1)
14460 PROCAdd_PROC("User_LoadFile"+Type$(i%)+"(file$)",indent%+2)
14470 x$="PROCWimp_WindowAlert("
14480 x$+=""""+LEFT$(FNGetLeaf(file$))+""""
14490 x$+=","+"""Loading file """+"+file$)"
14500 PROCAdd_Line(x$,indent%+4)
14510 PROCAdd_REMS(1)
14520 PROCAdd_Line("ENDPROC",indent%+2)
14530 NEXT
14540 ENDCASE
14550 PROCFooter1("End of file loading procedure",indent%+2)
14560 ENDPROC
14570:
14580 DEF PROCFileSaving
14590 indent%=4
14600 PROCHeader("3.6�File�Saving",indent%)
14610 PROCAdd_PROC("Event_SaveFile(file$,window%)",indent%)
14620 CASE FNSaveTrue OF
14630 WHEN TRUE:
14640 PROCAdd_Line("CASE window% OF",indent%+2)
14650 FOR i%=1 TO NoOfWindows%
14660 x$="WHEN "+Window$(i%)+"_Window%"
14670 x$+=STRING$(26-LENx$," ")+": "
14680 CASE LEFT$(Window$(i%),4) OF
14690 WHEN "Save","save","SAVE"
14700 x$+="PROCWimp_WindowAlert("
14710 x$+=""""+Window$(i%)+""""
14720 x$+=","+"""Saving file """+"+file$)"
14730 PROCAdd_Line(x$,indent%+4)
14740 OTHERWISE :
14750 x$+="REM Not a save window!"
14760 IF NOTterse% THEN PROCAdd_Line(x$,indent%+4)
14770 ENDCASE
14780 NEXT
14790 PROCAdd_Line("ENDCASE",indent%+2)
14800 ENDCASE
14810 PROCFooter("End of file saving procedure",indent%)
14820 ENDPROC
14830:
14840DEF FNSaveTrue
14850LOCAL result%,i%
14860CASE NoOfWindows% OF
14870WHEN 0 : result%=FALSE
14880OTHERWISE:
14890 i%=0
14900 REPEAT
14910 i%+=1
14920 CASE LEFT$(Window$(i%),4) OF
14930 WHEN "Save","save","SAVE" : result%=TRUE
14940 ENDCASE
14950 UNTIL i%=NoOfWindows% OR result%=TRUE
14960ENDCASE
14970=result%
14980:
14990REM------------------------------
15000REM Tool procedures
15010REM------------------------------
15020REM
15030:
15040 DEF PROCAdd_Line(x$,indent%)
15050 CASE prolix% OF
15060 WHEN TRUE:
15070 $ptr%=STRING$(3+indent%," ")+x$+CHR$10
15080 ptr%+=LENx$+4+indent%
15090 OTHERWISE:
15100 IF LEFT$(x$,3)<>"REM" THEN $ptr%=STRING$(3+indent%," ")+x$+CHR$10:ptr%+=LENx$+4+indent%
15110 ENDCASE
15120 ENDPROC
15130:
15140 DEF PROCAdd_REM(x$,indent%)
15150 PROCAdd_Line("REM"+STRING$(indent%," ")+x$,-3)
15160 ENDPROC
15170:
15180 DEF PROCAdd_REMS(n%)
15190 LOCAL i%
15200 FOR i%=1 TO n% : PROCAdd_REM("",0) : NEXT
15210 ENDPROC
15220:
15230 DEF PROCHeading(x$,indent%)
15240 PROCAdd_REM("",0)
15250 PROCAdd_REM("------------------------------",indent%)
15260 PROCAdd_REM(STRING$(15-(LEN(x$)DIV2)," ")+x$,indent%)
15270 PROCAdd_REM("------------------------------",indent%)
15280 PROCAdd_REM("",0)
15290 ENDPROC
15300 :
15310 DEF PROCComment(x$)
15320 PROCAdd_REM("",0)
15330 PROCAdd_Line("REM"+STRING$(15," ")+STRING$(30,"-"),-3)
15340 PROCAdd_Line("REM"+STRING$(30-(LEN(x$)DIV2)," ")+x$,-3)
15350 PROCAdd_Line("REM"+STRING$(15," ")+STRING$(30,"-"),-3)
15360 PROCAdd_REM("",0)
15370 ENDPROC
15380 :
15390 DEF PROCComment2(x$,indent%)
15400 PROCAdd_REM("------------------------------",indent%)
15410 PROCAdd_REM(STRING$(15-(LEN(x$)DIV2)," ")+x$,indent%)
15420 PROCAdd_REM("",0)
15430 date%!0=0
15440 SYS "OS_Word",14,date%
15450 y$=$date%
15460 PROCAdd_REM(STRING$(15-(LEN(x$)DIV2)," ")+y$,indent%)
15470 PROCAdd_REM("------------------------------",indent%)
15480 PROCAdd_REM("",0)
15490 ENDPROC
15500REM------------------------------
15510REM**********FILE LOADING
15520REM------------------------------
15530:
15540 DEF PROCDealWithLoadingOfFile
15550 LOCAL type$,file$,new%,i%
15560 : type$=FNFile_Type : file$=FNFile_PathName : new%=0
15570 CASE type$ OF
15580 WHEN "Template" :
15590 CASE Template$ OF
15600 WHEN "" : PROCDealWithLoadingTemplate
15610 OTHERWISE : new%=1
15620 ENDCASE
15630 WHEN "Sprite"
15640 CASE LEFT$(FNGetLeaf(file$)) OF
15650 WHEN "Sprites","SPRITES","sprites" : PROCDealWithLoadingSpriteFile
15660 WHEN "!Sprites","!SPRITES","!sprites" : PROCDealWithLoadingSystemSprites
15670 OTHERWISE : new%=1
15680 ENDCASE
15690 OTHERWISE
15700 IF next%<16 THEN new%=1
15710 ENDCASE
15720 CASE new% OF
15730 WHEN 1 :
15740 i%=0 : test%=FALSE
15750 REPEAT
15760 i%+=1
15770 IF Type$(i%)=type$ THEN test%=TRUE
15780 UNTIL i%=16 OR test%=TRUE
15790 CASE test% OF
15800 WHEN TRUE
15810 PROCAlertBox(Task$,"Application already responds to files of type : "+type$)
15820 OTHERWISE
15830 next%+=1
15840 CASE next%>16 OF
15850 WHEN TRUE : PROCAlertBox(Task$,"Too many types!")
15860 OTHERWISE :
15870 Type$(next%)=type$
15880 PROCAlertBox(Task$,"Application will respond to loading of files of type : "+type$)
15890 ENDCASE
15900 ENDCASE
15910 ENDCASE
15920 ENDPROC
15930:
15940 DEF PROCDealWithLoadingSystemSprites
15950 LOCAL file%,offset%,x$,x%,y%,i%,j%,NoOfSprites%,test%
15960 test%=FALSE
15970 SSprite$=file$
15980 file%=OPENIN(file$)
15990 NoOfSprites%=BGET#file%
16000 y%=0 : PTR#file%=4 : offset%=BGET#file% : offset%-=4
16010 j%=0
16020 REPEAT j%+=1
16030 offset%+=y% : PTR#file%=offset% : y%=0
16040 FOR i%=0 TO 24 STEP8
16050 x%=BGET#file%
16060 y%+=x%<<i%
16070 NEXT
16080 x$=GET$#file% : x$=LEFT$(x$,10)
16090 CASE TRUE OF
16100 WHEN LEFT$(x$,1)="!" :
16110 x%=FNCancelBox(Task$,"Change Application Name to "+x$+" ?")
16120 CASE x% OF
16130 WHEN 1 :
16140 test%=TRUE
16150 Name$=x$
16160 OSCLI("*IconSprites "+file$)
16170 PROCIcon_MakeText(Save_Window%,1,x$)
16180 x%=FNicon_newsprite(wimp%,Save_Window%,0,Name$,FALSE)
16190 CASE Bar% OF
16200 WHEN TRUE :
16210 xy%=INSTR(Menu$(0,1),"\")
16220 Menu$(0,1)=FNrem(Name$)+RIGHT$(Menu$(0,1),LEN(Menu$(0,1))-xy%+1)
16230 ENDCASE
16240 ENDCASE
16250 ENDCASE
16260 UNTIL j%>=NoOfSprites% OR test%
16270 CLOSE#file% : file%=0
16280 ENDPROC
16290:
16300 DEF PROCDealWithLoadingSpriteFile
16310 Sprite$=file$
16320 ENDPROC
16330:
16340 DEF PROCDealWithLoadingTemplate
16350 Template$=file$
16360 wimp_memory%=0 : indirect%=0
16370 PROCLoad_Windows
16380 ENDPROC
16390 :
16400 DEF PROCLoad_Windows
16410 LOCAL n%,x$ : n%=0 : NoOfWindows%=0 : x$=""
16420 CASE FNFile_Load(Template$) OF
16430 WHEN FALSE :
16440 PROCAlertBox("WimpEd","Templates contain font data! WimpEd cannot load this file")
16450 OTHERWISE :
16460 OSCLI("LOAD "+Template$+" "+STR$~file%)
16470 Templates%=file%+16
16480 REPEAT
16490 NoOfWindows%+=1
16500 n%+=24
16510 UNTIL Templates%!n%=0
16520 CASE NoOfWindows% OF
16530 WHEN 0:
16540 OTHERWISE:
16550 DIM Window$(NoOfWindows%),Window%(NoOfWindows%),Click%(NoOfWindows%)
16560 DIM Menu$(NoOfWindows%,NoOfMenus%),NoOfSubmenus%(NoOfWindows%)
16570 DIM Flag%(NoOfWindows%),Open%(NoOfWindows%),Exit%(NoOfWindows%)
16580 Open%()=FALSE : Exit%()=FALSE :
16590 FOR n%=1 TO NoOfWindows%
16600 Window$(n%)=$(Templates%+12+24*(n%-1))
16610 Window%(n%)=FNWindow_Get(Window$(n%),Template$)
16620 Click%(n%)=sprites_only%
16630 x$+="\"+Window$(n%)
16640 NoOfSubmenus%(n%)=1
16650 Menu$(n%,0)="Menu Maker\Close Window\Menu>1\Run � Open\Close � Exit"
16660 Menu$(n%,1)=Window$(n%)+"\"
16670 NEXT
16680 Wind_Menu%=FNMenu_Create("Windows"+x$)
16690 Windows_Menu%=FNMenu_Create("Windows"+x$)
16700 FOR n%=1 TO NoOfWindows%
16710 IF Click%(n%) THEN PROCMenu_ColourItem(Windows_Menu%,n%,11)
16720 NEXT
16730 Click%()=FALSE
16740 PROCMenu_Enable(Bar_Menu%,3)
16750 PROCMenu_Enable(Bar_Menu%,4)
16760 PROCMenu_Glue(Bar_Menu%,3,Windows_Menu%)
16770 Edit_Menu%=FNMenu_Create("Edit\\Delete\Insert Above\Submenu")
16780 Sub_Menu%=FNMenu_Create(" Submenu \\Colours"+x$)
16790 Insert_Menu%=FNMenu_Create("Insert\")
16800 PROCMenu_DottedLine(Edit_Menu%,1)
16810 PROCMenu_Glue(Edit_Menu%,4,Sub_Menu%)
16820 PROCMenu_Glue(Edit_Menu%,3,Insert_Menu%)
16830 PROCMenu_DottedLine(Edit_Menu%,3)
16840 PROCMenu_DottedLine(Sub_Menu%,1)
16850 PROCMenu_DottedLine(Sub_Menu%,2)
16860 $Buffer1%=""
16870 PROCMenu_Write(Edit_Menu%,1,Buffer%,-1,Buffer_Length%)
16880 PROCMenu_Write(Sub_Menu%,1,Buffer1%,-1,Buffer_Length%)
16890 PROCMenu_Write(Insert_Menu%,1,Buffer2%,-1,Buffer_Length%)
16900 Window$(0)="Bar" : Window%(0)=-2 : NoOfSubmenus%(0)=1
16910 Menu$(0,0)="Icon Bar\Close\Menu>1\Click Opens"
16920 Name$=FNrem(Name$)
16930 Menu$(0,1)=Name$+"\"
16940 FOR n%=1 TO NoOfWindows%
16950 CASE Window$(n%) OF
16960 WHEN "Info","info","INFO"
16970 Menu$(0,1)+="Info>"+STR$(Window%(n%))+"\"
16980 ENDCASE
16990 NEXT
17000 Menu$(0,1)+="Quit\"
17010 ENDCASE
17020 ENDCASE
17030 ENDPROC
17040:
17050DEF FNrem(x$)
17060IF RIGHT$(x$)=CHR$0 THEN=LEFT$(x$) ELSE=x$
17070:
17080REM-------------------------------------------------------------------------
17090REM-------------------------------------------------------------------------
17100REM
17110REM WIMP PROCEDURE LIBRARY
17120REM
17130REM@ INDEX
17140REM
17150REM*******POLLING ROUTINE
17160REM*******WIMP ROUTINES
17170REM*******WINDOW ROUTINES
17180REM*******ICON ROUTINES
17190REM*******MENU ROUTINES
17200REM*******FILE ROUTINES
17210REM*******SPRITE ROUTINES
17220REM*******MISCELLANEOUS
17230REM
17240REM-------------------------------------------------------------------------
17250REM-------------------------------------------------------------------------
17260:
17270REM------------------------------
17280REM*******POLLING ROUTINE
17290REM------------------------------
17300:
17310DEF PROCWimp_WaitForEvent(mask%)
17320finished%=FALSE
17330mask%=mask%OR((1<<2)+(1<<3)+(1<<7)+(1<<9)+(1<<10))
17340mask%=mask%OR((1<<13)+(1<<14)+(1<<15)+(1<<16))
17350mask%=mask%OR%11111111111100000000000000000000
17360mask%=NOT(mask%)
17370REPEAT
17380 SYS "Wimp_Poll",mask%,wimp% TO event%
17390 IF wimp%!0=Save_Window% OR wimp%!12=Save_Window% THEN PROCSave_Event ELSE PROCNonSave_Event
17400UNTIL finished%
17410ENDPROC
17420:
17430DEF PROCNonSave_Event
17440CASE event% OF
17450 WHEN 0 : PROCEvent_DealWithNullEvent(wimp%!0)
17460 WHEN 1 : PROCWindow_Redraw
17470 WHEN 2 : PROCWindow_Open(!wimp%,1)
17480 WHEN 3 : PROCWindow_Close(!wimp%)
17490 WHEN 4 :
17500 WHEN 5 :
17510 WHEN 6 :
17520 PROCEvent_DealWithMouseClick(wimp%!8,wimp%!12,wimp%!16,wimp%!0,wimp%!4)
17530 WHEN 7 : PROCEvent_SaveMessage
17540 WHEN 8 : PROCEvent_DealWithKeyPressed(wimp%!0,wimp%!4,wimp%!24)
17550 WHEN 9 :
17560 PROCEvent_DealWithMenuChoice
17570 WHEN 17,18 : xx%=wimp%!20 : yy%=wimp%!24
17580 CASE wimp%!16=message_save% AND wimp%!36>-1 OF
17590 WHEN TRUE:
17600 file$=FNFile_PathName
17610 PROCEvent_DealWithMessages(wimp%!16)
17620 PROCIcon_MakeText(Save_Window%,1,file$)
17630 OTHERWISE:
17640 PROCEvent_DealWithMessages(wimp%!16)
17650 ENDCASE
17660ENDCASE
17670ENDPROC
17680:
17690REM------------------------------
17700REM SAVE ROUTINES
17710REM------------------------------
17720:
17730DEF PROCSave_Event
17740 CASE wimp%!0 OF
17750 WHEN Save_Window% : PROCFile_Save
17760 OTHERWISE : CASE wimp%!16 OF
17770 WHEN 0 :
17780 IF wimp%!8 AND &50 THEN PROCDrag_Box(Save_Window%)
17790 WHEN 2 :
17800 IF wimp%!8 AND 5 THEN PROCFile_Save
17810 ENDCASE
17820 ENDCASE
17830ENDPROC
17840:
17850 DEF PROCFile_Save
17860 LOCAL x$
17870 x$=FNIcon_GetText(Save_Window%,1)
17880 CASE INSTR(x$,".") OF
17890 WHEN 0 :
17900 PROCAlertBox(Task$,"To save, drag the icon to a directory window")
17910 OTHERWISE :
17920 PROCDealWithSavingOfFile(x$)
17930 ENDCASE
17940 SYS "Wimp_CreateMenu",-1
17950 ENDPROC
17960:
17970 DEF PROCDrag_Box(window%)
17980 LOCAL ox%,oy%
17990 !wimp%=window%
18000 SYS "Wimp_GetWindowState",,wimp%
18010 ox%=wimp%!4-wimp%!20 : oy%=wimp%!16-wimp%!24
18020 wimp%!4=0
18030 SYS "Wimp_GetIconState",,wimp%
18040 !wimp%=window%
18050 wimp%!4=5
18060 wimp%!8=ox%+wimp%!8 : wimp%!12=oy%+wimp%!12
18070 wimp%!16=ox%+wimp%!16 : wimp%!20=oy%+wimp%!20
18080 wimp%!24=0:wimp%!28=0
18090 wimp%!32=&7FFFFFFF : wimp%!36=&7FFFFFFF
18100 SYS "Wimp_DragBox",,wimp%
18110 ENDPROC
18120:
18130 DEF PROCEvent_SaveMessage
18140 LOCAL file$,window%,icon%,x%,y%
18150 SYS "Wimp_GetPointerInfo",,wimp%
18160 window%=wimp%!12 : icon%=wimp%!16 : x%=wimp%!0 : y%=wimp%!4
18170 file$=FNGetLeaf(FNIcon_GetText(Save_Window%,1))
18180 wimp%!20=window%
18190 wimp%!24=icon%
18200 wimp%!28=x% : wimp%!32=y%
18210 wimp%!36=length%
18220 wimp%!0=64
18230 wimp%!12=0
18240 wimp%!16=1
18250 wimp%!40=&FFF
18260 $(wimp%+44)=file$
18270 SYS "Wimp_SendMessage",17,wimp%,wimp%!20,wimp%!24
18280 ENDPROC
18290:
18300 DEF FNGetLeaf(name$)
18310 WHILE INSTR(name$,".")
18320 name$=MID$(name$,INSTR(name$,".")+1)
18330 ENDWHILE
18340 =name$+CHR$(0)
18350:
18360REM------------------------------
18370REM*******WIMP ROUTINES
18380REM------------------------------
18390:
18400DEF PROCWimp_SetEventVariables
18410REM#
18420 DIM wimp% block_memory%,icons% icon_memory%
18430 icon_end%=icons%+icon_memory%
18440 DIM pointer_wimp% 20
18450REM
18460 null%=1 : draw%=2 : pointer_leaving%=1<<4
18470 pointer_entering%=1<<5 : mouse%=1<<6 : drag%=1<<7
18480 key%=1<<8 : menu%=1<<9 : scroll%=1<<10
18490 lose_caret%=1<<11 : gain_caret%=1<<12 : message%=(1<<17)+(1<<18)
18500 recorder%=1<<18 : acknowledge%=1<<19: window%=0
18510 sprites%=1 : version%=0 : task%=0
18520 Bar_Window%=-2 : Bar_Icon%=0 : Bar_Menu%=0
18530 x_origin%=0 : y_origin%=0 : SaveWindow%=-3
18540 message_quit%=0 : message_save%=2 : message_load%=3
18550 mouse_button%=2
18560ENDPROC
18570:
18580DEF FNWimp_Start(TaskName$)
18590REM...Initialises a task.
18600REM...See page 1173 of RiscOs Manual.
18610REM
18620REM
18630 PROCWimp_SetEventVariables
18640 ON ERROR PROCError(task%,TaskName$):END
18650 $wimp%="TASK"
18660 SYS "Wimp_Initialise",200,!wimp%,TaskName$ TO version%,task%
18670=TaskName$
18680:
18690DEF PROCWimp_Quit
18700finished%=TRUE
18710ENDPROC
18720:
18730DEF PROCError(task%,TaskName$)
18740ON ERROR OFF
18750DIM ErrorMsg% 36
18760ErrorMsg%!0 = 36 : REM Length of message
18770ErrorMsg%!12 = 0 : REM This is an original message
18780ErrorMsg%!16 = &81080 : REM Message number to set caret
18790ErrorMsg%!20 = ERL : REM Line to put caret on
18800$(ErrorMsg%+24) = "!RunImage " : REM File to put caret on
18810SYS "Wimp_SendMessage",17,ErrorMsg%
18820PROCWimp_Alert(TaskName$,REPORT$+"at line "+STR$(ERL DIV 10),2)
18830PROCWimp_CloseDown
18840ENDPROC
18850:
18860DEF PROCWimp_CloseDown
18870SYS "Wimp_CloseDown",task%,"TASK"
18880ENDPROC
18890:
18900REM------------------------------
18910REM*******WINDOW ROUTINES
18920REM------------------------------
18930:
18940DEF FNWindow_Load(a$)=FNWindow_Get(a$,"<Make$Dir>.Templates")
18950:
18960DEF FNWindow_Get(a$,path$)
18970LOCAL c%,ic%,id%,in%,i%,x$
18980 SYS "Wimp_OpenTemplate",,path$
18990 $wimp%=a$
19000 ic%=icons%
19010 SYS "Wimp_LoadTemplate",,wimp%,icons%,icon_end%,-1,wimp%,0 TO ,,icons%
19020 id%=icons%-ic%
19030 wimp%!64=sprites%
19040 SYS "Wimp_CreateWindow",,wimp% TO c%
19050 SYS "Wimp_CloseTemplate"
19060 in%=wimp%!84
19070 in%=88+32*in%+id%
19080 IF wimp_memory%<in% THEN wimp_memory%=in%
19090 indirect%+=id%
19100 SYS "Wimp_WhichIcon",c%,wimp%+8,1+2+(1<<8),2+(1<<8)
19110CASE wimp%!8 OF
19120 WHEN -1 : sprites_only%=FALSE
19130 OTHERWISE : i%=8 : sprites_only%=TRUE
19140 REPEAT
19150 wimp%!4=wimp%!i% : wimp%!0=c%
19160 SYS "Wimp_DeleteIcon",,wimp%
19170 i%+=4
19180 UNTIL (wimp%!i%)=-1
19190ENDCASE
19200=c%
19210:
19220DEF PROCWindow_Open(window%,state%)
19230!wimp%=window%
19240IF state%=0 THEN SYS "Wimp_GetWindowState",,wimp%
19250SYS "Wimp_OpenWindow",,wimp%
19260ENDPROC
19270:
19280DEF PROCWindow_OpenUp(window%)
19290PROCWindow_Open(window%,0)
19300PROCWindow_ForceDraw(window%)
19310ENDPROC
19320:
19330DEF PROCWindow_Close(window%)
19340!wimp%=window%
19350SYS "Wimp_CloseWindow",,wimp%
19360ENDPROC
19370:
19380DEF PROCWindow_BringToTop(window%)
19390!wimp%=window%
19400SYS "Wimp_GetWindowState",,wimp%
19410wimp%!28=-1
19420SYS "Wimp_OpenWindow",,wimp%
19430ENDPROC
19440:
19450DEF PROCWindow_Redraw
19460 LOCAL more%
19470 SYS "Wimp_RedrawWindow",,wimp% TO more%
19480 PROCWindow_GetOrigin(wimp%,x0%,y0%)
19490 x_origin%=x0% : y_origin%=y0%
19500 WHILE more%
19510 IF interface% THEN SYS"Wimp_BorderWindow",,wimp%
19520 PROCEvent_DrawWindow(wimp%!0)
19530 SYS "Wimp_GetRectangle",,wimp% TO more%
19540 ENDWHILE
19550 ENDPROC
19560:
19570DEF PROCWindow_ForceDraw(window%)
19580CASE window% OF
19590 WHEN -1 : SYS "Wimp_ForceRedraw",-1,0,0,2*1280,2*1024
19600 OTHERWISE : SYS "Wimp_ForceRedraw",window%,0,-2*1024,2*1280,0
19610ENDCASE
19620ENDPROC
19630:
19640DEF PROCWindow_GetOrigin(wimp%,RETURN x0%,RETURN y0%)
19650x0%=wimp%!4-wimp%!20
19660y0%=wimp%!16-wimp%!24
19670ENDPROC
19680:
19690DEF FNWindow_Title(window%)
19700 wimp%!0=window%
19710 SYS "Wimp_GetWindInfo",,wimp%
19720 IF ((wimp%!60)AND&100)=0 ERROR 1,"Title isn't indirected"
19730=$(wimp%!76)
19740:
19750DEF PROCWindow_Draw(x,y)
19760 DRAW x-x_origin%,y-y_origin%
19770ENDPROC
19780:
19790DEF PROCWindow_Move(x,y)
19800 MOVE x+x_origin%,y_origin%+y
19810ENDPROC
19820:
19830DEF PROCWindow_RectangleFill(x,y,width%,height%,colour%)
19840SYS "Wimp_SetColour",colour%
19850RECTANGLE FILL x-x_origin%,y_origin%+y,width%,height%
19860ENDPROC
19870:
19880DEF PROCWindow_Line(x,y,x1,y1)
19890 LINE x+x_origin%,y+y_origin%,x1+x_origin%,y1+y_origin%
19900ENDPROC
19910:
19920DEF PROCWindow_TAB(x,y)
19930 MOVE 16*x+x_origin%,y_origin%-32*y
19940ENDPROC
19950:
19960REM------------------------------
19970REM*******ICON ROUTINES
19980REM------------------------------
19990:
20000DEF FNIcon_Bar(Sprite$)
20010=FNIcon_Create(-1,0,0,68,68,&3002,Sprite$,0,0,0)
20020:
20030DEF FNIcon_Create(window%,ix%,iy%,iw%,ih%,flag%,text$,d1%,d2%,d3%)
20040wimp%!0=window%
20050wimp%!4=ix% : wimp%!8=iy%
20060wimp%!12=ix%+iw% : wimp%!16=iy%+ih%
20070wimp%!20=flag%
20080IF d1%=0 THEN $(wimp%+24)=text$ ELSE wimp%!24=d1% : wimp%!28=d2% : wimp%!32=d3%
20090SYS "Wimp_CreateIcon",,wimp% TO icon%
20100=icon%
20110:
20120DEF PROCIcon_MakeText(window%,icon%,x$)
20130 wimp%!0=window% : wimp%!4=icon%
20140 SYS "Wimp_GetIconState",,wimp%
20150 IF ((wimp%!24) AND &100)=0 ERROR 1,"Icon isn't indirected"
20160 $(wimp%!28)=x$
20170 wimp%!0=window% : wimp%!4=icon%
20180 wimp%!8=0 : wimp%!12=0
20190 SYS "Wimp_SetIconState",,wimp%
20200ENDPROC
20210:
20220DEF FNIcon_GetText(window%,icon%)
20230 wimp%!0=window% : wimp%!4=icon%
20240 SYS "Wimp_GetIconState",,wimp%
20250 IF ((wimp%!24) AND &100)=0 ERROR 1,"Icon isn't indirected"
20260=$(wimp%!28)
20270:
20280DEF FNIcon_Val(window%,icon%)
20290 wimp%!0=window% : wimp%!4=icon%
20300 SYS "Wimp_GetIconState",,wimp%
20310 IF ((wimp%!24) AND &100)=0 ERROR 1,"Icon isn't indirected"
20320=$(wimp%!32)
20330:
20340DEF PROCWimp_IconMakeSprite(window%,icon%,x$)
20350 wimp%!0=window% : wimp%!4=icon%
20360 SYS "Wimp_GetIconState",,wimp%
20370 $(wimp%+28)=x$+CHR$0
20380 wimp%!0=window% : wimp%!4=icon%
20390 wimp%!8=0 : wimp%!12=0
20400 SYS "Wimp_SetIconState",,wimp%
20410ENDPROC
20420:
20430DEF PROCIcon_Enable(window%,j%)
20440wimp%!0=window% : wimp%!4=j%
20450wimp%!8=0 : wimp%!12=1<<22
20460SYS "Wimp_SetIconState",,wimp%
20470ENDPROC
20480:
20490DEF PROCIcon_Disable(window%,j%)
20500wimp%!0=window% : wimp%!4=j%
20510wimp%!8=1<<22 : wimp%!12=1<<22
20520SYS "Wimp_SetIconState",,wimp%
20530ENDPROC
20540:
20550DEF PROCPlotIcon(wimp%,ix%,iy%,iw%,ih%,flag%,text$,d1%,d2%,d3%)
20560wimp%!0=ix% : wimp%!4=iy%
20570wimp%!8=ix%+iw% : wimp%!12=iy%+ih%
20580wimp%!16=flag%
20590IF d1%=0 THEN $(wimp%+24)=text$ ELSE wimp%!24=d1% : wimp%!28=d2% : wimp%!32=d3%
20600SYS "Wimp_PlotIcon",,wimp%
20610ENDPROC
20620:
20630DEF PROCSprites_Load
20640LOCAL S%,T%
20650S%=OPENIN"<Obey$Dir>.Sprites":T%=EXT#S%+16:CLOSE#S%:S%=0
20660DIM sprites% T%, spname% 12
20670!sprites%=T%:sprites%!8=0
20680SYS "OS_SpriteOp",&109,sprites%
20690SYS "OS_SpriteOp",&10A,sprites%,"<Obey$Dir>.Sprites"
20700ENDPROC
20710:
20720REM------------------------------
20730REM*******MENU ROUTINES
20740REM------------------------------
20750:
20760DEF PROCMenu_AdjustOn(menu%)
20770SYS "Wimp_GetPointerInfo",,pointer_wimp%
20780IF ((pointer_wimp%!8)AND1)=1 THEN SYS "Wimp_CreateMenu",,menu%,pointer_wimp%!0,pointer_wimp%!4
20790ENDPROC
20800:
20810 DEF FNMenu_Create(menu$)
20820 LOCAL menu%
20830 DIM menu% 28+FNMenu_NoOfEntries(menu$)*24
20840=FNMenu_Build(menu%,menu$)
20850:
20860 DEF FNMenu_Build(menu%,menu$)
20870 LOCAL ypos%,width%,length%,k%
20880 menu%?12=7 : menu%?13=2 : menu%?14=7 :menu%?15=0
20890 menu%!16=140 : menu%!20=44 : menu%!24=0
20900 ptr%=menu%+28
20910 $menu%=LEFT$(menu$,INSTR(menu$,"\")-1)
20920 width%=LEN(LEFT$(menu$,INSTR(menu$,"\")-1))
20930 menu$+="\" : Menu_NoOfEntries%=0
20940 WHILE menu$<>""
20950 menu$=MID$(menu$,INSTR(menu$,"\")+1)
20960 CASE menu$ OF
20970 WHEN "":
20980 OTHERWISE:
20990 !ptr%=0 : ptr%!4=-1 : ptr%!8=&7000021
21000 length%=INSTR(menu$,"\")-1 : k%=INSTR(LEFT$(menu$,length%),">")-1
21010 IF k%<>-1 THEN length%=k%
21020 $(ptr%+12)=LEFT$(menu$,length%)
21030 IF length%>width% THEN width%=length%
21040 ptr%+=24
21050 Menu_NoOfEntries%+=1
21060 ENDCASE
21070 ENDWHILE
21080 menu%!16=16*(width%+1)
21090 ptr%!-24=ptr%!-24 OR &80 : REM...Last item
21100 =menu%
21110:
21120 DEF PROCMenu_Build(RETURN Menus%(),Menu$(),i%)
21130 LOCAL ypos%,width%,length%,k%,j%,item$
21140 $Buffer%=""
21150 REMj%=DIM(Menus%(),1)
21160 REMWHILE Menu$(i%,j%)="" : j%-=1 : ENDWHILE
21170 j%=NoOfSubmenus%(i%)
21180 ptr%=Menu_Block%
21190 REPEAT
21200 menu%=ptr% : Menus%(j%)=menu% : menu$=Menu$(i%,j%)
21210 menu%?12=7 : menu%?13=2 : menu%?14=7 :menu%?15=0
21220 menu%!16=140 : menu%!20=44 : menu%!24=0
21230 ptr%=menu%+28
21240 $menu%=LEFT$(menu$,INSTR(menu$,"\")-1)
21250 width%=LEN(LEFT$(menu$,INSTR(menu$,"\")-1))
21260 menu$+="\" : Menu_NoOfEntries%=0
21270 WHILE menu$<>""
21280 menu$=MID$(menu$,INSTR(menu$,"\")+1)
21290 CASE menu$ OF
21300 WHEN ""
21310 OTHERWISE:
21320 !ptr%=0 : ptr%!4=-1 : ptr%!8=&7000021
21330 length%=INSTR(menu$,"\")-1
21340 k%=INSTR(LEFT$(menu$,length%),">")
21350 CASE k% OF
21360 WHEN 0:
21370 OTHERWISE:
21380 item$=MID$(menu$,k%+1,length%-k%)
21390 s%=VAL(item$)
21400 IF s%<100 THEN ptr%!4=Menus%(s%) ELSE ptr%!4=s%
21410 length%=k%-1
21420 ENDCASE
21430 $(ptr%+12)=LEFT$(menu$,length%)
21440 IF length%>width% THEN width%=length%
21450 ptr%+=24
21460 Menu_NoOfEntries%+=1
21470 ENDCASE
21480 ENDWHILE
21490 menu%!16=16*(width%+1)
21500 ptr%!-24=ptr%!-24 OR &80 : REM...Last item
21510 j%-=1
21520 PROCMenu_Write(menu%,Menu_NoOfEntries%,Buffer%,-1,Buffer_Length%)
21530 UNTIL j%=0
21540 Menus%(0)=FNMenu_Build(ptr%,Menu$(i%,0))
21550 PROCMenu_Glue(Menus%(0),2,Menus%(1))
21560 CASE Open%(i%) OF
21570 WHEN TRUE : PROCMenu_Tick(Menus%(0),3)
21580 OTHERWISE : PROCMenu_ATick(Menus%(0),3,0)
21590 ENDCASE
21600 CASE Exit%(i%) OF
21610 WHEN TRUE : PROCMenu_Tick(Menus%(0),4)
21620 OTHERWISE : PROCMenu_ATick(Menus%(0),4,0)
21630 ENDCASE
21640 CASE i% OF
21650 WHEN 0 : PROCMenu_Glue(Menus%(0),3,Wind_Menu%)
21660 ENDCASE
21670 PROCMenu_ForeGroundColour(Menus%(0),1,4)
21680 PROCMenu_ForeGroundColour(Menus%(0),2,4)
21690 PROCMenu_TitleForegroundColour(Menus%(0),4)
21700 PROCMenu_TitleBackgroundColour(Menus%(0),1)
21710 ENDPROC
21720:
21730 DEF PROCMenu_Close
21740 SYS "Wimp_CreateMenu",-1
21750 ENDPROC
21760:
21770 DEF FNMenu_Item(level%)=(wimp%!(4*level%))+1
21780:
21790 DEF FNMenu_NoOfEntries(menu$)
21800 LOCAL n% ,j% : n%=0 : j%=0
21810 REPEAT
21820 j%=INSTR(menu$,"\",j%+1)
21830 IF j%<>0 THEN n%+=1
21840 UNTIL j%=0
21850=n%
21860:
21870DEF PROCBarMenu_PopUp(x%,y%)
21880LOCAL n% : n%=0
21890 WHILE ((Bar_Menu%!(28+n%*24))AND%10000000)=0
21900 n%+=1
21910 ENDWHILE
21920 SYS "Wimp_CreateMenu",,Bar_Menu%,x%-64,160+n%*44
21930 menu%=Bar_Menu%
21940ENDPROC
21950:
21960DEF PROCMenu_PopUp(Menu%,x%,y%)
21970 menu%=Menu%
21980 SYS "Wimp_CreateMenu",,menu%,x%-64,y%+20
21990ENDPROC
22000:
22010 DEF PROCMenu_Glue(menu1%,item%,menu2%)
22020 menu1%!(8+item%*24)=menu2%
22030 ENDPROC
22040:
22050 DEF PROCMenu_UnGlue(menu1%,item%)
22060 menu1%!(8+item%*24)=-1
22070 ENDPROC
22080:
22090 DEF PROCMenu_Message(menu%,item%)
22100 menu%!(28+(item%-1)*24)=(menu%!(28+(item%-1)*24))EOR(1<<3)
22110 ENDPROC
22120:
22130 DEF PROCMenu_Tick(menu%,item%)
22140 menu%!(28+(item%-1)*24)=(menu%!(28+(item%-1)*24))EOR1
22150 ENDPROC
22160 :
22170 DEF PROCMenu_ATick(menu%,item%,i%)
22180 LOCAL x% : x%=menu%!(28+(item%-1)*24) : x%=x%>>>1 : x%=x%<<1
22190 CASE i% OF
22200 WHEN 1 : x%=x%+1
22210 ENDCASE
22220 menu%!(28+(item%-1)*24)=x%
22230 ENDPROC
22240 :
22250 DEF PROCMenu_DottedLine(menu%,item%)
22260 menu%!(28+(item%-1)*24)=(menu%!(28+(item%-1)*24))OR2
22270 ENDPROC
22280 :
22290 DEF PROCMenu_ForeGroundColour(menu%,item%,colour%)
22300 menu%?(39+(item%-1)*24)=colour%+16*((menu%?(39+(item%-1)*24))DIV16)
22310 ENDPROC
22320 :
22330 DEF PROCMenu_BackGroundColour(menu%,item%,colour%)
22340 LOCAL fore%,rem%
22350 fore%=(menu%?(39+(item%-1)*24))MOD16
22360 rem%=((menu%?(39+(item%-1)*24))DIV16)MOD16
22370 menu%?(39+(item%-1)*24)=fore%+16*colour%+rem%
22380 ENDPROC
22390 :
22400 DEF PROCMenu_ColourItem(menu%,item%,colour%)
22410 menu%?(39+(item%-1)*24)=colour%
22420 ENDPROC
22430 :
22440 DEF FNColour(i%)
22450 LOCAL j%
22460 CASE TRUE OF
22470 WHEN i%<4,i%=9,i%=12,i%=14,i%=15 : j%=7
22480 OTHERWISE : j%=0
22490 ENDCASE
22500 =i%*16+j%
22510 :
22520 DEF PROCColourTick(number%)
22530 PROCTick(Colours%,number%+1)
22540 SYS "Wimp_CreateSubMenu",,Colours%,wimp%!24,wimp%!28
22550 PROCTick(Colours%,number%+1)
22560 ENDPROC
22570 :
22580 DEF FNWimp_ColourMenu=FNWimp_ColoursMenu(" ")
22590 :
22600 DEF FNWimp_ColoursMenu(title$)
22610 LOCAL x$,men%,j%
22620 x$=title$+"\0\1\2\3\4\5\6\7\8\9\10\11\12\13\14\15"
22630 men%=FNMenu_Create(x$)
22640 FOR i%=0 TO 15
22650 CASE TRUE OF
22660 WHEN i%<4,i%=9,i%=12,i%=14,i%=15 : j%=7
22670 OTHERWISE : j%=0
22680 ENDCASE
22690 PROCMenu_ColourItem(men%,i%+1,i%*16+j%)
22700 PROCMenu_Centre(men%,i%+1)
22710 NEXT
22720 =men%
22730 :
22740 DEF PROCMenu_Centre(menu%,item%)
22750 menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)OR(1<<3)
22760 ENDPROC
22770 :
22780 DEF PROCMenu_Disable(menu%,item%)
22790 menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)OR(1<<22)
22800 ENDPROC
22810 :
22820 DEF PROCMenu_Enable(menu%,item%)
22830 PROCMenu_Disable(menu%,item%)
22840 menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)EOR(1<<22)
22850 ENDPROC
22860 :
22870 DEF PROCMenu_Write(menu%,item%,buffer%,val%,BufferLength%)
22880 menu%!(28+(item%-1)*24)=(menu%!(28+(item%-1)*24))OR4
22890 menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)OR&100
22900 menu%!(40+(item%-1)*24)=buffer%
22910 menu%!(44+(item%-1)*24)=val%
22920 menu%!(48+(item%-1)*24)=BufferLength%
22930 ENDPROC
22940 :
22950 DEF PROCMenu_Title(menu%,title$)
22960 $menu%=LEFT$(title$,12)+CHR$0
22970 ENDPROC
22980 :
22990 DEF PROCMenu_TitleForegroundColour(menu%,colour%)
23000 menu%?12=colour%
23010 ENDPROC
23020 :
23030 DEF PROCMenu_TitleBackgroundColour(menu%,colour%)
23040 menu%?13=colour%
23050 ENDPROC
23060 :
23070 DEF PROCMenu_Item(menu%,item%,item$)
23080 $(menu%+(40+(item%-1)*24))=LEFT$(item$,12)+CHR$0
23090 ENDPROC
23100:
23110REM------------------------------
23120REM*******FILE ROUTINES
23130REM------------------------------
23140:
23150DEF FNFile_Type
23160 CASE wimp%!40 OF
23170 WHEN &FFF :="Text"
23180 WHEN &FFD :="Data"
23190 WHEN &FFB :="Basic"
23200 WHEN &FF9 :="Sprite"
23210 WHEN &FED :="Palette"
23220 WHEN &FEC :="Template"
23230 WHEN &AFF :="Draw"
23240 WHEN &1000:="Folder"
23250 WHEN &2000:="Application"
23260 OTHERWISE=STR$~(wimp%!40)
23270 ENDCASE
23280:
23290DEF FNFile_PathName=FNGet_StringAtAddress(wimp%+44)
23300:
23310DEF FNFile_Load(f$)
23320 LOCAL S%,T%
23330 DIM offset% 4
23340 S%=OPENIN f$
23350 T%=EXT#S%+16
23360 PTR#S%=0
23370 SYS "OS_GBPB",4,S%,offset%,4
23380 CLOSE#S%:S%=0
23390 CASE offset%!0 OF
23400 WHEN -1:DIM file% T%:S%=TRUE
23410 OTHERWISE :S%=FALSE
23420 ENDCASE
23430 =S%
23440
23450:
23460DEF FNGet_StringAtAddress(ptr%)
23470 LOCAL s$ : s$=""
23480 WHILE (?ptr%<>13)AND(?ptr%<>0) : s$+=CHR$(?ptr%): ptr%+=1 :ENDWHILE:
23490 =s$
23500:
23510DEF FNGet_StringFromPath(f$)
23520IF INSTR(f$,".")=0 THEN=f$ELSE=FNGet_StringFromPath(RIGHT$(f$,LEN(f$)-INSTR(f$,".")))
23530:
23540REM------------------------------
23550REM*******SPRITE ROUTINES
23560REM------------------------------
23570REM
23580:
23590REM------------------------------
23600REM*******MISCELLANEOUS
23610REM------------------------------
23620:
23630DEF PROCWimp_Alert(title$,message$,button%)
23640REM...Places alert box with title and message on screen.
23650REM...See page 1243 RiscOs manual.
23660LOCAL response%
23670$(wimp%+4)=message$
23680CASE button% OF
23690 WHEN 2 : response%=1 : REM...Error Box
23700 WHEN 1 : response%=15 : REM...OK and CANCEL butons
23710 WHEN 3 : response%=(1<<5)+16
23720 WHEN 4 : response%=(1<<6)+16
23730 OTHERWISE : response%=16 : REM...OK button only
23740ENDCASE
23750SYS "Wimp_ReportError",wimp%,response%,title$ TO ,response%
23760ENDPROC
23770:
23780DEF FNCancelBox(title$,message$)
23790 $(wimp%+4)=message$
23800 response%=23
23810 SYS "Wimp_ReportError",wimp%,response%,title$ TO ,response%
23820=response%
23830:
23840DEF FNWimp_BASICParameters
23850 LOCAL com$,param$,I%
23860 SYS "OS_GetEnv" TO com$
23870 params$=""
23880 I%=INSTR(com$," -quit ")
23890 IF I% THEN params$=MID$(com$,INSTR(com$," ",I%+LEN" -quit ")+1)
23900=params$
23910DEF PROCWimp_ErrorBox(title$,message$)
23920PROCWimp_Alert(title$,message$,2)
23930ENDPROC
23940:
23950DEF PROCAlertBox(title$,message$)
23960PROCWimp_Alert(title$,message$,0)
23970ENDPROC
23980:
23990DEF PROCWimp_CancelBox(title$,message$)
24000PROCWimp_Alert(title$,message$,1)
24010ENDPROC
24020:
24030:
24040DEF FNWimp_ReadVariable(Variable$)
24050LOCALlen%,result%,variable%
24060$wimp%=Variable$
24070SYS"OS_ReadVarVal",wimp%,wimp%+255,255,,3 TO,,len%
24080wimp%?(len%+255)=13
24090=$(wimp%+255)
24100:
24110DEF PROCWimp_SendToEdit(file$)
24120LOCAL n%
24130wimp%!4=&6CC01C0C
24140wimp%!16=5
24150wimp%!36=0
24160wimp%!40=&FFF
24170$(wimp%+44)=file$+CHR$0
24180n%=LENfile$+45
24190IF n%MOD4 THEN !wimp%=4+(n%>>2)<<2 ELSE !wimp%=n%
24200SYS "Wimp_SendMessage",17,wimp%,0
24210ENDPROC
24220:
24230DEF PROCWimp_SpritesLoad
24240REM|This loads a file called Sprites from the
24250REM|path
24260REM| <Obey$Dir>.Sprites
24270REM|
24280REM|
24290PROCWimp_SpritesPathLoad("<Obey$Dir>.Sprites")
24300ENDPROC
24310:
24320DEF PROCWimp_SpritesPathLoad(pathname$)
24330REM|This loads a sprites file with full name
24340REM|given by pathname$. E.g.
24350REM|
24360REM| PROCWimp_SpritesPathLoad("$.Pictures")
24370REM|
24380LOCALS%,T%
24390S%=OPENIN pathname$:T%=EXT#S%+16:CLOSE#S%:S%=0
24400DIMsprites%T%,spname%12
24410!sprites%=T%:sprites%!8=0
24420SYS"OS_SpriteOp",&109,sprites%
24430SYS"OS_SpriteOp",&10A,sprites%,pathname$
24440ENDPROC
24450:
24460DEF PROCWimp_SpritesPlot(sprite$)
24470REM|
24480REM|
24490REM|
24500REM|
24510REM|
24520SYS"OS_SpriteOp",&11C,sprites%,sprite$,,,0
24530ENDPROC
24540:
24550DEF PROCWimp_SpritesDelete(sprite$)
24560REM|
24570REM|
24580REM|
24590REM|
24600REM|
24610SYS"OS_SpriteOp",&119,sprites%,sprite$
24620ENDPROC
24630:
24640DEF PROCWimp_SpritesRename(sprite$,name$)
24650REM|
24660REM|
24670REM|
24680REM|
24690REM|
24700SYS"OS_SpriteOp",&11A,sprites%,sprite$,name$
24710ENDPROC
24720:
24730DEFFNicon_newsprite(b,whandle%,ihandle%,newname$,redraw)
24740b!0=whandle%:b!4=ihandle%
24750SYS "Wimp_GetIconState",,b
24760SYS "Wimp_DeleteIcon",,b
24770b!4=b!8:b!8=b!12:b!12=b!16:b!16=b!20:b!20=b!24:$(b+24)=newname$
24780SYS "Wimp_CreateIcon",,b TO ihandle%
24790IF redraw THEN SYS "Wimp_ForceRedraw",b!0,b!4,b!8,b!12,b!16
24800=ihandle%
24810:
24820DEF FNWimp_ReadVariable(Variable$)
24830LOCALlen%,result%,variable%
24840$wimp%=Variable$
24850SYS"OS_ReadVarVal",wimp%,wimp%+255,255,,3TO,,len%
24860wimp%?(len%+255)=13
24870=$(wimp%+255)
24880:
24890DEF PROCcode
24900DIM append% 24
24910FOR K%=0 TO 1:P%=append%:[OPT 2*K%
24920.nextbyte
24930 MOV R1,R6:SWI "OS_BGet"
24940 MOVCS PC,R14
24950 MOV R1,R5:SWI "OS_BPut"
24960 B nextbyte
24970]:NEXT
24980ENDPROC
#�------------------------------
� MAIN PROGRAM
#�------------------------------
(�
2
<1 block_memory%=30*1024 : icon_memory%=20*1024
F wimp_memory%=0:indirect%=0
P :
Z Task$=�Wimp_Start("WimpEd")
d �Create_Windows
n �Create_Icons
x �Create_Menus
� �Create_Initialise
�
�? �Wimp_WaitForEvent(draw%+mouse%+menu%+message%+drag%+key%)
� �Wimp_CloseDown
��
�:
�#�------------------------------
�#�------------------------------
�#� INDEX OF EVENTS TO DEAL WITH
�#�------------------------------
�#�------------------------------
��
��Event0 : THE NULL EVENT
&�Event1 : DRAWING WINDOWS REQUEST
"�Event2 : OPEN WINDOW REQUEST
#�Event3 : CLOSE WINDOW REQUEST
"%�Event4 : POINTER LEAVING WINDOW
,&�Event5 : POINTER ENTERING WINDOW
6�Event6 : MOUSE CLICKS
@�Event7 : DRAGS
J�Event8 : KEY PRESSES
T�Event9 : MENU CHOICES
^�Event10: SCROLL REQUESTS
h�Event11: LOSE CARET
r�Event12: GAIN CARET
|�
��Events17/18/19: MESSAGES
��!
�#�------------------------------
�#�------------------------------
�:
�:
�#�------------------------------
�� INITIAL PROCEDURES
�#�------------------------------
�:
�� �Create_Windows
�& Info_Window%=�Window_Load("info")
�& Save_Window%=�Window_Load("save")
�
:
� �Create_Icons
&# Bar_Icon%=�Icon_Bar("!WimpEd")
0�
::
D� �Create_Menus
NN Bar_Menu%=�Menu_Create("WimpEd\Info\Choices\Windows\Icon Bar\Save\Quit")
XW Choice_Menu%=�Menu_Create("Choices\No REMs\Terse\Library\LoadToEditor\Interface")
b* �Menu_Glue(Bar_Menu%,1,Info_Window%)
l* �Menu_Glue(Bar_Menu%,2,Choice_Menu%)
v* �Menu_Glue(Bar_Menu%,5,Save_Window%)
� �Menu_Disable(Bar_Menu%,3)
� �Menu_Disable(Bar_Menu%,4)
�# �Menu_DottedLine(Bar_Menu%,2)
�# �Menu_DottedLine(Bar_Menu%,4)
�& �Menu_DottedLine(Choice_Menu%,4)
� col%=�Wimp_ColourMenu
��
�:
�� �Create_Initialise
�
�code
�! wimp_memory%=0 : indirect%=0
�7 Template$="" : SSprite$="" : Sprite$="" : next%=0
� Name$="Task" : interface%=�
< NoOfMenus%=16 : NoOfItems%=16 : NoOfWindows%=0 : Bar%=�
NoOfColourMenus%=0
F Buffer_Length%=12 : prolix%=� : terse%=� : cmenu%=0 : Library%=�
Editor%=�
* � Buffer% Buffer_Length%
4 � Buffer1% Buffer_Length%
> � Buffer2% Buffer_Length%
H- � Menus%(NoOfMenus%) : � ColourMenu%(16)
R0 � Menu_Block% NoOfMenus%*(28+NoOfItems%*24)
\* � date% 50 : � Type$(16) : Type$()=""
f) make$=�Wimp_ReadVariable("Make$Dir")
p file$=make$+".Data"
z file%=�(file$)
�, �#file%,prolix%,terse%,Library%,Editor%
� �#file%:file%=0
�. � �(prolix%) � �Menu_Tick(Choice_Menu%,1)
�* � terse% � �Menu_Tick(Choice_Menu%,2)
�, � Library% � �Menu_Tick(Choice_Menu%,3)
�+ � Editor% � �Menu_Tick(Choice_Menu%,4)
��
�:
�#�------------------------------
�&�Event1 : DRAWING WINDOWS REQUEST
�#�------------------------------
�:
� � �Event_DrawWindow(window%)
�
:
#�------------------------------
$�Event6 : MOUSE CLICKS
.#�------------------------------
8:
B<� �Event_DealWithMouseClick(button%,window%,icon%,x%,y%)
LȎ button% �
V- � 2 : �PopUpMenu(window%,icon%,x%,y%)
`0 : � interface% ș"Wimp_BorderIcon",,wimp%
j�
t�
~:
�& � �PopUpMenu(window%,icon%,x%,y%)
�: � window%=0 � xxx%=640 : yyy%=512 � xxx%=x% : yyy%=y%
� � i%
� Ȏ window% �
� � Bar_Window%
� Ȏ icon% �
�, � Bar_Icon% : �BarMenu_PopUp(x%,y%)
� �
�
�
i%=-1
� � i%+=1
�> � window%=Window%(i%) � �WindowsMenu_PopUp(i%,x%,y%)
3 � (i%=NoOfWindows%) � (window%=Window%(i%))
�
�
:
($ � �WindowsMenu_PopUp(i%,x%,y%)
2
� n%
< xx%=x% : yy%=y%
F window_menu%=i%
P' �Menu_Build(Menus%(),Menu$(),i%)
Z# �Menu_PopUp(Menus%(0),x%,y%)
d �
n:
x#�------------------------------
��Event7 : DRAGS
�#�------------------------------
�:
�#�------------------------------
��Event8 : KEY PRESSES
�#�------------------------------
�:
�3� �Event_DealWithKeyPressed(window%,icon%,key%)
�
Ȏ key% �
�
� 13 :
�& : ș "Wimp_ProcessKey",wimp%!24
��
��
:
#�------------------------------
�Event9 : MENU CHOICES
"#�------------------------------
,:
6� �Event_DealWithMenuChoice
@ Ȏ menu% �
J% � Bar_Menu% : �DealWithBar_Menu
T% � Edit_Menu%: �DealWithEditMenu
^0 : �DealWithWindowMenu(window_menu%)
h �
r�
|:
� � �DealWithEditMenu
� menu$=Menu$(Wind%,Menu%)
� Ȏ �Menu_Item(0) �
�7 � 1 : Menu$(Wind%,Menu%)=�EditItem(menu$,Item%)
� � 2 : �DeleteItem
� � 3 : Ȏ �Menu_Item(1) �
�$ � 1 :�InsertAbove
� �
� � 4 : Ȏ �Menu_Item(1) �
�) � 0 : �RemoveSubMenu
�& � 1 : �AddSubMenu
�) � 2 : �AddColourMenu
�! : �WindowLeaf
�
�
% � Wind%=0 � xxx%=640 : yyy%=512
&) �WindowsMenu_PopUp(Wind%,xxx%,yyy%)
0 �
::
D � �AddColourMenu
N! � i%,j%,k% : i%=0 : j%=0
X men$=Menu$(Wind%,Menu%)
b7 � : i%+=1 : j%=�menu$,"\",j%+1) : � i%=Item%+1
l i%=�Wimp_ColourMenu
v; men$=�men$,j%-1)+">"+�(i%)+"C"+�men$,�(men$)-j%+1)
� Menu$(Wind%,Menu%)=men$
� �
�:
� � �EditItem(menu$,k%)
�- � i%,j%,s%,item$,insert$: i%=0 : j%=0
�
� insert$=$Buffer%
� Ȏ insert$ �
� � "" : =menu$
�
�1 � : i%+=1 : j%=�menu$,"\",j%+1) : � i%=k%
� i%=�menu$,"\",j%+1)
�" item$=�menu$,j%+1,i%-j%-1)
s%=�item$,">")+j%
Ȏ s% �
� j% :
:
*- insert$=insert$+�menu$,s%,i%-s%)
4' s%=�(�menu$,s%+1,i%-s%-1))
>1 � s%<100 � �ChangeTitle(s%,$Buffer%)
H �
R/ =�menu$,j%)+insert$+�menu$,�menu$-i%+1)
\ �
f:
p" � �ChangeTitle(s%,insert$)
z* � i%,men$ : men$=Menu$(Wind%,s%)
� i%=�men$,"\")
�2 Menu$(Wind%,s%)=insert$+�men$,�men$-i%+1)
� �
�:
� � �RemoveSubMenu
� � i%,j% : i%=0 : j%=0
�! menu$=Menu$(Wind%,Menu%)
�5 � : i%+=1 : j%=�menu$,"\",j%+1) : � i%=Item%
� i%=�menu$,"\",j%+1)
�# item$=�menu$,j%+1,i%-j%-1)
� s%=�item$,">")
� Ȏ s% �
� � 0 :
' Ȏ �Menu_Item(1) �
+ � 1 : �AddSubMenu
& : �WindowLeaf
$ �
.
:
84 Ȏ �CancelBox(Task$,"Delete Submenus?") �
B) � 1 : s%=�(�item$,�item$-s%))
L5 � s%<100 � �RemoveTree(Wind%,s%)
V' Ȏ �Menu_Item(1) �
`+ � 1 : �AddSubMenu
j& : �WindowLeaf
t �
~
� �
�
�
� �
�:
� � �AddSubMenu
� � i%,j% : i%=0 : j%=0
� NoOfSubmenus%(Wind%)+=1
�! menu$=Menu$(Wind%,Menu%)
�7 � : i%+=1 : j%=�menu$,"\",j%+1) : � i%=Item%+1
�I menu$=�menu$,j%-1)+">"+�NoOfSubmenus%(Wind%)+�menu$,�menu$-j%+1)
�! Menu$(Wind%,Menu%)=menu$
�E Menu$(Wind%,NoOfSubmenus%(Wind%))=$Buffer%+"\"+$Buffer1%+"\"
�
:
� �WindowLeaf
� i%,j% : i%=0 : j%=0
(! menu$=Menu$(Wind%,Menu%)
2' wind%=Window%(�Menu_Item(1)-2)
<7 � : i%+=1 : j%=�menu$,"\",j%+1) : � i%=Item%+1
F> menu$=�menu$,j%-1)+">"+�(wind%)+�menu$,�(menu$)-j%+1)
P! Menu$(Wind%,Menu%)=menu$
Z �
d:
n � �DeleteItem
x& � i%,j%,k%,item$ : i%=0 : j%=0
� menu$=Menu$(Wind%,Menu%)
�4 � : i%+=1 : j%=�menu$,"\",j%+1) : � i%=Item%
� i%=�menu$,"\",j%+1)
�; Menu$(Wind%,Menu%)=�menu$,j%-1)+�menu$,�menu$-i%+1)
�" item$=�menu$,j%+1,i%-j%-1)
� k%=�item$,">")
� Ȏ k% �
� � 0 :
� :
� s%=�(�item$,�item$-k%))
� Ȏ s%<100 �
� � �:
�< tot%=0:�RemoveTree(Wind%,s%):�UpdateTree(Wind%,s%)
$ NoOfSubmenus%(Wind%)-=tot%
�
�
" �
,:
6 � �RemoveTree(Wind%,k%)
@ � i%,j% : i%=0
J �
T& i%=�Menu$(Wind%,k%),">",i%+1)
^6 j%=�(�Menu$(Wind%,k%),�(Menu$(Wind%,k%))-i%))
h1 � i%<>0 � j%<100 � �RemoveTree(Wind%,j%)
r � i%=0
|$ Menu$(Wind%,k%)="" : tot%+=1
� �
�:
� � �UpdateTree(Wind%,s%)
� � i%
� Ȏ s% �
�! � NoOfSubmenus%(Wind%) :
� : i%=s%
�E � : i%+=1 : � Menu$(Wind%,i%)<>"" � i%>NoOfSubmenus%(Wind%)
� Ȏ � �
�' � i%<=NoOfSubmenus%(Wind%) :
�+ Menu$(Wind%,s%)=Menu$(Wind%,i%)
� Menu$(Wind%,i%)=""
�! �Relabel(Wind%,s%,i%)
�
�
< � s%<NoOfSubmenus%(Wind%) � �UpdateTree(Wind%,s%+1)
&
�
0:
: � �Relabel(Wind%,s%,i%)
D1 � j%,k%,t%,x$,y$ : j%=0 : x$=">"+�i%+"\"
N> � : j%+=1 : k%=�Menu$(Wind%,j%),x$) : � k%<>0 � j%>s%
X, y$=Menu$(Wind%,j%) : t%=�y$,"\",k%)
b2 Menu$(Wind%,j%)=�y$,k%)+�s%+�y$,�y$-t%+1)
l
�
v:
� � �InsertAbove
� � i%,j% : i%=0 : j%=0
�! menu$=Menu$(Wind%,Menu%)
�5 � : i%+=1 : j%=�menu$,"\",j%+1) : � i%=Item%
�9 menu$=�menu$,j%)+$Buffer2%+"\"+�menu$,�menu$-j%)
�! Menu$(Wind%,Menu%)=menu$
� �
�:
� � �DealWithBar_Menu
� � file%
� Ȏ �Menu_Item(0) �
� � 1 :
�
� 2 : Ȏ �Menu_Item(1) �
* � 1 : prolix%=�(prolix%)
5 �Menu_Tick(Choice_Menu%,1)
4 Ȏ �(prolix%) � �terse% �
* � �
4, terse%=�(terse%)
>6 �Menu_Tick(Choice_Menu%,2)
H �
R0 �Menu_AdjustOn(menu%)
\( � 2 : terse%=�(terse%)
f5 �Menu_Tick(Choice_Menu%,2)
p2 Ȏ �terse% � �prolix% �
z � �
�, prolix%=�prolix%
�6 �Menu_Tick(Choice_Menu%,1)
� �
�0 �Menu_AdjustOn(menu%)
�, � 3 : Library%=�(Library%)
�5 �Menu_Tick(Choice_Menu%,3)
�0 �Menu_AdjustOn(menu%)
�* � 4 : Editor%=�(Editor%)
�5 �Menu_Tick(Choice_Menu%,4)
�0 �Menu_AdjustOn(menu%)
� � 5 :
� *set interface$ true
�O *if "<System$Path>" = "" then Error 0 System resources cannot be found
> *RMEnsure SharedCLibrary 0 RMLoad System:modules.CLib
8 *RMEnsure SharedCLibrary 0 set interface$=false
H *RMEnsure InterfaceManager 1.25 RMLoad System:modules.Interface
$= *RMEnsure InterfaceManager 1.25 set interface$ false
.. Ȏ �Wimp_ReadVariable("interface$") �
8 � "true" :
B$ interface%=�(interface%)
L& �Menu_Tick(Choice_Menu%,5)
V! �Menu_AdjustOn(menu%)
`
:
jF �AlertBox("WimpEd","Interface module couldn't be loaded!")
t
�
~ �
� � 3 :
� Ȏ �Menu_Item(1) �
� � 0 :
� : itm%=�Menu_Item(1)
�6 �Window_BringToTop(Window%(itm%))
�* �Menu_AdjustOn(menu%)
� �
� � 4 : Ȏ NoOfWindows% �
�F � 0 : �AlertBox(Task$,"No templates file loaded!")
� :
�8 ș "Wimp_GetPointerInfo",,pointer_wimp%
�+ Ȏ ((pointer_wimp%!8)�1) �
$ � 1 : Ȏ Bar% �
! � �
T Ȏ �CancelBox(Task$,"No icon to be placed on Bar?") �
$ � 1:
(8 �Menu_Tick(Bar_Menu%,4)
2' Bar%=�
< �
F �
P6 :� �Bar% � �Menu_Tick(Bar_Menu%,4)
Z# Bar%=�
d: �WindowsMenu_PopUp(0,640,512)
n �
x �
� � 5 :
� � 6 : �Wimp_Quit
� �
� �
�:
�# � �DealWithWindowMenu(window%)
� � item%
� Buffer$=$Buffer%
� Ȏ �Menu_Item(0) �
� � 1 :
� Ȏ window% �
�0 � 0 : ș "Wimp_CreateMenu",-1
�3 : �Window_Close(Window%(window%))
�
� 2 :
Ȏ �Menu_Item(1) �
"+ � 0 : �DeleteWindowMenu(window%)
,' : �DealWithSelection(window%)
6 �
@ � 3 :
J Ȏ window% �
T � 0 :
^$ item%=�Menu_Item(1)
h Ȏ item% �
r � 0:
| :
�0 Click%(item%)=�(Click%(item%))
�. �Menu_Tick(Wind_Menu%,item%)
�/ �WindowsMenu_PopUp(0,640,512)
� �
�4 : Open%(window%)=�(Open%(window%))
� �
�, � 4 : Exit%(window%)=�(Exit%(window%))
� �
� �
�:
�! � �DeleteWindowMenu(window%)
� � i%
�@ Ȏ �CancelBox(Task$,"Delete "+Window$(window%)+" menu?") �
, � 1 : � i%=1 � NoOfSubmenus%(window%)
% Menu$(window%,i%)=""
�
&5 Menu$(window%,1)=Window$(window%)+"\"
0 � 2 :
: �
D �
N:
X" � �DealWithSelection(window%)
b& � menu$,x$,i%,j%,k% : j%=1 : i%=1
l menu$=Menu$(window%,1)
v ȕ �Menu_Item(j%)<>0
�' menu$=�Menu(menu$,�Menu_Item(j%))
� k%=i%
�0 i%=�menu$,">") : i%=�(�menu$,�(menu$)-i%))
�( � i%<100 � menu$=Menu$(window%,i%)
� j%+=1
� �
�< j%=�Menu_Item(j%-1) : menu$=�Menu(Menu$(window%,k%),j%)
� Ȏ menu$ �
� � "" : Ȏ Buffer$ �
� � "" :
� :
�- �AddMenuItem(window%,k%)
�6 � window%=0 � xxx%=640 : yyy%=512
? �WindowsMenu_PopUp(window_menu%,xxx%,yyy%)
�
' : �EditMenuItem(window%,k%,j%)
�
* �
4 :
>" � �AddMenuItem(window%,menu%)
H � k%
R" Ȏ (window%=0) � (menu%=1) �
\ � �
f k%=�Menu$(0,1),"\Quit\")
p2 Menu$(0,1)=�Menu$(0,1),k%)+Buffer$+"\Quit\"
z � �
�( Menu$(window%,menu%)+=Buffer$+"\"
� �
� �
� :
�( � �EditMenuItem(window%,men%,item%)
� i%=�menu$,">")
�" � i%<>0 � menu$=�menu$,i%-1)
�2 $Buffer%=menu$ : $Buffer1%="" : $Buffer2%=""
�. Wind%=window% : Menu%=men% : Item%=item%
�% ș "Wimp_GetPointerInfo",,wimp%
�- �Menu_PopUp(Edit_Menu%,wimp%!0,wimp%!4)
� �
� :
� �Menu(menu$,item%)
� i%,k%
k%=0 : i%=0
$ �
." k%=�menu$,"\",k%+1) : i%+=1
8 � i%=item%
B i%=�menu$,"\",k%+1)
L7 � i%=0 �=�menu$,�menu$-k%) �=�menu$,k%+1,i%-k%-1)
V :
`#�------------------------------
j�Events17/18/19: MESSAGES
t$�----------- -------------------
~:
�'� �Event_DealWithMessages(message%)
�Ȏ message% �
�# � message_quit% : �Wimp_Quit
�> � message_save% : �DealWithSavingOfFile(�File_PathName)
�/ � message_load% : �DealWithLoadingOfFile
�' � &400C0 : window_menu%=0
��
��Menu_Close
��
�:
�# � �DealWithSavingOfFile(file$)
� ș "Hourglass_On"
file%=�(make$+".Data ")
/ �#file%, prolix%,terse%,Library%,Editor%
�#file%:file%=0
� c$ : c$="F~C~V"
(H �("*CDIR "+file$) : � Create Application Directory
2J � Template$<>"" � �("* COPY "+Template$+" "+file$+".Templates "+c$)
<E � Sprite$<>"" � �("*COPY "+Sprite$+" "+file$+".Sprites "+c$)
F Ȏ SSprite$ �
P � "" :
ZE �("*COPY "+make$+".Library.!Sprites "+file$+".!Sprites "+c$)
d
:
n7 �("*COPY "+SSprite$+" "+file$+".!Sprites "+c$)
x �
� �Create_RunFile(file$)
� �Create_HelpFile(file$)
� �Create_RunImage(file$)
� ș "Hourglass_Off"
� Ȏ Library% �
�
� � :
�" f$=make$+".Library.WimpB"
� c$="F~C~V"
�* �("*COPY "+f$+" "+g$+".Wimp "+c$)
� :
�" f$=make$+".Library.Wimp"
�2� s%=OPENIN f$ : t%=EXT#s% : CLOSE#s% : s%=0
�'� OSCLI("LOAD "+f$+" "+STR$~ptr%)
� ptr%+=t%
" F%=�(file$+".!RunImage")
�#F%=�#F%
" G%=�(f$)
,0� PTR#F%=PTR#F% - 2:REM for BASIC files
6 � append%
@1� REPEAT:B%=BGET#G%:BPUT#F%,B%:UNTIL EOF#G%
J �#F%:F%=0
T �#G%:G%=0
^ �
h
r Ȏ Editor% �
| � �
� *set Dialogue$ yes
�1 *RmEnsure Dialogue 0.00 *set Dialogue$ no
�, Ȏ �Wimp_ReadVariable("Dialogue$") �
� � "yes"
�| �("WimpTask MESSAGE StrongED2_OpenDoc "+file$+".!RunImage 128 960 528 520 0 0 -wrap 80 -wordwrap -bcol 7 -fcol 0")
� �
�+ �Wimp_SendToEdit(file$+".!RunImage")
� �
�
� �
�:
� � �Create_RunFile(file$)
�: � ptr% : ptr%=wimp% : application$=��GetLeaf(file$))
�Add_Line("",0)
@ �Add_Line("| ----------------------------"+ĩName$,"-"),0)
8 �Add_Line("| Run file for application : "+Name$,0)
&@ �Add_Line("| ----------------------------"+ĩName$,"-"),0)
0 �Add_Line("",0)
:1 application$=�application$,�application$-1)
D8 �Add_Line("Set "+application$+"$Dir <Obey$Dir>",2)
N Ȏ SSprite$ �
X � "" :
b
:
l6 �Add_Line("IconSprites <Obey$Dir>.!Sprites",2)
v �
� Ȏ interface% �
�
� �:
� �Add_Line("",0)
�1 �Add_Line("| Loading interface module:",0)
� �Add_Line("",0)
�^ �Add_Line("If ""<System$Path>""="""" then Error 0 System resources cannot be found",2)
�J �Add_Line("RMEnsure SharedCLibrary 0 RMLoad System:modules.CLib",2)
�T �Add_Line("RMEnsure InterfaceManager 1.25 RMLoad System:modules.Interface",2)
�Y �Add_Line("RMEnsure InterfaceManager 1.25 Error Couldn't load Interface module",2)
� �
� �Add_Line("",0)
�/ �Add_Line("WimpSlot -min 64K -max 64K",2)
�. �Add_Line("Run <Obey$Dir>.!RunImage ",2)
file$+=".!Run"
, ș "OS_File",10,file$,&FEB,,wimp%,ptr%
�
:
* � �Create_HelpFile(file$)
4 � ptr%,i% : ptr%=wimp%
> date%!0=0
H ș "OS_Word",14,date%
R y$=$date%
\ �Add_Line(" ",0)
f �Add_Line(�40,"-"),18)
p7 �Add_Line("Application : "+Name$,(63-�Name$)�2)
z �Add_Line("",0)
�> �Add_Line("Help for Version 1.0 : ("+�y$,5,11)+")",20)
� �Add_Line(" ",0)
� �Add_Line(�40,"-"),18)
�% � i%=1 � 5 :�Add_Line("",0):�
�/ �Add_Line("<User writes help here>",26)
� �Add_Line("",0)
� file$+=".!Help"
�, ș "OS_File",10,file$,&FFF,,wimp%,ptr%
� �
� :
�#�------------------------------
��>>>>>>>>>>>!RunImage
�#�------------------------------
�
� �Create_RunImage(file$)
� ptr%
$ ptr%=wimp%
. �Index
8 �MainProgram
B �Create_Procedures
L �Event_Procedures
V g$=file$
` file$+=".!RunImage"
j, ș "OS_File",10,file$,&FD1,,wimp%,ptr%
t �
~:
� � �Index
� x$=��GetLeaf(file$))
� indent%=20
�. �Comment2("PROGRAM INDEX : "+x$,indent%)
� indent%=25
�" �Add_REM(�30,"-"),indent%-5)
� �Add_REM("",0)
�) �Add_REM("1.�MAIN�PROGRAM",indent%)
� �Add_REM("",0)
�. �Add_REM("2.�CREATE�PROCEDURES",indent%)
� �Add_REM("",0)
�3 �Add_REM("2.1�Create�Initial�Data",indent%+4)
. �Add_REM("2.2�Create�Windows",indent%+4)
, �Add_REM("2.3�Create�Menus",indent%+4)
�Add_REM("",0)
- �Add_REM("3.�EVENT�PROCEDURES",indent%)
( �Add_REM("",0)
2. �Add_REM("3.0�Window�Closing",indent%+4)
<. �Add_REM("3.1�Window�Drawing",indent%+4)
F, �Add_REM("3.2�Mouse�Clicks",indent%+4)
P+ �Add_REM("3.3�Key�Presses",indent%+4)
Z, �Add_REM("3.4�Menu�Choices",indent%+4)
d, �Add_REM("3.5�File�Loading",indent%+4)
n+ �Add_REM("3.6�File�Saving",indent%+4)
x �Add_REM("",0)
�" �Add_REM(�30,"-"),indent%-5)
� �Add_REM("",0)
� �
� :
� � �MainProgram
� �Add_REMS(2)
�% �Heading("1.�MAIN�PROGRAM",20)
� indent%=24
� �Add_REMS(2)
�G � Library% � �Add_Line("LIBRARY "+"""<Obey$Dir>.Wimp""",indent%)
� �Add_REMS(1)
� arg$=""""
� arg$+=application$
arg$+=""""
- arg$+=","+�wimp_memory%+","+�indirect%
4 �Add_Line("PROCWimp_Start("+arg$+")",indent%)
" �Add_REMS(1)
,3 �Add_Line("PROCUser_SetInitialData",indent%)
6 �Add_REMS(1)
@. �Add_Line("PROCCreate_Windows",indent%)
J, �Add_Line("PROCCreate_Menus",indent%)
T �Add_REMS(1)
^1 �Add_Line("PROCWimp_WaitForEvent",indent%)
h �Add_REMS(1)
r. �Add_Line("PROCWimp_CloseDown",indent%)
| �Add_REMS(1)
� �Add_Line("END",indent%)
� �Add_REMS(5)
� �
� :
� � �Create_Procedures
� �User_SetInitialData
� �Windows
�
�Menus
� �
� :
� � �User_SetInitialData
� indent%=4
�2 �Header("2.1�Create�Initial�Data",indent%)
0 �Add_PROC("User_SetInitialData",indent%)
; � interface% � �Add_Line("interface%=TRUE",indent%)
Ȏ �(terse%) �
& � � :
0= �Heading("Users Initial Data goes here",indent%+10)
: �Add_REMS(1)
D �
N. �Footer("End of Initial Data",indent%)
X �
b :
l � �Memory(j%)
v � memory%,x$ : memory%=0
� flag%=Templates%!j%
� Ȏ � �
�$ � (flag%�(1<<8))=(1<<8)
� Ȏ � �
� � (flag%�1)=1
�4 m%=Templates%!(j%+12) : memory%+=m%
�' Ȏ Templates%!(j%+8) �
� � -1 :
� :
� � validated!
�& m%=Templates%!(j%+8)
� x$=$m%
� m%=20*�(x$)+1
memory%+=m%
�
�
�
* =memory%
4 :
> � �Title
H+ � memory%,j%,x$ : memory%=0 : j%=72
R flag%=Templates%!60
\ Ȏ � �
f$ � (flag%�(1<<8))=(1<<8)
p Ȏ � �
z � (flag%�1)=1
�3 m%=Templates%!(j%+12) : memory%=m%
�' Ȏ Templates%!(j%+8) �
� � -1 :
� :
� � validated!
�& m%=Templates%!(j%+8)
� x$=$m%
� m%=20*�(x$)+1
� memory%+=m%
� �
� �
� �
� =memory%
:
� �IconMemory
� i%,j%,n%,memory%
$ Ȏ NoOfWindows% �
. � 0
8
B � i%=1 � NoOfWindows%
L" Templates%!0=Window%(i%)
V- ș "Wimp_GetWindowInfo",,Templates%
` memory%=�Title
j n%=Templates%!88
t j%=92+16
~ �
� memory%+=�Memory(j%)
� j%+=32
� � j%>=(n%*32+92+16)
� �
� �
� =memory%
� :
� � �Header(x$,indent%)
�! �Heading(x$,16+indent%)
� �Add_REMS(2)
�$ �Add_REM(�65,"~"),indent%)
� �Add_REMS(1)
�
:
� �Footer(x$,indent%)
�Add_REMS(1)
(' �Add_Line("ENDPROC",indent%)
2 �Add_REMS(1)
<% �Add_REM(�65,"~"),indent%)
F, �Add_REM(�65-�x$," ")+x$,indent%)
P �Add_REMS(3)
Z �
d :
n � �Footer1(x$,indent%)
x �Add_REMS(1)
�% �Add_REM(�65,"~"),indent%)
�, �Add_REM(�65-�x$," ")+x$,indent%)
� �Add_REMS(3)
� �
� :
� � �Windows
� � i%,x$
� indent%=4
�- �Header("2.2�Create�Windows",indent%)
�+ �Add_PROC("Create_Windows",indent%)
� �Add_REMS(1)
�
� Ȏ Sprite$ �
� "" :
= � �(terse%) � �Heading("No sprite file",indent%+10)
:
" �Add_REMS(1)
,: �Add_Line("PROCWimp_SpritesLoad",indent%+2)
6 �Add_REMS(1)
@ �
J Ȏ NoOfWindows% �
T � 0 :
^A � �(terse%) � �Heading("No windows defined",indent%+10)
h :
r �Add_REMS(1)
| � i%=1 � NoOfWindows%
� x$=Window$(i%)
� x$=�15-�x$," ")+x$
�@ x$+="_Window%=FNWimp_WindowLoad("""+Window$(i%)+""")"
� �Add_Line(x$,indent%)
� �
� �Add_REMS(1)
� open%=�
� � i%=1 � NoOfWindows%
� Ȏ Open%(i%) �
� � � :
�U �Add_Line("PROCWimp_WindowBringToTop("+Window$(i%)+"_Window%)",indent%+1)
� open%=�
� �
�
! Ȏ �open% � �(terse%) �
� �:
&@ �Heading("No windows opened at run time!",indent%+10)
0 �
: �
D Ȏ Bar% �
N
� �:
XP �Add_Line("Bar_Icon%=FNWimp_IconBar("""+"!"+application$+""")",indent%)
b � �
lK � �(terse%) � �Heading("No icon defined for icon bar",indent%+10)
v �
�$ �Add_Line("ENDPROC",indent%)
� �Add_Line(":",indent%+1)
� Ȏ �SaveTrue �
� � �:
�8 �Add_Line("DEF FNEvent_Save(window%)",indent%+1)
�. �Add_Line("CASE window% OF",indent%+3)
� � i%=1 � NoOfWindows%
� Ȏ �Window$(i%),4) �
� � "Save","save","SAVE"
�C �Add_Line("WHEN "+Window$(i%)+"_Window% :=TRUE",indent%+5)
� �
� �
�0 �Add_Line("OTHERWISE :=FALSE",indent%+5)
!& �Add_Line("ENDCASE",indent%+3)
!
!> �Add_Line("DEF FNEvent_Save(window%)=FALSE",indent%+1)
! �
!* �Add_REMS(1)
!4 �Add_Line(":",indent%+1)
!>D �Add_Line("DEF FNEvent_Sprites(window%)=sprites%",indent%+1)
!H �Add_REMS(1)
!R1 �Footer1("End of Create Windows",indent%)
!\ �
!f :
!p � �Add_PROC(x$,indent%)
!z �Add_Line(":",indent%)
!�) �Add_Line("DEF PROC"+x$,indent%)
!� �Add_REMS(1)
!� �
!� :
!�
� �Menus
!� indent%=4
!�+ �Header("2.3�Create�Menus",indent%)
!�) �Add_PROC("Create_Menus",indent%)
!� Ȏ � �
!�% � NoOfWindows%=0 � Bar%=0 :
!�A � �(terse%) � �Heading("No menus defined!",indent%+10)
!� :
!� � i%=0 � NoOfWindows%
"; k%=NoOfSubmenus%(i%)-1 : x$=Window$(i%)+"_Menu%"
" Ȏ k% �
" � 0 :
"$ menu$=�Menu$(i%,1))
". Ȏ �menu$,"\") �
"8 � 0 :
"B Ȏ �terse% �
"L � �
"VD �Add_REM("No menu for window: "+Window$(i%),indent%)
"` �
"j
"t& � �((i%=0) � (Bar%=�)) �
"~ Ȏ �terse% �
"� � �
"� �Add_REMS(1)
"�A �Add_REM("Menu for window: "+Window$(i%),indent%)
"� �Add_REMS(1)
"� �
"�6 �Add_Menu(" "+x$,Menu$(i%,1),-1,indent%)
"� �
"� �Add_REMS(1)
"� �
"� :
"� Ȏ �terse% �
"� � �
# �Add_REMS(1)
#
> �Add_REM("Menu for window: "+Window$(i%),indent%)
# �Add_REMS(1)
#
�
#(6 �Add_Line(" DIM "+x$+"("+�k%+")",indent%)
#2 �Add_REMS(1)
#< � j%=k% � 0 �-1
#F5 �Add_Menu(x$,Menu$(i%,j%+1),j%,indent%)
#P �
#Z �Add_REMS(1)
#d
�
#n �
#x �
#�$ �Add_Line("ENDPROC",indent%)
#� �Add_Line(":",indent%+1)
#� �MousePopUp
#�3 �Footer1("End of Menu Definitions",indent%)
#� �
#� :
#� � �MousePopUp
#� indent%=4
#�6 �Add_Line("DEF FNEvent_Menu(window%)",indent%+1)
#� Ȏ � �
#�# � NoOfWindows%=0 � Bar%=0 :
#�' �Add_Line("=FALSE",indent%+1)
#� :
$0 �Add_Line("CASE window% OF",indent%+1)
$ � i%=0 � NoOfWindows%
$, x$="WHEN "+Window$(i%)+"_Window%"
$"! x$+=�24-�x$," ")+": ="
$, menu$=�Menu$(i%,1))
$6 Ȏ �menu$,"\") �
$@ � 0 :
$J : Ȏ i% �
$T! � 0 :
$^$ Ȏ Bar% �
$h1 � � : x$+="Bar_Menu%"
$r+ : x$+="FALSE"
$| �
$�5 : x$+=Window$(i%)+"_Menu%"
$� �
$�0 �Add_Line(x$,indent%+2)
$� �
$� �
$�A �Add_Line("OTHERWISE : =FALSE",indent%+2)
$�( �Add_Line("ENDCASE",indent%+1)
$� �Add_REMS(1)
$� �
$� �Add_REMS(1)
$� �
$�:
$�* � �Add_Menu(x$,menu$,j%,indent%)
%% menu$=�Amend_Menu(x$,menu$)
% menu$=�menu$)
% Ȏ j% �
%& � -1,0 :
%0/ �Add_MenuLine(" "+x$,menu$,indent%)
%: :
%D; �Add_MenuLine(" "+x$+"("+�j%+")",menu$,indent%)
%N �
%X �
%b :
%l+ � �Add_MenuLine(x$,menu$,indent%)
%v � i%,j%,k%,len%,s$
%�+ i%=60-�x$-�("=FNWimp_MenuCreate")
%� Ȏ � �
%� � i%>�(menu$)
%�F �Add_Line(x$+"=FNWimp_MenuCreate("""+menu$+""")",indent%)
%�
:
%�! len%=60-�("menu$=")-4
%� Ȏ � �
%� � �(menu$)<=len%
%�; �Add_Line("menu$="+""""+menu$+"""",indent%+2)
%�
%� s$="-" : j%=0
%� �
%�B � : k%=j%:j%=�menu$,"\",j%+1) : � (j%>len%) � (j%=0)
&) � j%>58 � �menu$>58 � j%=k%
& Ȏ s$ �
& � "-" : s$=" "
& : s$="+"
&* �
&4 Ȏ j% �
&> � 0
&HC �Add_Line("menu$"+s$+"="+""""+menu$+"""",indent%+2)
&R menu$=""
&\
&fH �Add_Line("menu$"+s$+"="+""""+�menu$,j%)+"""",indent%+2)
&p' menu$=�menu$,�menu$-j%)
&z �
&� � menu$=""
&�
�
&�= �Add_Line(x$+"=FNWimp_MenuCreate(menu$)",indent%)
&� �
&� �
&� :
&�! � �Amend_Menu(x$,menu$)
&�! � i%,j%,k%,n%,z$ : i%=0
&�
� :
&� i%=�menu$,">",i%+1)
&� Ȏ i% �
&� � 0 :
&� :
'" j%=�menu$,"\",i%+1)
') k%=�(�menu$,i%+1,j%-i%-1))
' Ȏ � �
'$ � k%<100
'.& z$=x$+"("+�(k%-1)+")"
'8
'B0 Ȏ ��menu$,i%+1,j%-i%-1),"C") �
'L � 0 :
'V n%=1
'`0 ȕ Window%(n%)<>k% : n%+=1 :�
'j, z$=Window$(n%)+"_Window%"
't :
'~9 n%=i% : � : n%-=1 : � �menu$,n%,1)="\"
'�4 z$=�menu$,n%+1,i%-n%-1)+"_CMenu%"
'�6 �Add_MenuLine(z$,"Colours",indent%)
'� �
'� �
'�6 menu$=�menu$,i%)+z$+�menu$,�menu$-j%+1)
'�
�
'� � i%=0
'� =menu$
'�:
'�:
'�#�------------------------------
'�$�# WRITING EVENT PROCEDURES
( #�------------------------------
(
�
(:
( � �Event_Procedures
(( �WindowClose
(2 �WindowDraw
(< �MouseClick
(F �Keys
(P �User_MenuChoice
(Z �FileLoading
(d �FileSaving
(n �
(x :
(� � �WindowClose
(� indent%=4
(�+ �Header("3.0�Window�Closing",indent%)
(�> �Add_PROC("Event_WindowClose(window%,buttons%)",indent%)
(� Ȏ NoOfWindows% �
(�G � 0 : � �(terse%) � �Heading("No windows defined",indent%+10)
(�
:
(�- �Add_Line("CASE window% OF",indent%)
(� � i%=1 � NoOfWindows%
(�+ x$="WHEN "+Window$(i%)+"_Window%"
(� x$+=�25-�x$," ")+":"
(� Ȏ Exit%(i%) �
(� � � :
)1 x$+=" REM No closing action defined!"
)1 � �(terse%) � �Add_Line(x$,indent%+1)
) :
)"! x$+=" finished%=TRUE"
),# �Add_Line(x$,indent%+1)
)6 �
)@
�
)J% �Add_Line("ENDCASE",indent%)
)T �
)^ �Add_REMS(1)
)h" �Add_Line("ENDPROC",indent%)
)r �Add_REMS(2)
)|6 �Footer1("End of Window Close Routines",indent%)
)� �
)�:
)� � �WindowDraw
)� � i%,draw% : draw%=�
)� Ȏ NoOfWindows% �
)�
� 0:
)� :
)� � i%=1 � NoOfWindows%
)� Templates%!0=Window%(i%)
)�* ș "Wimp_GetWindowInfo",,Templates%
)�! Flag%(i%)=!(Templates%+32)
)� Flag%(i%)=Flag%(i%)>>>4
)� Flag%(i%)=Flag%(i%)�2
* � Flag%(i%)<>1 � draw%=�
* �
* �
*& =draw%
*0 :
*: � �WindowDraw
*D indent%=4
*N+ �Header("3.1�Window�Drawing",indent%)
*XB �Add_PROC("Event_Draw(window%,x_origin%,y_origin%)",indent%)
*b Ȏ NoOfWindows% �
*lG � 0 : � �(terse%) � �Heading("No windows defined",indent%+10)
*v
:
*�- �Add_Line("CASE window% OF",indent%)
*� � i%=1 � NoOfWindows%
*�+ x$="WHEN "+Window$(i%)+"_Window%"
*� x$+=�25-�x$," ")+":"
*� Ȏ Flag%(i%) �
*� � 1 :
*�- x$+=" REM Redrawn automatically!"
*�1 � �(terse%) � �Add_Line(x$,indent%+1)
*� :
*�5 x$+=" PROCUser_Draw"+Window$(i%)+"Window"
*�# �Add_Line(x$,indent%+1)
*� �
*�
�
+% �Add_Line("ENDCASE",indent%)
+ �
+ �Add_REMS(1)
+ " �Add_Line("ENDPROC",indent%)
+* �Add_REMS(2)
+4 Ȏ NoOfWindows% �
+> � 0 :
+H :
+R" � i%=1 � NoOfWindows%
+\ Ȏ Flag%(i%) �
+f! � 1 :
+p
+zE �Add_PROC("User_Draw"+Window$(i%)+"Window",indent%+6)
+�J � prolix% �Heading("User to provide code here",indent%+10)
+�. �Add_Line("ENDPROC",indent%+6)
+� �Add_REMS(2)
+� �
+� �
+� �
+�8 �Footer1("End of Window Drawing Routines",indent%)
+� �
+�:
+� � �MenuExist
+�! � i%,menu% : i%=-1 : menu%=�
+� Ȏ NoOfWindows% �
+� � 0
, � Bar% � menu%=�
,
, � : i%+=1
,$* � ��Menu$(i%,1)),"\")<>0 � menu%=�
,." � i%=NoOfWindows% � menu%=�
,8 �
,B
=menu%
,L :
,V
,` � �MouseClick
,j � i%,click% : click%=�
,t Ȏ NoOfWindows% �
,~ � 0 : � Bar%<>0 � click%=�
,�
,� � Bar% � click%=�
,� � i%=1 � NoOfWindows%
,� Templates%!0=Window%(i%)
,�* ș "Wimp_GetWindowInfo",,Templates%
,� Flag%(i%)=Templates%!64
,� Flag%(i%)=Flag%(i%)>>>12
,� Ȏ Window$(i%) �
,�- � "Save","save","SAVE" : Flag%(i%)=-1
,�
,�" � Flag%(i%)<>0 � click%=�
,� �
- �
-
�
-=click%
-:
-(� �MouseClick
-2 indent%=4
-<) �Header("3.2�Mouse�Clicks",indent%)
-FH �Add_PROC("Event_MouseClick(window%,icon%,button%,x%,y%)",indent%)
-P* �Add_Line("CASE window% OF",indent%)
-Z �BarMouse
-d Ȏ NoOfWindows% �
-n � 0 :
-x@ � �(terse%) � �Heading("No windows defined!",indent%+10)
-�
-� �MouseContents
-� �
-�" �Add_Line("ENDCASE",indent%)
-� �Add_REMS(1)
-�" �Add_Line("ENDPROC",indent%)
-�$ � NoOfWindows%<>0 � �MouseSubs
-�: �Footer1("End of Dealing with Mouse Clicks",indent%)
-� �
-� :
-� � �BarMouse
-� Ȏ Bar% �
-� � � :
.& x$="WHEN Bar_Window% :"
.4 �Add_Line(x$+" PROCUser_MouseBar",indent%+1)
.
:
."? x$="WHEN Bar_Window% : REM No Icon on icon bar!"
.,+ � �terse% � �Add_Line(x$,indent%+1)
.6 �
.@ �
.J :
.T � �MouseContents
.^ � nn%,mm%
.h � i%=1 � NoOfWindows%
.r Ȏ �Window$(i%),4) �
.|, � "Save","save","SAVE" : Flag%(i%)=-1
.�
:
.� Templates%!0=Window%(i%)
.�+ ș "Wimp_GetWindowInfo",,Templates%
.� nn%=Templates%!88
.� mm%=Templates%!(92+16)
.� Flag%(i%)=Templates%!64
.� Flag%(i%)=Flag%(i%)>>>12
.�! Ȏ nn%=0 � Flag%(i%)<>0 �
.� � �:
.� :
.�2 pattern%=(1<<12)+(1<<13)+(1<<14)+(1<<15)
.�? ș "Wimp_WhichIcon",Window%(i%),Templates%,pattern%,0
.� mm%=0
/. ȕ (Templates%!mm%)<>-1 : mm%+=4 : �
/ mm%=(mm%�4)
/" � nn%<>mm% � Flag%(i%)=1
/& �
/0 �
/: �Mice
/D �
/N �
/X :
/b � �Mice
/l' x$="WHEN "+Window$(i%)+"_Window%"
/v x$+=�24-�x$," ")+": "
/� Ȏ Flag%(i%) �
/� � 0 : Ȏ terse% �
/� � �
/�= x$+="REM Mouse clicks are ignored!"
/�0 �Add_Line(x$,indent%+1)
/� �
/� � -1 :
/�B : x$+="PROCUser_Mouse"+Window$(i%)+"( button%,icon%)"
/�. �Add_Line(x$,indent%+1)
/� �
/� �
/� :
/� � �MouseSubs
0 � Bar% � �BarSub
0 � i%=1 � NoOfWindows%
0 Ȏ Flag%(i%) �
0 � 0,-1 :
0*
:
04 �Add_REMS(2)
0>: x$="User_Mouse"+Window$(i%)+"( button%,icon%)"
0H# �Add_PROC(x$,indent%+2)
0R� �Add_Line("PROCWimp_WindowAlert("+""""+Window$(i%)+""""+","+"""Mouse button="""+"+STR$button%+"+"""icon="""+"+STR$icon%)",indent%+3)
0\ �Add_REMS(1)
0f* �Add_Line("ENDPROC",indent%+2)
0p
�
0z �
0� �
0� :
0� � �BarSub
0� �Add_REMS(2)
0�* �Add_PROC("User_MouseBar",indent%+2)
0� click%=�
0� � i%=1 � NoOfWindows%
0� Ȏ � �
0� � Click%(i%)
0�C x$="PROCWimp_WindowBringToTop("+Window$(i%)+"_Window%)"
0�# �Add_Line(x$,indent%+3)
0� click%=�
0� �
1
�
1 Ȏ prolix% �
1
� �
1$U � �(click%) � �Heading("Use PROCWimp_WindowBringToTop() here ",indent%+8)
1. �
18 �Add_REMS(1)
1B# �Add_Line("ENDPROC",indent%+2)
1L �
1V:
1`
� �Keys
1j � write% : write%=�
1t Ȏ �Window$(i%),4) �
1~) � "SAVE","Save","save" : write%=1
1�
:
1�0 pattern%=(1<<12)+(1<<13)+(1<<14)+(1<<15)
1�D ș "Wimp_WhichIcon",Window%(i%),Templates%,pattern%,pattern%
1�' � (Templates%!0)<>-1 � write%=�
1� �
1�
=write%
1� :
1�
� �Keys
1� indent%=4
1�( �Header("3.3�Key�Presses",indent%)
1�= �Add_PROC("Event_KeyPress(window%,icon%,key%)",indent%)
1� Ȏ NoOfWindows% �
2 � 0
2
? � �(terse%) � �Heading("No windows defined!",indent%+10)
2
2, �Add_Line("CASE window% OF",indent%+3)
2( � i%=1 � NoOfWindows%
22) x$="WHEN "+Window$(i%)+"_Window%"
2< x$+=�24-�x$," ")+": "
2F Ȏ �Keys �
2P
� 1 :
2Z � �
2dP �Add_Line(x$+"PROCUser_KeyPress"+Window$(i%)+"( icon%,key%)",indent%+4)
2n � �
2xI � �(terse%) � �Add_Line(x$+"REM No writeable icons!",indent%+4)
2� �
2� �
2�$ �Add_Line("ENDCASE",indent%+3)
2� �Add_REMS(1)
2� �
2�" �Add_Line("ENDPROC",indent%)
2� �Add_REMS(2)
2� � NoOfWindows%<>0 � �Key2
2�5 �Footer1("End of key press procedures",indent%)
2� �
2�:
2�
� �Key2
2� � i%=1 � NoOfWindows%
3 Ȏ �Keys �
3
� -1
3 �Add_REMS(1)
3"I �Add_PROC("User_KeyPress"+Window$(i%)+"( icon%,key%)",indent%+2)
3,� �Add_Line("PROCWimp_WindowAlert("+""""+Window$(i%)+""""+","+"""Key pressed="""+"+STR$key%+"+"""icon="""+"+STR$icon%)",indent%+2)
36 �Add_REMS(1)
3@' �Add_Line("ENDPROC",indent%+2)
3J �
3T �
3^ �
3h:
3r � �User_MenuChoice
3| indent%=4
3�) �Header("3.4�Menu�Choices",indent%)
3�2 �Add_PROC("Event_MenuChoice(menu%)",indent%)
3� Ȏ � �
3�" � NoOfWindows%=0 � Bar%=0 :
3�@ � �(terse%) � �Heading("No windows defined!",indent%+10)
3�
3�, �Add_Line("CASE menu% OF",indent%+1)
3� �Add_REMS(1)
3� � i%=0 � NoOfWindows%
3�( x$="WHEN "+Window$(i%)+"_Menu%"
3� x$+=�24-�x$," ")+": "
3� menu$=�Menu$(i%,1))
3� Ȏ i% �
4 � 0 :
4V � Bar%<>0 � x$+="PROCUser_MenuChoice"+Window$(i%): �Add_Line(x$,indent%+7)
4 :
4& Ȏ �menu$,"\") �
40 � 0:
4:R � �(terse%) � x$+="REM No menu defined!":�Add_Line(x$,indent%+7)
4D :
4N6 x$+="PROCUser_MenuChoice"+Window$(i%)
4X( �Add_Line(x$,indent%+7)
4b �
4l �
4v �
4� �Add_REMS(1)
4�& �Add_Line("ENDCASE",indent%+1)
4� �
4� �Add_REMS(1)
4�" �Add_Line("ENDPROC",indent%)
4� �MenuDealer
4�7 �Footer1("End of Menu Choice Procedures",indent%)
4� �
4�:
4� � �MenuDealer
4�
� i%
4� Ȏ � �
4�" � NoOfWindows%=0 � Bar%=0 :
5
:
5 � i%=0 � NoOfWindows%
5 menu$=�Menu$(i%,1))
5 Ȏ �menu$,"\") �
5* � 0:
54 :
5> Ȏ i%=0 � Bar%=0 �
5H � �:
5R :
5\ �Add_REMS(2)
5f= �Add_PROC("User_MenuChoice"+Window$(i%),indent%)
5p& �MenuPrint(Menu$(i%,1),0)
5z) �Add_Line("ENDPROC",indent%)
5�
�
5� �
5� �
5� �
5� �
5�:
5� � �MenuPrint(menu$,level%)
5�9 � j%,k%,s%,t%,v%,item$,itm$ : k%=�menu$,"\") : v%=0
5�D �Add_Line("CASE FNWimp_MenuChoice("+�level%+") OF",2*level%+5)
5� � : v%+=1
5�! � v%<10 � c$=" :" � c$=":"
5�# j%=k% : k%=�menu$,"\",j%+1)
5� Ȏ k% �
6 � 0
6 :
61 item$=�menu$,j%+1,k%-j%-1) : itm$=item$
6$ s%=�item$,">")
6. Ȏ s% �
68 � 0 :
6B x$=""""+item$+""""
6L item$="WHEN "+�v%+c$
6V Ȏ itm$ �
6` � "Quit" :
6j$ item$+="finished%=TRUE"
6t :
6~= item$+=" PROCWimp_WindowAlert("+""""+Window$(i%)
6�* item$+=" Menu"+""""+","+x$+")"
6�
�
6�' �Add_Line(item$,2*level%+6)
6� :
6�# t%=�(�item$,�item$-s%))
6� item$=�item$,s%-1)
6� item$="WHEN "+�v%+c$
6�' �Add_Line(item$,2*level%+6)
6� Ȏ �itm$) �
6� � "C"
6�? x$="IF FNWimp_MenuChoice("+�(level%+1)+")<>0 THEN"
6�% �Add_Line(x$,2*level%+8)
7 ; x$="col%=FNWimp_MenuChoice("+�(level%+1)+")-1"
7
& �Add_Line(x$,2*level%+10)
7@ x$="PROCWimp_WindowAlert("+""""+Window$(i%)+" Menu"
77 item$=x$+""",""Colour Chosen=""+STR$col%)"
7() �Add_Line(item$,2*level%+10)
72* �Add_Line("ENDIF",2*level%+8)
7<
�
7F8 � t%<100 � �MenuPrint(Menu$(i%,t%),level%+1)
7P �
7Z �
7d � k%=0
7n% �Add_Line("ENDCASE",2*level%+5)
7x �
7�:
7� � �FileLoading
7� indent%=4
7�
7�) �Header("3.5�File�Loading",indent%)
7�6 �Add_PROC("Event_LoadFile(file$,type$)",indent%)
7� Ȏ next% �
7� � 0:
7�< � �(terse%) � �Heading("No files loaded!",indent%+8)
7�
7�- �Add_Line("CASE type$ OF",indent%+2)
7� � i%=1 � next%
7�D x$ ="WHEN "+""""+Type$(i%)+""""+�13-�(Type$(i%))," ")+": "
85 x$+="PROCUser_LoadFile"+Type$(i%)+"(file$)"
8! �Add_Line(x$,indent%+4)
8
�
8"' �Add_Line("ENDCASE",indent%+2)
8, �
86 �Add_REMS(1)
8@# �Add_Line("ENDPROC",indent%)
8J Ȏ next% �
8T � 0:
8^
8h � i%=1 � next%
8r �Add_REMS(1)
8|B �Add_PROC("User_LoadFile"+Type$(i%)+"(file$)",indent%+2)
8�$ x$="PROCWimp_WindowAlert("
8�) x$+=""""+��GetLeaf(file$))+""""
8�/ x$+=","+"""Loading file """+"+file$)"
8�! �Add_Line(x$,indent%+4)
8� �Add_REMS(1)
8�( �Add_Line("ENDPROC",indent%+2)
8�
�
8� �
8�9 �Footer1("End of file loading procedure",indent%+2)
8� �
8�:
8� � �FileSaving
8� indent%=4
9( �Header("3.6�File�Saving",indent%)
98 �Add_PROC("Event_SaveFile(file$,window%)",indent%)
9 Ȏ �SaveTrue �
9&
� �:
90- �Add_Line("CASE window% OF",indent%+2)
9: � i%=1 � NoOfWindows%
9D) x$="WHEN "+Window$(i%)+"_Window%"
9N x$+=�26-�x$," ")+": "
9X Ȏ �Window$(i%),4) �
9b � "Save","save","SAVE"
9l% x$+="PROCWimp_WindowAlert("
9v# x$+=""""+Window$(i%)+""""
9�. x$+=","+"""Saving file """+"+file$)"
9�! �Add_Line(x$,indent%+4)
9� :
9�' x$+="REM Not a save window!"
9�- � �terse% � �Add_Line(x$,indent%+4)
9� �
9� �
9�% �Add_Line("ENDCASE",indent%+2)
9� �
9�5 �Footer("End of file saving procedure",indent%)
9� �
9�:
9�� �SaveTrue
:� result%,i%
:Ȏ NoOfWindows% �
:� 0 : result%=�
: :
:* i%=0
:4 �
:> i%+=1
:H Ȏ �Window$(i%),4) �
:R+ � "Save","save","SAVE" : result%=�
:\ �
:f" � i%=NoOfWindows% � result%=�
:p�
:z=result%
:�:
:�#�------------------------------
:�� Tool procedures
:�#�------------------------------
:��
:�:
:� � �Add_Line(x$,indent%)
:� Ȏ prolix% �
:� � �:
:�% $ptr%=�3+indent%," ")+x$+�10
:� ptr%+=�x$+4+indent%
:�
:
:�K � �x$,3)<>"REM" � $ptr%=�3+indent%," ")+x$+�10:ptr%+=�x$+4+indent%
; �
; �
;:
;$ � �Add_REM(x$,indent%)
;., �Add_Line("REM"+�indent%," ")+x$,-3)
;8 �
;B:
;L � �Add_REMS(n%)
;V � i%
;`) � i%=1 � n% : �Add_REM("",0) : �
;j �
;t:
;~ � �Heading(x$,indent%)
;� �Add_REM("",0)
;�: �Add_REM("------------------------------",indent%)
;�/ �Add_REM(�15-(�(x$)�2)," ")+x$,indent%)
;�: �Add_REM("------------------------------",indent%)
;� �Add_REM("",0)
;� �
;� :
;� � �Comment(x$)
;� �Add_REM("",0)
;�- �Add_Line("REM"+�15," ")+�30,"-"),-3)
;�1 �Add_Line("REM"+�30-(�(x$)�2)," ")+x$,-3)
;�- �Add_Line("REM"+�15," ")+�30,"-"),-3)
<