Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プロトコル TP1/NET/XMAP3編


付録H.1 コーディング例

使用する言語ごとにUAPのコーディング例を示します。

〈この項の構成〉

(1) C言語(K&R版)

C言語(K&R版)を使用したUAPのコーディング例を次に示します。

(a) コーディング例(C言語)

/*
 * MHP サービス関数
 */
#include <stdio.h>
#include <dcmcf.h>
/*
 * 論理マップの取り込み
 */
#include "LOG0101I.h"                  ……1.
#include "LOG0201O.h"                  ……1.
#include "LOG1001O.h"                  ……1.
 
void uap01()
{
  int  rtn_cod;
 
  DCLONG action;
  DCLONG commform;
  char recv_term[9];
  char recv_map[9];
  DCLONG rdataleng;
  DCLONG inbufleng;
  DCLONG time;
 
  static char send_term[9] = "XPNLE201";
  static char send_map[9] = "MAM10";
  DCLONG sdataleng;
  char *pagecdat = NULL;
  DCLONG opcd;
 
  static char resv01[9] = "\0";
  static char rply_map[9] = "MAM02";
  static char nextap[9] = "\0";
 
/*
 * メッセージの受信
 */
  action = DCMCFFRST | DCMCFBUF2;
  commform = DCNOFLAGS;
  inbufleng = (DCLONG)LOG0101I.LOG0101S;
  rtn_cod = dc_mcf_receive(action,
               commform,
               recv_term,
               recv_map,
               &LOG0101I,              ……2.
               &rdataleng,
               inbufleng,
               &time);
 
/*
 *****************************************************************
 *                                                               *
 *                                                               *
 *     データの処理                                              *
 *                                                               *
 *                                                               *
 *****************************************************************
 */
 
/*
 * 一方送信メッセージの送信
 */
  action = DCMCFEMI | DCMCFNORM | DCMCFNSEQ | DCMCFBUF2;
  commform = DCMCFOUT;
  sdataleng = (DCLONG)LOG1001O.LOG1001L -4;
  opcd = DCNOFLAGS;
  rtn_cod = dc_mcf_send(action,
              commform,
              send_term,
              send_map,
              &LOG1001O,              ……2.
              sdataleng,
              pagecdat,
              opcd);
/*
 * 応答メッセージの送信
 */
  action = DCMCFEMI|DCMCFBUF2;
  commform = DCNOFLAGS;
  sdataleng = (DCLONG)LOG0201O.LOG0201L -4;
  opcd = DCNOFLAGS;
  rtn_cod = dc_mcf_reply(action,
               commform,
               resv01,
               rply_map,
               &LOG0201O,              ……2.
               sdataleng,
               nextap,
               opcd);
 
}

コーディング例中の1.および2.は次の意味になります。

  1. XMAP3で生成した入力・出力論理マップを#includeで取り込みます。

  2. recvdata・senddataには,XMAP3で作成した入力・出力論理マップの先頭アドレスを指定します。

(2) COBOL言語

COBOL言語を使用したUAPのコーディング例を次に示します。

(a) コーディング例(COBOL言語)

*
***********************************************************
*     MHPサービスプログラム(COBOL)                        *
***********************************************************
*
 IDENTIFICATION DIVISION.
 
 PROGRAM-ID. MHPC.
 
 ENVIRONMENT DIVISION.
 CONFIGURATION SECTION.
*
***********************************************************
*     ワーク変数                                          *
***********************************************************
*
 DATA DIVISION.
 WORKING-STORAGE SECTION.
*
***********************************************************
*     論理マップコピー                                    *
*         LOG0101I : 入力ロジカルマップ                   *
*         LOG0201O : 出力ロジカルマップ                   *
*         LOG1001O : 出力ロジカルマップ                   *
***********************************************************
*
 COPY LOG0101I.                  ……1.
 COPY LOG0201O.                  ……1.
 COPY LOG1001O.                  ……1.
