ctdli() - DL/I の呼び出し

標準

標準/拡張機能 C/C++ 依存項目
Language Environment 両方  

形式

C のみ:
#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,...);
C++:
#include <ims.h>						 	/* or #include <cics.h> */

int ctdli(int parmcount, const char *function, …);

or

#define _CTDLI_NOPARMCOUNT
int ctdli(const char *function, ...);

機能説明

制約事項: この関数は、AMODE 64 ではサポートされません。

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);
⋮
}

関連情報