Request multiples

BoTTom |
             PGM        PARM(&FIN)
             DCL        VAR(&FIN) TYPE(*LGL)
             DCL        VAR(&CMD) TYPE(*CHAR) LEN(512)
             DCL        VAR(&POINT) TYPE(*LGL)
             DCL        VAR(&DTA) TYPE(*CHAR) LEN(10)
             DCL        VAR(&MSG) TYPE(*CHAR) LEN(320) VALUE(' ***** +
                          Saisir vos commandes puis F3 pour sortir +
                          et éxécuter *****                F4 = +
                          Invite à la saisie, "?" = Invite à +
                          l''éxécution                 (Utilisez +
                          SNDSTSMSG pour placer des messages +
                          d''état sur la ligne 24)  +
                          -------------------------------------------+
                          ----------------------------')
             DCL        VAR(&KEY) TYPE(*CHAR) LEN(4)
             DCL        VAR(&MSGKEY) TYPE(*CHAR) LEN(4)
             DCL        VAR(&RTN) TYPE(*CHAR) LEN(2)
             DCL        VAR(&WAIT) TYPE(*DEC) LEN(5 0) VALUE(0)
             DCL        VAR(&DQLEN) TYPE(*DEC) LEN(5 0) VALUE(512)
             DCL        VAR(&RSMTIME) TYPE(*CHAR) LEN(6)
             DCL        VAR(&CMDPWR) TYPE(*CHAR) LEN(128)
             DCL        VAR(&INITTIM) TYPE(*CHAR) LEN(6)
             DCL        VAR(&ENDTIM) TYPE(*CHAR) LEN(6)
             DCL        VAR(&DLYS) TYPE(*LGL)
             DCL        VAR(&DLYH) TYPE(*LGL)
             DCLF       FILE(RQSMD)
              MONMSG CPF1907 EXEC(GOTO FINEXEC)
 
             SNDPGMMSG  MSG(&MSG) TOPGMQ(*EXT) MSGTYPE(*RQS)
             RCVMSG     PGMQ(*EXT) MSGTYPE(*RQS) RMV(*NO) +
                          KEYVAR(&MSGKEY)
 
 
/* SAISIE D'UNE COMMANDE SUR L'éCRAN DES COMMANDES */
START:       CHGVAR &CMD ' '
             CHGVAR &POINT '0'
             RCVMSG     PGMQ(*EXT) MSGTYPE(*RQS) WAIT(*MAX) RMV(*NO) +
                          KEYVAR(&KEY) MSG(&CMD) RTNTYPE(&RTN)
        /*****************************/
        /* F3/F12 SUR INVITE         */
        /*****************************/
             MONMSG CPF6801 EXEC(DO)
                  SNDPGMMSG MSG(&CMD) TOPGMQ(*EXT) MSGTYPE(*RQS)
                  MONMSG CPF0000 EXEC(GOTO START)


|
                  RMVMSG     PGMQ(*SAME) MSGKEY(&KEY)
                  MONMSG CPF0000
                  RCVMSG     PGMQ(*EXT) MSGTYPE(*RQS) WAIT(0) RMV(*NO) +
                               MSG(&CMD)
                  GOTO START
             ENDDO
        /*****************************/
        /* F3/F12 SUR ECRAN          */
        /*****************************/
             MONMSG CPF2415 EXEC(GOTO FIN)
        /*****************************/
        /* F4 DEMANDE INVITE         */
        /*****************************/
             IF (%SST(&CMD 1 1) = '?') DO
                CHGVAR %SST(&CMD 1 1) ' '
                CHGVAR &POINT '1'
                ENDDO
             IF (&RTN *EQ '10') THEN(DO)
                 CHGVAR  &CMD  ('?'  !! &CMD)
             ENDDO
 
                 CALL QCMDCHK  (&CMD 512)
                  MONMSG CPF6801 EXEC(DO)
                            SNDPGMMSG MSG(&CMD) TOPGMQ(*EXT) MSGTYPE(*RQS)
                              MONMSG CPF0000 EXEC(GOTO START)
                            RMVMSG     PGMQ(*SAME) MSGKEY(&KEY)
                              MONMSG CPF0000
                            RCVMSG     PGMQ(*EXT) MSGTYPE(*RQS) WAIT(*MAX) +
                                       RMV(*NO)    MSG(&CMD)
                            GOTO START
                            ENDDO
                   MONMSG CPF0000 EXEC(GOTO START)
        /*****************************/
        /* ENTREE SUR ECRAN          */
        /*****************************/
     IF &POINT   CHGVAR  &CMD  ('?'  !! &CMD)
     SNDPGMMSG  MSG(&CMD) TOPGMQ(*EXT) MSGTYPE(*RQS)
     MONMSG CPF0000 EXEC(GOTO START)
     CALL       QSNDDTAQ PARM(RQSMDQ QTEMP &DQLEN &CMD)
     RMVMSG     PGMQ(*SAME) MSGKEY(&KEY)
     MONMSG CPF0000
     RCVMSG     PGMQ(*EXT) MSGTYPE(*RQS) WAIT(*MAX) RMV(*NO) +
                  MSG(&CMD)
 


|
     GOTO START
 
 FIN:
             RMVMSG     PGMQ(*EXT) MSGKEY(&MSGKEY)
              MONMSG CPF0000
 
ECRAN:       SNDRCVF    RCDFMT(FMTFIN)
 
             CHGVAR &FIN &IN03
             IF &IN03 RETURN
             IF &IN10 DO
                DSPJOBLOG
                GOTO ECRAN
             ENDDO
 
 BOUCLE:
             CHGVAR &CMD ' '
             CHGVAR     VAR(&DQLEN) VALUE(512)
             CALL       PGM(QRCVDTAQ) PARM(RQSMDQ QTEMP &DQLEN &CMD +
                          &WAIT)
             IF         COND((&CMD = ' ') *OR (&DQLEN = 0)) +
                          THEN(GOTO CMDLBL(EXEC))
             SNDPGMMSG MSG(&CMD) TOPGMQ(*EXT) MSGTYPE(*RQS)
             GOTO BOUCLE
EXEC:
 
              CHGVAR &CMDPWR ' '
             IF ((&PWRDWN *EQ 'O') & (&INVITE *EQ 'O')) DO
              CHGVAR &CMDPWR '? PWRDWNSYS'
             CALL       PGM(QCMDCHK) PARM(&CMDPWR 128)
              MONMSG CPF6801 EXEC(CHGVAR &PWRDWN 'N')
             ENDDO
 
             CHGDTAARA  DTAARA(QTEMP/RQSMDA (1 1)) VALUE(&PWRDWN)
             CHGDTAARA  DTAARA(QTEMP/RQSMDA (2 1)) VALUE(&SIGNOFF)
             CHGDTAARA  DTAARA(QTEMP/RQSMDA (3 7)) VALUE(&LOG)
             CHGDTAARA  DTAARA(QTEMP/RQSMDA (10 128)) VALUE(&CMDPWR)
             CHGDTAARA  DTAARA(QTEMP/RQSMDA (138 1)) VALUE(&ENDSYS)
 
             IF (&DIF *EQ 'O') DO
             RTVSYSVAL  SYSVAL(QTIME) RTNVAR(&INITTIM)
                IF (&DLY *NE 0) DO
                 CHGVAR &DLYS '1'
                 CALL       PGM(RQSTIM) PARM(&DLY &RSMTIM)


|
                 MONMSG     MSGID(CPF0000 RPG0000) EXEC(DO)
                  CHGVAR &IN61 '1'
                  GOTO FIN
                  ENDDO
                ENDDO
                ELSE CHGVAR &DLYH '1'
              CHGVAR &RSMTIME &RSMTIM
              SNDPGMMSG  MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('Attente +
                          d''éxécution différée jusqu''à ' *CAT +
                          &RSMTIME *CAT ' ...') TOPGMQ(*EXT) +
                          MSGTYPE(*STATUS)
 
 DLY:         DLYJOB     RSMTIME(&RSMTIME)
               MONMSG CPF1907 EXEC(DO)
               RTVSYSVAL  SYSVAL(QTIME) RTNVAR(&ENDTIM)
               IF (&RSMTIME *GT &ENDTIM) GOTO DLY
               IF ((&RSMTIME *LE &ENDTIM) & (&RSMTIME *LT &INITTIM)) +
                GOTO DLY
               ENDDO
               MONMSG CPF0000 EXEC(DO)
               IF &DLYH CHGVAR &IN62 '1'
               ELSE CHGVAR &IN61 '1'
               GOTO FIN
               ENDDO
             ENDDO
 
          IF (&ENDSYS = 'O') THEN(DO)
             SNDPGMMSG  MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('Arret +
                          du système en cours.') TOPGMQ(*EXT) +
                          MSGTYPE(*STATUS)
             CHGJOB     BRKMSG(*HOLD)
             CHGMSGQ    MSGQ(QSYSOPR) DLVRY(*BREAK) SEV(99)
                  MONMSG     MSGID(CPF0000)
             SNDBRKMSG  MSG('Arret du système dans 5 minutes !') +
                          TOMSGQ(*ALLWS)
             DLYJOB     DLY(300)
             ENDSBS     SBS(*ALL) OPTION(*IMMED)
 TESTSBS:
             ENDSBS     SBS(*ALL) OPTION(*IMMED)
                  MONMSG     MSGID(CPF1035) EXEC(DO)
                    RCVMSG     MSGTYPE(*EXCP) RMV(*YES)
                    DLYJOB     DLY(15)
                    GOTO TESTSBS
                  ENDDO


|
                  MONMSG     MSGID(CPF0000)
              ENDDO
 
             SNDPGMMSG  MSG('ENDRQS') TOPGMQ(*EXT) MSGTYPE(*RQS)
             SNDPGMMSG  MSGID(CPF9898) MSGF(QCPFMSG) +
                          MSGDTA('Exécution des demandes en cours.') +
                          TOPGMQ(*EXT) MSGTYPE(*STATUS)
             CALL QCMD
 FINEXEC:
             ENDPGM




©AF400