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;
によって取り出して表示している。