CL

74. API : QUSLRCD : レコード様式のリスト

QUSLRCD はレコード名を検索するための API である。
QUSLRCD が使用される目的は主に QUSLFLD : フィールドのリスト API の実行の
ためであることが多い。
つまり QUSLFLD を使ってフィールドの一覧を検索しようとするときには
レコード名の指定も必要となるので QUSLRCD を使ってレコード名を検索してから
QUSLFLD によってフィールドの一覧を出力するのである。

レコード名を検索 ( QUSLRCD ) API

パラメータ

必須パラメータ・グループ:

1.修飾ユーザー・スペース名出力Char(20)
2.形式名入力Char(8)
3.修飾ファイル名入力Char(20)
4.一時変更処理入力Char(1)

任意選択パラメータ:

5.エラー・コード入出力Char(*)

修飾データ・ベース名

ファイル名 ( 10桁 ) + ライブラリー名 ( 10桁 ) で表現する。
ライブラリー名には *CURLIB, *LIBL の指定も可。

修飾ユーザー・スペース名

ユーザー・スペース名 + ライブラリー名 を指定する

形式名

RCDL0100 形式・・・・・・レコード様式名のみ
RCDL0200 形式・・・・・・レコード様式名および追加の情報
RCDL0300 形式・・・・・・レコード様式名および装置ファイル情報

修飾ファイル名

ファイル名 + ライブラリー名

一時変更処理

0 : 一時変更を行なわない を指定すること。

■ RCDL0100 形式

オフセットタイプフィールド
10進数16進数
00CHAR(10)レコード様式名

■ RCDL0200 形式

オフセットタイプフィールド
10進数16進数
00CHAR(10)レコード様式名
10ACHAR(13)レコード様式 ID
2317CHAR(1)予約済み
2418BINARY(4)レコード長
281CBINARY(4)フィールド数
3220CHAR(50)レコード・テキスト記述
8252CHAR(2)予約済み
8454BINARY(4)レコード・テキスト記述 CCSID

■ RCDL0300 形式

オフセットタイプフィールド
10進数16進数
00CHAR(10)レコード様式名
10ACHAR(2)最低位の応答標識
12CBINARY(4)バッファー・サイズ
1610CHAR(20)レコード様式タイプ
3624CHAR(1)開始行番号
3725CHAR(1)存在する分離標識域
【 サンプル・ソース:TESTUSL 】

これはデータ・ベース QTRFIL/SHOHIN のレコード名を検索するプログラムである。

