PGM /*---------------------------------------------------------*/ /* RTVLIBL ライブラリーの検索 */ /*---------------------------------------------------------*/ DCL VAR(&MSG) TYPE(*CHAR) LEN(78) DCL VAR(&OBJ) TYPE(*CHAR) LEN(10) DCL VAR(&OBJLIB) TYPE(*CHAR) LEN(10) DCL VAR(&RCVOBJ) TYPE(*CHAR) LEN(10) DCL VAR(&TEXT) TYPE(*CHAR) LEN(50) DCL VAR(&OBJATR) TYPE(*CHAR) LEN(10) DCL VAR(&OBJOBJLIB) TYPE(*CHAR) LEN(20) + VALUE('オブジェクト/ライブラリー') 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(&STROFF) TYPE(*CHAR) LEN(4) /* 2 進数 */ DCL VAR(&BIN4) TYPE(*CHAR) LEN(4) /* 2 進数 */ DCL VAR(&LENDTA) TYPE(*CHAR) LEN(4) + VALUE(X'00000010') /* 2 進数受取長さ : 16 */ DCL VAR(&DTALEN) TYPE(*CHAR) LEN(4) /* 2 進数 */ DCL VAR(&RCVVAR) TYPE(*CHAR) LEN(16) + VALUE(X'0000000000000000') DCL VAR(&OFFSET) TYPE(*CHAR) LEN(4) /* + 2 進数 オフセット */ DCL VAR(&DEC08) TYPE(*DEC) LEN(8 0) /* WORK */ DCL VAR(&N) TYPE(*DEC) LEN(8 0) VALUE(1) /* WORK */ DCL VAR(&KOMOKU) TYPE(*DEC) LEN(8 0) DCL VAR(&RCVDTA) TYPE(*CHAR) LEN(256) /* + 受取データ */ DCL VAR(&NOENTR) TYPE(*CHAR) LEN(4) /* + 2 進数項目数 */ DCL VAR(&LSTSIZ) TYPE(*CHAR) LEN(4) /* + 2 進数リストサイズ */ DCL VAR(&ADDLEN) TYPE(*DEC) LEN(8 0) /* WORK */ MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) /*( ユーザー・スペース の作成 )*/ CALL PGM(QUSCRTUS) PARM('USLOBJ + QTEMP ' 'PF ' 1000 ' ' + '*ALL ' 'QUSLOBJ 用ユーザー空間 ' + '*YES ' &APIERR) MONMSG CPF9870 /*( QUSLOBJ : オブジェクト・リストAPI )*/ CHGVAR VAR(&OBJOBJLIB) VALUE('*ALL *ALL ') CALL PGM(QUSLOBJ) PARM('USLOBJ QTEMP ' + 'OBJL0200' &OBJOBJLIB '*LIB ' &APIERR) /*( リストAPIで作成されたユーザー空間の検索 )*/ SNDPGMMSG MSG('*** ライブラリー一覧表 ****') + MSGTYPE(*COMP) /*( リストデータセクション の オフセット 値を検索 )*/ CHGVAR VAR(%BIN(&STRPOS)) VALUE(125) CHGVAR VAR(%BIN(&DTALEN)) VALUE(16) CALL PGM(QUSRTVUS) PARM('USLOBJ QTEMP ' + &STRPOS &DTALEN &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)) CHGVAR VAR(&ADDLEN) VALUE(%BIN(&LSTSIZ)) CHGVAR VAR(&LENDTA) VALUE(&LSTSIZ) /*( RCVVAR によって OFFSET,LSTSIZ を受取った )*/ CALL PGM(QUSRTVUS) PARM('USLOBJ QTEMP ' + &STRPOS &DTALEN &BIN4) CHGVAR VAR(&KOMOKU) VALUE(%BIN(&BIN4)) IF COND(&KOMOKU *EQ 0) THEN(RETURN) CHGVAR VAR(&N) VALUE(1) CHGVAR VAR(&STRPOS) VALUE(&OFFSET) LOOP: CALL PGM(QUSRTVUS) PARM('USLOBJ QTEMP ' + &STRPOS &DTALEN &RCVDTA) /*( 処理の開始 )*/ CHGVAR VAR(&RCVOBJ) VALUE(%SST(&RCVDTA 1 10)) CHGVAR VAR(&TEXT) VALUE(%SST(&RCVDTA 42 50)) SNDPGMMSG MSG('LIB=' *CAT &RCVOBJ *TCAT ':' *CAT + &TEXT) MSGTYPE(*COMP) /*( 処理の終了 )*/ IF COND(&N < &KOMOKU) 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 LOOP ENDDO REDEND: SNDPGMMSG MSG('*** ライブラリー一覧表の終わり ****') + MSGTYPE(*COMP) RETURN ERROR: RCVMSG RMV(*NO) MSG(&MSG) SNDMSG: SNDPGMMSG MSG(&MSG) TOMSGQ(*SYSOPR) ENDPGM