xref: /onnv-gate/usr/src/lib/libast/common/include/tm.h (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 definitions
284887Schin  */
294887Schin 
304887Schin #ifndef _TM_H
314887Schin #define _TM_H
324887Schin 
334887Schin #define TM_VERSION	20070319L
344887Schin 
354887Schin #include <ast.h>
364887Schin #include <times.h>
374887Schin 
384887Schin #undef	daylight
394887Schin 
404887Schin #define tmset(z)	tminit(z)
414887Schin #define tmisleapyear(y)	(!((y)%4)&&(((y)%100)||!((((y)<1900)?((y)+1900):(y))%400)))
424887Schin 
434887Schin #define TM_ADJUST	(1<<0)		/* local doesn't do leap secs	*/
444887Schin #define TM_LEAP		(1<<1)		/* do leap seconds		*/
454887Schin #define TM_UTC		(1<<2)		/* universal coordinated ref	*/
464887Schin 
474887Schin #define TM_PEDANTIC	(1<<3)		/* pedantic date parse		*/
484887Schin #define TM_DATESTYLE	(1<<4)		/* date(1) style mmddHHMMccyy	*/
494887Schin #define TM_SUBSECOND	(1<<5)		/* <something>%S => ...%S.%P	*/
504887Schin 
514887Schin #define TM_DST		(-60)		/* default minutes for DST	*/
524887Schin #define TM_LOCALZONE	(25 * 60)	/* use local time zone offset	*/
534887Schin #define TM_UTCZONE	(26 * 60)	/* UTC "time zone"		*/
544887Schin #define TM_MAXLEAP	1		/* max leap secs per leap	*/
554887Schin #define TM_WINDOW	69		/* century windowing guard year	*/
564887Schin 
574887Schin /*
584887Schin  * these indices must agree with tm_dform[]
594887Schin  */
604887Schin 
614887Schin #define TM_MONTH_ABBREV		0
624887Schin #define TM_MONTH		12
634887Schin #define TM_DAY_ABBREV		24
644887Schin #define TM_DAY			31
654887Schin #define TM_TIME			38
664887Schin #define TM_DATE			39
674887Schin #define TM_DEFAULT		40
684887Schin #define TM_MERIDIAN		41
694887Schin 
704887Schin #define TM_UT			43
714887Schin #define TM_DT			47
724887Schin #define TM_SUFFIXES		51
734887Schin #define TM_PARTS		55
744887Schin #define TM_HOURS		62
754887Schin #define TM_DAYS			66
764887Schin #define TM_LAST			69
774887Schin #define TM_THIS			72
784887Schin #define TM_NEXT			75
794887Schin #define TM_EXACT		78
804887Schin #define TM_NOISE		81
814887Schin #define TM_ORDINAL		85
824887Schin #define TM_DIGITS		95
834887Schin #define TM_CTIME		105
844887Schin #define TM_DATE_1		106
854887Schin #define TM_INTERNATIONAL	107
864887Schin #define TM_RECENT		108
874887Schin #define TM_DISTANT		109
884887Schin #define TM_MERIDIAN_TIME	110
894887Schin #define TM_ERA			111
904887Schin #define TM_ERA_DATE		112
914887Schin #define TM_ERA_TIME		113
924887Schin #define TM_ERA_DEFAULT		114
934887Schin #define TM_ERA_YEAR		115
944887Schin #define TM_ORDINALS		116
954887Schin #define TM_FINAL		126
9610898Sroland.mainz@nrubsig.org #define TM_WORK			129
974887Schin 
9810898Sroland.mainz@nrubsig.org #define TM_NFORM		132
994887Schin 
1004887Schin typedef struct				/* leap second info		*/
1014887Schin {
1024887Schin 	time_t		time;		/* the leap second event	*/
1034887Schin 	int		total;		/* inclusive total since epoch	*/
1044887Schin } Tm_leap_t;
1054887Schin 
1064887Schin typedef struct				/* time zone info		*/
1074887Schin {
1084887Schin 	char*		type;		/* type name			*/
1094887Schin 	char*		standard;	/* standard time name		*/
1104887Schin 	char*		daylight;	/* daylight or summertime name	*/
1114887Schin 	short		west;		/* minutes west of GMT		*/
1124887Schin 	short		dst;		/* add to tz.west for DST	*/
1134887Schin } Tm_zone_t;
1144887Schin 
1154887Schin typedef struct				/* tm library readonly data	*/
1164887Schin {
1174887Schin 	char**		format;		/* default TM_* format strings	*/
11810898Sroland.mainz@nrubsig.org 	unsigned char*	lex;		/* format lex type classes	*/
1194887Schin 	char*		digit;		/* output digits		*/
1204887Schin 	short*		days;		/* days in month i		*/
1214887Schin 	short*		sum;		/* days in months before i	*/
1224887Schin 	Tm_leap_t*	leap;		/* leap second table		*/
1234887Schin 	Tm_zone_t*	zone;		/* alternate timezone table	*/
1244887Schin } Tm_data_t;
1254887Schin 
1264887Schin typedef struct				/* tm library global info	*/
1274887Schin {
1284887Schin 	char*		deformat;	/* TM_DEFAULT override		*/
1294887Schin 	int		flags;		/* flags			*/
1304887Schin 	char**		format;		/* current format strings	*/
1314887Schin 	Tm_zone_t*	date;		/* timezone from last tmdate()	*/
1324887Schin 	Tm_zone_t*	local;		/* local timezone		*/
1334887Schin 	Tm_zone_t*	zone;		/* current timezone		*/
1344887Schin } Tm_info_t;
1354887Schin 
1364887Schin typedef struct Tm_s
1374887Schin {
1384887Schin 	int			tm_sec;
1394887Schin 	int			tm_min;
1404887Schin 	int			tm_hour;
1414887Schin 	int			tm_mday;
1424887Schin 	int			tm_mon;
1434887Schin 	int			tm_year;
1444887Schin 	int			tm_wday;
1454887Schin 	int			tm_yday;
1464887Schin 	int			tm_isdst;
1474887Schin 	uint32_t		tm_nsec;
1484887Schin 	Tm_zone_t*		tm_zone;
1494887Schin } Tm_t;
1504887Schin 
1514887Schin #if _BLD_ast && defined(__EXPORT__)
1524887Schin #define extern		extern __EXPORT__
1534887Schin #endif
1544887Schin #if !_BLD_ast && defined(__IMPORT__)
1554887Schin #define extern		extern __IMPORT__
1564887Schin #endif
1574887Schin 
1584887Schin extern Tm_data_t*	_tm_datap_;
1594887Schin extern Tm_info_t*	_tm_infop_;
1604887Schin 
1614887Schin #define tm_data		(*_tm_datap_)
1624887Schin #define tm_info		(*_tm_infop_)
1634887Schin 
1644887Schin #undef	extern
1654887Schin 
1664887Schin #if _BLD_ast && defined(__EXPORT__)
1674887Schin #define extern		__EXPORT__
1684887Schin #endif
1694887Schin 
1704887Schin extern time_t		tmdate(const char*, char**, time_t*);
1714887Schin extern int		tmequiv(Tm_t*);
1724887Schin extern Tm_t*		tmfix(Tm_t*);
1734887Schin extern char*		tmfmt(char*, size_t, const char*, time_t*);
1744887Schin extern char*		tmform(char*, const char*, time_t*);
1754887Schin extern int		tmgoff(const char*, char**, int);
1764887Schin extern void		tminit(Tm_zone_t*);
1774887Schin extern time_t		tmleap(time_t*);
1784887Schin extern int		tmlex(const char*, char**, char**, int, char**, int);
1794887Schin extern char**		tmlocale(void);
1804887Schin extern Tm_t*		tmmake(time_t*);
1814887Schin extern char*		tmpoff(char*, size_t, const char*, int, int);
1824887Schin extern time_t		tmscan(const char*, char**, const char*, char**, time_t*, long);
1834887Schin extern int		tmsleep(time_t, time_t);
1844887Schin extern time_t		tmtime(Tm_t*, int);
1854887Schin extern Tm_zone_t*	tmtype(const char*, char**);
1864887Schin extern int		tmweek(Tm_t*, int, int, int);
1874887Schin extern int		tmword(const char*, char**, const char*, char**, int);
1884887Schin extern Tm_zone_t*	tmzone(const char*, char**, const char*, int*);
1894887Schin 
1904887Schin #undef	extern
1914887Schin 
1924887Schin #endif
193