FILE-CONTROL.
SELECT OLD-MASTER ASSIGN TO "OLDMST.DAT"
ORGANIZATION IS SEQUENTIAL.
SELECT TRANS-FILE ASSIGN TO "TRANFLE.DAT"
ORGANIZATION IS SEQUENTIAL.
SELECT NEW-MASTER ASSIGN TO "NEWMST.DAT"
ORGANIZATION IS SEQUENTIAL.
SELECT IN-ERROR-FILE ASSIGN TO "INERROR2"
ORGANIZATION IS SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD OLD-MASTER
LABEL RECORDS ARE STANDARD.
01 OLD-MASTER-REC.
05 FILLER PIC X(3).
05 OM-CUST-ACCT PIC X(3).
05 FILLER PIC X(3).
05 OM-CUST-NAM PIC X(16).
05 FILLER PIC X(3).
05 OM-BAL-DUE PIC 9(6)V99.
FD TRANS-FILE
LABEL RECORDS ARE STANDARD.
01 TRANS-REC.
05 FILLER PIC X(3).
05 TR-CUST-ACCT PIC X(3).
05 FILLER PIC X(3).
05 TR-CUST-NAM PIC X(16).
05 FILLER PIC X(3).
05 TR-TRAN-AMT PIC 9(4)V99.
05 FILLER PIC X(3).
05 TR-DEL-CODE PIC X.
88 REMOVE VALUE "D".
FD NEW-MASTER
LABEL RECORDS ARE STANDARD.
01 NEW-MASTER-REC.
05 FILLER PIC X(3).
05 NM-CUST-ACCT PIC X(3).
05 FILLER PIC X(3).
05 NM-CUST-NAM PIC X(16).
05 FILLER PIC X(3).
05 NM-BAL-DUE PIC 9(6)V99.
FD IN-ERROR-FILE
LABEL RECORDS ARE STANDARD.
01 ERROR-REC PIC X(40).
WORKING-STORAGE SECTION.
01 ERROR-TITLE PIC X(36)
VALUE "ERROR REPORT FOR MASTER FILE UPDATE".
PROCEDURE DIVISION.
0000-MAIN-MODULE.
PERFORM 1000-INIT-RTN.
PERFORM 1200-ERROR-HEADER.
PERFORM 2000-READ-MASTER-RTN.
PERFORM 3000-READ-TRANS-RTN.
PERFORM 4000-PROCESSING-RTN UNTIL
OM-CUST-ACCT = HIGH-VALUES AND
TR-CUST-ACCT = HIGH-VALUES.
PERFORM 5000-TERM-RTN.
1000-INIT-RTN.
OPEN INPUT OLD-MASTER
TRANS-FILE
OUTPUT NEW-MASTER
IN-ERROR-FILE.
1200-ERROR-HEADER.
WRITE ERROR-REC FROM ERROR-TITLE.
2000-READ-MASTER-RTN.
MOVE SPACES TO OLD-MASTER-REC.
READ OLD-MASTER AT END
MOVE HIGH-VALUES TO OM-CUST-ACCT.
3000-READ-TRANS-RTN.
READ TRANS-FILE AT END
MOVE HIGH-VALUES TO TR-CUST-ACCT.
4000-PROCESSING-RTN.
IF OM-CUST-ACCT = TR-CUST-ACCT
PERFORM 4100-CODE-REG-UPDATE-RTN
ELSE IF OM-CUST-ACCT > TR-CUST-ACCT
PERFORM 4300-CODE-NEW-ACCT-RTN
ELSE
PERFORM 4600-NO-UPDATE-RTN.
4100-CODE-REG-UPDATE-RTN.
IF REMOVE
NEXT SENTENCE
ELSE PERFORM 4200-REG-UPDATE-RTN.
PERFORM 2000-READ-MASTER-RTN.
PERFORM 3000-READ-TRANS-RTN.
4200-REG-UPDATE-RTN.
MOVE OM-CUST-ACCT TO NM-CUST-ACCT.
ADD OM-BAL-DUE, TR-TRAN-AMT GIVING
NM-BAL-DUE.
WRITE NEW-MASTER-REC.
4300-CODE-NEW-ACCT-RTN.
IF REMOVE
PERFORM 4900-ERR-IN-RTN
ELSE
PERFORM 4400-NEW-ACCT-RTN.
PERFORM 3000-READ-TRANS-RTN.
4400-NEW-ACCT-RTN.
MOVE TR-CUST-ACCT TO NM-CUST-ACCT.
MOVE TR-CUST-NAM TO NM-CUST-NAM.
MOVE TR-TRAN-AMT TO NM-BAL-DUE.
WRITE NEW-MASTER-REC.
4600-NO-UPDATE-RTN.
MOVE OM-CUST-ACCT TO NM-CUST-ACCT.
MOVE OM-BAL-DUE TO NM-BAL-DUE.
WRITE NEW-MASTER-REC.
PERFORM 2000-READ-MASTER-RTN.
4900-ERR-IN-RTN.
WRITE ERROR-REC FROM TRANS-REC.
5000-TERM-RTN.
CLOSE OLD-MASTER
TRANS-FILE
NEW-MASTER
IN-ERROR-FILE.
STOP RUN.
SELECT OLD-MASTER ASSIGN TO "OLDMST.DAT"
ORGANIZATION IS SEQUENTIAL.
SELECT TRANS-FILE ASSIGN TO "TRANFLE.DAT"
ORGANIZATION IS SEQUENTIAL.
SELECT NEW-MASTER ASSIGN TO "NEWMST.DAT"
ORGANIZATION IS SEQUENTIAL.
SELECT IN-ERROR-FILE ASSIGN TO "INERROR2"
ORGANIZATION IS SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD OLD-MASTER
LABEL RECORDS ARE STANDARD.
01 OLD-MASTER-REC.
05 FILLER PIC X(3).
05 OM-CUST-ACCT PIC X(3).
05 FILLER PIC X(3).
05 OM-CUST-NAM PIC X(16).
05 FILLER PIC X(3).
05 OM-BAL-DUE PIC 9(6)V99.
FD TRANS-FILE
LABEL RECORDS ARE STANDARD.
01 TRANS-REC.
05 FILLER PIC X(3).
05 TR-CUST-ACCT PIC X(3).
05 FILLER PIC X(3).
05 TR-CUST-NAM PIC X(16).
05 FILLER PIC X(3).
05 TR-TRAN-AMT PIC 9(4)V99.
05 FILLER PIC X(3).
05 TR-DEL-CODE PIC X.
88 REMOVE VALUE "D".
FD NEW-MASTER
LABEL RECORDS ARE STANDARD.
01 NEW-MASTER-REC.
05 FILLER PIC X(3).
05 NM-CUST-ACCT PIC X(3).
05 FILLER PIC X(3).
05 NM-CUST-NAM PIC X(16).
05 FILLER PIC X(3).
05 NM-BAL-DUE PIC 9(6)V99.
FD IN-ERROR-FILE
LABEL RECORDS ARE STANDARD.
01 ERROR-REC PIC X(40).
WORKING-STORAGE SECTION.
01 ERROR-TITLE PIC X(36)
VALUE "ERROR REPORT FOR MASTER FILE UPDATE".
PROCEDURE DIVISION.
0000-MAIN-MODULE.
PERFORM 1000-INIT-RTN.
PERFORM 1200-ERROR-HEADER.
PERFORM 2000-READ-MASTER-RTN.
PERFORM 3000-READ-TRANS-RTN.
PERFORM 4000-PROCESSING-RTN UNTIL
OM-CUST-ACCT = HIGH-VALUES AND
TR-CUST-ACCT = HIGH-VALUES.
PERFORM 5000-TERM-RTN.
1000-INIT-RTN.
OPEN INPUT OLD-MASTER
TRANS-FILE
OUTPUT NEW-MASTER
IN-ERROR-FILE.
1200-ERROR-HEADER.
WRITE ERROR-REC FROM ERROR-TITLE.
2000-READ-MASTER-RTN.
MOVE SPACES TO OLD-MASTER-REC.
READ OLD-MASTER AT END
MOVE HIGH-VALUES TO OM-CUST-ACCT.
3000-READ-TRANS-RTN.
READ TRANS-FILE AT END
MOVE HIGH-VALUES TO TR-CUST-ACCT.
4000-PROCESSING-RTN.
IF OM-CUST-ACCT = TR-CUST-ACCT
PERFORM 4100-CODE-REG-UPDATE-RTN
ELSE IF OM-CUST-ACCT > TR-CUST-ACCT
PERFORM 4300-CODE-NEW-ACCT-RTN
ELSE
PERFORM 4600-NO-UPDATE-RTN.
4100-CODE-REG-UPDATE-RTN.
IF REMOVE
NEXT SENTENCE
ELSE PERFORM 4200-REG-UPDATE-RTN.
PERFORM 2000-READ-MASTER-RTN.
PERFORM 3000-READ-TRANS-RTN.
4200-REG-UPDATE-RTN.
MOVE OM-CUST-ACCT TO NM-CUST-ACCT.
ADD OM-BAL-DUE, TR-TRAN-AMT GIVING
NM-BAL-DUE.
WRITE NEW-MASTER-REC.
4300-CODE-NEW-ACCT-RTN.
IF REMOVE
PERFORM 4900-ERR-IN-RTN
ELSE
PERFORM 4400-NEW-ACCT-RTN.
PERFORM 3000-READ-TRANS-RTN.
4400-NEW-ACCT-RTN.
MOVE TR-CUST-ACCT TO NM-CUST-ACCT.
MOVE TR-CUST-NAM TO NM-CUST-NAM.
MOVE TR-TRAN-AMT TO NM-BAL-DUE.
WRITE NEW-MASTER-REC.
4600-NO-UPDATE-RTN.
MOVE OM-CUST-ACCT TO NM-CUST-ACCT.
MOVE OM-BAL-DUE TO NM-BAL-DUE.
WRITE NEW-MASTER-REC.
PERFORM 2000-READ-MASTER-RTN.
4900-ERR-IN-RTN.
WRITE ERROR-REC FROM TRANS-REC.
5000-TERM-RTN.
CLOSE OLD-MASTER
TRANS-FILE
NEW-MASTER
IN-ERROR-FILE.
STOP RUN.