C/400

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

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