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