All pastes #773106 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-11-14 08:23 UTC
rendered paste body
=Input=

+99 9999 99999 99999+
-99 999y y9999 99999-
+00 0000 00000 00000+
-01 000q p0001 00001-
+22 0022 00022 00022+
+67 001y p2345 12345+
-49 0012 87654 87654-

========================================================================



      *-----------------------------------------------------------------
       IDENTIFICATION DIVISION.
      *-----------------------------------------------------------------

       PROGRAM-ID. PROGRAM7.
       AUTHOR.     MICHAELLUSTFIELD.

      *-----------------------------------------------------------------
      * GENERATES A REPORT USING SIGNED NUMBERS AND DATES
      *-----------------------------------------------------------------

      *-----------------------------------------------------------------
       ENVIRONMENT DIVISION.
      *-----------------------------------------------------------------

      *--------------------------------
       INPUT-OUTPUT SECTION.
      *--------------------------------

       FILE-CONTROL.
           SELECT INPUT-FILE ASSIGN TO
               'C:\COBOL\Pgm7byMichaelLustfield\Pgm7Input.txt'
               ORGANIZATION IS LINE SEQUENTIAL.

           SELECT OUTPUT-FILE ASSIGN TO
               'C:\COBOL\Pgm7byMichaelLustfield\Pgm7Output.doc'
               ORGANIZATION IS LINE SEQUENTIAL.

      *-----------------------------------------------------------------
       DATA DIVISION.
      *-----------------------------------------------------------------

      *                                |--------------------------------
      *                                |       INPUT FILE
      *                                |--------------------------------

       FD  INPUT-FILE.
       01  INPUT-RECORDS.
           05  A-IR                    PIC S9(2)
               SIGN LEADING SEPARATE.
           05                          PIC X.
           05  B-IR                    PIC S9(4)
               SIGN TRAILING.
           05                          PIC X.
           05  C-IR                    PIC S9(5)
               SIGN LEADING.
           05                          PIC X.
           05  D-IR                    PIC S9(6)
               SIGN TRAILING SEPARATE.

      *                                |--------------------------------
      *                                |       OUTPUT FILE
      *                                |--------------------------------

       FD  OUTPUT-FILE.
       01  REPORT-RECORD               PIC X(102).

      *-----------------------------------------------------------------
       WORKING-STORAGE SECTION.
      *-----------------------------------------------------------------

      *                                |--------------------------------
      *                                |       REPORT VARIABLES
      *                                |--------------------------------

       01  DATE-PF.
           05  COMMENT-PF          PIC X(07)   VALUE 'DATE: '.
           05  MONTH-PF            PIC X(02)/.
           05  DAY-PF              PIC X(02)/.
           05  YEAR-PF             PIC X(04).

      *                                |--------------------------------
      *                                |       REPORT CONSTANTS
      *                                |--------------------------------

       01  REPORT-HEADING              PIC X(39)
           VALUE   'Program 6 Output by Michael Lustfield'.

       01  DASH-LINE                   PIC X(98)
           VALUE   '----------------------------------------------------
      -            '----------------------------------------------'.

       01  COLUMN-HEADINGS             PIC X(64)
           VALUE   'A    B    C    D    A + B        A - B        A * B
      -            '       A / B'.

      *                                |--------------------------------
      *                                |       TEMPORARY STORAGE
      *                                |--------------------------------

       01  CALC-VALUES.
           05 A-CV                     PIC +BZ9.
           05                          PIC X(02).
           05 B-CV                     PIC --,--9.
           05                          PIC X(02).
           05 C-CV                     PIC ZZ,ZZ9BCR.
           05                          PIC X(02).
           05 D-CV                     PIC $ZZ,ZZ9.
           05                          PIC X(02).
           05 A-ADD-B-CV               PIC $$,$$9.
           05                          PIC X(02).
           05 A-SUB-B-CV               PIC $$,$$9.
           05                          PIC X(02).
           05 A-TIM-B-CV               PIC $$$,$$9.
           05                          PIC X(02).
           05 A-DIV-B-CV               PIC $9.

       01  BORN-DATE.
           05  COMMENT1-BD             PIC X(14) VALUE 'I was born on '.
           05  MONTH-BD                PIC X(02)/.
           05  DAY-BD                  PIC X(02)/.
           05  YEAR-BD                 PIC X(04).

       01  BORN-DAY.
           05  COMMENT1-BY             PIC X(18)
               VALUE 'I was born on day '.
           05  DAY-BY                  PIC X(03).
           05  COMMENT2-BY             PIC X(13) VALUE ' of the year '.
           05  YEAR-BY                 PIC X(04).

       01  DAYS-OLD.
           05  COMMENT1-DO             PIC X(05) VALUE 'I am '.
           05  DAYS-DO                 PIC ZZ,ZZ9.
           05  COMMENT2-DO             PIC X(15)
               VALUE ' days old today'.

       01  DAYS-AFTER-TODAY.
           05  COMMENT1-DAT            PIC X(23)
               VALUE '100 days from today is '.
           05  MONTH-DAT               PIC X(02)/.
           05  DAY-DAT                 PIC X(02)/.
           05  YEAR-DAT                PIC X(04).

       01  DAYS-BEFORE-TODAY.
           05  COMMENT1-DBT            PIC X(23)
               VALUE '100 days from today is '.
           05  MONTH-DBT               PIC X(02)/.
           05  DAY-DBT                 PIC X(02)/.
           05  YEAR-DBT                PIC X(04).

      *                                |--------------------------------
      *                                |       FLAGS
      *                                |--------------------------------

       01  EOF-FLAG                    PIC X(05)   VALUE 'FALSE'.

      *                                |--------------------------------
      *                                |       DATE AND TIME DATA
      *                                |--------------------------------

       01  REPORT-DATE-TIME.
           05  YEAR-RDT                PIC X(04).
           05  MONTH-RDT               PIC X(02).
           05  DAY-RDT                 PIC X(02).
           05  HOUR-RDT                PIC X(02).
           05  MINUTE-RDT              PIC X(02).
           05  SECOND-RDT              PIC X(02).
           05  HUND-SEC-RDT            PIC X(02).
           05  GMTO-RDT                PIC X(05).

      *                                |--------------------------------
      *                                |       OTHER DATES
      *                                |--------------------------------

       01  BIRTH-DATE                  PIC 9(08)   VALUE 19880107.

      *                                |--------------------------------
      *                                |       TEMPORARY STRINGS
      *                                |--------------------------------

       01  TEMP-STRING                 PIC 9(08).

       01  TEMP-BIRTH-DATE             PIC 9(08).

      *-----------------------------------------------------------------
       PROCEDURE DIVISION.
      *-----------------------------------------------------------------

      *--------------------------------
       100-MAIN-MODULE.
      *--------------------------------

           PERFORM 800-INITIALIZATION

           PERFORM UNTIL EOF-FLAG = 'TRUE'
               READ INPUT-FILE
                   AT END
                       MOVE 'TRUE' TO EOF-FLAG
                   NOT AT END
                       PERFORM 200-PROCESS-RECORD
               END-READ
           END-PERFORM

           PERFORM 900-TERMINATION

           STOP RUN.

      *--------------------------------
       200-PROCESS-RECORD.
      *--------------------------------

           PERFORM 300-CALCULATE-VALUES

           WRITE REPORT-RECORD FROM CALC-VALUES AFTER 1.

      *--------------------------------
       210-WRITE-HEADING.
      *--------------------------------

      *                                |--------------------------------
      *                                |       STANDARD HEADER
      *                                |--------------------------------

           WRITE REPORT-RECORD FROM REPORT-HEADING AFTER 0
           WRITE REPORT-RECORD FROM DATE-PF AFTER 1

      *                                |--------------------------------
      *                                |       DATES HEADER
      *                                |--------------------------------

           PERFORM 211-BORN-DATE
           PERFORM 212-BORN-DAY
           PERFORM 213-DAYS-OLD
           PERFORM 214-DAYS-AFTER-TODAY
           PERFORM 215-DAYS-BEFORE-TODAY

      *                                |--------------------------------
      *                                |       STANDARD HEADER
      *                                |--------------------------------

           WRITE REPORT-RECORD FROM COLUMN-HEADINGS AFTER 4.
           WRITE REPORT-RECORD FROM DASH-LINE AFTER 1.

      *--------------------------------
       211-BORN-DATE.
      *--------------------------------

           MOVE BIRTH-DATE TO TEMP-STRING.

           MOVE TEMP-STRING (1:4) TO YEAR-BD
           MOVE TEMP-STRING (5:2) TO MONTH-BD
           MOVE TEMP-STRING (6:2) TO DAY-BD

           WRITE REPORT-RECORD FROM BORN-DATE AFTER 4.

      *--------------------------------
       212-BORN-DAY.
      *--------------------------------

           MOVE FUNCTION INTEGER-OF-DATE (BIRTH-DATE) TO TEMP-STRING
           MOVE FUNCTION DAY-OF-INTEGER (TEMP-STRING) TO TEMP-STRING

           MOVE TEMP-STRING (6:3) TO DAY-BY
           MOVE TEMP-STRING (2:4) TO YEAR-BY

           WRITE REPORT-RECORD FROM BORN-DAY AFTER 1.

      *--------------------------------
       213-DAYS-OLD.
      *--------------------------------

      *                                |--------------------------------
      *                                |       GET CURRENT DATE INTEGER
      *                                |--------------------------------

           MOVE YEAR-RDT TO TEMP-STRING (1:4)
           MOVE MONTH-RDT TO TEMP-STRING (5:2)
           MOVE DAY-RDT TO TEMP-STRING (7:2)

           MOVE FUNCTION INTEGER-OF-DATE (TEMP-STRING) TO TEMP-STRING

      *                                |--------------------------------
      *                                |       GET BIRTH DATE INTEGER
      *                                |--------------------------------

           MOVE FUNCTION INTEGER-OF-DATE (BIRTH-DATE) TO TEMP-BIRTH-DATE

      *                                |--------------------------------
      *                                |       SUBTRACT DATES
      *                                |--------------------------------

           SUBTRACT TEMP-STRING FROM TEMP-BIRTH-DATE GIVING DAYS-DO

      *                                |--------------------------------
      *                                |       WRITE INFORMATION
      *                                |--------------------------------

           WRITE REPORT-RECORD FROM DAYS-OLD AFTER 1.

      *--------------------------------
       214-DAYS-AFTER-TODAY.
      *--------------------------------

           MOVE YEAR-RDT TO TEMP-STRING (1:4)
           MOVE MONTH-RDT TO TEMP-STRING (5:2)
           MOVE DAY-RDT TO TEMP-STRING (7:2)

           MOVE FUNCTION INTEGER-OF-DATE (TEMP-STRING) TO TEMP-STRING

           ADD 100 TO TEMP-STRING

           MOVE FUNCTION DATE-OF-INTEGER (TEMP-STRING) TO TEMP-STRING

           MOVE TEMP-STRING (1:4) TO YEAR-DAT
           MOVE TEMP-STRING (5:2) TO MONTH-DAT
           MOVE TEMP-STRING (7:2) TO DAY-DAT

           WRITE REPORT-RECORD FROM DAYS-AFTER-TODAY AFTER 1.

      *--------------------------------
       215-DAYS-BEFORE-TODAY.
      *--------------------------------

           MOVE YEAR-RDT TO TEMP-STRING (1:4)
           MOVE MONTH-RDT TO TEMP-STRING (5:2)
           MOVE DAY-RDT TO TEMP-STRING (7:2)

           MOVE FUNCTION INTEGER-OF-DATE (TEMP-STRING) TO TEMP-STRING

           SUBTRACT 100 FROM TEMP-STRING

           MOVE FUNCTION DATE-OF-INTEGER (TEMP-STRING) TO TEMP-STRING

           MOVE TEMP-STRING (1:4) TO YEAR-DBT
           MOVE TEMP-STRING (5:2) TO MONTH-DBT
           MOVE TEMP-STRING (7:2) TO DAY-DBT

           WRITE REPORT-RECORD FROM DAYS-BEFORE-TODAY AFTER 1.

      *--------------------------------
       300-CALCULATE-VALUES.
      *--------------------------------

           MOVE A-IR TO A-CV
           MOVE B-IR TO B-CV
           MOVE C-IR TO C-CV
           MOVE D-IR TO C-CV
           ADD A-IR TO B-IR GIVING A-ADD-B-CV
           SUBTRACT B-IR FROM A-IR GIVING A-SUB-B-CV
           MULTIPLY A-IR BY B-IR GIVING A-TIM-B-CV
           DIVIDE A-IR BY B-IR GIVING A-DIV-B-CV ROUNDED.

      *--------------------------------
       800-INITIALIZATION.
      *--------------------------------

           OPEN INPUT  INPUT-FILE
                OUTPUT OUTPUT-FILE

           MOVE FUNCTION CURRENT-DATE TO REPORT-DATE-TIME

           MOVE MONTH-RDT  TO MONTH-PF
           MOVE DAY-RDT    TO DAY-PF
           MOVE YEAR-RDT   TO YEAR-PF

           PERFORM 210-WRITE-HEADING.

      *--------------------------------
       900-TERMINATION.
      *--------------------------------

           WRITE REPORT-RECORD FROM DASH-LINE

           CLOSE INPUT-FILE
                 OUTPUT-FILE.