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