---------------------------------------------------------------------------------------------------------------------------
Factors to consider when planning sequential updates to a master file.
  ---------------------------------------------------------------------------------------------------------------------------
REWRITE -- can replace the contents of records on disk files.
          FD  MASTER-FILE.
        01 MASTER-RECORD.
             05 MASTER-ID  PIC XXX.
             05 MASTER-VALUE PIC 999V99.
            OPEN I-O MASTER-FILE
           READ MASTER-FILE
           ADD 10 to MASTER-VALUE
            REWRITE MASTER-RECORD
------------------------------------------------------------------------
The following procedure code updates and rewrites all the records in the master.

        OPEN I-O MASTER-FILE
        MOVE SPACES TO MASTER-SWITCH
        PERFORM UNTIL MASTER-SWITCH = 'EOF'
             READ MASTER-FILE
               AT END MOVE 'EOF' TO MASTER-SWITCH
               NOT AT END
                 ADD 10 TO MASTER-VALUE
                 REWRITE MASTER-RECORD
               END-READ
        END-PERFORM
        CLOSE MASTER-FILE
------------------------------------------------------------------------------------------------------------------------------
When using REWRITE the programmer must make provisions for
 

                   IF  ACTIVE-RECORD
                 PERFORM PRINT-ROUTINE
             END-IF
              OPEN EXTEND MASTER-FILE
          Inputs the old master and inputs the transactions

        then outputs a new master.
 

--------------------------------------------------------------------------------
Steps for creating a new master file from and old master and transactions.
 

           ADD a record that already exists in the old master file

           CHANGE or DELETE a record that does not exist in the master file

           Apply transaction data that has error in the input fields.
 

     If transaction-key = old-master-key,
        means that there is a "change" or "delete" for the current old-master-record
        therefore
            process the "change" or "delete" record

     If transaction-key > old-master-key,
        means that there is no corresponding change requested for the current record
        therefore
            write the new-master-record from the old-master-record
            and read another old-master-record

     If transaction-key < old-master-key,
        means either of two things
        if the application allows new records with keys smaller than existing keys,
        then
            process a transaction record that contains information to be "added"
        or
        if the application does not allow new keys smaller than existing keys,
        then
            process an erroneous transaction.

     If no-more-masters and more-transactions
        means all the remaining transactions are additions or changes to additions
        therefore
            apply add, change and delete to all records coming from the transaction file
            until there are no-more-transactions

     If no-more-transactions and more-masters,
        means there are masters that have to be copied from the old-master to the new-master
        therefore,
            copy the old master records to the new master file
            
