付録G.1 コーディング例
- 〈この項の構成〉
(1) C言語
(a) ANSI C,C++の場合
/*
* MHP SERVICE FUNCTION
*/
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <dcmcf.h>
#include <dcrpc.h>
void SVRA(void)
{
DCLONG action ;
DCLONG commform ;
DCLONG opcd ;
DCLONG active ;
char recvdata[1024] ;
DCLONG rdataleng ;
DCLONG time ;
DCLONG inbufleng ;
int rtn_cod ;
DCLONG cdataleng ;
char termnam[10] ;
struct dataform { char mcfuse[8] ;
char trnname[9] ;
char data[23] ;
} ;
static struct dataform execdata ;
static struct dataform senddata ;
static char resv01[9] ;
static char resv02[9] ;
static char apnam[9] ;
strncpy(execdata.mcfuse, " ", 8) ;
strncpy(execdata.trnname, " ", 9) ;
strcpy(execdata.data, "SRVA EXECAP DATA") ;
strncpy(senddata.mcfuse, " ", 8) ;
senddata.trnname[0] = 0xc1 ; /* A */
senddata.trnname[1] = 0xd7 ; /* P */
senddata.trnname[2] = 0xd3 ; /* L */
senddata.trnname[3] = 0xf0 ; /* 0 */
senddata.trnname[4] = 0xf2 ; /* 2 */
senddata.trnname[5] = 0x40 ; /* */
senddata.trnname[6] = 0x40 ; /* */
senddata.trnname[7] = 0x40 ; /* */
senddata.trnname[8] = 0x40 ; /* */
strcpy(senddata.data, "SRVA SEND DATA") ;
strcpy(execdata.mcfuse, "" ) ;
strcpy(resv02, "") ;
strcpy(apnam, "APL01") ;
/*
* MCF-RECEIVE(MESSAGE RECEIVING)
*/
action = DCMCFFRST ;
commform = DCNOFLAGS ;
inbufleng = sizeof(recvdata) ;
rtn_cod = dc_mcf_receive(action, commform, termnam, resv01,
recvdata, &rdataleng, inbufleng, &time) ;
if(rtn_cod != DCMCFRTN_00000) {
/*
* MCF-ROLLBACK(ERROR PROCESSING)
*/
rtn_cod = dc_mcf_rollback(DCMCFNRTN) ;
}
/*
* MCF-EXECAP(APPICATION PROGRAM BOOTING)
*/
action = DCMCFEMI|DCMCFJUST ;
commform = DCNOFLAGS ;
active = 0 ;
cdataleng = 25 ;
rtn_cod = dc_mcf_execap(action, commform, resv01, active,
apnam, (char*)&execdata, cdataleng) ;
if(rtn_cod != DCMCFRTN_00000) {
/*
* MCF-ROLLBACK(ERROR PROCESSING)
*/
rtn_cod = dc_mcf_rollback(DCMCFNRTN) ;
}
/*
* MCF-SEND(MESSAGE SENDING)
*/
action = DCMCFEMI ;
commform = DCMCFOUT ;
strcpy(termnam, "NFLE02");
opcd = DCNOFLAGS ;
cdataleng = 25 ;
rtn_cod = dc_mcf_send(action, commform, termnam, resv01,
(char *)&senddata, cdataleng, resv02, opcd) ;
if(rtn_cod != DCMCFRTN_00000) {
/*
* MCF ROLLBACK(ERROR PROCESSING)
*/
rtn_cod = dc_mcf_rollback(DCMCFNRTN) ;
}
}(b) K&R版Cの場合
/*
* MHP SERVICE FUNCTION
*/
#include <stdio.h>
#include <sys/types.h>
#include <dcmcf.h>
#include <dcrpc.h>
SVRA()
{
DCLONG action ;
DCLONG commform ;
DCLONG opcd ;
DCLONG active ;
char recvdata[1024] ;
DCLONG rdataleng ;
DCLONG time ;
DCLONG inbufleng ;
int rtn_cod ;
DCLONG cdataleng ;
char termnam[10] ;
struct dataform { char mcfuse[8] ;
char trnname[9] ;
char data[23] ;
} ;
static struct dataform execdata ;
static struct dataform senddata ;
static char resv01[9] ;
static char resv02[9] ;
static char apnam[9] ;
strncpy(execdata.mcfuse, " ", 8) ;
strncpy(execdata.trnname, " ", 9) ;
strcpy(execdata.data, "SRVA EXECAP DATA") ;
strncpy(senddata.mcfuse, " ", 8) ;
senddata.trnname[0] = 0xc1 ; /* A */
senddata.trnname[1] = 0xd7 ; /* P */
senddata.trnname[2] = 0xd3 ; /* L */
senddata.trnname[3] = 0xf0 ; /* 0 */
senddata.trnname[4] = 0xf2 ; /* 2 */
senddata.trnname[5] = 0x40 ; /* */
senddata.trnname[6] = 0x40 ; /* */
senddata.trnname[7] = 0x40 ; /* */
senddata.trnname[8] = 0x40 ; /* */
strcpy(senddata.data, "SRVA SEND DATA") ;
strcpy(execdata.mcfuse, "" ) ;
strcpy(resv02, "") ;
strcpy(apnam, "APL01") ;
/*
* MCF-RECEIVE(MESSAGE RECEIVING)
*/
action = DCMCFFRST ;
commform = DCNOFLAGS ;
inbufleng = sizeof(recvdata) ;
rtn_cod = dc_mcf_receive(action, commform, termnam, resv01, recvdata,
&rdataleng, inbufleng, &time) ;
if(rtn_cod != DCMCFRTN_00000) {
/*
* MCF-ROLLBACK(ERROR PROCESSING)
*/
rtn_cod = dc_mcf_rollback(DCMCFNRTN) ;
}
/*
* MCF-EXECAP(APPLICATION PROGRAM BOOTING)
*/
action = DCMCFEMI|DCMCFJUST ;
commform = DCNOFLAGS ;
active = 0 ;
cdataleng = 25 ;
rtn_cod = dc_mcf_execap(action, commform, resv01, active,
apnam, (char*)&execdata, cdataleng) ;
if(rtn_cod != DCMCFRTN_00000) {
/*
* MCF-ROLLBACK(ERROR PROCESSING)
*/
rtn_cod = dc_mcf_rollback(DCMCFNRTN) ;
}
/*
* MCF-SEND(MESSAGE SENDING)
*/
action = DCMCFEMI ;
commform = DCMCFOUT ;
strcpy(termnam, "NFLE02");
opcd = DCNOFLAGS ;
cdataleng = 25 ;
rtn_cod = dc_mcf_send(action, commform, termnam, resv01,
(char *)&senddata, cdataleng, resv02, opcd) ;
if(rtn_cod != DCMCFRTN_00000) {
/*
* MCF ROLLBACK(ERROR PROCESSING)
*/
rtn_cod = dc_mcf_rollback(DCMCFNRTN) ;
}
}(2) COBOL言語
*************************************************************** * MHP SERVICE PROGRAM * *************************************************************** IDENTIFICATION DIVISION. PROGRAM-ID. SVRA. ENVIRONMENT DIVISION. CONFIGURATION SECTION. *************************************************************** * WORKING STORAGE * *************************************************************** DATA DIVISION. WORKING-STORAGE SECTION. *************************************************************** * DATA AREA FOR MCF-RECEIVE * *************************************************************** 01 RECV-PARM1. 02 RECV-A PIC X(8) VALUE 'RECEIVE '. 02 RECV-B PIC X(5). 02 FILLER PIC X(3). 02 RECV-C PIC X(4) VALUE 'FRST'. 02 RECV-D PIC X(4) VALUE SPACE. 02 RECV-E PIC 9(8). 02 RECV-F PIC 9(8). 02 RECV-G PIC 9(9) COMP VALUE 1024. 02 RECV-H PIC X(4) VALUE SPACE. 02 RECV-I PIC X(4) VALUE SPACE. 02 RECV-J PIC X(4) VALUE SPACE. 02 RECV-K PIC X(4) VALUE SPACE. 02 RECV-L PIC X(8) VALUE SPACE. 02 RECV-M1 PIC X(4) VALUE SPACE. 02 RECV-M2 PIC X(8) VALUE SPACE. 02 RECV-M3 PIC X(4) VALUE SPACE. 02 RECV-M4 PIC 9(9) COMP VALUE ZERO. 02 RECV-M5 PIC 9(9) COMP VALUE ZERO. 02 RECV-M6 PIC X(1) VALUE SPACE. 02 RECV-M7 PIC X(1) VALUE SPACE. 02 RECV-N PIC X(14) VALUE LOW-VALUE. 01 RECV-PARM2. 02 RECV-O PIC X(4) VALUE SPACE. 02 RECV-P PIC X(8). 02 RECV-Q PIC X(8) VALUE SPACE. 02 RECV-R PIC X(8) VALUE SPACE. 02 RECV-T PIC X(28) VALUE LOW-VALUE. 01 RECV-PARM3. 02 RECV-U PIC 9(9) COMP. 02 RECV-V PIC X(8). 02 RECV-W PIC X(1024). *************************************************************** * DATA AREA FOR MCF-EXECAP * *************************************************************** 01 EXEC-PARM1. 02 EXEC-A PIC X(8) VALUE 'EXECAP '. 02 EXEC-B PIC X(5). 02 FILLER PIC X(3). 02 EXEC-C PIC X(4) VALUE SPACE. 02 EXEC-D PIC X(4) VALUE SPACE. 02 EXEC-E PIC 9(8). 02 EXEC-F PIC 9(8). 02 EXEC-G PIC 9(9) COMP VALUE ZERO. 02 EXEC-H PIC X(4) VALUE 'EMI '. 02 EXEC-I PIC X(4) VALUE SPACE. 02 EXEC-J PIC X(4) VALUE SPACE. 02 EXEC-K PIC X(4) VALUE SPACE. 02 EXEC-L PIC X(8) VALUE SPACE. 02 EXEC-M PIC X(4) VALUE SPACE. 02 EXEC-N PIC X(8) VALUE 'APL01 '. 02 EXEC-O1 PIC X(4) VALUE SPACE. 02 EXEC-O2 PIC 9(9) COMP VALUE ZERO. 02 EXEC-O3 PIC 9(9) COMP VALUE ZERO. 02 EXEC-O4 PIC X(1) VALUE SPACE. 02 EXEC-O5 PIC X(1) VALUE SPACE. 02 EXEC-P PIC X(14) VALUE LOW-VALUE. 01 EXEC-PARM2. 02 EXEC-Q PIC X(4) VALUE SPACE. 02 EXEC-R PIC X(8) VALUE SPACE. 02 EXEC-S PIC X(8) VALUE SPACE. 02 EXEC-T PIC X(6) VALUE SPACE. 02 EXEC-U PIC X(2) VALUE SPACE. 02 EXEC-V PIC X(28) VALUE LOW-VALUE. 01 EXEC-PARM3. 02 EXEC-W PIC 9(9) COMP VALUE 25. 02 EXEC-X PIC X(8). 02 EXEC-Y1 PIC X(9) VALUE SPACE. 02 EXEC-Y2 PIC X(16) VALUE 'SVRA EXECAP DATA'. *************************************************************** * DATA AREA FOR MCF-SEND * *************************************************************** 01 SEND-PARM1. 02 SEND-A PIC X(8) VALUE 'SEND '. 02 SEND-B PIC X(5). 02 FILLER PIC X(3). 02 SEND-C PIC X(4) VALUE SPACE. 02 SEND-D PIC X(4) VALUE SPACE. 02 SEND-E PIC 9(8). 02 SEND-F PIC 9(8). 02 SEND-G PIC 9(9) COMP VALUE ZERO. 02 SEND-H PIC X(4) VALUE 'EMI '. 02 SEND-I PIC X(4) VALUE SPACE. 02 SEND-J PIC X(4) VALUE SPACE. 02 SEND-K PIC X(4) VALUE SPACE. 02 SEND-L PIC X(8) VALUE SPACE. 02 SEND-M1 PIC X(4) VALUE SPACE. 02 SEND-M2 PIC X(8) VALUE SPACE. 02 SEND-M3 PIC X(4) VALUE SPACE. 02 SEND-M4 PIC 9(9) COMP VALUE ZERO. 02 SEND-M5 PIC 9(9) COMP VALUE ZERO. 02 SEND-M6 PIC X(1) VALUE SPACE. 02 SEND-M7 PIC X(1) VALUE SPACE. 02 SEND-N PIC X(14) VALUE LOW-VALUE. 01 SEND-PARM2. 02 SEND-O PIC X(4) VALUE 'OUT '. 02 SEND-P PIC X(8) VALUE 'NFLE02 '. 02 SEND-Q PIC X(8) VALUE SPACE. 02 SEND-R PIC X(8) VALUE SPACE. 02 SEND-T PIC X(28) VALUE LOW-VALUE. 01 SEND-PARM3. 02 SEND-U PIC 9(9) COMP VALUE 25. 02 SEND-V PIC X(8). 02 SEND-W1 PIC X(9) VALUE X'C1D7D3F0F240404040'. 02 SEND-W2 PIC X(16) VALUE 'SVRA SEND DATA'. *************************************************************** * DATA AREA FOR MCF-ROLLBACK * *************************************************************** 01 RBK-PARM1. 02 RBK-A PIC X(8) VALUE 'ROLLBACK'. 02 RBK-B PIC X(5). 02 FILLER PIC X(3). 02 RBK-C PIC X(4) VALUE 'NRTN'. 02 RBK-D PIC X(12) VALUE LOW-VALUE. PROCEDURE DIVISION. *************************************************************** * MCF-RECEIVE(RECEIVE OF MESSAGE) * *************************************************************** CALL 'CBLDCMCF' USING RECV-PARM1 RECV-PARM2 RECV-PARM3. IF RECV-B IS NOT EQUAL TO '00000' *************************************************************** * MCF-ROLLBACK(ERROR PROCESSING) * *************************************************************** CALL 'CBLDCMCF' USING RBK-PARM1. *************************************************************** * MCF-EXECAP(APPLICATION PROGRAM BOOTING) * *************************************************************** CALL 'CBLDCMCF' USING EXEC-PARM1 EXEC-PARM2 EXEC-PARM3. IF EXEC-B IS NOT EQUAL TO '00000' *************************************************************** * MCF-ROLLBACK(ERROR PROCESSING) * *************************************************************** CALL 'CBLDCMCF' USING RBK-PARM1. *************************************************************** * MCF-SEND(SEND OF MESSAGE) * *************************************************************** CALL 'CBLDCMCF' USING SEND-PARM1 SEND-PARM2 SEND-PARM3. IF SEND-B IS NOT EQUAL TO '00000' *************************************************************** * MCF-ROLLBACK(ERROR PROCESSING) * *************************************************************** CALL 'CBLDCMCF' USING RBK-PARM1. *************************************************************** * END PROCESSING * *************************************************************** EXIT PROGRAM.
(3) データ操作言語
***************************************************************
* MHP SERVICE PROGRAM *
***************************************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. SVRA.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
***************************************************************
* WORKING STORAGE *
***************************************************************
DATA DIVISION.
WORKING-STORAGE SECTION.
***************************************************************
* AREA FOR MESSAGE RECEIVING *
***************************************************************
01 RECV-AREA.
02 RE-DATALENG PIC 9(4) COMP.
02 RE-RSV1 PIC X(2).
02 RE-DATA PIC X(1024).
***************************************************************
* AREA FOR APPLICATION BOOTING MESSAGE *
***************************************************************
01 SEND-PRO-AREA.
02 PRO-DATALENG PIC 9(4) COMP VALUE 29.
02 PRO-RSV1 PIC X(2).
02 PRO-DATA1 PIC X(9) VALUE SPACE.
02 PRO-DATA2 PIC X(16) VALUE 'SVRA EXECAP DATA'.
***************************************************************
* AREA FOR MESSAGE SENDING *
***************************************************************
01 SEND-AREA.
02 SE-DATALENG PIC 9(4) COMP VALUE 29.
02 SE-RSV1 PIC X(2).
02 SE-DATA1 PIC X(9) VALUE X'C1D7D3F0F240404040'.
02 SE-DATA2 PIC X(16) VALUE 'SVRA SEND DATA'.
COMMUNICATION SECTION.
***************************************************************
* RECEIVE OF MESSAGE (COMMUNICATION DESCRIPTION TERM) *
***************************************************************
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.
***************************************************************
* APPLICATION PROGRAM BOOTING (COMMUNICATION DESCRIPTON TERM) *
***************************************************************
CD SEND-PRO
FOR OUTPUT PROGRAM
STATUS KEY IS SE-STATUS-PRO
SYMBOLIC TERMINAL IS SE-TERMNAM-PRO.
***************************************************************
* SEND OF MESSAGE (COMMUNICATIO DESCRIPTION TERM) *
***************************************************************
CD SEND-INF
FOR OUTPUT
STATUS KEY IS SE-STATUS
SYMBOLIC TERMINAL IS SE-TERMNAM.
PROCEDURE DIVISION.
***************************************************************
* RECEIVE OF MESSAGE (COMMUNICATION DESCRIPTION SENTENCE) *
***************************************************************
MOVE 1028 TO RE-DATALENG.
RECEIVE RECV-INF
FIRST SEGMENT
INTO RECV-AREA.
IF RE-STATUS IS NOT EQUAL '00000'
***************************************************************
* PARTIAL RECOVERY *
***************************************************************
ROLLBACK WITH STOPPING.
***************************************************************
* APPLICATION PROGRAM BOOTING (COMMUNICATION SENTENCE) *
***************************************************************
MOVE 'APL01 ' TO SE-TERMNAM-PRO.
SEND SEND-PRO
FROM SEND-PRO-AREA
WITH EMI.
IF SE-STATUS-PRO IS NOT EQUAL '00000'
***************************************************************
* PARTIAL RECOVERY *
***************************************************************
ROLLBACK WITH STOPPING.
***************************************************************
* SEND OF MESSAGE (COMMUNICATION SENTENCE) *
***************************************************************
MOVE 'NFLE02 ' TO SE-TERMNAM.
SEND SEND-INF
FROM SEND-AREA
WITH EMI.
IF SE-STATUS IS NOT EQUAL '00000'
***************************************************************
* PARTIAL RECOVERY *
***************************************************************
ROLLBACK WITH STOPPING.
***************************************************************
* END PROCESSING *
***************************************************************
EXIT PROGRAM.