C400

92. API: QUSROBJD : オブジェクトの属性の検索

QUSROBJD は API の中でもかなり使用頻度が高い API であり、C/400 開発者が最初に使う API かも

知れないと思うほどポピュラーな API である。

QUSROBJD DSPOBJD コマンドとほぼ同じ情報を提供する。

もちろん API であるので DSPOBJD より詳しい情報を高速で得ることができる。

今回のサンプルはライブラリー SPOOLWTR の最終変更日と時刻を QUSROBJD によって

取得するというものである。

オブジェクト記述の検索(QUSROBJD)API

パラメータ

必須パラメータ・グループ:

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 に受け取ってから後で 日付 と 時刻 に分解して

処理しているだけである。

ここで何故、ライブラリーの 更新日付 と 時刻 を検索しているのかというと

そのライブラリー内に含まれるオブジェクトの最新の更新された 日付・時刻 が同時に

ライブラリー自身の 更新日付・時刻 でもあるからである。