home *** CD-ROM | disk | FTP | other *** search
/ Boldly Go Collection / version40.iso / TS / 17A / DROPDO.ZIP / DROPDOWN.SC < prev    next >
Text File  |  1991-07-25  |  21KB  |  771 lines

  1. ;****************************************************************************
  2. ; Dropdown Menu Procedures
  3. ;
  4. ; Author: Michael P. Lakeman
  5. ; Date  : July 25, 1991
  6. ;
  7. ; This script contains several procedures which you can modify to customize
  8. ; a dropdown menu for your application.  The areas for you to customize are
  9. ; contained with start and finish comment lines below.
  10.  
  11. ; The following is a brief description of each these procedures:
  12. ;
  13. ; Optiongo() - This top-level proc displays the menu on the screen and it
  14. ;              controls the execution of application procs or submenus.
  15. ;              Create a case statement for each possible menu choice in
  16. ;              your application.  When a proc is executed, all memory
  17. ;              variables are "cleaned up" and the Optiongo() proc is the
  18. ;              only proc left in the calling chain.
  19.  
  20. ; Dropmain() - This proc builds the top-level menu array and displays
  21. ;              the main menu.
  22.  
  23. ; Optn999() - Create one proc for each submenu in your application.
  24. ;             See below for examples and more information.
  25.  
  26. ; Rlsoptns() - This proc releases the array menu procs.  Modify it to
  27. ;              include all of your defined array menu procs.
  28.  
  29.  
  30. PROC Optiongo()
  31.  
  32.     WHILE (TRUE)
  33.      Dropmain()
  34.      WHILE (TRUE)
  35.       Dropkey()
  36.  
  37.       IF z=27 THEN
  38.          Cleanup()
  39.          QUIT
  40.       ENDIF
  41.  
  42.       IF lvl > 1 THEN
  43.          s = SUBSTR(option[sel],4,18)
  44.       ELSE
  45.          s = SUBSTR(mmenu[msel],3,10)
  46.       ENDIF
  47.  
  48. ;(start)*********************************************************************
  49. ;Update the following SWITCH/CASE statement to execute the appropriate logic
  50. ;based on the selection that the user makes.
  51.  
  52.       SWITCH
  53.  
  54.          CASE s = "AMain     " :
  55.             Cleanup()
  56.             BEEP                         ;<--Replace these statements with
  57.             MESSAGE "THIS IS AMAIN"      ;<--the name of the proc that you
  58.             SLEEP 2000                   ;<--wish to execute.
  59.             RETURN                       ;<--see below for example\/
  60.  
  61. ;        CASE s = "AOptionAMain      " :  <--
  62. ;           Cleanup()                     <--  EXAMPLE execution of proc
  63. ;           Custentry()                   <-- 
  64.  
  65.          CASE s = "BOptionBMain      " :
  66.             Rlsoptns()
  67.             ltv = y + 1
  68.             lth = x + 5
  69.             sel = 1
  70.             Dropdown("optn221")   ;<--To display a submenu, change this line
  71.             LOOP                  ;   to call Dropdown with the appropriate
  72.                                   ;   submenu array proc name.
  73.          CASE s = "Quit      " :
  74.             Cleanup()
  75.             RETURN
  76.  
  77.       ENDSWITCH
  78. ;(finish)********************************************************************
  79.      ENDWHILE
  80.     ENDWHILE
  81. ENDPROC
  82. WRITELIB libname.a Optiongo
  83. RELEASE PROCS   Optiongo
  84.  
  85. PROC Dropmain()
  86.  
  87.    PRIVATE dl
  88.  
  89.    CLEAR
  90.  
  91. ;(start)*********************************************************************
  92. ;This array defines the selections for the main menu.  You can have up
  93. ;to 7 choices on the main menu.  The array value is made up of the following:
  94. ;          Position       Definition
  95. ;          --------       ---------------------------------------
  96. ;             1           The unique letter used to access this option.
  97. ;             2           The position in the option name of the unique letter.
  98. ;            3-12         The option name to appear on the top line of the screen.
  99. ;            13-72        Option description to appear on line 24 of the screen.
  100.  
  101.    ARRAY mmenu[7]
  102.    mmenu[1] = "A1AMain     AMain Menu Selection                                        "
  103.    mmenu[2] = "B1BMain     BMain Menu Selection                                        "
  104.    mmenu[3] = "C1CMain     CMain Menu Selection                                        "
  105.    mmenu[4] = "D1DMain     DMain Menu Selection                                        "
  106.    mmenu[5] = "E1EMain     EMain Menu Selection                                        "
  107.    mmenu[6] = "F1FMain     FMain Menu Selection                                        "
  108.    mmenu[7] = "Q1Quit      Exit the System                                             "
  109.  
  110.  
  111.    IF MONITOR() = "Color" THEN
  112.       mnuclr = 31
  113.       mnuhigh = 95
  114.       mnultr = 30
  115.       dropclr = 63                ;You can modify this code to
  116.       drophigh = 95               ;change the menu colors.
  117.       dropltr = 62
  118.    ELSE
  119.       mnuclr = 7
  120.       mnuhigh = 112
  121.       mnultr = 15
  122.       dropclr = 7
  123.       drophigh = 112
  124.       dropltr = 15
  125.    ENDIF
  126.  
  127. ;(finish)********************************************************************
  128.  
  129.    CURSOR OFF
  130.    CANVAS OFF
  131.    PAINTCANVAS ATTRIBUTE mnuclr 0,0,0,79
  132.    STYLE ATTRIBUTE mnuclr
  133.  
  134.    msize = ARRAYSIZE(mmenu)
  135.  
  136.    lvl = 1
  137.    msel = 1
  138.    sel = 0
  139.    y = 0
  140.    x = 0
  141.  
  142.    FOR w FROM 1 TO msize
  143.      @y,x ?? SUBSTR(mmenu[w],3,10)
  144.      dl = NUMVAL(SUBSTR(mmenu[w],2,1))
  145.      PAINTCANVAS ATTRIBUTE mnultr 0,(x+dl-1),0,(x+dl-1)
  146.      x = x + 10
  147.    ENDFOR
  148.    x = 0
  149.  
  150.    Mpaintafter(y,x)
  151.  
  152.    IF MONITOR() = "Color" THEN
  153.       STYLE ATTRIBUTE 31
  154.    ELSE
  155.       STYLE REVERSE
  156.    ENDIF
  157.    @4,10 ?? "╔════════════════════════════════════════════════════════════╗"
  158.    @5,10 ?? "║              Put Your System Name Here                     ║"
  159.    @6,10 ?? "╚════════════════════════════════════════════════════════════╝"
  160.  
  161.    IF MONITOR() = "Color" THEN
  162.       STYLE ATTRIBUTE 113
  163.    ELSE
  164.       STYLE
  165.    ENDIF
  166.    @9,5  ?? "╔══════════════════════════════════════════════════════════════════════╗"
  167.    @10,5 ?? "║  NOTE: Never turn off your computer while using this system          ║"
  168.    @11,5 ?? "║        A power failure may damage data files.  Use the Fix Files     ║"
  169.    @12,5 ?? "║        selection on the Utilities menu to rebuild files.             ║"
  170.    @13,5 ?? "║                                                                      ║"
  171.    @14,5 ?? "║        Use arrow keys to move around menu.  Press ┘ to make         ║"
  172.    @15,5 ?? "║        selection.  Or, press highlighted letter of menu choice       ║"
  173.    @16,5 ?? "║                       to make selection.                             ║"
  174.    @17,5 ?? "╚══════════════════════════════════════════════════════════════════════╝"
  175.    STYLE
  176.  
  177.    CANVAS ON
  178.  
  179. ENDPROC
  180. WRITELIB libname.a Dropmain
  181. RELEASE PROCS   Dropmain
  182.  
  183.  
  184. ;(START)*********************************************************************
  185. ;Set up a proc as follows for each set of menu options.  The last three
  186. ;numbers in the proc name are significant.
  187. ;       First Number -  Main Menu Selection (1-7)
  188. ;       Second Number - Level (1-7)
  189. ;       Third Number  - Submenu Selection (1-n)
  190.  
  191. ;The array value is made up of the following:
  192. ;          Position       Definition
  193. ;          --------       ---------------------------------------
  194. ;             1           The unique letter used to access this option.
  195. ;             2-3         The position in the option name of the unique letter.
  196. ;            4-21         The option name to appear on the top line of the screen.
  197. ;            22-81        Option description to appear on line 24 of the screen.
  198.  
  199.  
  200. PROC optn110()
  201.  
  202.    ARRAY optn110[1]
  203.    optn110[1] = "A01AOptionAMain      AOptionAMain Menu Selection                                 "
  204.    osize = ARRAYSIZE(optn110)
  205.    ARRAY option[osize]
  206.    FOR w FROM 1 TO osize
  207.      option[w] = optn110[w]
  208.    ENDFOR
  209.  
  210. ENDPROC
  211. WRITELIB libname.a Optn110
  212. RELEASE PROCS   Optn110
  213.  
  214. PROC Optn210()
  215.  
  216.    ARRAY optn210[4]
  217.    optn210[1] = "A01AOptionBMain      AOptionBMain Menu Selection                                 "
  218.    optn210[2] = "B01BOptionBMain      BOptionBMain Menu Selection                                 "
  219.    optn210[3] = "C01COptionBMain      COptionBMain Menu Selection                                 "
  220.    optn210[4] = "D01DOptionBMain      DOptionBMain Menu Selection                                 "
  221.    osize = ARRAYSIZE(optn210)
  222.    ARRAY option[osize]
  223.    FOR w FROM 1 TO osize
  224.      option[w] = optn210[w]
  225.    ENDFOR
  226.  
  227. ENDPROC
  228. WRITELIB libname.a Optn210
  229. RELEASE PROCS   Optn210
  230.  
  231. PROC Optn310()
  232.  
  233.    ARRAY optn310[4]
  234.    optn310[1] = "A01AOptionCMain      AOptionCMain Menu Selection                                 "
  235.    optn310[2] = "B01BOptionCMain      BOptionCMain Menu Selection                                 "
  236.    optn310[3] = "C01COptionCMain      COptionCMain Menu Selection                                 "
  237.    optn310[4] = "D01DOptionCMain      DOptionCMain Menu Selection                                 "
  238.    osize = ARRAYSIZE(optn310)
  239.    ARRAY option[osize]
  240.    FOR w FROM 1 TO osize
  241.      option[w] = optn310[w]
  242.    ENDFOR
  243.  
  244. ENDPROC
  245. WRITELIB libname.a Optn310
  246. RELEASE PROCS   Optn310
  247.  
  248. PROC Optn410()
  249.  
  250.    ARRAY optn410[4]
  251.    optn410[1] = "A01AOptionDMain      AOptionDMain Menu Selection                                 "
  252.    optn410[2] = "B01BOptionDMain      BOptionDMain Menu Selection                                 "
  253.    optn410[3] = "C01COptionDMain      COptionDMain Menu Selection                                 "
  254.    optn410[4] = "D01DOptionDMain      DOptionDMain Menu Selection                                 "
  255.    osize = ARRAYSIZE(optn410)
  256.    ARRAY option[osize]
  257.    FOR w FROM 1 TO osize
  258.      option[w] = optn410[w]
  259.    ENDFOR
  260.  
  261. ENDPROC
  262. WRITELIB libname.a Optn410
  263. RELEASE PROCS   Optn410
  264.  
  265. PROC Optn510()
  266.  
  267.    ARRAY optn510[4]
  268.    optn510[1] = "A01AOptionEMain      AOptionEMain Menu Selection                                 "
  269.    optn510[2] = "B01BOptionEMain      BOptionEMain Menu Selection                                 "
  270.    optn510[3] = "C01COptionEMain      COptionEMain Menu Selection                                 "
  271.    optn510[4] = "D01DOptionEMain      DOptionEMain Menu Selection                                 "
  272.    osize = ARRAYSIZE(optn510)
  273.    ARRAY option[osize]
  274.    FOR w FROM 1 TO osize
  275.      option[w] = optn510[w]
  276.    ENDFOR
  277.  
  278. ENDPROC
  279. WRITELIB libname.a Optn510
  280. RELEASE PROCS   Optn510
  281.  
  282. PROC Optn610()
  283.  
  284.    ARRAY optn610[4]
  285.    optn610[1] = "A01AOptionFMain      AOptionFMain Menu Selection                                 "
  286.    optn610[2] = "B01BOptionFMain      BOptionFMain Menu Selection                                 "
  287.    optn610[3] = "C01COptionFMain      COptionFMain Menu Selection                                 "
  288.    optn610[4] = "D01DOptionFMain      DOptionFMain Menu Selection                                 "
  289.    osize = ARRAYSIZE(optn610)
  290.    ARRAY option[osize]
  291.    FOR w FROM 1 TO osize
  292.      option[w] = optn610[w]
  293.    ENDFOR
  294.  
  295. ENDPROC
  296. WRITELIB libname.a Optn610
  297. RELEASE PROCS   Optn610
  298.  
  299. PROC Optn710()
  300.  
  301.    ARRAY optn710[1]
  302.    optn710[1] = "Quit                 Quit                                                        "
  303.    osize = ARRAYSIZE(optn710)
  304.    ARRAY option[osize]
  305.    FOR w FROM 1 TO osize
  306.      option[w] = optn710[w]
  307.    ENDFOR
  308.  
  309. ENDPROC
  310. WRITELIB libname.a Optn710
  311. RELEASE PROCS   Optn710
  312.  
  313. PROC Optn221()
  314.  
  315.    ARRAY optn221[4]
  316.    optn221[1] = "A01AOptionGMain      AOptionGMain Menu Selection                                 "
  317.    optn221[2] = "B01BOptionGMain      BOptionGMain Menu Selection                                 "
  318.    optn221[3] = "C01COptionGMain      COptionGMain Menu Selection                                 "
  319.    optn221[4] = "D01DOptionGMain      DOptionGMain Menu Selection                                 "
  320.    osize = ARRAYSIZE(optn221)
  321.    ARRAY option[osize]
  322.    FOR w FROM 1 TO osize
  323.      option[w] = optn221[w]
  324.    ENDFOR
  325.  
  326. ENDPROC
  327. WRITELIB libname.a Optn221
  328. RELEASE PROCS   Optn221
  329.  
  330. PROC Rlsoptns()
  331.  
  332.      RELEASE VARS option,optn110,optn210,optn310,optn410,optn510,
  333.                   optn610,optn710,optn810,optn221
  334.  
  335. ENDPROC
  336. WRITELIB libname.a Rlsoptns
  337. RELEASE PROCS   Rlsoptns
  338.  
  339. ;(finish)********************************************************************
  340.  
  341. ;****************************************************************************
  342. ;*******************Do Not Change the Following Procedures*******************
  343. ;****************************************************************************
  344.  
  345. PROC Dropkey()
  346.  
  347.    WHILE (TRUE)
  348.  
  349.    z = getchar()
  350.  
  351.     SWITCH
  352.  
  353.       CASE lvl = 1 :
  354.  
  355.         SWITCH
  356.          ;Letter selection in top menu
  357.          CASE ((z > 64 AND z < 91) OR
  358.             (z > 96 AND z < 123)) OR
  359.             (z > 47 AND z < 58) :
  360.             MLtrsrch()
  361.             IF retval = False THEN
  362.                ltv = 1
  363.                lth = x
  364.                sel = 1
  365.                Dropdown("Optn"+STRVAL(msel)+STRVAL(lvl)+STRVAL(sel-1))
  366.                IF retval = False THEN
  367.                   RETURN
  368.                ENDIF
  369.                lvl = 2
  370.             ENDIF
  371.  
  372.          ;Right
  373.          CASE z = -77 :
  374.             Horzright("1")
  375.             IF retval = False THEN
  376.                LOOP
  377.             ENDIF
  378.  
  379.          ;Left
  380.          CASE z = -75 :
  381.             Horzleft("1")
  382.             IF retval = False THEN
  383.                LOOP
  384.             ENDIF
  385.  
  386.          ;Down from Top Menu OR Enter from Top Menu
  387.          CASE (z = -80 OR z = 13) :
  388.  
  389.             ltv = 1
  390.             lth = x
  391.             sel = 1
  392.             @1,0 CLEAR EOS
  393.             Dropdown("Optn"+STRVAL(msel)+STRVAL(lvl)+STRVAL(sel-1))
  394.             IF retval = False THEN
  395.                RETURN
  396.             ENDIF
  397.             lvl = 2
  398.  
  399.          ;Home
  400.          CASE z = -71 :
  401.             RELEASE VARS option,option0,option1,option2,option3,option4,
  402.                         option5,option6,option7
  403.             @1,0 CLEAR EOS
  404.             @y,x
  405.             Mpaintbefore(y,x)
  406.             msel = 1
  407.             x = 0
  408.             Mpaintafter(y,x)
  409.  
  410.          ;End
  411.          CASE z = -79 :
  412.             RELEASE VARS option,option0,option1,option2,option3,option4,
  413.                         option5,option6,option7
  414.             @1,0 CLEAR EOS
  415.             @y,x
  416.             Mpaintbefore(y,x)
  417.             msel = msize
  418.             x = (msize - 1) * 10
  419.             Mpaintafter(y,x)
  420.  
  421.          ;Esc to exit
  422.          CASE z = 27 :
  423.             BEEP
  424.  
  425.         ENDSWITCH
  426.  
  427.       CASE lvl > 1 :
  428.       SWITCH
  429.  
  430.          ;Letter selection in drop menu
  431.          CASE ((z > 64 AND z < 91) OR
  432.             (z > 96 AND z < 123)) OR
  433.             (z > 47 AND z < 58) :
  434.             DLtrsrch()
  435.             IF retval = False THEN
  436.                RETURN
  437.             ENDIF
  438.  
  439.          ;Right
  440.          CASE z = -77 :
  441.             Horzright("2")
  442.             IF retval = False THEN
  443.                LOOP
  444.             ENDIF
  445.  
  446.          ;Left
  447.          CASE z = -75 :
  448.             Horzleft("2")
  449.             IF retval = False THEN
  450.                LOOP
  451.             ENDIF
  452.  
  453.          ;Enter to select an option
  454.          CASE  z = 13 :
  455.             QUITLOOP
  456.  
  457.          ;Down in Drop Menu
  458.          CASE z = -80 :
  459.             Vertdown()
  460.             IF retval = False THEN
  461.                LOOP
  462.             ENDIF
  463.  
  464.          ;Esc from Drop Menu
  465.          CASE (z = 27) :
  466.             Rlsoptns()
  467.             @1,0 CLEAR EOS
  468.             y = 0
  469.             x = (msel - 1) * 10
  470.             lvl = 1
  471.             IF lvl = 1 THEN
  472.                sel = 0
  473.             ELSE
  474.                sel = 1
  475.             ENDIF
  476.             PAINTCANVAS ATTRIBUTE mnuclr 24,0,24,79
  477.             STYLE ATTRIBUTE mnuclr
  478.             @24,0 ?? SUBSTR(mmenu[msel],13,60)
  479.             @y,x
  480.  
  481.          ;Up in Drop Menu
  482.          CASE z = -72 :
  483.             Vertup()
  484.             IF retval = False THEN
  485.                LOOP
  486.             ENDIF
  487.  
  488.       ENDSWITCH
  489.     ENDSWITCH
  490.  
  491.    ENDWHILE
  492.  
  493. ENDPROC
  494. WRITELIB libname.a Dropkey
  495. RELEASE PROCS   Dropkey
  496.  
  497. PROC Horzright(a)
  498.      IF msel = msize THEN
  499.         BEEP
  500.         RETURN False
  501.      ENDIF
  502.      Rlsoptns()
  503.      @1,0 CLEAR EOS
  504.      lvl = 1
  505.      sel = 0
  506.      y = 0
  507.      x = (msel - 1) * 10
  508.      @y,x
  509.      Mpaintbefore(y,x)
  510.      msel = msel + 1
  511.      x = (msel - 1) * 10
  512.      Mpaintafter(y,x)
  513.      IF a = "2" THEN
  514.         sel = 1
  515.         ltv = 1
  516.         lth = x
  517.         Dropdown("Optn"+STRVAL(msel)+STRVAL(lvl)+STRVAL(sel-1))
  518.         IF retval = False THEN
  519.            RETURN
  520.         ENDIF
  521.         lvl = 2
  522.      ENDIF
  523.      RETURN True
  524.  
  525. ENDPROC
  526. WRITELIB libname.a Horzright
  527. RELEASE PROCS   Horzright
  528.  
  529. PROC Horzleft(a)
  530.  
  531.      IF msel = 1 THEN
  532.         BEEP
  533.         RETURN False
  534.      ENDIF
  535.      Rlsoptns()
  536.      @1,0 CLEAR EOS
  537.      lvl = 1
  538.      sel = 0
  539.      y = 0
  540.      x = (msel - 1) * 10
  541.      @y,x
  542.      Mpaintbefore(y,x)
  543.      msel = msel - 1
  544.      x = (msel - 1) * 10
  545.      Mpaintafter(y,x)
  546.      IF a = "2" THEN
  547.         sel = 1
  548.         ltv = 1
  549.         lth = x
  550.         Dropdown("Optn"+STRVAL(msel)+STRVAL(lvl)+STRVAL(sel-1))
  551.         IF retval = False THEN
  552.            RETURN
  553.         ENDIF
  554.         lvl = 2
  555.      ENDIF
  556.      RETURN True
  557.  
  558. ENDPROC
  559. WRITELIB libname.a Horzleft
  560. RELEASE PROCS   Horzleft
  561.  
  562. PROC Dropdown(optionname)
  563.  
  564.      EXECPROC optionname
  565.  
  566.      IF osize = 1 THEN
  567.         RETURN False
  568.      ENDIF
  569.  
  570.      Dropbox()
  571.      RETURN True
  572.  
  573. ENDPROC
  574. WRITELIB libname.a Dropdown
  575. RELEASE PROCS   Dropdown
  576.  
  577. PROC Dropbox()
  578.  
  579.      PRIVATE dl
  580.  
  581.      STYLE ATTRIBUTE dropclr
  582.      CANVAS OFF
  583.      @ltv,lth ?? "╔══════════════════╗"
  584.      FOR w FROM (ltv+1) TO (ltv+osize)
  585.        @w,lth ?? "║"+SUBSTR(option[w-ltv],4,18)+"║"
  586.        dl = NUMVAL(SUBSTR(option[w-ltv],2,2))
  587.        PAINTCANVAS ATTRIBUTE dropltr w,(lth+dl),w,(lth+dl)
  588.      ENDFOR
  589.      @(ltv+osize+1),lth ?? "╚══════════════════╝"
  590.      STYLE
  591.      FOR w FROM (ltv+1) TO (ltv+osize+2)
  592.        @w,(lth+20) ?? "█"
  593.      ENDFOR
  594.      @(ltv+osize+2),(lth+1) ?? "▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀"
  595.      CANVAS ON
  596.      @3,(lth+1)
  597.      y = ltv + 1
  598.      x = lth
  599.      Dpaintafter(y,x)
  600.  
  601. ENDPROC
  602. WRITELIB libname.a Dropbox
  603. RELEASE PROCS   Dropbox
  604.  
  605. PROC Vertdown()
  606.  
  607.    IF sel = (osize) THEN
  608.       BEEP
  609.       RETURN False
  610.    ENDIF
  611.    Dpaintbefore(y,x)
  612.    y = y + 1
  613.    sel = sel + 1
  614.    Dpaintafter(y,x)
  615.    RETURN True
  616.  
  617. ENDPROC
  618. WRITELIB libname.a Vertdown
  619. RELEASE PROCS   Vertdown
  620.  
  621. PROC Vertup()
  622.  
  623.    IF sel = 1 THEN
  624.       BEEP
  625.       RETURN False
  626.    ENDIF
  627.    Dpaintbefore(y,x)
  628.    y = y - 1
  629.    sel = sel - 1
  630.    Dpaintafter(y,x)
  631.    RETURN True
  632.  
  633. ENDPROC
  634. WRITELIB libname.a Vertup
  635. RELEASE PROCS   Vertup
  636.  
  637. PROC MLtrsrch()
  638.  
  639.    PRIVATE vsave
  640.  
  641.    z = CHR(z)
  642.    z = UPPER(z)
  643.    vctr = 0
  644.    FOR w FROM 1 TO msize
  645.       IF SUBSTR(mmenu[w],1,1) = z THEN
  646.          IF NOT ISASSIGNED(vsave) THEN
  647.             vsave = w
  648.          ENDIF
  649.          vctr = vctr + 1
  650.       ENDIF
  651.    ENDFOR
  652.    SWITCH
  653.       CASE vctr = 0 :
  654.          RETURN True
  655.  
  656.       CASE vctr = 1 :
  657.          @1,0 CLEAR EOS
  658.          Mpaintbefore(y,x)
  659.          x = (vsave - 1) * 10
  660.          msel = vsave
  661.          Mpaintafter(y,x)
  662.          Rlsoptns()
  663.          RETURN False
  664.  
  665.       OTHERWISE :
  666.          Mpaintbefore(y,x)
  667.          x = (vsave - 1) * 10
  668.          msel = vsave
  669.          Mpaintafter(y,x)
  670.          Rlsoptns()
  671.          RETURN True
  672.  
  673.    ENDSWITCH
  674.  
  675. ENDPROC
  676. WRITELIB libname.a MLtrsrch
  677. RELEASE PROCS   MLtrsrch
  678.  
  679. PROC DLtrsrch()
  680.  
  681.    PRIVATE vsave
  682.  
  683.    z = CHR(z)
  684.    z = UPPER(z)
  685.    vctr = 0
  686.   FOR w FROM 1 TO osize
  687.       IF SUBSTR(option[w],1,1) = z THEN
  688.          IF NOT ISASSIGNED(vsave) THEN
  689.             vsave = w
  690.          ENDIF
  691.          vctr = vctr + 1
  692.       ENDIF
  693.    ENDFOR
  694.    SWITCH
  695.       CASE vctr = 0 :
  696.         RETURN True
  697.  
  698.       CASE vctr = 1 :
  699.         Dpaintbefore(y,x)
  700.         y =  ltv + vsave
  701.         sel = vsave
  702.         Dpaintafter(y,x)
  703.         RETURN False
  704.  
  705.       OTHERWISE :
  706.          Dpaintbefore(y,x)
  707.          y = ltv + vsave
  708.          sel = vsave
  709.          Dpaintafter(y,x)
  710.          RETURN True
  711.  
  712.    ENDSWITCH
  713.  
  714. ENDPROC
  715. WRITELIB libname.a DLtrsrch
  716. RELEASE PROCS   DLtrsrch
  717.  
  718. PROC Dpaintbefore(dy,dx)
  719.  
  720.    PAINTCANVAS ATTRIBUTE dropclr dy,(dx+1),dy,(dx+18)
  721.    dl = NUMVAL(SUBSTR(option[sel],2,2))
  722.    PAINTCANVAS ATTRIBUTE dropltr dy,(dx+dl),dy,(dx+dl)
  723.  
  724. ENDPROC
  725. WRITELIB libname.a Dpaintbefore
  726. RELEASE PROCS   Dpaintbefore
  727.  
  728. PROC Mpaintbefore(dy,dx)
  729.  
  730.    PAINTCANVAS ATTRIBUTE mnuclr dy,dx,dy,dx+9
  731.    dl = NUMVAL(SUBSTR(mmenu[msel],2,1))
  732.    PAINTCANVAS ATTRIBUTE mnultr dy,(dx+dl-1),dy,(dx+dl-1)
  733.  
  734. ENDPROC
  735. WRITELIB libname.a Mpaintbefore
  736. RELEASE PROCS   Mpaintbefore
  737.  
  738. PROC Dpaintafter(dy,dx)
  739.  
  740.    PAINTCANVAS ATTRIBUTE drophigh dy,(dx+1),dy,(dx+18)
  741.    PAINTCANVAS ATTRIBUTE mnuclr 24,0,24,79
  742.    STYLE ATTRIBUTE mnuclr
  743.    @24,0 ?? SUBSTR(option[sel],22,60)
  744.  
  745. ENDPROC
  746. WRITELIB libname.a Dpaintafter
  747. RELEASE PROCS   Dpaintafter
  748.  
  749. PROC Mpaintafter(dy,dx)
  750.  
  751.      PAINTCANVAS ATTRIBUTE mnuhigh dy,dx,dy,dx+9
  752.      PAINTCANVAS ATTRIBUTE mnuclr 24,0,24,79
  753.      STYLE ATTRIBUTE mnuclr
  754.      @24,0 ?? SUBSTR(mmenu[msel],13,60)
  755.  
  756. ENDPROC
  757. WRITELIB libname.a Mpaintafter
  758. RELEASE PROCS   Mpaintafter
  759.  
  760. PROC Cleanup()
  761.  
  762.    Rlsoptns()
  763.  
  764.    RELEASE VARS mmenu,y,x,z,w,s,mnuclr,mnuhigh,mnultr,dropclr,drophigh,
  765.                 dropltr,osize,msize,vsave,vctr,dl,dy,dx,sel,msel,lvl,
  766.                 lvl,sel,msel,ltv,lth
  767.  
  768. ENDPROC
  769. WRITELIB libname.a Cleanup
  770. RELEASE PROCS   Cleanup
  771.