root / lab4 / .minix-src / include / tzfile.h @ 14
History | View | Annotate | Download (5.02 KB)
1 |
/* $NetBSD: tzfile.h,v 1.8 2015/07/11 16:40:53 christos Exp $ */
|
---|---|
2 |
|
3 |
#ifndef _TZFILE_H_
|
4 |
#define _TZFILE_H_
|
5 |
|
6 |
/*
|
7 |
** This file is in the public domain, so clarified as of
|
8 |
** 1996-06-05 by Arthur David Olson.
|
9 |
*/
|
10 |
|
11 |
/*
|
12 |
** This header is for use ONLY with the time conversion code.
|
13 |
** There is no guarantee that it will remain unchanged,
|
14 |
** or that it will remain at all.
|
15 |
** Do NOT copy it to any system include directory.
|
16 |
** Thank you!
|
17 |
*/
|
18 |
|
19 |
/*
|
20 |
** Information about time zone files.
|
21 |
*/
|
22 |
|
23 |
#ifndef TZDIR /* Time zone object file directory */ |
24 |
#define TZDIR "/usr/share/zoneinfo" |
25 |
#endif /* !defined TZDIR */ |
26 |
|
27 |
#ifndef TZDEFAULT
|
28 |
#define TZDEFAULT "/etc/localtime" |
29 |
#endif /* !defined TZDEFAULT */ |
30 |
|
31 |
#ifndef TZDEFRULES
|
32 |
#define TZDEFRULES "posixrules" |
33 |
#endif /* !defined TZDEFRULES */ |
34 |
|
35 |
/*
|
36 |
** Each file begins with. . .
|
37 |
*/
|
38 |
|
39 |
#define TZ_MAGIC "TZif" |
40 |
|
41 |
struct tzhead {
|
42 |
char tzh_magic[4]; /* TZ_MAGIC */ |
43 |
char tzh_version[1]; /* '\0' or '2' or '3' as of 2013 */ |
44 |
char tzh_reserved[15]; /* reserved; must be zero */ |
45 |
char tzh_ttisgmtcnt[4]; /* coded number of trans. time flags */ |
46 |
char tzh_ttisstdcnt[4]; /* coded number of trans. time flags */ |
47 |
char tzh_leapcnt[4]; /* coded number of leap seconds */ |
48 |
char tzh_timecnt[4]; /* coded number of transition times */ |
49 |
char tzh_typecnt[4]; /* coded number of local time types */ |
50 |
char tzh_charcnt[4]; /* coded number of abbr. chars */ |
51 |
}; |
52 |
|
53 |
/*
|
54 |
** . . .followed by. . .
|
55 |
**
|
56 |
** tzh_timecnt (char [4])s coded transition times a la time(2)
|
57 |
** tzh_timecnt (unsigned char)s types of local time starting at above
|
58 |
** tzh_typecnt repetitions of
|
59 |
** one (char [4]) coded UT offset in seconds
|
60 |
** one (unsigned char) used to set tm_isdst
|
61 |
** one (unsigned char) that's an abbreviation list index
|
62 |
** tzh_charcnt (char)s '\0'-terminated zone abbreviations
|
63 |
** tzh_leapcnt repetitions of
|
64 |
** one (char [4]) coded leap second transition times
|
65 |
** one (char [4]) total correction after above
|
66 |
** tzh_ttisstdcnt (char)s indexed by type; if 1, transition
|
67 |
** time is standard time, if 0,
|
68 |
** transition time is wall clock time
|
69 |
** if absent, transition times are
|
70 |
** assumed to be wall clock time
|
71 |
** tzh_ttisgmtcnt (char)s indexed by type; if 1, transition
|
72 |
** time is UT, if 0,
|
73 |
** transition time is local time
|
74 |
** if absent, transition times are
|
75 |
** assumed to be local time
|
76 |
*/
|
77 |
|
78 |
/*
|
79 |
** If tzh_version is '2' or greater, the above is followed by a second instance
|
80 |
** of tzhead and a second instance of the data in which each coded transition
|
81 |
** time uses 8 rather than 4 chars,
|
82 |
** then a POSIX-TZ-environment-variable-style string for use in handling
|
83 |
** instants after the last transition time stored in the file
|
84 |
** (with nothing between the newlines if there is no POSIX representation for
|
85 |
** such instants).
|
86 |
**
|
87 |
** If tz_version is '3' or greater, the above is extended as follows.
|
88 |
** First, the POSIX TZ string's hour offset may range from -167
|
89 |
** through 167 as compared to the POSIX-required 0 through 24.
|
90 |
** Second, its DST start time may be January 1 at 00:00 and its stop
|
91 |
** time December 31 at 24:00 plus the difference between DST and
|
92 |
** standard time, indicating DST all year.
|
93 |
*/
|
94 |
|
95 |
/*
|
96 |
** In the current implementation, "tzset()" refuses to deal with files that
|
97 |
** exceed any of the limits below.
|
98 |
*/
|
99 |
|
100 |
#ifndef TZ_MAX_TIMES
|
101 |
#define TZ_MAX_TIMES 2000 |
102 |
#endif /* !defined TZ_MAX_TIMES */ |
103 |
|
104 |
#ifndef TZ_MAX_TYPES
|
105 |
/* This must be at least 17 for Europe/Samara and Europe/Vilnius. */
|
106 |
#define TZ_MAX_TYPES 256 /* Limited by what (unsigned char)'s can hold */ |
107 |
#endif /* !defined TZ_MAX_TYPES */ |
108 |
|
109 |
#ifndef TZ_MAX_CHARS
|
110 |
#define TZ_MAX_CHARS 50 /* Maximum number of abbreviation characters */ |
111 |
/* (limited by what unsigned chars can hold) */
|
112 |
#endif /* !defined TZ_MAX_CHARS */ |
113 |
|
114 |
#ifndef TZ_MAX_LEAPS
|
115 |
#define TZ_MAX_LEAPS 50 /* Maximum number of leap second corrections */ |
116 |
#endif /* !defined TZ_MAX_LEAPS */ |
117 |
|
118 |
#define SECSPERMIN 60 |
119 |
#define MINSPERHOUR 60 |
120 |
#define HOURSPERDAY 24 |
121 |
#define DAYSPERWEEK 7 |
122 |
#define DAYSPERNYEAR 365 |
123 |
#define DAYSPERLYEAR 366 |
124 |
#define SECSPERHOUR (SECSPERMIN * MINSPERHOUR)
|
125 |
#define SECSPERDAY ((int_fast32_t) SECSPERHOUR * HOURSPERDAY)
|
126 |
#define MONSPERYEAR 12 |
127 |
|
128 |
#define TM_SUNDAY 0 |
129 |
#define TM_MONDAY 1 |
130 |
#define TM_TUESDAY 2 |
131 |
#define TM_WEDNESDAY 3 |
132 |
#define TM_THURSDAY 4 |
133 |
#define TM_FRIDAY 5 |
134 |
#define TM_SATURDAY 6 |
135 |
|
136 |
#define TM_JANUARY 0 |
137 |
#define TM_FEBRUARY 1 |
138 |
#define TM_MARCH 2 |
139 |
#define TM_APRIL 3 |
140 |
#define TM_MAY 4 |
141 |
#define TM_JUNE 5 |
142 |
#define TM_JULY 6 |
143 |
#define TM_AUGUST 7 |
144 |
#define TM_SEPTEMBER 8 |
145 |
#define TM_OCTOBER 9 |
146 |
#define TM_NOVEMBER 10 |
147 |
#define TM_DECEMBER 11 |
148 |
|
149 |
#define TM_YEAR_BASE 1900 |
150 |
|
151 |
#define EPOCH_YEAR 1970 |
152 |
#define EPOCH_WDAY TM_THURSDAY
|
153 |
|
154 |
#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0)) |
155 |
|
156 |
/*
|
157 |
** Since everything in isleap is modulo 400 (or a factor of 400), we know that
|
158 |
** isleap(y) == isleap(y % 400)
|
159 |
** and so
|
160 |
** isleap(a + b) == isleap((a + b) % 400)
|
161 |
** or
|
162 |
** isleap(a + b) == isleap(a % 400 + b % 400)
|
163 |
** This is true even if % means modulo rather than Fortran remainder
|
164 |
** (which is allowed by C89 but not C99).
|
165 |
** We use this to avoid addition overflow problems.
|
166 |
*/
|
167 |
|
168 |
#define isleap_sum(a, b) isleap((a) % 400 + (b) % 400) |
169 |
|
170 |
#endif /* !defined _TZFILE_H_ */ |