/* =================================================================== */ /* Nom du Programme : READJBSCDE */ /* Lecture des postes du scheduler. */ /* ====================================================================*/ PGM /* Déclaration des variables */ DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) DCL VAR(&MSGF) TYPE(*CHAR) LEN(10) DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(100) DCL VAR(&BYTE50) TYPE(*DEC) LEN(5) DCL VAR(&HANDLE) TYPE(*CHAR) LEN(16) DCL VAR(&ERR) TYPE(*CHAR) LEN(24) + VALUE(X'0000000000000000') DCL VAR(&ERRDLT) TYPE(*CHAR) LEN(24) DCL VAR(&USRSPC) TYPE(*CHAR) LEN(20) + VALUE('USRSPCSCHEQTEMP ') DCL VAR(&GHEADER) TYPE(*CHAR) LEN(140) DCL VAR(&OFFSETB) TYPE(*CHAR) LEN(4) DCL VAR(&STRPOSB) TYPE(*CHAR) LEN(4) DCL VAR(&HDROFFB) TYPE(*CHAR) LEN(4) DCL VAR(&HDRLENB) TYPE(*CHAR) LEN(4) DCL VAR(&HDRINFO) TYPE(*CHAR) LEN(26) DCL VAR(&LSTSTS) TYPE(*CHAR) LEN(1) DCL VAR(&INFOSTS) TYPE(*CHAR) LEN(1) DCL VAR(&JOBNAM) TYPE(*CHAR) LEN(10) DCL VAR(&USRNM) TYPE(*CHAR) LEN(10) DCL VAR(&ENTRY) TYPE(*CHAR) LEN(6) DCL VAR(&LOOP) TYPE(*DEC) LEN(8) DCL VAR(&ELENB) TYPE(*CHAR) LEN(4) DCL VAR(&LJOBE) TYPE(*CHAR) LEN(1156) /* ------------------------------------------------------------------- */ /* Routine erreur */ /* ------------------------------------------------------------------- */ MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERREUR)) /* ------------------------------------------------------------------- */ /* Supression du USERSPACE */ /* ------------------------------------------------------------------- */ CALL PGM(QUSDLTUS) PARM(&USRSPC &ERR) MONMSG MSGID(CPF0000) /* ------------------------------------------------------------------- */ /* Création du USERSPACE */ /* ------------------------------------------------------------------- */ CHGVAR VAR(&MSGDTA) VALUE(%SST(&ERR 17 8)) CALL PGM(QUSCRTUS) PARM(&USRSPC 'LSTJSCDE' + X'00000100' ' ' '*ALL ' 'User space + pour liste des jobs du + scheduler ') /* ------------------------------------------------------------------- */ /* Appel de l'API d'accès au infos du scheduler */ /* ------------------------------------------------------------------- */ READSCHE: CALL PGM(QWCLSCDE) PARM(&USRSPC 'SCDL0200' + '*ALL ' &HANDLE &ERR) /* ------------------------------------------------------------------- */ /* Test des erreurs d'exécution de l'API QWCLSCDE */ /* ------------------------------------------------------------------- */ CHGVAR VAR(&BYTE50) VALUE(%BIN(&ERR 5 4)) IF COND(&BYTE50 > 0) THEN(DO) CHGVAR VAR(&MSGID) VALUE(%SST(&ERR 9 7)) CHGVAR VAR(&MSGDTA) VALUE(%SST(&ERR 17 8)) SNDPGMMSG MSGID(&MSGID) MSGF(QSYS/QCPFMSG) + MSGDTA(&MSGDTA) TOPGMQ(*PRV) MSGTYPE(*ESCAPE) RETURN ENDDO /* ------------------------------------------------------------------- */ /* API pour récupérer l'entrée du USERSPACE */ /* ------------------------------------------------------------------- */ CALL PGM(QUSRTVUS) PARM(&USRSPC X'00000001' + X'0000008C' &GHEADER) /* ------------------------------------------------------------------- */ /* API pour récupérer l'entrée du USERSPACE */ /* ------------------------------------------------------------------- */ CHGVAR VAR(&LSTSTS) VALUE(%SST(&GHEADER 104 1)) IF COND(&LSTSTS = 'I') THEN(DO) SNDPGMMSG MSGID(CPF9897) MSGF(QSYS/QCPFMSG) + MSGDTA('Données de description + incomplêtes pour le + USERSPACE ') + TOPGMQ(*PRV) MSGTYPE(*ESCAPE) GOTO CMDLBL(FIN) ENDDO /* ------------------------------------------------------------------- */ /* API pour récupérer le header du USERSPACE */ /* ------------------------------------------------------------------- */ CHGVAR VAR(&LOOP) VALUE(%BIN(&GHEADER 133 4)) /* ------------------------------------------------------------------- */ /* Test si une entrée dans le USERSPACE */ /* ------------------------------------------------------------------- */ IF COND(&LOOP = 0) THEN(DO) SNDPGMMSG MSGID(CPF9897) MSGF(QSYS/QCPFMSG) + MSGDTA('Aucun poste dans le Scheduler') + TOPGMQ(*PRV) MSGTYPE(*ESCAPE) CALL PGM(QUSDLTUS) PARM(&USRSPC &ERR) MONMSG MSGID(CPF0000) ENDDO /* ------------------------------------------------------------------- */ /* Récupération des données pour positionnement lecture 1er poste */ /* ------------------------------------------------------------------- */ CHGVAR VAR(&ELENB) VALUE(%SST(&GHEADER 137 4)) CHGVAR VAR(&OFFSETB) VALUE(%SST(&GHEADER 125 4)) CHGVAR VAR(%BIN(&STRPOSB)) VALUE(%BIN(&OFFSETB) + 1) /* ------------------------------------------------------------------- */ /* Lectures des postes du scheduler */ /* ------------------------------------------------------------------- */ POSTELOOP: IF COND(&LOOP = 0) THEN(GOTO CMDLBL(POSTEEND)) CALL PGM(QUSRTVUS) PARM(&USRSPC &STRPOSB &ELENB + &LJOBE) CHGVAR VAR(&INFOSTS) VALUE(%SST(&LJOBE 1 1)) CHGVAR VAR(&JOBNAM) VALUE(%SST(&LJOBE 2 10)) CHGVAR VAR(&ENTRY) VALUE(%SST(&LJOBE 12 10)) CHGVAR VAR(&USRNM) VALUE(%SST(&LJOBE 547 10)) /* ------------------------------------------------------------------- */ /* Insérer votre code pour faire ce que vous voulez des infos */ /* récupérées du scheduler */ /* Ici, on fait simplement un SNDPGMMSG avec les qq infos */ /* ------------------------------------------------------------------- */ SNDPGMMSG MSG('Poste' *BCAT &INFOSTS *BCAT &JOBNAM + *BCAT &ENTRY *BCAT &USRNM) /* ------------------------------------------------------------------- */ IF COND(&INFOSTS *EQ ' ') THEN(DO) CHGVAR VAR(%BIN(&STRPOSB)) VALUE(%BIN(&STRPOSB) + + %BIN(&ELENB)) CHGVAR VAR(&LOOP) VALUE(&LOOP -1) GOTO CMDLBL(POSTELOOP) ENDDO RETURN /* ------------------------------------------------------------------- */ /* Plus de postes à lire dans le scheduler */ /* ------------------------------------------------------------------- */ POSTEEND: IF COND(&LSTSTS = 'C') THEN(DO) GOTO CMDLBL(FIN) ENDDO CHGVAR VAR(&HDROFFB) VALUE(%SST(&GHEADER 121 4)) CHGVAR VAR(&HDRLENB) VALUE(%SST(&GHEADER 117 4)) CALL PGM(QUSRTVUS) PARM(&USRSPC &HDROFFB &HDRLENB + &HDRINFO) CHGVAR VAR(&HANDLE) VALUE(%SST(&HDRINFO 11 16)) GOTO CMDLBL(READSCHE) /* ------------------------------------------------------------------- */ /* Gestion des erreurs */ /* ------------------------------------------------------------------- */ ERREUR: RCVMSG MSGTYPE(*LAST) MSGDTA(&MSGDTA) MSGID(&MSGID) + MSGF(&MSGF) SNDMSGFLIB(&MSGFLIB) MONMSG MSGID(CPF0000) SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) + MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE) MONMSG MSGID(CPF0000) /* ====================================================================*/ /* Supression du USERSPACE */ /* ====================================================================*/ FIN: CALL PGM(QUSDLTUS) PARM(&USRSPC &ERR) MONMSG MSGID(CPF0000) ENDPGM