Hitachi

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


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

〈この項の構成〉

(1) C言語

(a) ANSI C,C++の場合

/*
 * MHP SERVICE FUNCTION
 */
 
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <dcmcf.h>
#include <dcrpc.h>
 
void SVRA(void) 
{
     DCLONG action ;
     DCLONG commform ;
     DCLONG opcd ;
     DCLONG active ;
     char   recvdata[1024] ;
     DCLONG rdataleng ;
     DCLONG time ;
     DCLONG inbufleng ;
     int    rtn_cod ;
     DCLONG cdataleng ;
     char   termnam[10] ;
     struct dataform { char mcfuse[8] ;
                       char trnname[9] ;
                       char data[23] ;
                     } ;
     static struct dataform execdata ;
     static struct dataform senddata ;
     static char resv01[9] ;
     static char resv02[9] ;
     static char apnam[9] ;
 
     strncpy(execdata.mcfuse, "        ", 8) ;
     strncpy(execdata.trnname, "         ", 9) ;
     strcpy(execdata.data, "SRVA EXECAP DATA") ;
     strncpy(senddata.mcfuse, "        ", 8) ;
     senddata.trnname[0] = 0xc1 ;  /* A */
     senddata.trnname[1] = 0xd7 ;  /* P */
     senddata.trnname[2] = 0xd3 ;  /* L */
     senddata.trnname[3] = 0xf0 ;  /* 0 */
     senddata.trnname[4] = 0xf2 ;  /* 2 */
     senddata.trnname[5] = 0x40 ;  /*   */
     senddata.trnname[6] = 0x40 ;  /*   */
     senddata.trnname[7] = 0x40 ;  /*   */
     senddata.trnname[8] = 0x40 ;  /*   */
     strcpy(senddata.data, "SRVA SEND   DATA") ;
     strcpy(execdata.mcfuse, "" ) ;
     strcpy(resv02, "") ;
     strcpy(apnam, "APL01") ;
 
/*
 * MCF-RECEIVE(MESSAGE RECEIVING)
 */
 
     action = DCMCFFRST ; 
     commform = DCNOFLAGS ;
     inbufleng = sizeof(recvdata) ;
     rtn_cod = dc_mcf_receive(action, commform, termnam, resv01,
                              recvdata, &rdataleng, inbufleng, &time) ;
     if(rtn_cod != DCMCFRTN_00000) {
/*
 * MCF-ROLLBACK(ERROR PROCESSING)
 */
     rtn_cod = dc_mcf_rollback(DCMCFNRTN) ;
     }
/*
 * MCF-EXECAP(APPICATION PROGRAM BOOTING)
 */
     action = DCMCFEMI|DCMCFJUST ;
     commform = DCNOFLAGS ;
     active = 0 ;
     cdataleng = 25 ;
     rtn_cod = dc_mcf_execap(action, commform, resv01, active,
                             apnam, (char*)&execdata, cdataleng) ;
     if(rtn_cod != DCMCFRTN_00000) {
/*
 * MCF-ROLLBACK(ERROR PROCESSING)
 */
     rtn_cod = dc_mcf_rollback(DCMCFNRTN) ;
     }
/*
 * MCF-SEND(MESSAGE SENDING)
 */
     action = DCMCFEMI ;
     commform = DCMCFOUT ;
     strcpy(termnam, "NFLE02");
     opcd = DCNOFLAGS ;
     cdataleng = 25 ;
     rtn_cod = dc_mcf_send(action, commform, termnam, resv01,
                           (char *)&senddata, cdataleng, resv02, opcd) ;
     if(rtn_cod != DCMCFRTN_00000) {
/*
 * MCF ROLLBACK(ERROR PROCESSING)
 */
     rtn_cod = dc_mcf_rollback(DCMCFNRTN) ;
     }
}

(b) K&R版Cの場合

/*
 * MHP SERVICE FUNCTION
 */
#include <stdio.h>
#include <sys/types.h>
#include <dcmcf.h>
#include <dcrpc.h>
 
