tzfile.h revision 9936
12708Swollman#ifndef TZFILE_H
22708Swollman
32708Swollman#define TZFILE_H
42708Swollman
52708Swollman/*
62708Swollman** This header is for use ONLY with the time conversion code.
72708Swollman** There is no guarantee that it will remain unchanged,
82708Swollman** or that it will remain at all.
92708Swollman** Do NOT copy it to any system include directory.
102708Swollman** Thank you!
112708Swollman*/
122708Swollman
132708Swollman/*
142708Swollman** ID
152708Swollman*/
162708Swollman
172708Swollman#ifndef lint
182708Swollman#ifndef NOID
199936Swollman/*static char	tzfilehid[] = "@(#)tzfile.h	7.6";*/
202708Swollman#endif /* !defined NOID */
212708Swollman#endif /* !defined lint */
222708Swollman
232708Swollman/*
242708Swollman** Information about time zone files.
252708Swollman*/
262708Swollman
272708Swollman#ifndef TZDIR
282713Swollman#define TZDIR	"/usr/share/zoneinfo" /* Time zone object file directory */
292708Swollman#endif /* !defined TZDIR */
302708Swollman
312708Swollman#ifndef TZDEFAULT
322713Swollman#define TZDEFAULT	"/etc/localtime"
332708Swollman#endif /* !defined TZDEFAULT */
342708Swollman
352708Swollman#ifndef TZDEFRULES
362708Swollman#define TZDEFRULES	"posixrules"
372708Swollman#endif /* !defined TZDEFRULES */
382708Swollman
392708Swollman/*
402708Swollman** Each file begins with. . .
412708Swollman*/
422708Swollman
432708Swollmanstruct tzhead {
449936Swollman	char	tzh_reserved[20];	/* reserved for future use */
459936Swollman	char	tzh_ttisgmtcnt[4];	/* coded number of trans. time flags */
462708Swollman	char	tzh_ttisstdcnt[4];	/* coded number of trans. time flags */
472708Swollman	char	tzh_leapcnt[4];		/* coded number of leap seconds */
482708Swollman	char	tzh_timecnt[4];		/* coded number of transition times */
492708Swollman	char	tzh_typecnt[4];		/* coded number of local time types */
502708Swollman	char	tzh_charcnt[4];		/* coded number of abbr. chars */
512708Swollman};
522708Swollman
532708Swollman/*
542708Swollman** . . .followed by. . .
552708Swollman**
562708Swollman**	tzh_timecnt (char [4])s		coded transition times a la time(2)
572708Swollman**	tzh_timecnt (unsigned char)s	types of local time starting at above
582708Swollman**	tzh_typecnt repetitions of
592708Swollman**		one (char [4])		coded GMT offset in seconds
602708Swollman**		one (unsigned char)	used to set tm_isdst
612708Swollman**		one (unsigned char)	that's an abbreviation list index
622708Swollman**	tzh_charcnt (char)s		'\0'-terminated zone abbreviations
632708Swollman**	tzh_leapcnt repetitions of
642708Swollman**		one (char [4])		coded leap second transition times
652708Swollman**		one (char [4])		total correction after above
662708Swollman**	tzh_ttisstdcnt (char)s		indexed by type; if TRUE, transition
672708Swollman**					time is standard time, if FALSE,
682708Swollman**					transition time is wall clock time
692708Swollman**					if absent, transition times are
702708Swollman**					assumed to be wall clock time
719936Swollman**	tzh_ttisgmtcnt (char)s		indexed by type; if TRUE, transition
729936Swollman**					time is GMT, if FALSE,
739936Swollman**					transition time is local time
749936Swollman**					if absent, transition times are
759936Swollman**					assumed to be local time
762708Swollman*/
772708Swollman
782708Swollman/*
792708Swollman** In the current implementation, "tzset()" refuses to deal with files that
802708Swollman** exceed any of the limits below.
812708Swollman*/
822708Swollman
832708Swollman#ifndef TZ_MAX_TIMES
842708Swollman/*
852708Swollman** The TZ_MAX_TIMES value below is enough to handle a bit more than a
862708Swollman** year's worth of solar time (corrected daily to the nearest second) or
872708Swollman** 138 years of Pacific Presidential Election time
882708Swollman** (where there are three time zone transitions every fourth year).
892708Swollman*/
902708Swollman#define TZ_MAX_TIMES	370
912708Swollman#endif /* !defined TZ_MAX_TIMES */
922708Swollman
932708Swollman#ifndef TZ_MAX_TYPES
942708Swollman#ifndef NOSOLAR
952708Swollman#define TZ_MAX_TYPES	256 /* Limited by what (unsigned char)'s can hold */
962708Swollman#endif /* !defined NOSOLAR */
972708Swollman#ifdef NOSOLAR
989936Swollman/*
999936Swollman** Must be at least 14 for Europe/Riga as of Jan 12 1995,
1009936Swollman** as noted by Earl Chew <earl@hpato.aus.hp.com>.
1019936Swollman*/
1029936Swollman#define TZ_MAX_TYPES	20	/* Maximum number of local time types */
1032708Swollman#endif /* !defined NOSOLAR */
1042708Swollman#endif /* !defined TZ_MAX_TYPES */
1052708Swollman
1062708Swollman#ifndef TZ_MAX_CHARS
1072708Swollman#define TZ_MAX_CHARS	50	/* Maximum number of abbreviation characters */
1082708Swollman				/* (limited by what unsigned chars can hold) */
1092708Swollman#endif /* !defined TZ_MAX_CHARS */
1102708Swollman
1112708Swollman#ifndef TZ_MAX_LEAPS
1122708Swollman#define TZ_MAX_LEAPS	50	/* Maximum number of leap second corrections */
1132708Swollman#endif /* !defined TZ_MAX_LEAPS */
1142708Swollman
1152708Swollman#define SECSPERMIN	60
1162708Swollman#define MINSPERHOUR	60
1172708Swollman#define HOURSPERDAY	24
1182708Swollman#define DAYSPERWEEK	7
1192708Swollman#define DAYSPERNYEAR	365
1202708Swollman#define DAYSPERLYEAR	366
1212708Swollman#define SECSPERHOUR	(SECSPERMIN * MINSPERHOUR)
1222708Swollman#define SECSPERDAY	((long) SECSPERHOUR * HOURSPERDAY)
1232708Swollman#define MONSPERYEAR	12
1242708Swollman
1252708Swollman#define TM_SUNDAY	0
1262708Swollman#define TM_MONDAY	1
1272708Swollman#define TM_TUESDAY	2
1282708Swollman#define TM_WEDNESDAY	3
1292708Swollman#define TM_THURSDAY	4
1302708Swollman#define TM_FRIDAY	5
1312708Swollman#define TM_SATURDAY	6
1322708Swollman
1332708Swollman#define TM_JANUARY	0
1342708Swollman#define TM_FEBRUARY	1
1352708Swollman#define TM_MARCH	2
1362708Swollman#define TM_APRIL	3
1372708Swollman#define TM_MAY		4
1382708Swollman#define TM_JUNE		5
1392708Swollman#define TM_JULY		6
1402708Swollman#define TM_AUGUST	7
1412708Swollman#define TM_SEPTEMBER	8
1422708Swollman#define TM_OCTOBER	9
1432708Swollman#define TM_NOVEMBER	10
1442708Swollman#define TM_DECEMBER	11
1452708Swollman
1462708Swollman#define TM_YEAR_BASE	1900
1472708Swollman
1482708Swollman#define EPOCH_YEAR	1970
1492708Swollman#define EPOCH_WDAY	TM_THURSDAY
1502708Swollman
1512708Swollman/*
1522708Swollman** Accurate only for the past couple of centuries;
1532708Swollman** that will probably do.
1542708Swollman*/
1552708Swollman
1562708Swollman#define isleap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0)
1572708Swollman
1582708Swollman#ifndef USG
1592708Swollman
1602708Swollman/*
1612708Swollman** Use of the underscored variants may cause problems if you move your code to
1622708Swollman** certain System-V-based systems; for maximum portability, use the
1632708Swollman** underscore-free variants.  The underscored variants are provided for
1642708Swollman** backward compatibility only; they may disappear from future versions of
1652708Swollman** this file.
1662708Swollman*/
1672708Swollman
1682708Swollman#define SECS_PER_MIN	SECSPERMIN
1692708Swollman#define MINS_PER_HOUR	MINSPERHOUR
1702708Swollman#define HOURS_PER_DAY	HOURSPERDAY
1712708Swollman#define DAYS_PER_WEEK	DAYSPERWEEK
1722708Swollman#define DAYS_PER_NYEAR	DAYSPERNYEAR
1732708Swollman#define DAYS_PER_LYEAR	DAYSPERLYEAR
1742708Swollman#define SECS_PER_HOUR	SECSPERHOUR
1752708Swollman#define SECS_PER_DAY	SECSPERDAY
1762708Swollman#define MONS_PER_YEAR	MONSPERYEAR
1772708Swollman
1782708Swollman#endif /* !defined USG */
1792708Swollman
1802708Swollman#endif /* !defined TZFILE_H */
181