tzfile.h revision 92991
12708Swollman#ifndef TZFILE_H
22708Swollman#define TZFILE_H
32708Swollman
492991Sobrien
52708Swollman/*
617209Swollman** This file is in the public domain, so clarified as of
742989Swollman** 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
892991Sobrien**
992991Sobrien** $FreeBSD: head/lib/libc/stdtime/tzfile.h 92991 2002-03-22 23:42:05Z obrien $
1017209Swollman*/
1117209Swollman
1217209Swollman/*
132708Swollman** This header is for use ONLY with the time conversion code.
142708Swollman** There is no guarantee that it will remain unchanged,
152708Swollman** or that it will remain at all.
162708Swollman** Do NOT copy it to any system include directory.
172708Swollman** Thank you!
182708Swollman*/
192708Swollman
202708Swollman/*
212708Swollman** ID
222708Swollman*/
232708Swollman
242708Swollman#ifndef lint
252708Swollman#ifndef NOID
2617209Swollman/*
2742989Swollmanstatic char	tzfilehid[] = "@(#)tzfile.h	7.14";
2817209Swollman*/
292708Swollman#endif /* !defined NOID */
302708Swollman#endif /* !defined lint */
312708Swollman
322708Swollman/*
332708Swollman** Information about time zone files.
342708Swollman*/
352708Swollman
362708Swollman#ifndef TZDIR
372713Swollman#define TZDIR	"/usr/share/zoneinfo" /* Time zone object file directory */
382708Swollman#endif /* !defined TZDIR */
392708Swollman
402708Swollman#ifndef TZDEFAULT
412713Swollman#define TZDEFAULT	"/etc/localtime"
422708Swollman#endif /* !defined TZDEFAULT */
432708Swollman
442708Swollman#ifndef TZDEFRULES
452708Swollman#define TZDEFRULES	"posixrules"
462708Swollman#endif /* !defined TZDEFRULES */
472708Swollman
482708Swollman/*
492708Swollman** Each file begins with. . .
502708Swollman*/
512708Swollman
5242989Swollman#define	TZ_MAGIC	"TZif"
5342989Swollman
542708Swollmanstruct tzhead {
5542989Swollman 	char	tzh_magic[4];		/* TZ_MAGIC */
5642989Swollman	char	tzh_reserved[16];	/* reserved for future use */
579936Swollman	char	tzh_ttisgmtcnt[4];	/* coded number of trans. time flags */
582708Swollman	char	tzh_ttisstdcnt[4];	/* coded number of trans. time flags */
592708Swollman	char	tzh_leapcnt[4];		/* coded number of leap seconds */
602708Swollman	char	tzh_timecnt[4];		/* coded number of transition times */
612708Swollman	char	tzh_typecnt[4];		/* coded number of local time types */
622708Swollman	char	tzh_charcnt[4];		/* coded number of abbr. chars */
632708Swollman};
642708Swollman
652708Swollman/*
662708Swollman** . . .followed by. . .
672708Swollman**
682708Swollman**	tzh_timecnt (char [4])s		coded transition times a la time(2)
692708Swollman**	tzh_timecnt (unsigned char)s	types of local time starting at above
702708Swollman**	tzh_typecnt repetitions of
7142989Swollman**		one (char [4])		coded UTC offset in seconds
722708Swollman**		one (unsigned char)	used to set tm_isdst
732708Swollman**		one (unsigned char)	that's an abbreviation list index
742708Swollman**	tzh_charcnt (char)s		'\0'-terminated zone abbreviations
752708Swollman**	tzh_leapcnt repetitions of
762708Swollman**		one (char [4])		coded leap second transition times
772708Swollman**		one (char [4])		total correction after above
782708Swollman**	tzh_ttisstdcnt (char)s		indexed by type; if TRUE, transition
792708Swollman**					time is standard time, if FALSE,
802708Swollman**					transition time is wall clock time
812708Swollman**					if absent, transition times are
822708Swollman**					assumed to be wall clock time
839936Swollman**	tzh_ttisgmtcnt (char)s		indexed by type; if TRUE, transition
8442989Swollman**					time is UTC, if FALSE,
859936Swollman**					transition time is local time
869936Swollman**					if absent, transition times are
879936Swollman**					assumed to be local time
882708Swollman*/
892708Swollman
902708Swollman/*
912708Swollman** In the current implementation, "tzset()" refuses to deal with files that
922708Swollman** exceed any of the limits below.
932708Swollman*/
942708Swollman
952708Swollman#ifndef TZ_MAX_TIMES
962708Swollman/*
972708Swollman** The TZ_MAX_TIMES value below is enough to handle a bit more than a
982708Swollman** year's worth of solar time (corrected daily to the nearest second) or
992708Swollman** 138 years of Pacific Presidential Election time
1002708Swollman** (where there are three time zone transitions every fourth year).
1012708Swollman*/
1022708Swollman#define TZ_MAX_TIMES	370
1032708Swollman#endif /* !defined TZ_MAX_TIMES */
1042708Swollman
1052708Swollman#ifndef TZ_MAX_TYPES
1062708Swollman#ifndef NOSOLAR
1072708Swollman#define TZ_MAX_TYPES	256 /* Limited by what (unsigned char)'s can hold */
1082708Swollman#endif /* !defined NOSOLAR */
1092708Swollman#ifdef NOSOLAR
1109936Swollman/*
1119936Swollman** Must be at least 14 for Europe/Riga as of Jan 12 1995,
1129936Swollman** as noted by Earl Chew <earl@hpato.aus.hp.com>.
1139936Swollman*/
1149936Swollman#define TZ_MAX_TYPES	20	/* Maximum number of local time types */
1152708Swollman#endif /* !defined NOSOLAR */
1162708Swollman#endif /* !defined TZ_MAX_TYPES */
1172708Swollman
1182708Swollman#ifndef TZ_MAX_CHARS
1192708Swollman#define TZ_MAX_CHARS	50	/* Maximum number of abbreviation characters */
1202708Swollman				/* (limited by what unsigned chars can hold) */
1212708Swollman#endif /* !defined TZ_MAX_CHARS */
1222708Swollman
1232708Swollman#ifndef TZ_MAX_LEAPS
1242708Swollman#define TZ_MAX_LEAPS	50	/* Maximum number of leap second corrections */
1252708Swollman#endif /* !defined TZ_MAX_LEAPS */
1262708Swollman
1272708Swollman#define SECSPERMIN	60
1282708Swollman#define MINSPERHOUR	60
1292708Swollman#define HOURSPERDAY	24
1302708Swollman#define DAYSPERWEEK	7
1312708Swollman#define DAYSPERNYEAR	365
1322708Swollman#define DAYSPERLYEAR	366
1332708Swollman#define SECSPERHOUR	(SECSPERMIN * MINSPERHOUR)
1342708Swollman#define SECSPERDAY	((long) SECSPERHOUR * HOURSPERDAY)
1352708Swollman#define MONSPERYEAR	12
1362708Swollman
1372708Swollman#define TM_SUNDAY	0
1382708Swollman#define TM_MONDAY	1
1392708Swollman#define TM_TUESDAY	2
1402708Swollman#define TM_WEDNESDAY	3
1412708Swollman#define TM_THURSDAY	4
1422708Swollman#define TM_FRIDAY	5
1432708Swollman#define TM_SATURDAY	6
1442708Swollman
1452708Swollman#define TM_JANUARY	0
1462708Swollman#define TM_FEBRUARY	1
1472708Swollman#define TM_MARCH	2
1482708Swollman#define TM_APRIL	3
1492708Swollman#define TM_MAY		4
1502708Swollman#define TM_JUNE		5
1512708Swollman#define TM_JULY		6
1522708Swollman#define TM_AUGUST	7
1532708Swollman#define TM_SEPTEMBER	8
1542708Swollman#define TM_OCTOBER	9
1552708Swollman#define TM_NOVEMBER	10
1562708Swollman#define TM_DECEMBER	11
1572708Swollman
1582708Swollman#define TM_YEAR_BASE	1900
1592708Swollman
1602708Swollman#define EPOCH_YEAR	1970
1612708Swollman#define EPOCH_WDAY	TM_THURSDAY
1622708Swollman
1632708Swollman/*
1642708Swollman** Accurate only for the past couple of centuries;
1652708Swollman** that will probably do.
1662708Swollman*/
1672708Swollman
16817209Swollman#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
1692708Swollman
1702708Swollman#ifndef USG
1712708Swollman
1722708Swollman/*
1732708Swollman** Use of the underscored variants may cause problems if you move your code to
1742708Swollman** certain System-V-based systems; for maximum portability, use the
1752708Swollman** underscore-free variants.  The underscored variants are provided for
1762708Swollman** backward compatibility only; they may disappear from future versions of
1772708Swollman** this file.
1782708Swollman*/
1792708Swollman
1802708Swollman#define SECS_PER_MIN	SECSPERMIN
1812708Swollman#define MINS_PER_HOUR	MINSPERHOUR
1822708Swollman#define HOURS_PER_DAY	HOURSPERDAY
1832708Swollman#define DAYS_PER_WEEK	DAYSPERWEEK
1842708Swollman#define DAYS_PER_NYEAR	DAYSPERNYEAR
1852708Swollman#define DAYS_PER_LYEAR	DAYSPERLYEAR
1862708Swollman#define SECS_PER_HOUR	SECSPERHOUR
1872708Swollman#define SECS_PER_DAY	SECSPERDAY
1882708Swollman#define MONS_PER_YEAR	MONSPERYEAR
1892708Swollman
1902708Swollman#endif /* !defined USG */
1912708Swollman
1922708Swollman#endif /* !defined TZFILE_H */
193