*
***********************************************************
*     メッセージの受信データ領域                          *
***********************************************************
*
 01  RECV-PARM1.
   02  RE-NAME           PIC X(8) VALUE 'RECEIVE '.
   02  RE-STATUS         PIC X(5).
   02  FILLER            PIC X(3).
   02  RE-SEG            PIC X(4) VALUE 'FRST'.
   02  RE-RSV1           PIC X(4) VALUE SPACE.
   02  RE-DATE           PIC 9(8).
   02  RE-TIME           PIC 9(8).
   02  RE-LENG           PIC 9(9) COMP VALUE 44.
   02  RE-RSV2           PIC X(4) VALUE SPACE.
   02  RE-RSV3           PIC X(4) VALUE SPACE.
   02  RE-RSV4           PIC X(4) VALUE SPACE.
   02  RE-RSV5           PIC X(4) VALUE SPACE.
   02  RE-RSV6           PIC X(8) VALUE SPACE.
   02  RE-RSV7           PIC X(4) VALUE SPACE.
   02  RE-RSV8           PIC X(8) VALUE SPACE.
   02  RE-RSV9           PIC X(4) VALUE SPACE.
   02  RE-RSV10          PIC 9(9) COMP VALUE ZERO.
   02  RE-RSV11          PIC 9(9) COMP VALUE ZERO.
   02  RE-RSV12          PIC X(1) VALUE SPACE.
   02  RE-BUFTYPE        PIC X(1) VALUE '2'.
   02  RE-RSV13          PIC X(14) VALUE LOW-VALUE.
 01  RECV-PARM2.
   02  RE-RSV14          PIC X(4) VALUE SPACE.
   02  RE-TERMNAM        PIC X(8).
   02  RE-MAPNAME        PIC X(8).
   02  RE-RSV15          PIC X(8) VALUE SPACE.
   02  RE-RSV16          PIC X(28) VALUE LOW-VALUE.
*
***********************************************************
*     一方送信メッセージの送信データ領域                  *
***********************************************************
*
 01  SEND-PARM1.
   02  SE-NAME           PIC X(8) VALUE 'SEND    '.
   02  SE-STATUS         PIC X(5).
   02  FILLER            PIC X(3).
   02  SE-RSV1           PIC X(4) VALUE SPACE.
   02  SE-RSV2           PIC X(4) VALUE SPACE.
   02  SE-RSV3           PIC 9(8).
   02  SE-RSV4           PIC 9(8).
   02  SE-RSV5           PIC 9(9) COMP VALUE ZERO.
   02  SE-SEG            PIC X(4) VALUE 'EMI '.
   02  SE-SYNC           PIC X(4) VALUE SPACE.
   02  SE-RSV6           PIC X(4) VALUE 'NORM'.
   02  SE-NO             PIC X(4) VALUE 'NSEQ'.
   02  SE-RSV7           PIC X(8) VALUE SPACE.
   02  SE-RSV8           PIC X(4) VALUE SPACE.
   02  SE-RSV9           PIC X(8) VALUE SPACE.
   02  SE-RSV10          PIC X(4) VALUE SPACE.
   02  SE-RSV11          PIC 9(9) COMP VALUE ZERO.
   02  SE-RSV12          PIC 9(9) COMP.
   02  SE-MAPMOD         PIC X(1) VALUE '0'.
   02  SE-BUFTYPE        PIC X(1) VALUE '2'.
   02  SE-PAGEC          PIC X(1) VALUE '0'.
   02  SE-RSV13          PIC X(13) VALUE LOW-VALUE.
 01  SEND-PARM2.
   02  SE-COMF           PIC X(4) VALUE 'OUT '.
   02  SE-TERMNAM        PIC X(8) VALUE 'XPNLE201'.
   02  SE-MAPNAM         PIC X(8) VALUE 'MAM10   '.
   02  SE-RSV14          PIC X(8) VALUE SPACE.
   02  SE-PAGECNAM       PIC X(6) VALUE SPACE.
   02  SE-RSV15          PIC X(28) VALUE LOW-VALUE.
*
***********************************************************
*     応答メッセージの送信データ領域                      *
***********************************************************
*
 01  RPLY-PARM1.
   02  RP-NAME           PIC X(8) VALUE 'REPLY   '.
   02  RP-STATUS         PIC X(5).
   02  FILLER            PIC X(3).
   02  RP-RSV1           PIC X(4) VALUE SPACE.
   02  RP-RSV2           PIC X(4) VALUE SPACE.
   02  RP-RSV3           PIC 9(8).
   02  RP-RSV4           PIC 9(8).
   02  RP-RSV5           PIC 9(9) COMP VALUE ZERO.
   02  RP-SEG            PIC X(4) VALUE 'EMI '.
   02  RP-SYNC           PIC X(4) VALUE SPACE.
   02  RP-RSV6           PIC X(4) VALUE SPACE.
   02  RP-RSV7           PIC X(4) VALUE SPACE.
   02  RP-RSV8           PIC X(8) VALUE SPACE.
   02  RP-OPT            PIC X(4) VALUE SPACE.
   02  RP-RSV9           PIC X(8) VALUE SPACE.
   02  RP-RSV10          PIC X(4) VALUE SPACE.
   02  RP-RSV11          PIC 9(9) COMP VALUE ZERO.
   02  RP-RSV12          PIC 9(9) COMP VALUE ZERO.
   02  RP-RSV13          PIC X(1) VALUE '0'.
   02  RP-BUFTYPE        PIC X(1) VALUE '2'.
   02  RP-RSV14          PIC X(14) VALUE LOW-VALUE.
 01  RPLY-PARM2.
   02  RP-RSV15          PIC X(4) VALUE SPACE.
   02  RP-RSV16          PIC X(8) VALUE SPACE.
   02  RP-MAPNAM         PIC X(8) VALUE 'MAM02   '.
   02  RP-NEXTAP         PIC X(8) VALUE SPACE.
   02  RP-RSV18          PIC X(28) VALUE LOW-VALUE.
