付録H.1 コーディング例
ここでは,ユーザアプリケーションプログラムのコーディング例を示します。
- 〈この項の構成〉
(1) ユーザアプリケーションプログラムのコーディング例(全二重でのC言語)
(a) コンテンション勝者側(SPP)
#include <dcmcf.h> #include <string.h> #define WAITTIME 60 void SEND01(in, in_len, out, out_len) char *in ; unsigned DCLONG in_len ; char *out ; unsigned DCLONG out_len ; { /*★★引数定義★★*/ /*引数を使用している関数*/ /* sendsync, recvsync, sendrecv, receive */ DCLONG action ;/* 0 0 0 0 */ DCLONG commform ;/* 0 0 0 0 */ char termnam[16] ;/* 0 0 0 0 */ char resv01[16] ;/* 0 0 0 0 */ char senddata[256] ;/* 0 - 0 - */ DCLONG sdataleng ;/* 0 - 0 - */ char recvdata[256] ;/* - 0 0 0 */ DCLONG rdataleng ;/* - 0 0 0 */ DCLONG time ;/* - 0 0 0 */ DCLONG wachtime ;/* 0 0 0 - */ char resv02[16] ;/* 0 - - - */ DCLONG opcd ;/* 0 - - - */ DCLONG inbufleng ;/* - 0 0 0 */ /*★★変数定義 & 初期化★★*/ int rtn = 0x00 ; /*★★引数初期化★★*/ action = NULL; commform = NULL; memset(termnam, 0, 16) ; memset(resv01, 0, 16) ; memset(senddata, 0, 256); sdataleng = NULL; memset(recvdata, 0, 256); rdataleng = NULL; time = NULL; wachtime = NULL; memset(resv02, 0, 16) ; opcd = NULL; inbufleng = NULL; /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ダイアログ開始要求送信(TP-BEGIN-DIALOGUE) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ sendsync引数設定 (初期化) ★★*/ action = DCMCFEMI ; commform = DCNOFLAGS ; strcpy(termnam, "otm01") ; resv01[0] = NULL ; /* senddataイニシャライズは省略 */ sdataleng = 54 ; resv02[0] = NULL ; opcd = DCNOFLAGS ; wachtime = WAITTIME ; /*★ senddata 設定 ★*/ /*★ 先頭8バイト目までは,MCFが使用する ★*/ senddata[8] = 0x00 ; /* レングス 01 */ senddata[9] = 0x0a ; /* サービスプリミティブの長さ */ strcpy(senddata + 10, "OTP1") ; /* 送信手順(OTP1) */ strcpy(senddata + 14, "BDR ") ; /* サービスプリミティブコード */ /* TP_BEGIN_DIALOGUE req */ senddata[18] = 0x00 ; /* レングス 02 */ senddata[19] = 0x2a ; /* パラメタフィールドのトータル */ senddata[20] = 0x00 ; /* レングス 03 */ senddata[21] = 0x0d ; /* 起動側TPSUタイトルの長さ */ strcpy(senddata + 22, "PR") ; /* 型コード */ strcpy(senddata + 24, "SEND_TPSU"); /* 起動側TPSUタイトル(パラメタ1) */ senddata[33] = 0x00 ; /* レングス 04 */ senddata[34] = 0x02 ; /* 受信側AP(パラメタ 2省略) */ senddata[35] = 0x00 ; /* レングス 05 */ senddata[36] = 0x0d ; /* 受信側TPSUタイトルの長さ */ strcpy(senddata + 37, "PR") ; /* 型コード */ strcpy(senddata + 39, "RECV_TPSU"); /* 受信側TPSUタイトル(パラメタ3) */ senddata[48] = 0x00 ; /* レングス 06 */ senddata[49] = 0x04 ; /* 予備の長さ */ senddata[50] = 0x48 ; /*全二重&ハンドシェイク機能単位(パラメタ4) */ senddata[51] = 0xff ; /* 予備 */ senddata[52] = 0x00 ; /* レングス 07 */ senddata[53] = 0x02 ; /* サービス品質(パラメタ5省略) */ senddata[54] = 0x00 ; /* レングス 08 */ senddata[55] = 0x02 ; /* アプリケーションコンテキスト(パラメタ 6) */ senddata[56] = 0x00 ; /* レングス 09 */ senddata[57] = 0x04 ; /* 確認項目の長さ */ strcpy(senddata + 58, "AL") ; /* 確認項目(パラメタ 7) */ /* all(同期型) */ senddata[60] = 0x00 ; /* レングス 10 */ senddata[61] = 0x02 ; /* ユ−ザ情報(省略) */ /*▼▼ メッセージ送信開始(sendsync) ▼▼*/ rtn = dc_mcf_sendsync(action, commform, termnam, resv01, senddata, sdataleng, resv02, opcd, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ メッセージ送信終了(sendsync) ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ダイアログ開始応答受信(TP-BEGIN-DIALOGUE) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ recvsync引数設定 (初期化) ★★*/ action = DCMCFFRST ; commform = DCNOFLAGS ; resv01[0] = NULL ; /*recvdataイニシャライズは省略*/ rdataleng = NULL ; inbufleng = 256 ; time = NULL ; wachtime = WAITTIME ; /*▼▼ メッセージ受信開始(recvsync) ▼▼*/ rtn = dc_mcf_recvsync(action, commform, termnam, resv01, recvdata, &rdataleng, inbufleng, &time, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ メッセージ受信終了(recvsync) ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ データ送信(TP-DATA) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ sendsync引数設定 (初期化) ★★*/ action = DCMCFEMI ; commform = DCNOFLAGS ; resv01[0] = NULL ; sdataleng = 23 ; resv02[0] = NULL ; opcd = DCNOFLAGS ; wachtime = WAITTIME ; /*★ senddata clear ★*/ memset(senddata, 0, 256) ; /*★ senddata 設定 ★*/ /*★ 先頭8バイト目までは,MCFが使用する ★*/ senddata[8] = 0x00 ; /* レングス 01 */ senddata[9] = 0x0a ; /* サービスプリミティブの長さ */ strcpy(senddata + 10, "OTP1"); /* 送信手順(OTP1) */ strcpy(senddata + 14, "TDR "); /* サービスプリミティブコード */ /* TP_DT req */ senddata[18] = 0x00 ; /* レングス 02 */ senddata[19] = 0x02 ; /* パラメタ(省略) */ senddata[20] = 0x00 ; /* レングス 03 */ senddata[21] = 0x0b ; /* ユーザ情報の長さ */ senddata[22] = 0x80 ; /* 連結状態 */ strcpy(senddata + 23, "USERDATA"); /* ユーザデータ */ /*▼▼ データ送信(sendsync)開始 ▼▼*/ rtn = dc_mcf_sendsync(action, commform, termnam, resv01, senddata, sdataleng, resv02, opcd, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ データ送信(sendsync)終了 ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ハンドシェイク受信(TP-HANDSHAKE) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ recvsync引数設定 (初期化) ★★*/ action = DCMCFFRST ; commform = DCNOFLAGS ; resv01[0] = NULL ; rdataleng = NULL ; inbufleng = 256 ; time = NULL ; wachtime = WAITTIME ; /*★★ recvdata clear ★★*/ memset(recvdata, 0, 256) ; /*▼▼ メッセージ受信開始(recvsync) ▼▼*/ rtn = dc_mcf_recvsync(action, commform, termnam, resv01, recvdata, &rdataleng, inbufleng, &time, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ メッセージ受信終了(recvsync) ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ハンドシェイク送信(TP-HANDSHAKE) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ sendsync引数設定 (初期化) ★★*/ action = DCMCFEMI ; commform = DCNOFLAGS ; resv01[0] = NULL ; sdataleng = 14 ; resv02[0] = NULL ; opcd = DCNOFLAGS ; wachtime = WAITTIME ; /*★ senddata clear ★*/ memset(senddata, 0, 256) ; /*★ senddata 設定 ★*/ /*★ 先頭8バイト目までは,MCFが使用する ★*/ senddata[8] = 0x00 ; /* レングス 01 */ senddata[9] = 0x0a ; /* サービスプリミティブの長さ */ strcpy(senddata + 10, "OTP1"); /* 送信手順(OTP1) */ strcpy(senddata + 14, "HSP "); /* サービスプリミティブコード */ senddata[18] = 0x00 ; /* レングス 02 */ senddata[19] = 0x02 ; /* パラメタ(省略) */ senddata[20] = 0x00 ; /* レングス 3 */ senddata[21] = 0x02 ; /* ユーザ情報(省略) */ /*▼▼ データ送信開始(sendsync) ▼▼*/ rtn = dc_mcf_sendsync(action, commform, termnam, resv01, senddata, sdataleng, resv02, opcd, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ データ送信終了(sendsync) ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ダイアログ終了要求送受信(TP-END-DIALOGUE) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ sendrecv引数設定 ★★*/ action = DCMCFEMI ; commform = DCMCFIO ; resv01[0] = NULL ; sdataleng = 18 ; rdataleng = NULL ; inbufleng = 256 ; time = NULL ; wachtime = WAITTIME ; /*★ senddata and recvdata clear ★*/ memset(senddata, 0, 256) ; memset(recvdata, 0, 256) ; /*★ senddata 設定 ★*/ /*★ 先頭8バイト目までは,MCFが使用する ★*/ senddata[8] = 0x00 ; /* レングス 01 */ senddata[9] = 0x0a ; /* サービスプリミティブの長さ */ strcpy(senddata + 10, "OTP1") ; /* 送信手順(OTP1) */ strcpy(senddata + 14, "EDR ") ; /* サービスプリミティブコード */ /* TP_END_DIALOGUE req */ senddata[18] = 0x00 ; /* レングス 02 */ senddata[19] = 0x06 ; /* パラメタ全体の長さ */ senddata[20] = 0x00 ; /* レングス 03 */ senddata[21] = 0x04 ; /* 確認項目の長さ */ strcpy(senddata + 22, "TR") ; /* 確認項目(パラメタ1) */ senddata[24] = 0x00 ; /* レングス 04 */ senddata[25] = 0x02 ; /* ユーザ情報(省略) */ /*▼▼ メッセージ送受信開始(sendrecv) ▼▼*/ rtn = dc_mcf_sendrecv(action, commform, termnam, resv01, senddata, sdataleng, recvdata, &rdataleng, inbufleng, &time, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ メッセージ送受信終了(sendrecv)▲▲*/ ERROR : ; }
(b) コンテンション敗者側(MHP)
#include <dcmcf.h> #include <string.h> #define WAITTIME 60 void RECV01(in, in_len, out, out_len) char *in ; unsigned DCLONG in_len ; char *out ; unsigned DCLONG out_len ; { /*★★引数定義★★*/ /*引数を使用している関数*/ /* sendsync, recvsync, sendrecv, receive */ DCLONG action ;/* 0 0 0 0 */ DCLONG commform ;/* 0 0 0 0 */ char termnam[16] ;/* 0 0 0 0 */ char resv01[16] ;/* 0 0 0 0 */ char senddata[256] ;/* 0 - 0 - */ DCLONG sdataleng ;/* 0 - 0 - */ char recvdata[256] ;/* - 0 0 0 */ DCLONG rdataleng ;/* - 0 0 0 */ DCLONG time ;/* - 0 0 0 */ DCLONG wachtime ;/* 0 0 0 - */ char resv02[16] ;/* 0 - - - */ DCLONG opcd ;/* 0 - - - */ DCLONG inbufleng ;/* - 0 0 0 */ /*★★変数定義 & 初期化★★*/ int rtn = NULL ; /*★★引数初期化★★*/ action = NULL; commform = NULL; memset(termnam, 0, 16) ; memset(resv01, 0, 16) ; memset(senddata, 0, 256); sdataleng = NULL; memset(recvdata, 0, 256); rdataleng = NULL; time = NULL; wachtime = NULL; memset(resv02, 0, 16) ; opcd = NULL; inbufleng = NULL; /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ダイアログ開始要求受信(TP-BEGIN-DIALOGUE) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ receive引数設定 (初期化) ★★*/ action = DCMCFFRST; commform = DCNOFLAGS; termnam[0] = NULL ; /*recvdataイニシャライズは省略*/ resv01[0] = NULL ; rdataleng = NULL ; inbufleng = 256 ; time = NULL ; /*▼▼ ダイアログ開始要求受信開始(receive) ▼▼*/ rtn = dc_mcf_receive(action, commform, termnam, resv01, recvdata, &rdataleng, inbufleng, &time); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ ダイアログ開始要求受信終了(receive) ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ダイアログ開始応答送信(TP-BEGIN-DIALOGUE) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ sendsync引数設定 (初期化) ★★*/ action = DCMCFEMI ; commform = DCNOFLAGS ; resv01[0] = NULL ; sdataleng = 18 ; resv02[0] = NULL ; opcd = DCNOFLAGS ; wachtime = WAITTIME ; /*★ senddata 設定 ★*/ /*★ 先頭8バイト目までは,MCFが使用する ★*/ senddata[8] = 0x00 ; /* レングス 01 */ senddata[9] = 0x0a ; /* サービスプリミティブの長さ */ strcpy(senddata + 10, "OTP1") ; /* 送信手順(OTP1) */ strcpy(senddata + 14, "BDPA") ; /* サービスプリミティブコード */ /* TP_BEGIN_DIALOGUE rsp */ senddata[18] = 0x00 ; /* レングス 02 */ senddata[19] = 0x06 ; /* パラメタ全体の長さ */ senddata[20] = 0x00 ; /* レングス 03 */ senddata[21] = 0x04 ; /* 結果の長さ */ strcpy(senddata + 22, "AC") ; /* 結果(パラメタ 1) */ senddata[24] = 0x00 ; /* レングス 04 */ senddata[25] = 0x02 ; /* ユーザ情報(省略) */ /*▼▼ メッセージ送信開始(sendsync) ▼▼*/ rtn = dc_mcf_sendsync(action, commform, termnam, resv01, senddata, sdataleng, resv02, opcd, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ メッセージ送信終了(sendsync) ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ TP_DATA受信(TP-DT) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ recvsync引数設定 (初期化) ★★*/ action = DCMCFFRST ; commform = DCNOFLAGS ; resv01[0] = NULL ; rdataleng = NULL ; inbufleng = 256 ; time = NULL ; wachtime = WAITTIME ; /*★★ recvdata clear ★★*/ memset(recvdata, 0, 256) ; /*▼▼ メッセージ受信開始(recvsync) ▼▼*/ rtn = dc_mcf_recvsync(action, commform, termnam, resv01, recvdata, &rdataleng, inbufleng, &time, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ メッセージ受信終了(recvsync) ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ハンドシェイク(TP-HANDSHAKE) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ sendrecv引数設定 (初期化) ★★*/ action = DCMCFEMI ; commform = DCMCFIO ; resv01[0] = NULL ; sdataleng = 18 ; rdataleng = NULL ; inbufleng = 256 ; time = NULL ; wachtime = WAITTIME ; /*★★ senddata clear★★*/ memset(senddata, 0, 256); /*★★ recvdata clear★★*/ memset(recvdata, 0, 256); /*★ senddata 設定 ★*/ /*★ 先頭8バイト目までは,MCFが使用する ★*/ senddata[8] = 0x00 ; /* レングス 01 */ senddata[9] = 0x0a ; /* サービスプリミティブの長さ */ strcpy(senddata + 10, "OTP1") ; /* 送信手順(OTP1) */ strcpy(senddata + 14, "HSR ") ; /* サービスプリミティブ */ /* TP_HANDSHAKE */ senddata[18] = 0x00 ; /* レングス 02 */ senddata[19] = 0x06 ; /* パラメタ全体の長さ */ senddata[20] = 0x00 ; /* レングス 03 */ senddata[21] = 0x04 ; /* 緊急確認項目の長さ */ strcpy(senddata + 22, "NR") ; /* 緊急確認項目(パラメタ 1) */ senddata[24] = 0x00 ; /* レングス 04 */ senddata[25] = 0x02 ; /* ユーザ情報(省略) */ /*▼▼ メッセージ送受信開始(sendrecv) ▼▼*/ rtn = dc_mcf_sendrecv(action, commform, termnam, resv01, senddata, sdataleng, recvdata, &rdataleng, inbufleng, &time, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ メッセージ送受信終了(sendrecv) ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ダイアログ終了要求受信(TP-END-DIALOGUE) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ recvsync引数設定 (初期化) ★★*/ action = DCMCFFRST ; commform = DCNOFLAGS ; resv01[0] = NULL ; rdataleng = NULL ; inbufleng = 256 ; time = NULL ; wachtime = WAITTIME ; /*★★ recvdata clear★★*/ memset(recvdata, 0, 256) ; /*▼▼ メッセージ受信開始(recvsync) ▼▼*/ rtn = dc_mcf_recvsync(action, commform, termnam, resv01, recvdata, &rdataleng, inbufleng, &time, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ メッセージ受信終了(recvsync)▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ダイアログ終了応答送信(TP-END-DIALOGUE) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ sendsync引数設定 (初期化) ★★*/ action = DCMCFEMI ; commform = DCNOFLAGS ; resv01[0] = NULL ; sdataleng = 14 ; resv02[0] = NULL ; opcd = DCNOFLAGS ; wachtime = WAITTIME ; /*★★ senddata clear★★*/ memset(senddata, 0, 256) ; /*★ senddata 設定 ★*/ /*★ 先頭8バイト目までは,MCFが使用する ★*/ senddata[8] = 0x00 ; /* レングス 01 */ senddata[9] = 0x0a ; /* サービスプリミティブの長さ */ strcpy(senddata + 10, "OTP1") ; /* 送信手順(OTP1) */ strcpy(senddata + 14, "EDP ") ; /* サービスプリミティブコード */ senddata[18] = 0x00 ; /* レングス 02 */ senddata[19] = 0x02 ; /* パラメタ(省略) */ senddata[20] = 0x00 ; /* レングス 03 */ senddata[21] = 0x02 ; /* ユーザ情報(省略) */ /*▼▼ メッセージ送信開始(sendsync) ▼▼*/ rtn = dc_mcf_sendsync(action, commform, termnam, resv01, senddata, sdataleng, resv02, opcd, wachtime); /*▲▲ メッセージ送信終了(sendsync) ▲▲*/ ERROR : ; }
(2) ユーザアプリケーションプログラムのコーディング例(全二重でのCOBOL言語)
(a) コンテンション勝者側(SPP)
IDENTIFICATION DIVISION. PROGRAM-ID. SEND01. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 SND-S1. 02 MSG-SNDSYNC PIC X(8) VALUE 'SENDSYNC'. 02 DATA1 PIC X(5). 02 FILLER PIC X(3). 02 DATA2 PIC X(4) VALUE SPACE. 02 DATA3 PIC X(4) VALUE SPACE. 02 DATA4 PIC 9(8). 02 DATA5 PIC 9(8). 02 DATA6 PIC 9(9) COMP VALUE ZERO. 02 SND-S-SEG PIC X(4) VALUE 'EMI '. 02 DATA7 PIC X(4) VALUE SPACE. 02 DATA8 PIC X(4) VALUE SPACE. 02 DATA9 PIC X(4) VALUE SPACE. 02 DATA10 PIC X(8) VALUE SPACE. 02 DATA11 PIC X(4) VALUE SPACE. 02 DATA12 PIC X(8) VALUE SPACE. 02 DATA13 PIC X(4) VALUE SPACE. 02 DATA14 PIC 9(9) COMP VALUE ZERO. 02 DATA15 PIC 9(9) COMP VALUE ZERO. 02 DATA16 PIC X(1) VALUE SPACE. 02 DATA17 PIC X(1) VALUE SPACE. 02 DATA18 PIC X(14) VALUE LOW-VALUE. 01 SND-S2. 02 SEG-CODE PIC X(4) VALUE SPACE. 02 TRM-NAME PIC X(8) VALUE 'otm01 '. 02 DATA19 PIC X(8) VALUE SPACE. 02 DATA20 PIC X(8) VALUE SPACE. 02 DATA21 PIC X(28) VALUE LOW-VALUE. 01 SND-S3. 02 DATA22 PIC 9(9) COMP VALUE 54. 02 DATA23 PIC X(8). 02 SEND-DATA. 03 S-DATA1 PIC X(1) VALUE X'00'. 03 S-DATA2 PIC X(1) VALUE X'0a'. 03 S-DATA3 PIC X(4) VALUE 'OTP1'. 03 S-DATA4 PIC X(4) VALUE 'BDR '. 03 S-DATA5 PIC X(1) VALUE X'00'. 03 S-DATA6 PIC X(1) VALUE X'2a'. 03 S-DATA7 PIC X(1) VALUE X'00'. 03 S-DATA8 PIC X(1) VALUE X'0d'. 03 S-DATA8-1 PIC X(2) VALUE 'PR'. 03 S-DATA9 PIC X(9) VALUE 'SEND_TPSU'. 03 S-DATA10 PIC X(1) VALUE X'00'. 03 S-DATA11 PIC X(1) VALUE X'02'. 03 S-DATA12 PIC X(1) VALUE X'00'. 03 S-DATA13 PIC X(1) VALUE X'0d'. 03 S-DATA13-1 PIC X(2) VALUE 'PR'. 03 S-DATA14 PIC X(9) VALUE 'RECV_TPSU'. 03 S-DATA15 PIC X(1) VALUE X'00'. 03 S-DATA16 PIC X(1) VALUE X'04'. 03 S-DATA17 PIC X(1) VALUE X'48'. 03 S-DATA18 PIC X(1) VALUE X'ff'. 03 S-DATA19 PIC X(1) VALUE X'00'. 03 S-DATA20 PIC X(1) VALUE X'02'. 03 S-DATA21 PIC X(1) VALUE X'00'. 03 S-DATA22 PIC X(1) VALUE X'02'. 03 S-DATA23 PIC X(1) VALUE X'00'. 03 S-DATA24 PIC X(1) VALUE X'04'. 03 S-DATA25 PIC X(2) VALUE 'AL'. 03 S-DATA26 PIC X(1) VALUE X'00'. 03 S-DATA27 PIC X(1) VALUE X'02'. 01 SND-S4. 02 MSG-SNDSYNC PIC X(8) VALUE 'SENDSYNC'. 02 DATA25 PIC X(5). 02 FILLER PIC X(3). 02 DATA26 PIC X(4) VALUE SPACE. 02 DATA27 PIC X(4) VALUE SPACE. 02 DATA28 PIC 9(8). 02 DATA29 PIC 9(8). 02 DATA30 PIC 9(9) COMP VALUE ZERO. 02 SND-S-SEG PIC X(4) VALUE 'EMI '. 02 DATA31 PIC X(4) VALUE SPACE. 02 DATA32 PIC X(4) VALUE SPACE. 02 DATA33 PIC X(4) VALUE SPACE. 02 DATA34 PIC X(8) VALUE SPACE. 02 DATA35 PIC X(4) VALUE SPACE. 02 DATA36 PIC X(8) VALUE SPACE. 02 DATA37 PIC X(4) VALUE SPACE. 02 DATA38 PIC 9(9) COMP VALUE ZERO. 02 DATA39 PIC 9(9) COMP VALUE ZERO. 02 DATA40 PIC X(1) VALUE SPACE. 02 DATA41 PIC X(1) VALUE SPACE. 02 DATA42 PIC X(14) VALUE LOW-VALUE. 01 SND-S5. 02 SEG-CODE PIC X(4) VALUE SPACE. 02 TRM-NAME PIC X(8) VALUE 'otm01 '. 02 DATA43 PIC X(8) VALUE SPACE. 02 DATA44 PIC X(8) VALUE SPACE. 02 DATA45 PIC X(28) VALUE LOW-VALUE. 01 SND-S6. 02 DATA46 PIC 9(9) COMP VALUE 23. 02 DATA48 PIC X(8). 02 SEND-DATA2. 03 S-DATA281 PIC X(1) VALUE X'00'. 03 S-DATA282 PIC X(1) VALUE X'0a'. 03 S-DATA283 PIC X(4) VALUE 'OTP1'. 03 S-DATA284 PIC X(4) VALUE 'TDR '. 03 S-DATA285 PIC X(1) VALUE X'00'. 03 S-DATA286 PIC X(1) VALUE X'02'. 03 S-DATA287 PIC X(1) VALUE X'00'. 03 S-DATA288 PIC X(1) VALUE X'0b'. 03 S-DATA289 PIC X(1) VALUE X'80'. 03 S-DATA290 PIC X(8) VALUE 'USERDATA'. 01 SND-S7. 02 MSG-SNDSYNC PIC X(8) VALUE 'SENDSYNC'. 02 DATA49 PIC X(5). 02 FILLER PIC X(3). 02 DATA50 PIC X(4) VALUE SPACE. 02 DATA51 PIC X(4) VALUE SPACE. 02 DATA52 PIC 9(8). 02 DATA53 PIC 9(8). 02 DATA54 PIC 9(9) COMP VALUE ZERO. 02 SND-S-SEG PIC X(4) VALUE 'EMI '. 02 DATA55 PIC X(4) VALUE SPACE. 02 DATA56 PIC X(4) VALUE SPACE. 02 DATA57 PIC X(4) VALUE SPACE. 02 DATA58 PIC X(8) VALUE SPACE. 02 DATA59 PIC X(4) VALUE SPACE. 02 DATA60 PIC X(8) VALUE SPACE. 02 DATA61 PIC X(4) VALUE SPACE. 02 DATA62 PIC 9(9) COMP VALUE ZERO. 02 DATA63 PIC 9(9) COMP VALUE ZERO. 02 DATA64 PIC X(1) VALUE SPACE. 02 DATA65 PIC X(1) VALUE SPACE. 02 DATA66 PIC X(14) VALUE LOW-VALUE. 01 SND-S8. 02 SEG-CODE PIC X(4) VALUE SPACE. 02 TRM-NAME PIC X(8) VALUE 'otm01 '. 02 DATA67 PIC X(8) VALUE SPACE. 02 DATA68 PIC X(8) VALUE SPACE. 02 DATA69 PIC X(28) VALUE LOW-VALUE. 01 SND-S9. 02 DATA70 PIC 9(9) COMP VALUE 14. 02 DATA71 PIC X(8). 02 SEND-DATA3. 03 S-DATA29 PIC X(1) VALUE X'00'. 03 S-DATA30 PIC X(1) VALUE X'0a'. 03 S-DATA31 PIC X(4) VALUE 'OTP1'. 03 S-DATA32 PIC X(4) VALUE 'HSP '. 03 S-DATA33 PIC X(1) VALUE X'00'. 03 S-DATA34 PIC X(1) VALUE X'02'. 03 S-DATA35 PIC X(1) VALUE X'00'. 03 S-DATA36 PIC X(1) VALUE X'02'. 01 RCV-S1. 02 MSG-RCVSYNC PIC X(8) VALUE 'RECVSYNC'. 02 DATA73 PIC X(5). 02 FILLER PIC X(3). 02 RCV-S-SEG PIC X(4) VALUE 'FRST'. 02 DATA74 PIC X(4) VALUE SPACE. 02 DATA75 PIC 9(8). 02 DATA76 PIC 9(8). 02 RCV-S-LEG PIC 9(9) COMP VALUE 256. 02 DATA77 PIC X(4) VALUE SPACE. 02 DATA78 PIC X(4) VALUE SPACE. 02 DATA79 PIC X(4) VALUE SPACE. 02 DATA80 PIC X(4) VALUE SPACE. 02 DATA81 PIC X(8) VALUE SPACE. 02 DATA82 PIC X(4) VALUE SPACE. 02 DATA83 PIC X(8) VALUE SPACE. 02 DATA84 PIC X(4) VALUE SPACE. 02 DATA85 PIC 9(9) COMP VALUE ZERO. 02 DATA86 PIC 9(9) COMP VALUE ZERO. 02 DATA87 PIC X(1) VALUE SPACE. 02 DATA88 PIC X(1) VALUE SPACE. 02 DATA89 PIC X(14) VALUE LOW-VALUE. 01 RCV-S2. 02 DATA90 PIC X(4) VALUE SPACE. 02 TRM-NAME PIC X(8) VALUE 'otm01 '. 02 DATA92 PIC X(8) VALUE SPACE. 02 DATA93 PIC X(8) VALUE SPACE. 02 DATA94 PIC X(28) VALUE LOW-VALUE. 01 RCV-S3. 02 DATA95 PIC 9(9) COMP. 02 DATA96 PIC X(8). 02 DATA97 PIC X(1024). 01 SND-RCV1. 02 MSG-SNDRCV PIC X(8) VALUE 'SENDRECV'. 02 DATA101 PIC X(5). 02 FILLER PIC X(3). 02 DATA102 PIC X(4) VALUE SPACE. 02 DATA103 PIC X(4) VALUE SPACE. 02 DATA104 PIC 9(8). 02 DATA105 PIC 9(8). 02 SND-RCV-LEG PIC 9(9) COMP VALUE 256. 02 SND-RCV-SEG PIC X(4) VALUE 'EMI '. 02 DATA106 PIC X(4) VALUE SPACE. 02 DATA107 PIC X(4) VALUE SPACE. 02 DATA108 PIC X(4) VALUE SPACE. 02 DATA109 PIC X(8) VALUE SPACE. 02 DATA110 PIC X(4) VALUE SPACE. 02 DATA111 PIC X(8) VALUE SPACE. 02 DATA112 PIC X(4) VALUE SPACE. 02 PRO-CD PIC 9(9) COMP VALUE ZERO. 02 DATA113 PIC 9(9) COMP VALUE ZERO. 02 DATA113-1 PIC X(1) VALUE SPACE. 02 DATA113-2 PIC X(1) VALUE SPACE. 02 DATA114 PIC X(14) VALUE LOW-VALUE. 01 SND-RCV2. 02 MSG PIC X(4) VALUE 'IO '. 02 TRM-NAME PIC X(8) VALUE 'otm01 '. 02 DATA115 PIC X(8) VALUE SPACE. 02 DATA116 PIC X(8) VALUE SPACE. 02 DATA117 PIC X(28) VALUE LOW-VALUE. 01 SND-RCV3. 02 MSG-SEG-LEG PIC 9(9) COMP VALUE 18. 02 DATA119 PIC X(8). 02 SNDRCV-DATA. 03 SR-DATA1 PIC X(1) VALUE X'00'. 03 SR-DATA2 PIC X(1) VALUE X'0a'. 03 SR-DATA3 PIC X(4) VALUE 'OTP1'. 03 SR-DATA4 PIC X(4) VALUE 'EDR '. 03 SR-DATA5 PIC X(1) VALUE X'00'. 03 SR-DATA6 PIC X(1) VALUE X'06'. 03 SR-DATA7 PIC X(1) VALUE X'00'. 03 SR-DATA8 PIC X(1) VALUE X'04'. 03 SR-DATA9 PIC X(2) VALUE 'TR'. 03 SR-DATA10 PIC X(1) VALUE X'00'. 03 SR-DATA11 PIC X(1) VALUE X'02'. 01 SND-RCV4. 02 DATA120 PIC 9(9) COMP. 02 DATA121-1 PIC X(7) VALUE SPACE. 02 DATA121-2 PIC X(1). 02 DATA123 PIC X(248). PROCEDURE DIVISION. CALL 'CBLDCMCF' USING SND-S1 SND-S2 SND-S3. CALL 'CBLDCMCF' USING RCV-S1 RCV-S2 RCV-S3. CALL 'CBLDCMCF' USING SND-S4 SND-S5 SND-S6. CALL 'CBLDCMCF' USING RCV-S1 RCV-S2 RCV-S3. CALL 'CBLDCMCF' USING SND-S7 SND-S8 SND-S9. CALL 'CBLDCMCF' USING SND-RCV1 SND-RCV2 SND-RCV3 SND-RCV4. EXIT PROGRAM.
(b) コンテンション敗者側(MHP)
IDENTIFICATION DIVISION. PROGRAM-ID. RECV01. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 RCV1. 02 MSG-RCV PIC X(8) VALUE 'RECEIVE '. 02 DATA1 PIC X(5). 02 FILLER PIC X(3). 02 SEG-CODE PIC X(4) VALUE 'FRST'. 02 DATA2 PIC X(4) VALUE SPACE. 02 DATA3 PIC 9(8). 02 DATA4 PIC 9(8). 02 SEG-LENG PIC 9(9) COMP VALUE 256. 02 DATA5 PIC X(4) VALUE SPACE. 02 DATA6 PIC X(4) VALUE SPACE. 02 DATA7 PIC X(4) VALUE SPACE. 02 DATA8 PIC X(4) VALUE SPACE. 02 DATA9 PIC X(8) VALUE SPACE. 02 DATA10 PIC X(4) VALUE SPACE. 02 DATA11 PIC X(8) VALUE SPACE. 02 DATA12 PIC X(4) VALUE SPACE. 02 DATA13 PIC 9(9) COMP VALUE ZERO. 02 DATA13-1 PIC 9(9) COMP VALUE ZERO. 02 DATA13-2 PIC X(1) VALUE SPACE. 02 DATA13-3 PIC X(1) VALUE SPACE. 02 DATA14 PIC X(14) VALUE LOW-VALUE. 01 RCV2. 02 DATA15 PIC X(4) VALUE SPACE. 02 RCV-TRM-NAM PIC X(8). 02 DATA17 PIC X(8) VALUE SPACE. 02 DATA18 PIC X(8) VALUE SPACE. 02 DATA20 PIC X(28) VALUE LOW-VALUE. 01 RCV3. 02 DATA21 PIC 9(9) COMP. 02 DATA22 PIC X(8). 02 DATA23 PIC X(1024). 01 SND1. 02 MSG-SNDSYNC PIC X(8) VALUE 'SENDSYNC'. 02 DATA24 PIC X(5). 02 FILLER PIC X(3). 02 DATA25 PIC X(4) VALUE SPACE. 02 DATA26 PIC X(4) VALUE SPACE. 02 DATA27 PIC 9(8). 02 DATA28 PIC 9(8). 02 DATA29 PIC 9(9) COMP VALUE ZERO. 02 SND-S-SEG PIC X(4) VALUE 'EMI '. 02 DATA30 PIC X(4) VALUE SPACE. 02 DATA31 PIC X(4) VALUE SPACE. 02 DATA32 PIC X(4) VALUE SPACE. 02 DATA33 PIC X(8) VALUE SPACE. 02 DATA34 PIC X(4) VALUE SPACE. 02 DATA35 PIC X(8) VALUE SPACE. 02 DATA36 PIC X(4) VALUE SPACE. 02 DATA37 PIC 9(9) COMP VALUE ZERO. 02 DATA38 PIC 9(9) COMP VALUE ZERO. 02 DATA39 PIC X(1) VALUE SPACE. 02 DATA40 PIC X(1) VALUE SPACE. 02 DATA41 PIC X(14) VALUE LOW-VALUE. 01 SND2. 02 SEG-CODE PIC X(4) VALUE SPACE. 02 S2-TRM-NAM PIC X(8). 02 DATA42 PIC X(8) VALUE SPACE. 02 DATA43 PIC X(8) VALUE SPACE. 02 DATA44 PIC X(28) VALUE LOW-VALUE. 01 SND3. 02 DATA45 PIC 9(9) COMP VALUE 18. 02 DATA46 PIC X(8). 02 SEND-DATA. 03 S-DATA1 PIC X(1) VALUE X'00'. 03 S-DATA2 PIC X(1) VALUE X'0a'. 03 S-DATA3 PIC X(4) VALUE 'OTP1'. 03 S-DATA4 PIC X(4) VALUE 'BDPA'. 03 S-DATA5 PIC X(1) VALUE X'00'. 03 S-DATA6 PIC X(1) VALUE X'06'. 03 S-DATA7 PIC X(1) VALUE X'00'. 03 S-DATA8 PIC X(1) VALUE X'04'. 03 S-DATA9 PIC X(2) VALUE 'AC'. 03 S-DATA10 PIC X(1) VALUE X'00'. 03 S-DATA11 PIC X(1) VALUE X'02'. 01 RCV-S1. 02 MSG-RCVSYNC PIC X(8) VALUE 'RECVSYNC'. 02 DATA48 PIC X(5). 02 FILLER PIC X(3). 02 RCV-S-SEG PIC X(4) VALUE 'FRST'. 02 DATA49 PIC X(4) VALUE SPACE. 02 DATA50 PIC 9(8). 02 DATA51 PIC 9(8). 02 RCV-S-LEG PIC 9(9) COMP VALUE 256. 02 DATA52 PIC X(4) VALUE SPACE. 02 DATA53 PIC X(4) VALUE SPACE. 02 DATA54 PIC X(4) VALUE SPACE. 02 DATA55 PIC X(4) VALUE SPACE. 02 DATA56 PIC X(8) VALUE SPACE. 02 DATA57 PIC X(4) VALUE SPACE. 02 DATA58 PIC X(8) VALUE SPACE. 02 DATA59 PIC X(4) VALUE SPACE. 02 DATA60 PIC 9(9) COMP VALUE ZERO. 02 DATA61 PIC 9(9) COMP VALUE ZERO. 02 DATA62 PIC X(1) VALUE SPACE. 02 DATA63 PIC X(1) VALUE SPACE. 02 DATA64 PIC X(14) VALUE LOW-VALUE. 01 RCV-S2. 02 DATA65 PIC X(4) VALUE SPACE. 02 R2-TRM-NAM PIC X(8). 02 DATA67 PIC X(8) VALUE SPACE. 02 DATA68 PIC X(8) VALUE SPACE. 02 DATA69 PIC X(28) VALUE LOW-VALUE. 01 RCV-S3. 02 DATA70 PIC 9(9) COMP. 02 DATA71 PIC X(8). 02 DATA72 PIC X(1024). 01 SND-RCV1. 02 MSG-SNDRCV PIC X(8) VALUE 'SENDRECV'. 02 DATA76 PIC X(5). 02 FILLER PIC X(3). 02 DATA77 PIC X(4) VALUE SPACE. 02 DATA78 PIC X(4) VALUE SPACE. 02 DATA79 PIC 9(8). 02 DATA80 PIC 9(8). 02 SND-RCV-LEG PIC 9(9) COMP VALUE 256. 02 SND-RCV-SEG PIC X(4) VALUE 'EMI '. 02 DATA81 PIC X(4) VALUE SPACE. 02 DATA82 PIC X(4) VALUE SPACE. 02 DATA83 PIC X(4) VALUE SPACE. 02 DATA84 PIC X(8) VALUE SPACE. 02 DATA85 PIC X(4) VALUE SPACE. 02 DATA86 PIC X(8) VALUE SPACE. 02 DATA87 PIC X(4) VALUE SPACE. 02 PRO-CD PIC 9(9) COMP VALUE ZERO. 02 DATA88 PIC 9(9) COMP VALUE ZERO. 02 DATA88-1 PIC X(1) VALUE SPACE. 02 DATA88-2 PIC X(1) VALUE SPACE. 02 DATA89 PIC X(14) VALUE LOW-VALUE. 01 SND-RCV2. 02 MSG PIC X(4) VALUE 'IO '. 02 SR-TRM-NAM PIC X(8). 02 DATA90 PIC X(8) VALUE SPACE. 02 DATA91 PIC X(8) VALUE SPACE. 02 DATA92 PIC X(28) VALUE LOW-VALUE. 01 SND-RCV3. 02 MSG-SEG-LEG PIC 9(9) COMP VALUE 18. 02 DATA94 PIC X(8). 02 SNDRCV-DATA. 03 SR-DATA1 PIC X(1) VALUE X'00'. 03 SR-DATA2 PIC X(1) VALUE X'0a'. 03 SR-DATA3 PIC X(4) VALUE 'OTP1'. 03 SR-DATA4 PIC X(4) VALUE 'HSR '. 03 SR-DATA5 PIC X(1) VALUE X'00'. 03 SR-DATA6 PIC X(1) VALUE X'06'. 03 SR-DATA7 PIC X(1) VALUE X'00'. 03 SR-DATA8 PIC X(1) VALUE X'04'. 03 SR-DATA9 PIC X(2) VALUE 'NR'. 03 SR-DATA10 PIC X(1) VALUE X'00'. 03 SR-DATA11 PIC X(1) VALUE X'02'. 01 SND-RCV4. 02 DATA95 PIC 9(9) COMP. 02 DATA96-1 PIC X(7) VALUE SPACE. 02 DATA96-2 PIC X(1). 02 DATA98 PIC X(248). 01 SND4. 02 MSG-SNDSYNC PIC X(8) VALUE 'SENDSYNC'. 02 DATA100 PIC X(5). 02 FILLER PIC X(3). 02 DATA101 PIC X(4) VALUE SPACE. 02 DATA102 PIC X(4) VALUE SPACE. 02 DATA103 PIC 9(8). 02 DATA104 PIC 9(8). 02 DATA105 PIC 9(9) COMP VALUE ZERO. 02 SND-S-SEG PIC X(4) VALUE 'EMI '. 02 DATA106 PIC X(4) VALUE SPACE. 02 DATA107 PIC X(4) VALUE SPACE. 02 DATA108 PIC X(4) VALUE SPACE. 02 DATA109 PIC X(8) VALUE SPACE. 02 DATA110 PIC X(4) VALUE SPACE. 02 DATA111 PIC X(8) VALUE SPACE. 02 DATA112 PIC X(4) VALUE SPACE. 02 DATA113 PIC 9(9) COMP VALUE ZERO. 02 DATA114 PIC 9(9) COMP VALUE ZERO. 02 DATA115 PIC X(1) VALUE SPACE. 02 DATA116 PIC X(1) VALUE SPACE. 02 DATA117 PIC X(14) VALUE LOW-VALUE. 01 SND5. 02 SEG-CODE PIC X(4) VALUE SPACE. 02 S5-TRM-NAM PIC X(8). 02 DATA120 PIC X(8) VALUE SPACE. 02 DATA121 PIC X(8) VALUE SPACE. 02 DATA122 PIC X(28) VALUE LOW-VALUE. 01 SND6. 02 DATA123 PIC 9(9) COMP VALUE 14. 02 DATA124 PIC X(8). 02 SEND-DATA. 03 S-DATA11 PIC X(1) VALUE X'00'. 03 S-DATA12 PIC X(1) VALUE X'0a'. 03 S-DATA13 PIC X(4) VALUE 'OTP1'. 03 S-DATA14 PIC X(4) VALUE 'EDP '. 03 S-DATA15 PIC X(1) VALUE X'00'. 03 S-DATA16 PIC X(1) VALUE X'02'. 03 S-DATA17 PIC X(1) VALUE X'00'. 03 S-DATA18 PIC X(1) VALUE X'02'. PROCEDURE DIVISION. CALL 'CBLDCMCF' USING RCV1 RCV2 RCV3. MOVE RCV-TRM-NAM TO S2-TRM-NAM. CALL 'CBLDCMCF' USING SND1 SND2 SND3. MOVE RCV-TRM-NAM TO R2-TRM-NAM. CALL 'CBLDCMCF' USING RCV-S1 RCV-S2 RCV-S3. MOVE RCV-TRM-NAM TO SR-TRM-NAM. CALL 'CBLDCMCF' USING SND-RCV1 SND-RCV2 SND-RCV3 SND-RCV4. MOVE RCV-TRM-NAM TO R2-TRM-NAM. CALL 'CBLDCMCF' USING RCV-S1 RCV-S2 RCV-S3. MOVE RCV-TRM-NAM TO S5-TRM-NAM. CALL 'CBLDCMCF' USING SND4 SND5 SND6. EXIT PROGRAM.
(3) ユーザアプリケーションプログラムのコーディング例(全二重でのデータ操作言語)
(a) コンテンション勝者側(SPP)
* ************************************************************** * SPPサービスプログラム * ************************************************************** * IDENTIFICATION DIVISION. PROGRAM-ID. SEND01. ENVIRONMENT DIVISION. CONFIGURATION SECTION. * ワーク変数 * DATA DIVISION. WORKING-STORAGE SECTION. * ダイアログ開始要求送信領域 * 01 SEND-AREA1. 02 SE-DATALENG1 PIC 9(4) COMP VALUE 58. 02 SE-RSV1 PIC X(2). 02 SE-DATA1. 03 S1-DATA1 PIC X(1) VALUE X'00'. 03 S1-DATA2 PIC X(1) VALUE X'0a'. 03 S1-DATA3 PIC X(4) VALUE 'OTP1'. 03 S1-DATA4 PIC X(4) VALUE 'BDR '. 03 S1-DATA5 PIC X(1) VALUE X'00'. 03 S1-DATA6 PIC X(1) VALUE X'2a'. 03 S1-DATA7 PIC X(1) VALUE X'00'. 03 S1-DATA8 PIC X(1) VALUE X'0d'. 03 S1-DATA8-1 PIC X(2) VALUE 'PR'. 03 S1-DATA9 PIC X(9) VALUE 'SEND_TPSU'. 03 S1-DATA10 PIC X(1) VALUE X'00'. 03 S1-DATA11 PIC X(1) VALUE X'02'. 03 S1-DATA12 PIC X(1) VALUE X'00'. 03 S1-DATA13 PIC X(1) VALUE X'0d'. 03 S1-DATA13-1 PIC X(2) VALUE 'PR'. 03 S1-DATA14 PIC X(9) VALUE 'RECV_TPSU'. 03 S1-DATA15 PIC X(1) VALUE X'00'. 03 S1-DATA16 PIC X(1) VALUE X'04'. 03 S1-DATA17 PIC X(1) VALUE X'48'. 03 S1-DATA18 PIC X(1) VALUE X'ff'. 03 S1-DATA19 PIC X(1) VALUE X'00'. 03 S1-DATA20 PIC X(1) VALUE X'02'. 03 S1-DATA21 PIC X(1) VALUE X'00'. 03 S1-DATA22 PIC X(1) VALUE X'02'. 03 S1-DATA23 PIC X(1) VALUE X'00'. 03 S1-DATA24 PIC X(1) VALUE X'04'. 03 S1-DATA25 PIC X(2) VALUE 'AL'. 03 S1-DATA26 PIC X(1) VALUE X'00'. 03 S1-DATA27 PIC X(1) VALUE X'02'. * ダイアログ開始応答受信領域 * 01 RECV-AREA1. 02 RE-DATALENG1 PIC 9(4) COMP VALUE 1028. 02 RE-RSV1 PIC X(2). 02 RE-DATA1 PIC X(1024). * データ転送要求送信領域 * 01 SEND-AREA2. 02 SE-DATALENG2 PIC 9(4) COMP VALUE 27. 02 SE-RSV2 PIC X(2). 02 SE-DATA2. 03 S2-DATA1 PIC X(1) VALUE X'00'. 03 S2-DATA2 PIC X(1) VALUE X'0a'. 03 S2-DATA3 PIC X(4) VALUE 'OTP1'. 03 S2-DATA4 PIC X(4) VALUE 'TDR '. 03 S2-DATA5 PIC X(1) VALUE X'00'. 03 S2-DATA6 PIC X(1) VALUE X'02'. 03 S2-DATA7 PIC X(1) VALUE X'00'. 03 S2-DATA8 PIC X(1) VALUE X'0b'. 03 S2-DATA9 PIC X(1) VALUE X'80'. 03 S2-DATA10 PIC X(8) VALUE 'USERDATA'. * ハンドシェイク指示受信領域 * 01 RECV-AREA2. 02 RE-DATALENG2 PIC 9(4) COMP VALUE 1028. 02 RE-RSV2 PIC X(2). 02 RE-DATA2 PIC X(1024). * ハンドシェイク応答送信領域 * 01 SEND-AREA3. 02 SE-DATALENG3 PIC 9(4) COMP VALUE 18. 02 SE-RSV3 PIC X(2). 02 SE-DATA3. 03 S3-DATA1 PIC X(1) VALUE X'00'. 03 S3-DATA2 PIC X(1) VALUE X'0a'. 03 S3-DATA3 PIC X(4) VALUE 'OTP1'. 03 S3-DATA4 PIC X(4) VALUE 'HSP '. 03 S3-DATA5 PIC X(1) VALUE X'00'. 03 S3-DATA6 PIC X(1) VALUE X'02'. 03 S3-DATA7 PIC X(1) VALUE X'00'. 03 S3-DATA8 PIC X(1) VALUE X'02'. * ダイアログ終了要求送信領域 * 01 SEND-AREA4. 02 SE-DATALENG4 PIC 9(4) COMP VALUE 22. 02 SE-RSV4 PIC X(2). 02 SE-DATA4. 03 S4-DATA1 PIC X(1) VALUE X'00'. 03 S4-DATA2 PIC X(1) VALUE X'0a'. 03 S4-DATA3 PIC X(4) VALUE 'OTP1'. 03 S4-DATA4 PIC X(4) VALUE 'EDR '. 03 S4-DATA5 PIC X(1) VALUE X'00'. 03 S4-DATA6 PIC X(1) VALUE X'06'. 03 S4-DATA7 PIC X(1) VALUE X'00'. 03 S4-DATA8 PIC X(1) VALUE X'04'. 03 S4-DATA9 PIC X(2) VALUE 'TR'. 03 S4-DATA10 PIC X(1) VALUE X'00'. 03 S4-DATA11 PIC X(1) VALUE X'02'. * ダイアログ終了確認受信領域 * 01 RECV-AREA3. 02 RE-DATALENG3 PIC 9(4) COMP VALUE 1028. 02 RE-RSV3 PIC X(2). 02 RE-DATA3 PIC X(1024). * 通信記述項 * COMMUNICATION SECTION. * ダイアログ開始要求の送信 * CD SEND-OT1 FOR I-O STATUS KEY IS SE-STATUS1 SYMBOLIC TERMINAL IS SE-TERMNAM1 SYNCHRONOUS MODE IS SYNC. * ダイアログ開始指示の受信 * CD RECV-IN1 FOR I-O STATUS KEY IS RE-STATUS1 SYMBOLIC TERMINAL IS RE-TERMNAM1 MESSAGE DATE IS RE-DATE1 MESSAGE TIME IS RE-TIME1 SYNCHRONOUS MODE IS SYNC WAITING TIME IS RE-WAIT1. * データ転送要求の送信 * CD SEND-OT2 FOR I-O STATUS KEY IS SE-STATUS2 SYMBOLIC TERMINAL IS SE-TERMNAM2 SYNCHRONOUS MODE IS SYNC. * ハンドシェイク指示の受信 * CD RECV-IN2 FOR I-O STATUS KEY IS RE-STATUS2 SYMBOLIC TERMINAL IS RE-TERMNAM2 MESSAGE DATE IS RE-DATE2 MESSAGE TIME IS RE-TIME2 SYNCHRONOUS MODE IS SYNC WAITING TIME IS RE-WAIT2. * ハンドシェイク応答の送信 * CD SEND-OT3 FOR I-O STATUS KEY IS SE-STATUS3 SYMBOLIC TERMINAL IS SE-TERMNAM3 SYNCRONOUS MODE IS SYNC. * ダイアログ終了要求の送信 * CD SEND-OT4 FOR I-O STATUS KEY IS SE-STATUS4 SYMBOLIC TERMINAL IS SE-TERMNAM4. * ダイアログ終了確認の受信 * CD RECV-IN3 FOR I-O STATUS KEY IS RE-STATUS3 SYMBOLIC TERMINAL IS RE-TERMNAM3 MESSAGE DATE IS RE-DATE3 MESSAGE TIME IS RE-TIME3 SYNCHRONOUS MODE IS SYNC WAITING TIME IS RE-WAIT3. * 通信文 * PROCEDURE DIVISION. * ダイアログ開始要求の送信 * MOVE 'otm01' TO SE-TERMNAM1. SEND SEND-OT1 FROM SEND-AREA1. * ダイアログ開始確認の受信 * MOVE 'otm01' TO RE-TERMNAM1. MOVE '00010000' TO RE-WAIT1. RECEIVE RECV-IN1 SEGMENT INTO RECV-AREA1. * データ転送要求の送信 * MOVE 'otm01' TO SE-TERMNAM2. SEND SEND-OT2 FROM SEND-AREA2. * ハンドシェイク指示の受信 * MOVE 'otm01' TO RE-TERMNAM2. MOVE '00010000' TO RE-WAIT2. RECEIVE RECV-IN2 SEGMENT INTO RECV-AREA2. * ハンドシェイク応答の送信 * MOVE 'otm01' TO SE-TERMNAM3. SEND SEND-OT3 FROM SEND-AREA3. * ダイアログ終了要求の送信 * MOVE 'otm01' TO SE-TERMNAM4. DISABLE SEND-OT4 WITH SEND-AREA4. * ダイアログ終了確認の受信 * MOVE 'otm01' TO RE-TERMNAM3. MOVE '00010000' TO RE-WAIT3. RECEIVE RECV-IN3 SEGMENT INTO RECV-AREA3. * 終了処理 * EXIT PROGRAM.
(b) コンテンション敗者側(MHP)
* ************************************************************** * MHPサービスプログラム * ************************************************************** * IDENTIFICATION DIVISION. PROGRAM-ID. RECV01. ENVIRONMENT DIVISION. CONFIGURATION SECTION. * ワーク変数 * DATA DIVISION. WORKING-STORAGE SECTION. * ダイアログ開始指示受信領域 * 01 RECV-AREA1. 02 RE-DATALENG1 PIC 9(4) COMP VALUE 1028. 02 RE-RSV1 PIC X(2). 02 RE-DATA1 PIC X(1024). * ダイアログ開始応答送信領域 * 01 SEND-AREA1. 02 SE-DATALENG1 PIC 9(4) COMP VALUE 22. 02 SE-RSV1 PIC X(2). 02 SE-DATA1. 03 S1-DATA1 PIC X(1) VALUE X'00'. 03 S1-DATA2 PIC X(1) VALUE X'0a'. 03 S1-DATA3 PIC X(4) VALUE 'OTP1'. 03 S1-DATA4 PIC X(4) VALUE 'BDPA'. 03 S1-DATA5 PIC X(1) VALUE X'00'. 03 S1-DATA6 PIC X(1) VALUE X'06'. 03 S1-DATA7 PIC X(1) VALUE X'00'. 03 S1-DATA8 PIC X(1) VALUE X'04'. 03 S1-DATA9 PIC X(2) VALUE 'AC'. 03 S1-DATA10 PIC X(1) VALUE X'00'. 03 S1-DATA11 PIC X(1) VALUE X'02'. * データ転送指示受信領域 * 01 RECV-AREA2. 02 RE-DATALENG2 PIC 9(4) COMP VALUE 1028. 02 RE-RSV2 PIC X(2). 02 RE-DATA2 PIC X(1024). * ハンドシェイク要求送信領域 * 01 SEND-AREA2. 02 SE-DATALENG2 PIC 9(4) COMP VALUE 22. 02 SE-RSV2 PIC X(2). 02 SE-DATA2. 03 S2-DATA1 PIC X(1) VALUE X'00'. 03 S2-DATA2 PIC X(1) VALUE X'0a'. 03 S2-DATA3 PIC X(4) VALUE 'OTP1'. 03 S2-DATA4 PIC X(4) VALUE 'HSR '. 03 S2-DATA5 PIC X(1) VALUE X'00'. 03 S2-DATA6 PIC X(1) VALUE X'06'. 03 S2-DATA7 PIC X(1) VALUE X'00'. 03 S2-DATA8 PIC X(1) VALUE X'04'. 03 S2-DATA9 PIC X(2) VALUE 'NR'. 03 S2-DATA10 PIC X(1) VALUE X'00'. 03 S2-DATA11 PIC X(1) VALUE X'02'. * ハンドシェイク確認受信領域 * 01 RECV-AREA3. 02 RE-DATALENG3 PIC 9(4) COMP VALUE 1028. 02 RE-RSV3 PIC X(2). 02 RE-DATA3 PIC X(1024). * ダイアログ終了指示受信領域 * 01 RECV-AREA4. 02 RE-DATALENG4 PIC 9(4) COMP VALUE 1028. 02 RE-RSV4 PIC X(2). 02 RE-DATA4 PIC X(1024). * ダイアログ終了応答送信領域 * 01 SEND-AREA3. 02 SE-DATALENG3 PIC 9(4) COMP VALUE 18. 02 SE-RSV3 PIC X(2). 02 SE-DATA3. 03 S3-DATA1 PIC X(1) VALUE X'00'. 03 S3-DATA2 PIC X(1) VALUE X'0a'. 03 S3-DATA3 PIC X(4) VALUE 'OTP1'. 03 S3-DATA4 PIC X(4) VALUE 'EDP '. 03 S3-DATA5 PIC X(1) VALUE X'00'. 03 S3-DATA6 PIC X(1) VALUE X'02'. 03 S3-DATA7 PIC X(1) VALUE X'00'. 03 S3-DATA8 PIC X(1) VALUE X'02'. * 通信記述項 * COMMUNICATION SECTION. * ダイアログ開始要求の受信 * CD RECV-IN1 FOR INPUT STATUS KEY IS RE-STATUS1 SYMBOLIC TERMINAL IS RE-TERMNAM1 MESSAGE DATE IS RE-DATE1 MESSAGE TIME IS RE-TIME1. * ダイアログ開始応答の送信 * CD SEND-OT1 FOR I-O STATUS KEY IS SE-STATUS1 SYMBOLIC TERMINAL IS SE-TERMNAM1 SYNCHRONOUS MODE IS SYNC. * データ転送指示の受信 * CD RECV-IN2 FOR I-O STATUS KEY IS RE-STATUS2 SYMBOLIC TERMINAL IS RE-TERMNAM2 MESSAGE DATE IS RE-DATE2 MESSAGE TIME IS RE-TIME2 SYNCHRONOUS MODE IS SYNC WAITING TIME IS RE-WAIT2. * ハンドシェイク要求の送信 * CD SEND-OT2 FOR I-O STATUS KEY IS SE-STATUS2 SYMBOLIC TERMINAL IS SE-TERMNAM2 SYNCHRONOUS MODE IS SYNC. * ハンドシェイク確認の受信 * CD RECV-IN3 FOR I-O STATUS KEY IS RE-STATUS3 SYMBOLIC TERMINAL IS RE-TERMNAM3 MESSAGE DATE IS RE-DATE3 MESSAGE TIME IS RE-TIME3 SYNCHRONOUS MODE IS SYNC WAITING TIME IS RE-WAIT3. * ダイアログ終了指示の受信 * CD RECV-IN4 FOR I-O STATUS KEY IS RE-STATUS4 SYMBOLIC TERMINAL IS RE-TERMNAM4 MESSAGE DATE IS RE-DATE4 MESSAGE TIME IS RE-TIME4 SYNCHRONOUS MODE IS SYNC WAITING TIME IS RE-WAIT4. * ダイアログ終了応答の送信 * CD SEND-OT3 FOR I-O STATUS KEY IS SE-STATUS3 SYMBOLIC TERMINAL IS SE-TERMNAM3. * 通信文 * PROCEDURE DIVISION. * ダイアログ開始指示の受信 * RECEIVE RECV-IN1 FIRST SEGMENT INTO RECV-AREA1. * ダイアログ開始応答の送信 * MOVE RE-TERMNAM1 TO SE-TERMNAM1. SEND SEND-OT1 FROM SEND-AREA1. * データ転送指示の受信 * MOVE RE-TERMNAM1 TO RE-TERMNAM2. MOVE '00010000' TO RE-WAIT2. RECEIVE RECV-IN2 SEGMENT INTO RECV-AREA2. * ハンドシェイク要求の送信 * MOVE RE-TERMNAM1 TO SE-TERMNAM2. SEND SEND-OT2 FROM SEND-AREA2. * ハンドシェイク確認の受信 * MOVE RE-TERMNAM1 TO RE-TERMNAM3. MOVE '00010000' TO RE-WAIT3. RECEIVE RECV-IN3 SEGMENT INTO RECV-AREA3. * ダイアログ終了指示の受信 * MOVE RE-TERMNAM1 TO RE-TERMNAM4. MOVE '00010000' TO RE-WAIT4. RECEIVE RECV-IN4 SEGMENT INTO RECV-AREA4. * ダイアログ終了応答の送信 * MOVE RE-TERMNAM1 TO SE-TERMNAM3. DISABLE SEND-OT3 WITH SEND-AREA3. * 終了処理 * EXIT PROGRAM.
(4) ユーザアプリケーションプログラムのコーディング例(半二重でのC言語)
(a) コンテンション勝者側(SPP)
#include <dcmcf.h> #include <string.h> #define WAITTIME 60 void SEND01(in, in_len, out, out_len) char *in ; unsigned DCLONG in_len ; char *out ; unsigned DCLONG out_len ; { /*★★引数定義★★*/ /*引数を使用している関数*/ /* sendsync, recvsync, sendrecv, receive */ DCLONG action ;/* 0 0 0 0 */ DCLONG commform ;/* 0 0 0 0 */ char termnam[16] ;/* 0 0 0 0 */ char resv01[16] ;/* 0 0 0 0 */ char senddata[256] ;/* 0 - 0 - */ DCLONG sdataleng ;/* 0 - 0 - */ char recvdata[256] ;/* - 0 0 0 */ DCLONG rdataleng ;/* - 0 0 0 */ DCLONG time ;/* - 0 0 0 */ DCLONG wachtime ;/* 0 0 0 - */ char resv02[16] ;/* 0 - - - */ DCLONG opcd ;/* 0 - - - */ DCLONG inbufleng ;/* - 0 0 0 */ /*★★変数定義 & 初期化★★*/ int rtn = 0x00 ; /*★★引数初期化★★*/ action = NULL; commform = NULL; memset(termnam, 0, 16) ; memset(resv01, 0, 16) ; memset(senddata, 0, 256); sdataleng = NULL; memset(recvdata, 0, 256); rdataleng = NULL; time = NULL; wachtime = NULL; memset(resv02, 0, 16) ; opcd = NULL; inbufleng = NULL; /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ダイアログ開始要求送信(TP-BEGIN-DIALOGUE) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ sendsync引数設定 (初期化) ★★*/ action = DCMCFEMI ; commform = DCNOFLAGS ; strcpy(termnam, "otm01") ; resv01[0] = NULL ; /* senddataイニシャライズは省略 */ sdataleng = 54 ; resv02[0] = NULL ; opcd = DCNOFLAGS ; wachtime = WAITTIME ; /*★ senddata 設定 ★*/ /*★ 先頭8バイト目までは,MCFが使用する ★*/ senddata[8] = 0x00 ; /* レングス 01 */ senddata[9] = 0x0a ; /* サービスプリミティブの長さ */ strcpy(senddata + 10, "OTP1") ; /* 送信手順(OTP1) */ strcpy(senddata + 14, "BDR ") ; /* サービスプリミティブコード */ /* TP-BEGIN-DIALOGUE req */ senddata[18] = 0x00 ; /* レングス 02 */ senddata[19] = 0x2a ; /* パラメタ全体の長さ */ senddata[20] = 0x00 ; /* レングス 03 */ senddata[21] = 0x0d ; /* 発呼側TPSUタイトルの長さ */ strcpy(senddata + 22, "PR") ; /* 型コード */ strcpy(senddata + 24, "SEND_TPSU"); /* 発呼側TPSUタイトル(パラメタ1) */ senddata[33] = 0x00 ; /* レングス 04 */ senddata[34] = 0x02 ; /* 着呼側AP(パラメタ 2省略) */ senddata[35] = 0x00 ; /* レングス 05 */ senddata[36] = 0x0d ; /* 着呼側TPSUタイトルの長さ */ strcpy(senddata + 37, "PR") ; /* 型コード */ strcpy(senddata + 39, "RECV_TPSU") ; /*着呼側TPSUタイトル(パラメタ3) */ senddata[48] = 0x00 ; /* レングス 06 */ senddata[49] = 0x04 ; /* 予備の長さ */ senddata[50] = 0x88 ; /* 半二重&ハンドシェイク機能単位(パラメタ 4) */ senddata[51] = 0xff ; /* 予備 */ senddata[52] = 0x00 ; /* レングス 07 */ senddata[53] = 0x02 ; /* サービス品質(パラメタ5省略) */ senddata[54] = 0x00 ; /* レングス 08 */ senddata[55] = 0x02 ; /*アプリケーションコンテキスト(パラメタ6省略) */ senddata[56] = 0x00 ; /* レングス 09 */ senddata[57] = 0x04 ; /* 確認項目の長さ */ strcpy(senddata + 58, "AL") ; /* 確認項目 */ /* all(同期型)(パラメタ 7) */ senddata[60] = 0x00 ; /* レングス 10 */ senddata[61] = 0x02 ; /* ユーザ情報(省略) */ /*▼▼ メッセージ送信開始(sendsync) ▼▼*/ rtn = dc_mcf_sendsync(action, commform, termnam, resv01, senddata, sdataleng, resv02, opcd, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ メッセージ送信終了(sendsync) ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ダイアログ開始応答受信(TP-BEGIN-DIALOGUE) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ recvsync引数設定 (初期化) ★★*/ action = DCMCFFRST ; commform = DCNOFLAGS ; resv01[0] = NULL ; /*recvdataイニシャライズは省略*/ rdataleng = NULL ; inbufleng = 256 ; time = NULL ; wachtime = WAITTIME ; /*▼▼ メッセージ受信開始(recvsync) ▼▼*/ rtn = dc_mcf_recvsync(action, commform, termnam, resv01, recvdata, & rdataleng, inbufleng, & time, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ メッセージ受信終了(recvsync) ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ データ送信(TP-DATA) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ sendsync引数設定 (初期化) ★★*/ action = DCMCFEMI ; commform = DCNOFLAGS ; resv01[0] = NULL ; sdataleng = 23 ; resv02[0] = NULL ; opcd = DCNOFLAGS ; wachtime = WAITTIME ; /*★ senddata clear ★*/ memset(senddata, 0, 256) ; /*★ senddata 設定 ★*/ /*★ 先頭8バイト目までは,MCFが使用する ★*/ senddata[8] = 0x00 ; /* レングス 01 */ senddata[9] = 0x0a ; /* サービスプリミティブの長さ */ strcpy(senddata + 10, "OTP1") ; /* 送信手順(OTP1) */ strcpy(senddata + 14, "TDR ") ; /* サービスプリミティブコード */ /* TP-DATA req */ senddata[18] = 0x00 ; /* レングス 02 */ senddata[19] = 0x02 ; /* パラメタ(省略) */ senddata[20] = 0x00 ; /* レングス 03 */ senddata[21] = 0x0b ; /* ユーザ情報の長さ */ senddata[22] = 0x80 ; /* 連結状態 */ strcpy(senddata + 23, "USERDATA") ; /* ユーザデータ */ /*▼▼ データ送信(sendsync)開始 ▼▼*/ rtn = dc_mcf_sendsync(action, commform, termnam, resv01, senddata, sdataleng, resv02, opcd, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ データ送信(sendsync)終了 ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ハンドシェイク&制御権譲渡要求送信 ◆*/ /*◆ (TP-HANDSHAKE-AND-GRANT-CONTROL) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ sendsync引数設定 (初期化) ★★*/ action = DCMCFEMI ; commform = DCNOFLAGS ; resv01[0] = NULL ; sdataleng = 18 ; resv02[0] = NULL ; opcd = DCNOFLAGS ; wachtime = WAITTIME ; memset(senddata, 0, 256); /*★ sendsync 設定 ★*/ /*★ 先頭8バイト目までは,MCFが使用する ★*/ senddata[8] = 0x00 ; /* レングス 01 */ senddata[9] = 0x0a ; /* サービスプリミティブの長さ */ strcpy(senddata + 10, "OTP1") ; /* 送信手順(OTP1) */ strcpy(senddata + 14, "HGR ") ; /* サービスプリミティブコード */ /* TP-HANDSHAKE-AND- */ /* GRANT-CONTROL req */ senddata[18] = 0x00 ; /* レングス 02 */ senddata[19] = 0x06 ; /* パラメタ全体の長さ */ senddata[20] = 0x00 ; /* レングス 03 */ senddata[21] = 0x04 ; /* 即時確認の長さ */ strcpy(senddata+22, "UR") ; /* 即時確認(パラメタ 1) */ senddata[24] = 0x00 ; /* レングス 04 */ senddata[25] = 0x02 ; /* ユーザ情報(省略) */ /*▼▼ メッセージ送信開始(sendsync) ▼▼*/ rtn = dc_mcf_sendsync(action, commform, termnam, resv01, senddata, sdataleng, resv02, opcd, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ メッセージ送信終了(sendsync) ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ハンドシェイク&制御権譲渡応答受信 ◆*/ /*◆ (TP-HANDSHAKE-AND-GRANT-CONTROL) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ recvsync引数設定 (初期化) ★★*/ action = DCMCFFRST ; commform = DCNOFLAGS ; resv01[0] = NULL ; /*recvdataイニシャライズは省略*/ rdataleng = NULL ; inbufleng = 256 ; time = NULL ; wachtime = WAITTIME ; memset(senddata, 0, 256); /*▼▼ メッセージ受信開始(recvsync) ▼▼*/ rtn = dc_mcf_recvsync(action, commform, termnam, resv01, recvdata, & rdataleng, inbufleng, & time, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ メッセージ受信終了(recvsync) ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ TP_DATA受信(TP-DATA) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ recvsync引数設定 (初期化) ★★*/ action = DCMCFFRST ; commform = DCNOFLAGS ; resv01[0] = NULL ; rdataleng = NULL ; inbufleng = 256 ; time = NULL ; wachtime = WAITTIME ; /*★★ recvdata clear ★★*/ memset(recvdata, 0, 256) ; /*▼▼ データ受信開始(recvsync) ▼▼*/ rtn = dc_mcf_recvsync(action, commform, termnam, resv01, recvdata, & rdataleng, inbufleng, & time, wachtime ); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ データ受信終了(recvsync) ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ダイアログ終了要求受信(TP-END-DIALOGUE) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ recvsync引数設定 (初期化) ★★*/ action = DCMCFFRST ; commform = DCNOFLAGS ; resv01[0] = NULL ; rdataleng = NULL ; inbufleng = 256 ; time = NULL ; wachtime = WAITTIME ; /*★★ recvdata clear★★*/ memset(recvdata, 0, 256) ; /*▼▼ メッセージ受信開始(recvsync) ▼▼*/ rtn = dc_mcf_recvsync(action, commform, termnam, resv01, recvdata, & rdataleng, inbufleng, & time, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ メッセージ受信終了(recvsync)▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ダイアログ終了応答送信(TP-END-DIALOGUE) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ sendsync引数設定 (初期化) ★★*/ action = DCMCFEMI ; commform = DCNOFLAGS ; resv01[0] = NULL ; sdataleng = 14 ; resv02[0] = NULL ; opcd = DCNOFLAGS ; wachtime = WAITTIME ; /*★★ senddata clear★★*/ memset(senddata, 0, 256) ; /*★ senddata 設定 ★*/ /*★ 先頭8バイト目までは,MCFが使用する ★*/ senddata[8] = 0x00 ; /* レングス 01 */ senddata[9] = 0x0a ; /* サービスプリミティブの長さ */ strcpy(senddata + 10, "OTP1") ; /* 送信手順(OTP1) */ strcpy(senddata + 14, "EDP ") ; /* サービスプリミティブコード */ /* TP-END-DIALOGUE rsp */ senddata[18] = 0x00 ; /* レングス 02 */ senddata[19] = 0x02 ; /* パラメタ(省略) */ senddata[20] = 0x00 ; /* レングス 03 */ senddata[21] = 0x02 ; /* ユーザ情報(省略) */ /*▼▼ メッセージ送信開始(sendsync) ▼▼*/ rtn = dc_mcf_sendsync(action, commform, termnam, resv01, senddata, sdataleng, resv02, opcd, wachtime); /*▲▲ メッセージ送信終了(sendsync) ▲▲*/ ERROR : ; }
(b) コンテンション敗者側(MHP)
#include <dcmcf.h> #include <string.h> #define WAITTIME 60 void RECV01(in, in_len, out, out_len) char *in ; unsigned DCLONG in_len ; char *out ; unsigned DCLONG out_len ; { /*★★引数定義★★*/ /*引数を使用している関数*/ /* sendsync, recvsync, sendrecv, receive */ DCLONG action ;/* 0 0 0 0 */ DCLONG commform ;/* 0 0 0 0 */ char termnam[16] ;/* 0 0 0 0 */ char resv01[16] ;/* 0 0 0 0 */ char senddata[256] ;/* 0 - 0 - */ DCLONG sdataleng ;/* 0 - 0 - */ char recvdata[256] ;/* - 0 0 0 */ DCLONG rdataleng ;/* - 0 0 0 */ DCLONG time ;/* - 0 0 0 */ DCLONG wachtime ;/* 0 0 0 - */ char resv02[16] ;/* 0 - - - */ DCLONG opcd ;/* 0 - - - */ DCLONG inbufleng ;/* - 0 0 0 */ /*★★変数定義 & 初期化★★*/ int rtn = NULL ; /*★★引数初期化★★*/ action = NULL; commform = NULL; memset(termnam, 0, 16) ; memset(resv01, 0, 16) ; memset(recvdata, 0, 256); sdataleng = NULL; memset(recvdata, 0, 256); rdataleng = NULL; time = NULL; wachtime = NULL; memset(resv02, 0, 16) ; opcd = NULL; inbufleng = NULL; /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ダイアログ開始要求受信(TP-BEGIN-DIALOGUE) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ receive引数設定 (初期化) ★★*/ action = DCMCFFRST ; commform = DCNOFLAGS ; termnam[0] = NULL ; /*recvdataイニシャライズは省略*/ resv01[0] = NULL ; rdataleng = NULL ; inbufleng = 256 ; time = NULL ; /*▼▼ ダイアログ開始要求受信開始(receive) ▼▼*/ rtn = dc_mcf_receive(action, commform, termnam, resv01, recvdata, & rdataleng, inbufleng, & time); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ ダイアログ開始要求受信終了(receive) ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ダイアログ開始応答送信(TP-BEGIN-DIALOGUE) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ sendsync引数設定 (初期化) ★★*/ action = DCMCFEMI ; commform = DCNOFLAGS ; resv01[0] = NULL ; sdataleng = 18 ; resv02[0] = NULL ; opcd = DCNOFLAGS ; wachtime = WAITTIME ; /*★ senddata 設定 ★*/ /*★ 先頭8バイト目までは,MCFが使用する ★*/ senddata[8] = 0x00 ; /* レングス 01 */ senddata[9] = 0x0a ; /* サービスプリミティブの長さ */ strcpy(senddata + 10, "OTP1") ; /* 送信手順(OTP1) */ strcpy(senddata + 14, "BDPA") ; /* サービスプリミティブコード */ /* TP-BEGIN-DIALOGUE rsp */ senddata[18] = 0x00 ; /* レングス 02 */ senddata[19] = 0x06 ; /* パラメタ全体の長さ */ senddata[20] = 0x00 ; /* レングス 03 */ senddata[21] = 0x04 ; /* 結果の長さ */ strcpy(senddata + 22, "AC") ; /* 結果(パラメタ 1) */ senddata[24] = 0x00 ; /* レングス 04 */ senddata[25] = 0x02 ; /* ユーザ情報(省略) */ /*▼▼ メッセージ送信開始(sendsync) ▼▼*/ rtn = dc_mcf_sendsync(action, commform, termnam, resv01, senddata, sdataleng, resv02, opcd, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ メッセージ送信終了(sendsync) ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ TP_DATA受信(TP-DATA) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ recvsync引数設定 (初期化) ★★*/ action = DCMCFFRST ; commform = DCNOFLAGS ; resv01[0] = NULL ; rdataleng = NULL ; inbufleng = 256 ; time = NULL ; wachtime = WAITTIME ; /*★★ recvdata clear ★★*/ memset(recvdata, 0, 256) ; /*▼▼ データ受信開始(recvsync) ▼▼*/ rtn = dc_mcf_recvsync(action, commform, termnam, resv01, recvdata, & rdataleng, inbufleng, & time, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ データ受信終了(recvsync) ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ハンドシェイク&制御権譲渡要求受信 ◆*/ /*◆ (TP-HANDSHAKE-AND-GRANT-CONTROL) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ recvsync引数設定 (初期化) ★★*/ action = DCMCFFRST ; commform = DCNOFLAGS ; resv01[0] = NULL ; rdataleng = NULL ; inbufleng = 256 ; time = NULL ; wachtime = WAITTIME ; /*★★ recvdata clear ★★*/ memset(recvdata, 0, 256) ; /*▼▼ メッセージ受信開始(recvsync) ▼▼*/ rtn = dc_mcf_recvsync(action, commform, termnam, resv01, recvdata, & rdataleng, inbufleng, & time, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ メッセージ受信終了(recvsync) ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ハンドシェイク&制御権譲渡応答送信 ◆*/ /*◆ (TP-HANDSHAKE-AND-GRANT-CONTROL) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ sendsync引数設定 (初期化) ★★*/ action = DCMCFEMI ; commform = DCNOFLAGS ; resv01[0] = NULL ; sdataleng = 14 ; resv02[0] = NULL ; opcd = DCNOFLAGS ; wachtime = WAITTIME ; /*★ senddata clear ★*/ memset(senddata, 0, 256) ; /*★ senddata 設定 ★*/ /*★ 先頭8バイト目までは,MCFが使用する ★*/ senddata[8] = 0x00 ; senddata[9] = 0x0a ; strcpy(senddata + 10, "OTP1") ; /* 送信手順(OTP1) */ strcpy(senddata + 14, "HGP ") ; /* サービスプリミティブコード */ /* TP-HANDSHAKE-AND- */ /* GRANT-CONTROL rsp */ senddata[18] = 0x00 ; senddata[19] = 0x02 ; /* パラメタ(省略) */ senddata[20] = 0x00 ; senddata[21] = 0x02 ; /* ユーザ情報(省略) */ /*▼▼ メッセージ送信開始(sendsync) ▼▼*/ rtn = dc_mcf_sendsync(action, commform, termnam, resv01, senddata, sdataleng, resv02, opcd, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ メッセージ送信終了(sendsync) ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ データ送信(TP-DATA) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ sendsync引数設定 (初期化) ★★*/ action = DCMCFEMI ; commform = DCNOFLAGS ; resv01[0] = NULL ; sdataleng = 23 ; resv02[0] = NULL ; opcd = DCNOFLAGS ; wachtime = WAITTIME ; /*★ senddata clear ★*/ memset(senddata, 0, 256) ; /*★ senddata 設定 ★*/ /*★ 先頭8バイト目までは,MCFが使用する ★*/ senddata[8] = 0x00 ; /* レングス 01 */ senddata[9] = 0x0a ; /* サービスプリミティブの長さ */ strcpy(senddata + 10, "OTP1") ; /* 送信手順(OTP1) */ strcpy(senddata + 14, "TDR ") ; /* サービスプリミティブコード */ /* TP_DATA req */ senddata[18] = 0x00 ; /* レングス 02 */ senddata[19] = 0x02 ; /* パラメタ(省略) */ senddata[20] = 0x00 ; /* レングス 03 */ senddata[21] = 0x0b ; /* ユーザ情報の長さ */ senddata[22] = 0x80 ; /* 連結状態 */ strcpy(senddata + 23, "USERDATA") ; /* ユーザデータ */ /*▼▼ データ送信(sendsync)開始 ▼▼*/ rtn = dc_mcf_sendsync(action, commform, termnam, resv01, senddata, sdataleng, resv02, opcd, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ データ送信(sendsync)終了 ▲▲*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*◆ ダイアログ終了要求送受信(TP-END-DIALOGUE) ◆*/ /*◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆*/ /*★★ sendrecv引数設定 ★★*/ action = DCMCFEMI ; commform = DCMCFIO ; resv01[0] = NULL ; sdataleng = 18 ; rdataleng = NULL ; inbufleng = 256 ; time = NULL ; wachtime = WAITTIME ; /*★ senddata clear ★*/ memset(senddata, 0, 256) ; memset(recvdata, 0, 256) ; /*★ senddata 設定 ★*/ /*★ 先頭8バイト目までは,MCFが使用する ★*/ senddata[8] = 0x00 ; /* レングス 01 */ senddata[9] = 0x0a ; /* サービスプリミティブの長さ */ strcpy(senddata + 10, "OTP1") ; /* 送信手順(OTP1) */ strcpy(senddata + 14, "EDR ") ; /* サービスプリミティブコード */ /* TP-END-DIALOGUE req */ senddata[18] = 0x00 ; /* レングス 02 */ senddata[19] = 0x06 ; /* パラメタ全体の長さ */ senddata[20] = 0x00 ; /* レングス 03 */ senddata[21] = 0x04 ; /* 確認項目の長さ */ strcpy(senddata + 22, "TR") ; /* 確認項目(パラメタ 1) */ senddata[24] = 0x00 ; /* レングス 04 */ senddata[25] = 0x02 ; /* ユーザ情報 */ /*▼▼ メッセージ送受信開始(sendrecv) ▼▼*/ rtn = dc_mcf_sendrecv(action, commform, termnam, resv01, senddata, sdataleng, recvdata, & rdataleng, inbufleng, & time, wachtime); if ( rtn != DCMCFRTN_00000 ) { goto ERROR; } /*▲▲ メッセージ送受信終了(sendrecv)▲▲*/ ERROR : ; }
(5) ユーザアプリケーションプログラムのコーディング例(半二重でのCOBOL言語)
(a) コンテンション勝者側(SPP)
IDENTIFICATION DIVISION. PROGRAM-ID. SEND01. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 SND-S1. 02 MSG-SNDSYNC PIC X(8) VALUE 'SENDSYNC'. 02 DATA1 PIC X(5). 02 FILLER PIC X(3). 02 DATA2 PIC X(4) VALUE SPACE. 02 DATA3 PIC X(4) VALUE SPACE. 02 DATA4 PIC 9(8). 02 DATA5 PIC 9(8). 02 DATA6 PIC 9(9) COMP VALUE ZERO. 02 SND-S-SEG PIC X(4) VALUE 'EMI '. 02 DATA7 PIC X(4) VALUE SPACE. 02 DATA8 PIC X(4) VALUE SPACE. 02 DATA9 PIC X(4) VALUE SPACE. 02 DATA10 PIC X(8) VALUE SPACE. 02 DATA11 PIC X(4) VALUE SPACE. 02 DATA12 PIC X(8) VALUE SPACE. 02 DATA13 PIC X(4) VALUE SPACE. 02 DATA14 PIC 9(9) COMP VALUE ZERO. 02 DATA15 PIC 9(9) COMP VALUE ZERO. 02 DATA16 PIC X(1) VALUE SPACE. 02 DATA17 PIC X(1) VALUE SPACE. 02 DATA18 PIC X(14) VALUE LOW-VALUE. 01 SND-S2. 02 SEG-CODE PIC X(4) VALUE SPACE. 02 TRM-NAME PIC X(8) VALUE 'otm01 '. 02 DATA19 PIC X(8) VALUE SPACE. 02 DATA20 PIC X(8) VALUE SPACE. 02 DATA21 PIC X(28) VALUE LOW-VALUE. 01 SND-S3. 02 DATA22 PIC 9(9) COMP VALUE 54. 02 DATA23 PIC X(8). 02 SEND-DATA. 03 S-DATA1 PIC X(1) VALUE X'00'. 03 S-DATA2 PIC X(1) VALUE X'0a'. 03 S-DATA3 PIC X(4) VALUE 'OTP1'. 03 S-DATA4 PIC X(4) VALUE 'BDR '. 03 S-DATA5 PIC X(1) VALUE X'00'. 03 S-DATA6 PIC X(1) VALUE X'2a'. 03 S-DATA7 PIC X(1) VALUE X'00'. 03 S-DATA8 PIC X(1) VALUE X'0d'. 03 S-DATA8-1 PIC X(2) VALUE 'PR'. 03 S-DATA9 PIC X(9) VALUE 'SEND-TPSU'. 03 S-DATA10 PIC X(1) VALUE X'00'. 03 S-DATA11 PIC X(1) VALUE X'02'. 03 S-DATA12 PIC X(1) VALUE X'00'. 03 S-DATA13 PIC X(1) VALUE X'0d'. 03 S-DATA13-1 PIC X(2) VALUE 'PR'. 03 S-DATA14 PIC X(9) VALUE 'RECV-TPSU'. 03 S-DATA15 PIC X(1) VALUE X'00'. 03 S-DATA16 PIC X(1) VALUE X'04'. 03 S-DATA17 PIC X(1) VALUE X'88'. 03 S-DATA18 PIC X(1) VALUE X'ff'. 03 S-DATA19 PIC X(1) VALUE X'00'. 03 S-DATA20 PIC X(1) VALUE X'02'. 03 S-DATA21 PIC X(1) VALUE X'00'. 03 S-DATA22 PIC X(1) VALUE X'02'. 03 S-DATA23 PIC X(1) VALUE X'00'. 03 S-DATA24 PIC X(1) VALUE X'04'. 03 S-DATA25 PIC X(2) VALUE 'AL'. 03 S-DATA26 PIC X(1) VALUE X'00'. 03 S-DATA27 PIC X(1) VALUE X'02'. 01 SND-S4. 02 MSG-SNDSYNC PIC X(8) VALUE 'SENDSYNC'. 02 DATA25 PIC X(5). 02 FILLER PIC X(3). 02 DATA26 PIC X(4) VALUE SPACE. 02 DATA27 PIC X(4) VALUE SPACE. 02 DATA28 PIC 9(8). 02 DATA29 PIC 9(8). 02 DATA30 PIC 9(9) COMP VALUE ZERO. 02 SND-S-SEG PIC X(4) VALUE 'EMI '. 02 DATA31 PIC X(4) VALUE SPACE. 02 DATA32 PIC X(4) VALUE SPACE. 02 DATA33 PIC X(4) VALUE SPACE. 02 DATA34 PIC X(8) VALUE SPACE. 02 DATA35 PIC X(4) VALUE SPACE. 02 DATA36 PIC X(8) VALUE SPACE. 02 DATA37 PIC X(4) VALUE SPACE. 02 DATA38 PIC 9(9) COMP VALUE ZERO. 02 DATA39 PIC 9(9) COMP VALUE ZERO. 02 DATA40 PIC X(1) VALUE SPACE. 02 DATA41 PIC X(1) VALUE SPACE. 02 DATA42 PIC X(14) VALUE LOW-VALUE. 01 SND-S5. 02 SEG-CODE PIC X(4) VALUE SPACE. 02 TRM-NAME PIC X(8) VALUE 'otm01 '. 02 DATA43 PIC X(8) VALUE SPACE. 02 DATA44 PIC X(8) VALUE SPACE. 02 DATA45 PIC X(28) VALUE LOW-VALUE. 01 SND-S6. 02 DATA46 PIC 9(9) COMP VALUE 23. 02 DATA47 PIC X(8). 02 SEND-DATA2. 03 S-DATA281 PIC 9(4) COMP VALUE 10. 03 S-DATA282 PIC X(4) VALUE 'OTP1'. 03 S-DATA283 PIC X(4) VALUE 'TDR '. 03 S-DATA285 PIC 9(4) COMP VALUE 2. 03 S-DATA287 PIC 9(4) VALUE 11. 03 S-DATA289 PIC X(1) VALUE X'80'. 03 S-DATA290 PIC X(8) VALUE 'USERDATA'. 01 SND-S7. 02 MSG-SNDSYNC PIC X(8) VALUE 'SENDSYNC'. 02 DATA49 PIC X(5). 02 FILLER PIC X(3). 02 DATA50 PIC X(4) VALUE SPACE. 02 DATA51 PIC X(4) VALUE SPACE. 02 DATA52 PIC 9(8). 02 DATA53 PIC 9(8). 02 DATA54 PIC 9(9) COMP VALUE ZERO. 02 SND-S-SEG PIC X(4) VALUE 'EMI '. 02 DATA55 PIC X(4) VALUE SPACE. 02 DATA56 PIC X(4) VALUE SPACE. 02 DATA57 PIC X(4) VALUE SPACE. 02 DATA58 PIC X(8) VALUE SPACE. 02 DATA59 PIC X(4) VALUE SPACE. 02 DATA60 PIC X(8) VALUE SPACE. 02 DATA61 PIC X(4) VALUE SPACE. 02 DATA62 PIC 9(9) COMP VALUE ZERO. 02 DATA63 PIC 9(9) COMP VALUE ZERO. 02 DATA64 PIC X(1) VALUE SPACE. 02 DATA65 PIC X(1) VALUE SPACE. 02 DATA66 PIC X(14) VALUE LOW-VALUE. 01 SND-S8. 02 SEG-CODE PIC X(4) VALUE SPACE. 02 TRM-NAME PIC X(8) VALUE 'otm01 '. 02 DATA67 PIC X(8) VALUE SPACE. 02 DATA68 PIC X(8) VALUE SPACE. 02 DATA69 PIC X(28) VALUE LOW-VALUE. 01 SND-S9. 02 DATA70 PIC 9(9) COMP VALUE 18. 02 DATA71 PIC X(8). 02 SEND-DATA3. 03 S-DATA329 PIC X(1) VALUE X'00'. 03 S-DATA330 PIC X(1) VALUE X'0a'. 03 S-DATA331 PIC X(4) VALUE 'OTP1'. 03 S-DATA332 PIC X(4) VALUE 'HGR '. 03 S-DATA333 PIC X(1) VALUE X'00'. 03 S-DATA334 PIC X(1) VALUE X'06'. 03 S-DATA335 PIC X(1) VALUE X'00'. 03 S-DATA336 PIC X(1) VALUE X'04'. 03 S-DATA337 PIC X(2) VALUE 'UR'. 03 S-DATA338 PIC X(1) VALUE X'00'. 03 S-DATA339 PIC X(1) VALUE X'02'. 01 SND4. 02 MSG-SNDSYNC PIC X(8) VALUE 'SENDSYNC'. 02 DATA100 PIC X(5). 02 FILLER PIC X(3). 02 DATA101 PIC X(4) VALUE SPACE. 02 DATA102 PIC X(4) VALUE SPACE. 02 DATA103 PIC 9(8). 02 DATA104 PIC 9(8). 02 DATA105 PIC 9(9) COMP VALUE ZERO. 02 SND-S-SEG PIC X(4) VALUE 'EMI '. 02 DATA106 PIC X(4) VALUE SPACE. 02 DATA107 PIC X(4) VALUE SPACE. 02 DATA108 PIC X(4) VALUE SPACE. 02 DATA109 PIC X(8) VALUE SPACE. 02 DATA110 PIC X(4) VALUE SPACE. 02 DATA111 PIC X(8) VALUE SPACE. 02 DATA112 PIC X(4) VALUE SPACE. 02 DATA113 PIC 9(9) COMP VALUE ZERO. 02 DATA114 PIC 9(9) COMP VALUE ZERO. 02 DATA115 PIC X(1) VALUE SPACE. 02 DATA116 PIC X(1) VALUE SPACE. 02 DATA117 PIC X(14) VALUE LOW-VALUE. 01 SND5. 02 SEG-CODE PIC X(4) VALUE SPACE. 02 TRM-NAME PIC X(8) VALUE 'otm01 '. 02 DATA120 PIC X(8) VALUE SPACE. 02 DATA121 PIC X(8) VALUE SPACE. 02 DATA122 PIC X(28) VALUE LOW-VALUE. 01 SND6. 02 DATA130 PIC 9(9) COMP VALUE 14. 02 DATA131 PIC X(8). 02 SEND-DATA. 03 S-DATA311 PIC 9(4) COMP VALUE 10. 03 S-DATA312 PIC X(4) VALUE 'OTP1'. 03 S-DATA313 PIC X(4) VALUE 'EDP '. 03 S-DATA314 PIC X(1) VALUE X'00'. 03 S-DATA315 PIC X(1) VALUE X'02'. 03 S-DATA316 PIC X(1) VALUE X'00'. 03 S-DATA317 PIC X(1) VALUE X'02'. 01 RCV-S1. 02 MSG-RCVSYNC PIC X(8) VALUE 'RECVSYNC'. 02 DATA73 PIC X(5). 02 FILLER PIC X(3). 02 RCV-S-SEG PIC X(4) VALUE 'FRST'. 02 DATA74 PIC X(4) VALUE SPACE. 02 DATA75 PIC 9(8). 02 DATA76 PIC 9(8). 02 RCV-S-LEG PIC 9(9) COMP VALUE 256. 02 DATA77 PIC X(4) VALUE SPACE. 02 DATA78 PIC X(4) VALUE SPACE. 02 DATA79 PIC X(4) VALUE SPACE. 02 DATA80 PIC X(4) VALUE SPACE. 02 DATA81 PIC X(8) VALUE SPACE. 02 DATA82 PIC X(4) VALUE SPACE. 02 DATA83 PIC X(8) VALUE SPACE. 02 DATA84 PIC X(4) VALUE SPACE. 02 DATA85 PIC 9(9) COMP VALUE ZERO. 02 DATA86 PIC 9(9) COMP VALUE ZERO. 02 DATA87 PIC X(1) VALUE SPACE. 02 DATA88 PIC X(1) VALUE SPACE. 02 DATA89 PIC X(14) VALUE LOW-VALUE. 01 RCV-S2. 02 DATA90 PIC X(4) VALUE SPACE. 02 TRM-NAME PIC X(8) VALUE 'otm01 '. 02 DATA92 PIC X(8) VALUE SPACE. 02 DATA93 PIC X(8) VALUE SPACE. 02 DATA94 PIC X(28) VALUE LOW-VALUE. 01 RCV-S3. 02 DATA95 PIC 9(9) COMP. 02 DATA96 PIC X(8). 02 DATA97 PIC X(1024). PROCEDURE DIVISION. CALL 'CBLDCMCF' USING SND-S1 SND-S2 SND-S3. CALL 'CBLDCMCF' USING RCV-S1 RCV-S2 RCV-S3. CALL 'CBLDCMCF' USING SND-S4 SND-S5 SND-S6. CALL 'CBLDCMCF' USING SND-S7 SND-S8 SND-S9. CALL 'CBLDCMCF' USING RCV-S1 RCV-S2 RCV-S3. CALL 'CBLDCMCF' USING RCV-S1 RCV-S2 RCV-S3. CALL 'CBLDCMCF' USING RCV-S1 RCV-S2 RCV-S3. CALL 'CBLDCMCF' USING SND4 SND5 SND6. EXIT PROGRAM.
(b) コンテンション敗者側(MHP)
IDENTIFICATION DIVISION. PROGRAM-ID. RECV01. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 RCV1. 02 MSG-RCV PIC X(8) VALUE 'RECEIVE '. 02 DATA1 PIC X(5). 02 FILLER PIC X(3). 02 SEG-CODE PIC X(4) VALUE 'FRST'. 02 DATA2 PIC X(4) VALUE SPACE. 02 DATA3 PIC 9(8). 02 DATA4 PIC 9(8). 02 SEG-LENG PIC 9(9) COMP VALUE 256. 02 DATA5 PIC X(4) VALUE SPACE. 02 DATA6 PIC X(4) VALUE SPACE. 02 DATA7 PIC X(4) VALUE SPACE. 02 DATA8 PIC X(4) VALUE SPACE. 02 DATA9 PIC X(8) VALUE SPACE. 02 DATA10 PIC X(4) VALUE SPACE. 02 DATA11 PIC X(8) VALUE SPACE. 02 DATA12 PIC X(4) VALUE SPACE. 02 DATA13 PIC 9(9) COMP VALUE ZERO. 02 DATA13-1 PIC 9(9) COMP VALUE ZERO. 02 DATA13-2 PIC X(1) VALUE SPACE. 02 DATA13-3 PIC X(1) VALUE SPACE. 02 DATA14 PIC X(14) VALUE LOW-VALUE. 01 RCV2. 02 DATA15 PIC X(4) VALUE SPACE. 02 RCV-TRM-NAM PIC X(8). 02 DATA17 PIC X(8) VALUE SPACE. 02 DATA18 PIC X(6) VALUE SPACE. 02 DATA19 PIC X(2) VALUE SPACE. 02 DATA20 PIC X(28) VALUE LOW-VALUE. 01 RCV3. 02 DATA21 PIC 9(9) COMP. 02 DATA22 PIC X(8). 02 DATA23 PIC X(1024). 01 SND1. 02 MSG-SNDSYNC PIC X(8) VALUE 'SENDSYNC'. 02 DATA24 PIC X(5). 02 FILLER PIC X(3). 02 DATA25 PIC X(4) VALUE SPACE. 02 DATA26 PIC X(4) VALUE SPACE. 02 DATA27 PIC 9(8). 02 DATA28 PIC 9(8). 02 DATA29 PIC 9(9) COMP VALUE ZERO. 02 SND-S-SEG PIC X(4) VALUE 'EMI '. 02 DATA30 PIC X(4) VALUE SPACE. 02 DATA31 PIC X(4) VALUE SPACE. 02 DATA32 PIC X(4) VALUE SPACE. 02 DATA33 PIC X(8) VALUE SPACE. 02 DATA34 PIC X(4) VALUE SPACE. 02 DATA35 PIC X(8) VALUE SPACE. 02 DATA36 PIC X(4) VALUE SPACE. 02 DATA37 PIC 9(9) COMP VALUE ZERO. 02 DATA38 PIC 9(9) COMP VALUE ZERO. 02 DATA39 PIC X(1) VALUE SPACE. 02 DATA40 PIC X(1) VALUE SPACE. 02 DATA41 PIC X(14) VALUE LOW-VALUE. 01 SND2. 02 SEG-CODE PIC X(4) VALUE SPACE. 02 S2-TRM-NAM PIC X(8). 02 DATA42 PIC X(8) VALUE SPACE. 02 DATA43 PIC X(8) VALUE SPACE. 02 DATA44 PIC X(28) VALUE LOW-VALUE. 01 SND3. 02 DATA45 PIC 9(9) COMP VALUE 18. 02 DATA46 PIC X(8). 02 SEND-DATA. 03 S-DATA1 PIC 9(4) COMP VALUE 10. 03 S-DATA2 PIC X(4) VALUE 'OTP1'. 03 S-DATA3 PIC X(4) VALUE 'BDPA'. 03 S-DATA4 PIC 9(4) COMP VALUE 6. 03 S-DATA5 PIC 9(4) COMP VALUE 4. 03 S-DATA6 PIC X(2) VALUE 'AC'. 03 S-DATA7 PIC 9(4) COMP VALUE 2. 01 RCV4. 02 MSG-RCVSYNC PIC X(8) VALUE 'RECVSYNC'. 02 DATA48 PIC X(5). 02 FILLER PIC X(3). 02 RCV-S-SEG PIC X(4) VALUE 'FRST'. 02 DATA49 PIC X(4) VALUE SPACE. 02 DATA50 PIC 9(8). 02 DATA51 PIC 9(8). 02 RCV-S-LEG PIC 9(9) COMP VALUE 256. 02 DATA52 PIC X(4) VALUE SPACE. 02 DATA53 PIC X(4) VALUE SPACE. 02 DATA54 PIC X(4) VALUE SPACE. 02 DATA55 PIC X(4) VALUE SPACE. 02 DATA56 PIC X(8) VALUE SPACE. 02 DATA57 PIC X(4) VALUE SPACE. 02 DATA58 PIC X(8) VALUE SPACE. 02 DATA59 PIC X(4) VALUE SPACE. 02 DATA60 PIC 9(9) COMP VALUE ZERO. 02 DATA61 PIC 9(9) COMP VALUE ZERO. 02 DATA62 PIC X(1) VALUE SPACE. 02 DATA63 PIC X(1) VALUE SPACE. 02 DATA64 PIC X(14) VALUE LOW-VALUE. 01 RCV5. 02 DATA65 PIC X(4) VALUE SPACE. 02 R5-TRM-NAM PIC X(8). 02 DATA67 PIC X(8) VALUE SPACE. 02 DATA68 PIC X(8) VALUE SPACE. 02 DATA69 PIC X(28) VALUE LOW-VALUE. 01 RCV6. 02 DATA70 PIC 9(9) COMP. 02 DATA71 PIC X(8). 02 DATA72 PIC X(1024). 01 SND4. 02 MSG-SNDSYNC PIC X(8) VALUE 'SENDSYNC'. 02 DATA100 PIC X(5). 02 FILLER PIC X(3). 02 DATA101 PIC X(4) VALUE SPACE. 02 DATA102 PIC X(4) VALUE SPACE. 02 DATA103 PIC 9(8). 02 DATA104 PIC 9(8). 02 DATA105 PIC 9(9) COMP VALUE ZERO. 02 SND-S-SEG PIC X(4) VALUE 'EMI '. 02 DATA106 PIC X(4) VALUE SPACE. 02 DATA107 PIC X(4) VALUE SPACE. 02 DATA108 PIC X(4) VALUE SPACE. 02 DATA109 PIC X(8) VALUE SPACE. 02 DATA110 PIC X(4) VALUE SPACE. 02 DATA111 PIC X(8) VALUE SPACE. 02 DATA112 PIC X(4) VALUE SPACE. 02 DATA113 PIC 9(9) COMP VALUE ZERO. 02 DATA114 PIC 9(9) COMP VALUE ZERO. 02 DATA115 PIC X(1) VALUE SPACE. 02 DATA116 PIC X(1) VALUE SPACE. 02 DATA117 PIC X(14) VALUE LOW-VALUE. 01 SND5. 02 SEG-CODE PIC X(4) VALUE SPACE. 02 S5-TRM-NAM PIC X(8). 02 DATA120 PIC X(8) VALUE SPACE. 02 DATA121 PIC X(8) VALUE SPACE. 02 DATA122 PIC X(28) VALUE LOW-VALUE. 01 SND6. 02 DATA130 PIC 9(9) COMP VALUE 14. 02 DATA131 PIC X(8). 02 SEND-DATA. 03 S-DATA11 PIC 9(4) COMP VALUE 10. 03 S-DATA12 PIC X(4) VALUE 'OTP1'. 03 S-DATA13 PIC X(4) VALUE 'HGP '. 03 S-DATA14 PIC 9(4) COMP VALUE 2. 03 S-DATA15 PIC 9(4) COMP VALUE 2. 01 SND7. 02 MSG-SNDSYNC PIC X(8) VALUE 'SENDSYNC'. 02 DATA225 PIC X(5). 02 FILLER PIC X(3). 02 DATA226 PIC X(4) VALUE SPACE. 02 DATA227 PIC X(4) VALUE SPACE. 02 DATA228 PIC 9(8). 02 DATA229 PIC 9(8). 02 DATA230 PIC 9(9) COMP VALUE ZERO. 02 SND-S-SEG PIC X(4) VALUE 'EMI '. 02 DATA231 PIC X(4) VALUE SPACE. 02 DATA232 PIC X(4) VALUE SPACE. 02 DATA233 PIC X(4) VALUE SPACE. 02 DATA234 PIC X(8) VALUE SPACE. 02 DATA235 PIC X(4) VALUE SPACE. 02 DATA236 PIC X(8) VALUE SPACE. 02 DATA237 PIC X(4) VALUE SPACE. 02 DATA238 PIC 9(9) COMP VALUE ZERO. 02 DATA239 PIC 9(9) COMP VALUE ZERO. 02 DATA240 PIC X(1) VALUE SPACE. 02 DATA241 PIC X(1) VALUE SPACE. 02 DATA242 PIC X(14) VALUE LOW-VALUE. 01 SND8. 02 SEG-CODE PIC X(4) VALUE SPACE. 02 S8-TRM-NAM PIC X(8). 02 DATA243 PIC X(8) VALUE SPACE. 02 DATA244 PIC X(8) VALUE SPACE. 02 DATA245 PIC X(28) VALUE LOW-VALUE. 01 SND9. 02 DATA246 PIC 9(9) COMP VALUE 23. 02 DATA247 PIC X(8). 02 SEND-DATA2. 03 S-DATA281 PIC 9(4) COMP VALUE 10. 03 S-DATA282 PIC X(4) VALUE 'OTP1'. 03 S-DATA283 PIC X(4) VALUE 'TDR '. 03 S-DATA284 PIC 9(4) COMP VALUE 2. 03 S-DATA285 PIC 9(4) COMP VALUE 11. 03 S-DATA286 PIC X(1) VALUE X'80'. 03 S-DATA287 PIC X(8) VALUE 'USERDATA'. 01 SND-RCV1. 02 MSG-SNDRCV PIC X(8) VALUE 'SENDRECV'. 02 DATA301 PIC X(5). 02 FILLER PIC X(3). 02 DATA302 PIC X(4) VALUE SPACE. 02 DATA303 PIC X(4) VALUE SPACE. 02 DATA304 PIC 9(8). 02 DATA305 PIC 9(8). 02 SND-RCV-LEG PIC 9(9) COMP VALUE 256. 02 SND-RCV-SEG PIC X(4) VALUE 'EMI '. 02 DATA306 PIC X(4) VALUE SPACE. 02 DATA307 PIC X(4) VALUE SPACE. 02 DATA308 PIC X(4) VALUE SPACE. 02 DATA309 PIC X(8) VALUE SPACE. 02 DATA310 PIC X(4) VALUE SPACE. 02 DATA311 PIC X(8) VALUE SPACE. 02 DATA312 PIC X(4) VALUE SPACE. 02 PRO-CD PIC 9(9) COMP VALUE ZERO. 02 DATA313 PIC 9(9) COMP VALUE ZERO. 02 DATA313-1 PIC X(1) VALUE SPACE. 02 DATA313-2 PIC X(1) VALUE SPACE. 02 DATA314 PIC X(14) VALUE LOW-VALUE. 01 SND-RCV2. 02 MSG PIC X(4) VALUE 'IO '. 02 SR-TRM-NAM PIC X(8). 02 DATA315 PIC X(8) VALUE SPACE. 02 DATA316 PIC X(8) VALUE SPACE. 02 DATA318 PIC X(28) VALUE LOW-VALUE. 01 SND-RCV3. 02 MSG-SEG-LEG PIC 9(9) COMP VALUE 18. 02 DATA319 PIC X(8). 02 SNDRCV-DATA. 03 SR-DATA1 PIC 9(4) COMP VALUE 10. 03 SR-DATA2 PIC X(4) VALUE 'OTP1'. 03 SR-DATA3 PIC X(4) VALUE 'EDR '. 03 SR-DATA4 PIC 9(4) COMP VALUE 6. 03 SR-DATA5 PIC 9(4) COMP VALUE 4. 03 SR-DATA6 PIC X(2) VALUE 'TR'. 03 SR-DATA7 PIC 9(4) COMP VALUE 2. 01 SND-RCV4. 02 DATA320 PIC 9(9) COMP. 02 DATA321 PIC X(7) VALUE SPACE. 02 DATA322 PIC X(1). 02 DATA323 PIC X(1024). PROCEDURE DIVISION. CALL 'CBLDCMCF' USING RCV1 RCV2 RCV3. MOVE RCV-TRM-NAM TO S2-TRM-NAM. CALL 'CBLDCMCF' USING SND1 SND2 SND3. MOVE RCV-TRM-NAM TO R5-TRM-NAM. CALL 'CBLDCMCF' USING RCV4 RCV5 RCV6. MOVE RCV-TRM-NAM TO R5-TRM-NAM. CALL 'CBLDCMCF' USING RCV4 RCV5 RCV6. MOVE RCV-TRM-NAM TO S5-TRM-NAM. CALL 'CBLDCMCF' USING SND4 SND5 SND6. MOVE RCV-TRM-NAM TO S8-TRM-NAM. CALL 'CBLDCMCF' USING SND7 SND8 SND9. MOVE RCV-TRM-NAM TO SR-TRM-NAM. CALL 'CBLDCMCF' USING SND-RCV1 SND-RCV2 SND-RCV3 SND-RCV4. EXIT PROGRAM.
(6) ユーザアプリケーションプログラムのコーディング例(半二重でのデータ操作言語)
(a) コンテンション勝者側(SPP)
* ************************************************************** * SPPサービスプログラム * ************************************************************** * IDENTIFICATION DIVISION. PROGRAM-ID. SEND01. ENVIRONMENT DIVISION. CONFIGURATION SECTION. * ワーク変数 * DATA DIVISION. WORKING-STORAGE SECTION. * ダイアログ開始要求送信領域 * 01 SEND-AREA1. 02 SE-DATALENG1 PIC 9(4) COMP VALUE 58. 02 SE-RSV1 PIC X(2). 02 SE-DATA1. 03 S1-DATA1 PIC X(1) VALUE X'00'. 03 S1-DATA2 PIC X(1) VALUE X'0a'. 03 S1-DATA3 PIC X(4) VALUE 'OTP1'. 03 S1-DATA4 PIC X(4) VALUE 'BDR '. 03 S1-DATA5 PIC X(1) VALUE X'00'. 03 S1-DATA6 PIC X(1) VALUE X'2a'. 03 S1-DATA7 PIC X(1) VALUE X'00'. 03 S1-DATA8 PIC X(1) VALUE X'0d'. 03 S1-DATA8-1 PIC X(2) VALUE 'PR'. 03 S1-DATA9 PIC X(9) VALUE 'SEND_TPSU'. 03 S1-DATA10 PIC X(1) VALUE X'00'. 03 S1-DATA11 PIC X(1) VALUE X'02'. 03 S1-DATA12 PIC X(1) VALUE X'00'. 03 S1-DATA13 PIC X(1) VALUE X'0d'. 03 S1-DATA13-1 PIC X(2) VALUE 'PR'. 03 S1-DATA14 PIC X(9) VALUE 'RECV_TPSU'. 03 S1-DATA15 PIC X(1) VALUE X'00'. 03 S1-DATA16 PIC X(1) VALUE X'04'. 03 S1-DATA17 PIC X(1) VALUE X'88'. 03 S1-DATA18 PIC X(1) VALUE X'ff'. 03 S1-DATA19 PIC X(1) VALUE X'00'. 03 S1-DATA20 PIC X(1) VALUE X'02'. 03 S1-DATA21 PIC X(1) VALUE X'00'. 03 S1-DATA22 PIC X(1) VALUE X'02'. 03 S1-DATA23 PIC X(1) VALUE X'00'. 03 S1-DATA24 PIC X(1) VALUE X'04'. 03 S1-DATA25 PIC X(2) VALUE 'AL'. 03 S1-DATA26 PIC X(1) VALUE X'00'. 03 S1-DATA27 PIC X(1) VALUE X'02'. * ダイアログ開始応答受信領域 * 01 RECV-AREA1. 02 RE-DATALENG1 PIC 9(4) COMP VALUE 1028. 02 RE-RSV1 PIC X(2). 02 RE-DATA1 PIC X(1024). * データ転送要求送信領域 * 01 SEND-AREA2. 02 SE-DATALENG2 PIC 9(4) COMP VALUE 27. 02 SE-RSV2 PIC X(2). 02 SE-DATA2. 03 S2-DATA1 PIC X(1) VALUE X'00'. 03 S2-DATA2 PIC X(1) VALUE X'0a'. 03 S2-DATA3 PIC X(4) VALUE 'OTP1'. 03 S2-DATA4 PIC X(4) VALUE 'TDR '. 03 S2-DATA5 PIC X(1) VALUE X'00'. 03 S2-DATA6 PIC X(1) VALUE X'02'. 03 S2-DATA7 PIC X(1) VALUE X'00'. 03 S2-DATA8 PIC X(1) VALUE X'0b'. 03 S2-DATA9 PIC X(1) VALUE X'80'. 03 S2-DATA10 PIC X(8) VALUE 'USERDATA'. * ハンドシェイク&制御権譲渡要求送信領域 * 01 SEND-AREA3. 02 SE-DATALENG3 PIC 9(4) COMP VALUE 22. 02 SE-RSV3 PIC X(2). 02 SE-DATA3. 03 S3-DATA1 PIC X(1) VALUE X'00'. 03 S3-DATA2 PIC X(1) VALUE X'0a'. 03 S3-DATA3 PIC X(4) VALUE 'OTP1'. 03 S3-DATA4 PIC X(4) VALUE 'HGR '. 03 S3-DATA5 PIC X(1) VALUE X'00'. 03 S3-DATA6 PIC X(1) VALUE X'06'. 03 S3-DATA7 PIC X(1) VALUE X'00'. 03 S3-DATA8 PIC X(1) VALUE X'04'. 03 S3-DATA9 PIC X(2) VALUE 'UR'. 03 S3-DATA10 PIC X(1) VALUE X'00'. 03 S3-DATA11 PIC X(1) VALUE X'02'. * ハンドシェイク&制御権譲渡確認受信領域 * 01 RECV-AREA3. 02 RE-DATALENG3 PIC 9(4) COMP VALUE 1028. 02 RE-RSV3 PIC X(2). 02 RE-DATA3 PIC X(1024). * データ転送指示受信領域 * 01 RECV-AREA2. 02 RE-DATALENG2 PIC 9(4) COMP VALUE 1028. 02 RE-RSV2 PIC X(2). 02 RE-DATA2 PIC X(1024). * ダイアログ終了指示受信領域 * 01 RECV-AREA4. 02 RE-DATALENG4 PIC 9(4) COMP VALUE 1028. 02 RE-RSV4 PIC X(2). 02 RE-DATA4 PIC X(1024). * ダイアログ終了応答送信領域 * 01 SEND-AREA4. 02 SE-DATALENG4 PIC 9(4) COMP VALUE 18. 02 SE-RSV4 PIC X(2). 02 SE-DATA4. 03 S4-DATA1 PIC X(1) VALUE X'00'. 03 S4-DATA2 PIC X(1) VALUE X'0a'. 03 S4-DATA3 PIC X(4) VALUE 'OTP1'. 03 S4-DATA4 PIC X(4) VALUE 'EDP '. 03 S4-DATA5 PIC X(1) VALUE X'00'. 03 S4-DATA6 PIC X(1) VALUE X'02'. 03 S4-DATA7 PIC X(1) VALUE X'00'. 03 S4-DATA8 PIC X(1) VALUE X'02'. * 通信記述項 * COMMUNICATION SECTION. * ダイアログ開始要求の送信 * CD SEND-OT1 FOR I-O STATUS KEY IS SE-STATUS1 SYMBOLIC TERMINAL IS SE-TERMNAM1 SYNCHRONOUS MODE IS SYNC. * ダイアログ開始指示の受信 * CD RECV-IN1 FOR I-O STATUS KEY IS RE-STATUS1 SYMBOLIC TERMINAL IS RE-TERMNAM1 MESSAGE DATE IS RE-DATE1 MESSAGE TIME IS RE-TIME1 SYNCHRONOUS MODE IS SYNC WAITING TIME IS RE-WAIT1. * データ転送要求の送信 * CD SEND-OT2 FOR I-O STATUS KEY IS SE-STATUS2 SYMBOLIC TERMINAL IS SE-TERMNAM2 SYNCHRONOUS MODE IS SYNC. * ハンドシェイク&制御権譲渡要求の送信 * CD SEND-OT3 FOR I-O STATUS KEY IS SE-STATUS3 SYMBOLIC TERMINAL IS SE-TERMNAM3 SYNCHRONOUS MODE IS SYNC. * ハンドシェイク&制御権譲渡確認の受信 * CD RECV-IN3 FOR I-O STATUS KEY IS RE-STATUS3 SYMBOLIC TERMINAL IS RE-TERMNAM3 MESSAGE DATE IS RE-DATE3 MESSAGE TIME IS RE-TIME3 SYNCHRONOUS MODE IS SYNC WAITING TIME IS RE-WAIT3. * データ転送指示の受信 * CD RECV-IN2 FOR I-O STATUS KEY IS RE-STATUS2 SYMBOLIC TERMINAL IS RE-TERMNAM2 MESSAGE DATE IS RE-DATE2 MESSAGE TIME IS RE-TIME2 SYNCHRONOUS MODE IS SYNC WAITING TIME IS RE-WAIT2. * ダイアログ終了指示の受信 * CD RECV-IN4 FOR I-O STATUS KEY IS RE-STATUS4 SYMBOLIC TERMINAL IS RE-TERMNAM4 MESSAGE DATE IS RE-DATE4 MESSAGE TIME IS RE-TIME4 SYNCHRONOUS MODE IS SYNC WAITING TIME IS RE-WAIT4. * ダイアログ終了応答の送信 * CD SEND-OT4 FOR I-O STATUS KEY IS SE-STATUS4 SYMBOLIC TERMINAL IS SE-TERMNAM4. * 通信文 * PROCEDURE DIVISION. * ダイアログ開始要求の送信 * MOVE 'otm01' TO SE-TERMNAM1. SEND SEND-OT1 FROM SEND-AREA1. * ダイアログ開始確認の受信 * MOVE 'otm01' TO RE-TERMNAM1. MOVE '00010000' TO RE-WAIT1. RECEIVE RECV-IN1 SEGMENT INTO RECV-AREA1. * データ転送要求の送信 * MOVE 'otm01' TO SE-TERMNAM2. SEND SEND-OT2 FROM SEND-AREA2. * ハンドシェイク&制御権譲渡要求の送信 * MOVE 'otm01' TO SE-TERMNAM3. SEND SEND-OT3 FROM SEND-AREA3. * ハンドシェイク&制御権譲渡確認の受信 * MOVE 'otm01' TO RE-TERMNAM3. MOVE '00010000' TO RE-WAIT3. RECEIVE RECV-IN3 SEGMENT INTO RECV-AREA3. * データ転送指示の受信 * MOVE 'otm01' TO RE-TERMNAM2. MOVE '00010000' TO RE-WAIT2. RECEIVE RECV-IN2 SEGMENT INTO RECV-AREA2. * ダイアログ終了指示の受信 * MOVE 'otm01' TO RE-TERMNAM4. MOVE '00010000' TO RE-WAIT4. RECEIVE RECV-IN4 SEGMENT INTO RECV-AREA4. * ダイアログ終了応答の送信 * MOVE 'otm01' TO SE-TERMNAM4. DISABLE SEND-OT4 WITH SEND-AREA4. * 終了処理 * EXIT PROGRAM.
(b) コンテンション敗者側(MHP)
* ************************************************************** * MHPサービスプログラム * ************************************************************** * IDENTIFICATION DIVISION. PROGRAM-ID. RECV01. ENVIRONMENT DIVISION. CONFIGURATION SECTION. * ワーク変数 * DATA DIVISION. WORKING-STORAGE SECTION. * ダイアログ開始指示受信領域 * 01 RECV-AREA1. 02 RE-DATALENG1 PIC 9(4) COMP VALUE 1028. 02 RE-RSV1 PIC X(2). 02 RE-DATA1 PIC X(1024). * ダイアログ開始応答送信領域 * 01 SEND-AREA1. 02 SE-DATALENG1 PIC 9(4) COMP VALUE 22. 02 SE-RSV1 PIC X(2). 02 SE-DATA1. 03 S1-DATA1 PIC X(1) VALUE X'00'. 03 S1-DATA2 PIC X(1) VALUE X'0a'. 03 S1-DATA3 PIC X(4) VALUE 'OTP1'. 03 S1-DATA4 PIC X(4) VALUE 'BDPA'. 03 S1-DATA5 PIC X(1) VALUE X'00'. 03 S1-DATA6 PIC X(1) VALUE X'06'. 03 S1-DATA7 PIC X(1) VALUE X'00'. 03 S1-DATA8 PIC X(1) VALUE X'04'. 03 S1-DATA9 PIC X(2) VALUE 'AC'. 03 S1-DATA10 PIC X(1) VALUE X'00'. 03 S1-DATA11 PIC X(1) VALUE X'02'. * データ転送指示受信領域 * 01 RECV-AREA2. 02 RE-DATALENG2 PIC 9(4) COMP VALUE 1028. 02 RE-RSV2 PIC X(2). 02 RE-DATA2 PIC X(1024). * ハンドシェイク&制御権譲渡指示受信領域 * 01 RECV-AREA3. 02 RE-DATALENG3 PIC 9(4) COMP VALUE 1028. 02 RE-RSV3 PIC X(2). 02 RE-DATA3 PIC X(1024). * ハンドシェイク&制御権譲渡応答送信領域 * 01 SEND-AREA3. 02 SE-DATALENG3 PIC 9(4) COMP VALUE 18. 02 SE-RSV3 PIC X(2). 02 SE-DATA3. 03 S3-DATA1 PIC X(1) VALUE X'00'. 03 S3-DATA2 PIC X(1) VALUE X'0a'. 03 S3-DATA3 PIC X(4) VALUE 'OTP1'. 03 S3-DATA4 PIC X(4) VALUE 'HGP '. 03 S3-DATA5 PIC X(1) VALUE X'00'. 03 S3-DATA6 PIC X(1) VALUE X'02'. 03 S3-DATA7 PIC X(1) VALUE X'00'. 03 S3-DATA8 PIC X(1) VALUE X'02'. * データ転送要求送信領域 * 01 SEND-AREA2. 02 SE-DATALENG2 PIC 9(4) COMP VALUE 27. 02 SE-RSV2 PIC X(2). 02 SE-DATA2. 03 S2-DATA1 PIC X(1) VALUE X'00'. 03 S2-DATA2 PIC X(1) VALUE X'0a'. 03 S2-DATA3 PIC X(4) VALUE 'OTP1'. 03 S2-DATA4 PIC X(4) VALUE 'TDR '. 03 S2-DATA5 PIC X(1) VALUE X'00'. 03 S2-DATA6 PIC X(1) VALUE X'02'. 03 S2-DATA7 PIC X(1) VALUE X'00'. 03 S2-DATA8 PIC X(1) VALUE X'0b'. 03 S2-DATA9 PIC X(1) VALUE X'80'. 03 S2-DATA10 PIC X(8) VALUE 'USERDATA'. * ダイアログ終了要求送信領域 * 01 SEND-AREA4. 02 SE-DATALENG4 PIC 9(4) COMP VALUE 22. 02 SE-RSV4 PIC X(2). 02 SE-DATA4. 03 S4-DATA1 PIC X(1) VALUE X'00'. 03 S4-DATA2 PIC X(1) VALUE X'0a'. 03 S4-DATA3 PIC X(4) VALUE 'OTP1'. 03 S4-DATA4 PIC X(4) VALUE 'EDR '. 03 S4-DATA5 PIC X(1) VALUE X'00'. 03 S4-DATA6 PIC X(1) VALUE X'06'. 03 S4-DATA7 PIC X(1) VALUE X'00'. 03 S4-DATA8 PIC X(1) VALUE X'04'. 03 S4-DATA9 PIC X(2) VALUE 'TR'. 03 S4-DATA10 PIC X(1) VALUE X'00'. 03 S4-DATA11 PIC X(1) VALUE X'02'. * ダイアログ終了確認受信領域 * 01 RECV-AREA4. 02 RE-DATALENG4 PIC 9(4) COMP VALUE 1028. 02 RE-RSV4 PIC X(2). 02 RE-DATA4 PIC X(1024). * 通信記述項 * COMMUNICATION SECTION. * ダイアログ開始要求の受信 * CD RECV-IN1 FOR INPUT STATUS KEY IS RE-STATUS1 SYMBOLIC TERMINAL IS RE-TERMNAM1 MESSAGE DATE IS RE-DATE1 MESSAGE TIME IS RE-TIME1. * ダイアログ開始応答の送信 * CD SEND-OT1 FOR I-O STATUS KEY IS SE-STATUS1 SYMBOLIC TERMINAL IS SE-TERMNAM1 SYNCHRONOUS MODE IS SYNC. * データ転送指示の受信 * CD RECV-IN2 FOR I-O STATUS KEY IS RE-STATUS2 SYMBOLIC TERMINAL IS RE-TERMNAM2 MESSAGE DATE IS RE-DATE2 MESSAGE TIME IS RE-TIME2 SYNCHRONOUS MODE IS SYNC WAITING TIME IS RE-WAIT2. * ハンドシェイク&制御権譲渡指示の受信 * CD RECV-IN3 FOR I-O STATUS KEY IS RE-STATUS3 SYMBOLIC TERMINAL IS RE-TERMNAM3 MESSAGE DATE IS RE-DATE3 MESSAGE TIME IS RE-TIME3 SYNCHRONOUS MODE IS SYNC WAITING TIME IS RE-WAIT3. * ハンドシェイク&制御権譲渡応答の送信 * CD SEND-OT3 FOR I-O STATUS KEY IS SE-STATUS3 SYMBOLIC TERMINAL IS SE-TERMNAM3 SYNCHRONOUS MODE IS SYNC. * データ転送要求の送信 * CD SEND-OT2 FOR I-O STATUS KEY IS SE-STATUS2 SYMBOLIC TERMINAL IS SE-TERMNAM2 SYNCHRONOUS MODE IS SYNC. * ダイアログ終了要求の送信 * CD SEND-OT4 FOR I-O STATUS KEY IS SE-STATUS4 SYMBOLIC TERMINAL IS SE-TERMNAM4. * ダイアログ終了確認の受信 * CD RECV-IN4 FOR I-O STATUS KEY IS RE-STATUS4 SYMBOLIC TERMINAL IS RE-TERMNAM4 MESSAGE DATE IS RE-DATE4 MESSAGE TIME IS RE-TIME4 SYNCHRONOUS MODE IS SYNC WAITING TIME IS RE-WAIT4. * 通信文 * PROCEDURE DIVISION. * ダイアログ開始指示の受信 * RECEIVE RECV-IN1 FIRST SEGMENT INTO RECV-AREA1. * ダイアログ開始応答の送信 * MOVE RE-TERMNAM1 TO SE-TERMNAM1. SEND SEND-OT1 FROM SEND-AREA1. * データ転送指示の受信 * MOVE RE-TERMNAM1 TO RE-TERMNAM2. MOVE '00010000' TO RE-WAIT2. RECEIVE RECV-IN2 SEGMENT INTO RECV-AREA2. * ハンドシェイク&制御権譲渡指示の受信 * MOVE RE-TERMNAM1 TO RE-TERMNAM3. MOVE '00010000' TO RE-WAIT3. RECEIVE RECV-IN3 SEGMENT INTO RECV-AREA3. * ハンドシェイク&制御権譲渡応答の送信 * MOVE RE-TERMNAM1 TO SE-TERMNAM3. SEND SEND-OT3 FROM SEND-AREA3. * データ転送要求の送信 * MOVE RE-TERMNAM1 TO SE-TERMNAM2. SEND SEND-OT2 FROM SEND-AREA2. * ダイアログ終了要求の送信 * MOVE RE-TERMNAM1 TO SE-TERMNAM4. DISABLE SEND-OT4 WITH SEND-AREA4. * ダイアログ終了確認の受信 * MOVE RE-TERMNAM1 TO RE-TERMNAM4. MOVE '00010000' TO RE-WAIT4. RECEIVE RECV-IN4 SEGMENT INTO RECV-AREA4. * 終了処理 * EXIT PROGRAM.