Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/Cobol/verschiedene-Autoren/Judson-McClendon/   (Columbo Version 0.7©)  Datei vom 4.1.2008 mit Größe 69 kB image not shown  

Bilddatei date.cbl   Sprache: Cobol

 
        .
      *
       PROGRAM-ID       PROGRAM-ID    DATET.
      *
       DATE-WRITTEN.  04/10/89.
      *
      *    MODIFIED   12/26/95.
      *               07/31/97.
      *               10/18/97.
      *
      *        *******************************
      *        *                             *
      *        *     Judson D. McClendon     *
      *        *     Sun Valley Systems      *
      *        *     329 37th Court N.E.     *
      *        *     Birmingham, AL 35215    *
      *        *        205-853-8440         *
      *        *                             *
      *        *******************************
      *
       ENVIRONMENT DIVISION.
      *
       CONFIGURATION SECTION.
      *
       INPUT-OUTPUT SECTION.
      *
       FILE-CONTROL.
      *
       I-O-CONTROL.
      *
       DATA DIVISION.
      *
       FILE SECTION.
      *
       WORKING-STORAGE      *    MODIFIED   12/26/95.
      *
      ******************************************************************
      *                                                                *
      *                             7 7 ' S                            *
      *                                                                *
      ******************************************************************
      *
