QUSROBJD
は API の中でもかなり使用頻度が高い API であり、C/400 開発者が最初に使う API かも
知れないと思うほどポピュラーな API である。
QUSROBJD
は DSPOBJD
コマンドとほぼ同じ情報を提供する。
もちろん API であるので DSPOBJD
より詳しい情報を高速で得ることができる。
今回のサンプルはライブラリー SPOOLWTR
の最終変更日と時刻を QUSROBJD
によって
取得するというものである。
必須パラメータ・グループ:
1. | レシーバー変数 | 出力 | Char(*) |
2. | レシーバー変数長 | 入力 | Binary(4) |
3. | 形式名 | 入力 | Binary(4) |
4. | オブジェクト修飾名 | 入力 | Char(10) の配列(*) |
5. | オブジェクト・タイプ | 入出力 | Char(*) |
任意選択パラメータ:
6. | エラー・コード | 入出力 | Char(*) |
レシーバー変数 と レシーバー変数長 は形式名によって異なる。
形式名 は、
OBJD0100 形式 | ・・・・・・ | 基本情報(最高速) |
OBJD0200 形式 | ・・・・・・ | PDM によって表示される情報に良く似た情報 |
OBJD0300 形式 | ・・・・・・ | 保守情報 |
OBJD0400 形式 | ・・・・・・ | 全情報(最低速) |
[参照メンバー] QSYSINC/H(QUSROBJD)
■ OBJD0100 形式
オフセット | タイプ | フィールド | |
---|---|---|---|
10進数 | 16進数 | ||
0 | 0 | BINARY(4) | 返されるバイト数 |
4 | 4 | BINARY(4) | 使用可能なバイト数 |
8 | 8 | CHAR(10) | オブジェクト名 |
18 | 12 | CHAR(10) | オブジェクト・ライブラリー名 |
28 | 1C | CHAR(10) | オブジェクト・タイプ |
38 | 26 | CHAR(10) | 戻りライブラリー |
48 | 30 | BINARY(4) | 補助記憶域プール |
52 | 34 | CHAR(10) | オブジェクト所有者 |
62 | 3E | CHAR(2) | オブドェクト・ドメイン |
64 | 40 | CHAR(13) | 作成日時 |
77 | 40 | CHAR(13) | オブジェクト変更日時 |
■ OBJD0200 形式
オフセット | タイプ | フィールド | |
---|---|---|---|
10進数 | 16進数 | ||
0 | 0 | OBJD0100 形式からのすべての情報 | |
90 | 5A | CHAR(10) | オブジェクトの拡張属性 |
100 | 64 | CHAR(50) | テキスト記述 |
150 | 96 | CHAR(10) | ソース・ファイル名 |
160 | A0 | CHAR(10) | ソース・ファイル・ライブラリー名 |
170 | AA | CHAR(10) | ソース・ファイル・メンバー名 |
■ OBJD0300 形式
オフセット | タイプ | フィールド | |
---|---|---|---|
10進数 | 16進数 | ||
0 | 0 | OBJD0200 形式からのすべての情報 | |
180 | B4 | CHAR(13) | ソース・ファイルの更新日時 |
193 | C1 | CHAR(13) | オブジェクト保管日時 |
206 | CE | CHAR(13) | オブジェクト復元日時 |
219 | DB | CHAR(10) | 作成者のユーザー・プロフィール |
229 | E5 | CHAR(8) | オブジェクトが作成されたシステム |
237 | ED | CHAR(7) | リセット日付 |
244 | F4 | BINARY(4) | 保管サイズ |
248 | F8 | BINARY(4) | 保管順序番号 |
252 | FC | CHAR(10) | 記憶域 |
262 | 106 | CHAR(10) | 保管コマンド |
272 | 110 | CHAR(71) | 保管ボリュームID |
343 | 157 | CHAR(10) | 保管装置 |
353 | 161 | CHAR(10) | 保管ファイル名 |
363 | 16B | CHAR(10) | 保管ファイル・ライブラリー名 |
373 | 175 | CHAR(17) | 保管ラベル |
390 | 186 | CHAR(9) | システム・レベル |
399 | 18F | CHAR(16) | コンパイラー |
415 | 19F | CHAR(8) | オブジェクト・レベル |
423 | 1A7 | CHAR(1) | ユーザーの変更 |
424 | 1A8 | CHAR(16) | ライセンス・プログラム |
440 | 1B8 | CHAR(10) | プログラム一時修正(PTF) |
450 | 1C2 | CHAR(10) | プログラム診断依頼書(APAR) |
■ OBJD0400 形式
オフセット | タイプ | フィールド | |
---|---|---|---|
10進数 | 16進数 | ||
0 | 0 | OBJD0300 形式からのすべての情報 | |
460 | 1CC | CHAR(7) | 最終使用日付 |
467 | 1D3 | CHAR(1) | 使用状況の更新 |
468 | 1D4 | BINARY(4) | 使用日数カウント |
472 | 1D8 | BINARY(4) | オブジェクト・サイズ |
476 | 1DC | BINARY(4) | オブジェクト・サイズの乗数 |
480 | 1E0 | CHAR(1) | オブジェクト圧縮状況 |
481 | 1E1 | CHAR(1) | プログラムによる変更許可< |
482 | 1E2 | CHAR(1) | プログラムによる変更 |
483 | 1E3 | CHAR(10) | ユーザー定義属性 |
493 | 1ED | CHAR(1) | オブジェクト ASP オーバーフロー標識 |
494 | 1EE | CHAR(13) | SAVACT 保管日時 |
507 | 1FB | CHAR(10) | オブジェクト監査値 |
517 | 205 | CHAR(10) | 1次グループ |
0001.00 #include <stdio.h> 0002.00 #include <stdlib.h> 0003.00 #include <string.h> 0004.00 #include <QUSROBJD.h> 0005.00 0006.00 #define TRUE 0 0007.00 #define FALSE -1 0008.00 typedef struct { 0009.00 int BYTESPRO; 0010.00 int BYTESAVL; 0011.00 char MSGID[7]; 0012.00 char RESRVD; 0013.00 char EXCPDATA[100]; 0014.00 } ERRSTRUCTURE; /* Define the error return structure */ 0015.00 ERRSTRUCTURE errcode;/* Error Code Structure for RCVMSG */ 0016.00 0017.00 void main(void){ 0018.00 Qus_OBJD0100_t objd0100; 0019.00 char date_time[14], year[4], DATE[11], TIME[9]; 0020.00 typedef struct { 0021.00 char year[5]; 0022.00 char month[3]; 0023.00 char day[3]; 0023.00 char day[3]; 0024.00 } DATE_; 0025.00 DATE_ date; 0026.00 typedef struct { 0027.00 char hour[3]; 0028.00 char minute[3]; 0029.00 char second[3]; 0030.00 } TIME_; 0031.00 TIME_ time; 0032.00 0033.00 printf("** TESTLIBDAT: 最終更新日付の検索 **\n"); 0034.00 getchar(); 0035.00 errcode.BYTESPRO = 160; 0036.00 errcode.BYTESAVL = 0; 0037.00 QUSROBJD(&objd0100, sizeof(Qus_OBJD0100_t),"OBJD0100", "SPOOLWTR *LIBL ", 0038.00 "*LIB ", &errcode); 0039.00 memcpy(date_time, objd0100.Change_Date_Time, 13); 0040.00 date_time[13] = 0x00; 0041.00 printf("SPOOLWTR(*LIB) date_time = [%s]\n", date_time); 0042.00 memcpy(year, "20", 2); 0043.00 memcpy(&year[2], &date_time[1], 2); 0044.00 memcpy(date.year, year, 4); 0045.00 date.year[4] = 0x00; 0046.00 memcpy(date.month, &date_time[3], 2); 0047.00 date.month[2] = 0x00; 0048.00 memcpy(date.day, &date_time[5], 2); 0049.00 date.day[2] = 0x00; 0050.00 sprintf(DATE, "%s/%s/%s", date.year, date.month, date.day); 0051.00 printf("DATE = [%s]\n", DATE); 0052.00 memcpy(time.hour, &date_time[7], 2); 0053.00 time.hour[2] = 0x00; 0054.00 memcpy(time.minute, &date_time[9], 2); 0055.00 time.minute[2] = 0x00; 0056.00 memcpy(time.second, &date_time[11], 2); 0057.00 time.second[2] = 0x00; 0058.00 sprintf(TIME, "%s:%s:%s", time.hour, time.minute, time.second); 0059.00 printf("time = [%s]\n", TIME); 0060.00 getchar(); 0061.00 }
0037.00 QUSROBJD(&objd0100, sizeof(Qus_OBJD0100_t),"OBJD0100", "SPOOLWTR *LIBL ", 0038.00 "*LIB ", &errcode);
によって戻り値の構造体
0018.00 Qus_OBJD0100_t objd0100;
の値を受け取っている。
0039.00 memcpy(date_time, objd0100.Change_Date_Time, 13); 0040.00 date_time[13] = 0x00;
によって 13 桁の 変更日付・時刻 を date_time
に受け取ってから後で 日付 と 時刻 に分解して
処理しているだけである。
ここで何故、ライブラリーの 更新日付 と 時刻 を検索しているのかというと
そのライブラリー内に含まれるオブジェクトの最新の更新された 日付・時刻 が同時に
ライブラリー自身の 更新日付・時刻 でもあるからである。