Annotation of embedaddon/ntp/include/ntp_calendar.h, revision 1.1.1.1

1.1       misho       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>