xref: /onnv-gate/usr/src/lib/libast/common/features/tmx (revision 10898:1883b621b3ea)
14887Schinset	prototyped
24887Schinset	explicit
34887Schiniff	TMX
44887Schin
54887Schincat{
64887Schin	/*
74887Schin	 * AT&T Research
84887Schin	 *
94887Schin	 * high resolution Time_t support
104887Schin	 */
114887Schin
124887Schin	#include <tm.h>
134887Schin	#include <tv.h>
144887Schin}end
154887Schin
164887Schininc	FEATURE/common
174887Schin
184887Schinif ( _ast_int8_t ) {
194887Schin	#define TMX_MAXDATE	"2554-07-21+23:34:33.709551614 UTC"
204887Schin	#define TMX_MAXYEAR	2554
214887Schin	#define TMX_MAXSEC	((Time_t)18446744073)
224887Schin	#define TMX_MAXNSEC	709551614
234887Schin	#define TMX_RESOLUTION	1000000000
244887Schin
254887Schin	typedef uint64_t Time_t;
264887Schin	typedef uint64_t Tmxsec_t;
274887Schin	typedef uint32_t Tmxnsec_t;
284887Schin
294887Schin	#define tmxsec(t)	((Tmxsec_t)((t)/1000000000))
304887Schin	#define tmxnsec(t)	((Tmxnsec_t)((t)%1000000000))
314887Schin	#define tmxsns(s,n)	(((((Time_t)(s))*1000000000))+((Time_t)(n)))
324887Schin}
334887Schinelif ( _ast_flt8_t ) {
344887Schin	#define TMX_FLOAT	1
354887Schin	#define TMX_MAXDATE	"2106-02-07+06:28:15.999 UTC"
364887Schin	#define TMX_MAXYEAR	2106
374887Schin	#define TMX_MAXSEC	0xffffffffL
384887Schin	#define TMX_MAXNSEC	999000000L
394887Schin	#define TMX_RESOLUTION	1000
404887Schin
414887Schin	typedef _ast_flt8_t Time_t;
424887Schin	typedef uint32_t Tmxsec_t;
434887Schin	typedef uint32_t Tmxnsec_t;
444887Schin
454887Schin	#define tmxsec(t)	((Tmxsec_t)(t))
464887Schin	#define tmxnsec(t)	(((Tmxnsec_t)(((t)-((uint32_t)(t))+0.0000005)*1000L))*1000000L)
474887Schin	#define tmxsns(s,n)	(((Time_t)(s))+((((uint32_t)(n))/1000L)/1e6))
484887Schin}
494887Schinelse {
504887Schin	#define TMX_MAXDATE	"2106-02-07+06:28:14 UTC"
514887Schin	#define TMX_MAXYEAR	2106
524887Schin	#define TMX_MAXSEC	0xfffffffeL
534887Schin	#define TMX_MAXNSEC	0L
544887Schin	#define TMX_RESOLUTION	1
554887Schin
564887Schin	typedef uint32_t Time_t;
574887Schin	typedef uint32_t Tmxsec_t;
584887Schin	typedef uint32_t Tmxnsec_t;
594887Schin
604887Schin	#define tmxsec(t)	((Tmxsec_t)(t))
614887Schin	#define tmxnsec(t)	(0)
624887Schin	#define tmxsns(s,n)	((Time_t)(s))
634887Schin}
644887Schinendif
654887Schin
664887Schincat{
674887Schin	#define TMX_NOTIME	((Time_t)(-1))
684887Schin	#define TMX_NOW		tmxgettime()
694887Schin	#define TMX_MAXTIME	tmxsns(TMX_MAXSEC,TMX_MAXNSEC)
704887Schin
714887Schin	#define tmx2tv(t,v)	((v)->tv_nsec=tmxnsec(t),(v)->tv_sec=tmxsec(t))
724887Schin	#define tv2tmx(v)	tmxsns((v)->tv_sec,(v)->tv_nsec)
734887Schin
744887Schin	#define tmxclock(p)	tmxsns(((p)?*(p):time(NiL)),0)
754887Schin
764887Schin	#define tmxgetatime(s)	tmxsns((s)->st_atime,ST_ATIME_NSEC_GET(s))
774887Schin	#define tmxgetctime(s)	tmxsns((s)->st_ctime,ST_CTIME_NSEC_GET(s))
784887Schin	#define tmxgetmtime(s)	tmxsns((s)->st_mtime,ST_MTIME_NSEC_GET(s))
794887Schin
804887Schin	#define tmxsetatime(s,t) ((s)->st_atime=tmxsec(t),ST_ATIME_NSEC_SET(s,tmxnsec(t)))
814887Schin	#define tmxsetctime(s,t) ((s)->st_ctime=tmxsec(t),ST_CTIME_NSEC_SET(s,tmxnsec(t)))
824887Schin	#define tmxsetmtime(s,t) ((s)->st_mtime=tmxsec(t),ST_MTIME_NSEC_SET(s,tmxnsec(t)))
834887Schin
844887Schin	#if _BLD_ast && defined(__EXPORT__)
854887Schin	#define extern		__EXPORT__
864887Schin	#endif
874887Schin
884887Schin	extern Time_t		tmxdate(const char*, char**, Time_t);
89*10898Sroland.mainz@nrubsig.org	extern Time_t		tmxduration(const char*, char**);
904887Schin	extern char*		tmxfmt(char*, size_t, const char*, Time_t);
914887Schin	extern Time_t		tmxleap(Time_t);
924887Schin	extern Tm_t*		tmxmake(Time_t);
934887Schin	extern Time_t		tmxscan(const char*, char**, const char*, char**, Time_t, long);
944887Schin	extern int		tmxsleep(Time_t);
954887Schin	extern Time_t		tmxtime(Tm_t*, int);
96*10898Sroland.mainz@nrubsig.org	extern Tm_t*		tmxtm(Tm_t*, Time_t, Tm_zone_t*);
974887Schin
984887Schin	extern Time_t		tmxgettime(void);
994887Schin	extern int		tmxsettime(Time_t);
1004887Schin
1014887Schin	extern int		tmxtouch(const char*, Time_t, Time_t, Time_t, int);
1024887Schin
1034887Schin	extern char*		fmttmx(const char*, Time_t);
1044887Schin
1054887Schin	#undef	extern
1064887Schin}end
107