~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/tzfile.h

  • Committer: Brian Aker
  • Date: 2008-09-04 19:31:00 UTC
  • Revision ID: brian@tangent.org-20080904193100-l849hgghfy4urj43
Changing default character set from this point on.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 
 *
4
 
 *  Copyright (C) 2008 Sun Microsystems
5
 
 *
6
 
 *  This program is free software; you can redistribute it and/or modify
7
 
 *  it under the terms of the GNU General Public License as published by
8
 
 *  the Free Software Foundation; either version 2 of the License, or
9
 
 *  (at your option) any later version.
10
 
 *
11
 
 *  This program is distributed in the hope that it will be useful,
12
 
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 
 *  GNU General Public License for more details.
15
 
 *
16
 
 *  You should have received a copy of the GNU General Public License
17
 
 *  along with this program; if not, write to the Free Software
18
 
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19
 
 */
20
 
 
21
 
/*
22
 
   This file is based on public domain code from ftp://elsie.ncih.nist.gov/
23
 
   Initial source code is in the public domain, so clarified as of
24
 
   1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
25
 
*/
26
 
 
27
 
/*
28
 
  Information about time zone files.
29
 
*/
30
 
 
31
 
#ifndef TZDIR
32
 
#define TZDIR   "/usr/share/zoneinfo" /* Time zone object file directory */
33
 
#endif /* !defined TZDIR */
34
 
 
35
 
/*
36
 
  Each file begins with. . .
37
 
*/
38
 
 
39
 
#define TZ_MAGIC        "TZif"
40
 
 
41
 
struct tzhead {
42
 
        unsigned char   tzh_magic[4];           /* TZ_MAGIC */
43
 
        unsigned char   tzh_reserved[16];       /* reserved for future use */
44
 
        unsigned char   tzh_ttisgmtcnt[4];      /* coded number of trans. time flags */
45
 
        unsigned char   tzh_ttisstdcnt[4];      /* coded number of trans. time flags */
46
 
        unsigned char   tzh_leapcnt[4];         /* coded number of leap seconds */
47
 
        unsigned char   tzh_timecnt[4];         /* coded number of transition times */
48
 
        unsigned char   tzh_typecnt[4];         /* coded number of local time types */
49
 
        unsigned char   tzh_charcnt[4];         /* coded number of abbr. chars */
50
 
};
51
 
 
52
 
/*
53
 
  . . .followed by. . .
54
 
  
55
 
  tzh_timecnt (char [4])s               coded transition times a la time(2)
56
 
  tzh_timecnt (unsigned char)s          types of local time starting at above
57
 
  tzh_typecnt repetitions of
58
 
    one (char [4])                      coded UTC offset in seconds
59
 
    one (unsigned char)                 used to set tm_isdst
60
 
    one (unsigned char)                 that's an abbreviation list index
61
 
  tzh_charcnt (char)s                   '\0'-terminated zone abbreviations
62
 
  tzh_leapcnt repetitions of
63
 
    one (char [4])                      coded leap second transition times
64
 
    one (char [4])                      total correction after above
65
 
  tzh_ttisstdcnt (char)s                indexed by type; if true, transition
66
 
                                        time is standard time, if false,
67
 
                                        transition time is wall clock time
68
 
                                        if absent, transition times are
69
 
                                        assumed to be wall clock time
70
 
  tzh_ttisgmtcnt (char)s                indexed by type; if true, transition
71
 
                                        time is UTC, if false,
72
 
                                        transition time is local time
73
 
                                        if absent, transition times are
74
 
                                        assumed to be local time
75
 
*/
76
 
 
77
 
/*
78
 
  In the current implementation, we refuse to deal with files that
79
 
  exceed any of the limits below.
80
 
*/
81
 
 
82
 
#ifndef TZ_MAX_TIMES
83
 
/*
84
 
  The TZ_MAX_TIMES value below is enough to handle a bit more than a
85
 
  year's worth of solar time (corrected daily to the nearest second) or
86
 
  138 years of Pacific Presidential Election time
87
 
  (where there are three time zone transitions every fourth year).
88
 
*/
89
 
#define TZ_MAX_TIMES    370
90
 
#endif /* !defined TZ_MAX_TIMES */
91
 
 
92
 
#ifndef TZ_MAX_TYPES
93
 
#ifdef SOLAR
94
 
#define TZ_MAX_TYPES    256 /* Limited by what (unsigned char)'s can hold */
95
 
#else
96
 
/*
97
 
  Must be at least 14 for Europe/Riga as of Jan 12 1995,
98
 
  as noted by Earl Chew <earl@hpato.aus.hp.com>.
99
 
*/
100
 
#define TZ_MAX_TYPES    20      /* Maximum number of local time types */
101
 
#endif /* defined SOLAR */
102
 
#endif /* !defined TZ_MAX_TYPES */
103
 
 
104
 
#ifndef TZ_MAX_CHARS
105
 
#define TZ_MAX_CHARS    50      /* Maximum number of abbreviation characters */
106
 
                                /* (limited by what unsigned chars can hold) */
107
 
#endif /* !defined TZ_MAX_CHARS */
108
 
 
109
 
#ifndef TZ_MAX_LEAPS
110
 
#define TZ_MAX_LEAPS    50      /* Maximum number of leap second corrections */
111
 
#endif /* !defined TZ_MAX_LEAPS */
112
 
 
113
 
#ifndef TZ_MAX_REV_RANGES
114
 
#ifdef SOLAR
115
 
/* Solar (Asia/RiyadhXX) zones need significantly bigger TZ_MAX_REV_RANGES */
116
 
#define TZ_MAX_REV_RANGES (TZ_MAX_TIMES*2+TZ_MAX_LEAPS*2+2)
117
 
#else
118
 
#define TZ_MAX_REV_RANGES (TZ_MAX_TIMES+TZ_MAX_LEAPS+2)
119
 
#endif
120
 
#endif
121
 
 
122
 
#define SECS_PER_MIN    60
123
 
#define MINS_PER_HOUR   60
124
 
#define HOURS_PER_DAY   24
125
 
#define DAYS_PER_WEEK   7
126
 
#define DAYS_PER_NYEAR  365
127
 
#define DAYS_PER_LYEAR  366
128
 
#define SECS_PER_HOUR   (SECS_PER_MIN * MINS_PER_HOUR)
129
 
#define SECS_PER_DAY    ((long) SECS_PER_HOUR * HOURS_PER_DAY)
130
 
#define MONS_PER_YEAR   12
131
 
 
132
 
#define TM_YEAR_BASE    1900
133
 
 
134
 
#define EPOCH_YEAR      1970
135
 
 
136
 
/*
137
 
  Accurate only for the past couple of centuries,
138
 
  that will probably do.
139
 
*/
140
 
 
141
 
#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))