RPG

196. 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 H DATEDIT(*YMD/)                                                                 
0002.00 F**********  レコード様式のリスト  ************************************          
0003.00 F*   QUSLRCD  のサンプル                                                         
0004.00 F**********************************************************************          
0005.00  /COPY QSYSINC/QRPGLESRC,QUS                                                     
0006.00  /COPY QSYSINC/QRPGLESRC,QUSLRCD                                                 
0007.00 D FILFILLIB       S             20A   INZ('SHOHIN    QTRFIL    ')                
0008.00                                                                                  
0009.00 D APIERR          DS                                                             
0010.00 D  GETBYT                 1      4B 0 INZ(160)                                   
0011.00 D  AVLBYT                 5      8B 0 INZ(0)                                     
0012.00 D  MSGID                  9     15                                               
0013.00 D  MSGDTA                17    160                                               
0014.00                                                                                  
0015.00 D USRSPC          DS                                                             
0016.00 D  USNAME                       10A   INZ('USLSPC    ')                          
0017.00 D  USLIB                        10A   INZ('QTEMP     ')                          
0018.00                                                                                  
0019.00 D MSGFFLIB        DS                                                             
0020.00 D  MSGF                         10A   INZ('QCPFMSG   ')                          
0021.00 D  MSGFLIB                      10A   INZ('QSYS      ')                          
0022.00                                                                                  
0023.00 D HEDSTR          DS           256                                               
0024.00 D  OFFSET                 1      4B 0                                            
0025.00 D  NOENTR                 9     12B 0                                            
0026.00 D  LSTSIZ                13     16B 0                                            
0027.00                                                                                  
0028.00 D RCD0100         DS                  QUALIFIED                                  
0029.00 D  RCD                          10A                                              
0030.00                                                                                  
0031.00 D SPCBIN          DS                                                             
0032.00 D  INZSIZ                       10I 0 INZ(1000)                                  
0033.00 D  MSGDTALEN                    10I 0 INZ(100)                                   
0034.00 D  PGMSTKCNT                    10I 0 INZ(1)                                     
0035.00 D  STRPOS                       10I 0                                            
0036.00 D  LENDTA                       10I 0                                            
0037.00 D  N                             4S 0                                            
0038.00 D  DATE                          6A                                              
0039.00 D  TIME                          6A                                              
0040.00                                                                                  
0041.00 C*(1) QUSCRTUS: ユーザー・スペースの作成                                         
0042.00 C*----------------------------------------------------+                          
0043.00 C                   CALL      'QUSCRTUS'                                         
0044.00 C                   PARM                    USRSPC                               
0045.00 C                   PARM      'PF        '  EXATTR           10                  
0046.00 C                   PARM                    INZSIZ                               
0047.00 C                   PARM      ' '           INZCHR            1                  
0048.00 C                   PARM      '*ALL      '  AUT              10                  
0049.00 C                   PARM                    TEXT             50                  
0050.00 C                   PARM      '*YES      '  REPLACE          10                  
0051.00 C                   PARM                    APIERR                               
0052.00 C*----------------------------------------------------+                          
0053.00 C     AVLBYT        CABNE     *ZEROS        SNDERR                               
0054.00                                                                                  
0055.00 C*(2) QUSLRCD:  レコード様式のリスト                                             
0056.00 C*----------------------------------------------------+                          
0057.00 C                   CALL      QUSLRCD                                            
0058.00 C                   PARM                    USRSPC                               
0059.00 C                   PARM      'RCDL0100'    FOTMAT            8                  
0060.00 C                   PARM                    FILFILLIB                            
0061.00 C                   PARM      '0'           CHG               1                  
0062.00 C                   PARM                    APIERR                               
0063.00 C*----------------------------------------------------+                          
0064.00 C     AVLBYT        CABNE     *ZEROS        SNDERR                               
0065.00                                                                                  
0066.00 C*(3) QUSRTVUS : ヘッダー構造の読み取り                                          
0067.00 C*----------------------------------------------------+                          
0068.00 C                   CALL      'QUSRTVUS'                                         
0069.00 C                   PARM                    USRSPC                               
0070.00 C                   PARM      125           STRPOS                               
0071.00 C                   PARM      16            LENDTA                               
0072.00 C                   PARM                    HEDSTR                               
0073.00 C                   PARM                    APIERR                               
0074.00 C*----------------------------------------------------+                          
0075.00 C     AVLBYT        CABNE     *ZEROS        SNDERR                               
0076.00                                                                                  
0077.00 C*(4) QUSRTVUS : リスト・セクションの読み取り                                    
0078.00 C*    HEADER によって OFFSET,LSTSIZ を受取った                                   
0079.00 C                   Z-ADD     OFFSET        STRPOS                               
0080.00 C                   ADD       1             STRPOS                               
0081.00 C                   Z-ADD     LSTSIZ        LENDTA                               
0082.00 C*     リスト・サイズの分だけ LOOP して検索                                      
0083.00 C     1             DO        NOENTR        N                              N=1-NOENTR 
0084.00 C*----------------------------------------------------+                          
0085.00 C                   CALL      'QUSRTVUS'                           99            
0086.00 C                   PARM                    USRSPC                               
0087.00 C                   PARM                    STRPOS                               
0088.00 C                   PARM                    LENDTA                               
0089.00 C                   PARM                    RCD0100                              
0090.00 C*----------------------------------------------------+                          
0091.00 C*      ------( 処理の開始 - ここから )------                                    
0092.00 C     'RECORD='     CAT(P)    RCD0100.RCD:0 DSP40            40                  
0093.00 C     DSP40         DSPLY                                                        
0094.00 C*      ------( 処理の終了 - ここまで )------                                    
0095.00 C                   ADD       LENDTA        STRPOS                               
0096.00 C                   END                                                    N=1-NOENTR  
0097.00                                                                                  
0098.00 C                   MOVE      *ON           *INLR                                
0099.00 C     '** END **'   DSPLY                   ANS               1                  
0100.00 C                   RETURN                                                       
0101.00 C     SNDERR        TAG                                                          
0102.00 C     GETBYT        SUB       15            MSGDTALEN                            
0103.00 C*----------------------------------------------------+                          
0104.00 C                   CALL(E)   'QMHSNDPM'                                         
0105.00 C                   PARM                    MSGID                                
0106.00 C                   PARM                    MSGFFLIB                             
0107.00 C                   PARM                    MSGDTA                               
0108.00 C                   PARM                    MSGDTALEN                            
0109.00 C                   PARM      '*ESCAPE   '  MSGTYPE          10                  
0110.00 C                   PARM      '*         '  PGMQUE           10                  
0111.00 C                   PARM                    PGMSTKCNT                            
0112.00 C                   PARM      '    '        MSGKEY            4                  
0113.00 C                   PARM                    APIERR                               
0114.00 C*----------------------------------------------------+                          
0115.00 C                   MOVE      *ON           *INLR                                
0116.00 C                   RETURN                                                       

【解説】

QUSLRCD を使用しているのは

0055.00 C*(2) QUSLRCD:  レコード様式のリスト                                             
0056.00 C*----------------------------------------------------+                          
0057.00 C                   CALL      QUSLRCD                                            
0058.00 C                   PARM                    USRSPC                               
0059.00 C                   PARM      'RCDL0100'    FOTMAT            8                  
0060.00 C                   PARM                    FILFILLIB                            
0061.00 C                   PARM      '0'           CHG               1                  
0062.00 C                   PARM                    APIERR                               
0063.00 C*----------------------------------------------------+                          

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

0092.00 C     'RECORD='     CAT(P)    RCD0100.RCD:0 DSP40            40                  
0093.00 C     DSP40         DSPLY                                                        

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