home *** CD-ROM | disk | FTP | other *** search
- // MENU.PRG
- // Employee Information menu routine module
- // November, 1993
-
- #include "sys.ch"
-
- FUNCTION Menu()
- LOCAL MainMenu, DataEntry, ExitSystem
-
- MainMenu := {}
- DataEntry := {}
- ExitSystem := {}
-
- AAdd(DataEntry, {" Employee Entry ", { || Entry110() }})
- AAdd(DataEntry, {" Supervisor Code Entry ", { || Entry120() }})
- AAdd(DataEntry, {" Department Code Entry ", { || Entry130() }})
-
- AAdd(ExitSystem, { " Exit ", NIL })
-
- AAdd(MainMenu, {" Data Entry " , DataEntry})
- AAdd(MainMenu, {" Exit " , ExitSystem})
-
- DoMenu(MainMenu, 3, 10)
-
- RETURN TRUE
-
-
- FUNCTION DoMenu(TheMenu, TheTop, TheLeft)
- LOCAL OldColor, OldWindow, OldMsg, TheTotal, TheColumns, TheRight, ;
- TheCount, TheChoice, OldWindow2, OldScreen
-
- OldColor := Menu_Color()
- OldWindow := Win_Open(0, 0, 23, 79, ' Employee Information ')
- OldMsg := Msg('Select a menu option')
-
- TheTotal := Len(TheMenu)
- TheColumns := Array(TheTotal)
-
- TheRight := TheLeft + 2
- FOR TheCount := 1 TO TheTotal
- TheColumns[TheCount] := TheRight
- TheRight += Len(TheMenu[TheCount, 1]) + 2
- NEXT
-
- TheChoice := 1
- DO WHILE TheChoice != 0
- OldWindow2 := Win_Open(TheTop - 1, TheLeft - 1, TheTop + 1, ;
- TheRight, ' Select ')
-
- FOR TheCount := 1 TO TheTotal
- @ TheTop, TheColumns[TheCount] PROMPT TheMenu[TheCount, 1]
- NEXT
-
- MENU TO TheChoice
-
- IF TheChoice = 0
- EXIT
-
- ELSEIF ISUNDEFINED(TheMenu[TheChoice, 2])
- EXIT
-
- ELSEIF ISBLOCK(TheMenu[TheChoice, 2])
- OldScreen := SCREENSAVE(0, 0, 24, 79)
- Eval(TheMenu[TheChoice, 2])
- Win_Close(OldScreen)
-
- ELSEIF !DoPullDown(TheMenu[TheChoice, 2], ;
- TheTop + 1, TheColumns[TheChoice])
- EXIT
-
- ENDIF
-
- ENDDO
-
- Win_Close(OldWindow2)
- Win_Close(OldWindow)
- Msg(OldMsg)
- SetColor(OldColor)
-
- RETURN TRUE
-
-
- FUNCTION DoPullDown(TheMenu, TheTop, TheLeft)
- LOCAL TheReturn, TheMax, TheTotal, TheBottom, TheRight, ThePullDown, ;
- TheFlags, TheCount, OldWindow, TheChoice, OldScreen
-
- TheReturn := TRUE
- TheMax := AMax(TheMenu)
- TheTotal := Len(TheMenu)
- TheBottom := TheTop + TheTotal + 1
- TheRight := TheLeft + TheMax + 1
-
- ThePullDown := Array(TheTotal)
- TheFlags := Array(TheTotal)
-
- FOR TheCount := 1 TO TheTotal
- ThePullDown[TheCount] := TheMenu[TheCount, 1]
- TheFlags[TheCount] := TRUE
- NEXT
-
- OldWindow := Win_Open(TheTop, TheLeft, TheBottom, TheRight, "")
-
- DO WHILE TRUE
- TheChoice := AChoice(TheTop + 1, TheLeft + 1, TheBottom - 1, ;
- TheRight - 1, ThePullDown, TheFlags, ;
- 'KeyExcept', TheChoice)
- IF TheChoice = 0
- EXIT
-
- ELSEIF ISUNDEFINED(TheMenu[TheChoice, 2])
- TheReturn := FALSE
- EXIT
-
- ELSEIF ISBLOCK(TheMenu[TheChoice, 2])
- OldScreen := SCREENSAVE(0, 0, 24, 79)
- Eval(TheMenu[TheChoice, 2])
- Win_Close(OldScreen)
-
- ENDIF
- ENDDO
-
- Win_Close(OldWindow)
-
- RETURN TheReturn
-
-
- STATIC FUNCTION AMax(TheArray)
- LOCAL TheMax, TheTotal, TheCount, TheLength
-
- TheMax := 0
- TheTotal := Len(TheArray)
-
- FOR TheCount := 1 TO TheTotal
- TheLength := Len(TheArray[TheCount, 1])
- IF TheMax < TheLength
- TheMax := TheLength
- ENDIF
- NEXT
-
- RETURN TheMax
-
-
- FUNCTION KeyExcept(TheMode, TheElement, TheRow)
- * NOTE: this function is not in achoice's scope if it is defined as static.
-
- LOCAL TheKey, TheReturn
-
- TheKey := LastKey()
- TheReturn := AC_CONT
-
- IF !TheMode = AC_EXCEPT
- ELSEIF TheKey = K_ESC
- TheReturn := AC_ABORT
-
- ELSEIF TheKey = K_RIGHT
- KEYBOARD Chr(K_ESC) + Chr(K_RIGHT) + Chr(K_ENTER)
-
- ELSEIF TheKey = K_LEFT
- KEYBOARD Chr(K_ESC) + Chr(K_LEFT) + Chr(K_ENTER)
-
- ELSEIF IsAlpha(Chr(TheKey))
- TheReturn := AC_GOTO
-
- ELSEIF TheKey = K_ENTER
- TheReturn := AC_SELECT
-
- ENDIF
-
- RETURN TheReturn
-