intl/icu/source/tools/tzcode/tzfile.h

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/intl/icu/source/tools/tzcode/tzfile.h	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,180 @@
     1.4 +#ifndef TZFILE_H
     1.5 +
     1.6 +#define TZFILE_H
     1.7 +
     1.8 +/*
     1.9 +** This file is in the public domain, so clarified as of
    1.10 +** 1996-06-05 by Arthur David Olson.
    1.11 +*/
    1.12 +
    1.13 +/*
    1.14 +** This header is for use ONLY with the time conversion code.
    1.15 +** There is no guarantee that it will remain unchanged,
    1.16 +** or that it will remain at all.
    1.17 +** Do NOT copy it to any system include directory.
    1.18 +** Thank you!
    1.19 +*/
    1.20 +
    1.21 +/*
    1.22 +** ID
    1.23 +*/
    1.24 +
    1.25 +#ifndef lint
    1.26 +#ifndef NOID
    1.27 +static char	tzfilehid[] = "@(#)tzfile.h	8.1";
    1.28 +#endif /* !defined NOID */
    1.29 +#endif /* !defined lint */
    1.30 +
    1.31 +/*
    1.32 +** Information about time zone files.
    1.33 +*/
    1.34 +
    1.35 +#ifndef TZDIR
    1.36 +#define TZDIR	"/usr/local/etc/zoneinfo" /* Time zone object file directory */
    1.37 +#endif /* !defined TZDIR */
    1.38 +
    1.39 +#ifndef TZDEFAULT
    1.40 +#define TZDEFAULT	"localtime"
    1.41 +#endif /* !defined TZDEFAULT */
    1.42 +
    1.43 +#ifndef TZDEFRULES
    1.44 +#define TZDEFRULES	"posixrules"
    1.45 +#endif /* !defined TZDEFRULES */
    1.46 +
    1.47 +/*
    1.48 +** Each file begins with. . .
    1.49 +*/
    1.50 +
    1.51 +#define	TZ_MAGIC	"TZif"
    1.52 +
    1.53 +struct tzhead {
    1.54 +	char	tzh_magic[4];		/* TZ_MAGIC */
    1.55 +	char	tzh_version[1];		/* '\0' or '2' as of 2005 */
    1.56 +	char	tzh_reserved[15];	/* reserved--must be zero */
    1.57 +	char	tzh_ttisgmtcnt[4];	/* coded number of trans. time flags */
    1.58 +	char	tzh_ttisstdcnt[4];	/* coded number of trans. time flags */
    1.59 +	char	tzh_leapcnt[4];		/* coded number of leap seconds */
    1.60 +	char	tzh_timecnt[4];		/* coded number of transition times */
    1.61 +	char	tzh_typecnt[4];		/* coded number of local time types */
    1.62 +	char	tzh_charcnt[4];		/* coded number of abbr. chars */
    1.63 +};
    1.64 +
    1.65 +/*
    1.66 +** . . .followed by. . .
    1.67 +**
    1.68 +**	tzh_timecnt (char [4])s		coded transition times a la time(2)
    1.69 +**	tzh_timecnt (unsigned char)s	types of local time starting at above
    1.70 +**	tzh_typecnt repetitions of
    1.71 +**		one (char [4])		coded UTC offset in seconds
    1.72 +**		one (unsigned char)	used to set tm_isdst
    1.73 +**		one (unsigned char)	that's an abbreviation list index
    1.74 +**	tzh_charcnt (char)s		'\0'-terminated zone abbreviations
    1.75 +**	tzh_leapcnt repetitions of
    1.76 +**		one (char [4])		coded leap second transition times
    1.77 +**		one (char [4])		total correction after above
    1.78 +**	tzh_ttisstdcnt (char)s		indexed by type; if TRUE, transition
    1.79 +**					time is standard time, if FALSE,
    1.80 +**					transition time is wall clock time
    1.81 +**					if absent, transition times are
    1.82 +**					assumed to be wall clock time
    1.83 +**	tzh_ttisgmtcnt (char)s		indexed by type; if TRUE, transition
    1.84 +**					time is UTC, if FALSE,
    1.85 +**					transition time is local time
    1.86 +**					if absent, transition times are
    1.87 +**					assumed to be local time
    1.88 +*/
    1.89 +
    1.90 +/*
    1.91 +** If tzh_version is '2' or greater, the above is followed by a second instance
    1.92 +** of tzhead and a second instance of the data in which each coded transition
    1.93 +** time uses 8 rather than 4 chars,
    1.94 +** then a POSIX-TZ-environment-variable-style string for use in handling
    1.95 +** instants after the last transition time stored in the file
    1.96 +** (with nothing between the newlines if there is no POSIX representation for
    1.97 +** such instants).
    1.98 +*/
    1.99 +
   1.100 +/*
   1.101 +** In the current implementation, "tzset()" refuses to deal with files that
   1.102 +** exceed any of the limits below.
   1.103 +*/
   1.104 +
   1.105 +#ifndef TZ_MAX_TIMES
   1.106 +#define TZ_MAX_TIMES	1200
   1.107 +#endif /* !defined TZ_MAX_TIMES */
   1.108 +
   1.109 +#ifndef TZ_MAX_TYPES
   1.110 +#ifndef NOSOLAR
   1.111 +#define TZ_MAX_TYPES	256 /* Limited by what (unsigned char)'s can hold */
   1.112 +#endif /* !defined NOSOLAR */
   1.113 +#ifdef NOSOLAR
   1.114 +/*
   1.115 +** Must be at least 14 for Europe/Riga as of Jan 12 1995,
   1.116 +** as noted by Earl Chew.
   1.117 +*/
   1.118 +#define TZ_MAX_TYPES	20	/* Maximum number of local time types */
   1.119 +#endif /* !defined NOSOLAR */
   1.120 +#endif /* !defined TZ_MAX_TYPES */
   1.121 +
   1.122 +#ifndef TZ_MAX_CHARS
   1.123 +#define TZ_MAX_CHARS	50	/* Maximum number of abbreviation characters */
   1.124 +				/* (limited by what unsigned chars can hold) */
   1.125 +#endif /* !defined TZ_MAX_CHARS */
   1.126 +
   1.127 +#ifndef TZ_MAX_LEAPS
   1.128 +#define TZ_MAX_LEAPS	50	/* Maximum number of leap second corrections */
   1.129 +#endif /* !defined TZ_MAX_LEAPS */
   1.130 +
   1.131 +#define SECSPERMIN	60
   1.132 +#define MINSPERHOUR	60
   1.133 +#define HOURSPERDAY	24
   1.134 +#define DAYSPERWEEK	7
   1.135 +#define DAYSPERNYEAR	365
   1.136 +#define DAYSPERLYEAR	366
   1.137 +#define SECSPERHOUR	(SECSPERMIN * MINSPERHOUR)
   1.138 +#define SECSPERDAY	((long) SECSPERHOUR * HOURSPERDAY)
   1.139 +#define MONSPERYEAR	12
   1.140 +
   1.141 +#define TM_SUNDAY	0
   1.142 +#define TM_MONDAY	1
   1.143 +#define TM_TUESDAY	2
   1.144 +#define TM_WEDNESDAY	3
   1.145 +#define TM_THURSDAY	4
   1.146 +#define TM_FRIDAY	5
   1.147 +#define TM_SATURDAY	6
   1.148 +
   1.149 +#define TM_JANUARY	0
   1.150 +#define TM_FEBRUARY	1
   1.151 +#define TM_MARCH	2
   1.152 +#define TM_APRIL	3
   1.153 +#define TM_MAY		4
   1.154 +#define TM_JUNE		5
   1.155 +#define TM_JULY		6
   1.156 +#define TM_AUGUST	7
   1.157 +#define TM_SEPTEMBER	8
   1.158 +#define TM_OCTOBER	9
   1.159 +#define TM_NOVEMBER	10
   1.160 +#define TM_DECEMBER	11
   1.161 +
   1.162 +#define TM_YEAR_BASE	1900
   1.163 +
   1.164 +#define EPOCH_YEAR	1970
   1.165 +#define EPOCH_WDAY	TM_THURSDAY
   1.166 +
   1.167 +#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
   1.168 +
   1.169 +/*
   1.170 +** Since everything in isleap is modulo 400 (or a factor of 400), we know that
   1.171 +**	isleap(y) == isleap(y % 400)
   1.172 +** and so
   1.173 +**	isleap(a + b) == isleap((a + b) % 400)
   1.174 +** or
   1.175 +**	isleap(a + b) == isleap(a % 400 + b % 400)
   1.176 +** This is true even if % means modulo rather than Fortran remainder
   1.177 +** (which is allowed by C89 but not C99).
   1.178 +** We use this to avoid addition overflow problems.
   1.179 +*/
   1.180 +
   1.181 +#define isleap_sum(a, b)	isleap((a) % 400 + (b) % 400)
   1.182 +
   1.183 +#endif /* !defined TZFILE_H */

mercurial