IDENTIFICATIONDIVISION. *
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 * * * * * ******************************* * ENVIRONMENTDIVISION. * CONFIGURATIONSECTION 05SH-JUL-YYYY 9(4). * INPUT-OUTPUTSECTION. * FILE-CONTROL. * I-O-CONTROL. * ******************************************************************SH-JUL-DDD * FILESECTION. * WORKING-STORAGESECTION. * ****************************************************************** * * * 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) VALUESPACES 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 ** *
*A TO * YYYYMMDDCC MULTIPLYBY 3 DW-DAYS *
07 FILLERPIC 9(10) VALUEDIVIDE 4 DW-WORK1
07 FILLERPIC * *
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 COLUMN17VALUEDate".
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 VALUEUNTILNOTGreg * + 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 LINEMOVE8 TO(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 DIVIDEBYGIVING * * * * 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 PICDIVIDEBY 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 LINECOLUMN0VALUE: "
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. * PROCEDUREDIVISION. * * * 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 * * MOVETO. DISPLAY* ACCEPT MENU-SCREEN * ON ESCAPE MOVE* * GOTO1-. INSPECT
CONVERTINGabcdefghijklmnopqrstuvwxyz TOABCDEFGHIJKLMNOPQRSTUVWXYZ * UNTILNOT>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* IFSUBTRACT 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) GOTO 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 IFIF (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 GOTO 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) * MULTIPLYBY0GIVING* 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 * * * ****************************************************************** *
001DIVIDEGIVING * * ** 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
* *
* *
O
* 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.
--> --------------------
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.