付録E.4 ユーザアプリケーションプログラムのコーディング例(半二重でのC言語)

<この項の構成>
(1) コンテンション勝者側(SPP)
(2) コンテンション敗者側(MHP)

(1) コンテンション勝者側(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 : ;
}

(2) コンテンション敗者側(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 : ;