SVRA() 
{
     DCLONG action ;
     DCLONG commform ;
     DCLONG opcd ;
     DCLONG active ;
     char   recvdata[1024] ;
     DCLONG rdataleng ;
     DCLONG time ;
     DCLONG inbufleng ;
     int    rtn_cod ;
     DCLONG cdataleng ;
     char   termnam[10] ;
     struct dataform { char mcfuse[8] ;
                       char trnname[9] ;
                       char data[23] ;
                     } ;
     static struct dataform execdata ;
     static struct dataform senddata ;
     static char resv01[9] ;
     static char resv02[9] ;
     static char apnam[9] ;
 
     strncpy(execdata.mcfuse, "        ", 8) ;
     strncpy(execdata.trnname, "         ", 9) ;
     strcpy(execdata.data, "SRVA EXECAP DATA") ;
     strncpy(senddata.mcfuse, "        ", 8) ;
     senddata.trnname[0] = 0xc1 ;  /* A */
     senddata.trnname[1] = 0xd7 ;  /* P */
     senddata.trnname[2] = 0xd3 ;  /* L */
     senddata.trnname[3] = 0xf0 ;  /* 0 */
     senddata.trnname[4] = 0xf2 ;  /* 2 */
     senddata.trnname[5] = 0x40 ;  /*   */
     senddata.trnname[6] = 0x40 ;  /*   */
     senddata.trnname[7] = 0x40 ;  /*   */
     senddata.trnname[8] = 0x40 ;  /*   */
     strcpy(senddata.data, "SRVA SEND   DATA") ;
     strcpy(execdata.mcfuse, "" ) ;
 
 
     strcpy(resv02, "") ;
     strcpy(apnam, "APL01") ;
 
/*
 * MCF-RECEIVE(MESSAGE RECEIVING)
 */
     action = DCMCFFRST ; 
     commform = DCNOFLAGS ;
     inbufleng = sizeof(recvdata) ;
     rtn_cod = dc_mcf_receive(action, commform, termnam, resv01, recvdata,
                              &rdataleng, inbufleng, &time) ;
     if(rtn_cod != DCMCFRTN_00000) {
/*
 * MCF-ROLLBACK(ERROR PROCESSING)
 */
     rtn_cod = dc_mcf_rollback(DCMCFNRTN) ;
     }
/*
 * MCF-EXECAP(APPLICATION PROGRAM BOOTING)
 */
     action = DCMCFEMI|DCMCFJUST ;
     commform = DCNOFLAGS ;
     active = 0 ;
     cdataleng = 25 ;
     rtn_cod = dc_mcf_execap(action, commform, resv01, active,
                             apnam, (char*)&execdata, cdataleng) ;
     if(rtn_cod != DCMCFRTN_00000) {
/*
 * MCF-ROLLBACK(ERROR PROCESSING)
 */
     rtn_cod = dc_mcf_rollback(DCMCFNRTN) ;
     }
/*
 * MCF-SEND(MESSAGE SENDING)
 */
     action = DCMCFEMI ;
     commform = DCMCFOUT ;
     strcpy(termnam, "NFLE02");
     opcd = DCNOFLAGS ;
     cdataleng = 25 ;
     rtn_cod = dc_mcf_send(action, commform, termnam, resv01,
                           (char *)&senddata, cdataleng, resv02, opcd) ;
     if(rtn_cod != DCMCFRTN_00000) {
/*
 * MCF ROLLBACK(ERROR PROCESSING)
 */     
     rtn_cod = dc_mcf_rollback(DCMCFNRTN) ;
     }
}

(2) COBOL言語

***************************************************************
*    MHP SERVICE PROGRAM                                      *
***************************************************************
 
 IDENTIFICATION DIVISION.
 
 PROGRAM-ID. SVRA.
 
 ENVIRONMENT DIVISION.
 CONFIGURATION SECTION.
 
***************************************************************
*   WORKING STORAGE                                           *
***************************************************************
 
 DATA DIVISION.
 WORKING-STORAGE SECTION.
 
