PGM /*---------------------------------------------------------*/ /* TESTUSLJOB : ジョブのリスト */ /*---------------------------------------------------------*/ DCL VAR(&MSG) TYPE(*CHAR) LEN(132) DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(132) DCL VAR(&MSGF) TYPE(*CHAR) LEN(10) DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) DCL VAR(&APIERR) TYPE(*CHAR) LEN(116) + VALUE(X'000074') /* 2 進数 */ DCL VAR(&NULL4) TYPE(*CHAR) LEN(4) + VALUE(X'00000000') DCL VAR(&STMNT) TYPE(*CHAR) LEN(7) DCL VAR(&JOBINFO) TYPE(*CHAR) LEN(26) + VALUE('*ALL QTMHHTTP *ALL ') DCL VAR(&CMPINFO) TYPE(*CHAR) LEN(26) 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 進数 オフセット */ DCL VAR(&ADDLEN) TYPE(*DEC) LEN(8 0) /* WORK */ DCL VAR(&NOENTR) TYPE(*CHAR) LEN(4) /* + 2 進数項目数 */ DCL VAR(&LSTSIZ) TYPE(*CHAR) LEN(4) /* + 2 進数リストサイズ */ DCL VAR(&NOENT) TYPE(*DEC) LEN(8 0) /* WORK */ DCL VAR(&N) TYPE(*DEC) LEN(8 0) VALUE(1) /* WORK */ DCL VAR(&RCVDTA) TYPE(*CHAR) LEN(256) /* + 受取データ */ DCL VAR(&INCD) TYPE(*CHAR) LEN(16) DCL VAR(&FLD8) TYPE(*CHAR) LEN(8) DCL VAR(&JOBVAR) TYPE(*CHAR) LEN(512) DCL VAR(&JOBLEN) TYPE(*CHAR) LEN(4) + VALUE(X'00000200') MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) /*(1) QUSCRTUS : ユーザー・スペースの作成 */ CALL PGM(QUSCRTUS) PARM('USLJOB + QTEMP ' 'PF ' 1000 ' ' + '*ALL ' 'USLJOB 用ユーザー空間 ' + '*YES ' &APIERR) MONMSG CPF9870 IF COND(%SST(&APIERR 5 4) *NE &NULL4) THEN(DO) CHGVAR VAR(&STMNT) VALUE('24.00') GOTO APIERR ENDDO /*(2) QUSLJOB : ユーザー QTMHHTTP のジョブ一覧を出力する */ CALL PGM(QUSLJOB) PARM('USLJOB QTEMP ' + 'JOBL0100' &JOBINFO '*ACTIVE ' &APIERR) IF COND(%SST(&APIERR 5 4) *NE &NULL4) THEN(DO) CHGVAR VAR(&STMNT) VALUE('34.00') GOTO APIERR ENDDO /*(3) QUSRTVUS : ユーザー・スペースのヘッダー情報を読み取る */ CHGVAR VAR(&STRPOS) VALUE(X'0000007D') CHGVAR VAR(&LENDTA) VALUE(X'00000010') CALL PGM(QUSRTVUS) PARM('USLJOB QTEMP ' + &STRPOS &LENDTA &RCVVAR) IF COND(%SST(&APIERR 5 4) *NE &NULL4) THEN(DO) CHGVAR VAR(&STMNT) VALUE('34.00') GOTO APIERR ENDDO 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(%BIN(&STRPOS)) VALUE(%BIN(&STRPOS) + 1) CHGVAR VAR(&LENDTA) VALUE(&LSTSIZ) CHGVAR VAR(&ADDLEN) VALUE(%BIN(&LENDTA)) CHGVAR VAR(&NOENT) VALUE(%BIN(&NOENTR)) IF COND(&NOENT *EQ 0) THEN(DO) CHGVAR VAR(&MSGDTA) VALUE(' ジョブ ' *CAT &JOBINFO + *TCAT ' がありません。 ') SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSGDTA) + MSGTYPE(*ESCAPE) RETURN ENDDO /*(4) QUSRTVUS で LOOP してジョブ名を読み取る */ CHGVAR VAR(&FLD8) VALUE(&NOENT) ZERO_SUP: IF COND(%SST(&FLD8 1 1) *EQ '0') THEN(DO) CHGVAR VAR(&FLD8) VALUE(%SST(&FLD8 2 7)) GOTO ZERO_SUP ENDDO SNDPGMMSG MSG(&FLD8 *TCAT + ' 個のジョブが見つかりました ') + MSGTYPE(*DIAG) CHGVAR VAR(&N) VALUE(1) NXTJOB: CALL PGM(QUSRTVUS) PARM('USLJOB QTEMP ' + &STRPOS &LENDTA &RCVDTA) /*( 処理の開始 )*/ CHGVAR VAR(&CMPINFO) VALUE(%SST(&RCVDTA 1 26)) SNDPGMMSG MSG('JOB=' *CAT &CMPINFO) MSGTYPE(*DIAG) CALL PGM(QUSRJOBI) PARM(&JOBVAR &JOBLEN + 'JOBI0200' &CMPINFO &INCD &APIERR) IF COND(%SST(&APIERR 5 4) *NE &NULL4) THEN(DO) CHGVAR VAR(&STMNT) VALUE('466.00') GOTO APIERR ENDDO /*( 処理の終了 )*/ BYPAS_JOB: IF COND(&N < &NOENT) THEN(DO) CHGVAR VAR(&N) VALUE(&N + 1) CHGVAR VAR(%BIN(&STRPOS)) VALUE(%BIN(&STRPOS) + + &ADDLEN) GOTO NXTJOB ENDDO JOBEND: RETURN APIERR: CHGVAR VAR(&MSGID) VALUE(%SST(&APIERR 9 7)) CHGVAR VAR(&MSGDTA) VALUE(%SST(&APIERR 17 100)) SNDPGMMSG MSGID(&MSGID) MSGF(QCPFMSG) MSGDTA(&MSGDTA) + TOMSGQ(*SYSOPR) MSGTYPE(*COMP) SNDPGMMSG MSG(' ステートメント ' *CAT &STMNT *CAT + ' でエラーがありました。 ') + TOMSGQ(*TOPGMQ) MSGTYPE(*DIAG) GOTO SNDMSG ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) + MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) + MSGFLIB(&MSGFLIB) SNDMSG: IF COND(&MSGID *EQ ' ') THEN(DO) SNDPGMMSG MSG(&MSG) TOMSGQ(*TOPGMQ) MSGTYPE(*DIAG) ENDDO ELSE CMD(DO) SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) + MSGDTA(&MSGDTA) TOMSGQ(*TOPGMQ) + MSGTYPE(*ESCAPE) ENDDO ENDPGM