1.2.4.1 IMS/DBプラグインのデータ構造定義
DB PCB構造を指すポインタは、Tuxedo ART for IMSサーバーからCOBOLプログラムに渡され、最後にIMS/DBのプラグインのdb_entry()
に渡されます。プラグインが適切に機能するようにするには、各COBOLプログラムを呼び出す前にDB PCB構造に適切に入力する必要があります。この項では、DB PCBへの入力方法に関する詳細な要件を定義します。
次のリスト2に、DB PCB構造の例を示します。
DB PCB構造のリスト
struct {
char dbname[8];
char seglevel[2];
char stat_code[2];
char opt[4];
char res[4];
char segname[8];
char keylen[4];
char segnum[4];
char keyfa[IMS_FEEDAREA_LEN];
};
-
dbname: PSB内のPCB文に
PROCSEQ= <name>
が含まれている場合は、<name>
をdbnameに移入します。それ以外の場合、PSBからのNAME= <name>
の名前をdbname
に移入します。 - seglevel: NULLを移入します
- stat_code: 空白を移入します
-
opt: PSB内のPCB文から
PROCOPT
オプションに設定されている値を移入します。 - res: 何も移入しません
- segname: NULLを移入します
- keylen: 何も移入しません
- segnum: 何も移入しません
- keyfa: NULLを移入します
次のリスト3は、get_dbpcbattr
インタフェースに使用される構造定義を示しています。コンテンツはPSB
ファイルから読み取られ、get_dbpcbattr
インタフェースを介してアプリケーションに返されます。
get_dbpcbattrインタフェースに使用される構造定義のリスト
enum PCBTYPE {IOPCB = 1, ALTPCB = 2, GSAMPCB = 3, DBPCB = 4};
enum SEQUENTIALBUFFERING {NO = 1, COND = 2};
enum PCBPOS {SINGLE = 1, MULTIPLE = 2};
enum SENSITIVITY {READ = 1, UPDATE = 2};
struct __SENFLD {
char name[8]; /* mandatory, less than 8 filled with blank */
unsigned short start;/* mandatory, range [1-32767] */
int replace; /* optional, default is 1 */
};
struct SSPTR {
unsigned short pointer; /* range[1-8], default 0 */
enum SENSITIVITY sens;
};
struct __SENSEG {
char segname[8]; /* mandatory, less than 8 filled with blank */
char parent[8]; /* mandatory, less than 8 filled with blank */
char procopt[4]; /* optional, default filled with blank */
SSPTR ssptr[8]; /* each slot contains a subset pointer number and
associated sensitivity, pointer of 0 indicates end, totally up to 8 can be
specified */
char indices[8]; /* optional, default filled with blank */
SENFLD * senfld; /* optional, default is NULL */
unsigned short senfld_num; /* optional, default is 0, up to 255
SENFLD can be defined for each SENSEG */
};
struct __DB_PCB_ATTR { /* PCB Attributes */
enum PCBTYPE type; /* mandatory */
char dbname[8]; /* db name, default filled with blank */
char pcbname[8]; /* pcb name, optional, default filled with blank */
char procopt[4]; /* procopt , default filled with blank */
enum SEQUENTIALBUFFERING sb; /* optional, default is NO */
enum PCBPOS pos; /* optional, default is SINGLE */
int keylen; /* optional, default is invalid value 0 */
char procseq[8]; /* optional, default filled with blank */
int msdb_commit; /* optional, default is 0 */
int list; /* optional, default is 1 */
char *areas; /* area list set by SETR in DFSCTL, no change will be
applied on it in ART/IMS */
int senseg_num; /* optional, default is 0 */
struct SENSEG * senseg; /* optional, default is NULL */
};
親トピック: IMS/DBの様々な実装のためのプラグイン定義