Hitachi

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


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

図I-1の処理の流れについて,使用する言語ごとにUAPのコーディング例を示します。

〈この項の構成〉

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

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

/********************************************************/
/*    C言語を使用したUAP作成例                             */
/********************************************************/
#include <dcmcf.h>
 
void ex_uap1()
{
    char termnam[9];
    DCLONG rdataleng;
    DCLONG time;
    struct{
        char mcfctl[8];
        DCLONG msglen;
        char recvdata[2036];
    }recvmsg;
    struct{
        char mcfctl[8];
        DCLONG msglen;
        char senddata1[500];
    }sendmsg;
    char senddata2[512];
    static char resv01[9] = "\0" ;  /*** 予備領域の初期化 ***/
    static char resv02[9] = "\0" ;  /*** 予備領域の初期化 ***/
    static char resv03[9] = "\0" ;  /*** 予備領域の初期化 ***/
    char *workadd = (char *)&recvmsg;
 
    dc_mcf_receive(DCMCFFRST,DCNOFLAGS,termnam,resv01,
                   workadd,&rdataleng,2048,&time) ;
                                 /* 一方送信メッセージの受信 */
    /***************************************/
    /*********   データの処理     ************/
    /***************************************/
 
    dc_mcf_send(DCMCFEMI,DCMCFOUT,"PRINTER1",resv01,
                senddata2,504,resv02,DCNOFLAGS);
                                 /* 一方送信メッセージの送信 */
    sendmsg.msglen = 504;       /* セグメント長の設定 */
    dc_mcf_send(DCMCFEMI,DCMCFOUT,"TERMNAM1",resv01,
                (char *)&sendmsg,504,resv02,DCNOFLAGS);
/* メッセージの送信 */
}
/********   C言語によるUAP 終わり   ********/

(2) COBOL言語

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

/*******************************************************/
/******    COBOL言語を使用したUAP作成例            ********/
/*******************************************************/
 
IDENTIFICATION DIVISION.
PROGRAM-ID. EXUAP1.
          :
ENVIRONMENT DIVISION.
          :
DATA DIVISION.
          :
WORKING-STORAGE SECTION.
          :
01  RCV.
  02  MSG-REC         PIC X(8) VALUE 'RECEIVE '.
  02  STATUS-CODE1    PIC X(5).
  02  FILLER          PIC X(3).
  02  SEG-CODE        PIC X(4) VALUE 'FRST'.
  02  RTN-CODE        PIC X(4) VALUE SPACE.
  02  DAY-ID          PIC 9(8).
  02  TIME-ID         PIC 9(8).
  02  SEG-LENG        PIC 9(9) COMP VALUE 2048.
  02  MCFUSE01        PIC X(4) VALUE SPACE.
  02  MCFUSE02        PIC X(4) VALUE SPACE.
  02  MCFUSE03        PIC X(4) VALUE SPACE.
  02  MCFUSE04        PIC X(4) VALUE SPACE.
  02  MCFUSE05        PIC X(8) VALUE SPACE.
  02  MCFUSE06        PIC X(4) VALUE SPACE.
  02  MCFUSE07        PIC X(8) VALUE SPACE.
  02  MCFUSE08        PIC X(4) VALUE SPACE.
  02  MCFUSE09        PIC 9(9) COMP VALUE ZERO.
  02  MCFUSE10        PIC 9(9) COMP VALUE ZERO.
  02  MCFUSE11        PIC X(1) VALUE SPACE.
  02  MCFUSE12        PIC X(1) VALUE SPACE.
  02  MCFUSE13        PIC X(14) VALUE LOW-VALUE.
01  CD1.
  02  SEG-CODE1       PIC X(4) VALUE SPACE.
  02  TERM-CODE       PIC X(8).
  02  MCFUSE14        PIC X(8).
  02  MCFUSE15        PIC X(8) VALUE SPACE.
  02  MCFUSE16        PIC X(28) VALUE LOW-VALUE.