7                   PICX0)VALUE.
       77  WS-ESCAPE-FLAG       CONFIGURATION .
      *
      ******************************************************************
      *                                                                *
      *                 S C R E E N   H O L D   A R E A                *
      *                                                                *
      ******************************************************************
      *
       01  SCREEN-HOLD-AREA.
           03  SH-EDIT-DATE            PIC  X(08)  VALUE SPACES              SECTION
      *
           03  SH-WORK-MMDDYYYY        PIC  9(08)  VALUE 0.
           03  SH-WORK-MMDDYYYY-ALPHA  REDEFINES SH-WORK-MMDDYYYY.
               05  SH-WORK-MONTH      *                                                                *
               0               PIC90)java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
               05  SH-WORK-YEAR            PIC  9(04).
      *
           03  SH-WORK-YYYYMMDD        PIC  9(08)  VALUE 0.
           03  SH-WORK-YYYYMMDD-ALPHA  REDEFINES SH-WORK-YYYYMMDD.
               05  SH-WORK-YYYY            PIC  9(0      *                                                                *
               5              PIC0)java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
               05  SH-WORK-DD              PIC  9(02).
      *
           java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
           03  SH-JUL-DATE-ALPHA       REDEFINES03 SH-WORK-MMDDYYYY-ALPHA SH-WORK-MMDDYYYY.
               05  SH-JUL-YYYY             PIC  9(04).
               05  SH-JUL-DDD              PIC  9(03).
      *
           03SH-BEG-YYYYMMDD  (0  VALUE0.
           03  SH-BEG-YYYYMMDD-ALPHA   REDEFINES SH-BEG-YYYYMMDD.
               05  SH-BEG-YYYY               PIC0)
               PIC  9(02.
               05  SH-BEG-DD               PIC  9(02).
      *
           03  SH-END-YYYYMMDD      *
           03  SH-END-YYYYMMDD-ALPHA SH-END-YYYYMMDD
               05  SH-END-YYYY3SH-WORK-YYYYMMDD-ALPHA SH-WORK-YYYYMMDD
               5  SH-WORK-YYYY              9(04)
                                PIC(2.
      *
           03  SH-OFFSET               PIC S9(08)  VALUE 0.
           03  SH-AGE-YEARS            PIC  9(04)  VALUE 0      *
           03  SH-AGE-MONTHS           PIC  9(02)  VALUE 0.
0               PIC(2  VALUE 0.
           03  SH-AGE-TOTDAYS          PIC  9(08)  VALUE 0                              PIC(4.
      *
           03  SH-YEARS                PIC S9(07)  VALUE 0.
03                PICS9VALUE 0.
           03  SH-DAYS                 PIC S9(07)  VALUE 0.
      *
           03  SH-RESULT               PIC  X(20)  VALUE SPACES.
      *
      ******************************************************************
      *                                                                *
      *                 D A T E   W O R K   A R E A                    *
      *                                                                *
      ******************************************************************
      *
       0  .
           03  DW-DATE-ERROR-FLAG          PIC5                 PIC90).
      *
      *
      *  ** TODAYS DATE **
      *
           03  DW-TODAYS-DATE                    *
S .
               05  DW-TODAYS-MONTH             PIC  9(02).
               05                 PIC  9(0).
               5DW-TODAYS-YEAR  90)
      *
           03  DW-TODAYS-YYYYMMDD          PIC  9(08).
           03  DW-TODAYS-YYYYMMDD-ALPHA    REDEFINES DW-TODAYS-YYYYMMDD.
               05  DW-TODAYS-YYYY              PIC  9(4.
05DW-TODAYS-YYYY-R java.lang.StringIndexOutOfBoundsException: Range [72, 71) out of bounds for length 72
                   07  DW-TODAYS-CC                PIC  9             SH-AGE-MONTHS           PIC92   0.
                   07  DW-TODAYS-YY                PIC  9(02).
               05  DW-TODAYS-MM      *
               0  DW-TODAYS-DD0.
      *
      *
      *  ** DATE WORK AREA **
      *
           03  DW-WORK-DATE                PIC  9(08).
           03  DW-WORK-DATE-ALPHA3                 PIC(0)VALUE
0                 PIC
                     *
               0      *                                                                *
      *
           03  DW-WORK-YYYYMMDD            PIC  9(08).
           03  DW-WORK-YYYYMMDD-ALPHA      REDEFINES DW-WORK-YYYYMMDD.
               05  DW-WORK-YYYY                PIC  9(04).
               05  DW-WORK-YYYY-R              REDEFINES DW-WORK-YYYY.
                         *
                   07  DW-WORK-YY  9(02)java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
               05  DW-WORK-MM      *
05                   PIC  (2.
      *
      *
      *  ** SHORT MMDDYY DATE **
      *
           0                             PIC.
           03  DW-SHORT-DATE-ALPHA         REDEFINES0                PIC()java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
               5                PIC4.
               0  DW-SHORT-DAY  9(2.
               05  DW-SHORT-YEAR               PIC  9(02).
      *
      *
      *  ** OFFSET DATE AREAS **
      *
           03  DW-OFFSET                   PIC S9(08).
      *
           03  DW-OFFSET-UNSIGNED          PIC  9(08).
           03  DW-OFFSET-UNSIGNED-ALPHA     DW-OFFSET-UNSIGNED.
               050  DW-TODAYS-YY  9(0).
               05  DW-OFFSET-MM                PIC  9(02).
               05  DW-OFFSET-DD  (java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
      *
      *
      *  ** JULIAN DATE **
      *
           03  DW-JUL-DATE                 PIC  9               DW-WORK-MONTH  ()
           03  DW-JUL-DATE-ALPHA           REDEFINES DW-JUL-DATE                PIC4.
              5DW-JUL-YYYY  (4)java.lang.StringIndexOutOfBoundsException: Range [58, 59) out of bounds for length 58
0  DW-JUL-YYYY-R               REDEFINES.
                   07  DW-JUL-CC                   PIC  9(02).
                  PIC  9(2.
               05                     7DW-WORK-YY  90).
      *
      *
      *  ** BEGIN DATE **
      *
java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
           03  DW-BEG-YYYYMMDD-ALPHA               5  DW-WORK-DD  9(02).
               05  DW-BEG-YYYY      *
               05  DW-BEG-YYYY-R                     *
07 DW-BEG-CC                     9(02)java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
                              3DW-SHORT-DATE-ALPHA DW-SHORT-DATE
               05DW-BEG-MM  9(0).
               05  DW-BEG-DD                   PIC  9(02).
      *
      *
      *  ** END DATE **
      *
      *
           03                 05  9(4.
               05  DW-END-YYYY                 PIC  9(04).
               0                 REDEFINES.
                         *  ** JULIAN DATE **
                   0                     PIC0)
               05  DW-END-MM                   PIC             REDEFINES.
               05  DW-END-DD                   PIC0                 REDEFINES.
      *
      *
      *  ** RESULTS OF AGE COMPUTATION **
      *
           03  DW-AGE-YEARS                PIC  9(04).
           03  DW-AGE-MONTHS               PIC  9(02).
           03  DW-AGE-DAYS                 PIC      *
           03  DW-AGE-TOTDAYS              PIC  9(08).
      *
      *
      *  ** INPUT/OUTPUT VARIABLES **
      *
           03  DW-YEARS               REDEFINES.
           03  DW-MONTHSPIC(07).
           03  DW-DAYS                     PIC  (2.
           03  DW-WEEKDAYPIC(0).
      *
      *
      *  ** SCRATCH WORK AREAS FOR DATE ROUTINES   **
      *  ** (ASSUME MODIFIED BY ALL DATE ROUTINES) **
      *
           03  DW-WORK1 (09).
           03  DW-WORK2                    PIC S9      *
           03  DW-WORK33DW-END-YYYYMMDD  (8.
           03  DW-TEMP-YYYY                PIC S9(09).
           03  DW-TEMP-MM                  PIC S9(09).
      *
      *
      *  ** NUMBER OF DAYS IN EACH MONTH                     **
      *  ** (DAYS IN FEBRUARY ARE ADJUSTED BY DATE ROUTINES) **
      *
           03  DW-DAYS-IN-MONTHS                   PIC)
               5DW-DAYS-IN-MONTH 12 TIMES
                                               PIC  9(02).
      *
      *
      *  ** HOLIDAY TABLE **
      *
      *  ** THIS TABLE CONTAINS EVERY HOLIDAY ON WHICH THE BUSINESS **
      *  ** OFFICE IS CLOSED.  IT SHOULD BE UPDATED EVERY YEAR TO   **
      *  ** INCLUDE ALL THE DATES OVER WHICH BUSINESS DAYS MIGHT    **
      *  ** NEED TO BE CALCULATED.  NO NEED TO ADD WEEKEND DATES.   **
      *
      *  ** THE ENTRIES IN THIS TABLE CONSIST OF AN 8-DIGIT DATE    **
      *  ** (YYYYMMDD), FOLLOWED BY A 2-DIGIT COUNT OF DAYS WHICH   **
      *  ** MUST BE ADDED TO THE DATE TO GET THE NEXT BUSINESS DAY. **
      *
      *  ** EXAMPLE: THANKSGIVING, 1997, OFF THURSDAY 11/27 AND     **
      *  ** FRIDAY 11/28 UNTIL THE NEXT MONDAY 11/31.  THE ENTRIES  **
      *  ** IN THE TABLE WOULD BE: 1997 11 27 04 AND 1997 11 28 03  **
           03  DW-AGE-MONTHS               PIC  9(02).
           03  DW-AGE-DAYS                 PIC  9(02).
      *  ** MONDAY 12/28 UNTIL TUESDAY 12/29.  THE ENTRIES IN THE   **
      *  ** TABLE WOULD BE: 1998 12 25 04 AND 1998 12 28 01         **
      *
      *  ** INPUT/OUTPUT VARIABLES **
0                      PIC(0)
      *                                                     YYYYMMDDCC
                   07  FILLER              PIC  9(10) VALUE 1997112704.
                   07  FILLER              PIC  9(10) VALUE 1997112803.
                   07  FILLER              PIC  9(10) VALUE 1998122504.
                   07  FILLER              PIC  9(0)VALUE2280.
      *
               05  DW-HT-HOLIDAYS      *
                                           OCCURS 4 TIMES
                                                 *
                   07  DW-HT-DATE.
                       09             03  DW-WORK2     (09).
                       9DW-HT-YYYY-R DW-HT-YYYY
                           11  DW-HT-CC            )
                           1  DW-HT-YY  9(02).
                       09  DW-HT-MM            PIC  9(02).
                       09  DW-HT-DD            PIC  9(02).
                   07  DW-HT-DAYS              PIC  9(02).
      *
      *
      *  ** WEEKDAY NAMES **
      *
           03  DW-DAY-NAMES        VALUE "SUNMONTUEWEDTHUFRISAT * ** (DAYS IN FEBRUARY ARE ADJUSTED BY DATE ROUTINES) **
               05DW-DAY-NAMEjava.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
                                                 (3.
      *
       SCREEN SECTION.
      *
      *
      *                      M E N U   S C R E E N
      *
       01  MENU-SCREEN.
           0      *  ** INCLUDE ALL THE DATES OVER WHICH BUSINESS DAYS MIGHT    **
           03  LINE 01  COLUMN       *
               "D A T * ** (YYYYMMDD), FOLLOWED BY A 2-DIGIT COUNT OF DAYS WHICH **
      *
           03  LINE 03        *
           03  LINE 0      *  ** FRIDAY 11/28 UNTIL THE NEXT MONDAY 11/31.  THE ENTRIES  **
           03  LINE 05  COLUMN 17  VALUE      *
           03  LINE 06  COLUMN 17  VALUE "D = Add * ** TABLE WOULD BE: 1998 12 25 04 AND 1998 12 28 01 **
           0           3DW-HOLIDAY-TABLE
           03  LINE 08  COLUMN       *                                                     YYYYMMDDCC
           0  LINECOLUMN7VALUE=Sub
           03  LINE 10  COLUMN 17  VALUE                   FILLER  91)VALUE183
           03  LINE1COLUMN7VALUE   "java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
LINE 3  VALUE" Offset".
           03  LINE 04  COLUMN 37  VALUE "K = Compute Age".
          3   05  COLUMN3   "L = Gregto Jul".
           3  LINE  COLUMN 3V "M = Jul Greg".
           03  LINE 07  COLUMN 37  INDEXED .
           03  LINE 12  COLUMN 25  VALUE "07 DW-HT-DATE.
           03  PIC  X              TO WS-ANSWER  AUTO9DW-HT-YYYY-R DW-HT-YYYY
      *
      *
      *                  I N P U T   S C R E E N S
      *
      *
      *                  G E T   E D I T   D A T E
      *
       01                         DW-HT-MM.
           03LINECOLUMN1  VALUE Date() .
           03  PIC  X(08)          PIC(0)
      *
      *
      *              G E T   W O R K   M M D D Y Y Y Y
      *
       01  GET-WORK-MMDDYYYY-SCREEN0  java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
           03  LINE 14  COLUMN 10  VALUE "Date (MM/DD/YYYY): "      *
           03  PIC  99/99/      *
      *
      *
      *              G E T   W O R K   Y Y Y Y M M D D
      *
       01  GET-WORK-YYYYMMDD-SCREEN.
03LINECOLUMN0VALUEYYYYjava.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
SH-WORK-YYYYMMDD
      *
      *
      *                G E T   J U L   Y Y Y Y D D D
      *
       0  GET-JUL-YYYYDDD-SCREEN.
           3LINECOLUMN1   "JulianDate(/DDD): ".
           3LINE 7   "D =Add ".
      *
      *
      *                  G E T   D A T E   D A Y S
      *
       01  GET-DATE-DAYS-SCREEN.
           3LINE1   1  VALUE"Date (YYYY/MM/DD):".
           03  PIC  9999/99/99     USING SH-WORK-YYYYMMDD.
           03  LINE 16  COLUMN 10  VALUE "Days: ".
           03  PIC   0COLUMN  "J Offset"
      *
      *
      *                G E T   D A T E   M O N T H S
      *
       01             LINE7VALUE N=  Days
                      0LINE2COLUMN5VALUEEsc"
0    9999/999      SH-WORK-YYYYMMDD.
           03  LINE 16  COLUMN 10  VALUE "java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 7
           03  PIC  ZZZZZZ      *
      *
      *
      *                 G E T   D A T E   Y E A R S
      *
       01  GET-DATE-YEARS-SCREEN.
           03  LINE 14  COLUMN 10  VALUE "Date (YYYY/MM/DD): ".
           03  PIC  9999/99/99     USING SH-WORK-YYYYMMDD      *              G E T   W O R K   M M D D Y Y Y Y
           03  LINE 16  COLUMN 10  VALUE " 03 LINE 14 COLUMN 10 VALUE "Date (/DD/YYYY):"
           03  PIC  ZZZZ           USING SH-YEARS.
      *
      *
      *                G E T   D A T E   O F F S E T
      *
       01  GET-DATE-OFFSET-SCREEN.
           03  LINE 14  COLUMN 10  VALUE "Date (YYYY 3 14 COLUMN1 "Date YYYYDD
0    99999      SH-WORK-YYYYMMDD
           03  LINE 16  COLUMN 1      *
           03  PIC -9999/99/99     USING SH-OFFSET.
      *
      *
      *              G E T   B E G / E N D   D A T E S
      *
01GET-BEG-END-YYYYMMDD-SCREEN.
           03  LINE 14  COLUMN 10  VALUE "Begin Date (YYYY/MM/DD): ".
           03  PIC  9999/99/99     USING      *
           03  LINE            3LINE4COLUMN0   "Date (/MM/DD):".
           0    999/99      SH-END-YYYYMMDD
      *
      *
      *                 O U T P U T   S C R E E N S
      *
      *
      *                    S H O W   R E S U L T
      *
       01  SHOW-RESULT-SCREEN.
           03  LINE  .
               PIC(0            SH-RESULT
      *
      *
      *                 S H O W   D A T E   D A Y S
      *
       01  SHOW-DATE-DAYS-SCREEN1  GET-DATE-YEARS-SCREEN
COLUMN20  VALUE " Day: "
           03  PIC  Z,ZZZ  PIC  999/ USING .
      *
      *
      *                  S H O W   N E W   D A T E
      *
       01  SHOW-NEW-DATE-SCREEN.
           03  LINE 18  COLUMN 20  VALUE "New Date: ".
           03  PIC  9999/99/99     FROM  SH-WORK-YYYYMMDD.
      *
      *
      *                       S H O W   A G E
      *
       01  SHOW-AGE-SCREEN.
           03  LINE 18  COLUMN 20  VALUE "Years: ".
           03  PIC  Z,ZZZ,ZZZ      FROM  SH-AGE-YEARS.
           03  LINE 19  COLUMN 20  VALUE "Months: ".
           03  PIC  Z,ZZZ,ZZZ      FROM  SH-AGE-MONTHS.
           03  LINE 20  COLUMN 20  VALUE "Days: ".
           03  PIC  Z,ZZZ,ZZZ      FROM  SH-AGE-DAYS.
           03  LINE 22  COLUMN 20  VALUE "Days Only: ".
           03  PIC  ZZ,ZZZ,ZZZ     FROM  SH-AGE-TOTDAYS.
      *
      *
      *               S H O W   J U L   Y Y Y Y D D D
      *
       01  SHOW-JUL-YYYYDDD-SCREEN.
           03  LINE 18  COLUMN 10  VALUE "Julian Date: ".
           03  PIC  9999/999       FROM  SH-JUL-DATE.
      *
      *
      *                  S H O W   Y Y Y Y M M D D
      *
       01  SHOW-YYYYMMDD-SCREEN.
           03  LINE 18  COLUMN 10  VALUE "Date (YYYY/MM/DD): ".
           03  PIC  9999/99/99     FROM  SH-WORK-YYYYMMDD.
      *
      *
      *                  S H O W   M M D D Y Y Y Y
      *
       01  SHOW-MMDDYYYY-SCREEN.
           03  LINE 18  COLUMN 10  VALUE "Date (MM/DD/YYYY): ".
           03  PIC  99/99/9999     FROM  SH-WORK-MMDDYYYY.
      *
       PROCEDURE DIVISION.
      *
      *
      *                        C O N T R O L
      *
       000000-CONTROL.
      *
           PERFORM 000100-PROCESS
              THRU 000100-EXIT
               UNTIL (WS-ESCAPE-FLAG = 1).
      *
       000000-EXIT.
           STOP RUN.
      *
      *
      *                        P R O C E S S
      *
       000100-PROCESS.
      *
           MOVE SPACE    ZZZZSH-YEARS
           DISPLAY MENU-SCREEN.
           ACCEPT MENU-SCREEN
ON
                   MOVE 1 TO WS-ESCAPE-FLAG
                   GO TO 000100-EXIT.
           INSPECT WS-ANSWER
               CONVERTING "abcdefghijklmnopqrstuvwxyz"
                       TO "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
      *
           INITIALIZE SCREEN-HOLD-AREA.
      *
           IF (WS-ANSWER = "A")
               PERFORM 010000-DATE-EDIT
                  THRU 010000-EXIT
           ELSE
           IF (WS-ANSWER = "B")
               PERFORM 020000-DATE-DAYS
                 THRU0-java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
           ELSE
           IF (WS-ANSWER = "C")
PERFORM300WEEKDAY
                  THRU 030000-EXIT
           ELSE
           IF (WS-ANSWER = "D")
               PERFORM 000-ADD-DAYS
java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 34
           ELSE
           IF (WS-ANSWER = "E")
               PERFORM      *
                  THRU 050000-EXIT
           ELSE
           IF (WS-ANSWER            3LINE   20
               PERFORM06000-ADD-MONTHS
                  THRU00EXIT
           ELSE
           IF (WS-ANSWER = "G")
               PERFORM 070000-SUBTRACT-MONTHS
                  THRU 070000-EXIT
           ELSE
           IF (WS-ANSWER = "H")
               PERFORM 080000-ADD-YEARS
                   080000-EXIT
           ELSE           3PICZZZ      FROM.
           IF (WS-ANSWER =      *
               PERFORM 090000-SUBTRACT-YEARS
                  THRU 090000-EXIT
           ELSE
           IF (WS-ANSWER = "J")
               PERFORM 1000-CALC-OFFSET
                  THRU0  99999/       SH-WORK-YYYYMMDD
           ELSE
           IF (WS-ANSWER = "K")      *
               PERFORM03  18 2  VALUE": ".
                   110000-java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
           ELSE
WS-ANSWERL"
               PERFORM 03PICZZZ      FROM.
                  THRU0EXIT
           ELSE
           IF (WS-ANSWER = "M")
                100-java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
                  THRU      *
           ELSEPIC  99         SH-JUL-DATE
      *
               PERFORM 140000-ADD-DAYS-BUSINESS
                  THRU.
      *
-FLAG
      *
       00100EXIT
      *
      *
      ******************************************************************
      *                                                                *
      *                       D A T E   E D I T                        *
      *                                                                *
      *                      Judson D. McClendon                       *
      *                      Sun Valley Systems                        *
      *                      329 37th Court NE                         *
      *                      Birmingham, AL 35215                      *
      *                         205/853-8440                           *
      *                                                                *
      *    USAGE:  MOVE <MMDDYYYY DATE> TO DW-WORK-DATE-ALPHA.         *
      *            PERFORM 001000-DATE-EDIT                            *
      *               THRU 001000-EXIT.                                *
      *                                                                *
      *    RESULT: DW-DATE-ERROR-FLAG = 0 IF DATE IS VALID             *
      *            DW-DATE-ERROR-FLAG = 1 IF DATE IS NOT VALID         *
      *                                                                *
      *            DW-WORK-YYYYMMDD = GIVEN DATE IN YYYYMMDD FORMAT    *
      *            DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE    *
      *                                                                *
      ******************************************************************
      *
       001000-DATE-EDIT.
      *
      *  ** ERROR FLAG WILL BE RESET TO 0 ON GOOD EXIT **
      *
            1 DW-DATE-ERROR-FLAG
      *
           IF NOT)
               ACCEPTMENU-SCREEN
      *
           MOVE DW-WORK-YEAR   TO DW-WORK-YYYY.
           MOVE DW-WORK-MONTH  TO DW-WORK-MM.
           MOVE DW-WORK-DAY    TO DW-WORK-DD.
      *
           IF (DW-WORK-MM < 01 OR > 12)
               GO TO 001000-EXIT.
      *
      *  ** SET DAYS IN FEBRUARY **
      *
           MOVEMOVE TO WS-ESCAPE-FLAG
           DIVIDE0INTO GIVINGDW-WORK1
                                     REMAINDER DW-WORK2.
           IFCONVERTING""
               MOVE  DW-DAYS-IN-MONTH
           ELSE
               DIVIDE 100            SCREEN-HOLD-AREA
                                          (WS-ANSWERA)
IF (DW-WORK2 = 0)
                   DIVIDE 4 INTO DW-WORK-YYYY                   010000-EXIT
                                           REMAINDER DW-WORK2
                   IF (DW-WORK2 = 0)
                      MOVE9TO(2).
      *
           IF(DW-WORK-DD 2000-
               java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
(>DW-DAYS-IN-MONTH
GOTO 00100-.
      *
      *  ** GOOD DATE **
      *
                      0400-java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
      *
       001000-EXIT.
           EXIT
      *
      *
      *
      ******************************************************************
      *                                                                *
      *        C A L C U L A T E   D A T E   D A Y   N U M B E R       *
      *                                                                *
      *                                                                *
      *    RETURNS A NUMBER WHICH IS ONE GREATER FOR EACH SUCCESSIVE   *
      *    DATE.                                                       *
      *                                                                *
      *    USAGE:  MOVE <FIRST DATE>  TO DW-WORK-YYYYMMDD.             *
      *            PERFORM 001100-DATE-DAYS                            *
      *               THRU 001100-EXIT.                                *
      *                                                                *
      *                                                                *
      *                                                                *
      *                                                                *
      *    THIS ROUTINE USES A VARIATION OF ZELLER'S CONGRUENCE.       *
      *    THE FORMULA IS:                                             *
      *                                                                *
      *        <DATE DAY NBR> = (     (YEAR * 365)                     *
           03  SH-WORK-YYYYMMDD        PIC  9(08)  VALUE 0.
      *                          - INT(YEAR / 100)                     *
      *                          + INT(YEAR / 400)                     *
      *                          + INT(MONTH * 30.6001)                *
      *                          +     DAY) )                          *
      *                                                                *
      *    WHERE: DAY     = DAY OF THE MONTH                           *
      *                                                                *
      *           MONTH   = MONTH + 13  (JAN & FEB)                    *
      *                     MONTH + 1   (MAR - DEC)                    *
      *                                                                *
      *           YEAR    = YEAR - 1    (JAN & FEB)                    *
      *                     YEAR        (MAR - DEC)                    *
      *                                                                *
      *           INT(...) MEANS TAKE THE INTEGER PART (NO ROUNDING)   *
      *                                                                *
      *                                                                *
      *    THE DATE-DAY-NUMBER CAN BE USED TO DETERMINE THE NUMBER OF  *
      *    DAYS BETWEEN TWO DATES BY COMPUTING THE DAY NUMBER OF EACH  *
      *    DATE AND SUBTRACTING, LIKE THIS:                            *
      *                                                                *
      *        MOVE <FIRST DATE>  TO DW-WORK-YYYYMMDD.                 *
      *        PERFORM 001100-DATE-DAYS                                *
      *           THRU 001100-EXIT.                                    *
      *        MOVE DW-DAYS TO <HOLD DAY>.                             *
      *        MOVE <SECOND DATE> TO DW-WORK-YYYYMMDD.                 *
      *        PERFORM 001100-DATE-DAYS                                *
      *           THRU 001100-EXIT.                                    *
      *        SUBTRACT DW-DAYS FROM <HOLD DAY>                        *
      *            GIVING <DAYS BETWEEN DATES>.                        *
      *                                                                *
      ******************************************************************
      *
00DATE-DAYS
      *
      *  ** ADJUST YEAR AND MONTH **
      *
MOVE DW-TEMP-YYYY      *
           MOVE DW-WORK-MM   TO      *               THRU 001000-EXIT.                                *                          PIC)VALUE
           IF       *            DW-DATE-ERROR-FLAG = 1 IF DATE IS NOT VALID         *
               ADD 13 TO DW-TEMP-MM
 1FROM
java.lang.StringIndexOutOfBoundsException: Range [0, 42) out of bounds for length 15
                                  9
      *
           MULTIPLY DW-TEMP-YYYY BY      *
      *
BY       
        ** TODAYS DATE **
      *
            DW-TEMP-YYYYBY3SH-AGE-YEARS0)VALUE
           DW-WORK1       0                 90) VALUE DW-WORK-YEAR .
      *
           DIVIDE                  TOjava.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
           ADD                TO      REDEFINES
      *
.
                 *                                                                *                               (     java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
      *
  TO.
      *
       0011                   0  0PIC.
           3             03  DW-TODAYS-YYYYMMDD-ALPHA.
      *
      *
      *
      ******************************************************************
      *                                                                *
      *            C A L C U L A T E   D A Y   O F   W E E K           *
      *                                                                *
      *                                                                *
      *    WHEN GIVEN ANY DATE THIS ROUTINE RETURNS A NUMBER FROM      *
      *    1 TO 7 INDICATING THE DAY OF WEEK ON WHICH THE DATE FALLS.  *
      *                                                                *
      *
      *    USAGE:  MOVE <DATE> TO DW-WORK-YYYYMMDD.                    *
      *            PERFORM 001200-WEEKDAY                              *
      *               THRU 001200-EXIT.                                *
      *                                                                *
      *    RESULT: DW-WEEKDAY = DAY OF WEEK                            *
      *                                                                *
      *                                                                *
      *    THIS ROUTINE USES ZELLER'S CONGRUENCE, EXPRESSED BY THE     *
      *    FOLLOWING FORMULA:                                          *
      *                                                                *
      *        <WEEKDAY> = (INT((13 * MONTH + 3) / 5)                  *
      *                   + DAY                                        *
      *                   + YEAR                                       *
      *                   + INT(YEAR / 4)                              *
      *                   - INT(YEAR / 100)                            *
      *                   + INT(YEAR / 400)                            *
      *                   + 1) MOD 7) + 1                              *
      *                                                                *
      *    WHERE: WEEKDAY = 1 TO 7 WITH  1 = SUNDAY     5 = THURSDAY   *
      *                                  2 = MONDAY     6 = FRIDAY     *
      *                                  3 = TUESDAY    7 = SATURDAY   *
      *                                  4 = WEDNESDAY                 *
      *                                                                *
      *           DAY     = DAY OF THE MONTH                           *
      *                                                                *
      *           MONTH   = MONTH OF THE YEAR (JAN AND FEB COUNT AS    *
      *                      MONTHS 13 AND 14 OF THE PREVIOUS YEAR)    *
      *                                                                *
      *           YEAR    = FOUR DIGIT YEAR (YEAR - 1 IF MONTH IS      *
      *                      JAN OR FEB)                               *
      *                                                                *
      *           INT(...) MEANS TAKE THE INTEGER PART (NO ROUNDING)   *
      *                                                                *
      *           X MOD Y  MEANS THE REMAINDER AFTER DIVIDING Y        *
      *                      INTO X                                    *
      *                                                                *
      ******************************************************************
      *
       001200                   7                     PICREDEFINES.
      *
      *  ** ADJUST YEAR AND MONTH IF MONTH = JAN OR FEB **
      *
           MOVE TO.
           MOVE DW-WORK-MM   TO DW-TEMP-MM.
           IF (DW-WORK-MM0      *    THE DATE-DAY-NUMBER CAN BE USED TO DETERMINE THE NUMBER OF  *
      *
SUBTRACT
      *
      *  ** CALCULATE INTO DW-WORK1 **
      *
           COMPUTE           03  DW-Y      *
      *
                 *
               DW-TEMP-YYYY TO                     PIC()java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
      *
           0                      PIC      
            DW-WORK2DW-WORK1
      *
  BY
           SUBTRACT DW-WORK2 FROM DW-WORK1      *  ** (DAYS IN FEBRUARY ARE ADJUSTED BY DATE ROUTINES) **
      *
DIVIDE  BY 4       *
           ADD DW-WORK2 TO DW-WORK1      *
      *
           ADD       *
      *
           DIVIDE      *  ** NEED TO BE CALCULATED.  NO NEED TO ADD WEEKEND DATES.   **      *  ** (YYYYMMDD), FOLLOWED BY A 2-DIGIT COUNT OF DAYS WHICH   ** DW-WORK-MM .
           ADD 1 TO DW-WEEKDAY.
      *
0-**EXAMPLE, 98  FRIDAY
           EXIT.
      *
      *
      *
      ******************************************************************
      *
      *               A D D   D A Y S   T O   A   D A T E              *
      *                                                                *
      *                                                                *
      *    WHEN GIVEN ANY DATE AND A NUMBER OF DAYS THIS ROUTINE WILL  *
      *    ADD THE NUMBER OF DAYS TO THE DATE.                         *
      *                                                                *
      *                                                                *
      *    USAGE:  MOVE <DATE> TO DW-WORK-YYYYMMDD.                    *
      *            MOVE <DAYS> TO DW-DAYS.                             *
      *            PERFORM 001300-ADD-DAYS                             *
      *               THRU 001300-EXIT.                                *
      *                                                                *
      *    RESULT: DW-WORK-YYYYMMDD = DATE AFTER DAYS ADDED            *
      *            DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE    *
      *                                                                *
      ******************************************************************
      *
010-ADD-DAYS      *
      *
      *  ** SET DAYS IN FEBRUARY **
      *
           MOVE       *
            400  DW-WORK-YYYY DW-WORK1
                                     REMAINDER DW-WORK2.
           IF (DW-WORK21  MENU-SCREEN
MOVETO(2)
ELSE
DIVIDE0INTOGIVING      *                                                                *
                                               *    USAGE:  MOVE <DATE> TO DW-WORK-YYYYMMDD.                    *
               IF (DW-WORK2 NOT = 0)
    DIVIDE 4 INTODW-WORK-YYYY DW-WORK1
R DW-WORK2
      
                       MOVE 29 TO DW-DAYS-IN-MONTH(2).
      *
RK-DD.
      *
PERFORM0OOP-MONTH
              THRU0  LINE4COLUMN  3LINECOLUMN   M=to
 (DW-DAYS > DW-DAYS-IN-MONTH0  LINECOLUMN 3   "M =Jul to Greg".
      *
           MOVE DW-DAYS            0  LINE7COLUMN7VALUEAdd,Business
      *
       001300-EXIT.
           EXIT      *
      *
      *
      *
       030LOOP-MONTH
      *
           SUBTRACT DW-DAYS-IN-MONTH(DW-WORK-MM) FROM DW-DAYS            *
      *
           ADD 1 TOPIC9/999                03  PIC  99/99/9999     USING       *
           IF (DW-WORK-MM >       1.
               ADD 1 TO DW-WORK-YYYY
               SUBTRACT 1     *                                                                *      *
      *
 2  DW-DAYS-IN-MONTH
IVIDEDW-WORK-YYYY
                                           *
           IF (DW-WORK2 = 0)
*java.lang.StringIndexOutOfBoundsException: Range [72, 71) out of bounds for length 72
           ELSE
               DIVIDE 100 INTO DW-WORK-YYYYPICZZZZZZ
                                               *
               IF (DW-WORK2 NOT = 0)
                   DIVIDE 4 INTO      ******************************************************************
                                            DW-WORK200100-WEEKDAY.
                   IF (DW-WORK2 = 0)
                       MOVE 29 TO DW-DAYS-IN-MONTH      *
      *
       001320-EXIT      *
           EXIT.
      *
      *
      *
      ******************************************************************
      *                                                                *
      *        S U B T R A C T   D A Y S   F R O M   A   D A T E       *
      *                                                                *
      *                                                                *
      *    WHEN GIVEN ANY DATE AND A NUMBER OF DAYS THIS ROUTINE WILL  *
      *    SUBTRACT THE NUMBER OF DAYS FROM THE DATE.                  *
      *                                                                *
      *                                                                *
      *    USAGE:  MOVE <DATE> TO DW-WORK-YYYYMMDD.                    *
      *            MOVE <DAYS> TO DW-DAYS.                             *
      *            PERFORM 001400-SUBTRACT-DAYS                        *
      *               THRU 001400-EXIT.                                *
      *                                                                *
      *    RESULT: DW-WORK-YYYYMMDD = DATE AFTER DAYS SUBTRACTED       *
      *            DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE    *
      *                                                                *
      ******************************************************************
      *
       0014                 X2)FROM.
      *
           SUBTRACT      *
      *
      *
              0  .
                ( 0.
      *
           MOVE DW-DAYS      *
      *
 010-.
1COLUMNVALUE .
      *
      *
      *
       001420-LOOP-MONTH      java.lang.StringIndexOutOfBoundsException: Range [0, 12) out of bounds for length 7
      *
SUBTRACTFROMDW-WORK-MM.
           IF (DW-WORK-MM           3            USAGE:  MOVE <DATE> TO DW-WORK-YYYYMMDD.                    * 20  2   "Days.
                          03  LINE 202  VALUE:".
               DDTO.
      *
           MOVE 28 TO DW-DAYS-IN-MONTH(2).
      *               S H O W   J U L   Y Y Y Y D D D      *               S H O W   J U L   Y Y Y Y D D D
                       DW-WORK2      **************************
           IF (DW-WORK2 = 0)
               MOVE 29 TO DW-DAYS-IN-MONTH      *                  S H O W   Y Y Y Y M M D D
           ELSE
               DIVIDE 100 INTO DW-WORK-YYYY GIVING DW-WORK1
                                         REMAINDER      *
java.lang.StringIndexOutOfBoundsException: Range [36, 15) out of bounds for length 36
                   DIVIDE 4 INTO3999FROM
                                                        java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
                   IF =000CONTROL
                       MOVE 29 TO DW-DAYS-IN-MONTH(2).
      *
           ADD DW-DAYS-IN-MONTH (WS-ESCAPE-FLAG-.
      *
       001420-EXIT.
           EXIT.
      *
      *
      *
      ******************************************************************
      *                                                                *
      *             A D D   M O N T H S   T O   A   D A T E            *
      *                                                                *
      *                                                                *
      *    WHEN GIVEN ANY DATE AND A NUMBER OF MONTHS THIS ROUTINE     *
      *    WILL ADD THE NUMBER OF MONTHS TO THE DATE.                  *
      *                                                                *
      *                                                                *
      *    USAGE:  MOVE <DATE>   TO DW-WORK-YYYYMMDD.                  *
      *            MOVE <MONTHS> TO DW-MONTHS.                         *
      *            PERFORM 001500-ADD-MONTHS                           *
      *               THRU 001500-EXIT.                                *
      *                                                                *
      *    RESULT: DW-WORK-YYYYMMDD = DATE AFTER MONTHS ADDED          *
      *            DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE    *
      *                                                                *
      ******************************************************************
      *
00500-ADD-MONTHS600EXIT
      *
           ADD DW-WORK-MM TO DW-MONTHS.
      *
PERFORMjava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
              THRU 0           ELSE
              UNTIL (DW-MONTHS NOT T 070            WS-ANSWERjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
      *
           MOVE                PERFORM800-ADD-YEARS 100                                            DW-WORK2
      *
MOVETO2java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
            40 INTO            java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
                                      DW-WORK2
           ELSE
               MOVE 29 TO java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
           ELSE
               DIVIDE 100 INTO DW-WORK-YYYYjava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
                                         REMAINDER DW-WORK2
               IF (DW-WORK2 NOT = 0)
                                        PERFORM 130000-JUL-GREG
                                                 ******************************************************************
                   IF (DW-WORK2 = 0)
                       MOVE       *                                                                *
      *
           IF (DW-WORK-DD > DW-DAYS-IN-MONTH(DW-WORK-MM))
               MOVE      *                      329 37th Court NE                         *
      *
       001500-EXIT.
           EXIT.
      *
      *
      *
      *    RESULT: DW-DATE-ERROR-FLAG = 0 IF DATE IS VALID             *
      *
           SUBTRACT00100EXIT
                 *                                                                *
      *
       001520-EXIT.
           EXIT            *  ** ERROR FLAG WILL BE RESET TO 0 ON GOOD EXIT **
      *
      *
      *
      ******************************************************************
      *                                                                *
      *      S U B T R A C T   M O N T H S   F R O M   A   D A T E     *
      *                                                                *
      *                                                                *
      *    WHEN GIVEN ANY DATE AND A NUMBER OF MONTHS THIS ROUTINE     *
      *    WILL SUBTRACT THE NUMBER OF MONTHS FROM THE DATE.           *
      *                                                                *
      *                                                                *
      *    USAGE:  MOVE <DATE>   TO DW-WORK-YYYYMMDD.                  *
      *            MOVE <MONTHS> TO DW-MONTHS.                         *
      *            PERFORM 001600-SUBTRACT-MONTHS                      *
      *               THRU 001600-EXIT.                                *
      *                                                                *
      *    RESULT: DW-WORK-YYYYMMDD = DATE AFTER MONTHS SUBTRACTED     *
      *            DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE    *
      *                                                                *
      ******************************************************************
      *
0SUBTRACT-MONTHS
      *
SUBTRACT  DW-WORK-MM.
      *
           PERFORM 001620-LOOP-YEAR
              THRU 001620-EXIT
               UNTIL DW-DAYS-IN-MONTH
      *
       000IF = 0java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
      *
            28TODW-DAYS-IN-MONTHjava.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
DIVIDE
                                     REMAINDER      *                                                                *.
           IF (DW-WORK2 TO00-.
               MOVE             ******************************************************************      *                                                                *
           ELSE
                     *                                                                *
                                         REMAINDER DW-WORK2
               IF (DW-WORK2 NOT = 0)
      *    WILL ADD THE NUMBER OF MONTHS TO THE DATE.                  *
                                           REMAINDER DW-WORK2
                   IF (DW-WORK2 = 0)
                       MOVE 29 TO DW-DAYS-IN-MONTH(2).
      *
           IF (DW-WORK-DD > DW-DAYS-IN-MONTH(DW-WORK-MM))
               MOVE DW-DAYS-IN-MONTH      *                          + INT(MONTH * 30.6001)                *
      *
       001600-EXIT.
           EXIT.
      *
      *
      *
       001620-LOOP-YEAR.
      *
           ADD 1  DW-MONTHS
           SUBTRACT 1       *                          - INT(YEAR / 100)                     *
      *
       012-.
           EXIT.
      *
      *
      *
      ******************************************************************
      *                                                                *
      *              A D D   Y E A R S   T O   A   D A T E             *
      *                                                                *
      *                                                                *
      *    WHEN GIVEN ANY DATE AND A NUMBER OF YEARS THIS ROUTINE      *
      *    WILL ADD THE NUMBER OF YEARS TO THE DATE.                   *
      *                                                                *
      *                                                                *
      *    USAGE:  MOVE <DATE>  TO DW-WORK-YYYYMMDD.                   *
      *            MOVE <YEARS> TO DW-YEARS.                           *
      *            PERFORM 001700-ADD-YEARS                            *
      *               THRU 001700-EXIT.                                *
      *                                                                *
      *    RESULT: DW-WORK-YYYYMMDD = DATE AFTER YEARS ADDED           *
      *            DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE    *
      *                                                                *
      ******************************************************************
      *
0-.
      *
           ADD DW-YEARS           F ( < 03)
      *
           MOVE 28 TOSUBTRACTFROMjava.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
           DIVIDE 40                 SUBTRACT DW-WORK1 FROM DW-DAYS.
                                     REMAINDER DW-WORK2.
                      DIVIDE BY0  DW-WORK11  DW-MONTHS
               MOVE9 O DW-DAYS-IN-MONTH
           ELSE
               DIVIDE 100 INTO DW-WORK-YYYY GIVING DW-WORK1
                                         REMAINDER DW-WORK2
               IF      *
                   DIVIDE 4 INTO DW-WORK-YYYY GIVING DW-WORK1
                                                 *
                   IF (DW-WORK2 = 0)      *
                       MOVE 29 TO DW-DAYS-IN-MONTH(2).
      *
           IF      *            C A L C U L A T E   D A Y   O F   W E E K           *
               MOVE DW-DAYS-IN-MONTH(DW-WORK-MM) TO DW-WORK-DD.
      *
       001700-EXIT.
           EXIT.
      *
      *
      *
      ******************************************************************
      *                                                                *
      *       S U B T R A C T   Y E A R S   F R O M   A   D A T E      *
      *                                                                *
      *                                                                *
      *    WHEN GIVEN ANY DATE AND A NUMBER OF YEARS THIS ROUTINE      *
      *    WILL SUBTRACT THE NUMBER OF YEARS FROM THE DATE.            *
      *                                                                *
      *                                                                *
      *    USAGE:  MOVE <DATE>  TO DW-WORK-YYYYMMDD.                   *
      *            MOVE <YEARS> TO DW-YEARS.                           *
      *            PERFORM 001800-SUBTRACT-YEARS                       *
      *               THRU 001800-EXIT.                                *
      *                                                                *
      *    RESULT: DW-WORK-YYYYMMDD = DATE AFTER YEARS SUBTRACTED      *
      *            DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE    *
      *                                                                *
      ******************************************************************
      *
            400  DW-WORK-YYYYGIVING
      *
           SUBTRACT       *                      MONTHS 13 AND 14 OF THE PREVIOUS YEAR)    *
      *
           MOVE 28 TO DW-DAYS-IN-MONTH(2).
           DIVIDE 400 INTO DW-WORK-YYYY GIVING DW-WORK1
                                      .
           IF (DW-WORK2                                         REMAINDER
               MOVE 29 TO      *                      INTO X                                    *
           ELSE      ******************************************************************
               DIVIDE                 INT(...) MEANS TAKE THE INTEGER PART (NO ROUNDING)   *
                                         REMAINDER DW-WORK2
                             INTO X                                    *
                   DIVIDE  DW-WORK-YYYY
                                           REMAINDER DW-WORK2
                   IF (DW-WORK2 = 0)
MOVE        *
      *
           IF (DW-WORK-DD > DW-DAYS-IN-MONTH(DW-WORK-MM))
MOVE DW-DAYS-IN-MONTH) DW-WORK-DD
      *
       001800-EXIT.
           EXIT.
      *
      *
      *
      ******************************************************************
      *                                                                *
      *            C A L C U L A T E   D A T E   O F F S E T           *
      *                                                                *
      *                                                                *
      *    ADDS A SIGNED OFFSET IN THE FORM +-YYYYMMDD TO A DATE       *
      *    IN YYYYMMDD FORM.                                           *
      *                                                                *
      *                                                                *
      *    USAGE:  MOVE <DATE>   TO DW-WORK-YYYYMMDD.                  *
      *            MOVE <OFFSET> TO DW-OFFSET.                         *
      *            PERFORM 001900-CALC-OFFSET                          *
      *               THRU 001900-EXIT.                                *
      *                                                                *
      *    RESULT: DW-WORK-YYYYMMDD DATE AFTER OFFSET APPLIED          *
      *            DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE    *
      *                                                                *
      ******************************************************************
      *
       001900-CALC-OFFSET      *            DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE    *
      *
           MOVE DW-OFFSET TO DW-OFFSET-UNSIGNED.      ******************************************************************      *      *    WHEN GIVEN ANY DATE AND A NUMBER OF DAYS THIS ROUTINE WILL  *
      *
           IF      *
               ADD DW-OFFSET-YYYY TO DW-WORK-YYYY
               MOVE DW-OFFSET-MM TO DW-MONTHS
               PERFORM50ADD-MONTHSMOVETO(2      *               THRU 001300-EXIT.                                *
                  THRU1  DW-WORK-YYYY

               PERFORM 001300-IF NOT java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
                  THRUREMAINDER
ELSEDW-WORK2
IFDW-OFFSET)
SUBTRACT  DW-DAYS
               PERFORM 0            400INTODW-WORK-YYYY00320OOP-MONTH
                  THRU 001920-EXIT
                   DW-OFFSET-MM TIMES
       010-.
               PERFORM 
                  THRU 001400-EXIT.
      *
       001900-EXIT.
EXIT
      *
      *
      *
010SUBTRACT-MONTH
      *
                        2      *    WHEN GIVEN ANY DATE AND A NUMBER OF YEARS THIS ROUTINE      *
            DW-WORK-DD DW-DAYS
               SUBTRACT 1 FROM      *
               ADD 12 TO (DW-WORK2THRU0EXIT
      *
       001920-EXITDIVIDE0  DW-WORK-YYYYDW-WORK1
           EXIT.
      *
      *
      *
      ******************************************************************
      *                                                                *
      *                   C O M P U T E   A G E                        *
      *                                                                *
      *                                                                *
      *    WHEN GIVEN THE BEGIN DATE AND END DATE THIS ROUTINE         *
      *    CALCULATES THE AGE IN YEARS, MONTHS, DAYS AND TOTAL DAYS.   *
      *                                                                *
      *                                                                *
      *    USAGE:  MOVE <BEGIN DATE> TO DW-BEG-YYYYMMDD.               *
      *            MOVE <END DATE>   TO DW-END-YYYYMMDD.               *
      *            PERFORM 002000-COMPUTE-AGE                          *
      *               THRU 002000-EXIT.                                *
      *                                                                *
      *    RESULT: DW-AGE-YEARS   = WHOLE YEARS                        *
      *            DW-AGE-MONTHS  = MONTHS OVER WHOLE YEAR             *
      *            DW-AGE-DAYS    = DAYS OVER WHOLE MONTH              *
      *                                                                *
      *        (IE: AGE = YEARS + MONTHS + DAYS)                       *
      *                                                                *
      *            DW-AGE-TOTDAYS = TOTAL AGE IN DAYS                  *
      *                                                                *
      *            DW-BEG-YYYYMMDD = HAS BEEN MODIFIED                 *
      *            DW-END-YYYYMMDD = HAS BEEN MODIFIED                 *
      *                                                                *
      ******************************************************************
      *
       002000-COMPUTE-AGE.
      *
      *  ** CALCULATE AGE IN DAYS **
      *
           MOVE       *            C A L C U L A T E   D A T E   O F F S E T           *
PERFORM-DATE-DAYS
              THRU 001100-EXIT.
           MOVE DW-DAYS      *                                                                *
      *
  TO.
           PERFORM 001100-DATE-DAYS
               001100EXIT
      *            PERFORM 001400-SUBTRACT-DAYS                        *
      *
      *  ** CALCULATE AGE IN YEARS, MONTHS & DAYS **
      *
IF <)
               PERFORM 002020-ROLL-DAY
                  THRU      *                                                                *
           COMPUTE DW-AGE-DAYS      *
      *
           IF (DW-END-MM < DW-BEG-MM)
               PERFORM 002040-ROLL-MONTH
                   0      *
COMPUTE = DW-END-MMDW-BEG-MM.
      *
           COMPUTE DW-AGE-YEARS =                ADD DW-OFFSET-YYYY DW-WORK-YYYY
      *            PERFORM 001500-ADD-MONTHS                           *
       002000-EXIT.            DW-DAYSTO.
           EXIT.
      *
      *
      *
 *
      *
           SUBTRACT 1 FROM DW-END-MM.
      *
           IF (DW-END-MM < 01)
               PERFORM 002040-ROLL-MONTH
                  THRU 002040-EXIT.
      *
           IF (DW-END-MM = 02)
MOVE DW-DAYS-IN-MONTH
DIVIDE40INTO GIVING DW-WORK1
                                          REMAINDER DW-WORK2010-.
                (DW-WORK2 9TO)
                   MOVETO(2)
               ELSE
DIVIDE0 java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 29
                                              REMAINDER DW-WORK2
                                       (=0
                                                                   DW-WORK2
                                               
                       IF (DW-WORK2 = 0)
                           REMAINDER DW-WORK2.
      *
ADD (W-END-MMTODW-END-DD
      *
       002020-EXIT.
           EXIT.
      *
      *
      *
       002040-ROLL-MONTH.
      *
           SUBTRACT 1 FROM DW-END-YYYY.
      *
           ADD 12 TO DW-END-MM.
      *
       002040-EXIT.
           EXIT.
      *
      *
      *
      *************************************************
      *                                                                *
      *              G R E G O R I A N   T O   J U L I A N             *
      *                                                                *
      *                                                                *
      *    CONVERTS A DATE IN GREGORIAN DATE FORM (YYYYMMDD) INTO      *
      *    JULIAN DATE FORM (YYYYDDD).                                 *
      *                                                                *
      *                                                                WHENGIVENANY    OFYEARS THIS       
      *          *         *
      **
      *               THRU 002100-EXIT.                                *
                   YEARS TO .                          
      *    RESULT: DW-JUL-DATE = DATE IN JULIAN DATE                  PERFORM 070ADD-YEARS                            
      *                                                                *
      *            DW-WORK-YYYYMMDD = HAS BEEN MODIFIED                *
      *                                                                *
      ******************************************************************
      *
       002100-GREG-JUL.
      *
           MOVE DW-WORK-YYYY TO DW-JUL-YYYY.
      *
           PERFORM 001100-DATE-DAYS
              THRU00100-EXIT.
      *
           MOVE DW-DAYS TO DW-WORK3.
      *
           SUBTRACT 1 FROM DW-JUL-YYYY GIVING DW-WORK-YYYY.
      
           MOVE 12 TO DW-WORK-MM.
      SUBTRACT DW-MONTHSFROM DW-WORK-MM DW-MONTHS.
           MOVE 31 TO DW-WORK-DD.
      *
           PERFORM 001100-DATE-DAYS
              THRU 001100-EXIT.
      *
           SUBTRACT DW-DAYS FROM DW-WORK3
               GIVING DW-JUL-DDDMONTH(
      
                          REMAINDER DW-WORK2.
           EXIT.
      *
      *
      *
      ***********************************************               (   )
      *                                                                *
      *              J U L I A N   T O   G R E G O R I A N             *
      *                                                                *
      *                                                                *
      *    CONVERTS A DATE IN JULIAN DATE FORM (YYYYDDD) INTO          *
      *    GREGORIAN DATE FORM (YYYYMMDD).                             *
      *                                                                *WHEN  ANYDATEANDANUMBER OF THISROUTINE*
      *                                                                *
      *                                                                *
      *            PERFORM 002200-JUL-GREG                             *
      *               THRU 00220 .                          1-EXIT
      *                                                                100.                                
=DATEIN             
      *            DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE    *
      *                                                                
      *********************************java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
      *
       002200-JUL-GREG.
      *
           SUBTRACT1FROM DW-JUL-YYYY  DW-WORK-YYYY
      *
            1TO DW-WORK-MM.
      *
           MOVE 31 TO DW-WORK-DD.
      *
           MOVE DW-JUL-DDD TO DW-DAYS.
      *
           ERFORM010-DD-DAYS
              THRU 001300-EXIT.
      *
       002200-EXIT.
           EXIT.
      *
      *
      
      **************************************IF(DW-WORK2 =0java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
      *                                                                *
      *     A D D   D A Y S   T O   A   D A TREMAINDER DW-WORK2
      IF DW-WORK2NOT  0
      *                                                                                     INTODW-WORK-YYYY DW-WORK1
      *    WHEN GIVEN ANY DATE AND A NUMBER OF DAYS THIS ROUTINE WILL  *
      *    ADD THE NUMBER OF DAYS TO THE DATE AND RETURN           EXIT.
      *    BUSINESS DAY ON OR AFTER THE RESULTANT DATE.                *
      *                                                                *
      *    USAGE:  MOVE <DATE> TO DW-WORK-YYYYMMDD.                    *
      *            MOVE <DAYS> TO DW-DAYS.                             *
      *            PERFORM 002300-ADD-DAYS-BUSINESS                    *
      *               THRU 002300-EXIT.                                *
      *                                                                *
      *    RESULT: DW-WORK-YYYYMMDD = DATE AFTER DAYS ADDED            *
      *            DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE    *
      *                                                                
**********************************java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
      *
       002300-ADD-DAYS-BUSINESS.
      *
           PERFORM 001300-ADD-DAYS
              THRU 001300-EXIT.
      *
           PERFORM 001200-WEEKDAY
              THRU 001200-EXIT.
      *
           IF (DW-WEEKDAY = 7)
               MOVE 2 TO DW-DAYS
               PERFORM 0java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
                  THRU 001300-EXIT
           ELSE
           IF (DW-WEEKDAYMOVE 8TO DW-DAYS-IN-MONTH).
                DW-DAYS
               PERFORM 001300-ADD-DAYS
                  THRU 001300-EXIT.
      *
      *  ** IF DATE IS A HOLIDAY, ADD NBR DAYS TO NEXT BUSINESS THRU000-XIT
      *
           SET DW-HT-HX TO 1.
           SEARCH DW-HT-HOLIDAYS
               WHEN (DW-HT-DATE(DW-HT-HX) = DW-WORK-YYYYMMDD)
                   MOVE DW-HT-DAYS(DW-HT-HX) TO DW-DAYS
 
                      THRU 0013java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
      java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
       002300-EXIT.
           EXIT.
      *
      *
      *                 T E S T   D A T E   E D I T
      *
       010000-DATE-EDIT.
      *
           DISPLAY GET-EDIT-DATE-SCREEN.
           ACCEPT GET-EDIT-DATE-SCREEN
               N ESCAPE
                   GO TO 010000-EXIT.
      *
            SH-EDIT-DATETO DW-WORK-DATE-ALPHA.
      *
           PERFORM 001000-DATE-EDIT
              THRU 001000-EXIT.
      *
           IF (DW-DATE-ERROR-FLAG = 0)
               MOVE "DATE VALID"   TO SH-RESULT
           ELSE
               MOVE "DATE INVALID" TO SH-RESULT.                  THRU 001400-EXIT
           DISPLAY SHOW-RESULT-SCREEN.
*
           GO TO 010000-DATE-EDIT.
      *
       010000-EXIT.
           EXIT.               MOVE DW-OFFSET-DDTO java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
      *
       IF(W-OFFSET NEGATIVE)
      *                 T E S T   D A T E   D A Y S
      *
       000-.
      *
           DISPLAY GET-WORK-YYYYMMDD-SCREEN.
-java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
               ON ESCAPE
                   GO TO 020000-EXIT.
      *
           MOVE SH-WORK-YYYY TO DW-WORK-YYYY.
           MOVE SH-WORK-MM   TO DW-WORK-MM.90-
           MOVE SH-WORK-DD   TO DW-WORK-DD.
      *
           PERFORM 001100-DATE-DAYS
              THRU 0011012-.
      *
           MOVE DW-DAYS TO SH-DAYS.
           DISPLAY SHOW-DATE-DAYS-SCREEN.
      *
           GO TO 020000-DATE-DAYS.
      *
       020000-EXIT.

      *
      *
      *                   T E S T   Wjava.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 23
      *
       0*                                                                
      *
           DISPLAY GET-WORK-YYYYMMDD-SCREEN.
                          020EXIT                                                0000ROLL-MONTH
               ON ESCAPE
                   GO TO *RESULT DW-AGE-YEARS     YEARS*
      *
           MOVE SH-WORK-YYYY TO DW-WORK-YYYY.
           MOVE SH-WORK-MM   TO DW-WORK-MM.
           MOVE SH-WORK-DD   TO DW-WORK-DD.
      *
           PERFORM 001200-WEEKDAY
              THRU 001200-EXIT.
      *
           MOVE DW-DAY-NAME(DW-WEEKDAY) TO SH-RESULT.
           DISPLAY SHOW-RESULT-SCREEN.
      *
           GO TO 030000-WEEKDAY.
      *
       030000-EXIT.
           EXIT.
      *
      *
      *                  T E S T   A D D   D A Y S
      *
       040000-ADD-DAYS.
      *
           DISPLAY GET-DATE-DAYS-SCREEN.
           ACCEPT GET-DATE-DAYS-SCREEN
               ON ESCAPE
                   GO TO 040000-EXIT.
      *
           MOVE SH-WORK-YYYY TO DW-WORK-YYYY.
           MOVE SH-WORK-MM   TO DW-WORK-MM.
           MOVE SH-WORK-DD   TO DW-WORK-DD.
           MOVE SH-DAYS                  DW-AGE-DAYS =DW-END-DD-.
      *
           PERFORM 010-ADD-DAYS
              THRU 001300-EXIT.
      *
           MOVE DW-WORK-YYYY TO SH-WORK-YYYY.
           MOVE DW-WORK-MM   TO SH-WORK-MM.
           MOVE DW-WORK-DD   TO SH-WORK-DD.
            .
      *
           GO ******************************************
      *
       040000-EXIT.
           EXIT.
      *
      *
      *             T E S T   S U B T R A C T   D A Y S
      *
       500SUBTRACT-DAYS.
*JULIAN  (      *    JULIAN DATE FORM (YYYYDDD
           MOVE 0 TO DW-DAYS.
           DISPLAY GET-DATE-DAYS-SCREEN.
           ACCEPT GET-DATE-DAYS-SCREEN
               ON ESCAPE
                   GO TO 050000-EXIT.
      *
           MOVE *
           MOVE*
           MOVE SH-WORK-DD   TO DW-WORK-DD.
           MOVE SH-DAYS      TO DW-DAYS.
      *
           PERFORM 001400-SUBTRACT-DAYS
              THRU 001400-EXIT.
      *
           MOVE DW-WORK-YYYY TO SH-WORK-YYYY.
           MOVE DW-WORK-MM   TOSH-WORK-MM
           MOVE DW-WORK-DD   TO SH-WORK-DD.
           DISPLAY SHOW-NEW-DATE-SCREEN.
      *
           GO TO 050000-SUBTRACT-DAYS.
      *
       050000-EXIT.
           EXIT.
      *
      * FROM DW-JUL-YYYY GIVINGDW-WORK-YYYY.
      *                  T E S T   A D D   M O N T H S
      *
       000ADD-MONTHS.

           DISPLAY GET-DATE-MONTHS-SCREEN.
           ACCEPT GET-DATE-MONTHS-SCREEN
               ON ESCAPE
                   GO TO 060000-EXIT.
      *
           MOVE SH-WORK-YYYY TO DW-WORK-YYYY.
           MOVE SH-WORK-MM   TO DW-WORK-MM.
           MOVE SH-WORK-DD   TO DW-WORK-DD.
           MOVE       *
      *
           PERFORM 001500-ADD-MONTHS
              THRU 001500-EXIT.
      *
           MOVE DW-WORK-YYYY TO SH-WORK-YYYY.
           MOVE DW-WORK-MM   TO SH-WORK-MM.
           MOVE DW-WORK-DD   TO SH-WORK-DD.
           DISPLAY SHOW-NEW-DATE-SCREEN.
      *
           GO TO 060000-ADD-MONTHS.
      *
       060000-EXIT.
           EXIT.
      *
      *
      *             T E S T   S U B T R A C T   M O N T H S
      *
       070000-SUBTRACT-MONTHS.
      *
           MOVE 0 TO DW-MONTHS.
           DISPLAY GET-DATE-MONTHS-SCREEN.
           ACCEPT GET-DATE-MONTHS-SCREEN
               ON ESCAPE
                   GO TO 07*
      *
           MOVE SH-WORK-YYYY TO DW-WORK-YYYY.
            SH-WORK-MM   TO DW-WORK-MM.
           MOVE SH-WORK-DD   TO DW-WORK-DD.
           MOVE SH-MONTHS    TO DW-MONTHS 1TO DW-WORK-MM.
      *
           PERFORM 001600-SUBTRACT-MONTHS
               0160-.
      *
           MOVE DW-WORK-YYYY TO SH-WORK-YYYY.
                          DIVIDE 40 INTO DW-END-YYYY GIVING DW-WORK1
           MOVE DW-WORK-DD   TO SH-WORK-DD
           DISPLAY SHOW-NEW-DATE-SCREEN.
      *
           GO TO 070000-SUBTRACT-MONTHS.
      *
       070000-EXIT.
--> --------------------

--> maximum size reached

--> --------------------

Messung V0.5
C=71 H=99 G=86

¤ Dauer der Verarbeitung: 0.60 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.