-----------------------------------------------------------------
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.