PGM PARM(&USER &JOBNBR) /*---------------------------------------------------------*/ /* PRTJOBNO : QPRTJOB のジョブ番号を検索 */ /*---------------------------------------------------------*/ DCL VAR(&MSG) TYPE(*CHAR) LEN(132) DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) DCL VAR(&TYPE) TYPE(*CHAR) LEN(1) DCL VAR(&USER) TYPE(*CHAR) LEN(10) DCL VAR(&JOBNBR) TYPE(*CHAR) LEN(6) DCL VAR(&JOBNAME) TYPE(*CHAR) LEN(26) DCL VAR(&APIERR) TYPE(*CHAR) LEN(4) + VALUE(X'00000000') /* 2 進数 */ DCL VAR(&STRPOS) TYPE(*CHAR) LEN(4) + VALUE(X'0000007D') /* 2 進数開始位置 : + 125 */ DCL VAR(&LENDTA) TYPE(*CHAR) LEN(4) + VALUE(X'00000010') /* 2 進数受取長さ : 16 */ DCL VAR(&RCVVAR) TYPE(*CHAR) LEN(16) + VALUE(X'0000000000000000') DCL VAR(&OFFSET) TYPE(*CHAR) LEN(4) /* + 2 進数 dハlWq */ DCL VAR(&NOENTR) TYPE(*CHAR) LEN(4) /* + 2 進数項目数 */ DCL VAR(&LSTSIZ) TYPE(*CHAR) LEN(4) /* + 2 進数リストサイズ */ DCL VAR(&DEC08) TYPE(*DEC) LEN(8 0) /* WORK */ DCL VAR(&ADDLEN) TYPE(*DEC) LEN(8 0) /* WORK */ DCL VAR(&NOENT) TYPE(*DEC) LEN(8 0) /* WORK */ DCL VAR(&N) TYPE(*DEC) LEN(8 0) VALUE(1) /* WORK */ DCL VAR(&OS400) TYPE(*CHAR) LEN(6) DCL VAR(&RCVDTA) TYPE(*CHAR) LEN(256) /* + 受取データ */ DCL VAR(&RCVLEN) TYPE(*CHAR) LEN(4) MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) RTVJOBA TYPE(&TYPE) RTVDTAARA DTAARA(QGPL/QSS1MRI (1 6)) RTNVAR(&OS400) IF COND(&OS400 *GE 'V5R2M0') THEN(DO) /* + V5R2M0 以上 */ CHGVAR VAR(%BIN(&RCVLEN)) VALUE(128) CALL PGM(QSPRILSP) PARM(&RCVDTA &RCVLEN + 'SPRL0100' &APIERR) CHGVAR VAR(&JOBNBR) VALUE(%SST(&RCVDTA 39 6)) RETURN ENDDO /* V5R2M0 以上 */ /*( ユーザー・スペースの作成 )*/ CRTUS: CALL PGM(QUSCRTUS) PARM('QUSLJOB + QTEMP ' 'PF ' 1000 ' ' + '*ALL ' 'QUSLJOB 用ユーザー空間 ' + '*YES ' &APIERR) MONMSG CPF9870 /*( QUSLJOB : ジョブ・リストの出力 )*/ CHGVAR VAR(&JOBNAME) VALUE('QPRTJOB ' *CAT + &USER *CAT '*ALL ') CALL PGM(QUSLJOB) PARM('QUSLJOB QTEMP ' + 'JOBL0100' &JOBNAME '*ALL ' &APIERR) /*( リストAPIで作成されたユーザー空間の検索 )*/ /*( リストデータセクションのオフセットを検索 )*/ CALL PGM(QUSRTVUS) PARM('QUSLJOB QTEMP ' + &STRPOS &LENDTA &RCVVAR) CHGVAR VAR(&OFFSET) VALUE(%SST(&RCVVAR 1 4)) CHGVAR VAR(&NOENTR) VALUE(%SST(&RCVVAR 9 4)) CHGVAR VAR(&LSTSIZ) VALUE(%SST(&RCVVAR 13 4)) /*( RCVVAR によって OFFSET,LSTSIZ を受取った )*/ CHGVAR VAR(&STRPOS) VALUE(&OFFSET) CHGVAR VAR(&DEC08) VALUE(%BIN(&STRPOS)) CHGVAR VAR(&DEC08) VALUE(&DEC08 + 1) CHGVAR VAR(%BIN(&STRPOS)) VALUE(&DEC08) CHGVAR VAR(&LENDTA) VALUE(&LSTSIZ) CHGVAR VAR(&ADDLEN) VALUE(%BIN(&LENDTA)) CHGVAR VAR(&NOENT) VALUE(%BIN(&NOENTR)) NXTRTV: CALL PGM(QUSRTVUS) PARM('QUSLJOB QTEMP ' + &STRPOS &LENDTA &RCVDTA) /*( 処理の開始 )*/ CHGVAR VAR(&JOBNBR) VALUE(%SST(&RCVDTA 21 6)) RETURN /*( 処理の終了 )*/ IF COND(&N < &NOENT) THEN(DO) CHGVAR VAR(&N) VALUE(&N + 1) CHGVAR VAR(&DEC08) VALUE(%BIN(&STRPOS)) CHGVAR VAR(&DEC08) VALUE(&DEC08 + &ADDLEN) CHGVAR VAR(%BIN(&STRPOS)) VALUE(&DEC08) GOTO NXTRTV ENDDO RETURN ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) MSGID(&MSGID) IF COND((&MSGID *EQ 'CPF333A') *AND (&JOBNBR + *EQ ' ')) THEN(GOTO CMDLBL(CRTUS)) SNDMSG: IF COND(&TYPE *EQ '0') THEN(DO) SNDPGMMSG MSG(&MSGID *CAT ':' *CAT &MSG) + TOMSGQ(*SYSOPR) MSGTYPE(*COMP) ENDDO ELSE CMD(DO) SNDPGMMSG MSG(&MSG) TOMSGQ(*TOPGMQ) MSGTYPE(*DIAG) ENDDO ENDPGM