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