*
 PROCEDURE DIVISION.
*
***********************************************************
*     メッセージの受信                                    *
***********************************************************
*
   CALL 'CBLDCMCF' USING RECV-PARM1 RECV-PARM2 LOG0101I.   ……2.
 
*
***********************************************************
*                                                         *
*                                                         *
*     データの処理                                        *
*                                                         *
*                                                         *
***********************************************************
*
 
*
***********************************************************
*     一方送信メッセージの送信                            *
***********************************************************
*
   CALL 'CBLDCMCF' USING SEND-PARM1 SEND-PARM2 LOG1001O.   ……2.
*
***********************************************************
*     応答メッセージの送信                                *
***********************************************************
*
   CALL 'CBLDCMCF' USING RPLY-PARM1 RPLY-PARM2 LOG0201O.   ……2.
*
***********************************************************
*     終了処理                                            *
***********************************************************
*
   EXIT PROGRAM.

コーディング例中の1.および2.は次の意味になります。

  1. XMAP3で生成した入力・出力論理マップをCOPY文で取り込みます。

  2. 一意名3には,XMAP3で作成した入力・出力論理マップを指定します。

(b) コーディング例(データ操作言語)

*
***********************************************************
*     MHPサービスプログラム(DML)                          *
***********************************************************
*
 IDENTIFICATION DIVISION.
 
 PROGRAM-ID. MHPD.
 
 ENVIRONMENT DIVISION.
 CONFIGURATION SECTION.
*
***********************************************************
*     ワーク変数                                          *
***********************************************************
*
 DATA DIVISION.
 WORKING-STORAGE SECTION.
*
***********************************************************
*     論理マップコピー                                    *
*          LOG0101I : 入力ロジカルマップ                  *
*          LOG0201O : 出力ロジカルマップ                  *
*          LOG1001O : 出力ロジカルマップ                  *
***********************************************************
*
 COPY LOG0101I.                  ……1.
 COPY LOG0201O.                  ……1.
 COPY LOG1001O.                  ……1.
*
***********************************************************
*     通信記述項                                          *
***********************************************************
*
 COMMUNICATION SECTION.
*
***********************************************************
*     メッセージの受信                                    *
***********************************************************
*
 CD RECV-INF
   FOR INPUT
   STATUS KEY IS        RE-STATUS
   SYMBOLIC TERMINAL IS RE-TERMNAM
   MESSAGE DATE IS      RE-DATE
   MESSAGE TIME IS      RE-TIME
   MAP NAME IS          RE-MAPNAM.
*
***********************************************************
*     一方送信メッセージの送信                            *
***********************************************************
*
 CD SEND-INF-OUT
   FOR OUTPUT
   STATUS KEY IS        SE-STATUS-OUT
   SYMBOLIC TERMINAL IS SE-TERMNAM-OUT
   MAP NAME IS          SE-MAPNAM-OUT
   SWITCHING MODE IS    NORMAL.
*
***********************************************************
*     応答メッセージの送信                                *
***********************************************************
*
 CD SEND-INF-IO
   FOR I-O
   STATUS KEY IS        SE-STATUS-IO
   MAP NAME IS          SE-MAPNAM-IO.
 
 PROCEDURE DIVISION.
 
*
***********************************************************
*     メッセージの受信                                    *
***********************************************************
*
   RECEIVE RECV-INF
           FIRST SEGMENT
           INTO LOG0101I.        ……2.
 
*
***********************************************************
*                                                         *
*                                                         *
*     データの処理                                        *
*                                                         *
*                                                         *
***********************************************************
*
 
*
***********************************************************
*     一方送信メッセージの送信                            *
***********************************************************
*
   MOVE 'XPNLE201' TO SE-TERMNAM-OUT.
   MOVE 'MAM10   '  TO SE-MAPNAM-OUT.
 
   SEND SEND-INF-OUT
        FROM LOG1001O        ……2.
        WITH EMI.
*
***********************************************************
*     応答メッセージの送信                                *
***********************************************************
*
   MOVE 'MAM02   '    TO SE-MAPNAM-IO.
 
   SEND SEND-INF-IO
        FROM LOG0201O        ……2.
        WITH EMI.
*
***********************************************************
*     終了処理                                            *
***********************************************************
*
   EXIT PROGRAM.

コーディング例中の1.および2.は次の意味になります。

  1. XMAP3で生成した入力・出力論理マップをCOPY文で取り込みます。

  2. 一意名1には,XMAP3で作成した入力・出力論理マップを指定します。