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.