C400

94. 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 #include <stdio.h>                                                               
0002.00 #include <stdlib.h>                                                              
0003.00 #include <string.h>                                                              
0004.00 #include <QUSCRTUS.h>                                                            
0005.00 #include <QUSLRCD.h>                                                             
0006.00 #include <QUSRTVUS.h>                                                            
0007.00 #include <signal.h>                                                              
0008.00 #include <errno.h>                                                               
0009.00                                                                                  
0010.00 #define TRUE         0                                                           
0011.00 #define FALSE       -1                                                           
0012.00 typedef struct {                                                                 
0013.00    int  BYTESPRO;                                                                
0014.00    int  BYTESAVL;                                                                
0015.00    char MSGID[7];                                                                
0016.00    char RESRVD;                                                                  
0017.00    char EXCPDATA[100];                                                           
0018.00 } ERRSTRUCTURE;     /* Define the error return structure            */           
0019.00 ERRSTRUCTURE  errcode;/* Error Code Structure for RCVMSG      */                 
0020.00                                                                                  
0021.00 void main(void){                                                                 
0022.00 typedef struct {                                                                 
0023.00    char name[10];                                                                
0024.00    char lib[10];                                                                 
0025.00 } USNAME;                                                                        
0026.00 USNAME usname;                                                                   
0027.00 typedef _Packed struct header_struct {                                           
0028.00      char user_data[64];                                                         
0029.00      int  generic_header_size;                                                   
0030.00      char header_version[4];                                                     
0031.00      char format_name[8];                                                        
0032.00      char program_name[10];                                                      
0033.00      char time_generated[13];                                                    
0034.00      char information_status;                                                    
0035.00      int  usrspc_used;                                                           
0036.00      int  parm_section_offset;                                                   
0037.00      int  parm_section_size;                                                     
0038.00      int  header_section_offset;                                                 
0039.00      int  header_section_size;                                                   
0040.00      int  list_section_offset; /*( 最初の開始位置 )*/                            
0041.00      int  list_section_size;                                                     
0042.00      int  number_of_entries;   /*( 項目数 )*/                                    
0043.00      int  size_of_entry;       /*( 1 項目の長さ )*/                              
0044.00 } HEADER_STRUCT;                                                                 
0045.00 HEADER_STRUCT inspace;                                                           
0046.00   int offset, size, i, len;                                                      
0047.00   char record[11];                                                               
0048.00   Qdb_Lrcd_RCDL0100_t rcdl0100;                                                  
0049.00                                                                                  
0050.00   printf("** TESTUSL :  レコード様式のリスト  **\n");                            
0051.00   getchar();                                                                     
0052.00                                                                                  
0053.00   /*(1) ユーザー・スペースの作成 */                                              
0054.00   errcode.BYTESPRO = 160;                                                        
0055.00   errcode.BYTESAVL = 0;                                                          
0056.00   memcpy(usname.name, "USLSPC    ", 10);                                         
0057.00   memcpy(usname.lib,  "QTEMP     ", 10);                                         
0058.00   QUSCRTUS(&usname, "PF        ", 1000, " ", "*ALL      ",                       
0059.00               "QUSLRCD ユーザー・スペース ", "*YES      ", &errcode);            
0060.00   if(errcode.BYTESAVL != 0){/* APIERR */                                         
0061.00     printf("ApiError MSGID = %s\n", errcode.MSGID);                              
0062.00     getchar();                                                                   
0063.00     return;                                                                      
0064.00   }/* APIERR */                                                                  
0065.00                                                                                  
0066.00   /*(2) QUSLRCD の実行 */                                                        
0067.00   QUSLRCD(&usname, "RCDL0100", "SHOHIN    QTRFIL    ", "0", &errcode);           
0068.00                                                                                  
0069.00   /*(3) QUSRTVUS によるユーザー・スペースの検索 */                               
0070.00   QUSRTVUS(&usname, 0x01, sizeof(inspace), &inspace, &errcode);                  
0071.00   offset = inspace.list_section_offset +1;                                       
072.00   size   = inspace.size_of_entry;                                                 
073.00                                                                                   
074.00   for(i = 0; i<inspace.number_of_entries; i++){/*for-loop*/                       
075.00     QUSRTVUS(&usname, offset, size, &rcdl0100, &errcode);                         
076.00     /*--------------( 処理の開始 )-----------------*/                             
077.00     memcpy(record, rcdl0100.Format_Name, 10);                                     
078.00     record[10] = 0x00;                                                            
079.00     printf("[%d] record = [%s]\n", i+1, record);                                  
080.00     /*--------------( 処理の終了 )-----------------*/                             
081.00     offset += inspace.size_of_entry;                                              
082.00   }/*for-loop*/                                                                   
083.00   getchar();                                                                      
084.00 }
【解説】

QUSLRCD を使用しているのは

0066.00   /*(2) QUSLRCD の実行 */                                                        
0067.00   QUSLRCD(&usname, "RCDL0100", "SHOHIN    QTRFIL    ", "0", &errcode);

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

077.00     memcpy(record, rcdl0100.Format_Name, 10);                                     
078.00     record[10] = 0x00;

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