C/400

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

QUSROBJD は API の中でもかなり使用頻度が高い API であり、C/400 開発者が最初に使う API かも
知れないと思うほどポピュラーな API である。
QUSROBJDDSPOBJD コマンドとほぼ同じ情報を提供する。
もちろん 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進数
00BINARY(4)返されるバイト数
44BINARY(4)使用可能なバイト数
88CHAR(10)オブジェクト名
1812CHAR(10)オブジェクト・ライブラリー名    
281CCHAR(10)オブジェクト・タイプ
3826CHAR(10)戻りライブラリー
4830BINARY(4)補助記憶域プール
5234CHAR(10)オブジェクト所有者
623ECHAR(2)オブドェクト・ドメイン
6440CHAR(13)作成日時
7740CHAR(13)オブジェクト変更日時

OBJD0200 形式

オフセットタイプフィールド
10進数16進数
00OBJD0100 形式からのすべての情報
905ACHAR(10)オブジェクトの拡張属性
10064CHAR(50)テキスト記述
15096CHAR(10)ソース・ファイル名
160A0CHAR(10)ソース・ファイル・ライブラリー名
170AACHAR(10)ソース・ファイル・メンバー名

OBJD0300 形式

オフセットタイプフィールド
10進数16進数
00OBJD0200 形式からのすべての情報  
180B4CHAR(13)ソース・ファイルの更新日時
193C1CHAR(13)オブジェクト保管日時
206CECHAR(13)オブジェクト復元日時
219DBCHAR(10)作成者のユーザー・プロフィール
229E5CHAR(8)オブジェクトが作成されたシステム
237EDCHAR(7)リセット日付
244F4BINARY(4)保管サイズ
248F8BINARY(4)保管順序番号
252FCCHAR(10)記憶域
262106CHAR(10)保管コマンド
272110CHAR(71)保管ボリュームID
343157CHAR(10)保管装置
353161CHAR(10)保管ファイル名
36316BCHAR(10)保管ファイル・ライブラリー名
373175CHAR(17)保管ラベル
390186CHAR(9)システム・レベル
39918FCHAR(16)コンパイラー
41519FCHAR(8)オブジェクト・レベル
4231A7CHAR(1)ユーザーの変更
4241A8CHAR(16)ライセンス・プログラム
4401B8CHAR(10)プログラム一時修正(PTF)
4501C2CHAR(10)プログラム診断依頼書(APAR)

OBJD0400 形式

オフセットタイプフィールド
10進数16進数
00OBJD0300 形式からのすべての情報
4601CCCHAR(7)最終使用日付
4671D3CHAR(1)使用状況の更新
4681D4BINARY(4)使用日数カウント
4721D8BINARY(4)オブジェクト・サイズ
4761DCBINARY(4)オブジェクト・サイズの乗数
4801E0CHAR(1)オブジェクト圧縮状況
4811E1CHAR(1)プログラムによる変更許可<
4821E2CHAR(1)プログラムによる変更
4831E3CHAR(10)ユーザー定義属性
4931EDCHAR(1)オブジェクト ASP オーバーフロー標識  
4941EECHAR(13)SAVACT 保管日時
5071FBCHAR(10)オブジェクト監査値
517205CHAR(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 に受け取ってから後で 日付 と 時刻 に分解して
処理しているだけである。
ここで何故、ライブラリーの 更新日付 と 時刻 を検索しているのかというと
そのライブラリー内に含まれるオブジェクトの最新の更新された 日付・時刻 が同時に
ライブラリー自身の 更新日付・時刻 でもあるからである。