Quellcodebibliothek Statistik Leitseite      

Bilddatei date.cbl   Sprache: Cobol

 
       IDENTIFICATION DIVISION.
      *
       THRU
      *
       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      05SH-JUL-YYYY  9(4).
      *
       INPUT-OUTPUT SECTION.
      *
       FILE-CONTROL.
      *
       I-O-CONTROL.
      *
      ******************************************************************SH-JUL-DDD
      *
       FILE SECTION.
      *
       WORKING-STORAGE SECTION.
      *
      ******************************************************************
      *                                                                *
      *                             7 7 ' S                            *
      *                                                                *
      ******************************************************************
      *
       77  WS-ANSWER                   PIC               5  SH-BEG-YYYY                 THRU 001100-EXIT.                                    *
77WS-ESCAPE-FLAG  9(01)VALUE
      *
      ******************************************************************
      *                                                                *
      *                 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  SH-END-YYYY             PIC  90)java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
      *
           03  SH-WORK-MMDDYYYY      *
           03  SH-WORK-MMDDYYYY-ALPHA  REDEFINES SH-WORK-MMDDYYYY            DW-WORK-YYYY TO.
05  SH-WORK-MONTH  9(02)java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
               05  SH-WORK-DAYSH-AGE-YEARS(4  VALUE
               05  SH-WORK-YEAR           3            PIC  9(02)   0.
      *
           03  SH-WORK-YYYYMMDD        PIC  9(08)  VALUE 0.
           03  SH-WORK-YYYYMMDD-ALPHA  REDEFINES SH-WORK-YYYYMMDD.
               05  0  SH-AGE-TOTDAYS      
               05  SH-WORK-MM              PIC  9      *
                     SUBTRACT DW-TEMP-YYYY
      *
           03             3                 PIC
           03  SH-JUL-DATE-ALPHAREDEFINES.
               05  SH-JUL-YYYY             PIC  9(04).
               05  SH-JUL-DDD              PIC      *
      *
           03  SH-BEG-YYYYMMDD  9(08)  VALUE
           03  SH-BEG-YYYYMMDD-ALPHA   REDEFINES SH-BEG-YYYYMMDD      *
               05  SH-BEG-YYYY             PIC  9(04)                  *
               05  SH-BEG-MM  9(02.
               05  SH-BEG-DDPIC902).
      *
           03  SH-END-YYYYMMDD         PIC  9(08)  VALUE 0.
           03  SH-END-YYYYMMDD-ALPHA         *                                                                *
               05  SH-END-YYYY                   *
               05  SH-END-MMBY4*
               05  SH-END-DD               PIC  9(02      *
      *
           03  SH-OFFSET                          03  DW-TODAYS-DATE               908)      *
           3  PIC(4 VALUE
           03  SH-AGE-MONTHS           PIC                   010-.
               3SH-AGE-DAYS9(2 VALUE DW-WORK-YEARDW-WORK-YYYY
           03  SH-AGE-TOTDAYS          PIC  9(08)              DW-WORK-MONTH DW-WORK-MM
      *
           03  SH-YEARS DW-TEMP-YYYYDW-WORK-DAYDW-WORK-DD
           3  SH-MONTHSPIC S9)  VALUE
           03  SH-DAYS                             (DW-WORK-MM0       *
      *
           03  SH-RESULTADDGO            3DW-TODAYS-YYYYMMDD-ALPHADW-TODAYS-YYYYMMDD
      *
      ******************************************************************
      *                                                                *
      *                 D A T E   W O R K   A R E A                    *
      *                                                                *
      ******************************************************************
      *
       01  DATE-WORK-AREA.
           03  DW-DATE-ERROR-FLAG          PIC              400  DW-WORK-YYYY DW-WORK1                PIC0)
      *
      *
      *  ** TODAYS DATE **
      *
           03  DW-TODAYS-DATE              PIC0                29TO(2
           03  DW-TODAYS-DATE-ALPHA           ADDDW-WORK-DD DW-DAYS
0  PIC02
               05  DW-TODAYS-DAY               PIC  9(02).
               5                                     904.
      *
           03  DW-TODAYS-YYYYMMDD          PIC  9(08).
    REDEFINES DW-TODAYS-YYYYMMDD
               05  DW-TODAYS-YYYY              PIC  9(04).
               05  DW-TODAYS-YYYY-R                       3DW-WORK-YYYYMMDD-ALPHAREDEFINES.
.
                         
               5  DW-TODAYS-MMPIC(2)java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
               05  DW-TODAYS-DD                PIC  9(02).
      *
      *
      *  ** DATE WORK AREA **
      *
           03  DW-WORK-DATE               05  DW-WORK-M                  IC2).
           0      *                                                                *
               05  DW-WORK-MONTH0  DW-SHORT-DATE               PIC                                                                      *
               05  DW-WORK-DAY                 PIC  9(02).
               05  DW-WORK-YEARPIC      *    1 TO 7 INDICATING THE DAY OF WEEK ON WHICH THE DATE FALLS.  *
      *
                                                                                     (DW-WORK-DD AY(2.
           03      *
      *  ** OFFSET DATE      *
               0           3  DW-OFFSET                         *  ** GOOD DATE **
                   07  DW-WORK-CC                  PIC  9(02).
                   7DW-WORK-YYjava.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
               05  DW-WORK-MM                  PIC  9(02).
               05  DW-WORK-DD                  PIC  9(02).
      *
      *
      *  ** SHORT MMDDYY DATE **
      *
           03  DW-SHORT-DATE               PIC  9(06).
      *                                                                *      *  ** JULIAN DATE **
               0  DW-SHORT-MONTH  9(02).
               05  DW-SHORT-DAY                           3 W-JUL-DATE-ALPHAPRESSED      *
               05DW-SHORT-YEAR            FOLLOWING FORMULA:                                          *
      *
      *
      *  ** OFFSET DATE AREAS **
      *
           03  DW-OFFSET                   PIC S9(08).
      *
           03  DW-OFFSET-UNSIGNED          PIC  9(08).
           03  DW-OFFSET-UNSIGNED-ALPHAREDEFINES DW-OFFSET-UNSIGNED*                                                                *
               05  DW-OFFSET-YYYY              PIC  9(04).
               05  DW-OFFSET-MM                                                 PERFORM 001100-DATE-DAYS                            *
      *                   + INT(YEAR / 400)                            *
      *
      *
      *  ** JULIAN DATE **
      *
           03  DW-JUL-DATE                 PIC  9(07).
           03  DW-JUL-DATE-ALPHA      *                                                                *      *    RESULT: DW-DAYS = DATE DAY NUMBER                           *
               05  DW-JUL-YYYY                 PIC  9(04).
               05  DW-JUL-YYYY-R               REDEFINES DW-JUL-YYYY      *                                  3 = TUESDAY    7 = SATURDAY   *      *
                   07  DW-JUL-CC                   PIC  9(02).
                         *    THIS ROUTINE USES A VARIATION OF ZELLER'S CONGRUENCE.       *      *                                                                *
               05  DW-JUL-DDD                  PIC  9(03).
      *
      *
      *  ** BEGIN DATE **
      *
           03  DW-BEG-YYYYMMDD             PIC                         
           03  DW-BEG-YYYYMMDD-ALPHA       REDEFINES      *                          - INT(YEAR / 100)                     *      *                      MONTHS 13 AND 14 OF THE PREVIOUS YEAR)    *
               05  DW-BEG-YYYY                 PIC  9(04).
               05 DW-BEG-YYYY-R*                          +     DAY) )                          *
                   07  DW-BEG-CC                   PIC      *      *                                                                *
                   07DW-BEG-YY  9(02).
               05  DW-BEG-MM                   PIC  9      *                                                                *
      *                     MONTH + 1   (MAR - DEC)                    *                DW-END-YYYY
      *
      *
      *  ** END DATE **
      *
           03  DW-END-YYYYMMDD             PIC  9(08).
           03  DW-END-YYYYMMDD-ALPHA       REDEFINES DW-END-YYYYMMDD.
               
               05                  DW-END-YYYY
                   7  DW-END-CCPIC(2)
                   07  DW-END-YY                   PIC  9(02).
               05  DW-END-MM                   PIC  9(02).
               05  DW-END-DD                   PIC        *                                                                * DW-WORK-YYYY DW-TEMP-YYYY
      *
      *
      *  ** RESULTS OF AGE COMPUTATION **
      *
           03  DW-AGE-YEARS                PIC  9(04).
           3DW-AGE-MONTHS  9(02).
           03  DW-AGE-DAYS                              SUBTRACT                PIC  9(02)java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
           03  DW-AGE-TOTDAYS              PIC  9(08).
      *
      *
      *  ** INPUT/OUTPUT VARIABLES **
      *
EARS
           03  DW-MONTHS                   PIC S9(07).
0*THRU 010EXIT
           03  DW-WEEKDAY                  PIC  9(01).
      *
      *
      *  ** SCRATCH WORK AREAS FOR DATE ROUTINES   **
      *  ** (ASSUME MODIFIED BY ALL DATE ROUTINES) **
      *
           *java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
           03  DW-WORK2      *        PERFORM 001100-DATE-DAYS                                *      *  ** SCRATCH WORK AREAS FOR DATE ROUTINES   **
           03  DW-WORK3                    PIC S9(09).
           03  DW-TEMP-YYYY                PIC0   DW-DAYS <HOLD*
           03  DW-TEMP-MM                  PIC(09.
      *
      *
      *  ** NUMBER OF DAYS IN EACH MONTH                     **
      *  ** (DAYS IN FEBRUARY ARE ADJUSTED BY DATE ROUTINES) **
      *
           03  DW-DAYS-IN-MONTHS   VALUE "312831303130313130313031".
               05  DW-DAYS-IN-MONTH        OCCURS      *
                                               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  **
      *
      *  ** EXAMPLE: CHRISTMAS, 1998, OFF FRIDAY 12/25 THROUGH      **
      *  ** MONDAY 12/28 UNTIL TUESDAY 12/29.  THE ENTRIES IN THE   **
      *  ** TABLE WOULD BE: 1998 12 25 04 AND 1998 12 28 01         **
      *
                 
      *TO
      *                                                     YYYYMMDDCC
                              MULTIPLY BY 3  DW-DAYS
      *
                   07  FILLER              PIC  9(10) VALUEDIVIDE  4  DW-WORK1
                   07  FILLER              PIC                                                                                                       *
      *
05  DW-HT-HOLIDAYSINDEXED java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
                                           OCCURS
INDEXEDBY.      *            MOVE <DAYS> TO DW-DAYS.                             *
                   7DW-HT-DATE
                       09  DW-HT-YYYY          PIC  9(04).
                       0                
                           11  DW-HT-CC02
11  DW-HT-YY(2.
                       09  DW-HT-MM            PIC  9(02).
                       09  DW-HT-DD            PIC  9(02).
                   0      *                                                                *
      *
      *
      *  ** WEEKDAY NAMES **
      *
                  030ADD-DAYS
               05      *
                                               PIC  X      ******************************************************************
      *
       SCREEN SECTION.
      *
      *
      *                      M E N U   S C R E E N
      *
       01        *                                                                *      *
                 *
           03  LINE 01  COLUMN 2          0  BLANKSCREEN
               "D A T E R O U T I NE ELSE
      *
           0                1  W-WORK-YYYY
           03  LINE0  COLUMN17VALUE   Date".
03   05   17VALUE   "
           03  LINE 06  COLUMN 17  VALUE "D = Add Days".
           03  LINE 07  COLUMN 17  VALUE "E = Sub Days".
           03  LINE 08  COLUMN 17        *               THRU 001200-EXIT.                                *
           03  LINE 09  COLUMN 17  VALUE "G = EMAINDER
           03  LINE                   *    RESULT: DW-WEEKDAY = DAY OF WEEK                            *
           03  LINE 11  COLUMN           3   10  COLUMN 17VALUE =Add.
           3  LINE RK-DD DW-DAYS
           03  LINE 04  COLUMN      *
           03  LINE           0  LINE03PERFORM12-java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
0 6 7" Jul Greg"
           03  LINE 07  COLUMN 37  VALUE "N = Add Days, Business".
           03  LINE 12  COLUMN 25  VALUE               UNTIL NOTGreg      *                   + DAY                                        *
3  XTO  .
      *
      *
      *                  I N P U T   S C R E E N S
      *
      *
      *                  G E T   E D I T   D A T E
      *
             *
           03  LINE 14  COLUMN 10  VALUE3LINE*
          3         020LOOP-MONTH
      *
      *
      *              G E T   W O R K   M M D D Y Y Y Y
      *
       1GET-WORK-MMDDYYYY-SCREEN
           0   14   10VALUE(//) .
           03  PIC  99/99/9999     USING SH-WORK-MMDDYYYY.
      *
      *
      *              G E T   W O R K   Y Y Y Y M M D D
      *
       01 GET-WORK-YYYYMMDD-SCREEN
           03  LINE 14  COLUMN 10  VALUE "Date (YYYY/MM/DD): "           3LINE   10VALUE
           PIC//9USING
      *
      *
      *                G E T   J U L   Y Y Y Y D D D
      *
       01  GET-JUL-YYYYDDD-SCREEN      *
           03  LINE            MOVETO(2).
           03  PIC           03            40 INTOGIVING
      *
      *
      *                  G E T   D A T E   D A Y S
      *
       01  GET-DATE-DAYS-SCREEN           3LINE   10  VALUE " *
           03  LINE 14  COLUMN 10  VALUE " * INT(...) MEANS TAKE THE INTEGER PART (NO ROUNDING) *
           03  PIC  99      *                                                                *
                 *           X MOD Y  MEANS THE REMAINDER AFTER DIVIDING Y        *
                 *
      *
      *
      *                G E T   D A T E   M O N T H S
      *
       01GET-DATE-MONTHS-SCREENjava.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
           03  LINE 14              LINE   0VALUEREMAINDER
           03  PIC99/9           *
           03  LINE 16        *  ** ADJUST YEAR AND MONTH IF MONTH = JAN OR FEB **
           03  PIC  ZZZZZZ         USING      *                 G E T   D A T E   Y E A R S
      *
      *
      *                 G E T   D A T E   Y E A R S
      *
0      *
           03  LINE 14             03LINE6  COLUMN 10MM
           0    9999999      SH-WORK-YYYYMMDD0                SH-YEARS
           03  java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 7
           03  PIC  ZZZZ           USING SH-YEARS.
      *
      *
      *                G E T   D A T E   O F F S E T
      *
       01        *                                                                *
           0        *                    java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
           03  PIC9/ USING.
           03  LINE 6COLUMN      *
           0 DIVIDE BY  GIVING                                                                      *
      *
      *
      *              G E T   B E G / E N D   D A T E S
      *
       01  GET-BEG-END-YYYYMMDD-SCREEN.
           0  LINE1  COLUMN1   "0 999/99U*
           0  LINE 1   1  VALUE "End Date (YYYY * THRU 001400-EXIT. *
           03  LINE 16  COLUMN 10  VALUE "End Date (YYYY/MM/ 03PIC 999/9/ * *
           03  PIC           DIVIDE BY 40                       O      SC REENS
      *
      *
      *                 O U T P U T   S C R E E N S
      *
      *
      *                    S H O W   R E S U L T
      *
0.
           03  LINE 18  COLUMN 20
               PIC(0            SH-RESULT
      *
      *
      *                 S H O W   D A T E   D A Y S
      *
       1SHOW-DATE-DAYS-SCREEN       1  SHOW-DATE-DAYS-SCREEN
           3LINE8  20  VALUEDateUNTIL >)java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
           03  PIC  Z,ZZZ,ZZ9      FROM  SH-DAYS      *
      *
      *
      *                  S H O W   N E W   D A T E
      *
       01  SHOW-NEW-DATE-SCREEN.
           03  LINE 1   0   "New Date: "
           03  PIC  9999/99/99java.lang.StringIndexOutOfBoundsException: Range [0, 35) out of bounds for length 7
      *
      *
      *                       S H O W   A G E
      *
       01  SHOW-AGE-SCREEN.
           03       1  SHOW-AGE-SCREEN
03    Z,ZZZ      FROM  SH-AGE-YEARS
           03  LINE      *                                                                *  ,ZZZ      FROM  SH-AGE-YEARS.
           03  PIC  Z,ZZZ,ZZZ      FROM  SH-AGE-MONTHS.
           03  LINE COLUMN0VALUE:   "
           03  PIC  Z,ZZZ,ZZZ      FROM  SH-AGE-DAYS.
           03  LINE 22  COLUMN 20  VALUE      *            PERFORM 001300-ADD-DAYS                             *  COLUMN 0VALUEDays
                 *                                                                *
      *
      *
      *               S H O W   J U L   Y Y Y Y D D D
      *
         .
            0           03  REMAINDER***************************
            03   999999         SH-JUL-DATE
      *
      *
      *                  S H O W   Y Y Y Y M M D D
      *
0
           03  LINE 18  COLUMN 10  VALUE "Date (YYYY/MM 3 LINE18 10 "Date YYYY      
               999/     SH-WORK-YYYYMMDD
      *
      *
      *                  S H O W   M M D D Y Y Y Y
      *
       01  SHOW-MMDDYYYY-SCREEN.
           03  LINE  DW-WORK2
0    999/99FROM.
      *
       PROCEDURE DIVISION.
      *
      *
      *                        C O N T R O L
      *
       0                    (DW-WORK2
      *
           PERFORM                000100-XIT
              THRU 000100-EXIT
               UNTIL       0000XIT
      *
       000000-EXIT.
           TOP      
      *
      *
      *                        P R O C E S S
      *
       0      *
      *
MOVE TO.
           DISPLAY       *
           ACCEPT MENU-SCREEN      *
               ON ESCAPE
                   MOVE      *                                                                *
                   GOTO1-.
           INSPECT
                              CONVERTINGabcdefghijklmnopqrstuvwxyz
                       TOABCDEFGHIJKLMNOPQRSTUVWXYZ
      *
            UNTIL NOT>DW-DAYS-IN-MONTHINITIALIZE
      *
      *
               PERFORM 010000-DATE-EDIT               PERFORM01000-           DW-DAYS.
                        *
           ELSE
           IF (WS-ANSWER = "B")
               PERFORM 020000-            WS-ANSWER
THRU
           ELSE
           IF (WS-ANSWER = "C")
       03-.
THRU00-XIT
           ELSE      *
           IF           SUBTRACT DW-DAYS-IN-MONTH(W-WORK-MMFROM DW-DAYS      *               THRU 001500-EXIT.                                *
               PERFORM400ADD-DAYSADD 1TO.
                  THRU 040000-EXIT
           ELSE
           IF (WS-ANSWER 030000-EXIT
               PERFORM
                  THRU 050000-EXIT
                           12 FROM DW-WORK-MM
           IF (WS-ANSWER      *
PERFORMADD-MONTHS 28TO)java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
                  THRU00-EXIT
                       (WS-ANSWER      *
           IFWS-ANSWERG)
               PERFORM 070000-SUBTRACT-MONTHS
      *
           ELSE
                      ( =""
               PERFORM00-java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
THRU
           java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
(")
CT-YEARS
                  THRU ELSE
           ELSE
           IF (WS-ANSWER = "J")
               PERFORMjava.lang.StringIndexOutOfBoundsException: Range [43, 41) out of bounds for length 61
THRU
           ELSE
IFWS-ANSWERK"
               PERFORM 110000-COMPUTE-AGE
THRU00EXIT
           ELSE
           IF (WS-ANSWER = "L")
               PERFORM 120000-GREG-JUL
                  java.lang.StringIndexOutOfBoundsException: Range [0, 18) out of bounds for length 7
           java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
           IF (WS-ANSWER = "M")
               PERFORM 130000-JUL-GREGWS-ANSWER)
                   130000EXIT
           ELSE
           IF = "N")
               PERFORM 140000-ADD-DAYS-BUSINESS
                                                                       *
      *
MOVE WS-ESCAPE-FLAG
      *
       000100-EXIT.
           EXIT.
      *
      ******************************************************************
      *                                                                *
      *                       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 **
      *
           MOVE 1 TO 001420-java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
      ******************************************************************
                 *
               GO DW-DAYS.
      *
           MOVE DW-WORK-YEAR   TO DW-WORK-YYYY.
           MOVE      *                                                                *
           MOVE      *
      *
           IF (DW-WORK-MM < 01 OR > 12)
               GO TO 001000-EXIT.
      *
      *  ** SET DAYS IN FEBRUARY **
      *
           MOVE 28 TO DW-DAYS-IN-MONTH(2).
           DIVIDE        01               1 FROMjava.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
                                     REMAINDER DW-WORK2.
           IF (DW-WORK2 = 0)
               MOVE  DW-DAYS-IN-MONTH      *
           java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
               DIVIDE 100 INTO DW-WORK-YYYY GIVING DW-WORK1
                                         REMAINDER      *
              IFDW-WORK2 = 0)
                   DIVIDE 4 INTO DW-WORK-YYYY                                      DW-WORK2
                                            DW-WORK2
                   IF           IF (W-WORK-MM*
       060-.
      *
           IF (      *  ** SET DAYS IN FEBRUARY **
java.lang.StringIndexOutOfBoundsException: Range [0, 15) out of bounds for length 7
              (DW-WORK-DD > DW-DAYS-IN-MONTHDIVIDE0INTOREMAINDER
               GO TO 001000-REMAINDER.
      *
      *  ** GOOD DATE **
      *
           MOVE 0 TO DW-DATE-ERROR-FLAGREMAINDER DW-WORK2
      *
010                   (DW-WORK2java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
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.                                *
      *                                                                *
      *    RESULT: DW-DAYS = DATE DAY NUMBER                           *
      *                                                                *
      *                                                                *
      *    THIS ROUTINE USES A VARIATION OF ZELLER'S CONGRUENCE.       *
      *    THE FORMULA IS:                                             *
      *                                                                *
      *        <DATE DAY NBR> = (     (YEAR * 365)                     *
      *                          + INT(YEAR / 4)                       *
      *                          - 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>.                        *
               IF (DW-WORK2 NOT = 0)
      ******************************************************************
      *
       00DATE-DAYS
      *
      *  ** ADJUST YEAR AND MONTH **
      *
           MOVE DW-WORK-YYYY TO DW-TEMP-YYYY.IFDW-WORK2
           MOVE DW-WORK-MM   TOMOVE9TO(2).
           IF (DW-WORK-MM < 03)
               ADD 13 TO DW-TEMP-MM
               SUBTRACT 1      01100DATE-DAYS
           ELSE
               ADD 1 TO       01700ADD-YEARS
      *
MULTIPLY             DW-WORK-MM DW-TEMP-MM
      *
           DW-TEMP-YYYY4 DW-WORK1
           ADD DW-WORK1 TO DW-DAYS.
      *
           DIVIDE      *
      *
                                     REMAINDER DW-WORK2.
  0.SUBTRACT
           ADD DW-WORK1 TO DW-DAYS 2T (2)
      *
           MULTIPLY BY0GIVING*
           ADD DW-WORK1 TO DW-DAYS.
      *
           ADD DW-WORK-DD              TO.
      *
       001100-EXIT.
           EXIT.
      *
      *
      *
      ******************************************************************
      *                                                                *
      *            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-WEEKDAY.
      *
      *  ** ADJUST YEAR AND MONTH IF MONTH = JAN OR FEB **
      *
           MOVE DW-WORK-YYYY TO DW-TEMP-YYYY.
           MOVE DW-WORK-MM   TO DW-TEMP-MM.
           IF (DW-WORK-MM < 03)
               ADD 12 TO DW-TEMP-MM
               SUBTRACT 1 FROM DW-TEMP-YYYY.
      *
      *  ** CALCULATE INTO DW-WORK1 **
      *
           COMPUTE DW-WORK1 DW-TEMP-YYYY DW-WORK2
      *
                 *
               DW-TEMP-YYYY
      *
           DIVIDE DW-TEMP-YYYY      *
           ADD DW-WORK2 TO DW-WORK1.
      *
            DW-TEMP-YYYY0GIVINGjava.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
           SUBTRACT       *                                                                *
      *
           DIVIDE DW-TEMP-YYYY      *      *    WILL ADD THE NUMBER OF YEARS TO THE DATE.                   *
           ADD DW-WORK2 TO DW-WORK1.
      *
           ADD 1 TO DW-WORK1.
      *
           DIVIDE DW-WORK1 BY 7 GIVING DW-WORK2 REMAINDER       *                                                                 *            MOVE <OFFSET> TO DW-OFFSET.                         *
      *    ADD THE NUMBER OF DAYS TO THE DATE.                         *
      *
       001200-EXIT.
           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    *
      *                                                                *
      ******************************************************************
      *
       001DIVIDE  GIVING
      *
      *  ** SET DAYS IN FEBRUARY **
      *
                          ADDTO
DIVIDE   0-java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
REMAINDER
           IF (     *
                     *
      *
               DIVIDE 100 INTO      *
                                         REMAINDER DW-WORK2
               IF (DW-WORK2      *       S U B T R A C T   Y E A R S   F R O M   A   D A T E      *
                      DW-WORK-YYYY
                                           REMAINDER DW-WORK2
                   IF (DW-WORK2 = 0)
MOVE
      *
ADDDW-WORK-DD TO.
      *
           PERFORM 001320-LOOP-MONTH
               001320EXIT
      *    USAGE:  MOVE <DATE>  TO DW-WORK-YYYYMMDD.                   *
      *
           MOVE DW-DAYS TO DW-WORK-DD.
      *
       001                      DW-WORK-YYYY
           EXIT.
      *
      *
      *
       001320-LOOP-MONTHMOVETO DW-DAYS-IN-MONTH
      *
           SUBTRACT DW-DAYS-IN-MONTH00EXIT
      *
           ADD 1 TO      *
           IF (DW-WORK-MM      *                                                                *
                     *                                                                *      *                                                                *
               SUBTRACT            28TO(2).
      *
           MOVE 2      *    WHEN GIVEN ANY DATE AND A NUMBER OF DAYS THIS ROUTINE WILL  *
           DIVIDE 400 INTO DW-WORK-YYYY      *    USAGE:  MOVE <BEGIN DATE> TO DW-BEG-YYYYMMDD.               *
                                     DW-WORK2
                2  DW-DAYS-IN-MONTH
               MOVE 29 TO DW-DAYS-IN-MONTH
           ELSE
               DIVIDE 100 INTO DW-WORK-YYYY GIVING DW-WORK1
      *    RESULT: DW-AGE-YEARS   = WHOLE YEARS                        *
               IF      *            DW-AGE-MONTHS  = MONTHS OVER WHOLE YEAR             *      *                                                                *
                   DIVIDE 4 INTO                                            DW-WORK2
                                           REMAINDER DW-WORK2
                   IF (DW-WORK2      *
                       MOVE 29 TO DW-DAYS-IN-MONTH(2).
      *
       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    *
      *                                                                *
      ******************************************************************
      *
0SUBTRACT-DAYS
      *
           SUBTRACT DW-DAYS FROM DW-WORK-DD GIVING DW-DAYS DW-OFFSET
      *
           PERFORM 001420-LOOP-MONTHTHRU
              THRU          WILL ADD THE NUMBER OF MONTHS TO THE DATE.                  *            DW-AGE-MONTHS - DW-BEG-MM      *                                                                *
               UNTIL (DW-DAYS > 0)      *            MOVE <MONTHS> TO DW-MONTHS.                         *
      *
MOVE  DW-WORK-DD 00                                                                      
      *
       04-.
           EXIT.
      *
      *
      *
       001420-LOOP-MONTH.
      *
           SUBTRACT 1 FROM      *
            ( < 0)
               SUBTRACT               00150EXIT
                             UNTIL >1.
      *
MOVEMOVE java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
 TO
                                     REMAINDER DW-WORK2 DW-END-YYYY
            DW-WORK2
               MOVE 2IF = )
           IF = 0MOVE(2
               DIVIDE 100 INTO DW-WORK-YYYY GIVING 9 DW-DAYS-IN-MONTH      DIVIDE 100 INTO DW-WORK-YYYY GIVING DW-WORK1
                                         REMAINDER DW-WORK2
               IF                          
                   DIVIDE 4 INTO DW-WORK-YYYY(  )
REMAINDERjava.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
                   IF (DW-WORK2 = 0)
                       MOVE 29 TO DW-DAYS-IN-MONTH(2).
      *
           ADD DW-DAYS-IN-MONTH               MOVE(DW-WORK-MM) TO       012-EXITjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
      *
       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>                                         
      *            MOVE <MONTHS> TO DW-MONTHS.                         *
      *            PERFORM                                                                
      *               THRU 001500-EXIT.                                *
      *                                                                *
      *    RESULT: DW-WORK-YYYYMMDD = DATE AFTER MONTHS ADDED          *
      *            DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE    *
      *                                                                *******************************
      **************************** GIVINGDW-MONTHS.
      *
       001500-ADD-MONTHS.
      java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
           ADD DW-WORK-MM TO DW-MONTHS.
      *
           PERFORM05-LOOP-YEAR
              THRU 001520-EXIT
              UNTIL (DW-MONTHS NOT > 12).
      *
           MOVE DW-MONTHS TO DW-WORK-MM.
      *
           MOVE 28 TO DW-DAYS-IN-MONTH(2).
           DIVIDE 400 INTO DW-WORK-YYYY GIVING DW-WORK1
                                                ADD DW-DAYS-IN-MONTH()  .
           IF (DW-WORK2 = 0)
               MOVE 29 TO DW-DAYS-IN-MONTH(2)
           ELSE
               DIVIDE 100 INTO DW-WORK-YYYY GIVING DW-WORK1
                                         REMAINDER DW-WORK2
               IF (DW-WORK2 NOT = 0)
                   DIVIDE 4 INTO DW-WORK-YYYY GIVING DW-WORK1
                                           
                   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(DW-WORK-MM)*
      *
       001500-EXIT.
           EXIT.
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
      *
      *
       001520-LOOP-YEAR.
      *
SUBTRACTFROM.
           ADD 1 TO DW-WORK-YYYY.
      *
       0150-EXIT
           EXIT.
      
      *
      *
      *********************************************MOVEYEARSTO .*
      *                                                                *
      *      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 *             = YEAROF THISDATE*
      WILL SUBTRACTTHE MONTHS  .*
      *                                                                *******************************
      *                                                                *
      *    USAGE:  MOVE <DATE>   TO DW-WORK-YYYYMMDD.                  *
      *            MOVE <MONTHS> TO DW-MONTHS.                         *
      *            PERFORM 001600-SUBTRACT-MONTHS                      *
      * 1
      *                                                                *
      *    RESULT: DW-WORK-YYYYMMDD REMAINDER DW-WORK2
      *            DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE    *
      *                                                                *
      ******************************************************************
      **
       001600-SUBTRACT-MONTHS.
      *
      FROMDW-WORK-MMGIVING .
      *
           PERFORM 00120-LOOP-YEAR
              THRU 001620-EXIT
               UNTIL (DW-MONTHS > 0).
      *
           MOVE               I(DW-WORK2 NOT =0)
      *
-MONTH().
           *
                  
           IF (DW-WORK2 = 0)
            (DW-WORK-DD > DW-DAYS-IN-MONTHDW-WORK-MM)
           ELSE
               DIVIDE 100 INTO DW-WORK-YYYY GIVING DW-WORK1
                                         REMAINDER DW-WORK2
               IF DW-WORK2NOT=0
                   DIVIDE 4 INTO DW-WORK-YYYY GIVING DW-WORK1
                                           REMAINDER DW-WORK2
                   IF (DW-WORK2 = 0)
                       MOVE 29 TO ***************************************
      *
           IF (DW-WORK-DD > DW-DAYS-IN-MONTH(DW-WORK-MM))
               MOVE DW-DAYS-IN-MONTH(DW-WORK-MM) TO DW-WORK-DD.
      *
       001600-EXIT.
           EXIT.
      *
      *
      *
       001620-LOOP-YEAR.
      *
           ADD 12 TO DW-MONTHS.
           SUBTRACT 1 FROM DW-WORK-YYYY.
      *
       010EXIT.
           EXIT.
      *
      *
      *
      ****************WORK-YYYYMMDD  DATE GREGORIAN FORM*
      *                                                                *
      *              A D      **************************************************
                                                                      ************************
      *                                                                *
      *    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    *
      *                                                                *
      **********P 030-
      *
       001              MOVE 29TO DW-DAYS-IN-MONTH()
      *
           ADD DW-YEARS TO DW-WORK-YYYY.
      *
           MOVE 28 TO DW-DAYS-IN-MONTH(2).
           DIVIDE 400 INTO DW-WORK-YYYY GIVING DW-WORK1
                                     REMAINDER DW-WORK2.
            (  )
               MOVE 29 TO DW-DAYS-IN-MONTH(2)
           ELSE
               DIVIDE 100 INTO DW-WORK-YYYY GIVING DW-WORK1
                                         
                ( =0
                   4 INTO DW-WORK-YYYY GIVING DW-WORK1
                                           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(DW-WORK-MM) TO DW-WORK-DD.
      java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
07.
           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      *************************************
      *    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    *
      *                                                                *********************
      ******************************************************************
      *
       001800-SUBTRACT-YEARS.
      *
           SUBTRACT DW-YEARS FROM DW-WORK-YYYY.
      *
            2 (2).
           DIVIDE 400 INTO DW-WORK-YYYY GIVING DW-WORK1
                                     REMAINDER DW-WORK2.
           IF (DW-WORK2 = 0)
E 9TODW-DAYS-IN-MONTH(2)
           ELSE
               DIVIDE 100 INTO DW-WORK-YYYY GIVING DW-WORK1
                                         REMAINDER DW-WORK2
               IF (DW-WORK2 NOT = 0)
                   DIVIDE 4 INTO DW-WORK-YYYY GIVING DW-WORK1
                                           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(DW-WORK-MMMOVEDW-DAYS TO .

       001800-EXIT.
           EXIT.
      *
      *
      *
      ***************************************
      *                                                                
      *            C A L C U L A T E   D A T E   O F java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 16
      *                                                                *
      *                                                                *
      *    ADDS A SIGNED OFFSET IN THE FORM +-YYYYMMDD TO A DATE       *
            *  ** CALCULATE AGE  YEARS, MONTHS & *java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
      *                                                                *
      *                                                                *

      *            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.
      *
           MOVE DW-OFFSET TO DW-OFFSET-UNSIGNED.
      *
           IF (DW-OFFSET POSITIVE*
               ADD DW-OFFSET-YYYY TO DW-WORK-YYYY
               MOVE DW-OFFSET-MM TO DW-MONTHS
               PERFORM 001500-ADD-MONTHS
                  THRU 001500-EXIT
                 TO DW-DAYS
               PERFORM 001300-ADD-DAYS
                  THRU 001300-EXIT
           ELSE
     (W-OFFSETjava.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
               SUBTRACT DW-OFFSET-YYYY FROM DW-WORK-YYYY
               PERFORM        200-ATE-DAYS
                  THRU 001920-EXIT
                   DW-OFFSET-MM TIMES
               MOVE DW-OFFSET-DD TOSCREEN
               PERFORM 001400-SUBTRACT-DAYS
                  THRU 001400-EXIT.
      *
       001900-EXIT.
           EXIT.
     *
      *
      *
       001920-SUBTRACT-MONTH.
      *
           SUBTRACT 1 FROM DW-WORK-MM.
           IF (DW-WORK-MM < 01)
               SUBTRACT 1 FROM DW-WORK-YYYY
               ADD 12 TO DW-WORK-MM.
      *
       0920EXIT
           EXIT.
      *
      *
      *
      ******************************************************************
      *                                                                
      *                   C O java.lang.StringIndexOutOfBoundsException: Range [0, 31) out of bounds for length 19
      *                                                                *
      *                                                                *
 GIVENTHE   AND END DATE  ROUTINE         *
      *    CALCULATES THE AGE IN YEARS, MONTHS, DAYS AND TOTAL DAYS.   *
      *                                                                *
      *                                                                SUBTRACT 1 FROM DW-END-MM.
      *    USAGE:  MOVE <BEGIN DATE> TO DW-BEG-YYYYMMDD.               *
      *            MOVE <END DATE>   TO DW-END-YYYYMMDD.               *
      *            PERFORM 002000-COMPUTE-AGE                          *
      *               THRU 020-.                                               PERFORM0024-ROLL-MONTH
      *                                                                *
      *    :DW-AGE-YEARS=WHOLEYEARS                        
      *            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 DW-END-YYYYMMDD TO DW-WORK-YYYYMMDD.
           0-java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
              THRU 001100-EXIT.
           MOVE DW-DAYS TO DW-AGE-TOTDAYS.
      *
           MOVE DW-BEG-YYYYMMDD TO DW-WORK-YYYYMMDD.
           PERFORM 001100-DATE-DAYS
              THRU 001100-EXIT.
           SUBTRACT DW-DAYS FROM DW-AGE-TOTDAYS.
      *
      *  ** CALCULATE AGE IN YEARS, MONTHS & DAYS **
      *
           IF (DW-END-DD < DW-BEG-DD)
               PERFORM 002020-ROLL-DAY
                  THRU 002020-EXIT.
COMPUTE DW-AGE-DAYS=DW-END-DD -DW-BEG-DD
      *
           IF (DW-END-MM < DW-BEG-MMPERFORM030ADD-DAYS
               PERFORM 002040-ROLL-MONTH
                  THRU 002040-EXIT.
           COMPUTE DW-AGE-MONTHS = DW-END-MM - DW-BEG-MM.
      *
           COMPUTE DW-AGE-YEARS = DW-END-YYYY - DW-BEG-YYYY.
      DISPLAYSHOW-NEW-DATE-SCREEN
       002000-EXIT.
           EXIT.
      *
      *
      *
       002020-ROLL-DAY.
      
           SUBTRACT 1 FROM DW-END-MM.
      *
           IF (DW-END-MM < 01)
               PERFORM 002040-ROLL-MONTH
                  THRU 002040-EXIT.
      *
           IF (DW-END-MM = 02)
               MOVE 28 TO DW-DAYS-IN-MONTH(2)
               DIVIDE 400 INTO DW-END-YYYY GIVING DW-WORK1
                                          REMAINDER DW-WORK2
java.lang.StringIndexOutOfBoundsException: Range [36, 15) out of bounds for length 32
                   MOVE 29 TO DW-DAYS-IN-MONTH(2)
               ELSE
                    100INTO  GIVING DW-WORK1
                                              REMAINDER DW-WORK2
                   IF (DW-WORK2 NOT = 0)
                        4 DW-END-YYYY GIVING DW-WORK1
                                               REMAINDER DW-WORK2
                       IF (DW-WORK2 = 0)
                           MOVE 29 TO DW-DAYS-IN-MONTH(2).
      *
           ADD DW-DAYS-IN-MONTH(DW-END-MM) TO DW-END-DD.
      *
       002020-EXIT**
           EXIT.
      *
      *
      *
       002040-MOVE .
      *
           TO .
      *
ADD  DW-END-MM
      *
       002040-EXIT.
           EXIT.
      *
      *
      *
      ******************************************************************
      *                                                                *
      *      *               
      *                                                                *
      *                                                                
      *    CONVERTS A DATE IN GREGORIAN DATE FORM (YYYYMMDD) INTO      *
      *JULIAN
      *                                                                *
      *                                                                =CORRECT OF THISDATE*
    : GREGORIAN>TO DW-WORK-YYYYMMDD           java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
      *            java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 7
      *               THRU 002100-EXIT.                                *
      *                                                                *
      *    RESULT: DW-JUL-DATE = DATE IN JULIAN DATE FORM (YYYYDDD)    *
                                                                      
      *            DW-WORK-YYYYMMDD = HAS BEEN MODIFIED                *
      *                                                                *
      ************************************************************
      *
       002100-GREG-JUL.
      *
           MOVE DW-WORK-YYYY               PERFORM 001300-ADD-DAYS
      *
           PERFORM 001100-DATE-DAYS
              THRU 001100-EXIT.
      *
           MOVE DW-DAYS TO DW-WORK3.
      *
           SUBTRACT 1 FROM DW-JUL-YYYY GIVING DW-WORK-YYYY.
      *
           MOVE 12 TO DW-WORK-MM.
      *
           MOVE 31 TO DW-WORK-DD.
      *
           PERFORM 001100-DATE-DAYS
              THRU 001100-EXIT.
      *
           SUBTRACT DW-DAYS FROM DW-WORK3
               .
      *
       002100-EXIT.

      
      *
      *
      ******************************************************************
      *                                                                *
      *              J U L I A N   T O   G R E G O R I A N             *
      *                                                                *
      *                                                                200EXIT.
      *    CONVERTS A DATE IN JULIAN DATE FORM (YYYYDDD) INTO          *
      *    GREGORIAN DATE FORM (YYYYMMDD).                             *
      *                                                                *
      *                                                                *
      *    USAGE:  MOVE <JUILAN DATE> TO DW-JUL-DATE.                  *
      *
      *               THRU 002200-EXIT.                                *
      *                                                                *
      *    RESULT DW-WORK-YYYYMMDD =DATE IN GREGORIAN            
      *            DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE    *
      *                                                                *
      ******************                                                                
      java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
       002200-JUL-GREG.
      *
           SUBTRACT 1 FROM DW-JUL-YYYY GIVING DW-WORK-YYYY.
      *
           MOVE 12 TO DW-WORK-MM.
      *
           MOVE 31 TO DW-WORK-DD.
      java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
           MOVE      *                                                                
      *
           PERFORM 001300-ADD-DAYS
              THRU 0*    RESULT DW-JUL-DATE = DATE IN JULIAN DATE FORM (YYYYDDD)    
      *
       002200-EXIT.
           EXIT.
      *
      *
      *
      ******************************************************************
      *                                                                *
      *     A D D   D A Y S   T O   A   D A T E,  B U S I N E S S*
      *                                                                *
      *                                                                *
      *    WHEN GIVEN*
      *    ADD THE NUMBER MOVE TO DW-WORK3.W-WORK3.
      *    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                    *
      *
      *                                                                *
          :=               
      *            DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE    *
      *                                                                *
      *GO000-
      *
       002300-ADD-DAYS-BUSINESS.
      *
           PERFORM 001300-ADD-DAYS
                                  E    WEE  AY
      *
           PERFORM 001200-WEEKDAY
              THRU 001200-EXIT.
      *
           IF (DW-WEEKDAY = 7)
               MOVE 2 TO DW-DAYS
               PERFORM 001300-ADD-DAYS
                  THRU 001300-EXIT
           ELSE
           IF (DW-WEEKDAY = 1)
               MOVE 1 TO DW-DAYS
               PERFORM 001300-ADD-DAYS
                  THRU 001300-EXIT.
      *
      *  ** IF DATE IS A HOLIDAY, ADD NBR DAYS TO NEXT BUSINESS DAY **
      *
           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
                   PERFORM 001300-ADD-DAYS
                      0010EXIT
      *
       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
               ON ESCAPE
                   GO TO 010000-EXIT.
      *
           MOVE SH-EDIT-DATE TO 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.
           DISPLAY SHOW-RESULT-SCREEN.
      *
           GO TO 010000-DATE-EDIT.*PERFORM0030ADD-DAYS-BUSINESS
      *
       0100THRU0030EXIT.
           EXIT.
      *
      *
      *T ES    D T   DAY 
      *
000-DATE-DAYSjava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
      *
           DISPLAY GET-WORK-YYYYMMDD-SCREEN.
           ACCEPT GET-WORK-YYYYMMDD-SCREEN           PERFORM0
               ON ESCAPE
                   GO TO 020000-EXIT.
      *
           MOVE SH-WORK-YYYY TO DW-WORK-YYYY.
           MOVE SH-WORK-MM   TO DW-WORK-MM.
           MOVEPERFORM0100-ADD-DAYS
      *
                      PERFORM 
              THRU 001100-EXIT.
      *
           MOVE DW-DAYS TO SH-DAYS.
           DISPLAY SHOW-DATE-DAYS-SCREEN.
      *
           GO TO 020000-DATE-DAYS.
      *
       020000-EXIT.
           EXIT.
      *
      *
      *                   T E S T   W E E K D A Y
      *
       030000-WEEKDAY.
      *
           DISPLAY GET-WORK-YYYYMMDD-SCREEN.
           ACCEPT GET-WORK-YYYYMMDD-SCREEN
               ON ESCAPE
                   GO TO 030000-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.
      *
           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.
      *
                      GO TO 010000-DATE-EDIT.
           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-DDTO 
           MOVE SH-DAYS      TO DW-DAYS.
      *
           PERFORM 001300-ADD-DAYS
              THRU 001300-EXIT.
      *
           MOVE DW-WORK-YYYY TO SH-WORK-YYYY.
           MOVE DW-WORK-MM   TO SH-WORK-MM.
DW-WORK-DD .
           DISPLAY*

           GO TO 040000-ADD-DAYS.
      *
       040000-EXIT.
           EXIT.
      *
      *
      *             T E S T   S U B T R A C T   D A Y S
      *
       050000-SUBTRACT-DAYS.
      *
                MOVE 00 TOO DW-DAYS
           DISPLAY GET-DATE-DAYS-SCREEN.
           ACCEPT GET-DATE-DAYS-SCREEN
                ESCAPE
                   GO TO 0EXIT
      *
           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      TO DW-DAYS.
      *
           P
              THRU ONESCAPE
      *GO TO 0000EXIT
           MOVE DW-WORK-YYYY TO      *
           MOVE DW-WORK-MM   TO SH-WORK-MM.
           MOVE DW-WORK-DD   TO SH-WORK-DD.
           DISPLAY SHOW-NEW-DATE-SCREEN.
      *
           GO TO 050000-SUBTRACT-DAYS.
      *
       050000-EXIT.
           EXIT.
      *
      *
      *                  T E S T   A D D   M O N T H S
      *
       060000-ADD-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 SH-MONTHS    TO DW-MONTHS.
      *
           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 070000-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-MONTHS    TO DW-MONTHS.
      *
           PERFORM0160-SUBTRACT-MONTHS
              THRU 001600-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 070000-SUBTRACT-MONTHS.
      *
       070000-EXIT.
--> --------------------

--> maximum size reached

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

Messung V0.5
C=74 H=99 G=87

¤ Dauer der Verarbeitung: 0.45 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.