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;

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