Hitachi

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


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

ここでは,ユーザアプリケーションプログラムのコーディング例を示します。

〈この項の構成〉

(1) C言語

#include<dcmcf.h>
 
#define rcvmax 5120
void slmhprcv1()
{
   char            termnam[16];
   char            mapname[16];
   char            sdatarea[2048];
   char            rdatarea[rcvmax];
   DCLONG          sdataleng;
   DCLONG          rdataleng;
   DCLONG          time;
 
   int             rtn;
 
   memset(mapname, 0, 16);
   memset(sdatarea, 0, 2048);
   memset(rdatarea, 0, rcvmax);
 
   rtn =dc_mcf_receive(   DCMCFFRST, 
                          DCNOFLAGS, 
                          termnam,
                          mapname,
                          rdatarea,
                          &rdataleng,
                          rcvmax,
                          &time   );
 
   /*****************************************************/
   /*                                                   */
   /*   User Service Part                               */
   /*                                                   */
   /*****************************************************/
 
   if(rtn !=DCMCFRTN_00000)
   {
      goto ERROR;
   }
ERROR:;
   return;
}
 
 
#include<dcmcf.h>
 
#define sndmax   448
#define rcvmax   5120
#define segmax   (sndmax -9 -3 -4)          /*432 bytes */
 
/*448 bytes */
typedef   struct senddata_s{
   char    mcf_use[8];
   char    ap_name[9];
   char    snd_dmy[3];
   char    snd_lng[4];
   char    snd_seg[segmax];
}sdata_def;
 
