付録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で作成した入力・出力論理マップを指定します。