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進数
0 0 CHAR(10) レコード様式名

RCDL0200 形式

オフセット タイプ フィールド
10進数 16進数
0 0 CHAR(10) レコード様式名
10 A CHAR(13) レコード様式 ID
23 17 CHAR(1) 予約済み
24 18 BINARY(4) レコード長
28 1C BINARY(4) フィールド数
32 20 CHAR(50) レコード・テキスト記述
82 52 CHAR(2) 予約済み
84 54 BINARY(4) レコード・テキスト記述 CCSID

RCDL0300 形式

オフセット タイプ フィールド
10進数 16進数
0 0 CHAR(10) レコード様式名
10 A CHAR(2) 最低位の応答標識
12 C BINARY(4) バッファー・サイズ
16 10 CHAR(20) レコード様式タイプ
36 24 CHAR(1) 開始行番号
37 25 CHAR(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)

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