1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
| PGM (&RQSJOB &RQSPMT &RQSJOBD &RQSJOBQ &RQSOUTQ &RQSMSGQ &RQSUSER)
DCL &RQSJOB *CHAR 10
DCL &RQSPMT *CHAR 4
DCL &RQSJOBD *CHAR 20
DCL &RQSJOBQ *CHAR 20
DCL &RQSOUTQ *CHAR 20
DCL &RQSMSGQ *CHAR 20
DCL &RQSUSER *CHAR 10
/* ----------------------------------------------------------------- */
/* Soumission d'un travail configuré dans le scheduler */
/* ----------------------------------------------------------------- */
DCL &USNAME *CHAR 10 'SBMJOBSCDE'
DCL &USLIB *CHAR 10 'QTEMP '
DCL &USRSPC *CHAR 20
DCL &USFMT *CHAR 8 'SCDL0200'
DCL &USENTR *DEC 10
DCL &USOFFS *DEC 10
DCL &USCONT *CHAR 16
DCL &USSTRT *DEC 5
DCL &USDATA *CHAR X'1000'
DCL &USSIZE *CHAR 4 X'00001000'
DCL &ERROR *CHAR 16 X'00000010'
DCL &JOBTYP *CHAR 1
DCL &SCCMD *CHAR 512
DCL &SCCMDL *DEC 3
DCL &SCINFO *CHAR 1
DCL &SCJOB *CHAR 10
DCL &SCJOBQ *CHAR 10
DCL &SCJBQL *CHAR 10
DCL &SCJOBD *CHAR 10
DCL &SCJBDL *CHAR 10
DCL &SCMSGQ *CHAR 10
DCL &SCMSGL *CHAR 10
DCL &SCUSER *CHAR 10
DCL &CMD *CHAR 4096
DCL &ABEND *LGL
DCL &MSGID *CHAR 7
DCL &MSGDTA *CHAR 256
DCL &MSGF *CHAR 10
DCL &MSGFL *CHAR 10
DCL &MSGKEY *CHAR 4
DCL &RTNTYP *CHAR 2
DCL &PGM *CHAR 10
DCL &SENDER *CHAR 80
MONMSG CPF0000 *N GOTO ABEND
/* Récupère le nom du programme courant */
SNDPGMMSG ' ' TOPGMQ(*SAME) MSGTYPE(*INFO) KEYVAR(&MSGKEY)
RCVMSG PGMQ(*SAME) MSGTYPE(*INFO) SENDER(&SENDER) RMV(*YES)
CHGVAR &PGM %SST(&SENDER 56 10)
/* Création d'un user space */
CHGVAR &USRSPC (&USNAME !! &USLIB)
CALL QUSCRTUS (&USRSPC ' ' &USSIZE ' ' *ALL &ERROR)
MONMSG CPF0000
/* Récupère la définition du travail */
CALL QWCLSCDE (&USRSPC &USFMT &RQSJOB &USCONT &ERROR)
CALL QUSRTVUS (&USRSPC x'00000001' &USSIZE &USDATA &ERROR)
/* A-t-on récupéré une entrée ? */
CHGVAR &USENTR %BIN(&USDATA 133 4)
IF (&USENTR < 1) DO
CHGVAR &MSGDTA ('Travail planifié' !> &RQSJOB !> +
'non trouvé ...')
SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGTYPE(*DIAG) +
MSGDTA(&MSGDTA)
GOTO ESCAPE
ENDDO
/* Récupère l'entrée du user space */
CHGVAR &USOFFS %BIN(&USDATA 125 4)
CHGVAR &USSTRT (&USOFFS + 1)
CHGVAR &SCINFO %SST(&USDATA &USSTRT 1)
CHGVAR &USSTRT (&USOFFS + 2)
CHGVAR &SCJOB %SST(&USDATA &USSTRT 10)
CHGVAR &USSTRT (&USOFFS + 198)
CHGVAR &SCJOBQ %SST(&USDATA &USSTRT 10)
CHGVAR &USSTRT (&USOFFS + 208)
CHGVAR &SCJBQL %SST(&USDATA &USSTRT 10)
CHGVAR &USSTRT (&USOFFS + 527)
CHGVAR &SCJOBD %SST(&USDATA &USSTRT 10)
CHGVAR &USSTRT (&USOFFS + 537)
CHGVAR &SCJBDL %SST(&USDATA &USSTRT 10)
CHGVAR &USSTRT (&USOFFS + 547)
CHGVAR &SCUSER %SST(&USDATA &USSTRT 10)
CHGVAR &USSTRT (&USOFFS + 557)
CHGVAR &SCMSGQ %SST(&USDATA &USSTRT 10)
CHGVAR &USSTRT (&USOFFS + 567)
CHGVAR &SCMSGL %SST(&USDATA &USSTRT 10)
CHGVAR &USSTRT (&USOFFS + 641)
CHGVAR &SCCMDL %BIN(&USDATA &USSTRT 4)
CHGVAR &USSTRT (&USOFFS + 645)
CHGVAR &SCCMD %SST(&USDATA &USSTRT &SCCMDL)
/* Affichage du prompt ? */
RTVJOBA Type(&JOBTYP)
IF (&JOBTYP='1') DO
IF (&RQSPMT='*YES') DO
CHGVAR &CMD '?'
ENDDO
ENDDO
/* Création de la commande complète */
CHGVAR &CMD (&CMD !< 'SBMJOB' !> &RQSJOB)
IF (&RQSJOBD *EQ '*SCDJOB' *AND &SCJBDL *EQ ' ') DO
CHGVAR &CMD (&CMD !> 'JOBD(' !< &SCJOBD !< ')')
ENDDO
IF (&RQSJOBD *EQ '*SCDJOB' *AND &SCJBDL *NE ' ') DO
CHGVAR &CMD (&CMD !> 'JOBD(' !< &SCJBDL !< '/' !< &SCJOBD !< ')')
ENDDO
IF (&RQSJOBD *NE '*SCDJOB' *AND %SST(&RQSJOBD 11 10) *EQ ' ') DO
CHGVAR &CMD (&CMD !> 'JOBD(' !< %SST(&RQSJOBD 1 10) !< ')')
ENDDO
IF (&RQSJOBD *NE '*SCDJOB' *AND %SST(&RQSJOBD 11 10) *NE ' ') DO
CHGVAR &CMD (&CMD !> 'JOBD(' !< %SST(&RQSJOBD 11 10) !< '/' +
!< %SST(&RQSJOBD 1 10) !< ')')
ENDDO
IF (&RQSJOBQ *EQ '*SCDJOB' *AND &SCJBQL *EQ ' ') DO
CHGVAR &CMD (&CMD !> 'JOBQ(' !< &SCJOBQ !< ')')
ENDDO
IF (&RQSJOBQ *EQ '*SCDJOB' *AND &SCJBQL *NE ' ') DO
CHGVAR &CMD (&CMD !> 'JOBQ(' !< &SCJBQL !< '/' !< &SCJOBQ !< ')')
ENDDO
IF (&RQSJOBQ *NE '*SCDJOB' *AND %SST(&RQSJOBQ 11 10) *EQ ' ') DO
CHGVAR &CMD (&CMD !> 'JOBQ(' !< %SST(&RQSJOBQ 1 10) !< ')')
ENDDO
IF (&RQSJOBQ *NE '*SCDJOB' *AND %SST(&RQSJOBQ 11 10) *NE ' ') DO
CHGVAR &CMD (&CMD !> 'JOBQ(' !< %SST(&RQSJOBQ 11 10) !< '/' +
!< %SST(&RQSJOBQ 1 10) !< ')')
ENDDO
CHGVAR &CMD (&CMD !> 'CMD( ' !< %SST(&SCCMD 1 &SCCMDL) !< ')')
IF (&RQSUSER *EQ '*SCDJOB') DO
CHGVAR &CMD (&CMD !> 'USER(' !< &SCUSER !< ')')
ENDDO
IF (&RQSUSER *NE '*SCDJOB') DO
CHGVAR &CMD (&CMD !> 'USER(' !< &RQSUSER !< ')')
ENDDO
IF (&RQSMSGQ *EQ '*SCDJOB' *AND &SCMSGL *EQ ' ') DO
CHGVAR &CMD (&CMD !> 'MSGQ(' !< &SCMSGQ !< ')')
ENDDO
IF (&RQSMSGQ *EQ '*SCDJOB' *AND &SCMSGL *NE ' ') DO
CHGVAR &CMD (&CMD !> 'MSGQ(' !< &SCMSGL !< '/' !< &SCMSGQ !< ')')
ENDDO
IF (&RQSMSGQ *NE '*SCDJOB' *AND %SST(&RQSMSGQ 11 10) *EQ ' ') DO
CHGVAR &CMD (&CMD !> 'MSGQ(' !< %SST(&RQSMSGQ 1 10) !< ')')
ENDDO
IF (&RQSMSGQ *NE '*SCDJOB' *AND %SST(&RQSMSGQ 11 10) *NE ' ') DO
CHGVAR &CMD (&CMD !> 'MSGQ(' !< %SST(&RQSMSGQ 11 10) !< '/' +
!< %SST(&RQSMSGQ 1 10) !< ')')
ENDDO
IF (&RQSOUTQ *EQ '*SCDJOB') DO
CHGVAR &CMD (&CMD !> 'OUTQ(*JOBD)')
ENDDO
IF (&RQSOUTQ *NE '*SCDJOB' *AND %SST(&RQSOUTQ 11 10) *EQ ' ') DO
CHGVAR &CMD (&CMD !> 'OUTQ(' !< %SST(&RQSOUTQ 1 10) !< ')')
ENDDO
IF (&RQSOUTQ *NE '*SCDJOB' *AND %SST(&RQSOUTQ 11 10) *NE ' ') DO
CHGVAR &CMD (&CMD !> 'OUTQ(' !< %SST(&RQSOUTQ 11 10) !< '/' +
!< %SST(&RQSOUTQ 1 10) !< ')')
ENDDO
CHGVAR &CMD (&CMD !> 'SYSLIBL(*SYSVAL) CURLIB(*USRPRF) ')
CHGVAR &CMD (&CMD !> 'INLLIBL(*JOBD) PRTDEV(*JOBD) ')
CHGVAR &CMD (&CMD !> 'PRTTXT(*JOBD) RTGDTA(*JOBD) ')
/* Soumission du travail */
CALL QCMDEXC (&CMD 4096)
RCVMSG MSGTYPE(*LAST) MSGF(&MSGF) MSGFLIB(&MSGFL) +
MSGID(&MSGID) MSGDTA(&MSGDTA)
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFL/&MSGF) MSGTYPE(*COMP) +
MSGDTA(&MSGDTA)
RETURN
/* Routine de traitement des erreurs */
ABEND:
IF &ABEND RETURN
CHGVAR &ABEND '1'
FORWARD:
RCVMSG MSGTYPE(*ANY) MSGID(&MSGID) MSGF(&MSGF) MSGFLIB(&MSGFL) +
MSGDTA(&MSGDTA) RTNTYPE(&RTNTYP)
IF (&RTNTYP='02' *OR &RTNTYP='15' *OR &RTNTYP='17') DO
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFL/&MSGF) +
MSGDTA(&MSGDTA) MSGTYPE(*DIAG)
ENDDO
IF (&RTNTYP *NE ' ') GOTO FORWARD
ESCAPE:
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGTYPE(*ESCAPE) +
MSGDTA('Fin anormale du programme ...')
ENDPGM |