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進数
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 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                                                        

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