***************************************************************
*    DATA AREA FOR MCF-RECEIVE                                *
***************************************************************
 
 01  RECV-PARM1.
   02  RECV-A            PIC X(8) VALUE 'RECEIVE '.
   02  RECV-B            PIC X(5).
   02  FILLER            PIC X(3).
   02  RECV-C            PIC X(4) VALUE 'FRST'.
   02  RECV-D            PIC X(4) VALUE SPACE.
   02  RECV-E            PIC 9(8).
   02  RECV-F            PIC 9(8).
   02  RECV-G            PIC 9(9) COMP VALUE 1024.
   02  RECV-H            PIC X(4) VALUE SPACE.
   02  RECV-I            PIC X(4) VALUE SPACE.
   02  RECV-J            PIC X(4) VALUE SPACE.
   02  RECV-K            PIC X(4) VALUE SPACE.
   02  RECV-L            PIC X(8) VALUE SPACE.
   02  RECV-M1           PIC X(4) VALUE SPACE.
   02  RECV-M2           PIC X(8) VALUE SPACE.
   02  RECV-M3           PIC X(4) VALUE SPACE.
   02  RECV-M4           PIC 9(9) COMP VALUE ZERO.
   02  RECV-M5           PIC 9(9) COMP VALUE ZERO.
   02  RECV-M6           PIC X(1) VALUE SPACE.
   02  RECV-M7           PIC X(1) VALUE SPACE.
   02  RECV-N            PIC X(14) VALUE LOW-VALUE.
 01  RECV-PARM2.
   02  RECV-O            PIC X(4) VALUE SPACE.
   02  RECV-P            PIC X(8).
   02  RECV-Q            PIC X(8) VALUE SPACE.
   02  RECV-R            PIC X(8) VALUE SPACE.
   02  RECV-T            PIC X(28) VALUE LOW-VALUE.
 01  RECV-PARM3.
   02  RECV-U            PIC 9(9) COMP.
   02  RECV-V            PIC X(8).
   02  RECV-W            PIC X(1024).
 
***************************************************************
*    DATA AREA FOR MCF-EXECAP                                 *
***************************************************************
 
 01  EXEC-PARM1.
   02  EXEC-A            PIC X(8) VALUE 'EXECAP  '.
   02  EXEC-B            PIC X(5).
   02  FILLER            PIC X(3).
   02  EXEC-C            PIC X(4) VALUE SPACE.
   02  EXEC-D            PIC X(4) VALUE SPACE.
   02  EXEC-E            PIC 9(8).
   02  EXEC-F            PIC 9(8).
   02  EXEC-G            PIC 9(9) COMP VALUE ZERO.
   02  EXEC-H            PIC X(4) VALUE 'EMI '.
   02  EXEC-I            PIC X(4) VALUE SPACE.
   02  EXEC-J            PIC X(4) VALUE SPACE.
   02  EXEC-K            PIC X(4) VALUE SPACE.
   02  EXEC-L            PIC X(8) VALUE SPACE.
   02  EXEC-M            PIC X(4) VALUE SPACE.
   02  EXEC-N            PIC X(8) VALUE 'APL01   '.
   02  EXEC-O1           PIC X(4) VALUE SPACE.
   02  EXEC-O2           PIC 9(9) COMP VALUE ZERO.
   02  EXEC-O3           PIC 9(9) COMP VALUE ZERO.
   02  EXEC-O4           PIC X(1) VALUE SPACE.
   02  EXEC-O5           PIC X(1) VALUE SPACE.
   02  EXEC-P            PIC X(14) VALUE LOW-VALUE.
 01  EXEC-PARM2.
   02  EXEC-Q            PIC X(4) VALUE SPACE.
   02  EXEC-R            PIC X(8) VALUE SPACE.
   02  EXEC-S            PIC X(8) VALUE SPACE.
   02  EXEC-T            PIC X(6) VALUE SPACE.
   02  EXEC-U            PIC X(2) VALUE SPACE. 
   02  EXEC-V            PIC X(28) VALUE LOW-VALUE.
 01  EXEC-PARM3.
   02  EXEC-W            PIC 9(9) COMP VALUE 25.
   02  EXEC-X            PIC X(8).
   02  EXEC-Y1           PIC X(9) VALUE SPACE.
   02  EXEC-Y2           PIC X(16) VALUE 'SVRA EXECAP DATA'.
 