void   slsppsnd1()
{
   static char   *lename ="SL2REQ01";
   char            termnam[9];
   char            resv01[9];
   char            resv02[9];
   char            resv03[9];
   DCLONG          rdataleng;
   DCLONG          sdataleng;
   DCLONG          inbufleng;
   sdata_def       senddata;
   int     rtn_code;
 
   memset(resv01, 0, 9);
   memset(resv02, 0, 9);
   memset(resv03, 0, 9);
 
   memset(&senddata, 0x33, sizeof(senddata));
 
   memcpy(senddata.ap_name, "slup2snd ", 9);
   memcpy(senddata.snd_lng, "0448", 4);
   memcpy(senddata.snd_seg, "send:aaaaaaaaaa1aaaaaaaaaaaaaaa2
aaaaaaaaaaaaaaa3aaaaaaaaaaaaaaa4aaaaaaaaaaaaaaa5
aaaaaaaaaaaaaaa6aaaaaaaaaaaaaaa7aaaaaaaaaaaaaaa8
aaaaaaaaaaaaaaa9aaaaaaaaaaaaaaaAaaaaaaaaaaaaaaaB
aaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaE
aaaaaaaaaaaaaaaFaaaaaaaaaaaaaaa0", 256);
   memcpy(senddata.snd_seg + segmax -3, "end", 3);
 
   rtn_code =dc_mcf_send(   DCMCFEMI, 
                            DCMCFOUT, 
                            lename, 
                            resv01, 
                            &senddata, 
                            sndmax,  
                            resv02, 
                            DCNOFLAGS   );
   if(rtn_code !=DCMCFRTN_00000)
   {
      goto ERROR;
   }
ERROR:;
   return;
}
 
 
#include <dcmcf.h>
 
#define sndmax   448
#define rcvmax   5120
#define segmax   (sndmax -9 -3 -4)/*432 bytes */
 
/*448 bytes */
typedef   struct senddata_s{
   char    mcf_use[8];
   char    ap_name[9];
   char    snd_dmy[3];
   char    snd_lng[4];
   char    snd_seg[segmax];
}sdata_def;
 
void   slsppreq1()
{
   static char   rcv_buf[rcvmax];
   static char   *lename ="SL2REQ01";
   char            termnam[9];
   char            resv01[9];
   char            resv02[9];
   char            resv03[9];
   DCLONG          rdataleng;
   DCLONG          sdataleng;
   DCLONG          inbufleng;
   sdata_def       senddata;
   DCLONG          rcvtime;
   int             rtn_code;
 
   memset(resv01, 0, 9);
   memset(resv02, 0, 9);
   memset(resv03, 0, 9);
 
   memset(&senddata, 0x33, sizeof(senddata));
 
   memcpy(senddata.ap_name, "slup2req ", 9);
   memcpy(senddata.snd_lng, "0448", 4);
   memcpy(senddata.snd_seg, "*FMH*aaaaaaaaaa1aaaaaaaaaaaaaaa2
aaaaaaaaaaaaaaa3aaaaaaaaaaaaaaa4aaaaaaaaaaaaaaa5
aaaaaaaaaaaaaaa6aaaaaaaaaaaaaaa7aaaaaaaaaaaaaaa8
aaaaaaaaaaaaaaa9aaaaaaaaaaaaaaaAaaaaaaaaaaaaaaaB
aaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaE
aaaaaaaaaaaaaaaFaaaaaaaaaaaaaaa0", 256);
   memcpy(senddata.snd_seg + segmax -3, "end", 3);
 
   rtn_code =dc_mcf_sendrecv (DCMCFEMI, 
                              DCMCFIO, 
                              lename, 
                              resv01, 
                              &senddata,
                              sndmax,
                              rcv_buf, 
                              &rdataleng, 
                              rcvmax, 
                              &rcvtime, 
                              0);
 
   if(rtn_code != DCMCFRTN_00000)
   {
      goto ERROR;
   }
ERROR:;
   return;
}

(2) COBOL言語

 IDENTIFICATION    DIVISION.
 PROGRAM-ID.       UAPCBL.
 
 ENVIRONMENT       DIVISION.
 
 DATA              DIVISION.
 WORKING-STORAGE   SECTION.
 01   RCV.
      02  MSG-REQ          PIC X(8)   VALUE   'RECEIVE '.
      02  RTN              PIC X(5).
      02  FILLER           PIC X(3).
      02  RSV1             PIC X(4)   VALUE   'FRST'.
      02  RSV2             PIC X(4)   VALUE   SPACE.
      02  MCFUSING1        PIC 9(8).
      02  MCFUSING2        PIC 9(8).
      02  RSV3             PIC 9(9)   COMP    VALUE   2048.
      02  SEGKIND          PIC X(4)   VALUE   SPACE.
      02  RSV4             PIC X(4)   VALUE   SPACE.
      02  MSGKIND          PIC X(4)   VALUE   SPACE.
      02  OUTPUTNO         PIC X(4)   VALUE   SPACE.
      02  RSV5             PIC X(8)   VALUE   SPACE.
      02  RSV6             PIC X(4)   VALUE   SPACE.
      02  RSV7             PIC X(8)   VALUE   SPACE.
      02  RSV8             PIC X(4)   VALUE   SPACE.
      02  RSV9             PIC 9(9)   COMP    VALUE   ZERO.
      02  RSV10            PIC 9(9)   COMP    VALUE   ZERO.
      02  RSV11            PIC X(1)   VALUE   SPACE.
      02  RSV12            PIC X(1)   VALUE   SPACE.
      02  RSV13            PIC X(14)  VALUE   LOW-VALUE.
 01   CD1.
      02  SEG-CODE1        PIC X(4)   VALUE   SPACE.
      02  TERM-CODE        PIC X(8)   VALUE   SPACE.
      02  MCFUSE14         PIC X(8)   VALUE   SPACE.
      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      PIC X(2048).
 
 PROCEDURE DIVISION.
**********************************************************
 CALL 'CBLDCMCF'  USING   RCV    CD1    DATA1.
*
**********************************************************
*                                                        *
*  User Service Part                                     *
*                                                        *
**********************************************************
*
 EXIT PROGRAM.
 
 IDENTIFICATION    DIVISION.
 PROGRAM-ID.       SPPSND.
 
 ENVIRONMENT       DIVISION.
 CONFIGURATION     SECTION.
 
 DATA              DIVISION.
 WORKING-STORAGE   SECTION.
 
 01   SND-AREA1.
      02  DATA-A           PIC X(8)   VALUE   'SEND    '.
      02  DATA-B           PIC X(5).
      02  FILLER           PIC X(3).
      02  DATA-C           PIC X(4)   VALUE   SPACE.
      02  DATA-D           PIC X(4)   VALUE   SPACE.
      02  DATA-E           PIC 9(8).
      02  DATA-F           PIC 9(8).
      02  DATA-G           PIC 9(9)   COMP    VALUE   ZERO.
      02  DATA-H           PIC X(4)   VALUE   'EMI '.
      02  DATA-I           PIC X(4)   VALUE   SPACE.
      02  DATA-J           PIC X(4)   VALUE   'NORM'.
      02  DATA-K           PIC X(4)   VALUE   'NSEQ'.
      02  DATA-L           PIC X(8)   VALUE   SPACE.
      02  DATA-M1          PIC X(4)   VALUE   SPACE.
      02  DATA-M2          PIC X(8)   VALUE   SPACE.
      02  DATA-M3          PIC X(4)   VALUE   SPACE.
      02  DATA-M4          PIC 9(9)   COMP    VALUE   ZERO.
      02  DATA-M5          PIC 9(9)   COMP    VALUE   ZERO.
      02  DATA-M6          PIC X(1)   VALUE   SPACE.
      02  DATA-M7          PIC X(1)   VALUE   '1'.
      02  DATA-N           PIC X(14)  VALUE   LOW-VALUE.
 01   SND-AREA2.
      02  DATA-O           PIC X(4)   VALUE   'OUT '.
      02  DATA-P           PIC X(8)   VALUE   'SL2REQ01'.
      02  DATA-Q           PIC X(8)   VALUE   SPACE.
      02  DATA-R           PIC X(8)   VALUE   SPACE.
      02  DATA-T           PIC X(28)  VALUE   LOW-VALUE.
 01   SND-AREA3.
      02  DATA-U           PIC 9(9)   COMP   VALUE   248.
      02  DATA-V           PIC X(8).
      02  DATA-W           PIC X(248).
 
 PROCEDURE         DIVISION.
 CALL 'CBLDCMCF'  USING   SND-AREA1    SND-AREA2
      SND-AREA3.
 EXIT PROGRAM.
 
 IDENTIFICATION    DIVISION.
 PROGRAM-ID.       SPPSR.
 
 ENVIRONMENT       DIVISION.
 CONFIGURATION     SECTION.
 
 DATA              DIVISION.
 WORKING-STORAGE   SECTION.
 
 01   SR-AREA1.
      02  DATA-A           PIC X(8)   VALUE   'SENDRECV'.
      02  DATA-B           PIC X(5).
      02  FILLER           PIC X(3).
      02  DATA-C           PIC X(4)   VALUE   SPACE.
      02  DATA-D           PIC X(4)   VALUE   SPACE.
      02  DATA-E           PIC 9(8).
      02  DATA-F           PIC 9(8).
      02  DATA-G           PIC 9(9)   COMP    VALUE   248.
      02  DATA-H           PIC X(4)   VALUE   'EMI '.
      02  DATA-I           PIC X(4)   VALUE   SPACE.
      02  DATA-J           PIC X(4)   VALUE   SPACE.
      02  DATA-K           PIC X(4)   VALUE   SPACE.
      02  DATA-L           PIC X(8)   VALUE   SPACE.
      02  DATA-M1          PIC X(4)   VALUE   SPACE.
      02  DATA-M2          PIC X(8)   VALUE   SPACE.
      02  DATA-M3          PIC X(4)   VALUE   SPACE.
      02  DATA-M4          PIC 9(9)   COMP    VALUE   ZERO.
      02  DATA-M5          PIC 9(9)   COMP    VALUE   ZERO.
      02  DATA-M6          PIC X(1)   VALUE   SPACE.
      02  DATA-M7          PIC X(1)   VALUE   SPACE.
      02  DATA-N           PIC X(14)  VALUE   LOW-VALUE.
 01   SR-AREA2.
      02  DATA-O           PIC X(4)   VALUE   'IO  '.
      02  DATA-P           PIC X(8)   VALUE   'SL2REQ01'.
      02  DATA-Q           PIC X(8)   VALUE   SPACE.
      02  DATA-R           PIC X(8)   VALUE   SPACE.
      02  DATA-T           PIC X(28)  VALUE   LOW-VALUE.
 01   SR-AREA3.
      02  DATA-U           PIC 9(9)   COMP    VALUE   248.
      02  DATA-V           PIC X(8).
      02  DATA-W           PIC X(248).
 01   SR-AREA4.
      02  DATA-X           PIC 9(9)   COMP.
      02  DATA-Y1          PIC X(7)   VALUE   SPACE.
      02  DATA-Y2          PIC X(1).
      02  DATA-Z           PIC X(248).
 
 PROCEDURE         DIVISION.
 CALL 'CBLDCMCF'  USING   SR-AREA1  SR-AREA2
      SR-AREA3  SR-AREA4.
 
 EXIT PROGRAM.

(3) データ操作言語

 IDENTIFICATION    DIVISION.
 PROGRAM-ID.       UAPDML.
 
 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).
*
***********************************************************
*
 COMMUNICATION SECTION.
*
***********************************************************
*
 
 
     CD  RECV-IN1
     FOR  INPUT
     STATUS KEY IS                   RE-STATUS1
     SYMBOLIC TERMINAL IS            RE-TERMNAM
     MESSAGE DATE IS                 RE-DATE1
     MESSAGE TIME IS                 RE-TIME1.
*
***********************************************************
*
 PROCEDURE DIVISION.
*
***********************************************************
*
     RECEIVE  RECV-IN1
         FIRST  SEGMENT
         INTO  RECV-AREA1.
*
 EXIT PROGRAM.
 
 
 IDENTIFICATION    DIVISION.
 PROGRAM-ID.       SNDDML.
 
 ENVIRONMENT       DIVISION.
 CONFIGURATION     SECTION.
*
***********************************************************
*
 DATA              DIVISION.
 WORKING-STORAGE   SECTION.
*
***********************************************************
*
 01   SEND-AREA1.
      02  SE-DATALENG1   PIC 9(4)   COMP   VALUE   1028.
      02  SE-RSV1        PIC X(2).
      02  SE-DATA1       PIC X(1024).
*
***********************************************************
*
 COMMUNICATION SECTION.
*
***********************************************************
*
 
    CD  SEND-IN1
        FOR  OUTPUT
        STATUS KEY IS                 SE-STATUS1
        SYMBOLIC TERMINAL IS          SE-TERMNAM
        SYNCHRONOUS MODE IS           ASYNC
        SWITCHING MODE IS             NORMAL.
*
***********************************************************
*
 PROCEDURE DIVISION.
*
***********************************************************
*
    MOVE 'SL2REQ01'TO SE-TERMNAM.
    SEND SEND-IN1
        FROM SEND-AREA1
                WITH EMI.
*
 EXIT PROGRAM.