File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ntp / include / ntp_calendar.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:08:38 2012 UTC (12 years, 5 months ago) by misho
Branches: ntp, MAIN
CVS tags: v4_2_6p5p0, v4_2_6p5, HEAD
ntp 4.2.6p5

    1: /*
    2:  * ntp_calendar.h - definitions for the calendar time-of-day routine
    3:  */
    4: #ifndef NTP_CALENDAR_H
    5: #define NTP_CALENDAR_H
    6: 
    7: #include "ntp_types.h"
    8: 
    9: struct calendar {
   10: 	u_short year;		/* year (A.D.) */
   11: 	u_short yearday;	/* day of year, 1 = January 1 */
   12: 	u_char month;		/* month, 1 = January */
   13: 	u_char monthday;	/* day of month */
   14: 	u_char hour;		/* hour of day, midnight = 0 */
   15: 	u_char minute;		/* minute of hour */
   16: 	u_char second;		/* second of minute */
   17: };
   18: 
   19: /*
   20:  * Days in each month.  30 days hath September...
   21:  */
   22: #define	JAN	31
   23: #define	FEB	28
   24: #define	FEBLEAP	29
   25: #define	MAR	31
   26: #define	APR	30
   27: #define	MAY	31
   28: #define	JUN	30
   29: #define	JUL	31
   30: #define	AUG	31
   31: #define	SEP	30
   32: #define	OCT	31
   33: #define	NOV	30
   34: #define	DEC	31
   35: 
   36: /*
   37:  * We deal in a 4 year cycle starting at March 1, 1900.  We assume
   38:  * we will only want to deal with dates since then, and not to exceed
   39:  * the rollover day in 2036.
   40:  */
   41: #define	SECSPERMIN	(60)			/* seconds per minute */
   42: #define	MINSPERHR	(60)			/* minutes per hour */
   43: #define	HRSPERDAY	(24)			/* hours per day */
   44: #define	DAYSPERYEAR	(365)			/* days per year */
   45: 
   46: #define	SECSPERDAY	(SECSPERMIN*MINSPERHR*HRSPERDAY)
   47: #define	SECSPERYEAR	(365 * SECSPERDAY)	/* regular year */
   48: #define	SECSPERLEAPYEAR	(366 * SECSPERDAY)	/* leap year */
   49: 
   50: #define	MAR1900		((JAN+FEB) * SECSPERDAY) /* no leap year in 1900 */
   51: #define	DAYSPERCYCLE	(365+365+365+366)	/* 3 normal years plus leap */
   52: #define	SECSPERCYCLE	(DAYSPERCYCLE*SECSPERDAY)
   53: #define	YEARSPERCYCLE	4
   54: 
   55: /*
   56:  * Gross hacks.  I have illicit knowlege that there won't be overflows
   57:  * here, the compiler often can't tell this.
   58:  */
   59: #define	TIMES60(val)	((((val)<<4) - (val))<<2)	/* *(16 - 1) * 4 */
   60: #define	TIMES24(val)	(((val)<<4) + ((val)<<3))	/* *16 + *8 */
   61: #define	TIMES7(val)	(((val)<<3) - (val))		/* *8  - *1 */
   62: #define	TIMESDPERC(val)	(((val)<<10) + ((val)<<8) \
   63: 			+ ((val)<<7) + ((val)<<5) \
   64: 			+ ((val)<<4) + ((val)<<2) + (val))	/* *big* hack */
   65: 
   66: /*
   67:  * Another big hack.  Cycle 22 started on March 1, 1988.  This is
   68:  * STARTCYCLE22 seconds after the start of cycle 0.
   69:  */
   70: #define	CYCLE22		(22)
   71: #define	STARTCYCLE22	(u_long)(0xa586b500)	/* 2777068800 */
   72: #define	MAR1988		(u_long)(STARTCYCLE22 + (u_long)MAR1900)
   73: 
   74: /*
   75:  * The length of January + February in leap and non-leap years.
   76:  */
   77: #define	JANFEBNOLEAP	((JAN+FEB) * SECSPERDAY)
   78: #define	JANFEBLEAP	((JAN+FEBLEAP) * SECSPERDAY)
   79: 
   80: 
   81: extern	void	caljulian	(u_long, struct calendar *);
   82: extern	u_long	caltontp	(const struct calendar *);
   83: 
   84: /*
   85:  * Additional support stuff for Ed Rheingold's calendrical calculations
   86:  */
   87: 
   88: /*
   89:  * Start day of NTP time as days past the imaginary date 12/1/1 BC.
   90:  * (This is the beginning of the Christian Era, or BCE.)
   91:  */
   92: #define	DAY_NTP_STARTS 693596
   93: /*
   94:  * The Gregorian calendar is based on a 400 year cycle.  This is the number
   95:  * of days in each cycle.
   96:  */
   97: #define	GREGORIAN_CYCLE_DAYS 146097
   98: 
   99: /*
  100:  * Days in a normal 100 year leap year calendar.  We lose a leap year day
  101:  * in years evenly divisible by 100 but not by 400.
  102:  */
  103: #define	GREGORIAN_NORMAL_CENTURY_DAYS 36524
  104: 
  105: /*
  106:  * Days in a normal 4 year leap year calendar cycle.
  107:  */
  108: #define	GREGORIAN_NORMAL_LEAP_CYCLE_DAYS 1461
  109: 
  110: #define	is_leapyear(y)	(!((y) % 4) && !(!((y) % 100) && (y) % 400))
  111: 
  112: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>