ユーザアプリケーションプログラム作成例
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) ;
}
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.