home *** CD-ROM | disk | FTP | other *** search
/ World of Ham Radio 1997 / WOHR97_AmSoft_(1997-02-01).iso / antenna / ant_21 / prog / menu.bas < prev    next >
BASIC Source File  |  1997-02-01  |  5KB  |  242 lines

  1. DECLARE SUB Vmenu (names$(), vpos%, message%, column%, Menu$)
  2. DECLARE SUB Prvmenu (names$(), column%, message%, vpos%)
  3.  
  4. ' vertical menu for regression package
  5. '
  6. CLS
  7. DEFINT A-Z
  8. REM $DYNAMIC
  9. DIM names$(6, 2)
  10. names$(1, 1) = "LINREG"
  11. names$(1, 2) = "Linear Regression"
  12. names$(2, 1) = "MLINREG"
  13. names$(2, 2) = "Multiple Linear Regression (no graph)"
  14. names$(3, 1) = "GEOMREG"
  15. names$(3, 2) = "Geometric Regression"
  16. names$(4, 1) = "EXPREG"
  17. names$(4, 2) = "Exponential Regression"
  18. names$(5, 1) = "NTHREG / POLYREG"
  19. names$(5, 2) = "Nth-order (or Polynomial) Regression"
  20. names$(6, 1) = "[exit]"
  21. names$(6, 2) = "Exit program"
  22. '
  23. ' The vpos variable will contain the operator's menu selection
  24. '
  25. vpos = 1
  26. '
  27. ' The message variable contains the line where the message will appear
  28. '
  29. message = 20
  30. '
  31. ' The column variable contains the value of the column where the menu
  32. ' lines will begin to display
  33. '
  34. column = 10
  35. '
  36. ' menu$ = "Main menu"
  37. CALL Vmenu(names$(), vpos, message, column, Menu$)
  38. '
  39. ' The following lines illustrate that the program works
  40. ' and show how to access the result
  41. '
  42. CLS
  43. '
  44. LOCATE 5, 10: PRINT "You chose "; names$(vpos, 1)
  45. FOR w1 = 1 TO 20000
  46.     FOR w2 = 1 TO 10
  47.     NEXT w2
  48. NEXT w1
  49. '
  50. IF names$(vpos, 1) = "LINREG" THEN
  51.     RUN "linreg"
  52. ELSEIF names$(vpos, 1) = "MLINREG" THEN
  53.     RUN "mlinreg"
  54. ELSEIF names$(vpos, 1) = "GEOMREG" THEN
  55.     RUN "geomreg"
  56. ELSEIF names$(vpos, 1) = "EXPREG" THEN
  57.     RUN "expreg"
  58. ELSEIF names$(vpos, 1) = "NTHREG / POLYREG" THEN
  59.     RUN "nthreg"
  60. ELSEIF names$(vpos, 1) = "[exit]" THEN
  61. RUN "bye"
  62. ELSE
  63.     LOCATE 20, 10: PRINT "Selection error!"
  64.     RUN "bye"
  65. END IF
  66. '
  67. '
  68. ' No longer needed
  69. '
  70. ERASE names$
  71. END
  72.  
  73. SUB Prvmenu (names$(), column, message, vpos) STATIC
  74. '
  75. ' This subprogram displays the menu
  76. '
  77. v = UBOUND(names$, 1)
  78. '
  79. ' Display the menu selections
  80. '
  81. FOR x = 1 TO v
  82.     LOCATE x + 2, column
  83.     IF x = vpos THEN
  84.         '
  85.         ' This is the current selection so display in
  86.         ' inverse video
  87.         '
  88.         COLOR 0, 7
  89.         PRINT names$(x, 1)
  90.         COLOR 7, 0
  91.     ELSE
  92.         PRINT names$(x, 1)
  93.     END IF
  94. NEXT
  95.  
  96. LOCATE message, column
  97. '
  98. ' Erase the old message
  99. '
  100. PRINT SPACE$(50)
  101. LOCATE message, column
  102. '
  103. ' Display the current message
  104. '
  105. PRINT names$(vpos, 2)
  106. '
  107. ' See if there's room to print the instructions
  108. '
  109. IF v + 4 < message - 2 THEN
  110.     '
  111.     ' Yes there is
  112.     '
  113.     LOCATE v + 4, column
  114.     PRINT "Use first letter or up- and down-arrows to select"
  115.     LOCATE v + 5, column
  116.     PRINT "Press return key to select"
  117. END IF
  118. END SUB
  119.  
  120. SUB Vmenu (names$(), vpos, message, column, Menu$) STATIC
  121. '
  122. ' This subprogram gets the operator's instructions
  123. '
  124. '
  125. ' Display the menu title
  126. '
  127. LOCATE 1, column
  128. PRINT Menu$
  129. '
  130. ' Display the menu
  131. '
  132. CALL Prvmenu(names$(), column, message, vpos)
  133. '
  134. ' Initialize the variable to receive INKEY$
  135. '
  136. r$ = ""
  137. '
  138. ' chr$(13) (carriage return) completes the menu selection
  139. '
  140. DO WHILE r$ <> CHR$(13)
  141.     '
  142.     ' Get rid of the previous keypress
  143.     '
  144.     r$ = ""
  145.     DO WHILE r$ = ""
  146.         r$ = INKEY$
  147.     LOOP
  148.     IF LEN(r$) = 2 THEN
  149.         '
  150.         ' A two-byte character such as an arrow
  151.         '
  152.         SELECT CASE ASC(RIGHT$(r$, 1))
  153.  
  154.             CASE 72: REM up-arrow
  155.                 '
  156.                 ' Move up one menu choice
  157.                 '
  158.                 vpos = vpos - 1
  159.                 IF vpos < 1 THEN
  160.                     '
  161.                     ' No menu choice there so wrap
  162.                     '
  163.                     vpos = UBOUND(names$, 1)
  164.                 END IF
  165.                 '
  166.                 ' Display the menu
  167.                 '
  168.                 CALL Prvmenu(names$(), column, message, vpos)
  169.  
  170.             CASE 80: REM down-arrow
  171.                 '
  172.                 ' Move down one menu choice
  173.                 '
  174.                 vpos = vpos + 1
  175.                 IF vpos > UBOUND(names$, 1) THEN
  176.                     '
  177.                     ' No menu choice there
  178.                     '
  179.                     vpos = 1
  180.                 END IF
  181.                 '
  182.                 ' Display the menu
  183.                 '
  184.                 CALL Prvmenu(names$(), column, message, vpos)
  185.  
  186.             CASE ELSE
  187.                 '
  188.                 ' No valid two-byte character
  189.                 '
  190.                 BEEP
  191.  
  192.         END SELECT
  193.  
  194.     '
  195.     ' It was a one-byte character
  196.     '
  197.     ELSE
  198.         IF (r$ >= "A" AND r$ <= "Z") OR (r$ >= "a" AND r$ <= "z") THEN
  199.         '
  200.         ' It was a letter
  201.         '
  202.             x = 1
  203.             '
  204.             ' See if it matches a menu choice
  205.             '
  206.             DO WHILE x <= UBOUND(names$, 1)
  207.                 IF r$ = LEFT$(names$(x, 1), 1) OR ASC(r$) = ASC(LEFT$(names$(x, 1), 1)) + 32 THEN
  208.                     '
  209.                     ' Found a match
  210.                     '
  211.                     vpos = x
  212.                     '
  213.                     ' Display the menu
  214.                     '
  215.                     CALL Prvmenu(names$(), column, message, vpos)
  216.                     '
  217.                     ' We're done
  218.                     '
  219.                     EXIT DO
  220.                 ELSE
  221.                     x = x + 1
  222.                 END IF
  223.             LOOP
  224.  
  225.             IF x > UBOUND(names$, 1) THEN
  226.                 '
  227.                 ' No matching letter
  228.                 '
  229.                 BEEP
  230.             END IF
  231.  
  232.         ELSEIF r$ <> CHR$(13) THEN
  233.             '
  234.             ' Keypress wasn't a letter or carriage return
  235.             '
  236.             BEEP
  237.         END IF
  238.     END IF
  239. LOOP
  240. END SUB
  241.  
  242.