---------------------------------------------------------------------------------------
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. UPDATES.
000300 AUTHOR. JOHN H PETLICKI.
000400 ENVIRONMENT DIVISION.
000500 INPUT-OUTPUT SECTION.
000600 FILE-CONTROL.
000700     SELECT OLD-MASTER ASSIGN TO OLDMAST.
000800     SELECT NEW-MASTER ASSIGN TO NEWMAST.
000900     SELECT TRANSACTIONS ASSIGN TO TRANS.
000910
001100 DATA DIVISION.
001200 FILE SECTION.
001300
001400 FD  OLD-MASTER
001500     DATA RECORD IS OLD-MASTER-REC.
001600 01  OLD-MASTER-REC.
001700     05  OLD-MASTER-ID          PIC XX.
001800     05  OLD-MASTER-VALUE       PIC 9(3)V99.
001900
002000 FD  NEW-MASTER
002100     DATA RECORD IS NEW-MASTER-REC.
002200 01  NEW-MASTER-REC.
002300     05  NEW-MASTER-ID          PIC XX.
002400     05  NEW-MASTER-VALUE       PIC 9(3)V99.
002500
002600 FD  TRANSACTIONS
002700     DATA RECORD IS TRANS-REC.
002800 01  TRANS-REC.
002900     05  TRANS-ID              PIC XX.
003000     05  TRANS-VALUE           PIC 9(3)V99.
003100     05  TRANS-TYPE            PIC X.
003200         88  VALID-TRANS-TYPE  VALUES ARE 'A' 'C' 'D'.
003300         88  ADD-TRANS         VALUE IS 'A'.
003400         88  CHANGE-TRANS      VALUE IS 'C'.
003500         88  DELETE-TRANS      VALUE IS 'D'.
003600
003700 WORKING-STORAGE SECTION.
003800 01  MASTER-SWITCH               PIC XXX VALUE SPACES.
003900 01  TRANSACTION-SWITCH          PIC XXX VALUE SPACES.
004000 01  WS-REC.
004100     05  WS-ID                   PIC XX VALUE LOW-VALUES.
004200     05  WS-VALUE                PIC S9(3)V99.
004300 01  COUNTERS.
004400     05  TOTAL-OLD-MASTERS         PIC 9(5) VALUE ZEROS.
004500     05  TOTAL-NEW-MASTERS         PIC 9(5) VALUE ZEROS.
004600     05  TOTAL-MASTERS-ADDED       PIC 9(5) VALUE ZEROS.
004700     05  TOTAL-MASTERS-DELETED     PIC 9(5) VALUE ZEROS.
004800
004900     05  TOTAL-TRANS-ENTERED       PIC 9(5) VALUE ZEROS.
005000     05  TOTAL-ADDS-ENTERED        PIC 9(5) VALUE ZEROS.
005100     05  TOTAL-CHANGES-ENTERED     PIC 9(5) VALUE ZEROS.
005200     05  TOTAL-DELETES-ENTERED     PIC 9(5) VALUE ZEROS.
005300     05  TOTAL-OTHER-ENTERED       PIC 9(5) VALUE ZEROS.
005400
005500     05  TOTAL-TRANS-APPLIED       PIC 9(5) VALUE ZEROS.
005600     05  TOTAL-ADDS-APPLIED        PIC 9(5) VALUE ZEROS.
005700     05  TOTAL-CHANGES-APPLIED     PIC 9(5) VALUE ZEROS.
005800     05  TOTAL-DELETES-APPLIED     PIC 9(5) VALUE ZEROS.
005900     05  TOTAL-OTHER-APPLIED       PIC 9(5) VALUE ZEROS.
006000
006100     05  TOTAL-TRANS-REJECTED      PIC 9(5) VALUE ZEROS.
006200     05  TOTAL-ADDS-REJECTED       PIC 9(5) VALUE ZEROS.
006300     05  TOTAL-CHANGES-REJECTED    PIC 9(5) VALUE ZEROS.
006400     05  TOTAL-DELETES-REJECTED    PIC 9(5) VALUE ZEROS.
006500     05  TOTAL-OTHER-REJECTED      PIC 9(5) VALUE ZEROS.
006600
006700 PROCEDURE DIVISION.
006800     OPEN  INPUT OLD-MASTER
006900                 TRANSACTIONS
007000          OUTPUT NEW-MASTER
007100     MOVE LOW-VALUES TO WS-REC
007200     PERFORM 900-READ-TRANS
007300     PERFORM 910-READ-OLD-MASTER
007400     PERFORM 200-PROCESS-TRANS-AND-MASTERS
007500             UNTIL MASTER-SWITCH      = 'EOF'
007600             AND   TRANSACTION-SWITCH = 'EOF'
007700     PERFORM 610-WRITE-IF-WS-REC-VALID
007800
007900     CLOSE OLD-MASTER
008000           TRANSACTIONS
008100           NEW-MASTER.
008200     GOBACK.
008300
008400 200-PROCESS-TRANS-AND-MASTERS.
008500     EVALUATE TRUE
008600     WHEN MASTER-SWITCH = 'EOF'
008700          PERFORM 300-CHECK-TRANSACTIONS
008800     WHEN TRANSACTION-SWITCH = 'EOF'
008900          PERFORM 640-COPY-OLD-TO-NEW
009000     WHEN OTHER
009100          PERFORM 500-COMPARE-TRAN-TO-MASTER
009200     END-EVALUATE.
009300
009400 300-CHECK-TRANSACTIONS.
009500     IF  TRANS-ID = WS-ID
009600         PERFORM 600-CHANGE-TRANSACTION
009700     ELSE
009800         PERFORM 610-WRITE-IF-WS-REC-VALID
009900         PERFORM 620-ADD-TRANSACTION
010000     END-IF
010100     PERFORM 900-READ-TRANS.
010200
010900 500-COMPARE-TRAN-TO-MASTER.
011000     EVALUATE TRUE
011100     WHEN TRANS-ID < OLD-MASTER-ID
011200          PERFORM 300-CHECK-TRANSACTIONS
011300     WHEN TRANS-ID = OLD-MASTER-ID
011400          PERFORM 630-UPDATE-MASTER
011500     WHEN OTHER
011600          PERFORM 640-COPY-OLD-TO-NEW
011700     END-EVALUATE.
011800
011900 600-CHANGE-TRANSACTION.
012000     EVALUATE TRUE
012100     WHEN    CHANGE-TRANS
012200             EVALUATE TRUE
012300             WHEN     TRANS-VALUE NUMERIC
012400                  ADD TRANS-VALUE TO WS-VALUE
012500                  PERFORM 650-TALLY-TRANS-APPLIED
012600             WHEN OTHER
012700                  PERFORM 850-DISPLAY-INVALID-TRANS
012800                  PERFORM 660-TALLY-TRANS-REJECTED
012900             END-EVALUATE
013000     WHEN    DELETE-TRANS
013100             MOVE LOW-VALUES TO WS-REC
013200             PERFORM 650-TALLY-TRANS-APPLIED
013300     WHEN OTHER
013400             PERFORM 850-DISPLAY-INVALID-TRANS
013500             PERFORM 660-TALLY-TRANS-REJECTED
013600     END-EVALUATE.
013700
013800 610-WRITE-IF-WS-REC-VALID.
013900     IF  WS-REC > LOW-VALUES
014000         WRITE NEW-MASTER-REC FROM WS-REC
014100         ADD 1 TO TOTAL-NEW-MASTERS
014200         MOVE LOW-VALUES TO WS-REC
014300     END-IF.
014400
014500 620-ADD-TRANSACTION.
014600     EVALUATE TRUE
014700     WHEN ADD-TRANS
014800          IF  TRANS-VALUE NUMERIC
014900              MOVE TRANS-REC TO WS-REC
015000              PERFORM 650-TALLY-TRANS-APPLIED
015100          ELSE
015200              MOVE LOW-VALUES TO WS-REC
015300              PERFORM 850-DISPLAY-INVALID-TRANS
015400              PERFORM 660-TALLY-TRANS-REJECTED
015500          END-IF
015600     WHEN OTHER
015700          PERFORM 850-DISPLAY-INVALID-TRANS
015800          MOVE LOW-VALUES TO WS-REC
015900          PERFORM 660-TALLY-TRANS-REJECTED
016000     END-EVALUATE.
016100
016300 630-UPDATE-MASTER.
016400     PERFORM 610-WRITE-IF-WS-REC-VALID
016500     MOVE    OLD-MASTER-REC TO WS-REC
016600     PERFORM 600-CHANGE-TRANSACTION
016700     PERFORM 900-READ-TRANS
016800     PERFORM 910-READ-OLD-MASTER.
016900
017000 640-COPY-OLD-TO-NEW.
017100     PERFORM 610-WRITE-IF-WS-REC-VALID
017200     WRITE   NEW-MASTER-REC FROM OLD-MASTER-REC
017300     ADD 1 TO TOTAL-NEW-MASTERS
017400     PERFORM 910-READ-OLD-MASTER.
017500
017600 650-TALLY-TRANS-APPLIED.
017700     ADD 1 TO TOTAL-TRANS-APPLIED
017800     EVALUATE TRUE
017900         WHEN ADD-TRANS    ADD 1 TO TOTAL-ADDS-APPLIED
018000                                    TOTAL-MASTERS-ADDED
018100         WHEN CHANGE-TRANS ADD 1 TO TOTAL-CHANGES-APPLIED
018200         WHEN DELETE-TRANS ADD 1 TO TOTAL-DELETES-APPLIED
018300                                    TOTAL-MASTERS-DELETED
018400         WHEN OTHER        ADD 1 TO TOTAL-OTHER-APPLIED
018500     END-EVALUATE.
018600
018700 660-TALLY-TRANS-REJECTED.
018800     ADD 1 TO TOTAL-TRANS-REJECTED
018900     EVALUATE TRUE
019000         WHEN ADD-TRANS    ADD 1 TO TOTAL-ADDS-REJECTED
019100         WHEN CHANGE-TRANS ADD 1 TO TOTAL-CHANGES-REJECTED
019200         WHEN DELETE-TRANS ADD 1 TO TOTAL-DELETES-REJECTED
019300         WHEN OTHER        ADD 1 TO TOTAL-OTHER-REJECTED
019400     END-EVALUATE.
019500
019700 850-DISPLAY-INVALID-TRANS.
019800     DISPLAY 'INVALID TRANSACTION ' TRANS-REC.
019900
020000 900-READ-TRANS.
020100     READ TRANSACTIONS
020200       AT END MOVE "EOF" TO TRANSACTION-SWITCH
020300       NOT AT END
020400         ADD 1 TO TOTAL-TRANS-ENTERED
020500         EVALUATE TRUE
020600             WHEN ADD-TRANS ADD 1 TO TOTAL-ADDS-ENTERED
020700             WHEN CHANGE-TRANS ADD 1 TO TOTAL-CHANGES-ENTERED
020800             WHEN DELETE-TRANS ADD 1 TO TOTAL-DELETES-ENTERED
020900             WHEN OTHER ADD 1 TO TOTAL-OTHER-ENTERED
020910         END-EVALUATE
021000     END-READ.
021100
021200 910-READ-OLD-MASTER.
021300     READ OLD-MASTER
021400          AT END MOVE "EOF" TO MASTER-SWITCH
021500          NOT AT END ADD 1 TO TOTAL-OLD-MASTERS
021600     END-READ.
021700
--------------------------------------------------------------------------------------