Simple Mainline COBOL

-----------------------------------------------------------------
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 SEQUENTIAL.
SELECT REPORT-FILE             ASSIGN TO "PRNTFILE"
ORGANIZATION IS SEQUENTIAL.

DATA DIVISION.
FILE SECTION.
FD  SALES-FILE
DATA RECORD IS NEXT-RECORD.
01  NEXT-RECORD.
    05                            PIC X(2).
    05                            PIC X(20).
    05                            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                            PIC X(2)  VALUE SPACES.
    05  LN01-STATE                PIC X(2).
    05                            PIC X(5)  VALUE SPACES.
    05  LN01-CITY                 PIC X(20).
    05                            PIC X(5)  VALUE SPACES.
    05  LN01-CUSTOMER             PIC X(30).
    05                            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.