0001.00              PGM                                                                 
0002.00 /*---------------------------------------------------------*/                    
0003.00 /*   TESTUSL   :   レコード様式のリスト                    */                    
0004.00 /*                                                         */                    
0005.00 /*     QUSLRCD のサンプル                                  */                    
0006.00 /*                                                         */                    
0007.00 /*---------------------------------------------------------*/                    
0008.00              DCL        VAR(&TYPE) TYPE(*CHAR) LEN(1)                            
0009.00              DCL        VAR(&MSG) TYPE(*CHAR) LEN(132)                           
0010.00              DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)                           
0011.00              DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)                           
0012.00              DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) +                      
0013.00                           VALUE('*LIBL     ')                                    
0014.00              DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(132)                        
0015.00              DCL        VAR(&APIERR) TYPE(*CHAR) LEN(116) +                      
0016.00                           VALUE(X'000074') /* 2 進数  */                         
0017.00              DCL        VAR(&STRPOS) TYPE(*CHAR) LEN(4) +                        
0018.00                           VALUE(X'0000007D') /* 2 進数開始位置  : +              
0019.00                           125 */                                                 
0020.00              DCL        VAR(&LENDTA) TYPE(*CHAR) LEN(4) +                        
0021.00                           VALUE(X'00000010') /* 2 進数受取長さ  : 16 */          
0022.00              DCL        VAR(&RCVVAR) TYPE(*CHAR) LEN(16) +                       
0023.00                           VALUE(X'0000000000000000')                             
0024.00              DCL        VAR(&OFFSET) TYPE(*CHAR) LEN(4) /* +                     
0025.00                           2 進数 オフセット */                                        
0026.00              DCL        VAR(&NOENTR) TYPE(*CHAR) LEN(4) /* +                     
0027.00                           2 進数項目数  */                                       
0028.00              DCL        VAR(&LSTSIZ) TYPE(*CHAR) LEN(4) /* +                     
0029.00                           2 進数リストサイズ  */                                 
0030.00              DCL        VAR(&DEC08) TYPE(*DEC) LEN(8 0) /* WORK */               
0031.00              DCL        VAR(&ADDLEN) TYPE(*DEC) LEN(8 0) /* WORK */              
0032.00              DCL        VAR(&NOENT) TYPE(*DEC) LEN(8 0) /* WORK */               
0033.00              DCL        VAR(&N) TYPE(*DEC) LEN(8 0) VALUE(1) /* WORK */          
0034.00              DCL        VAR(&RCVDTA) TYPE(*CHAR) LEN(256) /* +                   
0035.00                            受取データ  */                                        
0036.00              DCL        VAR(&NULL4) TYPE(*CHAR) LEN(4) +                         
0037.00                           VALUE(X'00000000')                                     
0038.00              MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))                  
0039.00                                                                                  
0040.00              RTVJOBA    TYPE(&TYPE)                                              
0041.00 /*( ユーザー・スペースの作成 )*/                                                 
0042.00              CALL       PGM(QUSCRTUS) PARM('USLSPC    QTEMP     ' +              
0043.00                           'PF        ' 1000 ' ' '*ALL      ' +                   
0044.00                           'QUSLOBJ 用ユーザー・スペース ' +                      
0045.00                           '*YES      ' &APIERR)                                  
0046.00              IF         COND(%SST(&APIERR 5 4) *NE &NULL4) THEN(DO)              
0047.00              GOTO       APIERR                                                   
0048.00              ENDDO                                                               
0049.00                                                                                  
0050.00 /*( QUSLRCD の実行 )*/                                                           
0051.00              CALL       PGM(QUSLRCD) PARM('USLSPC    QTEMP     ' +               
0052.00                           'RCDL0100' 'SHOHIN    QTRFIL    ' +                    
0053.00                           '0' &APIERR)                                           
0054.00              IF         COND(%SST(&APIERR 5 4) *NE &NULL4) THEN(DO)              
0055.00              GOTO       APIERR                                                   
0056.00              ENDDO                                                               
0057.00                                                                                  
0058.00   /*( リストデータ・セクションのオフセット値を検索 )*/                           
0059.00              CALL       PGM(QUSRTVUS) PARM('USLSPC    QTEMP     ' +              
0060.00                           &STRPOS &LENDTA &RCVVAR)                               
0061.00              CHGVAR     VAR(&OFFSET) VALUE(%SST(&RCVVAR 1 4))                    
0062.00              CHGVAR     VAR(&NOENTR) VALUE(%SST(&RCVVAR 9 4))                    
0063.00              CHGVAR     VAR(&LSTSIZ) VALUE(%SST(&RCVVAR 13 4))                   
0064.00                                                                                  
0065.00          /*( RCVVAR によって OFFSET,LSTSIZ を受取った )*/                        
0066.00              CHGVAR     VAR(&STRPOS) VALUE(&OFFSET)                              
0067.00              CHGVAR     VAR(&DEC08) VALUE(%BIN(&STRPOS))                         
0068.00              CHGVAR     VAR(&DEC08) VALUE(&DEC08 + 1)                            
0069.00              CHGVAR     VAR(%BIN(&STRPOS)) VALUE(&DEC08)                         
0070.00              CHGVAR     VAR(&LENDTA) VALUE(&LSTSIZ)                              
0071.00              CHGVAR     VAR(&ADDLEN) VALUE(%BIN(&LENDTA))                        
0072.00              CHGVAR     VAR(&NOENT) VALUE(%BIN(&NOENTR))                         
0073.00 NXTRTV:                                                                          
0074.00              CALL       PGM(QUSRTVUS) PARM('USLSPC    QTEMP     ' +              
0075.00                           &STRPOS &LENDTA &RCVDTA)                               
0076.00              /*( 処理の開始 )*/                                                  
0077.00              SNDPGMMSG  MSG('RECORD=' *CAT %SST(&RCVDTA 1 10)) +                 
0078.00                           MSGTYPE(*DIAG)                                         
0079.00                                                                                  
0080.00              /*( 処理の終了 )*/                                                  
0081.00              IF         COND(&N < &NOENT) THEN(DO)                            
0082.00              CHGVAR     VAR(&N) VALUE(&N + 1)                                    
0083.00              CHGVAR     VAR(&DEC08)  VALUE(%BIN(&STRPOS))                        
0084.00              CHGVAR     VAR(&DEC08) VALUE(&DEC08 + &ADDLEN)                      
0085.00              CHGVAR     VAR(%BIN(&STRPOS)) VALUE(&DEC08)                         
0086.00              GOTO       NXTRTV                                                   
0087.00              ENDDO                                                               
0088.00              RETURN                                                              
0089.00                                                                                  
0090.00  APIERR:                                                                         
0091.00              CHGVAR     VAR(&MSGID) VALUE(%SST(&APIERR 9 7))                     
0092.00              CHGVAR     VAR(&MSGF) VALUE('QCPFMSG   ')                           
0093.00              CHGVAR     VAR(&MSGDTA) VALUE(%SST(&APIERR 17 100))                 
0094.00              RTVMSG     MSGID(&MSGID) MSGF(QCPFMSG) MSGDTA(&MSGDTA) +            
0095.00                           MSG(&MSG)                                              
0096.00              GOTO       SNDMSG                                                   
0097.00  ERROR:      RCVMSG     MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) +                      
0098.00                           MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) +            
0099.00                           MSGFLIB(&MSGFLIB)                                      
0100.00  SNDMSG:                                                                         
0101.00              IF         COND(&TYPE *EQ '0') THEN(DO) /*  バッチ  */              
0102.00              IF         COND(&MSGID *EQ ' ') THEN(DO)                            
0103.00              SNDPGMMSG  MSG(&MSG) TOMSGQ(*SYSOPR) MSGTYPE(*COMP)                 
0104.00              ENDDO                                                               
0105.00              ELSE       CMD(DO)                                                  
0106.00              SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +                     
0107.00                           MSGDTA(&MSGDTA) TOMSGQ(*SYSOPR) +                      
0108.00                           MSGTYPE(*COMP)                                         
0109.00              ENDDO                                                               
0110.00              ENDDO      /*  バッチ  */                                           
0111.00              ELSE       CMD(DO) /*  対話型  */                                   
0112.00              IF         COND(&MSGID *EQ ' ') THEN(DO)                            
0113.00              SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) +              
0114.00                           TOMSGQ(*TOPGMQ) MSGTYPE(*ESCAPE)                       
0115.00              ENDDO                                                               
0116.00              ELSE       CMD(DO)                                                  
0117.00              SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +                     
0118.00                           MSGDTA(&MSGDTA) TOMSGQ(*TOPGMQ) +                      
0119.00                           MSGTYPE(*ESCAPE)                                       
0120.00              ENDDO                                                               
0121.00              ENDDO      /*  対話型  */                                           
0122.00              ENDPGM                                                              
【解説】

QUSLRCD を使用しているのは

0050.00 /*( QUSLRCD の実行 )*/                                                           
0051.00              CALL       PGM(QUSLRCD) PARM('USLSPC    QTEMP     ' +               
0052.00                           'RCDL0100' 'SHOHIN    QTRFIL    ' +                    
0053.00                           '0' &APIERR)                                           

でありレシーバー変数 rcdl0100 からソース・タイプを

0077.00              SNDPGMMSG  MSG('RECORD=' *CAT %SST(&RCVDTA 1 10)) +                 
0078.00                           MSGTYPE(*DIAG)                                         

によって取り出して表示している。