標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
Language Environment | 両方 |
#pragma runopts(env(IMS),plist(OS))
#include <ims.h> /* or #include <cics.h> */
#define _CTDLI_PARMCOUNT /* First arg is an explicit parameter count */
int ctdli(int parmcount, const char *function, ...);
or
#define _CTDLI_NOPARMCOUNT /*Parameter count is implicit in varargs */
int ctdli(const char *function,...);
#include <ims.h> /* or #include <cics.h> */
int ctdli(int parmcount, const char *function, …);
or
#define _CTDLI_NOPARMCOUNT
int ctdli(const char *function, ...);
DL/I 機能を呼び出します。parmcount 引数はオプションです。parmcount 値は、function への ctdli() 呼び出しに対する変数引数リスト内の引数の個数を指定します。
C で parmcount を指定した場合、_CTDLI_PARMCOUNT フィーチャー・テスト・マクロを使用してください。そうでない場合、C または C++ で、_CTDLI_NOPARMCOUNT を定義して function を最初の引数にします。コンパイル単位に両方のタイプの呼び出し (parmcount の引き渡しがあるものとないもの) が含まれている場合、またチェックアウト・オプション指定でのコンパイル時にメッセージが出ないようにしたい場合、_CTDLI_NOPARMCOUNT を定義し、最初の引数を (const char *) に常にキャストしてください。
function 引数は、実行したい DL/I 関数を 指定します。ctdli() 呼び出しの形式は選択した関数によって異なるので、ここでは それらのさまざまな形式すべてを示してはいません。使用できる関数について詳しくは、COBOL の資料を参照して ください。
ユーザーのネーム・スペースが侵害されるのを回避するため、この非標準関数には 2 つの名前があります。1 つの名前の接頭部には 2 つの下線文字が付き、もう 1 つの名前の接頭部には付きません。接頭部下線文字が付いていない名前は、LANGLVL(EXTENDED) を使用する場合にのみ表示されます。
この関数を使用するには、その外部エントリー・ポイント名 (2 つの下線文字で始まる名前) を使用して呼び出すか、LANGLVL(EXTENDED) を使用してコンパイルする必要があります。LANGLVL(EXTENDED) を使用すると、ヘッダー内の関連情報も表示されます。
IMS™ トランザクションから ctdli() を呼び出すに は、#pragma runopts(env(ims),plist(os)) を指定するか、コンパイラー・オプション の TARGET(IMS) と PLIST(OS) を指定する必要があります。
プログラム制御ブロック (PCB) の 状況フィールド (2 バイト) が unsigned int と して保管され、ctdli() の戻り値として使用されます。
PCB 状況フィールドにブランク (X'4040') が含まれていると、ctdli() は 0 を戻します。
/* The following program demonstrates the use of the ctdli() function.
It is a skeleton of a message processing program that calls ctdli()
to retrieve messages and data.
Do use the TARGET(IMS) and PLIST(IMS) compile options for C++
applications.
*/
#ifndef __cplusplus
#pragma runopts(env(ims),plist(os))
#endif
#include <stdlib.h>
#include <ims.h>
#define n 20 /* I/O area size - Application dependent */
typedef struct {PCB_STRUCT(10)} PCB_10_TYPE;
int main(void)
{
/* Function codes for ctdli */
static const char func_GU[4] = "GU ";
static const char func_ISRT[4] = "ISRT";
char ssa_name[] = "ORDER (ORDERKEY = 666666)";
int rc;
char msg_seg_io_area[n];
char db_seg_io_area[n];
char alt_msg_seg_out[n];
PCB_STRUCT_8_TYPE *alt_pcb;
PCB_10_TYPE *db_pcb;
IO_PCB_TYPE *io_pcb;
io_pcb = (IO_PCB_TYPE *)(__pcblist)[0];
alt_pcb = __pcblist[1];
db_pcb = (PCB_10_TYPE *) __pcblist[2];
⋮
/* Get first message segment from message region */
rc = ctdli(func_GU, io_pcb, msg_seg_io_area);
⋮
/* Get the data from the database having the specified key value */
rc = ctdli(func_GU, db_pcb, db_seg_io_area, ssa_name);
⋮
/* Build output message in program's I/O area */
rc = ctdli(func_ISRT, alt_pcb, alt_msg_seg_out);
⋮
}