       IDENTIFICATION DIVISION.
       PROGRAM-ID.  SAMPLE.
       AUTHOR. NANCY STERN.
      *******************************************
      *  THIS PROGRAM UPDATES AN INDEXED FILE   *
      *******************************************
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
      ***************************************************
      * For PC Compilers add the line:                  *
      *    ORGANIZATION IS LINE SEQUENTIAL              *
      *       for all SEQUENTIAL files in the           *
      *          ASSIGN clause of the SELECT statement  *
      ***************************************************
       FILE-CONTROL.
           SELECT MASTER-DISK-IO ASSIGN TO DISK 'Ch15ppi.dat'
              ORGANIZATION IS INDEXED
              ACCESS IS RANDOM
              RECORD KEY MASTER-CUST-NO.
           SELECT TRANSACTION-IN ASSIGN TO DISK 'Ch15ppt.dat'
               ORGANIZATION IS LINE SEQUENTIAL.
      *
       DATA DIVISION.
       FILE SECTION.
       FD  MASTER-DISK-IO
           LABEL RECORDS ARE OMITTED.
       01  MASTER-REC-IO.
           05  MASTER-CUST-NO           PIC X(5).
           05  MASTER-BALANCE-DUE       PIC 9(3)V99.
       FD  TRANSACTION-IN
           LABEL RECORDS ARE STANDARD.
       01  TRANS-REC-IN.
           05  TRANS-CUST-NO-IN         PIC X(5).
           05  TRANS-AMT-IN             PIC 9(3)V99.
           05  TRANS-CODE-IN            PIC X.
               88  DELETE-RECORD                       VALUE '1'.
       WORKING-STORAGE SECTION.
       01  WS-WORK-AREAS.
           05  ARE-THERE-MORE-RECORDS   PIC X(3)       VALUE 'YES'.
               88  NO-MORE-RECORDS                     VALUE 'NO '.
      *
       PROCEDURE DIVISION.
      *****************************************
      *  CONTROLS DIRECTION OF PROGRAM LOGIC  *
      *****************************************
       100-MAIN-MODULE.
           PERFORM 400-INITIALIZATION-RTN
           PERFORM UNTIL NO-MORE-RECORDS
               READ TRANSACTION-IN
                   AT END
                     MOVE 'NO' TO ARE-THERE-MORE-RECORDS
                   NOT AT END
                     PERFORM 200-CALC-RTN
               END-READ
           END-PERFORM
           PERFORM 500-END-OF-JOB-RTN
           STOP RUN.
      ***********************************************
      *  PERFORMED FROM 100-MAIN-MODULE. READS AND  *
      *  UPDATES MASTER FILE.                       *
      ***********************************************
       200-CALC-RTN.
           MOVE TRANS-CUST-NO-IN TO MASTER-CUST-NO.
           IF  DELETE-RECORD
               PERFORM 350-DELETE-RTN
           ELSE
               READ MASTER-DISK-IO
               INVALID KEY
                   DISPLAY 'INVALID TRANSACTION RECORD ', TRANS-REC-IN
               NOT INVALID KEY PERFORM 300-UPDATE-THE-RECORD
               END-READ
           END-IF.
       300-UPDATE-THE-RECORD.
           ADD TRANS-AMT-IN TO MASTER-BALANCE-DUE
           REWRITE MASTER-REC-IO
               INVALID KEY DISPLAY 'ERROR IN REWRITE'
           END-REWRITE.
       350-DELETE-RTN.
           DELETE MASTER-DISK-IO RECORD
               INVALID KEY DISPLAY 'ERROR IN DELETE FILE'
           END-DELETE.
      *******************************************
      *  PERFORMED FROM 100-MAIN-MODULE.        *
      *  OPENS FILES                            *
      *******************************************
       400-INITIALIZATION-RTN.
           OPEN INPUT TRANSACTION-IN.
           OPEN I-O   MASTER-DISK-IO.
      **************************************************
      *  PERFORMED FROM 100-MAIN-MODULE, CLOSES FILES  *
      **************************************************
       500-END-OF-JOB-RTN.
           CLOSE TRANSACTION-IN
                 MASTER-DISK-IO.

