xref: /onnv-gate/usr/src/lib/libast/common/tm/tmdata.c (revision 12068:08a39a083754)
14887Schin /***********************************************************************
24887Schin *                                                                      *
34887Schin *               This software is part of the ast package               *
4*12068SRoger.Faulkner@Oracle.COM *          Copyright (c) 1985-2010 AT&T Intellectual Property          *
54887Schin *                      and is licensed under the                       *
64887Schin *                  Common Public License, Version 1.0                  *
78462SApril.Chin@Sun.COM *                    by AT&T Intellectual Property                     *
84887Schin *                                                                      *
94887Schin *                A copy of the License is available at                 *
104887Schin *            http://www.opensource.org/licenses/cpl1.0.txt             *
114887Schin *         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
124887Schin *                                                                      *
134887Schin *              Information and Software Systems Research               *
144887Schin *                            AT&T Research                             *
154887Schin *                           Florham Park NJ                            *
164887Schin *                                                                      *
174887Schin *                 Glenn Fowler <gsf@research.att.com>                  *
184887Schin *                  David Korn <dgk@research.att.com>                   *
194887Schin *                   Phong Vo <kpv@research.att.com>                    *
204887Schin *                                                                      *
214887Schin ***********************************************************************/
224887Schin #pragma prototyped
234887Schin /*
244887Schin  * Glenn Fowler
254887Schin  * AT&T Research
264887Schin  *
274887Schin  * time conversion support readonly data
284887Schin  */
294887Schin 
304887Schin #include <ast.h>
314887Schin #include <tm.h>
324887Schin 
334887Schin /*
344887Schin  * default format strings -- must agree with TM_* indices
354887Schin  */
364887Schin 
374887Schin static char*		format[] =
384887Schin {
394887Schin 	"Jan",		"Feb",		"Mar",		"Apr",
404887Schin 	"May",		"Jun",		"Jul",		"Aug",
414887Schin 	"Sep",		"Oct",		"Nov",		"Dec",
424887Schin 
434887Schin 	"January",	"February",	"March",	"April",
444887Schin 	"May",		"June",		"July",		"August",
454887Schin 	"September",	"October",	"November",	"December",
464887Schin 
474887Schin 	"Sun",		"Mon",		"Tue",		"Wed",
484887Schin 	"Thu",		"Fri",		"Sat",
494887Schin 
504887Schin 	"Sunday",	"Monday",	"Tuesday",	"Wednesday",
514887Schin 	"Thursday",	"Friday",	"Saturday",
524887Schin 
534887Schin 	"%H:%M:%S",	"%m/%d/%y",	"%a %b %e %T %Z %Y",
544887Schin 
554887Schin 	"AM",		"PM",
564887Schin 
574887Schin 	"GMT",		"UTC",		"UCT",		"CUT",
584887Schin 
594887Schin 	"DST",		"",		"",		"",
604887Schin 
614887Schin 	"s",		"es",		"",		"",
624887Schin 
634887Schin 	"second",	"minute",	"hour",		"day",
644887Schin 	"week",		"month",	"year",
654887Schin 
664887Schin 	"midnight",	"morning",	"noon",		"evening",
674887Schin 
684887Schin 	"yesterday",	"today",	"tomorrow",
694887Schin 
704887Schin 	"last",		"ago",		"past",
714887Schin 	"this",		"now",		"current",
724887Schin 	"in",		"next",		"hence",
734887Schin 	"exactly",	"",		"",
744887Schin 
754887Schin 	"at",		"on",		"",		"",
764887Schin 
774887Schin 	"st",		"nd",		"rd",		"th",		"th",
784887Schin 	"th",		"th",		"th",		"th",		"th",
794887Schin 
804887Schin 	"",		"",		"",		"",		"",
814887Schin 	"",		"",		"",		"",		"",
824887Schin 
834887Schin 	"%a %b %e %T %Y",
844887Schin 	"%a %b %e %T %Z %Y",
854887Schin 	"%a %b %e %T %z %Z %Y",
864887Schin 	"%b %e %H:%M",
874887Schin 	"%b %e  %Y",
884887Schin 	"%I:%M:%S %p",
894887Schin 
904887Schin 	"",		"",		"",		"",		"",
914887Schin 
924887Schin 	"first",	"",		"third",	"fourth",	"fifth",
934887Schin 	"sixth",	"seventh",	"eighth",	"ninth",	"tenth",
944887Schin 
954887Schin 	"final",	"ending",	"nth",
9610898Sroland.mainz@nrubsig.org 
9710898Sroland.mainz@nrubsig.org 	"work",		"working",	"workday",
984887Schin };
994887Schin 
1004887Schin /*
1014887Schin  * format[] lex type classes
1024887Schin  */
1034887Schin 
10410898Sroland.mainz@nrubsig.org static unsigned char	lex[] =
1054887Schin {
1064887Schin 	TM_MONTH_ABBREV,TM_MONTH_ABBREV,TM_MONTH_ABBREV,TM_MONTH_ABBREV,
1074887Schin 	TM_MONTH_ABBREV,TM_MONTH_ABBREV,TM_MONTH_ABBREV,TM_MONTH_ABBREV,
1084887Schin 	TM_MONTH_ABBREV,TM_MONTH_ABBREV,TM_MONTH_ABBREV,TM_MONTH_ABBREV,
1094887Schin 
1104887Schin 	TM_MONTH,	TM_MONTH,	TM_MONTH,	TM_MONTH,
1114887Schin 	TM_MONTH,	TM_MONTH,	TM_MONTH,	TM_MONTH,
1124887Schin 	TM_MONTH,	TM_MONTH,	TM_MONTH,	TM_MONTH,
1134887Schin 
1144887Schin 	TM_DAY_ABBREV,	TM_DAY_ABBREV,	TM_DAY_ABBREV,	TM_DAY_ABBREV,
1154887Schin 	TM_DAY_ABBREV,	TM_DAY_ABBREV,	TM_DAY_ABBREV,
1164887Schin 
1174887Schin 	TM_DAY,		TM_DAY,		TM_DAY,		TM_DAY,
1184887Schin 	TM_DAY,		TM_DAY,		TM_DAY,
1194887Schin 
1204887Schin 	0,		0,		0,
1214887Schin 
1224887Schin 	TM_MERIDIAN,	TM_MERIDIAN,
1234887Schin 
1244887Schin 	TM_UT,		TM_UT,		TM_UT,		TM_UT,
1254887Schin 	TM_DT,		TM_DT,		TM_DT,		TM_DT,
1264887Schin 
1274887Schin 	TM_SUFFIXES,	TM_SUFFIXES,	TM_SUFFIXES,	TM_SUFFIXES,
1284887Schin 
1294887Schin 	TM_PARTS,	TM_PARTS,	TM_PARTS,	TM_PARTS,
1304887Schin 	TM_PARTS,	TM_PARTS,	TM_PARTS,
1314887Schin 
1324887Schin 	TM_HOURS,	TM_HOURS,	TM_HOURS,	TM_HOURS,
1334887Schin 
1344887Schin 	TM_DAYS,	TM_DAYS,	TM_DAYS,
1354887Schin 
1364887Schin 	TM_LAST,	TM_LAST,	TM_LAST,
1374887Schin 	TM_THIS,	TM_THIS,	TM_THIS,
1384887Schin 	TM_NEXT,	TM_NEXT,	TM_NEXT,
1394887Schin 	TM_EXACT,	TM_EXACT,	TM_EXACT,
1404887Schin 
1414887Schin 	TM_NOISE,	TM_NOISE,	TM_NOISE,	TM_NOISE,
1424887Schin 
1434887Schin 	TM_ORDINAL,	TM_ORDINAL,	TM_ORDINAL,	TM_ORDINAL,	TM_ORDINAL,
1444887Schin 	TM_ORDINAL,	TM_ORDINAL,	TM_ORDINAL,	TM_ORDINAL,	TM_ORDINAL,
1454887Schin 
1464887Schin 	0,		0,		0,		0,		0,
1474887Schin 	0,		0,		0,		0,		0,
1484887Schin 
1494887Schin 	0,		0,		0,
1504887Schin 	0,		0,		0,
1514887Schin 
1524887Schin 	0,		0,		0,		0,		0,
1534887Schin 
1544887Schin 	TM_ORDINALS,	TM_ORDINALS,	TM_ORDINALS,	TM_ORDINALS,	TM_ORDINALS,
1554887Schin 	TM_ORDINALS,	TM_ORDINALS,	TM_ORDINALS,	TM_ORDINALS,	TM_ORDINALS,
1564887Schin 
1574887Schin 	TM_FINAL,	TM_FINAL,	TM_FINAL,
15810898Sroland.mainz@nrubsig.org 
15910898Sroland.mainz@nrubsig.org 	TM_WORK,	TM_WORK,	TM_WORK,
1604887Schin };
1614887Schin 
1624887Schin /*
1634887Schin  * output format digits
1644887Schin  */
1654887Schin 
1664887Schin static char	digit[] = "0123456789";
1674887Schin 
1684887Schin /*
1694887Schin  * number of days in month i
1704887Schin  */
1714887Schin 
1724887Schin static short	days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
1734887Schin 
1744887Schin /*
1754887Schin  * sum of days in months before month i
1764887Schin  */
1774887Schin 
1784887Schin static short	sum[] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
1794887Schin 
1804887Schin /*
1814887Schin  * leap second time_t and accumulated adjustments
1824887Schin  * (reverse order -- biased for recent dates)
1834887Schin  *
1844887Schin  * tl.time is the seconds since the epoch for the leap event
1854887Schin  *
1864887Schin  *	adding:		the first additional second
1874887Schin  *	subtracting:	the first dissappearing second
1884887Schin  */
1894887Schin 
1904887Schin static Tm_leap_t	leap[] =
1914887Schin {
19210898Sroland.mainz@nrubsig.org 	 1230768023,   24,		/* 2008-12-31+23:59:60-0000 */
19310898Sroland.mainz@nrubsig.org 	 1136073622,   23,		/* 2005-12-31+23:59:60-0000 */
19410898Sroland.mainz@nrubsig.org 	  915148821,   22,		/* 1998-12-31+23:59:60-0000 */
19510898Sroland.mainz@nrubsig.org 	  867715220,   21,		/* 1997-06-30+23:59:60-0000 */
19610898Sroland.mainz@nrubsig.org 	  820454419,   20,		/* 1995-12-31+23:59:60-0000 */
19710898Sroland.mainz@nrubsig.org 	  773020818,   19,		/* 1994-06-30+23:59:60-0000 */
19810898Sroland.mainz@nrubsig.org 	  741484817,   18,		/* 1993-06-30+23:59:60-0000 */
19910898Sroland.mainz@nrubsig.org 	  709948816,   17,		/* 1992-06-30+23:59:60-0000 */
20010898Sroland.mainz@nrubsig.org 	  662688015,   16,		/* 1990-12-31+23:59:60-0000 */
20110898Sroland.mainz@nrubsig.org 	  631152014,   15,		/* 1989-12-31+23:59:60-0000 */
20210898Sroland.mainz@nrubsig.org 	  567993613,   14,		/* 1987-12-31+23:59:60-0000 */
20310898Sroland.mainz@nrubsig.org 	  489024012,   13,		/* 1985-06-30+23:59:60-0000 */
20410898Sroland.mainz@nrubsig.org 	  425865611,   12,		/* 1983-06-30+23:59:60-0000 */
20510898Sroland.mainz@nrubsig.org 	  394329610,   11,		/* 1982-06-30+23:59:60-0000 */
20610898Sroland.mainz@nrubsig.org 	  362793609,   10,		/* 1981-06-30+23:59:60-0000 */
20710898Sroland.mainz@nrubsig.org 	  315532808,    9,		/* 1979-12-31+23:59:60-0000 */
20810898Sroland.mainz@nrubsig.org 	  283996807,    8,		/* 1978-12-31+23:59:60-0000 */
20910898Sroland.mainz@nrubsig.org 	  252460806,    7,		/* 1977-12-31+23:59:60-0000 */
21010898Sroland.mainz@nrubsig.org 	  220924805,    6,		/* 1976-12-31+23:59:60-0000 */
21110898Sroland.mainz@nrubsig.org 	  189302404,    5,		/* 1975-12-31+23:59:60-0000 */
21210898Sroland.mainz@nrubsig.org 	  157766403,    4,		/* 1974-12-31+23:59:60-0000 */
21310898Sroland.mainz@nrubsig.org 	  126230402,    3,		/* 1973-12-31+23:59:60-0000 */
21410898Sroland.mainz@nrubsig.org 	   94694401,    2,		/* 1972-12-31+23:59:60-0000 */
21510898Sroland.mainz@nrubsig.org 	   78796800,    1,		/* 1972-06-30+23:59:60-0000 */
2164887Schin 		  0,    0,		/* can reference (tl+1)     */
2174887Schin 		  0,    0
2184887Schin };
2194887Schin 
2204887Schin /*
2214887Schin  * time zones
2224887Schin  *
2234887Schin  * the UTC entries must be first
2244887Schin  *
2254887Schin  * zones with the same type are contiguous with all but the
2264887Schin  * first entry for the type having a null type
2274887Schin  *
2284887Schin  * tz.standard is the sentinel
2294887Schin  */
2304887Schin 
2314887Schin static Tm_zone_t	zone[] =
2324887Schin {
2334887Schin  0,	"GMT",	0,	 ( 0 * 60),	     0,	/* UTC			*/
2344887Schin  0,	"UCT",	0,	 ( 0 * 60),	     0,	/* UTC			*/
2354887Schin  0,	"UTC",	0,	 ( 0 * 60),	     0,	/* UTC			*/
2364887Schin  0,	"CUT",	0,	 ( 0 * 60),	     0,	/* UTC			*/
2378462SApril.Chin@Sun.COM  0,	"Z",	0,	 ( 0 * 60),	     0,	/* UTC			*/
2384887Schin  "USA",	"HST",	0,	 (10 * 60),	     0,	/* Hawaii		*/
2394887Schin  0,	"YST",	"YDT",	 ( 9 * 60),	TM_DST,	/* Yukon		*/
2404887Schin  0,	"PST",	"PDT",	 ( 8 * 60),	TM_DST,	/* Pacific		*/
2414887Schin  0,	"PST",	"PPET",	 ( 8 * 60),	TM_DST,	/* Pacific pres elect	*/
2424887Schin  0,	"MST",	"MDT",	 ( 7 * 60),	TM_DST,	/* Mountain		*/
2434887Schin  0,	"CST",	"CDT",	 ( 6 * 60),	TM_DST,	/* Central		*/
2444887Schin  0,	"EST",	"EDT",	 ( 5 * 60),	TM_DST,	/* Eastern		*/
2454887Schin  "CAN",	"AST",	"ADT",	 ( 4 * 60),	TM_DST,	/* Atlantic		*/
2464887Schin  0,	"NST",	0,	 ( 3 * 60 + 30),     0,	/* Newfoundland		*/
2474887Schin  "GBR",	"",	"BST",	 ( 0 * 60),	TM_DST,	/* British Summer	*/
24810898Sroland.mainz@nrubsig.org  "EUR",	"WET",	"WEST",	 ( 0 * 60),	TM_DST,	/* Western Eurpoean	*/
24910898Sroland.mainz@nrubsig.org  0,	"CET",	"CEST",	-( 1 * 60),	TM_DST,	/* Central European	*/
25010898Sroland.mainz@nrubsig.org  0,	"MET",	"MEST",	-( 1 * 60),	TM_DST,	/* Middle European	*/
25110898Sroland.mainz@nrubsig.org  0,	"EET",	"EEST",	-( 2 * 60),	TM_DST,	/* Eastern Eurpoean	*/
2524887Schin  "ISR",	"IST",	"IDT",  -( 3 * 60),	TM_DST,	/* Israel		*/
2534887Schin  "IND",	"IST",	0,  	-( 5 * 60 + 30 ),    0,	/* India		*/
2544887Schin  "CHN",	"HKT",	0,	-( 8 * 60),	     0,	/* Hong Kong		*/
2554887Schin  "KOR",	"KST",	"KDT",	-( 8 * 60),	TM_DST,	/* Korea		*/
2564887Schin  "SNG",	"SST",	0,	-( 8 * 60),	     0,	/* Singapore		*/
2574887Schin  "JPN",	"JST",	0,	-( 9 * 60),	     0,	/* Japan		*/
2584887Schin  "AUS",	"AWST",	0,	-( 8 * 60),	     0,	/* Australia Western	*/
2594887Schin  0,	"WST",	0,	-( 8 * 60),	     0,	/* Australia Western	*/
2604887Schin  0,	"ACST",	0,	-( 9 * 60 + 30),TM_DST,	/* Australia Central	*/
2614887Schin  0,	"CST",	0,	-( 9 * 60 + 30),TM_DST,	/* Australia Central	*/
2624887Schin  0,	"AEST",	0,	-(10 * 60),	TM_DST,	/* Australia Eastern	*/
2634887Schin  0,	"EST",	0,	-(10 * 60),	TM_DST,	/* Australia Eastern	*/
2644887Schin  "NZL",	"NZST",	"NZDT",	-(12 * 60),	TM_DST,	/* New Zealand		*/
2654887Schin  0,	0,	0,	0,		     0
2664887Schin };
2674887Schin 
2684887Schin /*
2694887Schin  * 2007-03-19 move tm_data from _tm_data_ to (*_tm_datap_)
2704887Schin  *	      to allow future Tm_data_t growth
2714887Schin  *            by 2009 _tm_data_ can be static
2724887Schin  */
2734887Schin 
2744887Schin #if _BLD_ast && defined(__EXPORT__)
2754887Schin #define extern		extern __EXPORT__
2764887Schin #endif
2774887Schin 
2784887Schin extern Tm_data_t	_tm_data_;
2794887Schin 
2804887Schin #undef	extern
2814887Schin 
2824887Schin Tm_data_t _tm_data_ = { format, lex, digit, days, sum, leap, zone };
2834887Schin 
2844887Schin __EXTERN__(Tm_data_t, _tm_data_);
2854887Schin 
2864887Schin __EXTERN__(Tm_data_t*, _tm_datap_);
2874887Schin 
2884887Schin Tm_data_t*		_tm_datap_ = &_tm_data_;
289