DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 1 1000 SUB DATECV (INTYPE%, OUTTYPE%, CVTPARAM$) & 1010 !NAME: DATE CONVERSION ROUTINE & !PROGRAMMER: C. A. WILKINSON & !DATE: JAN. 1979 & ! MODIFICATION: INSERT LINE # 15010 & 15020 BY JYK ON 1-15-80 & ! MODIFICATION: OPTIMISED CODE AND REMOVED UN-NEEDED LINE NUMBERS & ! RESTRUCTURED FOR EASIER READING JMH 1-5-81 & !FUNCTION: THIS IS A SUB PROGRAM WHICH WILL CONVERT DATES & ! TO USE PUT THE FOLLOWING LOGIC IN YOUR PROGRAM & ! COMMON (DATPRM) DATE.1900%, DATE.STRING$ = 18%, DATE.JUL, ERRFLAG% & ! SET THE FOLLOWING THREE FIELDS: INTYPE%, OUTTYPE%, CVTPARAM$ & ! INTYPE% INDICATES INPUT FORMAT IN CVTPARAM$ & ! & ! VALID INTYPE% AND CORRESPONDING CVTPARAM$ ARE AS FOLLOWS & ! 1% = JULIAN DATE YYDDD, 78029 & ! 2% = MM/DD/YY, 01/29/78 & ! 3% = MMDDYY, 012978 & ! 4% = DAYS FROM JAN. 1, 1901, DDDDD, 28253 & ! 5% = STANDARD SYSTEM DATE DD-Mmm-YY, 28-Jan-78 & ! NOTE THAT THE LAST TWO LETTERS OF MONTH ARE LOWER CASE & ! 6% = YYMMDD & ! & ! VALID OUTTYPE%, RETURNED FORMAT AND FIELD ARE AS FOLLOWS & ! 1%, JULIAN DATE, YYDDD, 78027, DATE.JUL & ! 2%, MM/DD/YY, 01/27/78 & ! 3%, MMDDYY, 012778, DATE.STRING$ & ! 4%, DAYS SINCE JAN. 1, 1901, DDDDD, 28253, DATE.1900% & ! 5%, CALANDER DATE JANUARY 27, 1978, DATE.STRING$ & ! 6%, DAY OF WEEK, FRIDAY & ! 7%, YYMMDD & ! & ! CALL DATECV WITH THESE PARAMETERS & ! IF INVALID INTYPE%, OUTYPE%, OR INVALID INPUT DATE THEN ERRFLAG IS & ! SET TO 1% & ! DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 2 1020 ON ERROR GOTO 32000% & \ COMMON (DATPRM) DATE.1900%, DATE.STRING$ = 18%, DATE.JUL, ERRFLAG% & \ ERRFLAG% = 0% & \ GOTO 32000% IF INTYPE% < 1% OR INTYPE% > 6% & OR OUTTYPE% < 1% OR OUTTYPE% > 7% & \ DIM MTH.NAME$(12%), DAYS.IN.MTH%(12%), MTH.ABRV$(12%), & MTH.NUM%(12%), DAY.NAME$(7%) & \ RESTORE & \ READ MTH.NAME$(I%) FOR I% = 1% TO 12% & \ READ DAYS.IN.MTH%(I%) FOR I% = 1% TO 12% & \ READ MTH.ABRV$(I%) FOR I% = 1% TO 12% & \ READ MTH.NUM%(I%) FOR I% = 1% TO 12% & \ READ DAY.NAME$(I%) FOR I% = 0% TO 6% & ! & \ GOSUB 5000% IF INTYPE% = 1% & \ GOSUB 6000% IF INTYPE% = 2% & \ GOSUB 7000% IF INTYPE% = 3% & \ GOSUB 8000% IF INTYPE% = 4% & \ GOSUB 9000% IF INTYPE% = 5% & \ GOSUB 15000% IF INTYPE% = 6% & ! & \ GOSUB 10000% IF OUTTYPE% = 1% & \ GOSUB 11000% IF OUTTYPE% = 2% OR & OUTTYPE% = 3% OR & OUTTYPE% = 7% & \ GOSUB 12000% IF OUTTYPE% = 4% & \ GOSUB 13000% IF OUTTYPE% = 5% & \ GOSUB 14000% IF OUTTYPE% = 6% & ! & \ GOTO 32767% & ! DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 3 5000 JYR% = VAL(MID(CVTPARAM$,1%,2%)) & \ JDAY% = VAL(MID(CVTPARAM$,3%,3%)) ! INPUT JULIAN DATE & \ GOTO 32000% IF JYR% < 70% OR JYR% > 90% OR JDAY% < 1% OR JDAY% > 366% & \ RETURN & ! DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 4 6000 JYR% = VAL(MID(CVTPARAM$,7%,2%)) ! INPUT MM/DD/YY & \ GOSUB 20000% & \ MTH% = VAL(MID(CVTPARAM$,1%,2%)) & \ DAYS% = VAL(MID(CVTPARAM$,4%,2%)) & \ GOSUB 22000% & \ RETURN & ! DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 5 7000 JYR% = VAL(MID(CVTPARAM$,5%,2%)) ! INPUT MMDDYY & \ GOSUB 20000% & \ MTH% = VAL(MID(CVTPARAM$,1%,2%)) & \ DAYS% = VAL(MID(CVTPARAM$,3%,2%)) & \ GOSUB 22000% & \ RETURN & ! DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 6 8000 CENT.DAYS = VAL(MID(CVTPARAM$,1%,5%)) !INPUT TOTAL DAYS IN CENTURY & \ CALC1% = (CENT.DAYS - 1.0) / 1461.0 & \ JYR% = CALC1% * 4% & \ CALC2 = CENT.DAYS - (CALC1% * 1461.0) & \ CALC3 = CALC2 & \ FOR I% = 1% TO 4% & \ CALC3 = CALC3 - 365.0 & \ GOTO 8010% IF CALC3 <= 0.0 & \ NEXT I% & 8010 J% = I% - 1% & \ JYR% = JYR% + I% & \ CALC4 = J% * 365.0 & \ CALC3 = CALC2 - CALC4 & \ JDAY% = CALC3 & \ GOTO 32000% IF CENT.DAYS < 25203.0 OR CENT.DAYS > 32767.0 & \ RETURN & ! DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 7 9000 JYR% = VAL(MID(CVTPARAM$,8%,2%)) !INPUT DATE DD-MMM-YY & \ GOSUB 20000% & \ GOTO 9010% IF MTH.ABRV$(I%) = MID(CVTPARAM$,4%,3%) FOR I% = 1% TO 12% & \ GOTO 32000% & 9010 JDAY% = VAL(MID(CVTPARAM$,1%,2%)) & \ GOTO 32000% IF JYR% < 70% OR JYR% > 89% OR JDAY% < 1% OR JDAY% > 31% & \ I% = I% - 1% & \ JDAY% = JDAY% + DAYS.IN.MTH%(J%) FOR J% = 1% TO I% & \ RETURN & ! DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 8 10000 JYR = JYR% * 1000.0 ! OUTPUT JULIAN DATE & \ DATE.JUL = JYR + JDAY% & \ RETURN & ! DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 9 11000 JYR$ = NUM1$(JYR%) ! OUTPUT MM/DD/YY & \ GOSUB 20000% & \ GOSUB 21000% & \ IF I% < 10% & THEN MONTH.OUT$ = '0' + NUM1$(I%) & ELSE MONTH.OUT$ = NUM1$(I%) & 11010 IF CALC1% < 10% & THEN DAY.OUT$ = '0' + NUM1$(CALC1%) & ELSE DAY.OUT$ = NUM1$(CALC1%) & 11020 DATE.STRING$ = MONTH.OUT$ + '/' + DAY.OUT$ + "/" + JYR$ & IF OUTTYPE% = 2% & \ DATE.STRING$ = MONTH.OUT$ + DAY.OUT$ + JYR$ & IF OUTTYPE% = 3% & \ DATE.STRING$ = JYR$ + MONTH.OUT$ + DAY.OUT$ & IF OUTTYPE% = 7% & ! & ! 2% = MM/DD/YY & ! 3% = MMDDYY & ! 7% = YYMMDD & ! & 11030 RETURN & ! DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 10 12000 JYR% = JYR% - 1% & \ CALC1% = JYR% / 4% ! OUTPUT DAYS IN CENTURY & \ CALC2 = JDAY% + (365% * JYR%) + CALC1% & \ DATE.1900% = CALC2 & \ RETURN & ! DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 11 13000 OUTYEAR$ = '19' + NUM1$(JYR%) ! OUTPUT CALENDAR DATE & \ GOSUB 20000% & \ GOSUB 21000% & \ DAY.OUT$ = NUM1$(CALC1%) & \ DATE.STRING$ = MTH.NAME$(I%) + ' ' + DAY.OUT$ + ', ' + OUTYEAR$ & \ RETURN & ! DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 12 14000 OUTTYPE% = 3% ! OUTPUT DAY OF WEEK & \ GOSUB 11000% ! CONVERTS BACK TO MMDDYY & \ YR% = VAL(MID(DATE.STRING$,5%,2%)) & \ GOSUB 20000% ! CHECK FOR LEAP YEAR & \ MTH% = VAL(MID(DATE.STRING$,1%,2%)) & \ DAY% = VAL(MID(DATE.STRING$,3%,2%)) & \ CALC1% = YR%/4% + YR% + DAY% + MTH.NUM%(MTH%) & \ CALC2% = CALC1% / 7% & \ CALC1% = CALC1% - 7% * CALC2% & \ DATE.STRING$ = DAY.NAME$(CALC1%) & 14010 IF CALC1% < 2% THEN CALC1% = CALC1% + 5% & ELSE CALC1% = CALC1% - 2% & 14020 DATE.1900% = CALC1% & \ RETURN & ! DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 13 15000 JYR% = VAL(MID(CVTPARAM$,1%,2%)) ! INPUT YYMMDD & \ GOSUB 20000% & \ MTH% = VAL(MID(CVTPARAM$,3%,2%)) & \ DAYS% = VAL(MID(CVTPARAM$,5%,2%)) & \ GOSUB 22000% & \ RETURN & ! DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 14 20000 LEAP1% = JYR% - 1% & \ LEAP2% = LEAP1% / 4% ! CHECK FOR LEAP YEAR & \ LEAP1% = LEAP1% - (LEAP2% * 4.0) & 20010 IF LEAP1% = 3% & THEN DAYS.IN.MTH%(2%) = 29% & \ MTH.NUM%(1%) = 0% & \ MTH.NUM%(2%) = 3% & 20020 RETURN & ! DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 15 21000 CALC1% = JDAY% & \ FOR I% = 1% TO 12% & \ RETURN IF CALC1% <= DAYS.IN.MTH%(I%) & \ CALC1% = CALC1% - DAYS.IN.MTH%(I%) & \ NEXT I% & \ RETURN & ! DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 16 22000 GOTO 22010% IF MTH% = 1% & \ J% = MTH% - 1% & \ JDAY% = JDAY% + DAYS.IN.MTH%(I%) FOR I% = 1% TO J% & 22010 JDAY% = JDAY% + DAYS% & \ GOTO 32000 IF JYR% < 70% OR JYR% > 89% & \ GOTO 32000 IF MTH% < 1% OR MTH% > 12% & \ GOTO 32000 IF DAYS% < 1% OR DAYS% > DAYS.IN.MTH%(MTH%) & 22020 RETURN & ! DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 17 31000 DATA JANUARY,FEBRUARY,MARCH,APRIL,MAY,JUNE,JULY, & AUGUST,SEPTEMBER,OCTOBER,NOVEMBER,DECEMBER, & 31,28,31,30,31,30,31,31,30,31,30,31, & Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec, & 1,4,4,0,2,5,0,3,6,1,4,6,SATURDAY,SUNDAY,MONDAY,TUESDAY, & WEDNESDAY,THURSDAY,FRIDAY & ! DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 18 32000 ERRFLAG% = 1% & \ RESUME 32767% & 32767 SUBEND DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 19 Line Numbers #5000 1020:12 #6000 1020:13 #7000 1020:14 #8000 1020:15 #8010 8000:8 #9000 1020:16 #9010 9000:3 #10000 1020:18 #11000 1020:19 14000:2 #12000 1020:20 #13000 1020:21 #14000 1020:22 #15000 1020:17 #20000 6000:2 7000:2 9000:2 11000:2 13000:2 14000:4 15000:2 #21000 11000:3 13000:3 #22000 6000:5 7000:5 15000:5 #22010 22000 #32000 1020 1020:4 5000:3 8010:6 9000:4 9010:2 22010:2 22010:3 22010:4 #32767 1020:23 32000:2 Variables CALC1% @8000:2 8000:3 8000:4 11010 11010:2 11010:3 @12000:2 12000:3 13000:4 @14000:7 14000:8 @14000:9 14000:9 14000:10 14010 @14010:2 14010:2 @14010:3 14010:3 14020 @21000 21000:3 @21000:4 21000:4 CALC2 @8000:4 8000:5 8010:4 @12000:3 12000:4 CALC2% @14000:8 14000:9 CALC3 @8000:5 @8000:7 8000:7 8000:8 @8010:4 8010:5 CALC4 @8010:3 8010:4 CENT.DAYS @8000 8000:2 8000:4 8010:6 8010:6 CVTPARAM$ #1000 5000 5000:2 6000 6000:3 6000:4 7000 7000:3 7000:4 8000 9000 9000:3 9010 15000 15000:3 15000:4 DATE.1900% #1020:2 @12000:4 @14020 DATE.JUL #1020:2 @10000:2 DATE.STRING$=18 #1020:2 @11020 @11020:2 @11020:3 @13000:5 14000:3 14000:5 14000:6 @14000:10 DAY% @14000:6 14000:7 DAY.NAME$(7) #1020:5 @1020:11 14000:10 DAY.OUT$ @11010:2 @11010:3 11020 11020:2 11020:3 @13000:4 13000:5 DAYS% @6000:4 @7000:4 @15000:4 22010 22010:4 22010:4 DAYS.IN.MTH%(12) #1020:5 @1020:8 9010:4 @20010:2 21000:3 21000:4 22000:3 22010:4 ERRFLAG% #1020:2 @1020:3 @32000 I% 1020:7 @1020:7 1020:8 @1020:8 1020:9 @1020:9 1020:10 @1020:10 1020:11 @1020:11 @8000:6 8000:9 8010 8010:2 9000:3 @9000:3 @9010:3 9010:3 9010:4 11000:4 11000:5 11000:6 13000:5 @21000:2 DATECV Cross-Reference Listing of DATECV.B2S on 03-Dec-82 at 08:30 Page 20 21000:3 21000:4 21000:5 22000:3 @22000:3 INTYPE% #1000 1020:4 1020:4 1020:12 1020:13 1020:14 1020:15 1020:16 1020:17 J% @8010 8010:3 9010:4 @9010:4 @22000:2 22000:3 JDAY% @5000:2 5000:3 5000:3 @8010:5 @9010 9010:2 9010:2 @9010:4 9010:4 10000:2 12000:3 21000 @22000:3 22000:3 @22010 22010 JYR @10000 10000:2 JYR% @5000 5000:3 5000:3 @6000 @7000 @8000:3 @8010:2 8010:2 @9000 9010:2 9010:2 10000 11000 @12000 12000 12000:2 12000:3 13000 @15000 20000 22010:2 22010:2 JYR$ @11000 11020 11020:2 11020:3 LEAP1% @20000 20000:2 @20000:3 20000:3 20010 LEAP2% @20000:2 20000:3 MONTH.OUT$ @11000:5 @11000:6 11020 11020:2 11020:3 MTH% @6000:3 @7000:3 @14000:5 14000:7 @15000:3 22000 22000:2 22010:3 22010:3 22010:4 MTH.ABRV$(12) #1020:5 @1020:9 9000:3 MTH.NAME$(12) #1020:5 @1020:7 13000:5 MTH.NUM%(12) #1020:5 @1020:10 14000:7 @20010:3 @20010:4 OUTTYPE% #1000 1020:4 1020:4 1020:18 1020:19 1020:19 1020:19 1020:20 1020:21 1020:22 11020 11020:2 11020:3 @14000 OUTYEAR$ @13000 13000:5 YR% @14000:3 14000:7 14000:7 COMMON Areas DATPRM #1020:2 DATE.1900% DATE.STRING$=18 DATE.JUL ERRFLAG% Subprogram name: DATECV There were 53 identifiers listed, and 282 references to them. 79 work-file entries (10 disk blocks) were used.