01  DATA1.
  02  MSGSEG-LENG1    PIC 9(9) COMP.
  02  MCFUSE17        PIC X(4).
  02  MCFUSE18        PIC X(2).
  02  MCFUSE19        PIC X(1).
  02  MCFUSE20        PIC X(1).
  02  REC-MSGSEG1.
    03  MSG-LENG      PIC 9(9) COMP.
    03  RECV-DATA     PIC X(2036).
01  SND1.
  02  MSG-SEND        PIC X(8) VALUE 'SEND    '.
  02  STATUS-CODE2    PIC X(5).
  02  FILLER          PIC X(3).
  02  MCFUSE21        PIC X(4) VALUE SPACE.
  02  MCFUSE22        PIC X(4) VALUE SPACE.
  02  MCFUSE23        PIC 9(8).
  02  MCFUSE24        PIC 9(8).
  02  MCFUSE25        PIC 9(9) COMP VALUE ZERO.
  02  SEND-SEG        PIC X(4) VALUE 'EMI '.
  02  MCFUSE26        PIC X(4) VALUE SPACE.
  02  SEND-NORM       PIC X(4) VALUE 'NORM'.
  02  SEND-NO         PIC X(4) VALUE 'NSEQ'.
  02  MCFUSE27        PIC X(8) VALUE SPACE.
  02  MCFUSE28        PIC X(4) VALUE SPACE.
  02  MCFUSE29        PIC X(8) VALUE SPACE.
  02  MCFUSE30        PIC X(4) VALUE SPACE.
  02  MCFUSE31        PIC 9(9) COMP VALUE ZERO.
  02  MCFUSE32        PIC 9(9) COMP.
  02  MCFUSE33        PIC X(1) VALUE SPACE.
  02  MCFUSE34        PIC X(1) VALUE SPACE.
  02  MCFUSE35        PIC X(14) VALUE LOW-VALUE.
01  CD2.
  02  SENDSEG-CODE2   PIC X(4) VALUE 'OUT '.
  02  TERM-CODE2      PIC X(8) VALUE 'PRINTER1'.
  02  MCFUSE36        PIC X(8) VALUE SPACE.
  02  MCFUSE37        PIC X(8) VALUE SPACE.
  02  MCFUSE38        PIC X(28) VALUE LOW-VALUE.
01  DATA2.
  02  MSGSEG-LENG2    PIC 9(9) COMP VALUE 512.
  02  MCFUSE39        PIC X(8).
  02  REC-MSGSEG2     PIC X(512).
01  SND2.
  02  MSG-SEND        PIC X(8) VALUE 'SEND    '.
  02  STATUS-CODE3    PIC X(5).
  02  FILLER          PIC X(3).
  02  MCFUSE40        PIC X(4) VALUE SPACE.
  02  MCFUSE41        PIC X(4) VALUE SPACE.
  02  MCFUSE42        PIC 9(8).
  02  MCFUSE43        PIC 9(8).
  02  MCFUSE44        PIC 9(9) COMP VALUE ZERO.
  02  SEND-SEG1       PIC X(4) VALUE 'EMI '.
  02  MCFUSE45        PIC X(4) VALUE SPACE.
  02  SEND-NORM1      PIC X(4) VALUE 'NORM'.
  02  SEND-NO1        PIC X(4) VALUE 'NSEQ'.
  02  MCFUSE46        PIC X(8) VALUE SPACE.
  02  MCFUSE47        PIC X(4) VALUE SPACE.
  02  MCFUSE48        PIC X(8) VALUE SPACE.
  02  MCFUSE49        PIC X(4) VALUE SPACE.
  02  MCFUSE50        PIC 9(9) COMP VALUE ZERO.
  02  MCFUSE51        PIC 9(9) COMP.
  02  MCFUSE52        PIC X(1) VALUE SPACE.
  02  MCFUSE53        PIC X(1) VALUE SPACE.
  02  MCFUSE54        PIC X(14) VALUE LOW-VALUE.
01  CD3.
  02  SENDSEG-CODE3   PIC X(4) VALUE 'OUT '.
  02  TERM-CODE3      PIC X(8) VALUE 'TERMNAM1'.
  02  MCFUSE55        PIC X(8) VALUE SPACE.
  02  MCFUSE56        PIC X(8) VALUE SPACE.
  02  MCFUSE57        PIC X(28) VALUE LOW-VALUE.
