ユーザアプリケーションプログラム作成例
UAPの作成例として,処理の流れを次の図に示し,その流れに沿ったコーディング例をC言語(K&R版)とCOBOL言語で示します。
また,TP1/NET/SLU-TypeP2では,このコーディング例を次のファイルで提供しています。
図3-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;
}
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.
データ操作言語
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.