xref: /openbsd/lib/libc/time/tzfile.h (revision df930be7)
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