付録H.1 コーディング例
使用する言語ごとにUAPのコーディング例を示します。
- 〈この項の構成〉
(1) C言語(K&R版)
C言語(K&R版)を使用したUAPのコーディング例を次に示します。
(a) コーディング例(C言語)
/*
* MHP サービス関数
*/
#include <stdio.h>
#include <dcmcf.h>
/*
* 論理マップの取り込み
*/
#include "LOG0101I.h" ……1.
#include "LOG0201O.h" ……1.
#include "LOG1001O.h" ……1.
void uap01()
{
int rtn_cod;
DCLONG action;
DCLONG commform;
char recv_term[9];
char recv_map[9];
DCLONG rdataleng;
DCLONG inbufleng;
DCLONG time;
static char send_term[9] = "XPNLE201";
static char send_map[9] = "MAM10";
DCLONG sdataleng;
char *pagecdat = NULL;
DCLONG opcd;
static char resv01[9] = "\0";
static char rply_map[9] = "MAM02";
static char nextap[9] = "\0";
/*
* メッセージの受信
*/
action = DCMCFFRST | DCMCFBUF2;
commform = DCNOFLAGS;
inbufleng = (DCLONG)LOG0101I.LOG0101S;
rtn_cod = dc_mcf_receive(action,
commform,
recv_term,
recv_map,
&LOG0101I, ……2.
&rdataleng,
inbufleng,
&time);
/*
*****************************************************************
* *
* *
* データの処理 *
* *
* *
*****************************************************************
*/
/*
* 一方送信メッセージの送信
*/
action = DCMCFEMI | DCMCFNORM | DCMCFNSEQ | DCMCFBUF2;
commform = DCMCFOUT;
sdataleng = (DCLONG)LOG1001O.LOG1001L -4;
opcd = DCNOFLAGS;
rtn_cod = dc_mcf_send(action,
commform,
send_term,
send_map,
&LOG1001O, ……2.
sdataleng,
pagecdat,
opcd);
/*
* 応答メッセージの送信
*/
action = DCMCFEMI|DCMCFBUF2;
commform = DCNOFLAGS;
sdataleng = (DCLONG)LOG0201O.LOG0201L -4;
opcd = DCNOFLAGS;
rtn_cod = dc_mcf_reply(action,
commform,
resv01,
rply_map,
&LOG0201O, ……2.
sdataleng,
nextap,
opcd);
}コーディング例中の1.および2.は次の意味になります。
-
XMAP3で生成した入力・出力論理マップを#includeで取り込みます。
-
recvdata・senddataには,XMAP3で作成した入力・出力論理マップの先頭アドレスを指定します。
(2) COBOL言語
COBOL言語を使用したUAPのコーディング例を次に示します。
(a) コーディング例(COBOL言語)
* *********************************************************** * MHPサービスプログラム(COBOL) * *********************************************************** * IDENTIFICATION DIVISION. PROGRAM-ID. MHPC. ENVIRONMENT DIVISION. CONFIGURATION SECTION. * *********************************************************** * ワーク変数 * *********************************************************** * DATA DIVISION. WORKING-STORAGE SECTION. * *********************************************************** * 論理マップコピー * * LOG0101I : 入力ロジカルマップ * * LOG0201O : 出力ロジカルマップ * * LOG1001O : 出力ロジカルマップ * *********************************************************** * COPY LOG0101I. ……1. COPY LOG0201O. ……1. COPY LOG1001O. ……1. * *********************************************************** * メッセージの受信データ領域 * *********************************************************** * 01 RECV-PARM1. 02 RE-NAME PIC X(8) VALUE 'RECEIVE '. 02 RE-STATUS PIC X(5). 02 FILLER PIC X(3). 02 RE-SEG PIC X(4) VALUE 'FRST'. 02 RE-RSV1 PIC X(4) VALUE SPACE. 02 RE-DATE PIC 9(8). 02 RE-TIME PIC 9(8). 02 RE-LENG PIC 9(9) COMP VALUE 44. 02 RE-RSV2 PIC X(4) VALUE SPACE. 02 RE-RSV3 PIC X(4) VALUE SPACE. 02 RE-RSV4 PIC X(4) VALUE SPACE. 02 RE-RSV5 PIC X(4) VALUE SPACE. 02 RE-RSV6 PIC X(8) VALUE SPACE. 02 RE-RSV7 PIC X(4) VALUE SPACE. 02 RE-RSV8 PIC X(8) VALUE SPACE. 02 RE-RSV9 PIC X(4) VALUE SPACE. 02 RE-RSV10 PIC 9(9) COMP VALUE ZERO. 02 RE-RSV11 PIC 9(9) COMP VALUE ZERO. 02 RE-RSV12 PIC X(1) VALUE SPACE. 02 RE-BUFTYPE PIC X(1) VALUE '2'. 02 RE-RSV13 PIC X(14) VALUE LOW-VALUE. 01 RECV-PARM2. 02 RE-RSV14 PIC X(4) VALUE SPACE. 02 RE-TERMNAM PIC X(8). 02 RE-MAPNAME PIC X(8). 02 RE-RSV15 PIC X(8) VALUE SPACE. 02 RE-RSV16 PIC X(28) VALUE LOW-VALUE. * *********************************************************** * 一方送信メッセージの送信データ領域 * *********************************************************** * 01 SEND-PARM1. 02 SE-NAME PIC X(8) VALUE 'SEND '. 02 SE-STATUS PIC X(5). 02 FILLER PIC X(3). 02 SE-RSV1 PIC X(4) VALUE SPACE. 02 SE-RSV2 PIC X(4) VALUE SPACE. 02 SE-RSV3 PIC 9(8). 02 SE-RSV4 PIC 9(8). 02 SE-RSV5 PIC 9(9) COMP VALUE ZERO. 02 SE-SEG PIC X(4) VALUE 'EMI '. 02 SE-SYNC PIC X(4) VALUE SPACE. 02 SE-RSV6 PIC X(4) VALUE 'NORM'. 02 SE-NO PIC X(4) VALUE 'NSEQ'. 02 SE-RSV7 PIC X(8) VALUE SPACE. 02 SE-RSV8 PIC X(4) VALUE SPACE. 02 SE-RSV9 PIC X(8) VALUE SPACE. 02 SE-RSV10 PIC X(4) VALUE SPACE. 02 SE-RSV11 PIC 9(9) COMP VALUE ZERO. 02 SE-RSV12 PIC 9(9) COMP. 02 SE-MAPMOD PIC X(1) VALUE '0'. 02 SE-BUFTYPE PIC X(1) VALUE '2'. 02 SE-PAGEC PIC X(1) VALUE '0'. 02 SE-RSV13 PIC X(13) VALUE LOW-VALUE. 01 SEND-PARM2. 02 SE-COMF PIC X(4) VALUE 'OUT '. 02 SE-TERMNAM PIC X(8) VALUE 'XPNLE201'. 02 SE-MAPNAM PIC X(8) VALUE 'MAM10 '. 02 SE-RSV14 PIC X(8) VALUE SPACE. 02 SE-PAGECNAM PIC X(6) VALUE SPACE. 02 SE-RSV15 PIC X(28) VALUE LOW-VALUE. * *********************************************************** * 応答メッセージの送信データ領域 * *********************************************************** * 01 RPLY-PARM1. 02 RP-NAME PIC X(8) VALUE 'REPLY '. 02 RP-STATUS PIC X(5). 02 FILLER PIC X(3). 02 RP-RSV1 PIC X(4) VALUE SPACE. 02 RP-RSV2 PIC X(4) VALUE SPACE. 02 RP-RSV3 PIC 9(8). 02 RP-RSV4 PIC 9(8). 02 RP-RSV5 PIC 9(9) COMP VALUE ZERO. 02 RP-SEG PIC X(4) VALUE 'EMI '. 02 RP-SYNC PIC X(4) VALUE SPACE. 02 RP-RSV6 PIC X(4) VALUE SPACE. 02 RP-RSV7 PIC X(4) VALUE SPACE. 02 RP-RSV8 PIC X(8) VALUE SPACE. 02 RP-OPT PIC X(4) VALUE SPACE. 02 RP-RSV9 PIC X(8) VALUE SPACE. 02 RP-RSV10 PIC X(4) VALUE SPACE. 02 RP-RSV11 PIC 9(9) COMP VALUE ZERO. 02 RP-RSV12 PIC 9(9) COMP VALUE ZERO. 02 RP-RSV13 PIC X(1) VALUE '0'. 02 RP-BUFTYPE PIC X(1) VALUE '2'. 02 RP-RSV14 PIC X(14) VALUE LOW-VALUE. 01 RPLY-PARM2. 02 RP-RSV15 PIC X(4) VALUE SPACE. 02 RP-RSV16 PIC X(8) VALUE SPACE. 02 RP-MAPNAM PIC X(8) VALUE 'MAM02 '. 02 RP-NEXTAP PIC X(8) VALUE SPACE. 02 RP-RSV18 PIC X(28) VALUE LOW-VALUE. * PROCEDURE DIVISION. * *********************************************************** * メッセージの受信 * *********************************************************** * CALL 'CBLDCMCF' USING RECV-PARM1 RECV-PARM2 LOG0101I. ……2. * *********************************************************** * * * * * データの処理 * * * * * *********************************************************** * * *********************************************************** * 一方送信メッセージの送信 * *********************************************************** * CALL 'CBLDCMCF' USING SEND-PARM1 SEND-PARM2 LOG1001O. ……2. * *********************************************************** * 応答メッセージの送信 * *********************************************************** * CALL 'CBLDCMCF' USING RPLY-PARM1 RPLY-PARM2 LOG0201O. ……2. * *********************************************************** * 終了処理 * *********************************************************** * EXIT PROGRAM.
コーディング例中の1.および2.は次の意味になります。
-
XMAP3で生成した入力・出力論理マップをCOPY文で取り込みます。
-
一意名3には,XMAP3で作成した入力・出力論理マップを指定します。
(b) コーディング例(データ操作言語)
*
***********************************************************
* MHPサービスプログラム(DML) *
***********************************************************
*
IDENTIFICATION DIVISION.
PROGRAM-ID. MHPD.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
*
***********************************************************
* ワーク変数 *
***********************************************************
*
DATA DIVISION.
WORKING-STORAGE SECTION.
*
***********************************************************
* 論理マップコピー *
* LOG0101I : 入力ロジカルマップ *
* LOG0201O : 出力ロジカルマップ *
* LOG1001O : 出力ロジカルマップ *
***********************************************************
*
COPY LOG0101I. ……1.
COPY LOG0201O. ……1.
COPY LOG1001O. ……1.
*
***********************************************************
* 通信記述項 *
***********************************************************
*
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
MAP NAME IS RE-MAPNAM.
*
***********************************************************
* 一方送信メッセージの送信 *
***********************************************************
*
CD SEND-INF-OUT
FOR OUTPUT
STATUS KEY IS SE-STATUS-OUT
SYMBOLIC TERMINAL IS SE-TERMNAM-OUT
MAP NAME IS SE-MAPNAM-OUT
SWITCHING MODE IS NORMAL.
*
***********************************************************
* 応答メッセージの送信 *
***********************************************************
*
CD SEND-INF-IO
FOR I-O
STATUS KEY IS SE-STATUS-IO
MAP NAME IS SE-MAPNAM-IO.
PROCEDURE DIVISION.
*
***********************************************************
* メッセージの受信 *
***********************************************************
*
RECEIVE RECV-INF
FIRST SEGMENT
INTO LOG0101I. ……2.
*
***********************************************************
* *
* *
* データの処理 *
* *
* *
***********************************************************
*
*
***********************************************************
* 一方送信メッセージの送信 *
***********************************************************
*
MOVE 'XPNLE201' TO SE-TERMNAM-OUT.
MOVE 'MAM10 ' TO SE-MAPNAM-OUT.
SEND SEND-INF-OUT
FROM LOG1001O ……2.
WITH EMI.
*
***********************************************************
* 応答メッセージの送信 *
***********************************************************
*
MOVE 'MAM02 ' TO SE-MAPNAM-IO.
SEND SEND-INF-IO
FROM LOG0201O ……2.
WITH EMI.
*
***********************************************************
* 終了処理 *
***********************************************************
*
EXIT PROGRAM.コーディング例中の1.および2.は次の意味になります。
-
XMAP3で生成した入力・出力論理マップをCOPY文で取り込みます。
-
一意名1には,XMAP3で作成した入力・出力論理マップを指定します。