-----------------------------------------------------------------------
Note that in some COBOL compilers the FD area becomes unavailable after
end-of-file is encountered.
This code does not access the next-record area after end-of-file.
-----------------------------------------------------------------------
IDENTIFICATION DIVISION.
PROGRAM-ID.  "SMAINLIN".
AUTHOR.      ALFRED SIMPSON.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT SALES-FILE                   ASSIGN TO INFILE
                                    ORGANIZATION IS LINE SEQUENTIAL.

SELECT REPORT-FILE                  ASSIGN TO PRNTFILE
                                    ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD  SALES-FILE
RECORD CONTAINS 60 CHARACTERS
DATA RECORD IS NEXT-RECORD.
01  NEXT-RECORD.
    05  FILLER                      PIC X(2).
    05  FILLER                      PIC X(20).
    05  FILLER                      PIC X(30).
    05                              PIC S9(6)V9(2).

FD  REPORT-FILE
DATA RECORD IS REPORT-RECORD.
01  REPORT-RECORD                   PIC X(80).

WORKING-STORAGE SECTION.
01  CURRENT-RECORD.
    05  CURRENT-STATE               PIC X(2).
    05  CURRENT-CITY                PIC X(20).
    05  CURRENT-CUSTOMER            PIC X(30).
    05  CURRENT-AMOUNT              PIC S9(6)V9(2).

01  LEVEL-CONTROL                   PIC 9999  VALUE 99.

01  CUSTOMER-DETAIL.
    05  FILLER                      PIC X(2)  VALUE SPACES.
    05  LN01-STATE                  PIC X(2).
    05  FILLER                      PIC X(5)  VALUE SPACES.
    05  LN01-CITY                   PIC X(20).
    05  FILLER                      PIC X(5)  VALUE SPACES.
    05  LN01-CUSTOMER               PIC X(30).
    05  FILLER                      PIC X(5)  VALUE SPACES.
    05  LN01-AMOUNT                 PIC ----,--9.99.

PROCEDURE DIVISION.

PROCEDURE-MAIN.
    PERFORM PROGRAM-INITIAL.
    PERFORM MAIN-LINE UNTIL LEVEL-CONTROL = 100.
    PERFORM PROGRAM-SUMMARY.
    STOP RUN.

PROGRAM-INITIAL.
    OPEN INPUT SALES-FILE.
    OPEN OUTPUT REPORT-FILE.
    PERFORM GET-NEXT-RECORD.

PROGRAM-SUMMARY.
    CLOSE SALES-FILE REPORT-FILE.

MAIN-LINE.
    MOVE NEXT-RECORD                TO CURRENT-RECORD.
    MOVE CURRENT-STATE              TO LN01-STATE.
    MOVE CURRENT-CITY               TO LN01-CITY.
    MOVE CURRENT-CUSTOMER           TO LN01-CUSTOMER.
    MOVE CURRENT-AMOUNT             TO LN01-AMOUNT.
    WRITE REPORT-RECORD           FROM CUSTOMER-DETAIL.
    PERFORM GET-NEXT-RECORD.

GET-NEXT-RECORD.
    READ SALES-FILE AT END MOVE 100 TO LEVEL-CONTROL END-READ.