Home » Archimedes archive » Archimedes World » AW-1992-08.adf » AWaug92 » !AWaug92/Goodies/WimpGloss/!WimpGloss/Wimp/Menus

!AWaug92/Goodies/WimpGloss/!WimpGloss/Wimp/Menus

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/WimpGloss/!WimpGloss/Wimp/Menus
Read OK:
File size: 1881 bytes
Load address: 0000
Exec address: 0000
File contents
DEF FNWimp_MenuChoice(level%)
REM|Gives the item number for a given level of a menu
REM|choice.    E.g. If the menu path is
REM|           item1.item2.item3  ....  , 
REM|then     FNWimp_MenuChoice(0)=1 ,
REM|         FNWimp_MenuChoice(1)=2 ,        etc.
=(wimp%!(4*level%))+1
:
DEF FNWimp_MenuCreate(menu$)
REM|Creates a menu and returns the value of the menu's
REM|handle.   E.g.
REM|
REM|    Bar_Menu%=FNWimp_MenuCreate("Info\Quit")
REM|    Bar_CMenu%=FNWimp_MenuCreate("Colours")
LOCAL menu%,index%,width%,length%,k%,s%
DIM menu% 28+FNInternal_MenuNoOfEntries(menu$)*24
menu%?12=7   : menu%?13=2  : menu%?14=7 :menu%?15=0
menu%!16=140 : menu%!20=44 : menu%!24=0
index%=menu%+28
$menu%=LEFT$(menu$,INSTR(menu$,"\")-1)
width%=LEN(LEFT$(menu$,INSTR(menu$,"\")-1))
menu$+="\" : Menu_NoOfEntries%=0
WHILE menu$<>""
menu$=MID$(menu$,INSTR(menu$,"\")+1)
IF menu$<>"" THEN
!index%=0 : index%!4=-1 : index%!8=&7000021
length%=INSTR(menu$,"\")-1
k%=INSTR(LEFT$(menu$,length%),">")
IF k%<>0 THEN
s%=EVAL(MID$(menu$,k%+1,length%-k%))
index%!4=s%
length%=k%-1
ENDIF
$(index%+12)=LEFT$(menu$,length%)
IF length%>width% THEN width%=length%
index%+=24
ENDIF
ENDWHILE
menu%!16=16*(width%+1)
index%!-24=index%!-24 OR &80 : REM|...Last item
=menu%
:
DEF FNWimp_MenuColours
REM|Creates a standard colours menu, three characters
REM|wide, with no title.
REM|The value returned by the function is the menu.
REM|handle E.g.
REM|         Colours_Menu%=FNWimp_MenuColours
=FNWimp_MenuCreateColours(" ")
:
DEF FNWimp_MenuCreateColours(title$)
REM|As for FNWimp_MenuColours, this creates a colours
REM|menu but with a title, given by the string title$.
REM|E.g.
REM| Colours_Menu%=FNWimp_MenuCreateColours("Colours")
REM|
LOCAL x$,men%,j%,i%
x$=title$+"\0\1\2\3\4\5\6\7\8\9\10\11\12\13\14\15"
men%=FNWimp_MenuCreate(x$)
FOR i%=0 TO 15
CASE TRUE OF
WHEN i%<4,i%=9,i%=12,i%=14,i%=15 : j%=7
OTHERWISE : j%=0
ENDCASE
men%?(39+i%*24)=i%*16+j%
PROCWimp_MenuCentre(men%,i%+1)
NEXT
=men%
:
DEF FNWimp_MenuNoOfEntries(menu$)
REM|Calculates the number of entries in a menu string.
REM|E.g. 
REM|  FNWimp_MenuNoOfEntries("Menu\item1\item2\item3")
REM|
REM|has the value 3.
LOCAL n% ,j% : n%=0 : j%=0
REPEAT
j%=INSTR(menu$,"\",j%+1)
IF j%<>0 THEN n%+=1
UNTIL j%=0
=n%
:
DEF PROCWimp_MenuBackGroundColour(menu%,item%,colour%)
REM|Sets the background colour of a menu item. The
REM|handle of the menu is given by menu%.  E.g.
REM|    PROCWimp_MenuBackgroundColour(menu%,1,11)
REM|sets the background of first item in menu% to 
REM|colour 11, which is usually red.
LOCAL fore%,i%
fore%=(menu%?(39+(item%-1)*24))MOD16
i%=((menu%?(39+(item%-1)*24))DIV16)MOD16
menu%?(39+(item%-1)*24)=fore%+16*colour%+i%
ENDPROC
:
DEF PROCWimp_MenuCentre(menu%,item%)
REM|Prints the item specified in the centre of the 
REM|menu.
REM|
REM|
REM|
menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)OR(1<<3)
ENDPROC
:
DEF PROCWimp_MenuClose
REM|Causes all menus currently being displayed to 
REM|close.
REM|
REM|
REM|
SYS "Wimp_CreateMenu",-1
ENDPROC
:
DEF PROCWimp_MenuDisable(menu%,item%)
REM|Causes the item specified to be disabled. This is
REM|shown when the menu is displayed by the item being
REM|"greyed out".
REM|
REM|
menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)OR(1<<22)
ENDPROC
:
DEF PROCWimp_MenuDottedLine(menu%,item%)
REM|When the menu is displayed a dotted line is shown
REM|AFTER the specified item.
REM|
REM|
REM|
menu%!(28+(item%-1)*24)=(menu%!(28+(item%-1)*24))OR2
ENDPROC
:
DEF PROCWimp_MenuEnable(menu%,item%)
REM|The opposite of MenuDisable. Causes the item to
REM|be selectable.
REM|
REM|
REM|
PROCWimp_MenuDisable(menu%,item%)
menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)EOR(1<<22)
ENDPROC
:
DEF PROCWimp_MenuForegroundColour(menu%,item%,colour%)
REM|Sets the foreground colour (i.e. the colour in
REM|which the item is written) to the colour specified.
REM|E.g.
REM|   PROCWimp_MenuForegroundColour(menu%,1,11)
REM|writes the first item in colour 11 (red?).
menu%?(39+(item%-1)*24)=colour%+16*((menu%?(39+(item%-1)*24))DIV16)
ENDPROC
:
DEF PROCWimp_MenuGlue(menu1%,item%,menu2%)
REM|This glues item% of menu1% to menu2%. I.e. menu2%
REM|is a submenu of menu1% and an arrow appears in
REM|item% of menu1%. When the mouse pointer passes
REM|over this arrow, menu2% will open.
REM|
menu1%!(8+item%*24)=menu2%
ENDPROC
:
DEF PROCWimp_MenuItem(menu%,item%,item$)
REM|This resets item% of menu% to the value given
REM|by the string variabele item$. E.g.
REM|   PROCWimp_MenuItem(menu%,1,"colours")
REM|would cause the first item of menu% to have the
REM|text  "colours".
$(menu%+(40+(item%-1)*24))=LEFT$(item$,12)+CHR$0
ENDPROC
:
DEF PROCWimp_MenuMessage(menu%,item%)
REM|If item% has an arrow leading to a submenu, this
REM|procedure causes a wimp message to be generated
REM|when the mouse pointer passes over the arrow.
REM|
REM|
menu%!(28+(item%-1)*24)=(menu%!(28+(item%-1)*24))EOR(1<<3)
ENDPROC
:
DEF PROCWimp_MenuPopUp(Menu%,x%,y%)
REM|This procedure causes the menu specified to
REM|pop up on the screen at the point (x%,y%).
REM|
REM|
REM|
menu%=Menu%
SYS "Wimp_CreateMenu",,menu%,x%-64,y%+20
ENDPROC
:
DEF PROCWimp_MenuPopUpBar(x%,y%)
REM|Causes the menu on the icon bar to "pop up".
REM|The icon bar menu MUST have the handle
REM|Bar_Menu%.
REM|
REM|
LOCAL n% : n%=0
WHILE ((Bar_Menu%!(28+n%*24))AND%10000000)=0
n%+=1
ENDWHILE
SYS "Wimp_CreateMenu",,Bar_Menu%,x%-64,96+n%*44
menu%=Bar_Menu%
ENDPROC
:
DEF PROCWimp_MenuTick(menu%,item%)
REM|This causes a tick � to appear before the
REM|menu item.
REM|
REM|
REM|
menu%!(28+(item%-1)*24)=(menu%!(28+(item%-1)*24))EOR1
ENDPROC
:
DEF PROCWimp_MenuTitle(menu%,title$)
REM|This sets the title of the menu to the string
REM|title$.
REM|
REM|
REM|
$menu%=LEFT$(title$,12)+CHR$0
ENDPROC
:
DEF PROCWimp_MenuWrite(menu%,item%,buffer%,val%,BufferLength%)
REM|This makes a menu item writeable. The contents of
REM|the item are stored in the block array buffer% ,
REM|which the user has previously DIMensioned. The
REM|length of buffer% is BufferLength%. If there is 
REM|no validation string val%=-1.
menu%!(28+(item%-1)*24)=(menu%!(28+(item%-1)*24))OR4
menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)OR&100
menu%!(40+(item%-1)*24)=buffer%
menu%!(44+(item%-1)*24)=val%
menu%!(48+(item%-1)*24)=BufferLength%
ENDPROC
REM|                    Uses wimp%,menu%,Bar_Menu%
00000000  44 45 46 20 46 4e 57 69  6d 70 5f 4d 65 6e 75 43  |DEF FNWimp_MenuC|
00000010  68 6f 69 63 65 28 6c 65  76 65 6c 25 29 0a 52 45  |hoice(level%).RE|
00000020  4d 7c 47 69 76 65 73 20  74 68 65 20 69 74 65 6d  |M|Gives the item|
00000030  20 6e 75 6d 62 65 72 20  66 6f 72 20 61 20 67 69  | number for a gi|
00000040  76 65 6e 20 6c 65 76 65  6c 20 6f 66 20 61 20 6d  |ven level of a m|
00000050  65 6e 75 0a 52 45 4d 7c  63 68 6f 69 63 65 2e 20  |enu.REM|choice. |
00000060  20 20 20 45 2e 67 2e 20  49 66 20 74 68 65 20 6d  |   E.g. If the m|
00000070  65 6e 75 20 70 61 74 68  20 69 73 0a 52 45 4d 7c  |enu path is.REM||
00000080  20 20 20 20 20 20 20 20  20 20 20 69 74 65 6d 31  |           item1|
00000090  2e 69 74 65 6d 32 2e 69  74 65 6d 33 20 20 2e 2e  |.item2.item3  ..|
000000a0  2e 2e 20 20 2c 20 0a 52  45 4d 7c 74 68 65 6e 20  |..  , .REM|then |
000000b0  20 20 20 20 46 4e 57 69  6d 70 5f 4d 65 6e 75 43  |    FNWimp_MenuC|
000000c0  68 6f 69 63 65 28 30 29  3d 31 20 2c 0a 52 45 4d  |hoice(0)=1 ,.REM|
000000d0  7c 20 20 20 20 20 20 20  20 20 46 4e 57 69 6d 70  ||         FNWimp|
000000e0  5f 4d 65 6e 75 43 68 6f  69 63 65 28 31 29 3d 32  |_MenuChoice(1)=2|
000000f0  20 2c 20 20 20 20 20 20  20 20 65 74 63 2e 0a 3d  | ,        etc..=|
00000100  28 77 69 6d 70 25 21 28  34 2a 6c 65 76 65 6c 25  |(wimp%!(4*level%|
00000110  29 29 2b 31 0a 3a 0a 44  45 46 20 46 4e 57 69 6d  |))+1.:.DEF FNWim|
00000120  70 5f 4d 65 6e 75 43 72  65 61 74 65 28 6d 65 6e  |p_MenuCreate(men|
00000130  75 24 29 0a 52 45 4d 7c  43 72 65 61 74 65 73 20  |u$).REM|Creates |
00000140  61 20 6d 65 6e 75 20 61  6e 64 20 72 65 74 75 72  |a menu and retur|
00000150  6e 73 20 74 68 65 20 76  61 6c 75 65 20 6f 66 20  |ns the value of |
00000160  74 68 65 20 6d 65 6e 75  27 73 0a 52 45 4d 7c 68  |the menu's.REM|h|
00000170  61 6e 64 6c 65 2e 20 20  20 45 2e 67 2e 0a 52 45  |andle.   E.g..RE|
00000180  4d 7c 0a 52 45 4d 7c 20  20 20 20 42 61 72 5f 4d  |M|.REM|    Bar_M|
00000190  65 6e 75 25 3d 46 4e 57  69 6d 70 5f 4d 65 6e 75  |enu%=FNWimp_Menu|
000001a0  43 72 65 61 74 65 28 22  49 6e 66 6f 5c 51 75 69  |Create("Info\Qui|
000001b0  74 22 29 0a 52 45 4d 7c  20 20 20 20 42 61 72 5f  |t").REM|    Bar_|
000001c0  43 4d 65 6e 75 25 3d 46  4e 57 69 6d 70 5f 4d 65  |CMenu%=FNWimp_Me|
000001d0  6e 75 43 72 65 61 74 65  28 22 43 6f 6c 6f 75 72  |nuCreate("Colour|
000001e0  73 22 29 0a 4c 4f 43 41  4c 20 6d 65 6e 75 25 2c  |s").LOCAL menu%,|
000001f0  69 6e 64 65 78 25 2c 77  69 64 74 68 25 2c 6c 65  |index%,width%,le|
00000200  6e 67 74 68 25 2c 6b 25  2c 73 25 0a 44 49 4d 20  |ngth%,k%,s%.DIM |
00000210  6d 65 6e 75 25 20 32 38  2b 46 4e 49 6e 74 65 72  |menu% 28+FNInter|
00000220  6e 61 6c 5f 4d 65 6e 75  4e 6f 4f 66 45 6e 74 72  |nal_MenuNoOfEntr|
00000230  69 65 73 28 6d 65 6e 75  24 29 2a 32 34 0a 6d 65  |ies(menu$)*24.me|
00000240  6e 75 25 3f 31 32 3d 37  20 20 20 3a 20 6d 65 6e  |nu%?12=7   : men|
00000250  75 25 3f 31 33 3d 32 20  20 3a 20 6d 65 6e 75 25  |u%?13=2  : menu%|
00000260  3f 31 34 3d 37 20 3a 6d  65 6e 75 25 3f 31 35 3d  |?14=7 :menu%?15=|
00000270  30 0a 6d 65 6e 75 25 21  31 36 3d 31 34 30 20 3a  |0.menu%!16=140 :|
00000280  20 6d 65 6e 75 25 21 32  30 3d 34 34 20 3a 20 6d  | menu%!20=44 : m|
00000290  65 6e 75 25 21 32 34 3d  30 0a 69 6e 64 65 78 25  |enu%!24=0.index%|
000002a0  3d 6d 65 6e 75 25 2b 32  38 0a 24 6d 65 6e 75 25  |=menu%+28.$menu%|
000002b0  3d 4c 45 46 54 24 28 6d  65 6e 75 24 2c 49 4e 53  |=LEFT$(menu$,INS|
000002c0  54 52 28 6d 65 6e 75 24  2c 22 5c 22 29 2d 31 29  |TR(menu$,"\")-1)|
000002d0  0a 77 69 64 74 68 25 3d  4c 45 4e 28 4c 45 46 54  |.width%=LEN(LEFT|
000002e0  24 28 6d 65 6e 75 24 2c  49 4e 53 54 52 28 6d 65  |$(menu$,INSTR(me|
000002f0  6e 75 24 2c 22 5c 22 29  2d 31 29 29 0a 6d 65 6e  |nu$,"\")-1)).men|
00000300  75 24 2b 3d 22 5c 22 20  3a 20 4d 65 6e 75 5f 4e  |u$+="\" : Menu_N|
00000310  6f 4f 66 45 6e 74 72 69  65 73 25 3d 30 0a 57 48  |oOfEntries%=0.WH|
00000320  49 4c 45 20 6d 65 6e 75  24 3c 3e 22 22 0a 6d 65  |ILE menu$<>"".me|
00000330  6e 75 24 3d 4d 49 44 24  28 6d 65 6e 75 24 2c 49  |nu$=MID$(menu$,I|
00000340  4e 53 54 52 28 6d 65 6e  75 24 2c 22 5c 22 29 2b  |NSTR(menu$,"\")+|
00000350  31 29 0a 49 46 20 6d 65  6e 75 24 3c 3e 22 22 20  |1).IF menu$<>"" |
00000360  54 48 45 4e 0a 21 69 6e  64 65 78 25 3d 30 20 3a  |THEN.!index%=0 :|
00000370  20 69 6e 64 65 78 25 21  34 3d 2d 31 20 3a 20 69  | index%!4=-1 : i|
00000380  6e 64 65 78 25 21 38 3d  26 37 30 30 30 30 32 31  |ndex%!8=&7000021|
00000390  0a 6c 65 6e 67 74 68 25  3d 49 4e 53 54 52 28 6d  |.length%=INSTR(m|
000003a0  65 6e 75 24 2c 22 5c 22  29 2d 31 0a 6b 25 3d 49  |enu$,"\")-1.k%=I|
000003b0  4e 53 54 52 28 4c 45 46  54 24 28 6d 65 6e 75 24  |NSTR(LEFT$(menu$|
000003c0  2c 6c 65 6e 67 74 68 25  29 2c 22 3e 22 29 0a 49  |,length%),">").I|
000003d0  46 20 6b 25 3c 3e 30 20  54 48 45 4e 0a 73 25 3d  |F k%<>0 THEN.s%=|
000003e0  45 56 41 4c 28 4d 49 44  24 28 6d 65 6e 75 24 2c  |EVAL(MID$(menu$,|
000003f0  6b 25 2b 31 2c 6c 65 6e  67 74 68 25 2d 6b 25 29  |k%+1,length%-k%)|
00000400  29 0a 69 6e 64 65 78 25  21 34 3d 73 25 0a 6c 65  |).index%!4=s%.le|
00000410  6e 67 74 68 25 3d 6b 25  2d 31 0a 45 4e 44 49 46  |ngth%=k%-1.ENDIF|
00000420  0a 24 28 69 6e 64 65 78  25 2b 31 32 29 3d 4c 45  |.$(index%+12)=LE|
00000430  46 54 24 28 6d 65 6e 75  24 2c 6c 65 6e 67 74 68  |FT$(menu$,length|
00000440  25 29 0a 49 46 20 6c 65  6e 67 74 68 25 3e 77 69  |%).IF length%>wi|
00000450  64 74 68 25 20 54 48 45  4e 20 77 69 64 74 68 25  |dth% THEN width%|
00000460  3d 6c 65 6e 67 74 68 25  0a 69 6e 64 65 78 25 2b  |=length%.index%+|
00000470  3d 32 34 0a 45 4e 44 49  46 0a 45 4e 44 57 48 49  |=24.ENDIF.ENDWHI|
00000480  4c 45 0a 6d 65 6e 75 25  21 31 36 3d 31 36 2a 28  |LE.menu%!16=16*(|
00000490  77 69 64 74 68 25 2b 31  29 0a 69 6e 64 65 78 25  |width%+1).index%|
000004a0  21 2d 32 34 3d 69 6e 64  65 78 25 21 2d 32 34 20  |!-24=index%!-24 |
000004b0  4f 52 20 26 38 30 20 3a  20 52 45 4d 7c 2e 2e 2e  |OR &80 : REM|...|
000004c0  4c 61 73 74 20 69 74 65  6d 0a 3d 6d 65 6e 75 25  |Last item.=menu%|
000004d0  0a 3a 0a 44 45 46 20 46  4e 57 69 6d 70 5f 4d 65  |.:.DEF FNWimp_Me|
000004e0  6e 75 43 6f 6c 6f 75 72  73 0a 52 45 4d 7c 43 72  |nuColours.REM|Cr|
000004f0  65 61 74 65 73 20 61 20  73 74 61 6e 64 61 72 64  |eates a standard|
00000500  20 63 6f 6c 6f 75 72 73  20 6d 65 6e 75 2c 20 74  | colours menu, t|
00000510  68 72 65 65 20 63 68 61  72 61 63 74 65 72 73 0a  |hree characters.|
00000520  52 45 4d 7c 77 69 64 65  2c 20 77 69 74 68 20 6e  |REM|wide, with n|
00000530  6f 20 74 69 74 6c 65 2e  0a 52 45 4d 7c 54 68 65  |o title..REM|The|
00000540  20 76 61 6c 75 65 20 72  65 74 75 72 6e 65 64 20  | value returned |
00000550  62 79 20 74 68 65 20 66  75 6e 63 74 69 6f 6e 20  |by the function |
00000560  69 73 20 74 68 65 20 6d  65 6e 75 2e 0a 52 45 4d  |is the menu..REM|
00000570  7c 68 61 6e 64 6c 65 20  45 2e 67 2e 0a 52 45 4d  ||handle E.g..REM|
00000580  7c 20 20 20 20 20 20 20  20 20 43 6f 6c 6f 75 72  ||         Colour|
00000590  73 5f 4d 65 6e 75 25 3d  46 4e 57 69 6d 70 5f 4d  |s_Menu%=FNWimp_M|
000005a0  65 6e 75 43 6f 6c 6f 75  72 73 0a 3d 46 4e 57 69  |enuColours.=FNWi|
000005b0  6d 70 5f 4d 65 6e 75 43  72 65 61 74 65 43 6f 6c  |mp_MenuCreateCol|
000005c0  6f 75 72 73 28 22 20 22  29 0a 3a 0a 44 45 46 20  |ours(" ").:.DEF |
000005d0  46 4e 57 69 6d 70 5f 4d  65 6e 75 43 72 65 61 74  |FNWimp_MenuCreat|
000005e0  65 43 6f 6c 6f 75 72 73  28 74 69 74 6c 65 24 29  |eColours(title$)|
000005f0  0a 52 45 4d 7c 41 73 20  66 6f 72 20 46 4e 57 69  |.REM|As for FNWi|
00000600  6d 70 5f 4d 65 6e 75 43  6f 6c 6f 75 72 73 2c 20  |mp_MenuColours, |
00000610  74 68 69 73 20 63 72 65  61 74 65 73 20 61 20 63  |this creates a c|
00000620  6f 6c 6f 75 72 73 0a 52  45 4d 7c 6d 65 6e 75 20  |olours.REM|menu |
00000630  62 75 74 20 77 69 74 68  20 61 20 74 69 74 6c 65  |but with a title|
00000640  2c 20 67 69 76 65 6e 20  62 79 20 74 68 65 20 73  |, given by the s|
00000650  74 72 69 6e 67 20 74 69  74 6c 65 24 2e 0a 52 45  |tring title$..RE|
00000660  4d 7c 45 2e 67 2e 0a 52  45 4d 7c 20 43 6f 6c 6f  |M|E.g..REM| Colo|
00000670  75 72 73 5f 4d 65 6e 75  25 3d 46 4e 57 69 6d 70  |urs_Menu%=FNWimp|
00000680  5f 4d 65 6e 75 43 72 65  61 74 65 43 6f 6c 6f 75  |_MenuCreateColou|
00000690  72 73 28 22 43 6f 6c 6f  75 72 73 22 29 0a 52 45  |rs("Colours").RE|
000006a0  4d 7c 0a 4c 4f 43 41 4c  20 78 24 2c 6d 65 6e 25  |M|.LOCAL x$,men%|
000006b0  2c 6a 25 2c 69 25 0a 78  24 3d 74 69 74 6c 65 24  |,j%,i%.x$=title$|
000006c0  2b 22 5c 30 5c 31 5c 32  5c 33 5c 34 5c 35 5c 36  |+"\0\1\2\3\4\5\6|
000006d0  5c 37 5c 38 5c 39 5c 31  30 5c 31 31 5c 31 32 5c  |\7\8\9\10\11\12\|
000006e0  31 33 5c 31 34 5c 31 35  22 0a 6d 65 6e 25 3d 46  |13\14\15".men%=F|
000006f0  4e 57 69 6d 70 5f 4d 65  6e 75 43 72 65 61 74 65  |NWimp_MenuCreate|
00000700  28 78 24 29 0a 46 4f 52  20 69 25 3d 30 20 54 4f  |(x$).FOR i%=0 TO|
00000710  20 31 35 0a 43 41 53 45  20 54 52 55 45 20 4f 46  | 15.CASE TRUE OF|
00000720  0a 57 48 45 4e 20 69 25  3c 34 2c 69 25 3d 39 2c  |.WHEN i%<4,i%=9,|
00000730  69 25 3d 31 32 2c 69 25  3d 31 34 2c 69 25 3d 31  |i%=12,i%=14,i%=1|
00000740  35 20 3a 20 6a 25 3d 37  0a 4f 54 48 45 52 57 49  |5 : j%=7.OTHERWI|
00000750  53 45 20 3a 20 6a 25 3d  30 0a 45 4e 44 43 41 53  |SE : j%=0.ENDCAS|
00000760  45 0a 6d 65 6e 25 3f 28  33 39 2b 69 25 2a 32 34  |E.men%?(39+i%*24|
00000770  29 3d 69 25 2a 31 36 2b  6a 25 0a 50 52 4f 43 57  |)=i%*16+j%.PROCW|
00000780  69 6d 70 5f 4d 65 6e 75  43 65 6e 74 72 65 28 6d  |imp_MenuCentre(m|
00000790  65 6e 25 2c 69 25 2b 31  29 0a 4e 45 58 54 0a 3d  |en%,i%+1).NEXT.=|
000007a0  6d 65 6e 25 0a 3a 0a 44  45 46 20 46 4e 57 69 6d  |men%.:.DEF FNWim|
000007b0  70 5f 4d 65 6e 75 4e 6f  4f 66 45 6e 74 72 69 65  |p_MenuNoOfEntrie|
000007c0  73 28 6d 65 6e 75 24 29  0a 52 45 4d 7c 43 61 6c  |s(menu$).REM|Cal|
000007d0  63 75 6c 61 74 65 73 20  74 68 65 20 6e 75 6d 62  |culates the numb|
000007e0  65 72 20 6f 66 20 65 6e  74 72 69 65 73 20 69 6e  |er of entries in|
000007f0  20 61 20 6d 65 6e 75 20  73 74 72 69 6e 67 2e 0a  | a menu string..|
00000800  52 45 4d 7c 45 2e 67 2e  20 0a 52 45 4d 7c 20 20  |REM|E.g. .REM|  |
00000810  46 4e 57 69 6d 70 5f 4d  65 6e 75 4e 6f 4f 66 45  |FNWimp_MenuNoOfE|
00000820  6e 74 72 69 65 73 28 22  4d 65 6e 75 5c 69 74 65  |ntries("Menu\ite|
00000830  6d 31 5c 69 74 65 6d 32  5c 69 74 65 6d 33 22 29  |m1\item2\item3")|
00000840  0a 52 45 4d 7c 0a 52 45  4d 7c 68 61 73 20 74 68  |.REM|.REM|has th|
00000850  65 20 76 61 6c 75 65 20  33 2e 0a 4c 4f 43 41 4c  |e value 3..LOCAL|
00000860  20 6e 25 20 2c 6a 25 20  3a 20 6e 25 3d 30 20 3a  | n% ,j% : n%=0 :|
00000870  20 6a 25 3d 30 0a 52 45  50 45 41 54 0a 6a 25 3d  | j%=0.REPEAT.j%=|
00000880  49 4e 53 54 52 28 6d 65  6e 75 24 2c 22 5c 22 2c  |INSTR(menu$,"\",|
00000890  6a 25 2b 31 29 0a 49 46  20 6a 25 3c 3e 30 20 54  |j%+1).IF j%<>0 T|
000008a0  48 45 4e 20 6e 25 2b 3d  31 0a 55 4e 54 49 4c 20  |HEN n%+=1.UNTIL |
000008b0  6a 25 3d 30 0a 3d 6e 25  0a 3a 0a 44 45 46 20 50  |j%=0.=n%.:.DEF P|
000008c0  52 4f 43 57 69 6d 70 5f  4d 65 6e 75 42 61 63 6b  |ROCWimp_MenuBack|
000008d0  47 72 6f 75 6e 64 43 6f  6c 6f 75 72 28 6d 65 6e  |GroundColour(men|
000008e0  75 25 2c 69 74 65 6d 25  2c 63 6f 6c 6f 75 72 25  |u%,item%,colour%|
000008f0  29 0a 52 45 4d 7c 53 65  74 73 20 74 68 65 20 62  |).REM|Sets the b|
00000900  61 63 6b 67 72 6f 75 6e  64 20 63 6f 6c 6f 75 72  |ackground colour|
00000910  20 6f 66 20 61 20 6d 65  6e 75 20 69 74 65 6d 2e  | of a menu item.|
00000920  20 54 68 65 0a 52 45 4d  7c 68 61 6e 64 6c 65 20  | The.REM|handle |
00000930  6f 66 20 74 68 65 20 6d  65 6e 75 20 69 73 20 67  |of the menu is g|
00000940  69 76 65 6e 20 62 79 20  6d 65 6e 75 25 2e 20 20  |iven by menu%.  |
00000950  45 2e 67 2e 0a 52 45 4d  7c 20 20 20 20 50 52 4f  |E.g..REM|    PRO|
00000960  43 57 69 6d 70 5f 4d 65  6e 75 42 61 63 6b 67 72  |CWimp_MenuBackgr|
00000970  6f 75 6e 64 43 6f 6c 6f  75 72 28 6d 65 6e 75 25  |oundColour(menu%|
00000980  2c 31 2c 31 31 29 0a 52  45 4d 7c 73 65 74 73 20  |,1,11).REM|sets |
00000990  74 68 65 20 62 61 63 6b  67 72 6f 75 6e 64 20 6f  |the background o|
000009a0  66 20 66 69 72 73 74 20  69 74 65 6d 20 69 6e 20  |f first item in |
000009b0  6d 65 6e 75 25 20 74 6f  20 0a 52 45 4d 7c 63 6f  |menu% to .REM|co|
000009c0  6c 6f 75 72 20 31 31 2c  20 77 68 69 63 68 20 69  |lour 11, which i|
000009d0  73 20 75 73 75 61 6c 6c  79 20 72 65 64 2e 0a 4c  |s usually red..L|
000009e0  4f 43 41 4c 20 66 6f 72  65 25 2c 69 25 0a 66 6f  |OCAL fore%,i%.fo|
000009f0  72 65 25 3d 28 6d 65 6e  75 25 3f 28 33 39 2b 28  |re%=(menu%?(39+(|
00000a00  69 74 65 6d 25 2d 31 29  2a 32 34 29 29 4d 4f 44  |item%-1)*24))MOD|
00000a10  31 36 0a 69 25 3d 28 28  6d 65 6e 75 25 3f 28 33  |16.i%=((menu%?(3|
00000a20  39 2b 28 69 74 65 6d 25  2d 31 29 2a 32 34 29 29  |9+(item%-1)*24))|
00000a30  44 49 56 31 36 29 4d 4f  44 31 36 0a 6d 65 6e 75  |DIV16)MOD16.menu|
00000a40  25 3f 28 33 39 2b 28 69  74 65 6d 25 2d 31 29 2a  |%?(39+(item%-1)*|
00000a50  32 34 29 3d 66 6f 72 65  25 2b 31 36 2a 63 6f 6c  |24)=fore%+16*col|
00000a60  6f 75 72 25 2b 69 25 0a  45 4e 44 50 52 4f 43 0a  |our%+i%.ENDPROC.|
00000a70  3a 0a 44 45 46 20 50 52  4f 43 57 69 6d 70 5f 4d  |:.DEF PROCWimp_M|
00000a80  65 6e 75 43 65 6e 74 72  65 28 6d 65 6e 75 25 2c  |enuCentre(menu%,|
00000a90  69 74 65 6d 25 29 0a 52  45 4d 7c 50 72 69 6e 74  |item%).REM|Print|
00000aa0  73 20 74 68 65 20 69 74  65 6d 20 73 70 65 63 69  |s the item speci|
00000ab0  66 69 65 64 20 69 6e 20  74 68 65 20 63 65 6e 74  |fied in the cent|
00000ac0  72 65 20 6f 66 20 74 68  65 20 0a 52 45 4d 7c 6d  |re of the .REM|m|
00000ad0  65 6e 75 2e 0a 52 45 4d  7c 0a 52 45 4d 7c 0a 52  |enu..REM|.REM|.R|
00000ae0  45 4d 7c 0a 6d 65 6e 75  25 21 28 33 36 2b 28 69  |EM|.menu%!(36+(i|
00000af0  74 65 6d 25 2d 31 29 2a  32 34 29 3d 6d 65 6e 75  |tem%-1)*24)=menu|
00000b00  25 21 28 33 36 2b 28 69  74 65 6d 25 2d 31 29 2a  |%!(36+(item%-1)*|
00000b10  32 34 29 4f 52 28 31 3c  3c 33 29 0a 45 4e 44 50  |24)OR(1<<3).ENDP|
00000b20  52 4f 43 0a 3a 0a 44 45  46 20 50 52 4f 43 57 69  |ROC.:.DEF PROCWi|
00000b30  6d 70 5f 4d 65 6e 75 43  6c 6f 73 65 0a 52 45 4d  |mp_MenuClose.REM|
00000b40  7c 43 61 75 73 65 73 20  61 6c 6c 20 6d 65 6e 75  ||Causes all menu|
00000b50  73 20 63 75 72 72 65 6e  74 6c 79 20 62 65 69 6e  |s currently bein|
00000b60  67 20 64 69 73 70 6c 61  79 65 64 20 74 6f 20 0a  |g displayed to .|
00000b70  52 45 4d 7c 63 6c 6f 73  65 2e 0a 52 45 4d 7c 0a  |REM|close..REM|.|
00000b80  52 45 4d 7c 0a 52 45 4d  7c 0a 53 59 53 20 22 57  |REM|.REM|.SYS "W|
00000b90  69 6d 70 5f 43 72 65 61  74 65 4d 65 6e 75 22 2c  |imp_CreateMenu",|
00000ba0  2d 31 0a 45 4e 44 50 52  4f 43 0a 3a 0a 44 45 46  |-1.ENDPROC.:.DEF|
00000bb0  20 50 52 4f 43 57 69 6d  70 5f 4d 65 6e 75 44 69  | PROCWimp_MenuDi|
00000bc0  73 61 62 6c 65 28 6d 65  6e 75 25 2c 69 74 65 6d  |sable(menu%,item|
00000bd0  25 29 0a 52 45 4d 7c 43  61 75 73 65 73 20 74 68  |%).REM|Causes th|
00000be0  65 20 69 74 65 6d 20 73  70 65 63 69 66 69 65 64  |e item specified|
00000bf0  20 74 6f 20 62 65 20 64  69 73 61 62 6c 65 64 2e  | to be disabled.|
00000c00  20 54 68 69 73 20 69 73  0a 52 45 4d 7c 73 68 6f  | This is.REM|sho|
00000c10  77 6e 20 77 68 65 6e 20  74 68 65 20 6d 65 6e 75  |wn when the menu|
00000c20  20 69 73 20 64 69 73 70  6c 61 79 65 64 20 62 79  | is displayed by|
00000c30  20 74 68 65 20 69 74 65  6d 20 62 65 69 6e 67 0a  | the item being.|
00000c40  52 45 4d 7c 22 67 72 65  79 65 64 20 6f 75 74 22  |REM|"greyed out"|
00000c50  2e 0a 52 45 4d 7c 0a 52  45 4d 7c 0a 6d 65 6e 75  |..REM|.REM|.menu|
00000c60  25 21 28 33 36 2b 28 69  74 65 6d 25 2d 31 29 2a  |%!(36+(item%-1)*|
00000c70  32 34 29 3d 6d 65 6e 75  25 21 28 33 36 2b 28 69  |24)=menu%!(36+(i|
00000c80  74 65 6d 25 2d 31 29 2a  32 34 29 4f 52 28 31 3c  |tem%-1)*24)OR(1<|
00000c90  3c 32 32 29 0a 45 4e 44  50 52 4f 43 0a 3a 0a 44  |<22).ENDPROC.:.D|
00000ca0  45 46 20 50 52 4f 43 57  69 6d 70 5f 4d 65 6e 75  |EF PROCWimp_Menu|
00000cb0  44 6f 74 74 65 64 4c 69  6e 65 28 6d 65 6e 75 25  |DottedLine(menu%|
00000cc0  2c 69 74 65 6d 25 29 0a  52 45 4d 7c 57 68 65 6e  |,item%).REM|When|
00000cd0  20 74 68 65 20 6d 65 6e  75 20 69 73 20 64 69 73  | the menu is dis|
00000ce0  70 6c 61 79 65 64 20 61  20 64 6f 74 74 65 64 20  |played a dotted |
00000cf0  6c 69 6e 65 20 69 73 20  73 68 6f 77 6e 0a 52 45  |line is shown.RE|
00000d00  4d 7c 41 46 54 45 52 20  74 68 65 20 73 70 65 63  |M|AFTER the spec|
00000d10  69 66 69 65 64 20 69 74  65 6d 2e 0a 52 45 4d 7c  |ified item..REM||
00000d20  0a 52 45 4d 7c 0a 52 45  4d 7c 0a 6d 65 6e 75 25  |.REM|.REM|.menu%|
00000d30  21 28 32 38 2b 28 69 74  65 6d 25 2d 31 29 2a 32  |!(28+(item%-1)*2|
00000d40  34 29 3d 28 6d 65 6e 75  25 21 28 32 38 2b 28 69  |4)=(menu%!(28+(i|
00000d50  74 65 6d 25 2d 31 29 2a  32 34 29 29 4f 52 32 0a  |tem%-1)*24))OR2.|
00000d60  45 4e 44 50 52 4f 43 0a  3a 0a 44 45 46 20 50 52  |ENDPROC.:.DEF PR|
00000d70  4f 43 57 69 6d 70 5f 4d  65 6e 75 45 6e 61 62 6c  |OCWimp_MenuEnabl|
00000d80  65 28 6d 65 6e 75 25 2c  69 74 65 6d 25 29 0a 52  |e(menu%,item%).R|
00000d90  45 4d 7c 54 68 65 20 6f  70 70 6f 73 69 74 65 20  |EM|The opposite |
00000da0  6f 66 20 4d 65 6e 75 44  69 73 61 62 6c 65 2e 20  |of MenuDisable. |
00000db0  43 61 75 73 65 73 20 74  68 65 20 69 74 65 6d 20  |Causes the item |
00000dc0  74 6f 0a 52 45 4d 7c 62  65 20 73 65 6c 65 63 74  |to.REM|be select|
00000dd0  61 62 6c 65 2e 0a 52 45  4d 7c 0a 52 45 4d 7c 0a  |able..REM|.REM|.|
00000de0  52 45 4d 7c 0a 50 52 4f  43 57 69 6d 70 5f 4d 65  |REM|.PROCWimp_Me|
00000df0  6e 75 44 69 73 61 62 6c  65 28 6d 65 6e 75 25 2c  |nuDisable(menu%,|
00000e00  69 74 65 6d 25 29 0a 6d  65 6e 75 25 21 28 33 36  |item%).menu%!(36|
00000e10  2b 28 69 74 65 6d 25 2d  31 29 2a 32 34 29 3d 6d  |+(item%-1)*24)=m|
00000e20  65 6e 75 25 21 28 33 36  2b 28 69 74 65 6d 25 2d  |enu%!(36+(item%-|
00000e30  31 29 2a 32 34 29 45 4f  52 28 31 3c 3c 32 32 29  |1)*24)EOR(1<<22)|
00000e40  0a 45 4e 44 50 52 4f 43  0a 3a 0a 44 45 46 20 50  |.ENDPROC.:.DEF P|
00000e50  52 4f 43 57 69 6d 70 5f  4d 65 6e 75 46 6f 72 65  |ROCWimp_MenuFore|
00000e60  67 72 6f 75 6e 64 43 6f  6c 6f 75 72 28 6d 65 6e  |groundColour(men|
00000e70  75 25 2c 69 74 65 6d 25  2c 63 6f 6c 6f 75 72 25  |u%,item%,colour%|
00000e80  29 0a 52 45 4d 7c 53 65  74 73 20 74 68 65 20 66  |).REM|Sets the f|
00000e90  6f 72 65 67 72 6f 75 6e  64 20 63 6f 6c 6f 75 72  |oreground colour|
00000ea0  20 28 69 2e 65 2e 20 74  68 65 20 63 6f 6c 6f 75  | (i.e. the colou|
00000eb0  72 20 69 6e 0a 52 45 4d  7c 77 68 69 63 68 20 74  |r in.REM|which t|
00000ec0  68 65 20 69 74 65 6d 20  69 73 20 77 72 69 74 74  |he item is writt|
00000ed0  65 6e 29 20 74 6f 20 74  68 65 20 63 6f 6c 6f 75  |en) to the colou|
00000ee0  72 20 73 70 65 63 69 66  69 65 64 2e 0a 52 45 4d  |r specified..REM|
00000ef0  7c 45 2e 67 2e 0a 52 45  4d 7c 20 20 20 50 52 4f  ||E.g..REM|   PRO|
00000f00  43 57 69 6d 70 5f 4d 65  6e 75 46 6f 72 65 67 72  |CWimp_MenuForegr|
00000f10  6f 75 6e 64 43 6f 6c 6f  75 72 28 6d 65 6e 75 25  |oundColour(menu%|
00000f20  2c 31 2c 31 31 29 0a 52  45 4d 7c 77 72 69 74 65  |,1,11).REM|write|
00000f30  73 20 74 68 65 20 66 69  72 73 74 20 69 74 65 6d  |s the first item|
00000f40  20 69 6e 20 63 6f 6c 6f  75 72 20 31 31 20 28 72  | in colour 11 (r|
00000f50  65 64 3f 29 2e 0a 6d 65  6e 75 25 3f 28 33 39 2b  |ed?)..menu%?(39+|
00000f60  28 69 74 65 6d 25 2d 31  29 2a 32 34 29 3d 63 6f  |(item%-1)*24)=co|
00000f70  6c 6f 75 72 25 2b 31 36  2a 28 28 6d 65 6e 75 25  |lour%+16*((menu%|
00000f80  3f 28 33 39 2b 28 69 74  65 6d 25 2d 31 29 2a 32  |?(39+(item%-1)*2|
00000f90  34 29 29 44 49 56 31 36  29 0a 45 4e 44 50 52 4f  |4))DIV16).ENDPRO|
00000fa0  43 0a 3a 0a 44 45 46 20  50 52 4f 43 57 69 6d 70  |C.:.DEF PROCWimp|
00000fb0  5f 4d 65 6e 75 47 6c 75  65 28 6d 65 6e 75 31 25  |_MenuGlue(menu1%|
00000fc0  2c 69 74 65 6d 25 2c 6d  65 6e 75 32 25 29 0a 52  |,item%,menu2%).R|
00000fd0  45 4d 7c 54 68 69 73 20  67 6c 75 65 73 20 69 74  |EM|This glues it|
00000fe0  65 6d 25 20 6f 66 20 6d  65 6e 75 31 25 20 74 6f  |em% of menu1% to|
00000ff0  20 6d 65 6e 75 32 25 2e  20 49 2e 65 2e 20 6d 65  | menu2%. I.e. me|
00001000  6e 75 32 25 0a 52 45 4d  7c 69 73 20 61 20 73 75  |nu2%.REM|is a su|
00001010  62 6d 65 6e 75 20 6f 66  20 6d 65 6e 75 31 25 20  |bmenu of menu1% |
00001020  61 6e 64 20 61 6e 20 61  72 72 6f 77 20 61 70 70  |and an arrow app|
00001030  65 61 72 73 20 69 6e 0a  52 45 4d 7c 69 74 65 6d  |ears in.REM|item|
00001040  25 20 6f 66 20 6d 65 6e  75 31 25 2e 20 57 68 65  |% of menu1%. Whe|
00001050  6e 20 74 68 65 20 6d 6f  75 73 65 20 70 6f 69 6e  |n the mouse poin|
00001060  74 65 72 20 70 61 73 73  65 73 0a 52 45 4d 7c 6f  |ter passes.REM|o|
00001070  76 65 72 20 74 68 69 73  20 61 72 72 6f 77 2c 20  |ver this arrow, |
00001080  6d 65 6e 75 32 25 20 77  69 6c 6c 20 6f 70 65 6e  |menu2% will open|
00001090  2e 0a 52 45 4d 7c 0a 6d  65 6e 75 31 25 21 28 38  |..REM|.menu1%!(8|
000010a0  2b 69 74 65 6d 25 2a 32  34 29 3d 6d 65 6e 75 32  |+item%*24)=menu2|
000010b0  25 0a 45 4e 44 50 52 4f  43 0a 3a 0a 44 45 46 20  |%.ENDPROC.:.DEF |
000010c0  50 52 4f 43 57 69 6d 70  5f 4d 65 6e 75 49 74 65  |PROCWimp_MenuIte|
000010d0  6d 28 6d 65 6e 75 25 2c  69 74 65 6d 25 2c 69 74  |m(menu%,item%,it|
000010e0  65 6d 24 29 0a 52 45 4d  7c 54 68 69 73 20 72 65  |em$).REM|This re|
000010f0  73 65 74 73 20 69 74 65  6d 25 20 6f 66 20 6d 65  |sets item% of me|
00001100  6e 75 25 20 74 6f 20 74  68 65 20 76 61 6c 75 65  |nu% to the value|
00001110  20 67 69 76 65 6e 0a 52  45 4d 7c 62 79 20 74 68  | given.REM|by th|
00001120  65 20 73 74 72 69 6e 67  20 76 61 72 69 61 62 65  |e string variabe|
00001130  6c 65 20 69 74 65 6d 24  2e 20 45 2e 67 2e 0a 52  |le item$. E.g..R|
00001140  45 4d 7c 20 20 20 50 52  4f 43 57 69 6d 70 5f 4d  |EM|   PROCWimp_M|
00001150  65 6e 75 49 74 65 6d 28  6d 65 6e 75 25 2c 31 2c  |enuItem(menu%,1,|
00001160  22 63 6f 6c 6f 75 72 73  22 29 0a 52 45 4d 7c 77  |"colours").REM|w|
00001170  6f 75 6c 64 20 63 61 75  73 65 20 74 68 65 20 66  |ould cause the f|
00001180  69 72 73 74 20 69 74 65  6d 20 6f 66 20 6d 65 6e  |irst item of men|
00001190  75 25 20 74 6f 20 68 61  76 65 20 74 68 65 0a 52  |u% to have the.R|
000011a0  45 4d 7c 74 65 78 74 20  20 22 63 6f 6c 6f 75 72  |EM|text  "colour|
000011b0  73 22 2e 0a 24 28 6d 65  6e 75 25 2b 28 34 30 2b  |s"..$(menu%+(40+|
000011c0  28 69 74 65 6d 25 2d 31  29 2a 32 34 29 29 3d 4c  |(item%-1)*24))=L|
000011d0  45 46 54 24 28 69 74 65  6d 24 2c 31 32 29 2b 43  |EFT$(item$,12)+C|
000011e0  48 52 24 30 0a 45 4e 44  50 52 4f 43 0a 3a 0a 44  |HR$0.ENDPROC.:.D|
000011f0  45 46 20 50 52 4f 43 57  69 6d 70 5f 4d 65 6e 75  |EF PROCWimp_Menu|
00001200  4d 65 73 73 61 67 65 28  6d 65 6e 75 25 2c 69 74  |Message(menu%,it|
00001210  65 6d 25 29 0a 52 45 4d  7c 49 66 20 69 74 65 6d  |em%).REM|If item|
00001220  25 20 68 61 73 20 61 6e  20 61 72 72 6f 77 20 6c  |% has an arrow l|
00001230  65 61 64 69 6e 67 20 74  6f 20 61 20 73 75 62 6d  |eading to a subm|
00001240  65 6e 75 2c 20 74 68 69  73 0a 52 45 4d 7c 70 72  |enu, this.REM|pr|
00001250  6f 63 65 64 75 72 65 20  63 61 75 73 65 73 20 61  |ocedure causes a|
00001260  20 77 69 6d 70 20 6d 65  73 73 61 67 65 20 74 6f  | wimp message to|
00001270  20 62 65 20 67 65 6e 65  72 61 74 65 64 0a 52 45  | be generated.RE|
00001280  4d 7c 77 68 65 6e 20 74  68 65 20 6d 6f 75 73 65  |M|when the mouse|
00001290  20 70 6f 69 6e 74 65 72  20 70 61 73 73 65 73 20  | pointer passes |
000012a0  6f 76 65 72 20 74 68 65  20 61 72 72 6f 77 2e 0a  |over the arrow..|
000012b0  52 45 4d 7c 0a 52 45 4d  7c 0a 6d 65 6e 75 25 21  |REM|.REM|.menu%!|
000012c0  28 32 38 2b 28 69 74 65  6d 25 2d 31 29 2a 32 34  |(28+(item%-1)*24|
000012d0  29 3d 28 6d 65 6e 75 25  21 28 32 38 2b 28 69 74  |)=(menu%!(28+(it|
000012e0  65 6d 25 2d 31 29 2a 32  34 29 29 45 4f 52 28 31  |em%-1)*24))EOR(1|
000012f0  3c 3c 33 29 0a 45 4e 44  50 52 4f 43 0a 3a 0a 44  |<<3).ENDPROC.:.D|
00001300  45 46 20 50 52 4f 43 57  69 6d 70 5f 4d 65 6e 75  |EF PROCWimp_Menu|
00001310  50 6f 70 55 70 28 4d 65  6e 75 25 2c 78 25 2c 79  |PopUp(Menu%,x%,y|
00001320  25 29 0a 52 45 4d 7c 54  68 69 73 20 70 72 6f 63  |%).REM|This proc|
00001330  65 64 75 72 65 20 63 61  75 73 65 73 20 74 68 65  |edure causes the|
00001340  20 6d 65 6e 75 20 73 70  65 63 69 66 69 65 64 20  | menu specified |
00001350  74 6f 0a 52 45 4d 7c 70  6f 70 20 75 70 20 6f 6e  |to.REM|pop up on|
00001360  20 74 68 65 20 73 63 72  65 65 6e 20 61 74 20 74  | the screen at t|
00001370  68 65 20 70 6f 69 6e 74  20 28 78 25 2c 79 25 29  |he point (x%,y%)|
00001380  2e 0a 52 45 4d 7c 0a 52  45 4d 7c 0a 52 45 4d 7c  |..REM|.REM|.REM||
00001390  0a 6d 65 6e 75 25 3d 4d  65 6e 75 25 0a 53 59 53  |.menu%=Menu%.SYS|
000013a0  20 22 57 69 6d 70 5f 43  72 65 61 74 65 4d 65 6e  | "Wimp_CreateMen|
000013b0  75 22 2c 2c 6d 65 6e 75  25 2c 78 25 2d 36 34 2c  |u",,menu%,x%-64,|
000013c0  79 25 2b 32 30 0a 45 4e  44 50 52 4f 43 0a 3a 0a  |y%+20.ENDPROC.:.|
000013d0  44 45 46 20 50 52 4f 43  57 69 6d 70 5f 4d 65 6e  |DEF PROCWimp_Men|
000013e0  75 50 6f 70 55 70 42 61  72 28 78 25 2c 79 25 29  |uPopUpBar(x%,y%)|
000013f0  0a 52 45 4d 7c 43 61 75  73 65 73 20 74 68 65 20  |.REM|Causes the |
00001400  6d 65 6e 75 20 6f 6e 20  74 68 65 20 69 63 6f 6e  |menu on the icon|
00001410  20 62 61 72 20 74 6f 20  22 70 6f 70 20 75 70 22  | bar to "pop up"|
00001420  2e 0a 52 45 4d 7c 54 68  65 20 69 63 6f 6e 20 62  |..REM|The icon b|
00001430  61 72 20 6d 65 6e 75 20  4d 55 53 54 20 68 61 76  |ar menu MUST hav|
00001440  65 20 74 68 65 20 68 61  6e 64 6c 65 0a 52 45 4d  |e the handle.REM|
00001450  7c 42 61 72 5f 4d 65 6e  75 25 2e 0a 52 45 4d 7c  ||Bar_Menu%..REM||
00001460  0a 52 45 4d 7c 0a 4c 4f  43 41 4c 20 6e 25 20 3a  |.REM|.LOCAL n% :|
00001470  20 6e 25 3d 30 0a 57 48  49 4c 45 20 28 28 42 61  | n%=0.WHILE ((Ba|
00001480  72 5f 4d 65 6e 75 25 21  28 32 38 2b 6e 25 2a 32  |r_Menu%!(28+n%*2|
00001490  34 29 29 41 4e 44 25 31  30 30 30 30 30 30 30 29  |4))AND%10000000)|
000014a0  3d 30 0a 6e 25 2b 3d 31  0a 45 4e 44 57 48 49 4c  |=0.n%+=1.ENDWHIL|
000014b0  45 0a 53 59 53 20 22 57  69 6d 70 5f 43 72 65 61  |E.SYS "Wimp_Crea|
000014c0  74 65 4d 65 6e 75 22 2c  2c 42 61 72 5f 4d 65 6e  |teMenu",,Bar_Men|
000014d0  75 25 2c 78 25 2d 36 34  2c 39 36 2b 6e 25 2a 34  |u%,x%-64,96+n%*4|
000014e0  34 0a 6d 65 6e 75 25 3d  42 61 72 5f 4d 65 6e 75  |4.menu%=Bar_Menu|
000014f0  25 0a 45 4e 44 50 52 4f  43 0a 3a 0a 44 45 46 20  |%.ENDPROC.:.DEF |
00001500  50 52 4f 43 57 69 6d 70  5f 4d 65 6e 75 54 69 63  |PROCWimp_MenuTic|
00001510  6b 28 6d 65 6e 75 25 2c  69 74 65 6d 25 29 0a 52  |k(menu%,item%).R|
00001520  45 4d 7c 54 68 69 73 20  63 61 75 73 65 73 20 61  |EM|This causes a|
00001530  20 74 69 63 6b 20 80 20  74 6f 20 61 70 70 65 61  | tick . to appea|
00001540  72 20 62 65 66 6f 72 65  20 74 68 65 0a 52 45 4d  |r before the.REM|
00001550  7c 6d 65 6e 75 20 69 74  65 6d 2e 0a 52 45 4d 7c  ||menu item..REM||
00001560  0a 52 45 4d 7c 0a 52 45  4d 7c 0a 6d 65 6e 75 25  |.REM|.REM|.menu%|
00001570  21 28 32 38 2b 28 69 74  65 6d 25 2d 31 29 2a 32  |!(28+(item%-1)*2|
00001580  34 29 3d 28 6d 65 6e 75  25 21 28 32 38 2b 28 69  |4)=(menu%!(28+(i|
00001590  74 65 6d 25 2d 31 29 2a  32 34 29 29 45 4f 52 31  |tem%-1)*24))EOR1|
000015a0  0a 45 4e 44 50 52 4f 43  0a 3a 0a 44 45 46 20 50  |.ENDPROC.:.DEF P|
000015b0  52 4f 43 57 69 6d 70 5f  4d 65 6e 75 54 69 74 6c  |ROCWimp_MenuTitl|
000015c0  65 28 6d 65 6e 75 25 2c  74 69 74 6c 65 24 29 0a  |e(menu%,title$).|
000015d0  52 45 4d 7c 54 68 69 73  20 73 65 74 73 20 74 68  |REM|This sets th|
000015e0  65 20 74 69 74 6c 65 20  6f 66 20 74 68 65 20 6d  |e title of the m|
000015f0  65 6e 75 20 74 6f 20 74  68 65 20 73 74 72 69 6e  |enu to the strin|
00001600  67 0a 52 45 4d 7c 74 69  74 6c 65 24 2e 0a 52 45  |g.REM|title$..RE|
00001610  4d 7c 0a 52 45 4d 7c 0a  52 45 4d 7c 0a 24 6d 65  |M|.REM|.REM|.$me|
00001620  6e 75 25 3d 4c 45 46 54  24 28 74 69 74 6c 65 24  |nu%=LEFT$(title$|
00001630  2c 31 32 29 2b 43 48 52  24 30 0a 45 4e 44 50 52  |,12)+CHR$0.ENDPR|
00001640  4f 43 0a 3a 0a 44 45 46  20 50 52 4f 43 57 69 6d  |OC.:.DEF PROCWim|
00001650  70 5f 4d 65 6e 75 57 72  69 74 65 28 6d 65 6e 75  |p_MenuWrite(menu|
00001660  25 2c 69 74 65 6d 25 2c  62 75 66 66 65 72 25 2c  |%,item%,buffer%,|
00001670  76 61 6c 25 2c 42 75 66  66 65 72 4c 65 6e 67 74  |val%,BufferLengt|
00001680  68 25 29 0a 52 45 4d 7c  54 68 69 73 20 6d 61 6b  |h%).REM|This mak|
00001690  65 73 20 61 20 6d 65 6e  75 20 69 74 65 6d 20 77  |es a menu item w|
000016a0  72 69 74 65 61 62 6c 65  2e 20 54 68 65 20 63 6f  |riteable. The co|
000016b0  6e 74 65 6e 74 73 20 6f  66 0a 52 45 4d 7c 74 68  |ntents of.REM|th|
000016c0  65 20 69 74 65 6d 20 61  72 65 20 73 74 6f 72 65  |e item are store|
000016d0  64 20 69 6e 20 74 68 65  20 62 6c 6f 63 6b 20 61  |d in the block a|
000016e0  72 72 61 79 20 62 75 66  66 65 72 25 20 2c 0a 52  |rray buffer% ,.R|
000016f0  45 4d 7c 77 68 69 63 68  20 74 68 65 20 75 73 65  |EM|which the use|
00001700  72 20 68 61 73 20 70 72  65 76 69 6f 75 73 6c 79  |r has previously|
00001710  20 44 49 4d 65 6e 73 69  6f 6e 65 64 2e 20 54 68  | DIMensioned. Th|
00001720  65 0a 52 45 4d 7c 6c 65  6e 67 74 68 20 6f 66 20  |e.REM|length of |
00001730  62 75 66 66 65 72 25 20  69 73 20 42 75 66 66 65  |buffer% is Buffe|
00001740  72 4c 65 6e 67 74 68 25  2e 20 49 66 20 74 68 65  |rLength%. If the|
00001750  72 65 20 69 73 20 0a 52  45 4d 7c 6e 6f 20 76 61  |re is .REM|no va|
00001760  6c 69 64 61 74 69 6f 6e  20 73 74 72 69 6e 67 20  |lidation string |
00001770  76 61 6c 25 3d 2d 31 2e  0a 6d 65 6e 75 25 21 28  |val%=-1..menu%!(|
00001780  32 38 2b 28 69 74 65 6d  25 2d 31 29 2a 32 34 29  |28+(item%-1)*24)|
00001790  3d 28 6d 65 6e 75 25 21  28 32 38 2b 28 69 74 65  |=(menu%!(28+(ite|
000017a0  6d 25 2d 31 29 2a 32 34  29 29 4f 52 34 0a 6d 65  |m%-1)*24))OR4.me|
000017b0  6e 75 25 21 28 33 36 2b  28 69 74 65 6d 25 2d 31  |nu%!(36+(item%-1|
000017c0  29 2a 32 34 29 3d 6d 65  6e 75 25 21 28 33 36 2b  |)*24)=menu%!(36+|
000017d0  28 69 74 65 6d 25 2d 31  29 2a 32 34 29 4f 52 26  |(item%-1)*24)OR&|
000017e0  31 30 30 0a 6d 65 6e 75  25 21 28 34 30 2b 28 69  |100.menu%!(40+(i|
000017f0  74 65 6d 25 2d 31 29 2a  32 34 29 3d 62 75 66 66  |tem%-1)*24)=buff|
00001800  65 72 25 0a 6d 65 6e 75  25 21 28 34 34 2b 28 69  |er%.menu%!(44+(i|
00001810  74 65 6d 25 2d 31 29 2a  32 34 29 3d 76 61 6c 25  |tem%-1)*24)=val%|
00001820  0a 6d 65 6e 75 25 21 28  34 38 2b 28 69 74 65 6d  |.menu%!(48+(item|
00001830  25 2d 31 29 2a 32 34 29  3d 42 75 66 66 65 72 4c  |%-1)*24)=BufferL|
00001840  65 6e 67 74 68 25 0a 45  4e 44 50 52 4f 43 0a 52  |ength%.ENDPROC.R|
00001850  45 4d 7c 20 20 20 20 20  20 20 20 20 20 20 20 20  |EM|             |
00001860  20 20 20 20 20 20 20 55  73 65 73 20 77 69 6d 70  |       Uses wimp|
00001870  25 2c 6d 65 6e 75 25 2c  42 61 72 5f 4d 65 6e 75  |%,menu%,Bar_Menu|
00001880  25                                                |%|
00001881