Using IBM i? Need to create Excel, CSV, HTML, JSON, PDF, SPOOL reports? Learn more about the fastest and least expensive tool for the job: SQL iQuery.
The DSPMNUOPT command writes the CL command behind a menu option to the joblog as a message. Used from Command Entry, the user can view the program or CL command stored behind any classic user-created Menu option. This command supports only the IBM style Menus that use DDS and a message file to store the menu. It does not work with UIM menus or 3rd-party menus.
[UPDATE: I've updated the command since it was originally posted. This version now accepts OPTION(*ALL) for the menu option. When OPTION(*ALL) is specified, all menu options are listed with their corresponding command/program-to-call. In addition the OPTION parameter now defaults to *ALL.]
DSPMNUOPT: CMD PROMPT('Display Menu Option') PARM KWD(MENU) TYPE(QMENU) MIN(1) PROMPT('Menu') QMENU: QUAL TYPE(*NAME) LEN(10) EXPR(*YES) QUAL TYPE(*NAME) LEN(10) SPCVAL((*CURLIB) + (*LIBL)) DFT(*LIBL) EXPR(*YES) PROMPT('Library') PARM KWD(OPTION) TYPE(*INT4) DFT(*ALL) RANGE(1 99) + SPCVAL((*ALL 0)) PROMPT('Menu option')
The CL routine that drives the DSPMNUOPT command follows:
DSPMNUOPT: PGM PARM(&MENU &OPT) DCL VAR(&MENU) TYPE(*CHAR) LEN(20) DCL VAR(&OPT) TYPE(*INT) LEN(4) DCL VAR(&START) TYPE(*INT) LEN(4) DCL VAR(&LIMIT) TYPE(*INT) LEN(4) DCL VAR(&CMDLEN) TYPE(*DEC) LEN(5 0) DCL VAR(&CMD) TYPE(*CHAR) LEN(132) DCL VAR(&OPTNBR) TYPE(*CHAR) LEN(4) DCL VAR(&MENUKEY) TYPE(*CHAR) LEN(7) DCL VAR(&MSG) TYPE(*CHAR) LEN(30) DCL VAR(&OPTION) TYPE(*CHAR) LEN(2) DCL VAR(&MENUOPT) TYPE(*CHAR) LEN(132) DCL VAR(&MSGKEY) TYPE(*CHAR) LEN(4) MONMSG MSGID(CPF0000) IF (&OPT *GT 0) THEN(DO) chgvar &start value(&opt) chgvar &limit value(&opt) ENDDO ELSE DO chgvar &start value(1) chgvar &limit value(99) ENDDO DOFOR VAR(&OPT) FROM(&START) TO(&LIMIT) CHGVAR VAR(&OPTNBR) VALUE(&OPT) CHGVAR VAR(&MENUKEY) VALUE('USR' *CAT &OPTNBR) SNDPGMMSG MSGID(&MENUKEY) MSGF(%SST(&MENU 11 + 10)/%SST(&MENU 01 10)) TOPGMQ(*PRV) + MSGTYPE(*INFO) KEYVAR(&MSGKEY) MONMSG MSGID(CPF2400 CPF2700) RCVMSG PGMQ(*PRV) MSGTYPE(*INFO) MSGKEY(&MSGKEY) + RMV(*YES) MSG(&MENUOPT) CHGVAR VAR(&MSG) VALUE(&MENUOPT) IF (&MSG *NE 'Text not available for message') THEN(DO) CHGVAR VAR(&OPTION) VALUE(&OPT) IF (%SST(&OPTION 1 1) = '0') CHGVAR VAR(%SST(&OPTION 1 1)) VALUE(' ') SNDPGMMSG MSG(&OPTION *TCAT '.' *BCAT &MENUOPT) + TOPGMQ(*PRV) MSGTYPE(*INFO) ENDDO ENDDO ENDPGM: ENDPGM