%META:TOPICINFO{author="ChrisBartram" date="1149891519" format="1.1" version="1.1"}% %META:TOPICPARENT{name="Hp3000DiscXeqs"}%
PARM D0_DATE
# DAYS.XEQ - RETURNS NUMBER OF DAYS SINCE DEC 31, 1899
# D0_DATE MUST BE A DATE ON OR AFTER 1900/01/01 IN YYYYMMDD FORM.
# TIM ERICSON 07/14/1998
# FIX LEAP YEAR ERROR 09/16/1998
# EXTRACT THE YEAR, MONTH, AND DAY FROM THE INPUT DATE
SETVAR D0_YEAR, STR ( "!D0_DATE", 1, 4 )
SETVAR D0_MONTH, STR ( "!D0_DATE", 5, 2 )
SETVAR D0_DAYS, STR ( "!D0_DATE", 7, 2 )
# MAKE SURE THE YEAR, MONTH, AND DAY ARE NUMERIC
SETVAR D0_YEAR, !D0_YEAR
SETVAR D0_MONTH, !D0_MONTH
SETVAR D0_DAYS, !D0_DAYS
# DO *SOME* ERROR CHECKING
IF D0_YEAR < 1900 &
OR D0_MONTH > 12 &
OR D0_MONTH < 1 &
OR D0_DAYS > 31 &
OR D0_DAYS < 1
ECHO
ECHO ERROR! !D0_DATE is an invalid date!
ECHO
RETURN
ENDIF
# CALCULATE THE TOTAL DAYS BEFORE THE CURRENT YEAR
# IF IT'S *AFTER* FEBRUARY, OR THIS IS *NOT* A LEAP YEAR -
# NO ADJUSTMENT. IF THIS *IS* A LEAP YEAR, ADJUST.
# REMEMBER - THE CI DOES INTEGER MATH! (FRACTIONS ARE
# DROPPED!)
IF D0_MONTH > 2 &
OR D0_YEAR MOD 4 <> 0 &
OR ( D0_YEAR MOD 100 = 0 AND D0_YEAR MOD 400 <> 0 )
SETVAR D0_YEAR_DAYS, ( ( !D0_YEAR - 1900 ) * 1461 ) / 4
ELSE
SETVAR D0_YEAR_DAYS, ( ( ( !D0_YEAR - 1900 ) * 1461 ) / 4 ) - 1
ENDIF
# CALCULATE THE TOTAL DAYS BEFORE THE CURRENT MONTH
SETVAR D0_MONTH_DAYS, 0
WHILE D0_MONTH > 1 DO
SETVAR D0_MONTH, D0_MONTH - 1
SETVAR D0_MONTH_DAYS, D0_MONTH_DAYS + &
![ STR ( "312831303130313130313031", ( 2 * D0_MONTH ) - 1, 2 ) ]
ENDWHILE
# ADD IT ALL UP INTO THE RETURN VARIABLE
SETVAR RETURN_DAYS, D0_YEAR_DAYS + D0_MONTH_DAYS + D0_DAYS
DELETEVAR D0_@
-- Main.ChrisBartram - 09 Jun 2006