1*df930be7Sderaadt /* $NetBSD: tzfile.h,v 1.3 1995/03/09 23:41:24 jtc Exp $ */ 2*df930be7Sderaadt 3*df930be7Sderaadt #ifndef TZFILE_H 4*df930be7Sderaadt #define TZFILE_H 5*df930be7Sderaadt 6*df930be7Sderaadt /* 7*df930be7Sderaadt ** This header is for use ONLY with the time conversion code. 8*df930be7Sderaadt ** There is no guarantee that it will remain unchanged, 9*df930be7Sderaadt ** or that it will remain at all. 10*df930be7Sderaadt ** Do NOT copy it to any system include directory. 11*df930be7Sderaadt ** Thank you! 12*df930be7Sderaadt */ 13*df930be7Sderaadt 14*df930be7Sderaadt /* 15*df930be7Sderaadt ** ID 16*df930be7Sderaadt */ 17*df930be7Sderaadt 18*df930be7Sderaadt #ifndef lint 19*df930be7Sderaadt #ifndef NOID 20*df930be7Sderaadt static char tzfilehid[] = "@(#)tzfile.h 7.6"; 21*df930be7Sderaadt #endif /* !defined NOID */ 22*df930be7Sderaadt #endif /* !defined lint */ 23*df930be7Sderaadt 24*df930be7Sderaadt /* 25*df930be7Sderaadt ** Information about time zone files. 26*df930be7Sderaadt */ 27*df930be7Sderaadt 28*df930be7Sderaadt #ifndef TZDIR /* Time zone object file directory */ 29*df930be7Sderaadt #define TZDIR "/usr/share/zoneinfo" 30*df930be7Sderaadt #endif /* !defined TZDIR */ 31*df930be7Sderaadt 32*df930be7Sderaadt #ifndef TZDEFAULT 33*df930be7Sderaadt #define TZDEFAULT "/etc/localtime" 34*df930be7Sderaadt #endif /* !defined TZDEFAULT */ 35*df930be7Sderaadt 36*df930be7Sderaadt #ifndef TZDEFRULES 37*df930be7Sderaadt #define TZDEFRULES "posixrules" 38*df930be7Sderaadt #endif /* !defined TZDEFRULES */ 39*df930be7Sderaadt 40*df930be7Sderaadt /* 41*df930be7Sderaadt ** Each file begins with. . . 42*df930be7Sderaadt */ 43*df930be7Sderaadt 44*df930be7Sderaadt struct tzhead { 45*df930be7Sderaadt char tzh_reserved[20]; /* reserved for future use */ 46*df930be7Sderaadt char tzh_ttisgmtcnt[4]; /* coded number of trans. time flags */ 47*df930be7Sderaadt char tzh_ttisstdcnt[4]; /* coded number of trans. time flags */ 48*df930be7Sderaadt char tzh_leapcnt[4]; /* coded number of leap seconds */ 49*df930be7Sderaadt char tzh_timecnt[4]; /* coded number of transition times */ 50*df930be7Sderaadt char tzh_typecnt[4]; /* coded number of local time types */ 51*df930be7Sderaadt char tzh_charcnt[4]; /* coded number of abbr. chars */ 52*df930be7Sderaadt }; 53*df930be7Sderaadt 54*df930be7Sderaadt /* 55*df930be7Sderaadt ** . . .followed by. . . 56*df930be7Sderaadt ** 57*df930be7Sderaadt ** tzh_timecnt (char [4])s coded transition times a la time(2) 58*df930be7Sderaadt ** tzh_timecnt (unsigned char)s types of local time starting at above 59*df930be7Sderaadt ** tzh_typecnt repetitions of 60*df930be7Sderaadt ** one (char [4]) coded GMT offset in seconds 61*df930be7Sderaadt ** one (unsigned char) used to set tm_isdst 62*df930be7Sderaadt ** one (unsigned char) that's an abbreviation list index 63*df930be7Sderaadt ** tzh_charcnt (char)s '\0'-terminated zone abbreviations 64*df930be7Sderaadt ** tzh_leapcnt repetitions of 65*df930be7Sderaadt ** one (char [4]) coded leap second transition times 66*df930be7Sderaadt ** one (char [4]) total correction after above 67*df930be7Sderaadt ** tzh_ttisstdcnt (char)s indexed by type; if TRUE, transition 68*df930be7Sderaadt ** time is standard time, if FALSE, 69*df930be7Sderaadt ** transition time is wall clock time 70*df930be7Sderaadt ** if absent, transition times are 71*df930be7Sderaadt ** assumed to be wall clock time 72*df930be7Sderaadt ** tzh_ttisgmtcnt (char)s indexed by type; if TRUE, transition 73*df930be7Sderaadt ** time is GMT, if FALSE, 74*df930be7Sderaadt ** transition time is local time 75*df930be7Sderaadt ** if absent, transition times are 76*df930be7Sderaadt ** assumed to be local time 77*df930be7Sderaadt */ 78*df930be7Sderaadt 79*df930be7Sderaadt /* 80*df930be7Sderaadt ** In the current implementation, "tzset()" refuses to deal with files that 81*df930be7Sderaadt ** exceed any of the limits below. 82*df930be7Sderaadt */ 83*df930be7Sderaadt 84*df930be7Sderaadt #ifndef TZ_MAX_TIMES 85*df930be7Sderaadt /* 86*df930be7Sderaadt ** The TZ_MAX_TIMES value below is enough to handle a bit more than a 87*df930be7Sderaadt ** year's worth of solar time (corrected daily to the nearest second) or 88*df930be7Sderaadt ** 138 years of Pacific Presidential Election time 89*df930be7Sderaadt ** (where there are three time zone transitions every fourth year). 90*df930be7Sderaadt */ 91*df930be7Sderaadt #define TZ_MAX_TIMES 370 92*df930be7Sderaadt #endif /* !defined TZ_MAX_TIMES */ 93*df930be7Sderaadt 94*df930be7Sderaadt #ifndef TZ_MAX_TYPES 95*df930be7Sderaadt #ifndef NOSOLAR 96*df930be7Sderaadt #define TZ_MAX_TYPES 256 /* Limited by what (unsigned char)'s can hold */ 97*df930be7Sderaadt #endif /* !defined NOSOLAR */ 98*df930be7Sderaadt #ifdef NOSOLAR 99*df930be7Sderaadt /* 100*df930be7Sderaadt ** Must be at least 14 for Europe/Riga as of Jan 12 1995, 101*df930be7Sderaadt ** as noted by Earl Chew <earl@hpato.aus.hp.com>. 102*df930be7Sderaadt */ 103*df930be7Sderaadt #define TZ_MAX_TYPES 20 /* Maximum number of local time types */ 104*df930be7Sderaadt #endif /* !defined NOSOLAR */ 105*df930be7Sderaadt #endif /* !defined TZ_MAX_TYPES */ 106*df930be7Sderaadt 107*df930be7Sderaadt #ifndef TZ_MAX_CHARS 108*df930be7Sderaadt #define TZ_MAX_CHARS 50 /* Maximum number of abbreviation characters */ 109*df930be7Sderaadt /* (limited by what unsigned chars can hold) */ 110*df930be7Sderaadt #endif /* !defined TZ_MAX_CHARS */ 111*df930be7Sderaadt 112*df930be7Sderaadt #ifndef TZ_MAX_LEAPS 113*df930be7Sderaadt #define TZ_MAX_LEAPS 50 /* Maximum number of leap second corrections */ 114*df930be7Sderaadt #endif /* !defined TZ_MAX_LEAPS */ 115*df930be7Sderaadt 116*df930be7Sderaadt #define SECSPERMIN 60 117*df930be7Sderaadt #define MINSPERHOUR 60 118*df930be7Sderaadt #define HOURSPERDAY 24 119*df930be7Sderaadt #define DAYSPERWEEK 7 120*df930be7Sderaadt #define DAYSPERNYEAR 365 121*df930be7Sderaadt #define DAYSPERLYEAR 366 122*df930be7Sderaadt #define SECSPERHOUR (SECSPERMIN * MINSPERHOUR) 123*df930be7Sderaadt #define SECSPERDAY ((long) SECSPERHOUR * HOURSPERDAY) 124*df930be7Sderaadt #define MONSPERYEAR 12 125*df930be7Sderaadt 126*df930be7Sderaadt #define TM_SUNDAY 0 127*df930be7Sderaadt #define TM_MONDAY 1 128*df930be7Sderaadt #define TM_TUESDAY 2 129*df930be7Sderaadt #define TM_WEDNESDAY 3 130*df930be7Sderaadt #define TM_THURSDAY 4 131*df930be7Sderaadt #define TM_FRIDAY 5 132*df930be7Sderaadt #define TM_SATURDAY 6 133*df930be7Sderaadt 134*df930be7Sderaadt #define TM_JANUARY 0 135*df930be7Sderaadt #define TM_FEBRUARY 1 136*df930be7Sderaadt #define TM_MARCH 2 137*df930be7Sderaadt #define TM_APRIL 3 138*df930be7Sderaadt #define TM_MAY 4 139*df930be7Sderaadt #define TM_JUNE 5 140*df930be7Sderaadt #define TM_JULY 6 141*df930be7Sderaadt #define TM_AUGUST 7 142*df930be7Sderaadt #define TM_SEPTEMBER 8 143*df930be7Sderaadt #define TM_OCTOBER 9 144*df930be7Sderaadt #define TM_NOVEMBER 10 145*df930be7Sderaadt #define TM_DECEMBER 11 146*df930be7Sderaadt 147*df930be7Sderaadt #define TM_YEAR_BASE 1900 148*df930be7Sderaadt 149*df930be7Sderaadt #define EPOCH_YEAR 1970 150*df930be7Sderaadt #define EPOCH_WDAY TM_THURSDAY 151*df930be7Sderaadt 152*df930be7Sderaadt /* 153*df930be7Sderaadt ** Accurate only for the past couple of centuries; 154*df930be7Sderaadt ** that will probably do. 155*df930be7Sderaadt */ 156*df930be7Sderaadt 157*df930be7Sderaadt #define isleap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0) 158*df930be7Sderaadt 159*df930be7Sderaadt #ifndef USG 160*df930be7Sderaadt 161*df930be7Sderaadt /* 162*df930be7Sderaadt ** Use of the underscored variants may cause problems if you move your code to 163*df930be7Sderaadt ** certain System-V-based systems; for maximum portability, use the 164*df930be7Sderaadt ** underscore-free variants. The underscored variants are provided for 165*df930be7Sderaadt ** backward compatibility only; they may disappear from future versions of 166*df930be7Sderaadt ** this file. 167*df930be7Sderaadt */ 168*df930be7Sderaadt 169*df930be7Sderaadt #define SECS_PER_MIN SECSPERMIN 170*df930be7Sderaadt #define MINS_PER_HOUR MINSPERHOUR 171*df930be7Sderaadt #define HOURS_PER_DAY HOURSPERDAY 172*df930be7Sderaadt #define DAYS_PER_WEEK DAYSPERWEEK 173*df930be7Sderaadt #define DAYS_PER_NYEAR DAYSPERNYEAR 174*df930be7Sderaadt #define DAYS_PER_LYEAR DAYSPERLYEAR 175*df930be7Sderaadt #define SECS_PER_HOUR SECSPERHOUR 176*df930be7Sderaadt #define SECS_PER_DAY SECSPERDAY 177*df930be7Sderaadt #define MONS_PER_YEAR MONSPERYEAR 178*df930be7Sderaadt 179*df930be7Sderaadt #endif /* !defined USG */ 180*df930be7Sderaadt 181*df930be7Sderaadt #endif /* !defined TZFILE_H */ 182