COBOL INMOD Example
This INMOD example reads and returns an 80-byte record string.
//DBCCB1 JOB 1,'DBC',MSGCLASS=A,NOTIFY=DBC,CLASS=B,REGION=4096K
//COBCOMPL EXEC COBUCL
//COB.SYSIN DD *
IDENTIFICATION DIVISION.
PROGRAM-ID. DYNAMN.
AUTHOR. JAMES KIM.
INSTALLATION. TERADATA.
DATE-WRITTEN. 05 SEPTEMBER 1989.
DATE-COMPILED.
SECURITY. OPEN.
REMARKS.
THIS PROGRAM IS AN EXAMPLE OF A COBOL INMOD ROUTINE FOR
MULTILOAD.
FUNCTION: THIS PROGRAM READS AND RETURNS A RECORD
OF 80 BYTES LONG VIA STRUCT-1 AND STRUCT-2.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-370.
OBJECT-COMPUTER. IBM-370.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INMOD-DATA-FILE ASSIGN TO SYSIN-INDATA.
DATA DIVISION.
FILE SECTION.
FD INMOD-DATA-FILE
BLOCK CONTAINS 0 RECORDS
LABEL RECORDS STANDARD.
01 INPUT-PARM-AREA PICTURE IS X(80).
WORKING-STORAGE SECTION.
01 NUMIN PICTURE S9(4) COMP VALUE +0.
01 NUMOUT PICTURE S9(4) COMP VALUE +0.
LINKAGE SECTION.
*MLOAD COMMUNICATES WITH INMOD VIA STRUCT-1 AND STRUCT-2.
01 STRUCT-1.
02 RETURN-INDICATE PIC S9(9) COMP.
02 RECORD-LEN PIC S9(9) COMP.
02 RECORD-BODY.
03 DATA-AREA1 PIC X(80).
01 STRUCT-2.
02 SEQ-NUMBER PIC S9(9) COMP.
02 PARM-LIST.
05 PARM-LENTH PIC X(2).
05 PARM-STRING PIC X(80).
PROCEDURE DIVISION USING STRUCT-1, STRUCT-2.
BEGIN.
MAIN.
DISPLAY "=============================================="
DISPLAY STRUCT-1.
DISPLAY STRUCT-2.
IF RETURN-INDICATE = 0 THEN
* INMOD INITIALIZATION - OPEN FILE AND READ THE 1ST REC.
DISPLAY "INMOD CALLED - RETURN CODE 0 "
PERFORM OPEN-FILES
PERFORM READ-RECORDS
GOBACK
ELSE
IF RETURN-INDICATE = 1 THEN
* READ A RECORD.
DISPLAY "INMOD CALLED - RETURN CODE 1 "
PERFORM READ-RECORDS
GOBACK
ELSE
IF RETURN-INDICATE = 5 THEN
* CLOSE INMOD - JUST SEND RETURN CODE = 0
DISPLAY "INMOD CALLED - RETURN CODE 5 "
MOVE 0 TO RECORD-LEN
MOVE 0 TO RETURN-INDICATE
GOBACK
ELSE
* UNKNOWN CODE.
DISPLAY "INMOD CALLED - RETURN CODE X "
MOVE 0 TO RECORD-LEN
MOVE 16 TO RETURN-INDICATE
GOBACK.
OPEN-FILES.
OPEN INPUT INMOD-DATA-FILE.
MOVE 0 TO RETURN-INDICATE.
READ-RECORDS.
READ INMOD-DATA-FILE INTO DATA-AREA1
AT END GO TO END-DATA.
ADD 1 TO NUMIN.
MOVE 80 TO RECORD-LEN.
MOVE 0 TO RETURN-INDICATE.
ADD 1 TO NUMOUT.
END-DATA.
CLOSE INMOD-DATA-FILE.
DISPLAY "NUMBER OF INPUT RECORDS = " NUMIN.
DISPLAY "NUMBER OF OUTPUT RECORDS = " NUMOUT.
MOVE 0 TO RECORD-LEN.
MOVE 0 TO RETURN-INDICATE.
GOBACK.
/*
//LKED.SYSLMOD DD DSN=JCK.INMOD.LOAD(INMODG1),DISP=MOD
//LKED.SYSIN DD *
ENTRY DYNAMN
NAME INMODG1(R)
/*
//*****************************************************************
//* NEXT 3 STEPS PREPARE TERADATA DBS FOR THE MULTILOAD'S INMOD *
//* TEST. *
//*****************************************************************
//MLOADDEL EXEC PGM=IEFBR14
//MLOADLOG DD DSN=JCK.INMOD.TDQ8.MLOADLOG,
// DISP=(MOD,DELETE),UNIT=SYSDA,SPACE=(TRK,0)
//MLOADCAT EXEC PGM=BLKMAIN
//SYSPRINT DD SYSOUT=*
//MLOADLOG DD DSN=JCK.INMOD.TDQ8.MLOADLOG,DISP=(NEW,CATLG),
// UNIT=SYSDA,DCB=(RECFM=F,DSORG=PS,LRECL=8244),
// SPACE=(8244,(12,5))
//SYSIN DD *
//*****************************************************************
//* THIS STEP WILL ONLY DROP THE TABLES IF MLOAD NOT IN APPLY *
//* PHASE. *
//*****************************************************************
//CREATE EXEC BTEQ
//STEPLIB DD DSN=STV.GG00.APP.L,DISP=SHR
// DD DSN=STV.TG00.APP.L,DISP=SHR
// DD DSN=STV.RG00.APP.L,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSABEND DD SYSOUT=*
//SYSIN DD DATA,DLM=##
.LOGON TDQ8/DBC,DBC;
RELEASE MLOAD XXXX.INMODCB1;
.IF ERRORCODE = 2572 THEN .GOTO NODROP;
DROP TABLE XXXX.LOGTABLE;
DROP TABLE XXXX.ET_INMODCB1;
DROP TABLE XXXX.UV_INMODCB1;
DROP TABLE XXXX.WT_INMODCB1
.QUIT;
.LABEL NODROP;
.EXIT 4;;
DROP USER XXXX;
##
//******************************************************************
//* *
//* RUN MULTILOAD *
//* *
//******************************************************************
//LOADIT EXEC PGM=MLOAD
//LOADIT EXEC PGM=MLOAD
//STEPLIB DD DISP=SHR,DSN=JCK.INMOD.LOAD
//SYSPRINT DD SYSOUT=*
//SYSTERM DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD DATA,DLM=##
.LOGTABLE XXXX.LOGTABLE;
.LOGON TDQ8/XXXX,XXXX;
/* TEST DATAIN, DATALOC */
DROP TABLE XXXX.INMODCB1;
CREATE TABLE INMODCB1 (F1 CHAR(10), F2 CHAR(70));
.BEGIN IMPORT MLOAD TABLES INMODCB1;
.Layout layname1;
.Field L1Fld1 1 Char(10);
.Field L1Fld2 * Char(70);
.DML Label DML1;
INSERT INMODCB1(F1,F2) VALUES (:L1FLD1, :L1FLD2);
.IMPORT INMOD INMODG1 USING ("AAA" "BBB") LAYOUT LAYNAME1 APPLY DML1;
.End Mload;
.LOGOFF;
##
//INDATA DD DATA,DLM=##
01COBOL1 AAAAAAAAAAAAAAAA
02COBOL1 BBBBBBBBBBBBBBBB
03COBOL1 CCCCCCCCCCCCCCCC
04COBOL1 DDDDDDDDDDDDDDDD
##
//SELECT EXEC BTEQ
//STEPLIB DD DSN=STV.GG00.APP.L,DISP=SHR
// DD DSN=STV.TG00.APP.L,DISP=SHR
// DD DSN=STV.RG00.APP.L,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSABEND DD SYSOUT=*
//SYSIN DD DATA,DLM=##
.LOGON TDQ8/XXXX,XXXX;
SELECT * FROM INMODCB1;
.LOGOFF;
##
//