***************************************************************
*    DATA AREA FOR MCF-SEND                                   *
***************************************************************
 
 01  SEND-PARM1.
   02  SEND-A            PIC X(8) VALUE 'SEND    '.
   02  SEND-B            PIC X(5).
   02  FILLER            PIC X(3).
   02  SEND-C            PIC X(4) VALUE SPACE.
   02  SEND-D            PIC X(4) VALUE SPACE.
   02  SEND-E            PIC 9(8).
   02  SEND-F            PIC 9(8).
   02  SEND-G            PIC 9(9) COMP VALUE ZERO.
   02  SEND-H            PIC X(4) VALUE 'EMI '.
   02  SEND-I            PIC X(4) VALUE SPACE.
   02  SEND-J            PIC X(4) VALUE SPACE.
   02  SEND-K            PIC X(4) VALUE SPACE.
   02  SEND-L            PIC X(8) VALUE SPACE.
   02  SEND-M1           PIC X(4) VALUE SPACE.
   02  SEND-M2           PIC X(8) VALUE SPACE.
   02  SEND-M3           PIC X(4) VALUE SPACE.
   02  SEND-M4           PIC 9(9) COMP VALUE ZERO.
   02  SEND-M5           PIC 9(9) COMP VALUE ZERO.
   02  SEND-M6           PIC X(1) VALUE SPACE.
   02  SEND-M7           PIC X(1) VALUE SPACE.
   02  SEND-N            PIC X(14) VALUE LOW-VALUE.
 01  SEND-PARM2.
   02  SEND-O            PIC X(4) VALUE 'OUT '.
   02  SEND-P            PIC X(8) VALUE 'NFLE02  '.
   02  SEND-Q            PIC X(8) VALUE SPACE.
   02  SEND-R            PIC X(8) VALUE SPACE.
   02  SEND-T            PIC X(28) VALUE LOW-VALUE.
 01  SEND-PARM3.
   02  SEND-U            PIC 9(9) COMP VALUE 25.
   02  SEND-V            PIC X(8).
   02  SEND-W1           PIC X(9) VALUE X'C1D7D3F0F240404040'.
   02  SEND-W2           PIC X(16) VALUE 'SVRA SEND   DATA'.
 
***************************************************************
*    DATA AREA FOR MCF-ROLLBACK                               *
***************************************************************
 
 01  RBK-PARM1.
   02  RBK-A            PIC X(8) VALUE 'ROLLBACK'.
   02  RBK-B            PIC X(5).
   02  FILLER           PIC X(3).
   02  RBK-C            PIC X(4) VALUE 'NRTN'.
   02  RBK-D            PIC X(12) VALUE LOW-VALUE.
 
 PROCEDURE DIVISION.
 
***************************************************************
*    MCF-RECEIVE(RECEIVE OF MESSAGE)                          *
***************************************************************
 
   CALL 'CBLDCMCF' USING RECV-PARM1 RECV-PARM2 RECV-PARM3.
   IF RECV-B IS NOT EQUAL TO '00000'
 
***************************************************************
*    MCF-ROLLBACK(ERROR PROCESSING)                           *
***************************************************************
 
   CALL 'CBLDCMCF' USING RBK-PARM1.
 
***************************************************************
*    MCF-EXECAP(APPLICATION PROGRAM BOOTING)                  *
***************************************************************
 
   CALL 'CBLDCMCF' USING EXEC-PARM1 EXEC-PARM2 EXEC-PARM3.
   IF EXEC-B IS NOT EQUAL TO '00000'
 
***************************************************************
*    MCF-ROLLBACK(ERROR PROCESSING)                           *
***************************************************************
 
   CALL 'CBLDCMCF' USING RBK-PARM1.
 
***************************************************************
*    MCF-SEND(SEND OF MESSAGE)                                *
***************************************************************
 
   CALL 'CBLDCMCF' USING SEND-PARM1 SEND-PARM2 SEND-PARM3.
   IF SEND-B IS NOT EQUAL TO '00000'
 
***************************************************************
*    MCF-ROLLBACK(ERROR PROCESSING)                           *
***************************************************************
 
   CALL 'CBLDCMCF' USING RBK-PARM1.
 
***************************************************************
*    END PROCESSING                                           *
***************************************************************
 
   EXIT PROGRAM.

(3) データ操作言語

