home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / QBAS / WNDTOOL5.ZIP / BARMENU.SUB next >
Text File  |  1989-04-26  |  20KB  |  583 lines

  1. '
  2. '$PAGE
  3. '
  4. '******************************************************************************
  5. '                    Function :                                               *
  6. '                                                                             *
  7. ' Purpose:                                                                    *
  8. '                                                                             *
  9. '                                                                             *
  10. ' Results:                                                                    *
  11. '                                                                             *
  12. ' Usage  :                                                                    *
  13. '                                                                             *
  14. '                                                                             *
  15. ' Date Written : 01/01/89 - Date Tested: 01/01/89 - Author: James P Morgan    *
  16. ' Date Modified:          -            :          -       :                   *
  17. '-----------------------------------------------------------------------------*
  18. ' NOTE:                                                                       *
  19. '******************************************************************************
  20. '                                                                             *
  21. '     SUB PROGRAM NAME          (PARAMETERS)                 STATIC/RECURSIVE *
  22. '-----------------------------------------------------------------------------*
  23. '                                                                             *
  24. '============================================================================
  25.  
  26. SUB    BARMENU(MENULINE$,MENUFG%,MENUBG%,BLKSIZE%,BLKNUM%,MAXSIZE%(1),MAXITEMS%(1),ITEMS$(2),MENUSLCT%,ITEMSLCT%) STATIC
  27.  
  28.        DEFINT A-Z                               'make all short intergers by default
  29.  
  30.        DIM SCR(2000)
  31.        DIM BAR.SCR(256)                         'storage for bar menu line
  32.  
  33.        TEMP.ITEM$=STRING$(255," ")
  34.        ITEMS.MIN=LBOUND(ITEMS$,1)               'make the code independant of callers BASE OPTION
  35.        MAXSIZE.MIN=LBOUND(MAXSIZE%)
  36.        MAXITEMS.MIN=LBOUND(MAXITEMS%)
  37.  
  38.        MENU.MAXITEMS%=0
  39.  
  40.        MENU=1                                   'start with first menu
  41.        OLD.MENU=MENU
  42.        MENU.BASE=MENU
  43.  
  44.        MSELECT.BASE=1                           'normalize
  45.        MSELECT=1
  46.        OLD.BASE=1
  47.        OLD=1
  48.  
  49.        MENUROW=2                                'bar menu goes on this line
  50.        MENUCOL=2
  51.  
  52.        MENU.TOP.ROW=0                           'co-ordinates for pop-down menu, off bar
  53.        MENU.TOP.LEFT.COL=0
  54.        MENU.BOTTOM.ROW=0
  55.        MENU.BOTTOM.RIGHT.COL=0
  56.  
  57.        BUTTONS%=0                               'assume no mouse support avail
  58.  
  59.        CALL MMCHECK(BUTTONS%)                   'see if mouse support avail
  60.  
  61.        GOSUB BARMENU.MMCURSORON
  62.  
  63.        MOUSECOL=0                               'locate the mouse cursor in upper
  64.        MOUSEROW=0                               'left top corner of screen
  65.  
  66.        CALL MMSETLOC(MOUSECOL,MOUSEROW)
  67.  
  68.        GOSUB BARMENU.MMCURSOROFF
  69.  
  70.        PRESATTR=SCREEN(MENUROW,MENUCOL,1)       'get present attribute of menu bar
  71.  
  72.        ATTR=(MENUBG% AND 7)*16+MENUFG%          'turn on menu bar
  73.  
  74.        CALL FASTPRT(MENULINE$,MENUROW,MENUCOL,ATTR)
  75.  
  76. 'display the barmenu box for the first barmenu selection
  77.  
  78.        GOSUB BARMENU.BOX
  79.        GOTO BARMENU.LOOPX
  80.  
  81. '
  82. BARMENU.LOOP:
  83.        GOSUB BARMENU.PROCESS                    'turnoff Position of Selection Marker
  84. BARMENU.LOOPX:
  85.        GOSUB BARMENU.TON                        'turn on position of Selection Marker
  86.        GOSUB BARMENU.PRESS                      'Get KeyPress
  87.  
  88.        IF KP$=CHR$(13) THEN                     'if ENTER pressed , a selection was made
  89.            GOTO BARMENU.DONE                    'so we are thru
  90.        ENDIF
  91.  
  92.        IF KP$=CHR$(27) THEN                     'was ESC pressed?
  93.          GOTO BARMENU.DONE2
  94.        ENDIF
  95.  
  96.        GOTO BARMENU.LOOP
  97.  
  98. '
  99. 'Check for KeyPress and sound error if not UP ARROW, DOWN ARROW, LEFT ARROW, RIGHT ARROW, or RETURN
  100. '
  101. BARMENU.PRESS:
  102.        GOSUB BARMENU.MMCURSORON
  103.  
  104.        CALL MMCLICK(LFT%,RGT%)                  'flush any mouse clicks
  105.  
  106.        GOSUB BARMENU.GET.PRESS                  'generalized routine for kybd and mouse
  107.  
  108.        IF KP$="" THEN                           'anything to do?
  109.            GOTO BARMENU.PRESS                   'NO
  110.        ENDIF
  111.  
  112.        IF LEN(KP$)=2 THEN                       'an Extended function key pressed?
  113.            GOTO BARMENU.DOWN
  114.        ENDIF
  115.  
  116.        IF KP$=CHR$(13) THEN                     'ENTER pressed, a menu item was selected?
  117.           RETURN
  118.        ENDIF
  119.  
  120.        IF KP$=CHR$(27) THEN                     'was ESC pressed?
  121.            MENUSLCT%=0                          'cancel ALL selections!
  122.            ITEMSLCT%=0
  123.          RETURN
  124.        ENDIF
  125.  
  126.        GOSUB BARMENU.FIND.OPTION                'was the first char of an selection pressed?
  127.  
  128.        IF MSELECT<>SAVE.MSELECT THEN            'was a new selection was this letter found?
  129.           RETURN
  130.        ENDIF
  131.  
  132.        GOSUB BARMENU.SOUNDOFF
  133.        GOTO BARMENU.PRESS
  134.  
  135. '
  136. 'Process DOWN ARROW KeyPress
  137. '
  138. BARMENU.DOWN:
  139.        IF ASC(RIGHT$(KP$,1))<>80 THEN           'was cursor down pressed?
  140.            GOTO BARMENU.UP
  141.        ENDIF
  142.  
  143.        MSELECT=MSELECT+1                        'select the next item in the menu
  144.  
  145. '
  146. '
  147. '
  148.  
  149.        IF ITEMS$((MENU-MENU.BASE)+ITEMS.MIN,(MSELECT-MSLECT.BASE)+ITEMS.MIN)=STRING$(MAXSIZE%((MENU-MENU.BASE)+MAXSIZE.MIN),196) THEN
  150.            MSELECT=MSELECT+1
  151.        ENDIF
  152.  
  153. '
  154. ' are we past the end of the pop-down menu items?
  155. '
  156.        IF MSELECT > MENU.MAXITEMS% THEN
  157.             MSELECT=1                            'start back with the first pop-down menu item
  158.        ENDIF
  159.  
  160.        RETURN
  161.  
  162. 'Process UP ARROW KeyPress
  163. BARMENU.UP:
  164.        IF ASC(RIGHT$(KP$,1))<>72 THEN           'was cursor up pressed?
  165.            GOTO BARMENU.OTHER
  166.        ENDIF
  167.  
  168.        MSELECT=MSELECT-1                        'select the previous item in the menu list
  169.  
  170. '
  171. 'did we go past the start of the pop-down menu items
  172. '
  173.        IF MSELECT<1 THEN
  174.             MSELECT.BASE=0                       '
  175.        ENDIF
  176.  
  177.  
  178.        IF ITEMS$((MENU-MENU.BASE)+ITEMS.MIN,(MSELECT-MSELECT.BASE)+ITEMS.MIN)=STRING$(MAXSIZE%((MENU-MENU.BASE)+MAXSIZE.MIN),196) THEN
  179.            MSELECT=MSELECT-1
  180.        ENDIF
  181.  
  182. '
  183. 'did we go past the start of the pop-down menu items
  184. '
  185. '
  186.        IF MSELECT < 1 THEN
  187.            MSELECT=MENU.MAXITEMS%                 'select the last item in the pop-down list
  188.            MSELECT.BASE=1
  189.        ENDIF
  190.  
  191.        RETURN
  192.  
  193. 'Process RIGHT ARROW KeyPress
  194. BARMENU.OTHER:                                  'was cursor right pressed?
  195.        IF ASC(RIGHT$(KP$,1))=77 THEN
  196.             MENU=MENU+1                         'select the next bar menu item
  197.           IF MENU > BLKNUM% THEN                'did we go past the end of the bar menu items
  198.                MENU = 1                         'Yes, loop back around to the first bar menu item
  199.                GOSUB BARMENU.NEWMENU
  200.             RETURN
  201.           ELSE
  202.                GOSUB BARMENU.NEWMENU
  203.             RETURN
  204.           ENDIF
  205.       ENDIF
  206.  
  207. 'Process LEFT ARROW KeyPress
  208.  
  209.        IF ASC(RIGHT$(KP$,1))=75 THEN           'was cursor left pressed?
  210.               MENU=MENU-1                      'select the previous bar menu item
  211.            IF MENU < 1 THEN                    'did we go past the start of the bar menu items
  212.                MENU = BLKNUM%                  'yes, loop around to the last bar menu item
  213.                GOSUB BARMENU.NEWMENU
  214.              RETURN
  215.            ELSE
  216.                GOSUB BARMENU.NEWMENU
  217.              RETURN
  218.            ENDIF
  219.        ENDIF
  220.  
  221.        GOSUB BARMENU.SOUNDOFF                   'NOt a valid extended function key!
  222.        GOTO BARMENU.PRESS
  223.  
  224. '
  225. 'turn off present selection
  226. BARMENU.PROCESS:
  227.        IF OLD=O THEN                            'anything selected yet?
  228.            RETURN
  229.        ENDIF
  230.  
  231.        GOSUB BARMENU.MMCURSOROFF
  232.  
  233. '      MENU.ITEM$=ITEMS$((MENU-MENU.BASE)+ITEMS.MIN,(OLD-OLD.BASE)+ITEMS.MIN)
  234. '      IF LEN(MENU.ITEM$)< LENGTH.MENU.ITEM THEN_
  235. '           MENU.ITEM$=MENU.ITEM$+STRING$(LENGTH.MENU.ITEM-LEN(MENU.ITEM$)," ")
  236.  
  237.  
  238.        ROW=((MENU.TOP.ROW-1)+OLD)                'this is where this pop-down menu item is located
  239.        COL=MENU.TOP.LEFT.COL
  240.  
  241.        ATTR=(MENUBG% AND 7)*16+MENUFG%           'turn off highlighting for this menu item
  242.  
  243.        CALL FASTPRT(MENU.ITEM$,ROW,COL,ATTR)
  244.  
  245.        RETURN
  246.  
  247. '
  248. 'Turn on new selection
  249. BARMENU.TON:
  250.        IF MSELECT=0 THEN                        'anything selected yet?
  251.            GOTO BARMENU.TON.NEWOLD
  252.        ENDIF
  253.  
  254.        GOSUB BARMENU.MMCURSOROFF
  255.  
  256.  
  257.        MENU.ITEM$=ITEMS$((MENU-MENU.BASE)+ITEMS.MIN,(MSELECT-MSELECT.BASE)+ITEMS.MIN)
  258.  
  259.        IF LEN(MENU.ITEM$)< LENGTH.MENU.ITEM THEN
  260.             MENU.ITEM$=MENU.ITEM$+STRING$(LENGTH.MENU.ITEM-LEN(MENU.ITEM$)," ")
  261.        ENDIF
  262.  
  263.        ROW=((MENU.TOP.ROW-1)+MSELECT)           'this is where the menu item is located
  264.        COL=MENU.TOP.LEFT.COL
  265.  
  266.        ATTR=(MENUFG% AND 7)*16+MENUBG%          'highlight this popdown menu item
  267.  
  268.        CALL FASTPRT(MENU.ITEM$,ROW,COL,ATTR)
  269.  
  270.        IF MSELECT<>OLD THEN                     'did the selection change (cursor up or down)
  271.            MOUSEROW=(ROW-1)*8                   'if so, put the mouse cursor on the new selection
  272.            MOUSECOL=(COL-1)*8
  273.            CALL MMSETLOC(MOUSECOL,MOUSEROW)
  274.        ENDIF
  275.  
  276. BARMENU.TON.NEWOLD:
  277.        OLD=MSELECT                              'make the current selection the "OLD" one now
  278.        RETURN
  279.  
  280. '
  281. '
  282. BARMENU.NEWMENU:
  283.        MSELECT=0                                'reinitialize selections for a new menu
  284.        OLD=0
  285.  
  286.        OLD.MENU=MENU                            'this is the current bar menu item
  287.  
  288.        GOSUB BARMENU.MMCURSOROFF
  289.  
  290.        CALL RESTWIND(WINDOW.TOP.ROW,WINDOW.TOP.LEFT.COL,WINDOW.BOT.ROW,WINDOW.BOT.RIGHT.COL,SCR(0))
  291.  
  292.        CALL RESTWIND(2,1,2,80,BAR.SCR(0))       'restore the bar menu line
  293.  
  294. BARMENU.BOX:
  295. '
  296. 'Calculate the maximum items to be displayed in this pop-down window
  297. '
  298.        MENU.MAXITEMS%=MAXITEMS%((MENU-MENU.BASE)+MAXITEMS.MIN)
  299.  
  300. '
  301. 'calculate the pop-down menu windows upper left row/column co-ordinates
  302. '
  303.        MENU.TOP.ROW=MENUROW+2
  304.        MENU.TOP.LEFT.COL=((MENU-1)*BLKSIZE%)+MENUCOL+1
  305.  
  306. '
  307. 'calculate the pop-down menu windows lower right row/column co-ordinates
  308. '
  309.        MENU.BOTTOM.ROW=(MENU.TOP.ROW+MENU.MAXITEMS%)-1
  310.  
  311.        LENGTH.MENU.ITEM=0
  312.        MENU.BOTTOM.RIGHT.COL=0
  313.  
  314. 'find the longest menu item in this menu
  315.        K.BASE=1
  316.  
  317.        FOR K=K.BASE TO MENU.MAXITEMS%
  318.          MENU.ITEM$=ITEMS$((MENU-MENU.BASE)+ITEMS.MIN,(K-K.BASE)+ITEMS.MIN)
  319.          IF LEN(MENU.ITEM$)>MENU.BOTTOM.RIGHT.COL THEN
  320.             MENU.BOTTOM.RIGHT.COL=LEN(MENU.ITEM$)
  321.          ENDIF
  322.  
  323.        NEXT
  324.  
  325.        LENGTH.MENU.ITEM=MENU.BOTTOM.RIGHT.COL   'this is the size of the longest menu item
  326.  
  327.        MENU.BOTTOM.RIGHT.COL=MENU.TOP.LEFT.COL+(MENU.BOTTOM.RIGHT.COL-1)                          'SO, the box for this menu will be at least this big
  328.  
  329. 'save the area that this menu window will occupy
  330.  
  331.        WINDOW.TOP.ROW=MENU.TOP.ROW-1             'adjust row and cols to allow for window frame
  332.        WINDOW.BOT.ROW=MENU.BOTTOM.ROW+1
  333.        WINDOW.TOP.LEFT.COL=MENU.TOP.LEFT.COL-1
  334.        WINDOW.BOT.RIGHT.COL=MENU.BOTTOM.RIGHT.COL+1
  335.  
  336.        CALL SAVEWIND(2,1,2,80,BAR.SCR(0))
  337.  
  338.        CALL SAVEWIND(WINDOW.TOP.ROW,WINDOW.TOP.LEFT.COL,WINDOW.BOT.ROW,WINDOW.BOT.RIGHT.COL,SCR(0))
  339.  
  340.        ROW=MENUROW                              'REVERSE ATTRIBUTE FOR MENU LINE BLOCK
  341.        COL=((MENU-1)*BLKSIZE%)+MENUCOL
  342.        BEGWORD=COL
  343.        REVWORD$=""
  344.  
  345. '
  346. BARMENU.LOOPWRD2:
  347.        WHILE LEN(REVWORD$)<BLKSIZE%
  348.                REVWORD$=REVWORD$+CHR$(SCREEN(MENUROW,BEGWORD,0))
  349.                BEGWORD=BEGWORD+1
  350.        WEND
  351.  
  352.        COL=COL
  353.  
  354.        ATTR=(MENUFG% * 16)+MENUBG%
  355.  
  356.        CALL FASTPRT(REVWORD$,ROW,COL,ATTR)
  357.  
  358. '
  359. 'Locate mouse cursor in the middle of currently high-lighted bar menu item
  360. '
  361.  
  362.        MOUSEROW=(ROW-1)*8
  363.        MOUSECOL=(BLKSIZE%\2)+COL-(MENUCOL-1)
  364.        MOUSECOL=(MOUSECOL-1)*8
  365.  
  366.        CALL MMSETLOC(MOUSECOL,MOUSEROW)
  367.  
  368. 'display pop-down menu for the currently
  369.  
  370.        FRAME=4
  371.        GROW=0
  372.        SHADOW=0
  373.        LABEL$=""
  374.  
  375.        CALL MAKEWIND(MENU.TOP.ROW,MENU.TOP.LEFT.COL,MENU.BOTTOM.ROW,MENU.BOTTOM.RIGHT.COL,FRAME,MENUFG%,MENUBG%,GROW,SHADOW,LABEL$)
  376.  
  377. 'Place Menu Items in Window
  378.        J.BASE=1
  379.  
  380.        FOR J=J.BASE TO MENU.MAXITEMS%
  381.          MENU.ITEM$=ITEMS$(((MENU-MENU.BASE)+ITEMS.MIN),(J-J.BASE)+ITEMS.MIN)
  382. '
  383. ' Make all the menus items the same length
  384. '
  385.          IF LEN(MENU.ITEM$)< LENGTH.MENU.ITEM THEN
  386.             MENU.ITEM$=MENU.ITEM$+STRING$(LENGTH.MENU.ITEM-LEN(MENU.ITEM$)," ")
  387.          ENDIF
  388.  
  389.          ROW=(MENU.TOP.ROW-1)+J
  390.          ATTR=(MENUBG% AND 7)*16+MENUFG%
  391.  
  392.          CALL FASTPRT(MENU.ITEM$,ROW,MENU.TOP.LEFT.COL,ATTR)
  393.        NEXT
  394.  
  395.        GOSUB BARMENU.MMCURSORON
  396.  
  397.        MSELECT=1                                'indicate that first pop-down menu item is current one
  398.        OLD=1
  399.        RETURN
  400.  
  401. '
  402. '
  403. ' Scan the
  404. '
  405. BARMENU.FIND.OPTION:
  406.         SAVE.MSELECT=MSELECT                    'save the currently selected menu item
  407.         TEMP.MSELECT=MSELECT
  408.         FIRST.CHAR$=KP$                         'this is the character we want to match on
  409.         COUNT=0                                 'keep count of number of items matched against
  410. BARMENU.FIND.LOOP:
  411.         TEMP.MSELECT=TEMP.MSELECT+1             'look at the next menu item
  412.  
  413.         IF TEMP.MSELECT>MENU.MAXITEMS% THEN     'did we go past the end of the menu
  414.             TEMP.MSELECT=1                      'yes, loop back to the first item
  415.         ENDIF
  416.  
  417.         COUNT=COUNT+1                           'we have matched against this many items so far
  418.         IF COUNT>MENU.MAXITEMS% THEN            'have we looked at all the menu items
  419.             RETURN                              'yes, and a match was not found
  420.         ENDIF
  421.  
  422.         MID$(TEMP.ITEM$,1)=ITEMS$((MENU-MENU.BASE)+ITEMS.MIN,(TEMP.MSELECT-MSELECT.BASE)+ITEMS.MIN)
  423.         LEN.TEMP.ITEM=LEN(ITEMS$((MENU-MENU.BASE)+ITEMS.MIN,(TEMP.MSELECT-MSELECT.BASE)+ITEMS.MIN))
  424.  
  425. '
  426. 'Check this menu item to see if its first character matches
  427. '
  428. 'Scan over any leading spaces in the menu item
  429. '
  430.        FOR I=1 TO LEN.TEMP.ITEM
  431.        IF MID$(TEMP.ITEM$,I,1)<>" " THEN
  432.           IF MID$(TEMP.ITEM$,I,1)=FIRST.CHAR$ THEN
  433.                MSELECT=TEMP.MSELECT              'a match was found!
  434.              RETURN
  435.           ELSE
  436.              GOTO BARMENU.FIND.LOOP
  437.           ENDIF
  438.        ENDIF
  439.  
  440.        NEXT
  441.  
  442.        GOTO BARMENU.FIND.LOOP                    'no match found, keep looking
  443.  
  444. '
  445. '
  446. BARMENU.GET.PRESS:
  447.        IF BUTTONS%=0 THEN                        'is a mouse installed?
  448.           GOTO BARMENU.GET.INKEY                 'NO, so only check keyboard
  449.        ENDIF
  450.  
  451.        CALL MMGETLOC(MOUSECOL,MOUSEROW)          'get the current mouse screen cursor location
  452.  
  453.        MOUSECOL=(MOUSECOL\8)+1                   'convert to 80x25 co-ordinates
  454.        MOUSEROW=(MOUSEROW\8)+1
  455.  
  456.        IF MOUSEROW<>MENUROW THEN                 'is mouse on the menu line
  457.           GOTO BARMENU.CHECK.IF.INBOX            'no, is it in a menu box
  458.        ENDIF
  459.  
  460.        CALL MMCLICK(LFT%,RGT%)                   'flush the mouse clicks
  461.  
  462.        TEMP.MENU=((MOUSECOL-MENUCOL)\BLKSIZE%)+1 'where is the mouse cursor on the menu line
  463.        IF TEMP.MENU>BLKNUM% THEN                 'is it past the end of the bar menu items
  464.            GOTO BARMENU.GET.INKEY                'yes
  465.        ENDIF
  466.  
  467.        MENU=TEMP.MENU                            '
  468.        IF MENU<>OLD.MENU THEN                    'are we on the same bar menu item as before
  469.            GOSUB BARMENU.NEWMENU                 'NO, make the drop-down menu for this new bar menu item
  470.            GOSUB BARMENU.TON                     'turn on position of Selection Marker
  471.        ENDIF
  472.  
  473.        GOTO BARMENU.GET.INKEY
  474.  
  475. BARMENU.CHECK.IF.INBOX:
  476. '
  477. 'Is mouse cursor outside the top or bottom of the drop-down menu window frame
  478. '
  479.        IF (MOUSEROW<MENU.TOP.ROW) OR (MOUSEROW>MENU.BOTTOM.ROW) THEN
  480.           GOTO BARMENU.NOT.IN.BOX
  481.        ENDIF
  482.  
  483. '
  484. 'Is the mouse cursor within  the left or right of drop-down menu window frame
  485. '
  486.        IF (MOUSECOL>=MENU.TOP.LEFT.COL) AND (MOUSECOL<=MENU.BOTTOM.RIGHT.COL) THEN
  487.           GOTO BARMENU.FOUNDIT
  488.        ENDIF
  489.  
  490. BARMENU.NOT.IN.BOX:
  491.        CALL MMCLICK(LFT%,RGT%)                  'see if user clicked outside the menu box
  492.        CLICK=LFT%+RGT%
  493.        IF CLICK THEN                            'any button clicked
  494.            KP$=CHR$(27)                         'Yes, simulate an ESC key press
  495.           RETURN
  496.        ENDIF
  497.  
  498.        GOSUB BARMENU.MMCURSORON
  499.        GOTO BARMENU.GET.INKEY
  500.  
  501. BARMENU.FOUNDIT:
  502.        MSELECT=(MOUSEROW-MENU.TOP.ROW)+1         'mouse cursor is on this menu item
  503.  
  504.        IF MSELECT<>OLD THEN                      'are we on the same as before
  505.             GOSUB BARMENU.PROCESS                'NO, turnoff Position of Selection Marker
  506.             GOSUB BARMENU.TON                    'turn on position of Selection Marker
  507.             GOSUB BARMENU.MMCURSOROFF
  508.             CALL MMCLICK(LFT%,RGT%)              'flush any mouse clicks
  509.          GOTO BARMENU.GET.INKEY
  510.        ENDIF
  511.  
  512.        GOSUB BARMENU.MMCURSOROFF
  513.  
  514.        CALL MMCLICK(LFT%,RGT%)                    'did user click on the same menu item
  515.        CLICK=LFT%+RGT%
  516.        IF CLICK THEN                              'any mouse buttons pressed?
  517.            KP$=CHR$(13)                           'YES, simulate an ENTER keypress
  518.           RETURN
  519.        ENDIF
  520.  
  521. BARMENU.GET.INKEY:
  522.        KP$=INKEY$                               'was a keyboard key pressed
  523.  
  524.        IF LEN(KP$)=0 THEN                       'NO, keep looking for key or mouse click
  525.           GOTO BARMENU.GET.PRESS
  526.        ENDIF
  527.  
  528.        RETURN
  529.  
  530. '
  531. BARMENU.MMCURSORON:
  532.        IF BUTTONS%=0 THEN                       'is a mouse installed
  533.            RETURN                               'No
  534.        ENDIF
  535.  
  536.        IF MOUSE.CURSOR=0 THEN                   'if the mouse is off
  537.           CALL MMCURSORON                       'turn it on
  538.           MOUSE.CURSOR=-1
  539.        ENDIF
  540.  
  541.        RETURN
  542.  
  543. BARMENU.MMCURSOROFF:
  544.        IF BUTTONS%=0 THEN                       'is a mouse installed
  545.            RETURN                               'no
  546.        ENDIF
  547.  
  548.        IF MOUSE.CURSOR=-1 THEN                  'is mouse cursor on
  549.           CALL MMCURSOROFF                      'turn it off
  550.           MOUSE.CURSOR=0
  551.        ENDIF
  552.  
  553.        RETURN
  554. '
  555. '
  556. BARMENU.SOUNDOFF:
  557.        SOUND 1000,1
  558.        SOUND 1500,2
  559.        SOUND 500,1
  560.        RETURN
  561.  
  562. '
  563. BARMENU.DONE:
  564.        MENUSLCT%=MENU                            'this is the bar menu and drop-down item slected
  565.        ITEMSLCT%=MSELECT
  566.  
  567. 'turn off menu bar
  568. BARMENU.DONE2:
  569.        GOSUB BARMENU.MMCURSOROFF
  570.  
  571.        CALL RESTWIND(WINDOW.TOP.ROW,WINDOW.TOP.LEFT.COL,WINDOW.BOT.ROW,WINDOW.BOT.RIGHT.COL,SCR(0))
  572.  
  573.        CALL RESTWIND(2,1,2,80,BAR.SCR(0))
  574.  
  575.        ATTR=PRESATTR
  576.        CALL FASTPRT(MENULINE$,MENUROW,MENUCOL,ATTR)
  577.  
  578.        ERASE SCR                                 'erase the arrays
  579.        ERASE BAR.SCR
  580.  
  581.        EXIT SUB
  582. END SUB
  583.