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