ユーザアプリケーションプログラム作成例

UAPの作成例として,処理の流れを次の図に示し,その流れに沿ったコーディング例をC言語(ANSI C,C++,K&R版 C),COBOL言語,およびデータ操作言語で示します。

図3-1 処理の流れ

[図データ]

TP1/NET/HDLCでは,このコーディング例を次のファイルで提供しています。

C言語(ANSI C,C++)のコーディング例
/BeTRAN/examples/mcf/HDLC/aplib/ansi/ap.c
C言語(K&R版 C)のコーディング例
/BeTRAN/examples/mcf/HDLC/aplib/c/ap.c
COBOL言語のコーディング例
/BeTRAN/examples/mcf/HDLC/aplib/cobol/ap.cbl
データ操作言語のコーディング例
/BeTRAN/examples/mcf/HDLC/aplib/dml/ap.c

C言語(ANSI C,C++)

#include <string.h>
#include <stdlib.h>
#include <dcmcf.h>
void ex_uap1()
{
  char termnam[9] ;
  int    rtn_code ;
  char   recvdata[2048] ;
  DCLONG rdataleng ;
  DCLONG time ;
  DCLONG inbufleng;
  char   senddata[512] ;
  DCLONG sdataleng ;
  static char resv01[9]="¥0" ;
  static char resv02[9]="¥0" ;
  static char resv03[9]="¥0" ;
  char *workadd = recvdata ;

  rtn_code = dc_mcf_receive(DCMCFFRST,DCNOFLAGS,termnam,resv01,
                          workadd,&rdataleng,2048,&time) ;
  if(rtn_code != DCMCFRTN_00000) {
     abort();
  }

/***********************************************/
/*                                             */
/*  User Service Part.                         */
/*                                             */
/***********************************************/


  sdataleng = strlen(senddata) + 4 ;
  rtn_code = dc_mcf_send(DCMCFEMI,DCMCFOUT,"PRINTER1",
                         resv01,senddata,sdataleng,resv02,DCNOFLAGS) ;
  if(rtn_code != DCMCFRTN_00000) {
     abort() ;
  }

  sdataleng = strlen(senddata) + 4 ;
  rtn_code = dc_mcf_send(DCMCFEMI,DCMCFOUT,"TERMNAM1",
                         resv01,senddata,sdataleng,resv02,DCNOFLAGS) ;
  if(rtn_code != DCMCFRTN_00000) {
     abort() ;
  }
}

C言語(K&R版 C)

#include <dcmcf.h>
void ex_uap1()
{
  char termnam[9] ;
  int    rtn_code ;
  char   recvdata[2048] ;
  DCLONG rdataleng ;
  DCLONG time ;
  DCLONG inbufleng;
  char   senddata[512] ;
  DCLONG sdataleng ;
  static char resv01[9]="¥0" ;
  static char resv02[9]="¥0" ;
  static char resv03[9]="¥0" ;
  char *workadd = recvdata ;

  rtn_code = dc_mcf_receive(DCMCFFRST,DCNOFLAGS,termnam,resv01,
                          workadd,&rdataleng,2048,&time) ;
  if(rtn_code != DCMCFRTN_00000) {
     abort();
  }

/***********************************************/
/*                                             */
/*  User Service Part.                         */
/*                                             */
/***********************************************/


  sdataleng = strlen(senddata) + 4 ;
  rtn_code = dc_mcf_send(DCMCFEMI,DCMCFOUT,"PRINTER1",
                         resv01,senddata,sdataleng,resv02,DCNOFLAGS) ;
  if(rtn_code != DCMCFRTN_00000) {
     abort() ;
  }

  sdataleng = strlen(senddata) + 4 ;
  rtn_code = dc_mcf_send(DCMCFEMI,DCMCFOUT,"TERMNAM1",
                         resv01,senddata,sdataleng,resv02,DCNOFLAGS) ;
  if(rtn_code != DCMCFRTN_00000) {
     abort() ;
  }
}

