home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1995 September / Image.iso / visualob / install / samples / employee / menu.cl_ / menu.cl
Encoding:
Text File  |  1994-08-18  |  4.1 KB  |  171 lines

  1. // MENU.PRG
  2. // Employee Information menu routine module
  3. // November, 1993
  4.  
  5. #include "sys.ch"
  6.  
  7. FUNCTION Menu()
  8.    LOCAL MainMenu, DataEntry, ExitSystem
  9.  
  10.    MainMenu   := {}
  11.    DataEntry  := {}
  12.    ExitSystem := {}
  13.  
  14.    AAdd(DataEntry, {" Employee Entry        ", { || Entry110() }})
  15.    AAdd(DataEntry, {" Supervisor Code Entry ", { || Entry120() }})
  16.    AAdd(DataEntry, {" Department Code Entry ", { || Entry130() }})
  17.  
  18.    AAdd(ExitSystem, { " Exit ", NIL })
  19.  
  20.    AAdd(MainMenu, {" Data Entry " , DataEntry})
  21.    AAdd(MainMenu, {" Exit "     , ExitSystem})
  22.  
  23.    DoMenu(MainMenu, 3, 10)
  24.  
  25.    RETURN TRUE
  26.  
  27.  
  28. FUNCTION DoMenu(TheMenu, TheTop, TheLeft)
  29.    LOCAL OldColor, OldWindow, OldMsg, TheTotal, TheColumns, TheRight, ;
  30.            TheCount, TheChoice, OldWindow2, OldScreen
  31.  
  32.    OldColor  := Menu_Color()
  33.    OldWindow := Win_Open(0, 0, 23, 79, ' Employee Information ')
  34.    OldMsg    := Msg('Select a menu option')
  35.       
  36.    TheTotal   := Len(TheMenu)
  37.    TheColumns := Array(TheTotal)
  38.  
  39.    TheRight := TheLeft + 2
  40.    FOR TheCount := 1 TO TheTotal
  41.       TheColumns[TheCount] := TheRight
  42.       TheRight += Len(TheMenu[TheCount, 1]) + 2
  43.    NEXT
  44.  
  45.    TheChoice := 1
  46.    DO WHILE TheChoice != 0
  47.       OldWindow2 := Win_Open(TheTop - 1, TheLeft - 1, TheTop + 1, ;
  48.                              TheRight, ' Select ')
  49.  
  50.       FOR TheCount := 1 TO TheTotal
  51.          @ TheTop, TheColumns[TheCount] PROMPT TheMenu[TheCount, 1]
  52.       NEXT
  53.  
  54.       MENU TO TheChoice
  55.  
  56.       IF TheChoice = 0
  57.          EXIT
  58.  
  59.       ELSEIF ISUNDEFINED(TheMenu[TheChoice, 2])
  60.          EXIT
  61.  
  62.       ELSEIF ISBLOCK(TheMenu[TheChoice, 2])
  63.          OldScreen := SCREENSAVE(0, 0, 24, 79)
  64.          Eval(TheMenu[TheChoice, 2])
  65.          Win_Close(OldScreen)
  66.  
  67.       ELSEIF !DoPullDown(TheMenu[TheChoice, 2], ;
  68.                          TheTop + 1, TheColumns[TheChoice])
  69.          EXIT
  70.  
  71.       ENDIF
  72.  
  73.    ENDDO
  74.  
  75.    Win_Close(OldWindow2)
  76.    Win_Close(OldWindow)
  77.    Msg(OldMsg)
  78.    SetColor(OldColor)
  79.  
  80.    RETURN TRUE
  81.  
  82.  
  83. FUNCTION DoPullDown(TheMenu, TheTop, TheLeft)
  84.    LOCAL TheReturn, TheMax, TheTotal, TheBottom, TheRight, ThePullDown, ;
  85.            TheFlags, TheCount, OldWindow, TheChoice, OldScreen
  86.  
  87.    TheReturn := TRUE
  88.    TheMax    := AMax(TheMenu)
  89.    TheTotal  := Len(TheMenu)
  90.    TheBottom := TheTop + TheTotal + 1
  91.    TheRight  := TheLeft + TheMax + 1
  92.  
  93.    ThePullDown := Array(TheTotal)
  94.    TheFlags    := Array(TheTotal)
  95.  
  96.    FOR TheCount := 1 TO TheTotal
  97.       ThePullDown[TheCount] := TheMenu[TheCount, 1]
  98.       TheFlags[TheCount] := TRUE
  99.    NEXT
  100.  
  101.    OldWindow := Win_Open(TheTop, TheLeft, TheBottom, TheRight, "")
  102.  
  103.    DO WHILE TRUE
  104.       TheChoice := AChoice(TheTop + 1, TheLeft + 1, TheBottom - 1,      ;
  105.                            TheRight - 1, ThePullDown, TheFlags,         ;
  106.                            'KeyExcept', TheChoice)
  107.       IF TheChoice = 0
  108.          EXIT
  109.  
  110.       ELSEIF ISUNDEFINED(TheMenu[TheChoice, 2])
  111.          TheReturn := FALSE
  112.          EXIT
  113.  
  114.       ELSEIF ISBLOCK(TheMenu[TheChoice, 2])
  115.          OldScreen := SCREENSAVE(0, 0, 24, 79)
  116.          Eval(TheMenu[TheChoice, 2])
  117.          Win_Close(OldScreen)
  118.  
  119.       ENDIF
  120.    ENDDO
  121.  
  122.    Win_Close(OldWindow)
  123.  
  124.    RETURN TheReturn
  125.  
  126.  
  127. STATIC FUNCTION AMax(TheArray)
  128.    LOCAL TheMax, TheTotal, TheCount, TheLength
  129.  
  130.    TheMax   := 0
  131.    TheTotal := Len(TheArray) 
  132.  
  133.    FOR TheCount := 1 TO TheTotal
  134.       TheLength := Len(TheArray[TheCount, 1]) 
  135.       IF TheMax < TheLength
  136.          TheMax := TheLength
  137.       ENDIF
  138.    NEXT
  139.  
  140.    RETURN TheMax
  141.  
  142.  
  143. FUNCTION KeyExcept(TheMode, TheElement, TheRow)
  144. * NOTE: this function is not in achoice's scope if it is defined as static.
  145.  
  146.      LOCAL TheKey, TheReturn
  147.  
  148.    TheKey    := LastKey()
  149.    TheReturn := AC_CONT
  150.  
  151.    IF !TheMode = AC_EXCEPT
  152.    ELSEIF TheKey = K_ESC
  153.       TheReturn := AC_ABORT
  154.  
  155.    ELSEIF TheKey = K_RIGHT
  156.       KEYBOARD Chr(K_ESC) + Chr(K_RIGHT) + Chr(K_ENTER)
  157.  
  158.    ELSEIF TheKey = K_LEFT
  159.       KEYBOARD Chr(K_ESC) + Chr(K_LEFT) + Chr(K_ENTER)
  160.  
  161.    ELSEIF IsAlpha(Chr(TheKey))
  162.       TheReturn := AC_GOTO
  163.  
  164.    ELSEIF TheKey = K_ENTER
  165.       TheReturn := AC_SELECT
  166.  
  167.    ENDIF
  168.  
  169.    RETURN TheReturn
  170. 
  171.