dc_mcf_sendメッセージの送信(C言語)

形式

ANSI C,C++の形式

#include <dcmcf.h>
int  dc_mcf_send(DCLONG action, DCLONG commform, char *termnam,
                char *mapname, char *senddata, DCLONG sdataleng,
                char *pagecdat, DCLONG opcd)

K&R版Cの形式

#include <dcmcf.h>
int dc_mcf_send(action, commform, termnam, mapname, senddata,
               sdataleng, pagecdat, opcd)
DCLONG    action;
DCLONG    commform;
char      *termnam;
char      *mapname;
char      *senddata;
DCLONG    sdataleng;
char      *pagecdat;
DCLONG    opcd;

機能

MCFで管理する論理端末に送信するメッセージのうち,一つのセグメントを送信要求します。必要なセグメントの数だけ送信要求を呼び出すことで,一つの論理メッセージを送信できます。

送信できる一つのセグメントの最大長は,32000バイトまでです。

送信領域の形式を次に示します。

[図データ]

TP1/NET/XMAP3の論理端末に送信する場合は,XMAP3で作成した出力論理マップ(拡張子が「.h」のファイル)を#includeで取り込み,出力論理マップの先頭アドレスをsenddataに指定します。出力論理マップの詳細については,マニュアル「画面・帳票サポートシステム XMAP3 プログラミングガイド 帳票編」,マニュアル「画面・帳票サポートシステム XMAP3 プログラミングガイド 画面編」,マニュアル「XMAP3 Version 5 画面・帳票サポートシステム XMAP3 プログラミングガイド」,またはマニュアル「XMAP3 Version 5 画面・帳票サポートシステム XMAP3 開発ガイド」を参照してください。コーディング例については,「付録G.1 コーディング例」を参照してください。

UAPで値を設定する引数

●action

送信するセグメント,優先か一般か,出力通番を付けるかどうか,使用するバッファ形式,および通知イベントを通知させるかどうかを,次の形式で設定します。

{DCMCFESI|DCMCFEMI}〔|{DCMCFNORM|DCMCFPRIO}〕〔|{DCMCFSEQ|DCMCFNSEQ}〕
|DCMCFBUF2〔|DCMCFLMAP〕〔|DCMCFSEVT〕

DCMCFESI
先頭セグメントまたは中間セグメントを送信する場合に設定します。
DCMCFEMI
単一セグメントまたは最終セグメントを送信する場合に設定します。
メッセージの送信の終了を連絡するために,最後は必ずこの値を設定してください。
DCMCFNORM
一般の一方送信メッセージとして送信する場合に設定します。
DCMCFPRIO
優先の一方送信メッセージとして送信する場合に設定します。
DCMCFSEQ
出力通番を付ける場合に設定します。
DCMCFNSEQ
出力通番を付けない場合に設定します。
DCMCFBUF2
バッファ形式2のバッファを示すDCMCFBUF2を設定します。
DCMCFLMAP
論理マップの情報だけを使用してマッピングをする場合に設定します。論理マップと物理マップの両方を使用する場合は設定しません。
DCMCFSEVT
送信完了通知イベントおよび送信障害通知イベントを通知させるときに設定します。ただし,これらのイベントを処理するMHPをアプリケーション属性定義(mcfaalcap)で指定していない場合は無効です。メッセージが複数のセグメントで構成される場合,先頭セグメントの送信時の指定が有効になります。

●commform

分岐送信を示す,DCMCFOUTを設定します。

●termnam

出力先の論理端末名称を設定します。論理端末名称は最大8バイトの長さです。論理端末名称の最後にはヌル文字を付けてください。

●mapname

マップ名を6文字以内で設定します。省略すると論理端末定義(mcftalcle)の-pオプションで設定したデフォルトマップ名が有効になります。必ずヌル文字で終了させてください。

●senddata

送信するセグメントの内容を設定した領域を設定します。TP1/NET/XMAP3の論理端末に送信する場合は,出力論理マップの先頭アドレスを設定します。メッセージの送信の終了を連絡する場合で,セグメントの内容がないときも,必ず設定してください。

●sdataleng

送信するセグメントの長さを設定します。TP1/NET/XMAP3の論理端末画面に送信する場合は,送信する論理マップ可変部・定数部の長さを設定します。先頭セグメントまたは中間セグメントの送信後,メッセージの送信の終了を連絡する場合には,0を設定してください。

●pagecdat

ページ制御機能を使ってPAGECモジュールの内容を変更する場合,ページ制御情報を設定したテーブルのアドレスを設定します。先頭セグメント送信時に設定したアドレスが有効となります。中間セグメントまたは最終セグメント送信時にアドレスを設定しても無効です。ページ制御機能を利用しない場合は,ヌルアドレスを設定してください。

ページ制御情報テーブルの形式は次のとおりです。

typedef struct {
       int         pagec_id;
       char       *pagec_name;
       char       *pagec_tbl;
       int         resv;
} PAGEC_DAT;

ページ制御情報テーブルはOpenTP1が提供するヘッダファイルには含まれていません。ページ制御機能を使用するUAPで,ページ制御情報テーブルの型を宣言してください。

●opcd

DCNOFLAGSを設定します。

リターン値

リターン値リターン値
(数値)
意味
DCMCFRTN_000000正常に終了しました。
DCMCFRTN_71002-12002メッセージキューへの出力処理中に障害が発生しました。
メッセージキューが閉塞されています。
メッセージキューが割り当てられていません。
セグメント長に32000バイトを超える値を設定しています。
MCFが終了処理中のため,メッセージの送信を受け付けられません。
DCMCFRTN_71003-12003メッセージキューが満杯です。
DCMCFRTN_71004-12004メッセージを格納するバッファをメモリ上に確保できませんでした。
DCMCFRTN_71108-12108メッセージを送信しようとしましたが,送信先の管理テーブルが確保できませんでした。
プロセスのローカルメモリが不足しています。
DCMCFRTN_72000-13000<MHPの実行でリターンした場合>
先頭セグメントを受信するdc_mcf_receive関数を呼び出す前に,dc_mcf_send関数を呼び出しています。
<SPPの実行でリターンした場合>
トランザクションでないSPPの処理から,dc_mcf_send関数を呼び出しています。
DCMCFRTN_72001-13001termnamに設定した論理端末名称が間違っています。
termnamに設定した論理端末名称は,定義されていません。
該当する論理端末には一方送信メッセージを送信できません。
DCMCFRTN_72005-13005先頭セグメントまたは中間セグメントを送信するdc_mcf_send関数で,長さが0バイトのセグメントを送信しています。
DCMCFRTN_72016-13016actionに設定したメッセージ種別(DCMCFNORMまたはDCMCFPRIO)の値が間違っています。
actionに設定した値が間違っています。
mapnameで設定したマップ名が8文字を超えています。
pagec_idに設定した値が間違っています。
PAGEC名が7文字を超えています。
opcdに設定した値が間違っています。
引数に設定した値に間違いがあります。
DCMCFRTN_72017-13017actionに設定した出力通番の要否(DCMCFSEQまたはDCMCFNSEQ)の値が間違っています。
DCMCFRTN_72024-13024commformに設定した値が間違っています。
DCMCFRTN_72026-13026actionに設定したセグメント種別(DCMCFESI,DCMCFEMI)の値が間違っています。
DCMCFRTN_72041-13041単一セグメントを送信するdc_mcf_send関数で,長さが0バイト,またはマイナス値のセグメントを送信しています。
上記以外プログラムの破壊などによる,予期しないエラーが発生しました。
(凡例)
-:該当しません。