COBOL言語

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) 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  TEXT-TYPE1    PIC X(4).
    02  REC-MSGSEG1   PIC X(2044).
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  SEND-SYNC     PIC X(4) VALUE 'ASYN'.
    02  SEND-NORM     PIC X(4) VALUE 'NORM'.
    02  SEND-NO       PIC X(4) VALUE 'NSEQ'.
    02  MCFUSE26      PIC X(8) VALUE SPACE.
    02  SEND-CODE     PIC X(4) VALUE SPACE.
    02  MCFUSE27      PIC X(8) VALUE SPACE.
    02  MCFUSE28      PIC X(4) VALUE SPACE.
    02  MCFUSE29      PIC 9(9) COMP VALUE ZERO.
    02  MCFUSE30      PIC 9(9) COMP VALUE ZERO.
    02  MCFUSE31      PIC X(1) VALUE SPACE.
    02  MCFUSE32      PIC X(1) VALUE SPACE.
    02  MCFUSE33      PIC X(14) VALUE LOW-VALUE.
01  CD2.
    02  SENDSEG-CODE2 PIC X(4) VALUE 'OUT '.
    02  TERM-CODE2    PIC X(8) VALUE 'SYSTEM1'.
    02  MCFUSE34      PIC X(8) VALUE SPACE.
    02  MCFUSE35      PIC X(8) VALUE SPACE.
    02  MCFUSE36      PIC X(28) VALUE LOW-VALUE.
01  DATA2.
    02  MSGSEG-LENG2  PIC 9(9) COMP VALUE 512.
    02  MCFUSE37      PIC X(8).
    02  TEXT-TYPE2    PIC X(2).
    02  REC-MSGSEG2   PIC X(508).
01  SND2.
    02  MSG-SEND1     PIC X(8) VALUE 'SEND    '.
    02  STATUS-CODE3  PIC X(5).
    02  FILLER        PIC X(3).
    02  MCFUSE41      PIC X(4) VALUE SPACE.
    02  MCFUSE42      PIC X(4) VALUE SPACE.
    02  MCFUSE43      PIC 9(8).
    02  MCFUSE44      PIC 9(8).
    02  MCFUSE45      PIC 9(9) COMP VALUE ZERO.
    02  SEND-SEG1     PIC X(4) VALUE 'EMI '.
    02  SEND-SYNC1    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  SEND-CODE1    PIC X(4) VALUE SPACE.
    02  MCFUSE47      PIC X(8) VALUE SPACE.
    02  MCFUSE48      PIC X(4) VALUE SPACE.
    02  MCFUSE49      PIC 9(9) COMP VALUE ZERO.
    02  MCFUSE50      PIC 9(9) COMP VALUE ZERO.
    02  MCFUSE51      PIC X(1) VALUE SPACE.
    02  MCFUSE52      PIC X(1) VALUE SPACE.
    02  MCFUSE53      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  MCFUSE54      PIC X(8) VALUE SPACE.
    02  MCFUSE55      PIC X(8) VALUE SPACE.
    02  MCFUSE56      PIC X(28) VALUE LOW-VALUE.
*
PROCEDURE DIVISION.
*
CALL 'CBLDCMCF'USING RCV CD1 DATA1.
*
CALL 'CBLDCMCF'USING SND1 CD2 DATA2.
*
CALL 'CBLDCMCF'USING SND2 CD3 DATA2.

EXIT PROGRAM.

データ操作言語

*
****************************************************************
*       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 RE-DATA                 PIC X(1024).
*
****************************************************************
*       一方送信,および分岐メッセージ送信領域                 *
****************************************************************
*
01 SEND-IO-AREA.
  02 IO-DATALENG             PIC 9(4) COMP VALUE 20.
  02 IO-RSV1                 PIC X(2).
  02 IO-DATA                 PIC X(16) VALUE 'SVRA SEND DATA1'.
*
****************************************************************
*       通信記述項                                             *
****************************************************************
*
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
  FOR OUTPUT
  STATUS KEY IS        SE-STATUS-IO
  SYMBOLIC TERMINAL IS SE-TERMNAM-IO.
*

PROCEDURE DIVISION.

*
****************************************************************
*       メッセージの受信の通信記述項                           *
****************************************************************
*
  RECEIVE RECV-INF
          FIRST SEGMENT
          INTO RECV-AREA.
*
****************************************************************
*       分岐メッセージの送信の通信記述項                       *
****************************************************************
*
  MOVE 'PRINTER1' TO SE-TERMNAM-IO.
  SEND SEND-IO
       FROM SEND-IO-AREA
       WITH EMI.
*
****************************************************************
*       一方送信メッセージの送信の通信記述項                   *
****************************************************************
*
  MOVE 'TERMNAM1' TO SE-TERMNAM-IO.
  SEND SEND-IO
       FROM SEND-IO-AREA
       WITH EMI.
  EXIT PROGRAM.