IDENTIFICATION DIVISION. PROGRAM-ID. TBLSOUP1. AUTHOR. GROCER. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INPUT-FILE ASSIGN TO "C:\PCOBWIN\TABLES\EMPTSOUP.DAT". SELECT PRINT-FILE ASSIGN TO PRINTER. DATA DIVISION. FILE SECTION. FD INPUT-FILE DATA RECORDS ARE INPUT-REC, TABLE-REC. 01 INPUT-REC. 05 ORDER-NO PIC 9999. 05 ITEM-NUMBER-IN PIC 99. 05 FILLER PIC X(62). 01 TABLE-REC. 05 TABLE-ENTRY OCCURS 4 TIMES. 10 ITEM-NUM-FOR-TABLE PIC 99. 10 ITEM-NAME-FOR-TABLE PIC X(15). FD PRINT-FILE DATA RECORD IS PRINTZ. 01 PRINTZ. 05 FILLER PIC X. 05 ORDER-NO-PR PIC 9999. 05 FILLER PIC X(10). 05 ITEM-NUMBER-IN-PR PIC 99. 05 FILLER PIC X(10). 05 ITEM-NAME-PR PIC X(15). 05 FILLER PIC X(38). WORKING-STORAGE SECTION. 01 INDICATORS. 05 MORE-RECS PIC XXX VALUE "YES". 05 MATCH-IND PIC XXX VALUE "NO". 01 SUBSCRIPTS. 05 SUB-IN PIC 99 VALUE 1. 05 SUB-TBL PIC 99 VALUE 1. 05 ITEM-SUB PIC 99 VALUE 1. 01 TABLE-COMBINED. 05 ENTRIES OCCURS 6 TIMES. 10 ITEM-NUMBER-TBL PIC 99. 10 ITEM-NAME-TBL PIC X(15). 01 PAGE-CONTROL. 05 PAGE-NO PIC 99 VALUE 1. 05 LINE-CT PIC 99 VALUE 0. 01 DATE-WS. 05 YR-WS PIC 99 VALUE 0. 05 MO-WS PIC 99 VALUE 0. 05 DA-WS PIC 99 VALUE 0. 01 PAGE-HDR. 05 FILLER PIC XX VALUE SPACES. 05 DATE-HDR. 10 MO-HDR PIC 99. 10 FILLER PIC X VALUE "/". 10 DA-HDR PIC 99. 10 FILLER PIC X VALUE "/". 10 YR-HDR PIC 99. 05 FILLER PIC X(24) VALUE SPACES. 05 FILLER PIC X(11) VALUE "SOUP REPORT". 05 FILLER PIC X(23) VALUE SPACES. 05 FILLER PIC X(5) VALUE "PAGE ". 05 PAGE-NO-HDR PIC Z9. 05 FILLER PIC X(5) VALUE SPACES. 01 COLUMN-HDR. 05 FILLER PIC X VALUE SPACES. 05 FILLER PIC X(5) VALUE "ORDER". 05 FILLER PIC X(7) VALUE SPACES. 05 FILLER PIC X(6) VALUE "ITEM #". 05 FILLER PIC X(8) VALUE SPACES. 05 FILLER PIC X(9) VALUE "ITEM NAME". 05 FILLER PIC X(44) VALUE SPACES. PROCEDURE DIVISION. MAINLINE. PERFORM A-100-INITIALIZE. PERFORM B-100-PROCESS. PERFORM C-100-WRAPUP. STOP RUN. A-100-INITIALIZE. OPEN INPUT INPUT-FILE OUTPUT PRINT-FILE. PERFORM U-000-DATE-ROUT. MOVE 1 TO SUB-TBL. PERFORM U-100-FILL-TABLE UNTIL SUB-TBL > 6. * *NOTE: The MOVE and PERFORM above can be coded here or they *could have been coded as the first two commands in the *B-100-PROCESS paragraph. It depends on whether you consider *filling the table part of the initializing or setting up of the *program or the first part of the processing. * B-100-PROCESS. READ INPUT-FILE AT END MOVE "NO " TO MORE-RECS. PERFORM B-200-LOOP UNTIL MORE-RECS = "NO ". B-200-LOOP. IF LINE-CT > 55 OR PAGE-NO = 1 PERFORM B-310-HDR-ROUT. MOVE SPACES TO PRINTZ. MOVE ORDER-NO TO ORDER-NO-PR. MOVE ITEM-NUMBER-IN TO ITEM-NUMBER-IN-PR. MOVE 1 TO ITEM-SUB. MOVE "NO " TO MATCH-IND. PERFORM B-300-SEARCH UNTIL ITEM-SUB > 6 OR MATCH-IND = "YES". IF MATCH-IND = "YES" MOVE ITEM-NAME-TBL (ITEM-SUB) TO ITEM-NAME-PR ELSE MOVE "*** INVALID ***" TO ITEM-NAME-PR. WRITE PRINTZ AFTER ADVANCING 1 LINES. ADD 1 TO LINE-CT. READ INPUT-FILE AT END MOVE "NO " TO MORE-RECS. B-300-SEARCH. IF ITEM-NUMBER-IN = ITEM-NUMBER-TBL (ITEM-SUB) MOVE "YES" TO MATCH-IND ELSE ADD 1 TO ITEM-SUB. B-310-HDR-ROUT. MOVE PAGE-NO TO PAGE-NO-HDR. WRITE PRINTZ FROM PAGE-HDR AFTER ADVANCING PAGE. WRITE PRINTZ FROM COLUMN-HDR AFTER ADVANCING 2 LINES. MOVE SPACES TO PRINTZ. WRITE PRINTZ AFTER ADVANCING 1 LINES. ADD 1 TO PAGE-NO. MOVE 4 TO LINE-CT. C-100-WRAPUP. CLOSE INPUT-FILE PRINT-FILE. U-000-DATE-ROUT. ACCEPT DATE-WS FROM DATE. MOVE MO-WS TO MO-HDR. MOVE DA-WS TO DA-HDR. MOVE YR-WS TO YR-HDR. U-100-FILL-TABLE. READ INPUT-FILE AT END MOVE "NO " TO MORE-RECS. MOVE 1 TO SUB-IN. PERFORM U-200-MOVES UNTIL SUB-IN > 4 OR SUB-TBL > 6. U-200-MOVES. MOVE ITEM-NUM-FOR-TABLE (SUB-IN) TO ITEM-NUMBER-TBL (SUB-TBL). MOVE ITEM-NAME-FOR-TABLE (SUB-IN) TO ITEM-NAME-TBL (SUB-TBL). ADD 1 TO SUB-IN, SUB-TBL. * *Note: could have just used one move *MOVE TABLE-ENTRY (SUB-IN) TO ENTRIES (SUB-TBL). *In that case you could also but a PIC X(17) on TABLE-ENTRY *and eliminated the 10 levels under it.