home *** CD-ROM | disk | FTP | other *** search
/ Global Amiga Experience / globalamigaexperience.iso / compressed / development / heliosdemodisk3.dms / heliosdemodisk3.adf / Source / IntuitionMenus.src < prev    next >
Text File  |  1978-03-31  |  31KB  |  745 lines

  1.  
  2.   (      ------------------------------------------------
  3.          ***    HeliOS Menu Intuition Menu Example    ***
  4.          ------------------------------------------------
  5.  
  6.    This code is included mainly as an exercise in how to initialise data
  7.    structures at run-time, which needs to be done in HeliOS if you allocate
  8.    32-bit addressed data structures within the 16-bit dictionary space.
  9.  
  10.    Usually it is better to allocate all Amiga data structures dynamically
  11.    at run time rather than initialise them in the 16-bit dictionary space.
  12.  
  13.    Nevertheless, this code does at least give you an alternative approach
  14.    which is OK for very simple applications.
  15.  
  16.    This HeliOS source code module contains:
  17.  
  18.    1. A fully commented predefined Intuition menu data structure.
  19.  
  20.    2. HeliOS run-time menu-initialisation code.
  21.  
  22.    3. A fully functional menu command interpreter which can,
  23.       if required, easily be integrated with the Helios gadget
  24.       command interpreter.
  25.  
  26.    4. A simple Demo program which opens a Workbench window and
  27.       carries out menu commands.
  28.  
  29.    All the material can be readily modified to your own specific
  30.    requirements and provides a simple means for dealing with all
  31.    Intuition Menu programming tasks.
  32.  
  33.    To produce your own application all you need to do is alter the
  34.    data structures to suit your particular requirements, then enter
  35.    your own routines into the command vector table in place of the
  36.    Demo commands.
  37.  
  38.    The run-time initialisation routines have been written in such
  39.    a way as to be very easy to understand and modify, but this
  40.    is not ideal in terms of speed and efficiency. Once you are
  41.    confident about what is happening you can easily speed up this
  42.    initialisation code if you wish.
  43.  
  44.  
  45.  
  46.                       <<<  *** IMPORTANT ***  >>>
  47.  
  48.                      WHY RUN-TIME INITIALISATION ?
  49.  
  50.             WHY NOT INITIALISE THE STRUCTURE AS IT IS DECLARED?
  51.  
  52.  
  53.    You MUST dynamically set up all data structure links and pointers
  54.    at run-time if you wish to be able to save the data structure as
  55.    part of a precompiled HeliOS code module.
  56.  
  57.    This has to be done because your data structures will obvously not
  58.    be reloaded into the same absolute position in memory as they occupied
  59.    when you first created them. This means that all the absolute pointers
  60.    in the structure must be re-initialised each time the module is loaded. )
  61.  
  62.  \ ----------------------------------------------------------
  63.  \ "FORGET" all but core dictionary.
  64.  \ ----------------------------------------------------------
  65.  
  66.    FORGET **CORE**
  67.  
  68.  \ ----------------------------------------------------------
  69.  \  First we define all the Text Strings we require.
  70.  \  (In this case we are using 3 Menus each with 4 items.)
  71.  \  Edit the text strings below to your own requirements.
  72.  \ ----------------------------------------------------------
  73.     CREATEL MENU1$   <$ Menu1text $
  74.     CREATEL MENU2$   <$ Menu2text $
  75.     CREATEL MENU3$   <$ Menu3text $
  76.     CREATEL MENU11$  <$ Menu11text$
  77.     CREATEL MENU12$  <$ Menu12text$
  78.     CREATEL MENU13$  <$ Menu13text$
  79.     CREATEL MENU14$  <$ Menu14text$
  80.     CREATEL MENU21$  <$ Menu21text$
  81.     CREATEL MENU22$  <$ Menu22text$
  82.     CREATEL MENU23$  <$ Menu23text$
  83.     CREATEL MENU24$  <$ Menu24text$
  84.     CREATEL MENU31$  <$ Menu31text$
  85.     CREATEL MENU32$  <$ Menu32text$
  86.     CREATEL MENU33$  <$ Menu33text$
  87.     CREATEL MENU34$  <$ Menu34text$
  88.  \ ----------------------------------------------------------
  89.  \ Now set up Menu data structures, unlinked at this stage.
  90.  \ Note that we only need remember the address of the first.
  91.  \ ----------------------------------------------------------
  92.                    D0  DVARIABLEL MENU1 \ Next MENU
  93.                    0         ,          \ LEDGE
  94.                    0         ,          \ TEDGE
  95.                    80        ,          \ WIDTH
  96.                    12        ,          \ HEIGHT
  97.                    1         ,          \ FLAGS
  98.                    D0       D,          \ NAME      14-offset
  99.                    D0       D,          \ ITEM1     18-offset
  100.                    0         ,          \ SYS
  101.                    0         ,          \ SYS
  102.                    0         ,          \ SYS
  103.                    0         ,          \ SYS       30 Bytes
  104.  \ ----------------------------------------------------------
  105.                    D0       D,          \ Next MENU
  106.                    80        ,          \ LEDGE
  107.                    0         ,          \ TEDGE
  108.                    80        ,          \ WIDTH
  109.                    12        ,          \ HEIGHT
  110.                    1         ,          \ FLAGS
  111.                    D0       D,          \ NAME
  112.                    D0       D,          \ ITEM1
  113.                    0         ,          \ SYS
  114.                    0         ,          \ SYS
  115.                    0         ,          \ SYS
  116.                    0         ,          \ SYS
  117.  \ ----------------------------------------------------------
  118.                    D0       D,          \ Next MENU
  119.                    160       ,          \ LEDGE
  120.                    0         ,          \ TEDGE
  121.                    80        ,          \ WIDTH
  122.                    12        ,          \ HEIGHT
  123.                    1         ,          \ FLAGS
  124.                    D0       D,          \ NAME
  125.                    D0       D,          \ ITEM1
  126.                    0         ,          \ SYS
  127.                    0         ,          \ SYS
  128.                    0         ,          \ SYS
  129.                    0         ,          \ SYS
  130.  \ ----------------------------------------------------------
  131.  \ Etc etc ...... Add as many as you require..............
  132.  \ ----------------------------------------------------------
  133.  \ Then declare the total number of menus as MENU#........
  134.  
  135.  \ In this case there are 3 Menus, so ........
  136.  
  137.    3 CONSTANT MENU#
  138.  
  139.  \ ----------------------------------------------------------
  140.  \ Now create the Menu Item data structures
  141.  \ Again we need only to remember the address of the first items
  142.  \ ----------------------------------------------------------
  143.  \ This is the 1st Menu Item list..................
  144.  \ ----------------------------------------------------------
  145.                    D0 DVARIABLEL MENU11 \ Next ITEM      ITEM11
  146.                    0         ,          \ LEDGE
  147.                    0         ,          \ TEDGE
  148.                    200       ,          \ WIDTH
  149.                    20        ,          \ HEIGHT
  150.              HEX 56 DECIMAL  ,          \ FLAGS
  151.                    D0       D,          \ MEXC
  152.                    D0       D,          \ FILL      18-offset
  153.                    D0       D,          \ SELFILL
  154.               ASCII 1       C,          \ CMD
  155.                    0        C,          \ KLUDGE
  156.                    D0       D,          \ SUBITEM
  157.                    0         ,          \ SELNEXT   34 Bytes
  158.  \ ----------------------------------------------------------
  159.                    2        C,          \ FPEN           ITEM11 TEXT
  160.                    0        C,          \ BPEN
  161.                    0        C,          \ MODE
  162.                    0        C,          \ KLUDGE
  163.                    3         ,          \ LEDGE
  164.                    2         ,          \ TEDGE
  165.                    D0       D,          \ FONT
  166.                    D0       D,          \ TEXT
  167.                    D0       D,          \ NEXTTEXT  20 Bytes
  168.  \ ----------------------------------------------------------
  169.                    D0       D,          \ Next ITEM      ITEM12
  170.                    0         ,          \ LEDGE
  171.                    20        ,          \ TEDGE
  172.                    200       ,          \ WIDTH
  173.                    20        ,          \ HEIGHT
  174.             HEX 56 DECIMAL   ,          \ FLAGS
  175.                    D0        D,         \ MEXC
  176.                    D0        D,         \ FILL
  177.                    D0        D,         \ SELFILL
  178.               ASCII 2        C,         \ CMD
  179.                    0         C,         \ KLUDGE
  180.                    D0        D,         \ SUBITEM
  181.                    0          ,         \ SELNEXT
  182.  \ ----------------------------------------------------------
  183.                    2         C,         \ FPEN           ITEM12 TEXT
  184.                    0         C,         \ BPEN
  185.                    0         C,         \ MODE
  186.                    0         C,         \ KLUDGE
  187.                    3          ,         \ LEDGE
  188.                    2          ,         \ TEDGE
  189.                    D0        D,         \ FONT
  190.                    D0        D,         \ TEXT
  191.                    D0        D,         \ NEXTTEXT
  192.  \ ----------------------------------------------------------
  193.                    D0        D,         \ Next ITEM      ITEM13
  194.                    0          ,         \ LEDGE
  195.                    40         ,         \ TEDGE
  196.                    200        ,         \ WIDTH
  197.                    20         ,         \ HEIGHT
  198.             HEX 56 DECIMAL    ,         \ FLAGS
  199.                    D0        D,         \ MEXC
  200.                    D0        D,         \ FILL
  201.                    D0        D,         \ SELFILL
  202.               ASCII 3        C,         \ CMD
  203.                    0         C,         \ KLUDGE
  204.                    D0        D,         \ SUBITEM
  205.                    0          ,         \ SELNEXT
  206.  \ ----------------------------------------------------------
  207.                    2         C,         \ FPEN           ITEM13 TEXT
  208.                    0         C,         \ BPEN
  209.                    0         C,         \ MODE
  210.                    0         C,         \ KLUDGE
  211.                    3          ,         \ LEDGE
  212.                    2          ,         \ TEDGE
  213.                    D0        D,         \ FONT
  214.                    D0        D,         \ TEXT
  215.                    D0        D,         \ NEXTTEXT
  216.  \ ----------------------------------------------------------
  217.                    D0        D,         \ Next ITEM      ITEM14
  218.                    0          ,         \ LEDGE
  219.                    60         ,         \ TEDGE
  220.                    200        ,         \ WIDTH
  221.                    20         ,         \ HEIGHT
  222.             HEX 56 DECIMAL    ,         \ FLAGS
  223.                    D0        D,         \ MEXC
  224.                    D0        D,         \ FILL
  225.                    D0        D,         \ SELFILL
  226.               ASCII 4        C,         \ CMD
  227.                    0         C,         \ KLUDGE
  228.                    D0        D,         \ SUBITEM
  229.                    0          ,         \ SELNEXT
  230.  \ ----------------------------------------------------------
  231.                    2         C,         \ FPEN           ITEM14 TEXT
  232.                    0         C,         \ BPEN
  233.                    0         C,         \ MODE
  234.                    0         C,         \ KLUDGE
  235.                    3          ,         \ LEDGE
  236.                    2          ,         \ TEDGE
  237.                    D0        D,         \ FONT
  238.                    D0        D,         \ TEXT
  239.                    D0        D,         \ NEXTTEXT
  240.  \ ----------------------------------------------------------
  241.  \ Etc etc ...... Add as many as you require..............
  242.  \ ----------------------------------------------------------
  243.  \ Then declare the total number of menu items as MENU1ITEM#..
  244.  
  245.  \ In this case there are 4 Menu1 Items, so ........
  246.  
  247.    4 CONSTANT MENU1ITEM#
  248.  
  249.  \ ----------------------------------------------------------
  250.  \ Next the 2nd Menu Items..............
  251.  \ ----------------------------------------------------------
  252.                    D0 DVARIABLEL MENU21 \ Next ITEM      ITEM21
  253.                    0         ,          \ LEDGE
  254.                    0         ,          \ TEDGE
  255.                    200       ,          \ WIDTH
  256.                    20        ,          \ HEIGHT
  257.              HEX 56 DECIMAL  ,          \ FLAGS
  258.                    D0       D,          \ MEXC
  259.                    D0       D,          \ FILL
  260.                    D0       D,          \ SELFILL
  261.               ASCII 5       C,          \ CMD
  262.                    0        C,          \ KLUDGE
  263.                    D0       D,          \ SUBITEM
  264.                    0         ,          \ SELNEXT
  265.  \ ----------------------------------------------------------
  266.                    2        C,          \ FPEN           ITEM21 TEXT
  267.                    0        C,          \ BPEN
  268.                    0        C,          \ MODE
  269.                    0        C,          \ KLUDGE
  270.                    3         ,          \ LEDGE
  271.                    2         ,          \ TEDGE
  272.                    D0       D,          \ FONT
  273.                    D0       D,          \ TEXT
  274.                    D0       D,          \ NEXTTEXT
  275.  \ ----------------------------------------------------------
  276.                    D0       D,          \ Next ITEM      ITEM22
  277.                    0         ,          \ LEDGE
  278.                    20        ,          \ TEDGE
  279.                    200       ,          \ WIDTH
  280.                    20        ,          \ HEIGHT
  281.             HEX 56 DECIMAL   ,          \ FLAGS
  282.                    D0        D,         \ MEXC
  283.                    D0        D,         \ FILL
  284.                    D0        D,         \ SELFILL
  285.               ASCII 6        C,         \ CMD
  286.                    0         C,         \ KLUDGE
  287.                    D0        D,         \ SUBITEM
  288.                    0          ,         \ SELNEXT
  289.  \ ----------------------------------------------------------
  290.                    2         C,         \ FPEN           ITEM22 TEXT
  291.                    0         C,         \ BPEN
  292.                    0         C,         \ MODE
  293.                    0         C,         \ KLUDGE
  294.                    3          ,         \ LEDGE
  295.                    2          ,         \ TEDGE
  296.                    D0        D,         \ FONT
  297.                    D0        D,         \ TEXT
  298.                    D0        D,         \ NEXTTEXT
  299.  \ ----------------------------------------------------------
  300.                    D0        D,         \ Next ITEM      ITEM23
  301.                    0          ,         \ LEDGE
  302.                    40         ,         \ TEDGE
  303.                    200        ,         \ WIDTH
  304.                    20         ,         \ HEIGHT
  305.             HEX 56 DECIMAL    ,         \ FLAGS
  306.                    D0        D,         \ MEXC
  307.                    D0        D,         \ FILL
  308.                    D0        D,         \ SELFILL
  309.               ASCII 7        C,         \ CMD
  310.                    0         C,         \ KLUDGE
  311.                    D0        D,         \ SUBITEM
  312.                    0          ,         \ SELNEXT
  313.  \ ----------------------------------------------------------
  314.                    2         C,         \ FPEN           ITEM23 TEXT
  315.                    0         C,         \ BPEN
  316.                    0         C,         \ MODE
  317.                    0         C,         \ KLUDGE
  318.                    3          ,         \ LEDGE
  319.                    2          ,         \ TEDGE
  320.                    D0        D,         \ FONT
  321.                    D0        D,         \ TEXT
  322.                    D0        D,         \ NEXTTEXT
  323.  \ ----------------------------------------------------------
  324.                    D0        D,         \ Next ITEM      ITEM24
  325.                    0          ,         \ LEDGE
  326.                    60         ,         \ TEDGE
  327.                    200        ,         \ WIDTH
  328.                    20         ,         \ HEIGHT
  329.             HEX 56 DECIMAL    ,         \ FLAGS
  330.                    D0        D,         \ MEXC
  331.                    D0        D,         \ FILL
  332.                    D0        D,         \ SELFILL
  333.               ASCII 8        C,         \ CMD
  334.                    0         C,         \ KLUDGE
  335.                    D0        D,         \ SUBITEM
  336.                    0          ,         \ SELNEXT
  337.  \ ----------------------------------------------------------
  338.                    2         C,         \ FPEN           ITEM24 TEXT
  339.                    0         C,         \ BPEN
  340.                    0         C,         \ MODE
  341.                    0         C,         \ KLUDGE
  342.                    3          ,         \ LEDGE
  343.                    2          ,         \ TEDGE
  344.                    D0        D,         \ FONT
  345.                    D0        D,         \ TEXT
  346.                    D0        D,         \ NEXTTEXT
  347.  \ ----------------------------------------------------------
  348.  \ Etc etc ...... Add as many as you require..............
  349.  \ ----------------------------------------------------------
  350.  \ Then declare the total number of menu items as MENU2ITEM#..
  351.  
  352.  \ In this case there are 4 Menu2 Items, so ........
  353.  
  354.    4 CONSTANT MENU2ITEM#
  355.  
  356.  \ ----------------------------------------------------------
  357.  \ Now the 3rd Menu.........................
  358.  \ ----------------------------------------------------------
  359.                    D0 DVARIABLEL MENU31 \ Next ITEM      ITEM31
  360.                    0         ,          \ LEDGE
  361.                    0         ,          \ TEDGE
  362.                    200       ,          \ WIDTH
  363.                    20        ,          \ HEIGHT
  364.              HEX 56 DECIMAL  ,          \ FLAGS
  365.                    D0       D,          \ MEXC
  366.                    D0       D,          \ FILL
  367.                    D0       D,          \ SELFILL
  368.               ASCII A       C,          \ CMD
  369.                    0        C,          \ KLUDGE
  370.                    D0       D,          \ SUBITEM
  371.                    0         ,          \ SELNEXT
  372.  \ ----------------------------------------------------------
  373.                    2        C,          \ FPEN           ITEM31 TEXT
  374.                    0        C,          \ BPEN
  375.                    0        C,          \ MODE
  376.                    0        C,          \ KLUDGE
  377.                    3         ,          \ LEDGE
  378.                    2         ,          \ TEDGE
  379.                    D0       D,          \ FONT
  380.                    D0       D,          \ TEXT
  381.                    D0       D,          \ NEXTTEXT
  382.  \ ----------------------------------------------------------
  383.                    D0       D,          \ Next ITEM      ITEM32
  384.                    0         ,          \ LEDGE
  385.                    20        ,          \ TEDGE
  386.                    200       ,          \ WIDTH
  387.                    20        ,          \ HEIGHT
  388.             HEX 56 DECIMAL   ,          \ FLAGS
  389.                    D0        D,         \ MEXC
  390.                    D0        D,         \ FILL
  391.                    D0        D,         \ SELFILL
  392.               ASCII B        C,         \ CMD
  393.                    0         C,         \ KLUDGE
  394.                    D0        D,         \ SUBITEM
  395.                    0          ,         \ SELNEXT
  396.  \ ----------------------------------------------------------
  397.                    2         C,         \ FPEN           ITEM32 TEXT
  398.                    0         C,         \ BPEN
  399.                    0         C,         \ MODE
  400.                    0         C,         \ KLUDGE
  401.                    3          ,         \ LEDGE
  402.                    2          ,         \ TEDGE
  403.                    D0        D,         \ FONT
  404.                    D0        D,         \ TEXT
  405.                    D0        D,         \ NEXTTEXT
  406.  \ ----------------------------------------------------------
  407.                    D0        D,         \ Next ITEM      ITEM33
  408.                    0          ,         \ LEDGE
  409.                    40         ,         \ TEDGE
  410.                    200        ,         \ WIDTH
  411.                    20         ,         \ HEIGHT
  412.             HEX 56 DECIMAL    ,         \ FLAGS
  413.                    D0        D,         \ MEXC
  414.                    D0        D,         \ FILL
  415.                    D0        D,         \ SELFILL
  416.               ASCII C        C,         \ CMD
  417.                    0         C,         \ KLUDGE
  418.                    D0        D,         \ SUBITEM
  419.                    0          ,         \ SELNEXT
  420.  \ ----------------------------------------------------------
  421.                    2         C,         \ FPEN           ITEM33 TEXT
  422.                    0         C,         \ BPEN
  423.                    0         C,         \ MODE
  424.                    0         C,         \ KLUDGE
  425.                    3          ,         \ LEDGE
  426.                    2          ,         \ TEDGE
  427.                    D0        D,         \ FONT
  428.                    D0        D,         \ TEXT
  429.                    D0        D,         \ NEXTTEXT
  430.  \ ----------------------------------------------------------
  431.                    D0        D,         \ Next ITEM      ITEM34
  432.                    0          ,         \ LEDGE
  433.                    60         ,         \ TEDGE
  434.                    200        ,         \ WIDTH
  435.                    20         ,         \ HEIGHT
  436.             HEX 56 DECIMAL    ,         \ FLAGS
  437.                    D0        D,         \ MEXC
  438.                    D0        D,         \ FILL
  439.                    D0        D,         \ SELFILL
  440.               ASCII D        C,         \ CMD
  441.                    0         C,         \ KLUDGE
  442.                    D0        D,         \ SUBITEM
  443.                    0          ,         \ SELNEXT
  444.  \ ----------------------------------------------------------
  445.                    2         C,         \ FPEN           ITEM34 TEXT
  446.                    0         C,         \ BPEN
  447.                    0         C,         \ MODE
  448.                    0         C,         \ KLUDGE
  449.                    3          ,         \ LEDGE
  450.                    2          ,         \ TEDGE
  451.                    D0        D,         \ FONT
  452.                    D0        D,         \ TEXT
  453.                    D0        D,         \ NEXTTEXT
  454.  \ ----------------------------------------------------------
  455.  \ Etc etc ...... Add as many as you require..............
  456.  \ ----------------------------------------------------------
  457.  \ Then declare the total number of menu items as MENU3ITEM#..
  458.  
  459.  \ In this case there are 4 Menu3 Items, so ........
  460.  
  461.    4 CONSTANT MENU3ITEM#
  462.  
  463.  \ ----------------------------------------------------------
  464.  \ Now create words to reference the various structures
  465.  \ ----------------------------------------------------------
  466.  
  467.    : MENU        \  Menunumber(w) - - - Structure Address(l)
  468.  
  469.      1- 30 *     \  Offset into list of structures
  470.      0           \  Make into 32-bit number
  471.      MENU1 D+ ;  \  Add to start address
  472.  
  473.  
  474.    : MENUITEM    \  ItemStructure(l), Itemnumber(w) - - - Structure Address(l)
  475.  
  476.      1- 54 *
  477.      0
  478.      D+ ;
  479.  
  480.  \ ----------------------------------------------------------
  481.  \ And now a word to initialise the menus.........
  482.  \ ----------------------------------------------------------
  483.  
  484.    : INITMENUS
  485.  
  486.      MENU3$ MENU2$ MENU1$
  487.      MENU# 0
  488.      DO
  489.        I 1+ MENU 14. D+ D!L     \ Set name text
  490.      LOOP
  491.  
  492.  
  493.      MENU# 0                    \ Set Menu Links
  494.      DO
  495.        I 1+ MENU# <
  496.        IF
  497.          I 2+ MENU
  498.          I 1+ MENU D!L
  499.        THEN
  500.      LOOP
  501.  
  502.  
  503.      MENU31 MENU21 MENU11
  504.      MENU# 0
  505.      DO
  506.        1 MENUITEM I 1+ MENU 18. D+ D!L     \ Set 1st Item Pointer
  507.      LOOP
  508.  
  509.  
  510.      MENU14$ MENU13$ MENU12$ MENU11$       \ Set Menu 1
  511.      MENU11
  512.      MENU1ITEM# 0
  513.      DO
  514.        I 1+ MENU1ITEM# <
  515.        IF                                  \ Set Item Links
  516.          DDUP  I 2+ MENUITEM
  517.          DOVER I 1+ MENUITEM D!L
  518.        THEN
  519.  
  520.        DDUP  I 1+ MENUITEM 18. D+          \ Set IntuiText Pointers
  521.        DDUP 16. DUNDER+ D!L
  522.  
  523.        DSWAP DOVER
  524.        I 1+ MENUITEM 46. D+ D!L            \ Set Text Pointers
  525.      LOOP
  526.      DDROP
  527.  
  528.  
  529.      MENU24$ MENU23$ MENU22$ MENU21$       \ Set Menu 2
  530.      MENU21
  531.      MENU2ITEM# 0
  532.      DO
  533.        I 1+ MENU2ITEM# <
  534.        IF                                  \ Set Item Links
  535.          DDUP  I 2+ MENUITEM
  536.          DOVER I 1+ MENUITEM D!L
  537.        THEN
  538.        DDUP  I 1+ MENUITEM 18. D+          \ Set IntuiText Pointers
  539.        DDUP 16. DUNDER+ D!L
  540.        DSWAP DOVER
  541.        I 1+ MENUITEM 46. D+ D!L            \ Set Text Pointers
  542.      LOOP
  543.      DDROP
  544.  
  545.      MENU34$ MENU33$ MENU32$ MENU31$       \ Set Menu 3
  546.      MENU31
  547.      MENU3ITEM# 0
  548.      DO
  549.        I 1+ MENU3ITEM# <
  550.        IF                                  \ Set Item Links
  551.          DDUP  I 2+ MENUITEM
  552.          DOVER I 1+ MENUITEM D!L
  553.        THEN
  554.  
  555.        DDUP  I 1+ MENUITEM 18. D+          \ Set IntuiText Pointers
  556.        DDUP 16. DUNDER+ D!L
  557.  
  558.        DSWAP DOVER
  559.        I 1+ MENUITEM 46. D+ D!L            \ Set Text Pointers
  560.      LOOP
  561.      DDROP
  562.      ;
  563.  
  564.  \ ----------------------------------------------------------
  565.  \ A set of dummy Menu commands
  566.  \ ----------------------------------------------------------
  567.  
  568.    : M11 4 11 CURPUT ." MENU11ACTION" ;
  569.    : M12 4 11 CURPUT ." MENU12ACTION" ;
  570.    : M13 4 11 CURPUT ." MENU13ACTION" ;
  571.    : M14 4 11 CURPUT ." MENU14ACTION" ;
  572.    : M21 4 14 CURPUT ." MENU21ACTION" ;
  573.    : M22 4 14 CURPUT ." MENU22ACTION" ;
  574.    : M23 4 14 CURPUT ." MENU23ACTION" ;
  575.    : M24 4 14 CURPUT ." MENU24ACTION" ;
  576.    : M31 4 17 CURPUT ." MENU31ACTION" ;
  577.    : M32 4 17 CURPUT ." MENU32ACTION" ;
  578.    : M33 4 17 CURPUT ." MENU33ACTION" ;
  579.    : M34 4 17 CURPUT ." MENU34ACTION" ;
  580.  
  581.  \ ----------------------------------------------------------
  582.  \ The Menu Command Interpreter Vector Table
  583.  \ ----------------------------------------------------------
  584.  
  585.  \ See the HeliOS Dictionary and Amiga Intuition Reference Manual
  586.  \ for full definition and description of the Menu Number fields.
  587.  \ Very briefly, these are as follows :
  588.  \ Menunumber in Binary Format: 1111100000100000
  589.  \ Menu number bits           :            ^^^^^ = Menu 1
  590.  \ Menu Item number bits      :      ^^^^^^      = Menu Item 2
  591.  \ Menu Sub-Item number bits  : ^^^^^            = Menu Sub-Item Null
  592.  \ In other words:   ALL BITS SET IN FIELD = NULL FIELD
  593.  \             and   NO  BITS SET IN FIELD = 1st item
  594.  
  595.  \ You can replace the commands M11.......M34 defined above and used
  596.  \ in the Menuvector table below with any routines of your own.
  597.  
  598.             BIN      1111100000000000 VARIABLE MENUVECTORS   \ Menu 1 Item 1
  599.                   ' M11 CFA ,
  600.                      1111100000100000 ,             \ Menu 1 Item 2
  601.                   ' M12 CFA ,
  602.                      1111100001000000 ,             \ Menu 1 Item 3
  603.                   ' M13 CFA ,
  604.                      1111100001100000 ,             \ Menu 1 Item 4
  605.                   ' M14 CFA ,
  606.                      1111100000000001 ,             \ Menu 2 Item 1
  607.                   ' M21 CFA ,
  608.                      1111100000100001 ,             \ Menu 2 Item 2
  609.                   ' M22 CFA ,
  610.                      1111100001000001 ,             \ Menu 2 Item 3
  611.                   ' M23 CFA ,
  612.                      1111100001100001 ,             \ Menu 2 Item 4
  613.                   ' M24 CFA ,
  614.                      1111100000000010 ,             \ Menu 3 Item 1
  615.                   ' M31 CFA ,
  616.                      1111100000100010 ,             \ Menu 3 Item 2
  617.                   ' M32 CFA ,
  618.                      1111100001000010 ,             \ Menu 3 Item 3
  619.                   ' M33 CFA ,
  620.                      1111100001100010 ,             \ Menu 3 Item 4
  621.                   ' M34 CFA ,            DECIMAL
  622.                    HERE
  623.                    255 ,
  624.                    ' NOOP  CFA ,
  625.                   CONSTANT MENUEND
  626.  
  627.  \ ----------------------------------------------------------
  628.  \ The Menu Command Interpreter
  629.  \ ----------------------------------------------------------
  630.  
  631.    : MENUCHECK
  632.  
  633.      MENUEND MENUVECTORS
  634.       DO
  635.         I DDUP @
  636.         =
  637.          IF
  638.            2+ LEAP
  639.          THEN
  640.         DROP
  641.         4
  642.       +LOOP
  643.      MENUEND 2+
  644.    ;
  645.  
  646.    : MENUACTION     DROP  MENUNUMBER  MENUCHECK  @EXECUTE   ;
  647.  
  648.  \ ----------------------------------------------------------
  649.  \ Install and Remove Menus
  650.  \ ----------------------------------------------------------
  651.  
  652.    $CONSTANT WINTITLE $MENUTEST$  \ Window Title for Demo window
  653.  
  654.    D0 DVARIABLE WINDOW1           \ DVARIABLE to contain your Window handle
  655.  
  656.   : SETMENU                       \ Install Menus
  657.  
  658.      WINDOW1 D@ 0 AREG D!
  659.      MENU1      1 AREG D!
  660.      INTUBASE -264 LIBRARY
  661.    ;
  662.  
  663.    : CLEARMENU                    \ Remove Menus
  664.  
  665.      WINDOW1 D@ 0 AREG D!
  666.      INTUBASE -54 LIBRARY
  667.    ;
  668.  
  669.  \ ---------------------
  670.  \ Demonstration Program
  671.  \ ---------------------
  672.  
  673.    : TESTMENU
  674.  
  675.      TIMEOFF                          \ Switch off auto-time display
  676.  
  677.      INITMENUS                        \ Initialise Menu structures
  678.  
  679.      STDWINDOW                        \ Set up for standard Workbench window
  680.  
  681.      DRAGGAD                          \ Include Drag gadget
  682.  
  683.      DEPTHGAD                         \ Include Depth gadget
  684.  
  685.      CLOSEGAD                         \ Include Close gadget..........
  686.  
  687.      WINDOWCLOSE 0!                   \ ..and set up Window Close Gadget Flag
  688.  
  689.      WINTITLE                         \ Window Title Text String
  690.  
  691.      0 0 400 190                      \ Window Dimensions
  692.  
  693.      2 0                              \ 2-Bitplanes, no Superbitmap Window
  694.  
  695.      OPENWINDOW                       \ Open the new Window
  696.  
  697.      DFLAG0= IF                       \ ??? Window failed to open ???
  698.                DDROP                  \ We have no window, so finish
  699.              ELSE
  700.                DTRIP                  \ Window opened OK, so
  701.                WINDOW1 D!             \ Store window handle
  702.                MAKEINWINDOW           \ Make Inputwindow
  703.                MAKEOUTWINDOW          \ Make Outputwindow
  704.                CUROFF                 \ Switch off cursor
  705.                EVENTON                \ Switch on Event Reporting
  706.                SETMENU                \ Install Menus into Window
  707.                WBENCHTOFRONT          \ Display Workbench
  708.  
  709.                CR
  710.  
  711.                ."    Hello!"       \ Hailing Text
  712.  
  713.                CR CR
  714.  
  715.                ."    Try all the menu selections."
  716.  
  717.                CR CR
  718.  
  719.                ."    Press <Esc> to exit this Demo,"
  720.                CR CR
  721.  
  722.                ."    or Click on the window CLOSE Gadget."
  723.  
  724.                BEGIN                  \ Input processing loop
  725.                  KEY
  726.                  DUP 1254 =  IF MENUACTION THEN
  727.                  27 =                 \ Check for <Esc>
  728.                  WINDOWCLOSE @ OR     \ or Window Close Gadget
  729.                UNTIL                  \ Now Clear-up and Exit
  730.  
  731.                CLEARMENU              \ Remove Menus
  732.                FORTHOUTWINDOW         \ Reset HeliOS Output
  733.                FORTHINWINDOW          \ Reset HeliOS Input
  734.                WINDOW1 D@ CLOSEWINDOW \ Close Window
  735.              THEN
  736.        TIMEON                         \ Switch on auto-time display
  737.        WBENCHTOBACK                   \ Move Workbench to back
  738.       ;
  739.  
  740.       TESTMENU
  741.  
  742.  \ ---------------------------------------------------------------------------
  743.  \ The End
  744.  \ ---------------------------------------------------------------------------
  745.