CLP でライブラリー一覧を検索するには API: QUSLOBJ を使用することまではわかるかも知れないが実際、どのように使用するかとなると、少々処理を必要とする。
最も多い API の使用法はユーザー・スペースに APIからの情報を入れてそれを検索するというやり方である。
情報を検索する API はほとんどがユーザー・スペースの媒介を必要とする。
ここではそれらの方法についての例を示す。
これが一般的な情報検索APIの使用方法の基礎となる。
0001.00 PGM 0002.00 /*---------------------------------------------------------*/ 0003.00 /* RTVLIBL ライブラリーの検索 */ 0004.00 /*---------------------------------------------------------*/ 0005.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(78) 0006.00 DCL VAR(&OBJ) TYPE(*CHAR) LEN(10) 0007.00 DCL VAR(&OBJLIB) TYPE(*CHAR) LEN(10) 0008.00 DCL VAR(&RCVOBJ) TYPE(*CHAR) LEN(10) 0009.00 DCL VAR(&TEXT) TYPE(*CHAR) LEN(50) 0010.00 DCL VAR(&OBJATR) TYPE(*CHAR) LEN(10) 0011.00 DCL VAR(&OBJOBJLIB) TYPE(*CHAR) LEN(20) + 0012.00 VALUE('eボニ゙ゥhn/[bボ[メー') 0013.00 DCL VAR(&APIERR) TYPE(*CHAR) LEN(4) + 0014.00 VALUE(X'00000000') /* 2 進数 */ 0015.00 DCL VAR(&STRPOS) TYPE(*CHAR) LEN(4) + 0016.00 VALUE(X'0000007D') /* 2 進数開始位置 : + 0017.00 125 */ 0018.00 DCL VAR(&STROFF) TYPE(*CHAR) LEN(4) /* 2 進数 */ 0019.00 DCL VAR(&BIN4) TYPE(*CHAR) LEN(4) /* 2 進数 */ 0020.00 DCL VAR(&LENDTA) TYPE(*CHAR) LEN(4) + 0021.00 VALUE(X'00000010') /* 2 進数受取長さ : 16 */ 0022.00 DCL VAR(&DTALEN) TYPE(*CHAR) LEN(4) /* 2 進数 */ 0023.00 DCL VAR(&RCVVAR) TYPE(*CHAR) LEN(16) + 0024.00 VALUE(X'0000000000000000') 0025.00 DCL VAR(&OFFSET) TYPE(*CHAR) LEN(4) /* + 0026.00 2 進数 eホネョn */ 0027.00 DCL VAR(&DEC08) TYPE(*DEC) LEN(8 0) /* WORK */ 0028.00 DCL VAR(&N) TYPE(*DEC) LEN(8 0) VALUE(1) /* WORK */ 0029.00 DCL VAR(&KOMOKU) TYPE(*DEC) LEN(8 0) 0030.00 DCL VAR(&RCVDTA) TYPE(*CHAR) LEN(256) /* + 0031.00 受取データ */ 0032.00 DCL VAR(&NOENTR) TYPE(*CHAR) LEN(4) /* + 0033.00 2 進数項目数 */ 0034.00 DCL VAR(&LSTSIZ) TYPE(*CHAR) LEN(4) /* + 0035.00 2 進数リストサイズ */ 0036.00 DCL VAR(&ADDLEN) TYPE(*DEC) LEN(8 0) /* WORK */ 0037.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) 0038.00 0039.00 /*( マーナ゙ー、ヌs゚ーヌ の作成 )*/ 0040.00 CALL PGM(QUSCRTUS) PARM('USLOBJ + 0041.00 QTEMP ' 'PF ' 1000 ' ' + 0042.00 '*ALL ' 'QUSLOBJ 用ユーザー空間 ' + 0043.00 '*YES ' &APIERR) 0044.00 MONMSG CPF9870 0045.00 /*( QUSLOBJ : オブジェクト・リストAPI )*/ 0046.00 CHGVAR VAR(&OBJOBJLIB) VALUE('*ALL *ALL ') 0047.00 CALL PGM(QUSLOBJ) PARM('USLOBJ QTEMP ' + 0048.00 'OBJL0200' &OBJOBJLIB '*LIB ' &APIERR) 0049.00 /*( リストAPIで作成されたユーザー空間の検索 )*/ 0050.00 0051.00 SNDPGMMSG MSG('*** ライブラリー一覧表 ****') + 0052.00 MSGTYPE(*COMP) 0053.00 /*( メヌnm゙ーjネhニュ] の eホネョn 値を検索 )*/ 0054.00 CHGVAR VAR(%BIN(&STRPOS)) VALUE(125) 0055.00 CHGVAR VAR(%BIN(&DTALEN)) VALUE(16) 0056.00 CALL PGM(QUSRTVUS) PARM('USLOBJ QTEMP ' + 0057.00 &STRPOS &DTALEN &RCVVAR) 0058.00 /*( メヌnm゙ーjネhニュ] の項目数を検索 )*/ 0059.00 CHGVAR VAR(&OFFSET) VALUE(%SST(&RCVVAR 1 4)) 0060.00 CHGVAR VAR(&NOENTR) VALUE(%SST(&RCVVAR 9 4)) 0061.00 CHGVAR VAR(&LSTSIZ) VALUE(%SST(&RCVVAR 13 4)) 0062.00 CHGVAR VAR(&ADDLEN) VALUE(%BIN(&LSTSIZ)) 0063.00 CHGVAR VAR(&LENDTA) VALUE(&LSTSIZ) 0064.00 /*( RCVVAR によって OFFSET,LSTSIZ を受取った )*/ 0065.00 CALL PGM(QUSRTVUS) PARM('USLOBJ QTEMP ' + 0066.00 &STRPOS &DTALEN &BIN4) 0067.00 CHGVAR VAR(&KOMOKU) VALUE(%BIN(&BIN4)) 0068.00 IF COND(&KOMOKU *EQ 0) THEN(RETURN) 0069.00 CHGVAR VAR(&N) VALUE(1) 0070.00 CHGVAR VAR(&STRPOS) VALUE(&OFFSET) 0071.00 LOOP: 0072.00 CALL PGM(QUSRTVUS) PARM('USLOBJ QTEMP ' + 0073.00 &STRPOS &DTALEN &RCVDTA) 0074.00 /*( 処理の開始 )*/ 0075.00 CHGVAR VAR(&RCVOBJ) VALUE(%SST(&RCVDTA 1 10)) 0076.00 CHGVAR VAR(&TEXT) VALUE(%SST(&RCVDTA 42 50)) 0077.00 SNDPGMMSG MSG('LIB=' *CAT &RCVOBJ *TCAT ':' *CAT + 0078.00 &TEXT) MSGTYPE(*COMP) 0079.00 /*( 処理の終了 )*/ 0080.00 IF COND(&N < &KOMOKU) THEN(DO) 0081.00 CHGVAR VAR(&N) VALUE(&N + 1) 0082.00 CHGVAR VAR(&DEC08) VALUE(%BIN(&STRPOS)) 0083.00 CHGVAR VAR(&DEC08) VALUE(&DEC08 + &ADDLEN) 0084.00 CHGVAR VAR(%BIN(&STRPOS)) VALUE(&DEC08) 0085.00 GOTO LOOP 0086.00 ENDDO 0087.00 REDEND: 0088.00 SNDPGMMSG MSG('*** ライブラリー一覧表の終わり ****') + 0089.00 MSGTYPE(*COMP) 0090.00 RETURN 0091.00 0092.00 ERROR: RCVMSG RMV(*NO) MSG(&MSG) 0093.00 SNDMSG: SNDPGMMSG MSG(&MSG) TOMSGQ(*SYSOPR) 0094.00 ENDPGM