CL

21. CLPでライブラリー一覧を検索するには?

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