Hello World, Version 7
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO7.
AUTHOR. BILL ROGERS.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE
ASSIGN TO 'A:\NAMES.TXT'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT OUT-FILE
ASSIGN TO 'A:\HELLO7.TXT'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD IN-FILE
DATA RECORD IS IN-RECORD.
01 IN-RECORD.
05 IN-NAME PIC X(25).
FD OUT-FILE
DATA RECORD IS OUT-RECORD.
01 OUT-RECORD PIC X(40).
WORKING-STORAGE SECTION.
01 WS-LINE.
02 FILLER PIC X(9) VALUE SPACES.
02 FILLER PIC X(6) VALUE 'Hello '.
02 WS-NAME PIC X(25).
01 END-OF-FILE-FLAG PIC X.
01 HEADER-LINE.
02 FILLER PIC X(9) VALUE SPACES.
02 FILLER PIC X(15) VALUE 'Program Hello-7'.
02 FILLER PIC X(8) VALUE SPACES.
02 FILLER PIC X(5) VALUE 'Page '.
02 HEADER-PAGE-NUMBER PIC ZZ9.
01 FOOTER-LINE.
02 FILLER PIC X(18) VALUE
'Number of hellos: '.
02 FOOTER-COUNT PIC Z9.
02 FILLER PIC X(20) VALUE SPACES.
01 TOTAL-COUNT PIC 9(2) VALUE ZERO.
01 LINE-COUNT PIC 9(2) VALUE ZERO.
01 PAGE-COUNT PIC 9(2) VALUE 1.
PROCEDURE DIVISION.
MAINLINE.
PERFORM INITIALIZATION-ROUTINE.
PERFORM THE-LOOP
UNTIL END-OF-FILE-FLAG = 'Y'.
PERFORM EOJ-ROUTINE.
STOP RUN.
INITIALIZATION-ROUTINE.
OPEN INPUT IN-FILE.
OPEN OUTPUT OUT-FILE.
PERFORM PRINT-HEADERS.
READ IN-FILE
AT END MOVE 'Y' TO END-OF-FILE-FLAG.
THE-LOOP.
IF LINE-COUNT IS GREATER THAN 49
PERFORM PRINT-HEADERS.
MOVE IN-NAME TO WS-NAME.
MOVE WS-LINE TO OUT-RECORD.
WRITE OUT-RECORD.
ADD 1 TO LINE-COUNT.
ADD 1 TO TOTAL-COUNT.
READ IN-FILE
AT END MOVE 'Y' TO END-OF-FILE-FLAG.
EOJ-ROUTINE.
PERFORM PRINT-FOOTERS.
CLOSE IN-FILE.
CLOSE OUT-FILE.
PRINT-HEADERS.
* Print the page header
MOVE PAGE-COUNT TO HEADER-PAGE-NUMBER.
MOVE HEADER-LINE TO OUT-RECORD.
WRITE OUT-RECORD AFTER ADVANCING PAGE.
* Leave a blank line
MOVE SPACES TO OUT-RECORD.
WRITE OUT-RECORD.
* Reset counters
MOVE ZERO TO LINE-COUNT.
ADD 1 TO PAGE-COUNT.
PRINT-FOOTERS.
MOVE SPACES TO OUT-RECORD.
WRITE OUT-RECORD.
MOVE TOTAL-COUNT TO FOOTER-COUNT.
MOVE FOOTER-LINE TO OUT-RECORD.
WRITE OUT-RECORD.
Cobol Home