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