01  DATA3.
  02  MSGSEG-LENG3    PIC 9(9) COMP VALUE 512.
  02  MCFUSE58        PIC X(8).
  02  REC-MSGSEG3.
    03  MSG-LENG      PIC 9(9) COMP.
    03  SEND-DATA     PIC X(508).
          :
          :
PROCEDURE DIVISION.
CALL 'CBLDCMCF' USING RCV CD1 DATA1.    
/* 一方送信メッセージの受信 */
 
/**********************************/
/*********    処理1     ************/
/**********************************/
 
CALL 'CBLDCMCF' USING SND1 CD2 DATA2.   
/* 一方送信メッセージの送信 */
 
/**********************************/
/*********    処理2     ************/
/**********************************/
 
MOVE 512 TO MSG-LENG OF REC-MSGSEG3.    
/* セグメント長の設定 */
CALL 'CBLDCMCF' USING SND2 CD3 DATA3.   
/* メッセージの送信 */
 
/**********************************/
/*********    処理3     ************/
/**********************************/
 
EXIT PROGRAM.
 
/******   COBOL言語によるUAP 終わり   ******/

(3) データ操作言語

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

*
*****************************************************
*    MHPサービスプログラム                             *
*****************************************************
*
 IDENTIFICATION DIVISION.
 
 PROGRAM-ID. SVRA.
 
 ENVIRONMENT DIVISION.
 CONFIGURATION SECTION.
*
*****************************************************
*    ワーク変数                                       *
*****************************************************
*
 DATA DIVISION.
 WORKING-STORAGE SECTION.
*
****************************************************
*    メッセージ受信領域                               *
****************************************************
*
  01  RECV-AREA.
    02  RE-DATALENG       PIC 9(4) COMP VALUE 1028.
    02  RE-RSV1           PIC X(2).
    02  RECV-MSG.
      03  MSG-LENG        PIC 9(9).
      03  REC-DATA        PIC X(1020).
*
****************************************************
*    一方送信メッセージ送信領域                         *
****************************************************
*
  01  SEND-IO-AREA1.
    02  IO-DATALENG       PIC 9(4) COMP VALUE 512.
    02  IO-RSV1           PIC X(2).
    02  IO-DATA           PIC X(508).
*
****************************************************
*    メッセージ送信領域                               *
****************************************************
*
  01  SEND-IO-AREA2.
    02  IO-DATALENG       PIC 9(4) COMP VALUE 516.
    02  IO-RSV1           PIC X(2).
    02  SEND-MSG.
      03  MSG-LENG        PIC 9(9) COMP.
      03  SEND-DATA       PIC X(508).
*
*****************************************************
*    通信記述項                                       *
*****************************************************
*
 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.
*
*****************************************************
*    一方送信メッセージの送信の通信記述項                 *
*****************************************************
*
 CD SEND-IO-1
   FOR OUTPUT
   STATUS KEY IS        SE-STATUS-IO-1
   SYMBOLIC TERMINAL IS SE-TERMNAM-IO-1.
*
****************************************************
*    メッセージの送信の通信記述項                       *
****************************************************
*
 CD SEND-IO-2
   FOR OUTPUT
   STATUS KEY IS        SE-STATUS-IO-2
   SYMBOLIC TERMINAL IS SE-TERMNAM-IO-2.
*
 
 PROCEDURE DIVISION.
 
*
****************************************************
*    メッセージの受信の通信記述項                       *
****************************************************
*
   RECEIVE RECV-INF
           FIRST SEGMENT
           INTO RECV-AREA.
*
****************************************************
*    一方送信メッセージの送信の通信記述項                *
****************************************************
*
  MOVE 'PRINTER1' TO SE-TERMNAM-IO-1.
  SEND SEND-IO-1
       FROM SEND-IO-AREA1.
*
****************************************************
*    メッセージの送信の通信記述項                       *
****************************************************
*
  MOVE 512 TO MSG-LENG OF SEND-MSG.
  MOVE 'TERMNAM1' TO SE-TERMNAM-IO-2.
  SEND SEND-IO-2
       FROM SEND-IO-AREA2.
  EXIT PROGRAM.