Project

General

Profile

Statistics
| Revision:

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_ */