#ifndef NTP_CALENDAR_H
#define NTP_CALENDAR_H
#include "ntp_types.h"
struct calendar {
u_short year;
u_short yearday;
u_char month;
u_char monthday;
u_char hour;
u_char minute;
u_char second;
};
#define JAN 31
#define FEB 28
#define FEBLEAP 29
#define MAR 31
#define APR 30
#define MAY 31
#define JUN 30
#define JUL 31
#define AUG 31
#define SEP 30
#define OCT 31
#define NOV 30
#define DEC 31
#define SECSPERMIN (60)
#define MINSPERHR (60)
#define HRSPERDAY (24)
#define DAYSPERYEAR (365)
#define SECSPERDAY (SECSPERMIN*MINSPERHR*HRSPERDAY)
#define SECSPERYEAR (365 * SECSPERDAY)
#define SECSPERLEAPYEAR (366 * SECSPERDAY)
#define MAR1900 ((JAN+FEB) * SECSPERDAY)
#define DAYSPERCYCLE (365+365+365+366)
#define SECSPERCYCLE (DAYSPERCYCLE*SECSPERDAY)
#define YEARSPERCYCLE 4
#define TIMES60(val) ((((val)<<4) - (val))<<2)
#define TIMES24(val) (((val)<<4) + ((val)<<3))
#define TIMES7(val) (((val)<<3) - (val))
#define TIMESDPERC(val) (((val)<<10) + ((val)<<8) \
+ ((val)<<7) + ((val)<<5) \
+ ((val)<<4) + ((val)<<2) + (val))
#define CYCLE22 (22)
#define STARTCYCLE22 (u_long)(0xa586b500)
#define MAR1988 (u_long)(STARTCYCLE22 + (u_long)MAR1900)
#define JANFEBNOLEAP ((JAN+FEB) * SECSPERDAY)
#define JANFEBLEAP ((JAN+FEBLEAP) * SECSPERDAY)
extern void caljulian P((u_long, struct calendar *));
extern u_long caltontp P((const struct calendar *));
#define DAY_NTP_STARTS 693596
#define GREGORIAN_CYCLE_DAYS 146097
#define GREGORIAN_NORMAL_CENTURY_DAYS 36524
#define GREGORIAN_NORMAL_LEAP_CYCLE_DAYS 1461
#define is_leapyear(y) (y%4 == 0 && !(y%100 == 0 && !(y%400 == 0)))
#endif