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;                                                            

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