contents.gifindex.gifprev1.gifnext1.gif

8.13 Menu Handling-Sample Code

The following code fragment constructs a menu that consists of two submenus and displays it, first saving any existing menu.

78  ID-NEW                 VALUE 101.

78 ID-OPEN VALUE 102.
78 ID-SAVE VALUE 103.
78 ID-SAVE-AS VALUE 104.
78 ID-EXIT VALUE 105.
78 ID-SAVE-SET VALUE 201.
78 ID-PASSWORD VALUE 202.

77 OLD-MENU PIC S9(9) COMP-4.
77 MAIN-MENU PIC S9(9) COMP-4.
77 SUBMENU PIC S9(9) COMP-4.

BUILD-MENU.
* Create two empty menus and save their menu handles

CALL "W$MENU" USING WMENU-NEW.
MOVE RETURN-CODE TO MAIN-MENU.

CALL "W$MENU" USING WMENU-NEW.
MOVE RETURN-CODE TO SUBMENU.

IF MAIN-MENU = ZERO OR SUBMENU = ZERO
GO TO BUILD-MENU-EXIT.

* Build "File" submenu

CALL "W$MENU" USING WMENU-ADD, SUBMENU, 0, 0,
"&New", ID-NEW.
CALL "W$MENU" USING WMENU-ADD, SUBMENU, 0, 0,
"&Open...",ID-OPEN.
CALL "W$MENU" USING WMENU-ADD, SUBMENU, 0, W-DISABLED,
"&Save", ID-SAVE.
CALL "W$MENU" USING WMENU-ADD, SUBMENU, 0, W-DISABLED,
"Save &As...", ID-SAVE-AS.
CALL "W$MENU" USING WMENU-ADD, SUBMENU, 0, W-SEPARATOR.
CALL "W$MENU" USING WMENU-ADD, SUBMENU, 0, 0,
"E&xit", ID-EXIT.

* Attach File submenu to main menu

CALL "W$MENU" USING WMENU-ADD, MAIN-MENU, 0, 0,
"&File", 0, SUBMENU.

* When finished with the "File" submenu, make another
* submenu and populate it.

CALL "W$MENU" USING WMENU-NEW.
MOVE RETURN-CODE TO SUBMENU.
IF SUBMENU = ZERO
GO TO BUILD-MENU-EXIT.

CALL "W$MENU" USING WMENU-ADD, SUBMENU, 0, W-CHECKED,
"&Save Settings on Exit", ID-SAVE-SET.
CALL "W$MENU" USING WMENU-ADD, SUBMENU, 0, 0,
"&Password Protect", ID-PASSWORD.

* Attach "Options" submenu

CALL "W$MENU" USING WMENU-ADD, MAIN-MENU, 0, 0,
"&Options", 0, SUBMENU.

* Save current menu and display new one.

CALL "W$MENU" USING WMENU-GET-MENU.
MOVE RETURN-CODE TO OLD-MENU.

CALL "W$MENU" USING WMENU-SHOW, MAIN-MENU.

Further on in the program, you may want to remove the check mark on the "Save Settings on Exit" menu item. The following line of code would do that:

CALL "W$MENU" USING WMENU-CHECK, ID-SAVE-SET,

W-UNCHECKED.

When it came time to remove this menu and restore the old one, you could use the following code:

CALL "W$MENU" USING WMENU-SHOW, OLD-MENU.

CALL "W$MENU" USING WMENU-DESTROY, MAIN-MENU.