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

UAP作成例の処理の流れを次の図に示し,その流れに沿ったコーディング例を,C言語,COBOL言語,およびデータ操作言語別に示します。なお,コーディング例は,MCF通信構成定義(mcftalccn -o)のctlheaderオペランドでuseを指定した場合の例です。

図4-1 UAP作成例の処理の流れ

[図データ]

C言語

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

このコーディング例は,次に示すファイルで提供しています。

#include <dcmcf.h>
#include <dcmx25c.h>1
ex_uap1()
{

  char termnam[9] ;
  struct {
   char             mcfuse[8];
   dcmx25_ctl_type  x25_hd ;2
   char             data[2048];
  } recvdata ;
  DCLONG rdataleng ;
  DCLONG time ;
  DCLONG inbufleng ;
  struct {
   char            mcfuse[8];
   dcmx25_ctl_type x25_hd;2
   char            data[2048];
  } senddata ;
  static char resv01[9] = "¥0" ;     /* 予備領域の初期化 */
  static char resv02[9] = "¥0" ;     /* 予備領域の初期化 */
  static char resv03[9] = "¥0" ;     /* 予備領域の初期化 */

  char *workadd = (char *)&recvdata ;
  inbufleng = sizeof(recvdata) ;
  memset(&senddata, 0x00, sizeof(senddata)) ;
  senddata.x25_hd.id = 0x20 ;

  dc_mcf_receive(DCMCFFRST,DCNOFLAGS,termnam,resv01,
                                       /* メッセージの受信 */
                 workadd,&rdataleng,inbufleng,&time) ;

(データの処理)

  dc_mcf_send(DCMCFEMI,DCMCFOUT,"SYSTEM1",
                                   /* メッセージの送信(分岐送信) */
              resv01,&senddata,504,resv02,DCNOFLAGS) ;

  dc_mcf_send(DCMCFEMI,DCMCFOUT,"TERMNAM1",
                                   /* メッセージの送信(一方送信) */
              resv01,&senddata,504,resv02,DCNOFLAGS) ;
}

注※1
PVCの場合のコーディングです。VCの場合は,次のようにコーディングします。
#include <dcmx2m.h>
注※2
PVCの場合のコーディングです。VCの場合は,次のようにコーディングします。
dcmx2m_ctl_type x25_hd;

COBOL言語

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

このコーディング例は,/BeTRAN/examples/mcf/X25/aplib/cobol/ap.cblのファイルで提供しています。

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  CTL-ID1         PIC X(1) VALUE X'20'.
 02  CTL-CAUSE1      PIC 9(1).
 02  CTL-DIAG1       PIC 9(1).
 02  CTL-QBIT1       PIC 1(1) BIT.
 02  CTL-MSGK1       PIC 1(2) BIT.
 02  FILLER          PIC 1(5) BIT.
 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 SPACE.
 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  CTL-ID2         PIC X(1) VALUE X'20'.
 02  FILLER          PIC 9(1).
 02  FILLER          PIC 9(1).
 02  CTL-QBIT2       PIC 1(1) BIT.
 02  CTL-MSGK2       PIC 1(2) BIT.
 02  FILLER          PIC 1(5) BIT.
 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.         ** メッセージの受信 **

処理1

CALL 'CBLDCMCF' USING SND1 CD2 DATA2.         **メッセージの送信(分岐送信)**

処理2

CALL 'CBLDCMCF' USING SND2 CD3 DATA2.         **メッセージの送信(一方送信)**

処理3

EXIT PROGRAM.

データ操作言語

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

このコーディング例は,/BeTRAN/examples/mcf/X25/aplib/dml/ap.cblのファイルで提供しています。

*
****  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-ID         PIC 9(2) COMP VALUE 32.
   02  FILLER        PIC 9(1).
   02  FILLER        PIC 9(1).
   02  RE-QBIT       PIC 1(1) BIT.
   02  RE-MSGK       PIC 1(2) BIT.
   02  FILLER        PIC 1(5) BIT.
   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-ID         PIC X(1) VALUE X'20'.
   02  IO-CAUSE      PIC 9(1).
   02  IO-DIAG       PIC 9(1).
   02  IO-QBIT       PIC 1(1) BIT.
   02  IO-MSGK       PIC 1(2) BIT.
   02  FILLER        PIC 1(5) BIT.
   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.

*
****  メッセージの受信 1  ****
*
RECEIVE RECV-INF
        FIRST SEGMENT
        INTO RECV-AREA.
*
****  一方送信メッセージの送信 2  ****
*
MOVE 'SYSTEM1' TO SE-TERMNAM-IO.
SEND SEND-IO
     FROM SEND-IO-AREA
     WITH EMI.
*
****  一方送信メッセージの送信 3  ****
*
MOVE 'TERMNAM1' TO SE-TERMNAM-IO.
SEND SEND-IO
     FROM SEND-IO-AREA
     WITH EMI.

EXIT PROGRAM.