***************************************************************
*    MHP SERVICE PROGRAM                                      *
***************************************************************
 
 IDENTIFICATION DIVISION.
 
 PROGRAM-ID. SVRA.
 
 ENVIRONMENT DIVISION.
 CONFIGURATION SECTION.
 
***************************************************************
*    WORKING STORAGE                                          *
***************************************************************
 
 DATA DIVISION.
 WORKING-STORAGE SECTION.
 
***************************************************************
*    AREA FOR MESSAGE RECEIVING                               *
***************************************************************
 
  01  RECV-AREA.
    02  RE-DATALENG       PIC 9(4) COMP.
    02  RE-RSV1           PIC X(2).
    02  RE-DATA           PIC X(1024).
 
***************************************************************
*    AREA FOR APPLICATION BOOTING MESSAGE                     *
***************************************************************
 
  01  SEND-PRO-AREA.
    02  PRO-DATALENG       PIC 9(4) COMP VALUE 29.
    02  PRO-RSV1           PIC X(2).
    02  PRO-DATA1          PIC X(9) VALUE SPACE.
    02  PRO-DATA2          PIC X(16) VALUE 'SVRA EXECAP DATA'.
 
***************************************************************
*    AREA FOR MESSAGE SENDING                                 *
***************************************************************
 
  01  SEND-AREA.
    02  SE-DATALENG       PIC 9(4) COMP VALUE 29.
    02  SE-RSV1           PIC X(2).
    02  SE-DATA1          PIC X(9) VALUE X'C1D7D3F0F240404040'.
    02  SE-DATA2          PIC X(16) VALUE 'SVRA SEND   DATA'.
 
 COMMUNICATION SECTION.
 
***************************************************************
*    RECEIVE OF MESSAGE (COMMUNICATION DESCRIPTION TERM)      *
***************************************************************
 
 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.
 
***************************************************************
* APPLICATION PROGRAM BOOTING (COMMUNICATION DESCRIPTON TERM) *
***************************************************************
 
 CD SEND-PRO
   FOR OUTPUT PROGRAM
   STATUS KEY IS        SE-STATUS-PRO
   SYMBOLIC TERMINAL IS SE-TERMNAM-PRO.
 
***************************************************************
*    SEND OF MESSAGE (COMMUNICATIO DESCRIPTION TERM)          *
***************************************************************
 
 CD SEND-INF
   FOR OUTPUT
   STATUS KEY IS        SE-STATUS
   SYMBOLIC TERMINAL IS SE-TERMNAM.
 
 PROCEDURE DIVISION.
 
***************************************************************
*    RECEIVE OF MESSAGE (COMMUNICATION DESCRIPTION SENTENCE)  *
***************************************************************
 
   MOVE 1028 TO RE-DATALENG.
   RECEIVE RECV-INF
           FIRST SEGMENT
           INTO RECV-AREA.
   IF RE-STATUS IS NOT EQUAL '00000'
 
***************************************************************
*    PARTIAL RECOVERY                                         *
***************************************************************
 
   ROLLBACK WITH STOPPING.
 
***************************************************************
*    APPLICATION PROGRAM BOOTING (COMMUNICATION SENTENCE)     *
***************************************************************
 
   MOVE 'APL01   ' TO SE-TERMNAM-PRO.
   SEND SEND-PRO
        FROM SEND-PRO-AREA
        WITH EMI.
   IF SE-STATUS-PRO IS NOT EQUAL '00000'
 
***************************************************************
*    PARTIAL RECOVERY                                         *
***************************************************************
 
   ROLLBACK WITH STOPPING.
 
***************************************************************
*    SEND OF MESSAGE (COMMUNICATION SENTENCE)                 *
***************************************************************
 
   MOVE 'NFLE02  ' TO SE-TERMNAM.
   SEND SEND-INF
        FROM SEND-AREA
        WITH EMI.
   IF SE-STATUS IS NOT EQUAL '00000'
 
***************************************************************
*    PARTIAL RECOVERY                                         *
***************************************************************
 
   ROLLBACK WITH STOPPING.
 
***************************************************************
*    END PROCESSING                                           *
***************************************************************
 
   EXIT PROGRAM.