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