Gere ligne de commande pour actsbsl

BoTTom |
/*                                                                   */
             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




©AF400