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