IDENTIFICATION DIVISION.
       PROGRAM-ID.  RANUPDT.
       AUTHOR.  GROCER.
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       SELECT MASTER-FILE
           ASSIGN TO "C:\PCOBWIN\VSAM\MSTRVSAM.DAT"
           ORGANIZATION IS INDEXED
           ACCESS IS RANDOM
           RECORD KEY IS MID.
       SELECT TRAN-FILE
           ASSIGN TO "C:\PCOBWIN\VSAM\TRANSN.DAT".
       SELECT PRINT-FILE ASSIGN TO PRINTER.
       DATA DIVISION.
       FD  MASTER-FILE
           DATA RECORD IS MASTER-REC.
       01  MASTER-REC.
           05  MID            PIC 9(3).
           05  FILLER         PIC X(33).
       FD  TRAN-FILE
           DATA RECORD IS TRAN-REC.
       01  TRAN-REC.
           05  TRAN-DATA.
               10  TID            PIC 9(3).
               10  TITEM-NAME.
                   15  FILLER           PIC X(19).
                   15  LAST-ITEM-NAME   PIC X.
               10  TVENDOR-CODE.
                   15  FILLER           PIC XX.
                   14  LAST-VENDOR-CODE PIC X.
               10  TCOST.
                   15  FILLER     PIC XXXX.
                   15  LAST-COST  PIC X.
               10  RDF-TCOST REDEFINES TCOST PIC 999V99.
               10  TPRICE.
                   15  FILLER     PIC XXXX.
                   15  LAST-PRICE PIC X.
               10  RDF-TPRICE REDEFINES TPRICE PIC 999V99.
           05  TCODE        PIC X.
       FD  PRINT-FILE
           LABEL RECORDS ARE OMITTED
           DATA RECORD IS PRINTZ.
       01  PRINTZ.
           05  FILLER         PIC X.
           05  ID-PR          PIC 9(3).
           05  FILLER         PIC X(3).
           05  ITEM-NAME-PR   PIC X(20).
           05  FILLER         PIC X(3).
           05  VENDOR-CODE-PR PIC XXX.
           05  FILLER         PIC X(3).
           05  COST-PR        PIC $ZZZ.99.
           05  FILLER         PIC X(3).
           05  PRICE-PR       PIC $ZZZ.99.
           05  FILLER         PIC X(3).
           05  MSG-PR         PIC X(22).
           05  FILLER         PIC XX.
       WORKING-STORAGE SECTION.
       01  MASTER-REC-WS.
           05  ID-WS          PIC 9(3).
           05  ITEM-NAME-WS   PIC X(20).
           05  VENDOR-CODE-WS PIC XXX.
           05  COST-WS        PIC 999V99.
           05  PRICE-WS       PIC 999V99.
       PROCEDURE DIVISION.
       MAINLINE.
           PERFORM A-100-INITIALIZE.
           PERFORM B-100-PROCESS.
           PERFORM C-100-WRAPUP.
           STOP RUN.
       A-100-INITIALIZE.
           OPEN I-O MASTER-FILE
                INPUT TRAN-FILE
                OUTPUT PRINT-FILE.
       B-100-PROCESS.
           PERFORM U-100-READ-TRAN-FILE.
           PERFORM B-200-LOOP
               UNTIL TID = 999.
       B-200-LOOP.
           MOVE SPACES TO PRINTZ.
           MOVE TID TO MID.
           READ MASTER-FILE
                INVALID KEY
                   PERFORM B-300-NO-MSTR-THERE
                NOT INVALID KEY
                   PERFORM B-310-MSTR-THERE.
           PERFORM U-100-READ-TRAN-FILE.
       B-300-NO-MSTR-THERE.
           IF TCODE = "A"
               PERFORM B-420-ADD-ROUT
           ELSE
               IF TCODE = "C"
                   PERFORM B-440-CHANGE-ERROR-ROUT
               ELSE
                   PERFORM B-450-DELETE-ERROR-ROUT.
       B-310-MSTR-THERE.
           MOVE MASTER-REC TO MASTER-REC-WS.
           IF TCODE = "C"
               PERFORM B-400-CHANGE-ROUT
           ELSE
               IF TCODE = "D"
                   PERFORM B-410-DELETE-ROUT
               ELSE
                   PERFORM B-430-ADD-ERROR-ROUT.
       B-400-CHANGE-ROUT.
           MOVE SPACES TO PRINTZ.
           MOVE ID-WS TO ID-PR.
           MOVE ITEM-NAME-WS TO ITEM-NAME-PR.
           MOVE VENDOR-CODE-WS TO VENDOR-CODE-PR.
           MOVE COST-WS TO COST-PR.
           MOVE PRICE-WS TO PRICE-PR.
           MOVE "BEFORE CHANGES" TO MSG-PR.
           WRITE PRINTZ
              AFTER ADVANCING 2 LINES.
           IF TITEM-NAME NOT = SPACES
               IF LAST-ITEM-NAME = "-"
                   MOVE SPACES TO ITEM-NAME-WS, ITEM-NAME-PR
               ELSE
                   MOVE TITEM-NAME TO ITEM-NAME-WS, ITEM-NAME-PR.
            IF TVENDOR-CODE NOT = SPACES
                IF LAST-VENDOR-CODE = "-"
                    MOVE SPACES TO VENDOR-CODE-WS, VENDOR-CODE-PR
                ELSE
                    MOVE TVENDOR-CODE TO VENDOR-CODE-WS,
                                         VENDOR-CODE-PR.
            IF TCOST = SPACES OR RDF-TCOST = 0
                NEXT SENTENCE
            ELSE
                IF LAST-COST = "-"
                    MOVE 0 TO COST-WS, COST-PR
                ELSE
                    MOVE RDF-TCOST TO COST-WS, COST-PR.
            IF TPRICE = SPACES OR RDF-TPRICE = 0
                NEXT SENTENCE
            ELSE
                IF LAST-PRICE = "-"
                    MOVE 0 TO PRICE-WS, PRICE-PR
                ELSE
                    MOVE RDF-TPRICE TO PRICE-WS, PRICE-PR.
            REWRITE MASTER-REC FROM MASTER-REC-WS
                INVALID KEY
                    MOVE "CHANGES REJECTED" TO MSG-PR
                NOT INVALID KEY
                    MOVE "AFTER CHANGES" TO MSG-PR.
            WRITE PRINTZ
                AFTER ADVANCING 1 LINES.
       B-410-DELETE-ROUT.
           MOVE SPACES TO PRINTZ.
           MOVE MID TO ID-PR.
           MOVE ITEM-NAME-WS TO ITEM-NAME-PR.
           MOVE VENDOR-CODE-WS TO VENDOR-CODE-PR.
           MOVE COST-WS TO COST-PR.
           MOVE PRICE-WS TO PRICE-PR.
           DELETE MASTER-FILE
               INVALID KEY
                   MOVE "DELETED REJECTED" TO MSG-PR
               NOT INVALID KEY
                   MOVE "RECORD DELETED" TO MSG-PR.
           WRITE PRINTZ
               AFTER ADVANCING 2 LINES.
       B-420-ADD-ROUT.
           MOVE TRAN-DATA TO MASTER-REC.
           MOVE TID TO ID-PR.
           MOVE TITEM-NAME TO ITEM-NAME-PR.
           MOVE TVENDOR-CODE TO VENDOR-CODE-PR.
           MOVE RDF-TCOST TO COST-PR.
           MOVE RDF-TPRICE TO PRICE-PR.
           WRITE MASTER-REC
               INVALID KEY
                   MOVE "ADD REJECTED" TO MSG-PR
               NOT INVALID KEY
                   MOVE "RECORD ADDED" TO MSG-PR.
           WRITE PRINTZ
               AFTER ADVANCING 2 LINES.
       B-430-ADD-ERROR-ROUT.
           MOVE SPACES TO PRINTZ.
           MOVE TID TO ID-PR.
           MOVE TITEM-NAME TO ITEM-NAME-PR.
           MOVE TVENDOR-CODE TO VENDOR-CODE-PR.
           MOVE RDF-TCOST TO COST-PR.
           MOVE RDF-TPRICE TO PRICE-PR.
           MOVE "**RECORD NOT ADDED**" TO MSG-PR.
           WRITE PRINTZ
               AFTER ADVANCING 2 LINES.
       B-440-CHANGE-ERROR-ROUT.
           MOVE SPACES TO PRINTZ.
           MOVE TID TO ID-PR.
           MOVE TITEM-NAME TO ITEM-NAME-PR.
           MOVE TVENDOR-CODE TO VENDOR-CODE-PR.
           MOVE RDF-TCOST TO COST-PR.
           MOVE RDF-TPRICE TO PRICE-PR.
           MOVE "**RECORD NOT CHANGED**" TO MSG-PR.
           WRITE PRINTZ
               AFTER ADVANCING 2 LINES.
       B-450-DELETE-ERROR-ROUT.
           MOVE SPACES TO PRINTZ.
           MOVE TID TO ID-PR.
           MOVE "**RECORD NOT DELETED**" TO MSG-PR.
           WRITE PRINTZ
               AFTER ADVANCING 2 LINES.
       C-100-WRAPUP.
           CLOSE MASTER-FILE
                 TRAN-FILE
                 PRINT-FILE.
       U-100-READ-TRAN-FILE.
           READ TRAN-FILE
               AT END
                   MOVE 999 TO TID.