
|
/* */
PGM PARM(&CMDL &CMDLG &SX &F4 &F9 &CHG)
DCL &CMDL *CHAR LEN(74)
DCL &CMDLG *CHAR LEN(512)
DCL &CMDSTACK *CHAR LEN(400)
DCL &SX *DEC LEN(5 0)
DCL &KEYVAR *CHAR 4
DCL &F4 *LGL
DCL &F9 *LGL
DCL &CHG *LGL
DCL &ID *CHAR 7
DCL &DTA *CHAR 256
DCL &MSGF *CHAR 10
DCL &MSGFL *CHAR 10
DCL &LMTCPB TYPE(*CHAR) LEN(10)
DCL &ANNUL *LGL
 
RTVUSRPRF LMTCPB(&LMTCPB)
IF (&LMTCPB = '*YES') DO
SNDPGMMSG MSG('Non autorisé à utiliser la ligne de +
commande')
RETURN
ENDDO
 
IF (&F9 *EQ '1') DO /* Retrieve for F9 */
/* On each successful cmd, SX is set to -3 */
RTVDTAARA DTAARA(QTEMP/CMDKEY) RTNVAR(&CMDSTACK)
CHGVAR &SX (&SX + 4) /* Bump to prev Msg key */
IF (&SX *GT 400) CHGVAR &SX 1 /* Loop back */
CHGVAR &KEYVAR %SST(&CMDSTACK &SX 4) /* Prv msg key */
/* If no cmds entered, just return to prompt */
IF COND(((&SX *EQ 1) *AND (&KEYVAR *EQ ' ')) +
*OR (&CMDSTACK = ' ')) THEN(DO)
CHGVAR &SX -3
CHGVAR &CMDL ' '
CHGVAR &CMDLG ' '
SNDPGMMSG MSG('Pas de commande precedente')
RETURN
ENDDO
 
/* If no more cmds, loop back */
IF (&KEYVAR *EQ ' ') DO /* Reset to first */
CHGVAR &KEYVAR &CMDSTACK /* First msg key */
CHGVAR &SX 1
|
ENDDO /* Reset to first */
 
/* Receive previous command from pgm msgq */
RCVMSG PGMQ(*EXT) MSGKEY(&KEYVAR) RMV(*NO) MSG(&CMDLG)
MONMSG CPF0000 EXEC(DO)
SNDPGMMSG MSG('Pas de commande precedente')
RETURN
ENDDO
CHGVAR &CMDL &CMDLG /* Prompted portion */
IF (%SST(&CMDLG 75 438) *NE ' ') DO/* Long cmd */
CHGVAR %SST(&CMDL 72 3) '...' /* Show ... */
ENDDO /* Long cmd */
RETURN
ENDDO /* Retrieve for F9 */
 
 
/* Demande d'éxécution (entree ou F4) */
 
CHGVAR &ANNUL '0'
IF (&CMDLG *NE ' ') DO
/* */
/* If long cmd occurred on F9 retrieve */
/* and execution requested without */
/* making any changes, use msgq cmd */
/*else */
IF (&CHG *EQ '1') DO /* any change */
IF (%SST(&CMDL 72 3) = '...') +
CHGVAR &CMDLG (%SST(&CMDL 1 71) *CAT +
%SST(&CMDLG 72 341))
ELSE CHGVAR &CMDLG &CMDL
ENDDO
ENDDO
ELSE CHGVAR &CMDLG &CMDL /* pas de F9 precedent */
/* */
/* Handle command prompting */
/* */
IF (&F4 *EQ '1') DO
CHGVAR &CMDLG ('?' *CAT &CMDLG)
/* If prompting by F4 or ? use QCMDCHK */
CALL QCMDCHK PARM(&CMDLG 512)
MONMSG MSGID(CPF6801) EXEC(DO)
CHGVAR &ANNUL '1'
CHGVAR &CMDLG +
%SST(&CMDLG 2 511)
|
ENDDO MONMSG MSGID(CPF0000) EXEC(GOTO RCVMSG) /* Any err */ ENDDO /* Use QCMDCHK */ /* */ /* Place command in *EXT and RCV to */ /* prevent execution */ /* */ SNDPGMMSG MSG(&CMDLG) TOPGMQ(*EXT) MSGTYPE(*RQS) + KEYVAR(&KEYVAR) RCVMSG PGMQ(*EXT) MSGKEY(&KEYVAR) RMV(*NO) /* */ /* Put cmd in stack for F9 usage */ /* */ RTVDTAARA DTAARA(QTEMP/CMDKEY) RTNVAR(&CMDSTACK) CHGVAR &CMDSTACK (&KEYVAR *CAT &CMDSTACK) CHGDTAARA DTAARA(QTEMP/CMDKEY) VALUE(&CMDSTACK) CHGVAR &SX -3 /* Inlz stack count */ /* */ /* Execute command using QCMDEXC */ /* */ IF (*NOT &ANNUL) DO CALL QCMDEXC PARM(&CMDLG 512) /* */ /* Handle command error */ /* */ MONMSG MSGID(CPF0000) EXEC(DO) /* Cmd error */ /* */ /* Command string may be longer due to */ /* prompting. Move back to cmd line and */ /* show '...' if greater than cmd line */ /* */ CHGVAR &CMDL &CMDLG IF (%SST(&CMDLG 75 438) *NE ' ') DO/* Long cmd */ CHGVAR %SST(&CMDL 72 3) '...' /* Show ... */ ENDDO /* Long cmd */ GOTO RCVMSG ENDDO /* Cmd error */ ENDDO /* *NOT &ANNUL */ /* */ /* Blank cmd line on good execution */ /* */ CHGVAR &CMDL ' ' /* Blank cmd line */ CHGVAR &CMDLG ' ' /* Blank cmd line */ /* */ |
/* Display messages */ /* */ RCVMSG: RCVMSG RMV(*NO) MSGDTA(&DTA) MSGID(&ID) MSGF(&MSGF) + MSGFLIB(&MSGFL) IF (&ID *NE ' ') DO SNDPGMMSG MSGID(&ID) MSGF(&MSGFL/&MSGF) MSGDTA(&DTA) GOTO RCVMSG ENDDO   ENDPGM |