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