Haftungsausschluß.rtf KontaktText {Text[227] Haskell[233] Abap[325]}diese Dinge liegen außhalb unserer Verantwortung
{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 Fixedsys;}{\f1\fmodern\fprq1\fcharset0 Fixedsys;}
{\colortbl;\red255\green0\blue0;\red0\green0\blue255;\red0\green0\blue128;\red0\green0\blue0;\red128\green0\blue0;\red0\green128\blue0;\red128\green128\blue128;\red0\green128\blue128;\red255\green0\blue255;}
{\*\generator Msftedit 5.41.15.1507;}
\viewkind4\uc1\pard\lang1031\f0\fs16}
\cf1 \f1 IDENTIFICATION\cf0\f0 \cf1 \f1 DIVISION\cf0\f0 \cf2 \f1 .\cf0\f0
\par
\cf6 \f1 *\cf0\f0
\par
\cf1 \f1 PROGRAM-ID\cf0\f0 \cf2 \f1 .\cf0\f0 \cf4 \f1 DATET\cf0\f0 \cf2 \f1 .\cf0\f0
\par
\cf6 \f1 *\cf0\f0
\par
\cf1 \f1 DATE-WRITTEN\cf0\f0 . 04/10/89.
\par
\cf6 \f1 *\cf0\f0
\par
\cf6 \f1 * MODIFIED 12/26/95.\cf0\f0
\par
\cf6 \f1 * 07/31/97.\cf0\f0
\par
\cf6 \f1 * 10/18/97.\cf0\f0
\par
\cf6 \f1 *\cf0\f0
\par
\cf6 \f1 * *******************************\cf0\f0
\par
\cf6 \f1 * * *\cf0\f0
\par
\cf6 \f1 * * Judson D. McClendon *\cf0\f0
\par
\cf6 \f1 * * Sun Valley Systems *\cf0\f0
\par
\cf6 \f1 * * 329 37th Court N.E. *\cf0\f0
\par
\cf6 \f1 * * Birmingham, AL 35215 *\cf0\f0
\par
\cf6 \f1 * * 205-853-8440 *\cf0\f0
\par
\cf6 \f1 * * *\cf0\f0
\par
\cf6 \f1 * *******************************\cf0\f0
\par
\cf6 \f1 *\cf0\f0
\par
\cf1 \f1 ENVIRONMENT\cf0\f0 \cf1 \f1 DIVISION\cf0\f0 \cf2 \f1 .\cf0\f0
\par
\cf6 \f1 *\cf0\f0
\par
\cf1 \f1 CONFIGURATION\cf0\f0 \cf1 \f1 SECTION\cf0\f0 \cf2 \f1 .\cf0\f0
\par
\cf6 \f1 *\cf0\f0
\par
\cf1 \f1 INPUT-OUTPUT\cf0\f0 \cf1 \f1 SECTION\cf0\f0 \cf2 \f1 .\cf0\f0
\par
\cf6 \f1 *\cf0\f0
\par
\cf1 \f1 FILE-CONTROL\cf0\f0 \cf2 \f1 .\cf0\f0
\par
\cf6 \f1 *\cf0\f0
\par
\cf1 \f1 I-O-CONTROL\cf0\f0 \cf2 \f1 .\cf0\f0
\par
\cf6 \f1 *\cf0\f0
\par
\cf1 \f1 DATA\cf0\f0 \cf1 \f1 DIVISION\cf0\f0 \cf2 \f1 .\cf0\f0
\par
\cf6 \f1 *\cf0\f0
\par
\cf1 \f1 FILE\cf0\f0 \cf1 \f1 SECTION\cf0\f0 \cf2 \f1 .\cf0\f0
\par
\cf6 \f1 *\cf0\f0
\par
\cf1 \f1 WORKING-STORAGE\cf0\f0 \cf1 \f1 SECTION\cf0\f0 \cf2 \f1 .\cf0\f0
\par
\cf6 \f1 *\cf0\f0
\par
\cf6 \f1 ******************************************************************\cf0\f0
\par
\cf6 \f1 * *\cf0\f0
\par
\cf6 \f1 * 7 7 ' S *\cf0\f0
\par
\cf6 \f1 * *\cf0\f0
\par
\cf6 \f1 ******************************************************************\cf0\f0
\par
\cf6 \f1 *\cf0\f0
\par
\cf3 \f1 77\cf0\f0 \cf4 \f1 WS-ANSWER\cf0\f0 \cf2 \f1 PIC\cf0\f0 X(01) \cf1 \f1 V\cf0\f0 A\cf1 \f1 LUE S\cf0\f0 \cf2 \f1 P\cf0\f0 ACE.
\par
\cf3 \f1 77\cf0\f0 \cf4 \f1 WS-ESCAPE-FLAG\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(01) \cf1 \f1 V\cf0\f0 A\cf3 \f1 L\cf0\f0 \cf2 \f1 U\cf0\f0 E 0.
\par
\cf6 \f1 *\cf0\f0
\par
\cf6 \f1 ******************************************************************\cf0\f0
\par
\cf6 \f1 * *\cf0\f0
\par
\cf6 \f1 * S C R E E N H O L D A R E A *\cf0\f0
\par
\cf6 \f1 * *\cf0\f0
\par
\cf6 \f1 ******************************************************************\cf0\f0
\par
\cf6 \f1 *\cf0\f0
\par
\cf3 \f1 01\cf0\f0 \cf4 \f1 SCREEN-HOLD-AREA\cf0\f0 \cf2 \f1 .\cf0\f0
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-EDIT-DATE\cf0\f0 \cf2 \f1 PIC\cf0\f0 X(0\cf1 \f1 8) V\cf0\f0 A\cf1 \f1 LUE SP\cf0\f0 \cf2 \f1 A\cf0\f0 CES.
\par
\cf6 \f1 *\cf0\f0
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-WORK-MMDDYYYY\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(0\cf1 \f1 8) V\cf0\f0 A\cf3 \f1 L\cf0\f0 \cf2 \f1 U\cf0\f0 E 0.
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-WORK-MMDDYYYY-ALPHA\cf0\f0 \cf1 \f1 REDEFINES\cf0\f0 \cf4 \f1 SH-WORK-MMDDYYYY\cf0\f0 \cf2 \f1 .\cf0\f0
\par
\cf3 \f1 05\cf0\f0 \cf4 \f1 SH-WORK-MONTH\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 2).
\par
\cf3 \f1 05\cf0\f0 \cf4 \f1 SH-WORK-DAY\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 2).
\par
\cf3 \f1 05\cf0\f0 \cf4 \f1 SH-WORK-YEAR\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 4).
\par
\cf6 \f1 *\cf0\f0
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-WORK-YYYYMMDD\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(0\cf1 \f1 8) V\cf0\f0 A\cf3 \f1 L\cf0\f0 \cf2 \f1 U\cf0\f0 E 0.
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-WORK-YYYYMMDD-ALPHA\cf0\f0 \cf1 \f1 REDEFINES\cf0\f0 \cf4 \f1 SH-WORK-YYYYMMDD\cf0\f0 \cf2 \f1 .\cf0\f0
\par
\cf3 \f1 05\cf0\f0 \cf4 \f1 SH-WORK-YYYY\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 4).
\par
\cf3 \f1 05\cf0\f0 \cf4 \f1 SH-WORK-MM\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 2).
\par
\cf3 \f1 05\cf0\f0 \cf4 \f1 SH-WORK-DD\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 2).
\par
\cf6 \f1 *\cf0\f0
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-JUL-DATE\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(0\cf1 \f1 7) V\cf0\f0 A\cf3 \f1 L\cf0\f0 \cf2 \f1 U\cf0\f0 E 0.
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-JUL-DATE-ALPHA\cf0\f0 \cf1 \f1 REDEFINES\cf0\f0 \cf4 \f1 SH-JUL-DATE\cf0\f0 \cf2 \f1 .\cf0\f0
\par
\cf3 \f1 05\cf0\f0 \cf4 \f1 SH-JUL-YYYY\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 4).
\par
\cf3 \f1 05\cf0\f0 \cf4 \f1 SH-JUL-DDD\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 3).
\par
\cf6 \f1 *\cf0\f0
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-BEG-YYYYMMDD\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(0\cf1 \f1 8) V\cf0\f0 A\cf3 \f1 L\cf0\f0 \cf2 \f1 U\cf0\f0 E 0.
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-BEG-YYYYMMDD-ALPHA\cf0\f0 \cf1 \f1 REDEFINES\cf0\f0 \cf4 \f1 SH-BEG-YYYYMMDD\cf0\f0 \cf2 \f1 .\cf0\f0
\par
\cf3 \f1 05\cf0\f0 \cf4 \f1 SH-BEG-YYYY\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 4).
\par
\cf3 \f1 05\cf0\f0 \cf4 \f1 SH-BEG-MM\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 2).
\par
\cf3 \f1 05\cf0\f0 \cf4 \f1 SH-BEG-DD\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 2).
\par
\cf6 \f1 *\cf0\f0
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-END-YYYYMMDD\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(0\cf1 \f1 8) V\cf0\f0 A\cf3 \f1 L\cf0\f0 \cf2 \f1 U\cf0\f0 E 0.
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-END-YYYYMMDD-ALPHA\cf0\f0 \cf1 \f1 REDEFINES\cf0\f0 \cf4 \f1 SH-END-YYYYMMDD\cf0\f0 \cf2 \f1 .\cf0\f0
\par
\cf3 \f1 05\cf0\f0 \cf4 \f1 SH-END-YYYY\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 4).
\par
\cf3 \f1 05\cf0\f0 \cf4 \f1 SH-END-MM\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 2).
\par
\cf3 \f1 05\cf0\f0 \cf4 \f1 SH-END-DD\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 2).
\par
\cf6 \f1 *\cf0\f0
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-OFFSET\cf0\f0 \cf2 \f1 PIC\cf0\f0 S9(\cf1 \f1 08) \cf0\f0 V\cf3 \f1 A\cf0\f0 \cf2 \f1 L\cf0\f0 UE 0.
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-AGE-YEARS\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(0\cf1 \f1 4) V\cf0\f0 A\cf3 \f1 L\cf0\f0 \cf2 \f1 U\cf0\f0 E 0.
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-AGE-MONTHS\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(0\cf1 \f1 2) V\cf0\f0 A\cf3 \f1 L\cf0\f0 \cf2 \f1 U\cf0\f0 E 0.
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-AGE-DAYS\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(0\cf1 \f1 2) V\cf0\f0 A\cf3 \f1 L\cf0\f0 \cf2 \f1 U\cf0\f0 E 0.
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-AGE-TOTDAYS\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(0\cf1 \f1 8) V\cf0\f0 A\cf3 \f1 L\cf0\f0 \cf2 \f1 U\cf0\f0 E 0.
\par
\cf6 \f1 *\cf0\f0
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-YEARS\cf0\f0 \cf2 \f1 PIC\cf0\f0 S9(\cf1 \f1 07) \cf0\f0 V\cf3 \f1 A\cf0\f0 \cf2 \f1 L\cf0\f0 UE 0.
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-MONTHS\cf0\f0 \cf2 \f1 PIC\cf0\f0 S9(\cf1 \f1 07) \cf0\f0 V\cf3 \f1 A\cf0\f0 \cf2 \f1 L\cf0\f0 UE 0.
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-DAYS\cf0\f0 \cf2 \f1 PIC\cf0\f0 S9(\cf1 \f1 07) \cf0\f0 V\cf3 \f1 A\cf0\f0 \cf2 \f1 L\cf0\f0 UE 0.
\par
\cf6 \f1 *\cf0\f0
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 SH-RESULT\cf0\f0 \cf2 \f1 PIC\cf0\f0 X(2\cf1 \f1 0) V\cf0\f0 A\cf1 \f1 LUE SP\cf0\f0 \cf2 \f1 A\cf0\f0 CES.
\par
\cf6 \f1 *\cf0\f0
\par
\cf6 \f1 ******************************************************************\cf0\f0
\par
\cf6 \f1 * *\cf0\f0
\par
\cf6 \f1 * D A T E W O R K A R E A *\cf0\f0
\par
\cf6 \f1 * *\cf0\f0
\par
\cf6 \f1 ******************************************************************\cf0\f0
\par
\cf6 \f1 *\cf0\f0
\par
\cf3 \f1 01\cf0\f0 \cf4 \f1 DATE-WORK-AREA\cf0\f0 \cf2 \f1 .\cf0\f0
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 DW-DATE-ERROR-FLAG\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 1).
\par
\cf6 \f1 *\cf0\f0
\par
\cf6 \f1 *\cf0\f0
\par
\cf6 \f1 * ** TODAYS DATE **\cf0\f0
\par
\cf6 \f1 *\cf0\f0
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 DW-TODAYS-DATE\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 8).
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 DW-TODAYS-DATE-ALPHA\cf0\f0 \cf1 \f1 REDEFINES\cf0\f0 \cf4 \f1 DW-TODAYS-DATE\cf0\f0 \cf2 \f1 .\cf0\f0
\par
\cf3 \f1 05\cf0\f0 \cf4 \f1 DW-TODAYS-MONTH\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 2).
\par
\cf3 \f1 05\cf0\f0 \cf4 \f1 DW-TODAYS-DAY\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 2).
\par
\cf3 \f1 05\cf0\f0 \cf4 \f1 DW-TODAYS-YEAR\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 4).
\par
\cf6 \f1 *\cf0\f0
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 DW-TODAYS-YYYYMMDD\cf0\f0 \cf2 \f1 PIC\cf0\f0 9(\cf2 \f1 0\cf0\f0 8).
\par
\cf3 \f1 03\cf0\f0 \cf4 \f1 DW-TODAYS-YYYYMMDD-ALPHA\cf0\f0 \cf1 \f1 REDEFINES\cf0\f0 \cf4 \f1 DW-TODAYS-YYYYMMDD\cf0\f0 .
\par
\cf3 \f1 05\cf0\f0 \cf4 \f1 DW-TODAYS-YYYY\cf0\f0 PIC 9(04).
\par
05 DW-TODAYS-YYYY-R REDEFINES DW-TODAYS-YYYY.
\par
07 DW-TODAYS-CC PIC 9(02).
\par
07 DW-TODAYS-YY PIC 9(02).
\par
05 DW-TODAYS-MM PIC 9(02).
\par
05 DW-TODAYS-DD PIC 9(02).
\par
*
\par
*
\par
* ** DATE WORK AREA **
\par
*
\par
03 DW-WORK-DATE PIC 9(08).
\par
03 DW-WORK-DATE-ALPHA REDEFINES DW-WORK-DATE.
\par
05 DW-WORK-MONTH PIC 9(02).
\par
05 DW-WORK-DAY PIC 9(02).
\par
05 DW-WORK-YEAR PIC 9(04).
\par
*
\par
03 DW-WORK-YYYYMMDD PIC 9(08).
\par
03 DW-WORK-YYYYMMDD-ALPHA REDEFINES DW-WORK-YYYYMMDD.
\par
05 DW-WORK-YYYY PIC 9(04).
\par
05 DW-WORK-YYYY-R REDEFINES DW-WORK-YYYY.
\par
07 DW-WORK-CC PIC 9(02).
\par
07 DW-WORK-YY PIC 9(02).
\par
05 DW-WORK-MM PIC 9(02).
\par
05 DW-WORK-DD PIC 9(02).
\par
*
\par
*
\par
* ** SHORT MMDDYY DATE **
\par
*
\par
03 DW-SHORT-DATE PIC 9(06).
\par
03 DW-SHORT-DATE-ALPHA REDEFINES DW-SHORT-DATE.
\par
05 DW-SHORT-MONTH PIC 9(02).
\par
05 DW-SHORT-DAY PIC 9(02).
\par
05 DW-SHORT-YEAR PIC 9(02).
\par
*
\par
*
\par
* ** OFFSET DATE AREAS **
\par
*
\par
03 DW-OFFSET PIC S9(08).
\par
*
\par
03 DW-OFFSET-UNSIGNED PIC 9(08).
\par
03 DW-OFFSET-UNSIGNED-ALPHA REDEFINES DW-OFFSET-UNSIGNED.
\par
05 DW-OFFSET-YYYY PIC 9(04).
\par
05 DW-OFFSET-MM PIC 9(02).
\par
05 DW-OFFSET-DD PIC 9(02).
\par
*
\par
*
\par
* ** JULIAN DATE **
\par
*
\par
03 DW-JUL-DATE PIC 9(07).
\par
03 DW-JUL-DATE-ALPHA REDEFINES DW-JUL-DATE.
\par
05 DW-JUL-YYYY PIC 9(04).
\par
05 DW-JUL-YYYY-R REDEFINES DW-JUL-YYYY.
\par
07 DW-JUL-CC PIC 9(02).
\par
07 DW-JUL-YY PIC 9(02).
\par
05 DW-JUL-DDD PIC 9(03).
\par
*
\par
*
\par
* ** BEGIN DATE **
\par
*
\par
03 DW-BEG-YYYYMMDD PIC 9(08).
\par
03 DW-BEG-YYYYMMDD-ALPHA REDEFINES DW-BEG-YYYYMMDD.
\par
05 DW-BEG-YYYY PIC 9(04).
\par
05 DW-BEG-YYYY-R REDEFINES DW-BEG-YYYY.
\par
07 DW-BEG-CC PIC 9(02).
\par
07 DW-BEG-YY PIC 9(02).
\par
05 DW-BEG-MM PIC 9(02).
\par
05 DW-BEG-DD PIC 9(02).
\par
*
\par
*
\par
* ** END DATE **
\par
*
\par
03 DW-END-YYYYMMDD PIC 9(08).
\par
03 DW-END-YYYYMMDD-ALPHA REDEFINES DW-END-YYYYMMDD.
\par
05 DW-END-YYYY PIC 9(04).
\par
05 DW-END-YYYY-R REDEFINES DW-END-YYYY.
\par
07 DW-END-CC PIC 9(02).
\par
07 DW-END-YY PIC 9(02).
\par
05 DW-END-MM PIC 9(02).
\par
05 DW-END-DD PIC 9(02).
\par
*
\par
*
\par
* ** RESULTS OF AGE COMPUTATION **
\par
*
\par
03 DW-AGE-YEARS PIC 9(04).
\par
03 DW-AGE-MONTHS PIC 9(02).
\par
03 DW-AGE-DAYS PIC 9(02).
\par
03 DW-AGE-TOTDAYS PIC 9(08).
\par
*
\par
*
\par
* ** INPUT/OUTPUT VARIABLES **
\par
*
\par
03 DW-YEARS PIC S9(07).
\par
03 DW-MONTHS PIC S9(07).
\par
03 DW-DAYS PIC S9(07).
\par
03 DW-WEEKDAY PIC 9(01).
\par
*
\par
*
\par
* ** SCRATCH WORK AREAS FOR DATE ROUTINES **
\par
* ** (ASSUME MODIFIED BY ALL DATE ROUTINES) **
\par
*
\par
03 DW-WORK1 PIC S9(09).
\par
03 DW-WORK2 PIC S9(09).
\par
03 DW-WORK3 PIC S9(09).
\par
03 DW-TEMP-YYYY PIC S9(09).
\par
03 DW-TEMP-MM PIC S9(09).
\par
*
\par
*
\par
* ** NUMBER OF DAYS IN EACH MONTH **
\par
* ** (DAYS IN FEBRUARY ARE ADJUSTED BY DATE ROUTINES) **
\par
*
\par
03 DW-DAYS-IN-MONTHS VALUE "312831303130313130313031".
\par
05 DW-DAYS-IN-MONTH OCCURS 12 TIMES
\par
PIC 9(02).
\par
*
\par
*
\par
* ** HOLIDAY TABLE **
\par
*
\par
* ** THIS TABLE CONTAINS EVERY HOLIDAY ON WHICH THE BUSINESS **
\par
* ** OFFICE IS CLOSED. IT SHOULD BE UPDATED EVERY YEAR TO **
\par
* ** INCLUDE ALL THE DATES OVER WHICH BUSINESS DAYS MIGHT **
\par
* ** NEED TO BE CALCULATED. NO NEED TO ADD WEEKEND DATES. **
\par
*
\par
* ** THE ENTRIES IN THIS TABLE CONSIST OF AN 8-DIGIT DATE **
\par
* ** (YYYYMMDD), FOLLOWED BY A 2-DIGIT COUNT OF DAYS WHICH **
\par
* ** MUST BE ADDED TO THE DATE TO GET THE NEXT BUSINESS DAY. **
\par
*
\par
* ** EXAMPLE: THANKSGIVING, 1997, OFF THURSDAY 11/27 AND **
\par
* ** FRIDAY 11/28 UNTIL THE NEXT MONDAY 11/31. THE ENTRIES **
\par
* ** IN THE TABLE WOULD BE: 1997 11 27 04 AND 1997 11 28 03 **
\par
*
\par
* ** EXAMPLE: CHRISTMAS, 1998, OFF FRIDAY 12/25 THROUGH **
\par
* ** MONDAY 12/28 UNTIL TUESDAY 12/29. THE ENTRIES IN THE **
\par
* ** TABLE WOULD BE: 1998 12 25 04 AND 1998 12 28 01 **
\par
*
\par
03 DW-HOLIDAY-TABLE.
\par
05 DW-HT-VALUES.
\par
* YYYYMMDDCC
\par
07 FILLER PIC 9(10) VALUE 1997112704.
\par
07 FILLER PIC 9(10) VALUE 1997112803.
\par
07 FILLER PIC 9(10) VALUE 1998122504.
\par
07 FILLER PIC 9(10) VALUE 1998122801.
\par
*
\par
05 DW-HT-HOLIDAYS REDEFINES DW-HT-VALUES
\par
OCCURS 4 TIMES
\par
INDEXED BY DW-HT-HX.
\par
07 DW-HT-DATE.
\par
09 DW-HT-YYYY PIC 9(04).
\par
09 DW-HT-YYYY-R REDEFINES DW-HT-YYYY.
\par
11 DW-HT-CC PIC 9(02).
\par
11 DW-HT-YY PIC 9(02).
\par
09 DW-HT-MM PIC 9(02).
\par
09 DW-HT-DD PIC 9(02).
\par
07 DW-HT-DAYS PIC 9(02).
\par
*
\par
*
\par
* ** WEEKDAY NAMES **
\par
*
\par
03 DW-DAY-NAMES VALUE "SUNMONTUEWEDTHUFRISAT".
\par
05 DW-DAY-NAME OCCURS 7 TIMES
\par
PIC X(03).
\par
*
\par
SCREEN SECTION.
\par
*
\par
*
\par
* M E N U S C R E E N
\par
*
\par
01 MENU-SCREEN.
\par
03 BLANK SCREEN.
\par
03 LINE 01 COLUMN 21 VALUE
\par
"D A T E R O U T I N E T E S T".
\par
*
\par
03 LINE 03 COLUMN 10 VALUE "Press: A = Date Edit".
\par
03 LINE 04 COLUMN 17 VALUE "B = Date days".
\par
03 LINE 05 COLUMN 17 VALUE "C = Weekday".
\par
03 LINE 06 COLUMN 17 VALUE "D = Add Days".
\par
03 LINE 07 COLUMN 17 VALUE "E = Sub Days".
\par
03 LINE 08 COLUMN 17 VALUE "F = Add Months".
\par
03 LINE 09 COLUMN 17 VALUE "G = Sub Months".
\par
03 LINE 10 COLUMN 17 VALUE "H = Add Years".
\par
03 LINE 11 COLUMN 17 VALUE "I = Sub Years".
\par
03 LINE 03 COLUMN 37 VALUE "J = Calc Offset".
\par
03 LINE 04 COLUMN 37 VALUE "K = Compute Age".
\par
03 LINE 05 COLUMN 37 VALUE "L = Greg to Jul".
\par
03 LINE 06 COLUMN 37 VALUE "M = Jul to Greg".
\par
03 LINE 07 COLUMN 37 VALUE "N = Add Days, Business".
\par
03 LINE 12 COLUMN 25 VALUE "Esc = Exit: ".
\par
03 PIC X TO WS-ANSWER AUTO.
\par
*
\par
*
\par
* I N P U T S C R E E N S
\par
*
\par
*
\par
* G E T E D I T D A T E
\par
*
\par
01 GET-EDIT-DATE-SCREEN.
\par
03 LINE 14 COLUMN 10 VALUE "Date (MMDDYYYY): ".
\par
03 PIC X(08) USING SH-EDIT-DATE.
\par
*
\par
*
\par
* G E T W O R K M M D D Y Y Y Y
\par
*
\par
01 GET-WORK-MMDDYYYY-SCREEN.
\par
03 LINE 14 COLUMN 10 VALUE "Date (MM/DD/YYYY): ".
\par
03 PIC 99/99/9999 USING SH-WORK-MMDDYYYY.
\par
*
\par
*
\par
* G E T W O R K Y Y Y Y M M D D
\par
*
\par
01 GET-WORK-YYYYMMDD-SCREEN.
\par
03 LINE 14 COLUMN 10 VALUE "Date (YYYY/MM/DD): ".
\par
03 PIC 9999/99/99 USING SH-WORK-YYYYMMDD.
\par
*
\par
*
\par
* G E T J U L Y Y Y Y D D D
\par
*
\par
01 GET-JUL-YYYYDDD-SCREEN.
\par
03 LINE 14 COLUMN 10 VALUE "Julian Date (YYYY/DDD): ".
\par
03 PIC 9999/999 USING SH-JUL-DATE.
\par
*
\par
*
\par
* G E T D A T E D A Y S
\par
*
\par
01 GET-DATE-DAYS-SCREEN.
\par
03 LINE 14 COLUMN 10 VALUE "Date (YYYY/MM/DD): ".
\par
03 PIC 9999/99/99 USING SH-WORK-YYYYMMDD.
\par
03 LINE 16 COLUMN 10 VALUE "Days: ".
\par
03 PIC ZZZZZZ USING SH-DAYS.
\par
*
\par
*
\par
* G E T D A T E M O N T H S
\par
*
\par
01 GET-DATE-MONTHS-SCREEN.
\par
03 LINE 14 COLUMN 10 VALUE "Date (YYYY/MM/DD): ".
\par
03 PIC 9999/99/99 USING SH-WORK-YYYYMMDD.
\par
03 LINE 16 COLUMN 10 VALUE "Months: ".
\par
03 PIC ZZZZZZ USING SH-MONTHS.
\par
*
\par
*
\par
* G E T D A T E Y E A R S
\par
*
\par
01 GET-DATE-YEARS-SCREEN.
\par
03 LINE 14 COLUMN 10 VALUE "Date (YYYY/MM/DD): ".
\par
03 PIC 9999/99/99 USING SH-WORK-YYYYMMDD.
\par
03 LINE 16 COLUMN 10 VALUE "Years: ".
\par
03 PIC ZZZZ USING SH-YEARS.
\par
*
\par
*
\par
* G E T D A T E O F F S E T
\par
*
\par
01 GET-DATE-OFFSET-SCREEN.
\par
03 LINE 14 COLUMN 10 VALUE "Date (YYYY/MM/DD): ".
\par
03 PIC 9999/99/99 USING SH-WORK-YYYYMMDD.
\par
03 LINE 16 COLUMN 10 VALUE "Offset (ñYYYY/MM/DD): ".
\par
03 PIC -9999/99/99 USING SH-OFFSET.
\par
*
\par
*
\par
* G E T B E G / E N D D A T E S
\par
*
\par
01 GET-BEG-END-YYYYMMDD-SCREEN.
\par
03 LINE 14 COLUMN 10 VALUE "Begin Date (YYYY/MM/DD): ".
\par
03 PIC 9999/99/99 USING SH-BEG-YYYYMMDD.
\par
03 LINE 16 COLUMN 10 VALUE "End Date (YYYY/MM/DD): ".
\par
03 PIC 9999/99/99 USING SH-END-YYYYMMDD.
\par
*
\par
*
\par
* O U T P U T S C R E E N S
\par
*
\par
*
\par
* S H O W R E S U L T
\par
*
\par
01 SHOW-RESULT-SCREEN.
\par
03 LINE 18 COLUMN 20
\par
PIC X(20) FROM SH-RESULT.
\par
*
\par
*
\par
* S H O W D A T E D A Y S
\par
*
\par
01 SHOW-DATE-DAYS-SCREEN.
\par
03 LINE 18 COLUMN 20 VALUE "Date Day: ".
\par
03 PIC Z,ZZZ,ZZ9 FROM SH-DAYS.
\par
*
\par
*
\par
* S H O W N E W D A T E
\par
*
\par
01 SHOW-NEW-DATE-SCREEN.
\par
03 LINE 18 COLUMN 20 VALUE "New Date: ".
\par
03 PIC 9999/99/99 FROM SH-WORK-YYYYMMDD.
\par
*
\par
*
\par
* S H O W A G E
\par
*
\par
01 SHOW-AGE-SCREEN.
\par
03 LINE 18 COLUMN 20 VALUE "Years: ".
\par
03 PIC Z,ZZZ,ZZZ FROM SH-AGE-YEARS.
\par
03 LINE 19 COLUMN 20 VALUE "Months: ".
\par
03 PIC Z,ZZZ,ZZZ FROM SH-AGE-MONTHS.
\par
03 LINE 20 COLUMN 20 VALUE "Days: ".
\par
03 PIC Z,ZZZ,ZZZ FROM SH-AGE-DAYS.
\par
03 LINE 22 COLUMN 20 VALUE "Days Only: ".
\par
03 PIC ZZ,ZZZ,ZZZ FROM SH-AGE-TOTDAYS.
\par
*
\par
*
\par
* S H O W J U L Y Y Y Y D D D
\par
*
\par
01 SHOW-JUL-YYYYDDD-SCREEN.
\par
03 LINE 18 COLUMN 10 VALUE "Julian Date: ".
\par
03 PIC 9999/999 FROM SH-JUL-DATE.
\par
*
\par
*
\par
* S H O W Y Y Y Y M M D D
\par
*
\par
01 SHOW-YYYYMMDD-SCREEN.
\par
03 LINE 18 COLUMN 10 VALUE "Date (YYYY/MM/DD): ".
\par
03 PIC 9999/99/99 FROM SH-WORK-YYYYMMDD.
\par
*
\par
*
\par
* S H O W M M D D Y Y Y Y
\par
*
\par
01 SHOW-MMDDYYYY-SCREEN.
\par
03 LINE 18 COLUMN 10 VALUE "Date (MM/DD/YYYY): ".
\par
03 PIC 99/99/9999 FROM SH-WORK-MMDDYYYY.
\par
*
\par
PROCEDURE DIVISION.
\par
*
\par
*
\par
* C O N T R O L
\par
*
\par
000000-CONTROL.
\par
*
\par
PERFORM 000100-PROCESS
\par
THRU 000100-EXIT
\par
UNTIL (WS-ESCAPE-FLAG = 1).
\par
*
\par
000000-EXIT.
\par
STOP RUN.
\par
*
\par
*
\par
* P R O C E S S
\par
*
\par
000100-PROCESS.
\par
*
\par
MOVE SPACE TO WS-ANSWER.
\par
DISPLAY MENU-SCREEN.
\par
ACCEPT MENU-SCREEN
\par
ON ESCAPE
\par
MOVE 1 TO WS-ESCAPE-FLAG
\par
GO TO 000100-EXIT.
\par
INSPECT WS-ANSWER
\par
CONVERTING "abcdefghijklmnopqrstuvwxyz"
\par
TO "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
\par
*
\par
INITIALIZE SCREEN-HOLD-AREA.
\par
*
\par
IF (WS-ANSWER = "A")
\par
PERFORM 010000-DATE-EDIT
\par
THRU 010000-EXIT
\par
ELSE
\par
IF (WS-ANSWER = "B")
\par
PERFORM 020000-DATE-DAYS
\par
THRU 020000-EXIT
\par
ELSE
\par
IF (WS-ANSWER = "C")
\par
PERFORM 030000-WEEKDAY
\par
THRU 030000-EXIT
\par
ELSE
\par
IF (WS-ANSWER = "D")
\par
PERFORM 040000-ADD-DAYS
\par
THRU 040000-EXIT
\par
ELSE
\par
IF (WS-ANSWER = "E")
\par
PERFORM 050000-SUBTRACT-DAYS
\par
THRU 050000-EXIT
\par
ELSE
\par
IF (WS-ANSWER = "F")
\par
PERFORM 060000-ADD-MONTHS
\par
THRU 060000-EXIT
\par
ELSE
\par
IF (WS-ANSWER = "G")
\par
PERFORM 070000-SUBTRACT-MONTHS
\par
THRU 070000-EXIT
\par
ELSE
\par
IF (WS-ANSWER = "H")
\par
PERFORM 080000-ADD-YEARS
\par
THRU 080000-EXIT
\par
ELSE
\par
IF (WS-ANSWER = "I")
\par
PERFORM 090000-SUBTRACT-YEARS
\par
THRU 090000-EXIT
\par
ELSE
\par
IF (WS-ANSWER = "J")
\par
PERFORM 100000-CALC-OFFSET
\par
THRU 100000-EXIT
\par
ELSE
\par
IF (WS-ANSWER = "K")
\par
PERFORM 110000-COMPUTE-AGE
\par
THRU 110000-EXIT
\par
ELSE
\par
IF (WS-ANSWER = "L")
\par
PERFORM 120000-GREG-JUL
\par
THRU 120000-EXIT
\par
ELSE
\par
IF (WS-ANSWER = "M")
\par
PERFORM 130000-JUL-GREG
\par
THRU 130000-EXIT
\par
ELSE
\par
IF (WS-ANSWER = "N")
\par
PERFORM 140000-ADD-DAYS-BUSINESS
\par
THRU 140000-EXIT.
\par
*
\par
MOVE 0 TO WS-ESCAPE-FLAG.
\par
*
\par
000100-EXIT.
\par
EXIT.
\par
*
\par
******************************************************************
\par
* *
\par
* D A T E E D I T *
\par
* *
\par
* Judson D. McClendon *
\par
* Sun Valley Systems *
\par
* 329 37th Court NE *
\par
* Birmingham, AL 35215 *
\par
* 205/853-8440 *
\par
* *
\par
* USAGE: MOVE <MMDDYYYY DATE> TO DW-WORK-DATE-ALPHA. *
\par
* PERFORM 001000-DATE-EDIT *
\par
* THRU 001000-EXIT. *
\par
* *
\par
* RESULT: DW-DATE-ERROR-FLAG = 0 IF DATE IS VALID *
\par
* DW-DATE-ERROR-FLAG = 1 IF DATE IS NOT VALID *
\par
* *
\par
* DW-WORK-YYYYMMDD = GIVEN DATE IN YYYYMMDD FORMAT *
\par
* DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE *
\par
* *
\par
******************************************************************
\par
*
\par
001000-DATE-EDIT.
\par
*
\par
* ** ERROR FLAG WILL BE RESET TO 0 ON GOOD EXIT **
\par
*
\par
MOVE 1 TO DW-DATE-ERROR-FLAG.
\par
*
\par
IF (DW-WORK-DATE-ALPHA NOT NUMERIC)
\par
GO TO 001000-EXIT.
\par
*
\par
MOVE DW-WORK-YEAR TO DW-WORK-YYYY.
\par
MOVE DW-WORK-MONTH TO DW-WORK-MM.
\par
MOVE DW-WORK-DAY TO DW-WORK-DD.
\par
*
\par
IF (DW-WORK-MM < 01 OR > 12)
\par
GO TO 001000-EXIT.
\par
*
\par
* ** SET DAYS IN FEBRUARY **
\par
*
\par
MOVE 28 TO DW-DAYS-IN-MONTH(2).
\par
DIVIDE 400 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2.
\par
IF (DW-WORK2 = 0)
\par
MOVE 29 TO DW-DAYS-IN-MONTH(2)
\par
ELSE
\par
DIVIDE 100 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2
\par
IF (DW-WORK2 NOT = 0)
\par
DIVIDE 4 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2
\par
IF (DW-WORK2 = 0)
\par
MOVE 29 TO DW-DAYS-IN-MONTH(2).
\par
*
\par
IF (DW-WORK-DD < 01)
\par
OR
\par
(DW-WORK-DD > DW-DAYS-IN-MONTH(DW-WORK-MM))
\par
GO TO 001000-EXIT.
\par
*
\par
* ** GOOD DATE **
\par
*
\par
MOVE 0 TO DW-DATE-ERROR-FLAG.
\par
*
\par
001000-EXIT.
\par
EXIT.
\par
*
\par
*
\par
*
\par
******************************************************************
\par
* *
\par
* C A L C U L A T E D A T E D A Y N U M B E R *
\par
* *
\par
* *
\par
* RETURNS A NUMBER WHICH IS ONE GREATER FOR EACH SUCCESSIVE *
\par
* DATE. *
\par
* *
\par
* USAGE: MOVE <FIRST DATE> TO DW-WORK-YYYYMMDD. *
\par
* PERFORM 001100-DATE-DAYS *
\par
* THRU 001100-EXIT. *
\par
* *
\par
* RESULT: DW-DAYS = DATE DAY NUMBER *
\par
* *
\par
* *
\par
* THIS ROUTINE USES A VARIATION OF ZELLER'S CONGRUENCE. *
\par
* THE FORMULA IS: *
\par
* *
\par
* <DATE DAY NBR> = ( (YEAR * 365) *
\par
* + INT(YEAR / 4) *
\par
* - INT(YEAR / 100) *
\par
* + INT(YEAR / 400) *
\par
* + INT(MONTH * 30.6001) *
\par
* + DAY) ) *
\par
* *
\par
* WHERE: DAY = DAY OF THE MONTH *
\par
* *
\par
* MONTH = MONTH + 13 (JAN & FEB) *
\par
* MONTH + 1 (MAR - DEC) *
\par
* *
\par
* YEAR = YEAR - 1 (JAN & FEB) *
\par
* YEAR (MAR - DEC) *
\par
* *
\par
* INT(...) MEANS TAKE THE INTEGER PART (NO ROUNDING) *
\par
* *
\par
* *
\par
* THE DATE-DAY-NUMBER CAN BE USED TO DETERMINE THE NUMBER OF *
\par
* DAYS BETWEEN TWO DATES BY COMPUTING THE DAY NUMBER OF EACH *
\par
* DATE AND SUBTRACTING, LIKE THIS: *
\par
* *
\par
* MOVE <FIRST DATE> TO DW-WORK-YYYYMMDD. *
\par
* PERFORM 001100-DATE-DAYS *
\par
* THRU 001100-EXIT. *
\par
* MOVE DW-DAYS TO <HOLD DAY>. *
\par
* MOVE <SECOND DATE> TO DW-WORK-YYYYMMDD. *
\par
* PERFORM 001100-DATE-DAYS *
\par
* THRU 001100-EXIT. *
\par
* SUBTRACT DW-DAYS FROM <HOLD DAY> *
\par
* GIVING <DAYS BETWEEN DATES>. *
\par
* *
\par
******************************************************************
\par
*
\par
001100-DATE-DAYS.
\par
*
\par
* ** ADJUST YEAR AND MONTH **
\par
*
\par
MOVE DW-WORK-YYYY TO DW-TEMP-YYYY.
\par
MOVE DW-WORK-MM TO DW-TEMP-MM.
\par
IF (DW-WORK-MM < 03)
\par
ADD 13 TO DW-TEMP-MM
\par
SUBTRACT 1 FROM DW-TEMP-YYYY
\par
ELSE
\par
ADD 1 TO DW-TEMP-MM.
\par
*
\par
MULTIPLY DW-TEMP-YYYY BY 365 GIVING DW-DAYS.
\par
*
\par
DIVIDE DW-TEMP-YYYY BY 4 GIVING DW-WORK1.
\par
ADD DW-WORK1 TO DW-DAYS.
\par
*
\par
DIVIDE DW-TEMP-YYYY BY 100 GIVING DW-WORK1.
\par
SUBTRACT DW-WORK1 FROM DW-DAYS.
\par
*
\par
DIVIDE DW-TEMP-YYYY BY 400 GIVING DW-WORK1.
\par
ADD DW-WORK1 TO DW-DAYS.
\par
*
\par
MULTIPLY DW-TEMP-MM BY 30.6001 GIVING DW-WORK1.
\par
ADD DW-WORK1 TO DW-DAYS.
\par
*
\par
ADD DW-WORK-DD TO DW-DAYS.
\par
*
\par
001100-EXIT.
\par
EXIT.
\par
*
\par
*
\par
*
\par
******************************************************************
\par
* *
\par
* C A L C U L A T E D A Y O F W E E K *
\par
* *
\par
* *
\par
* WHEN GIVEN ANY DATE THIS ROUTINE RETURNS A NUMBER FROM *
\par
* 1 TO 7 INDICATING THE DAY OF WEEK ON WHICH THE DATE FALLS. *
\par
* *
\par
* *
\par
* USAGE: MOVE <DATE> TO DW-WORK-YYYYMMDD. *
\par
* PERFORM 001200-WEEKDAY *
\par
* THRU 001200-EXIT. *
\par
* *
\par
* RESULT: DW-WEEKDAY = DAY OF WEEK *
\par
* *
\par
* *
\par
* THIS ROUTINE USES ZELLER'S CONGRUENCE, EXPRESSED BY THE *
\par
* FOLLOWING FORMULA: *
\par
* *
\par
* <WEEKDAY> = (INT((13 * MONTH + 3) / 5) *
\par
* + DAY *
\par
* + YEAR *
\par
* + INT(YEAR / 4) *
\par
* - INT(YEAR / 100) *
\par
* + INT(YEAR / 400) *
\par
* + 1) MOD 7) + 1 *
\par
* *
\par
* WHERE: WEEKDAY = 1 TO 7 WITH 1 = SUNDAY 5 = THURSDAY *
\par
* 2 = MONDAY 6 = FRIDAY *
\par
* 3 = TUESDAY 7 = SATURDAY *
\par
* 4 = WEDNESDAY *
\par
* *
\par
* DAY = DAY OF THE MONTH *
\par
* *
\par
* MONTH = MONTH OF THE YEAR (JAN AND FEB COUNT AS *
\par
* MONTHS 13 AND 14 OF THE PREVIOUS YEAR) *
\par
* *
\par
* YEAR = FOUR DIGIT YEAR (YEAR - 1 IF MONTH IS *
\par
* JAN OR FEB) *
\par
* *
\par
* INT(...) MEANS TAKE THE INTEGER PART (NO ROUNDING) *
\par
* *
\par
* X MOD Y MEANS THE REMAINDER AFTER DIVIDING Y *
\par
* INTO X *
\par
* *
\par
******************************************************************
\par
*
\par
001200-WEEKDAY.
\par
*
\par
* ** ADJUST YEAR AND MONTH IF MONTH = JAN OR FEB **
\par
*
\par
MOVE DW-WORK-YYYY TO DW-TEMP-YYYY.
\par
MOVE DW-WORK-MM TO DW-TEMP-MM.
\par
IF (DW-WORK-MM < 03)
\par
ADD 12 TO DW-TEMP-MM
\par
SUBTRACT 1 FROM DW-TEMP-YYYY.
\par
*
\par
* ** CALCULATE INTO DW-WORK1 **
\par
*
\par
COMPUTE DW-WORK1 = (13 * DW-TEMP-MM + 3) / 5.
\par
*
\par
ADD DW-WORK-DD
\par
DW-TEMP-YYYY TO DW-WORK1.
\par
*
\par
DIVIDE DW-TEMP-YYYY BY 4 GIVING DW-WORK2.
\par
ADD DW-WORK2 TO DW-WORK1.
\par
*
\par
DIVIDE DW-TEMP-YYYY BY 100 GIVING DW-WORK2.
\par
SUBTRACT DW-WORK2 FROM DW-WORK1.
\par
*
\par
DIVIDE DW-TEMP-YYYY BY 400 GIVING DW-WORK2.
\par
ADD DW-WORK2 TO DW-WORK1.
\par
*
\par
ADD 1 TO DW-WORK1.
\par
*
\par
DIVIDE DW-WORK1 BY 7 GIVING DW-WORK2 REMAINDER DW-WEEKDAY.
\par
ADD 1 TO DW-WEEKDAY.
\par
*
\par
001200-EXIT.
\par
EXIT.
\par
*
\par
*
\par
*
\par
******************************************************************
\par
* *
\par
* A D D D A Y S T O A D A T E *
\par
* *
\par
* *
\par
* WHEN GIVEN ANY DATE AND A NUMBER OF DAYS THIS ROUTINE WILL *
\par
* ADD THE NUMBER OF DAYS TO THE DATE. *
\par
* *
\par
* *
\par
* USAGE: MOVE <DATE> TO DW-WORK-YYYYMMDD. *
\par
* MOVE <DAYS> TO DW-DAYS. *
\par
* PERFORM 001300-ADD-DAYS *
\par
* THRU 001300-EXIT. *
\par
* *
\par
* RESULT: DW-WORK-YYYYMMDD = DATE AFTER DAYS ADDED *
\par
* DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE *
\par
* *
\par
******************************************************************
\par
*
\par
001300-ADD-DAYS.
\par
*
\par
* ** SET DAYS IN FEBRUARY **
\par
*
\par
MOVE 28 TO DW-DAYS-IN-MONTH(2).
\par
DIVIDE 400 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2.
\par
IF (DW-WORK2 = 0)
\par
MOVE 29 TO DW-DAYS-IN-MONTH(2)
\par
ELSE
\par
DIVIDE 100 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2
\par
IF (DW-WORK2 NOT = 0)
\par
DIVIDE 4 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2
\par
IF (DW-WORK2 = 0)
\par
MOVE 29 TO DW-DAYS-IN-MONTH(2).
\par
*
\par
ADD DW-WORK-DD TO DW-DAYS.
\par
*
\par
PERFORM 001320-LOOP-MONTH
\par
THRU 001320-EXIT
\par
UNTIL (DW-DAYS NOT > DW-DAYS-IN-MONTH(DW-WORK-MM)).
\par
*
\par
MOVE DW-DAYS TO DW-WORK-DD.
\par
*
\par
001300-EXIT.
\par
EXIT.
\par
*
\par
*
\par
*
\par
001320-LOOP-MONTH.
\par
*
\par
SUBTRACT DW-DAYS-IN-MONTH(DW-WORK-MM) FROM DW-DAYS.
\par
*
\par
ADD 1 TO DW-WORK-MM.
\par
IF (DW-WORK-MM > 12)
\par
ADD 1 TO DW-WORK-YYYY
\par
SUBTRACT 12 FROM DW-WORK-MM.
\par
*
\par
MOVE 28 TO DW-DAYS-IN-MONTH(2).
\par
DIVIDE 400 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2.
\par
IF (DW-WORK2 = 0)
\par
MOVE 29 TO DW-DAYS-IN-MONTH(2)
\par
ELSE
\par
DIVIDE 100 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2
\par
IF (DW-WORK2 NOT = 0)
\par
DIVIDE 4 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2
\par
IF (DW-WORK2 = 0)
\par
MOVE 29 TO DW-DAYS-IN-MONTH(2).
\par
*
\par
001320-EXIT.
\par
EXIT.
\par
*
\par
*
\par
*
\par
******************************************************************
\par
* *
\par
* S U B T R A C T D A Y S F R O M A D A T E *
\par
* *
\par
* *
\par
* WHEN GIVEN ANY DATE AND A NUMBER OF DAYS THIS ROUTINE WILL *
\par
* SUBTRACT THE NUMBER OF DAYS FROM THE DATE. *
\par
* *
\par
* *
\par
* USAGE: MOVE <DATE> TO DW-WORK-YYYYMMDD. *
\par
* MOVE <DAYS> TO DW-DAYS. *
\par
* PERFORM 001400-SUBTRACT-DAYS *
\par
* THRU 001400-EXIT. *
\par
* *
\par
* RESULT: DW-WORK-YYYYMMDD = DATE AFTER DAYS SUBTRACTED *
\par
* DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE *
\par
* *
\par
******************************************************************
\par
*
\par
001400-SUBTRACT-DAYS.
\par
*
\par
SUBTRACT DW-DAYS FROM DW-WORK-DD GIVING DW-DAYS.
\par
*
\par
PERFORM 001420-LOOP-MONTH
\par
THRU 001420-EXIT
\par
UNTIL (DW-DAYS > 0).
\par
*
\par
MOVE DW-DAYS TO DW-WORK-DD.
\par
*
\par
001400-EXIT.
\par
EXIT.
\par
*
\par
*
\par
*
\par
001420-LOOP-MONTH.
\par
*
\par
SUBTRACT 1 FROM DW-WORK-MM.
\par
IF (DW-WORK-MM < 01)
\par
SUBTRACT 1 FROM DW-WORK-YYYY
\par
ADD 12 TO DW-WORK-MM.
\par
*
\par
MOVE 28 TO DW-DAYS-IN-MONTH(2).
\par
DIVIDE 400 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2.
\par
IF (DW-WORK2 = 0)
\par
MOVE 29 TO DW-DAYS-IN-MONTH(2)
\par
ELSE
\par
DIVIDE 100 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2
\par
IF (DW-WORK2 NOT = 0)
\par
DIVIDE 4 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2
\par
IF (DW-WORK2 = 0)
\par
MOVE 29 TO DW-DAYS-IN-MONTH(2).
\par
*
\par
ADD DW-DAYS-IN-MONTH(DW-WORK-MM) TO DW-DAYS.
\par
*
\par
001420-EXIT.
\par
EXIT.
\par
*
\par
*
\par
*
\par
******************************************************************
\par
* *
\par
* A D D M O N T H S T O A D A T E *
\par
* *
\par
* *
\par
* WHEN GIVEN ANY DATE AND A NUMBER OF MONTHS THIS ROUTINE *
\par
* WILL ADD THE NUMBER OF MONTHS TO THE DATE. *
\par
* *
\par
* *
\par
* USAGE: MOVE <DATE> TO DW-WORK-YYYYMMDD. *
\par
* MOVE <MONTHS> TO DW-MONTHS. *
\par
* PERFORM 001500-ADD-MONTHS *
\par
* THRU 001500-EXIT. *
\par
* *
\par
* RESULT: DW-WORK-YYYYMMDD = DATE AFTER MONTHS ADDED *
\par
* DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE *
\par
* *
\par
******************************************************************
\par
*
\par
001500-ADD-MONTHS.
\par
*
\par
ADD DW-WORK-MM TO DW-MONTHS.
\par
*
\par
PERFORM 001520-LOOP-YEAR
\par
THRU 001520-EXIT
\par
UNTIL (DW-MONTHS NOT > 12).
\par
*
\par
MOVE DW-MONTHS TO DW-WORK-MM.
\par
*
\par
MOVE 28 TO DW-DAYS-IN-MONTH(2).
\par
DIVIDE 400 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2.
\par
IF (DW-WORK2 = 0)
\par
MOVE 29 TO DW-DAYS-IN-MONTH(2)
\par
ELSE
\par
DIVIDE 100 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2
\par
IF (DW-WORK2 NOT = 0)
\par
DIVIDE 4 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2
\par
IF (DW-WORK2 = 0)
\par
MOVE 29 TO DW-DAYS-IN-MONTH(2).
\par
*
\par
IF (DW-WORK-DD > DW-DAYS-IN-MONTH(DW-WORK-MM))
\par
MOVE DW-DAYS-IN-MONTH(DW-WORK-MM) TO DW-WORK-DD.
\par
*
\par
001500-EXIT.
\par
EXIT.
\par
*
\par
*
\par
*
\par
001520-LOOP-YEAR.
\par
*
\par
SUBTRACT 12 FROM DW-MONTHS.
\par
ADD 1 TO DW-WORK-YYYY.
\par
*
\par
001520-EXIT.
\par
EXIT.
\par
*
\par
*
\par
*
\par
******************************************************************
\par
* *
\par
* S U B T R A C T M O N T H S F R O M A D A T E *
\par
* *
\par
* *
\par
* WHEN GIVEN ANY DATE AND A NUMBER OF MONTHS THIS ROUTINE *
\par
* WILL SUBTRACT THE NUMBER OF MONTHS FROM THE DATE. *
\par
* *
\par
* *
\par
* USAGE: MOVE <DATE> TO DW-WORK-YYYYMMDD. *
\par
* MOVE <MONTHS> TO DW-MONTHS. *
\par
* PERFORM 001600-SUBTRACT-MONTHS *
\par
* THRU 001600-EXIT. *
\par
* *
\par
* RESULT: DW-WORK-YYYYMMDD = DATE AFTER MONTHS SUBTRACTED *
\par
* DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE *
\par
* *
\par
******************************************************************
\par
*
\par
001600-SUBTRACT-MONTHS.
\par
*
\par
SUBTRACT DW-MONTHS FROM DW-WORK-MM GIVING DW-MONTHS.
\par
*
\par
PERFORM 001620-LOOP-YEAR
\par
THRU 001620-EXIT
\par
UNTIL (DW-MONTHS > 0).
\par
*
\par
MOVE DW-MONTHS TO DW-WORK-MM.
\par
*
\par
MOVE 28 TO DW-DAYS-IN-MONTH(2).
\par
DIVIDE 400 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2.
\par
IF (DW-WORK2 = 0)
\par
MOVE 29 TO DW-DAYS-IN-MONTH(2)
\par
ELSE
\par
DIVIDE 100 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2
\par
IF (DW-WORK2 NOT = 0)
\par
DIVIDE 4 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2
\par
IF (DW-WORK2 = 0)
\par
MOVE 29 TO DW-DAYS-IN-MONTH(2).
\par
*
\par
IF (DW-WORK-DD > DW-DAYS-IN-MONTH(DW-WORK-MM))
\par
MOVE DW-DAYS-IN-MONTH(DW-WORK-MM) TO DW-WORK-DD.
\par
*
\par
001600-EXIT.
\par
EXIT.
\par
*
\par
*
\par
*
\par
001620-LOOP-YEAR.
\par
*
\par
ADD 12 TO DW-MONTHS.
\par
SUBTRACT 1 FROM DW-WORK-YYYY.
\par
*
\par
001620-EXIT.
\par
EXIT.
\par
*
\par
*
\par
*
\par
******************************************************************
\par
* *
\par
* A D D Y E A R S T O A D A T E *
\par
* *
\par
* *
\par
* WHEN GIVEN ANY DATE AND A NUMBER OF YEARS THIS ROUTINE *
\par
* WILL ADD THE NUMBER OF YEARS TO THE DATE. *
\par
* *
\par
* *
\par
* USAGE: MOVE <DATE> TO DW-WORK-YYYYMMDD. *
\par
* MOVE <YEARS> TO DW-YEARS. *
\par
* PERFORM 001700-ADD-YEARS *
\par
* THRU 001700-EXIT. *
\par
* *
\par
* RESULT: DW-WORK-YYYYMMDD = DATE AFTER YEARS ADDED *
\par
* DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE *
\par
* *
\par
******************************************************************
\par
*
\par
001700-ADD-YEARS.
\par
*
\par
ADD DW-YEARS TO DW-WORK-YYYY.
\par
*
\par
MOVE 28 TO DW-DAYS-IN-MONTH(2).
\par
DIVIDE 400 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2.
\par
IF (DW-WORK2 = 0)
\par
MOVE 29 TO DW-DAYS-IN-MONTH(2)
\par
ELSE
\par
DIVIDE 100 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2
\par
IF (DW-WORK2 NOT = 0)
\par
DIVIDE 4 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2
\par
IF (DW-WORK2 = 0)
\par
MOVE 29 TO DW-DAYS-IN-MONTH(2).
\par
*
\par
IF (DW-WORK-DD > DW-DAYS-IN-MONTH(DW-WORK-MM))
\par
MOVE DW-DAYS-IN-MONTH(DW-WORK-MM) TO DW-WORK-DD.
\par
*
\par
001700-EXIT.
\par
EXIT.
\par
*
\par
*
\par
*
\par
******************************************************************
\par
* *
\par
* S U B T R A C T Y E A R S F R O M A D A T E *
\par
* *
\par
* *
\par
* WHEN GIVEN ANY DATE AND A NUMBER OF YEARS THIS ROUTINE *
\par
* WILL SUBTRACT THE NUMBER OF YEARS FROM THE DATE. *
\par
* *
\par
* *
\par
* USAGE: MOVE <DATE> TO DW-WORK-YYYYMMDD. *
\par
* MOVE <YEARS> TO DW-YEARS. *
\par
* PERFORM 001800-SUBTRACT-YEARS *
\par
* THRU 001800-EXIT. *
\par
* *
\par
* RESULT: DW-WORK-YYYYMMDD = DATE AFTER YEARS SUBTRACTED *
\par
* DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE *
\par
* *
\par
******************************************************************
\par
*
\par
001800-SUBTRACT-YEARS.
\par
*
\par
SUBTRACT DW-YEARS FROM DW-WORK-YYYY.
\par
*
\par
MOVE 28 TO DW-DAYS-IN-MONTH(2).
\par
DIVIDE 400 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2.
\par
IF (DW-WORK2 = 0)
\par
MOVE 29 TO DW-DAYS-IN-MONTH(2)
\par
ELSE
\par
DIVIDE 100 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2
\par
IF (DW-WORK2 NOT = 0)
\par
DIVIDE 4 INTO DW-WORK-YYYY GIVING DW-WORK1
\par
REMAINDER DW-WORK2
\par
IF (DW-WORK2 = 0)
\par
MOVE 29 TO DW-DAYS-IN-MONTH(2).
\par
*
\par
IF (DW-WORK-DD > DW-DAYS-IN-MONTH(DW-WORK-MM))
\par
MOVE DW-DAYS-IN-MONTH(DW-WORK-MM) TO DW-WORK-DD.
\par
*
\par
001800-EXIT.
\par
EXIT.
\par
*
\par
*
\par
*
\par
******************************************************************
\par
* *
\par
* C A L C U L A T E D A T E O F F S E T *
\par
* *
\par
* *
\par
* ADDS A SIGNED OFFSET IN THE FORM +-YYYYMMDD TO A DATE *
\par
* IN YYYYMMDD FORM. *
\par
* *
\par
* *
\par
* USAGE: MOVE <DATE> TO DW-WORK-YYYYMMDD. *
\par
* MOVE <OFFSET> TO DW-OFFSET. *
\par
* PERFORM 001900-CALC-OFFSET *
\par
* THRU 001900-EXIT. *
\par
* *
\par
* RESULT: DW-WORK-YYYYMMDD DATE AFTER OFFSET APPLIED *
\par
* DW-DAYS-IN-MONTH = CORRECT FOR YEAR OF THIS DATE *
\par
* *
\par
******************************************************************
\par
*
\par
001900-CALC-OFFSET.
\par
*
\par
MOVE DW-OFFSET TO DW-OFFSET-UNSIGNED.
\par
*
\par
IF (DW-OFFSET POSITIVE)
\par
ADD DW-OFFSET-YYYY TO DW-WORK-YYYY
\par
MOVE DW-OFFSET-MM TO DW-MONTHS
\par
PERFORM 001500-ADD-MONTHS
\par
THRU 001500-EXIT
\par
MOVE DW-OFFSET-DD TO DW-DAYS
\par
PERFORM 001300-ADD-DAYS
\par
THRU 001300-EXIT
\par
ELSE
\par
IF (DW-OFFSET NEGATIVE)
\par
SUBTRACT DW-OFFSET-YYYY FROM DW-WORK-YYYY
\par
PERFORM 001920-SUBTRACT-MONTH
\par
THRU 001920-EXIT
\par
DW-OFFSET-MM TIMES
\par
MOVE DW-OFFSET-DD TO DW-DAYS
\par
PERFORM 001400-SUBTRACT-DAYS
\par
THRU 001400-EXIT.
\par
*
\par
001900-EXIT.
\par
EXIT.
\par
*
\par
*
\par
*
\par
001920-SUBTRACT-MONTH.
\par
*
\par
SUBTRACT 1 FROM DW-WORK-MM.
\par
IF (DW-WORK-MM < 01)
\par
SUBTRACT 1 FROM DW-WORK-YYYY
\par
ADD 12 TO DW-WORK-MM.
\par
*
\par
001920-EXIT.
\par
EXIT.
\par
*
\par
*
\par
*
\par
******************************************************************
\par
* *
\par
* C O M P U T E A G E *
\par
* *
\par
* *
\par
* WHEN GIVEN THE BEGIN DATE AND END DATE THIS ROUTINE *
\par
* CALCULATES THE AGE IN YEARS, MONTHS, DAYS AND TOTAL DAYS. *
\par
* *
\par
* *
\par
* USAGE: MOVE <BEGIN DATE> TO DW-BEG-YYYYMMDD. *
\par
* MOVE <END DATE> TO DW-END-YYYYMMDD. *
\par
* PERFORM 002000-COMPUTE-AGE *
\par
* THRU 002000-EXIT. *
\par
* *
\par
* RESULT: DW-AGE-YEARS = WHOLE YEARS *
\par
* DW-AGE-MONTHS = MONTHS OVER WHOLE YEAR *
\par
* DW-AGE-DAYS = DAYS OVER WHOLE MONTH *
\par
* *
\par
* (IE: AGE = YEARS + MONTHS + DAYS) *
\par
* *
\par
* DW-AGE-TOTDAYS = TOTAL AGE IN DAYS *
\par
* *
\par
* DW-BEG-YYYYMMDD = HAS BEEN MODIFIED *
\par
* DW-END-YYYYMMDD = HAS BEEN MODIFIED *
\par
* *
\par
******************************************************************
\par
*
\par
002000-COMPUTE-AGE.
\par
*
\par
* ** CALCULATE AGE IN DAYS **
\par
*
\par
MOVE DW-END-YYYYMMDD TO DW-WORK-YYYYMMDD.
\par
PERFORM 001100-DATE-DAYS
\par
--> --------------------
--> maximum size reached
--> --------------------
[ Verzeichnis aufwärts0.304unsichere Verbindung
]