1da2e3ebdSchinset prototyped 2da2e3ebdSchinset explicit 3da2e3ebdSchiniff TMX 4da2e3ebdSchin 5da2e3ebdSchincat{ 6da2e3ebdSchin /* 7da2e3ebdSchin * AT&T Research 8da2e3ebdSchin * 9da2e3ebdSchin * high resolution Time_t support 10da2e3ebdSchin */ 11da2e3ebdSchin 12da2e3ebdSchin #include <tm.h> 13da2e3ebdSchin #include <tv.h> 14da2e3ebdSchin}end 15da2e3ebdSchin 16da2e3ebdSchininc FEATURE/common 17da2e3ebdSchin 18da2e3ebdSchinif ( _ast_int8_t ) { 19da2e3ebdSchin #define TMX_MAXDATE "2554-07-21+23:34:33.709551614 UTC" 20da2e3ebdSchin #define TMX_MAXYEAR 2554 21da2e3ebdSchin #define TMX_MAXSEC ((Time_t)18446744073) 22da2e3ebdSchin #define TMX_MAXNSEC 709551614 23da2e3ebdSchin #define TMX_RESOLUTION 1000000000 24da2e3ebdSchin 25da2e3ebdSchin typedef uint64_t Time_t; 26da2e3ebdSchin typedef uint64_t Tmxsec_t; 27da2e3ebdSchin typedef uint32_t Tmxnsec_t; 28da2e3ebdSchin 29da2e3ebdSchin #define tmxsec(t) ((Tmxsec_t)((t)/1000000000)) 30da2e3ebdSchin #define tmxnsec(t) ((Tmxnsec_t)((t)%1000000000)) 31da2e3ebdSchin #define tmxsns(s,n) (((((Time_t)(s))*1000000000))+((Time_t)(n))) 32da2e3ebdSchin} 33da2e3ebdSchinelif ( _ast_flt8_t ) { 34da2e3ebdSchin #define TMX_FLOAT 1 35da2e3ebdSchin #define TMX_MAXDATE "2106-02-07+06:28:15.999 UTC" 36da2e3ebdSchin #define TMX_MAXYEAR 2106 37da2e3ebdSchin #define TMX_MAXSEC 0xffffffffL 38da2e3ebdSchin #define TMX_MAXNSEC 999000000L 39da2e3ebdSchin #define TMX_RESOLUTION 1000 40da2e3ebdSchin 41da2e3ebdSchin typedef _ast_flt8_t Time_t; 42da2e3ebdSchin typedef uint32_t Tmxsec_t; 43da2e3ebdSchin typedef uint32_t Tmxnsec_t; 44da2e3ebdSchin 45da2e3ebdSchin #define tmxsec(t) ((Tmxsec_t)(t)) 46da2e3ebdSchin #define tmxnsec(t) (((Tmxnsec_t)(((t)-((uint32_t)(t))+0.0000005)*1000L))*1000000L) 47da2e3ebdSchin #define tmxsns(s,n) (((Time_t)(s))+((((uint32_t)(n))/1000L)/1e6)) 48da2e3ebdSchin} 49da2e3ebdSchinelse { 50da2e3ebdSchin #define TMX_MAXDATE "2106-02-07+06:28:14 UTC" 51da2e3ebdSchin #define TMX_MAXYEAR 2106 52da2e3ebdSchin #define TMX_MAXSEC 0xfffffffeL 53da2e3ebdSchin #define TMX_MAXNSEC 0L 54da2e3ebdSchin #define TMX_RESOLUTION 1 55da2e3ebdSchin 56da2e3ebdSchin typedef uint32_t Time_t; 57da2e3ebdSchin typedef uint32_t Tmxsec_t; 58da2e3ebdSchin typedef uint32_t Tmxnsec_t; 59da2e3ebdSchin 60da2e3ebdSchin #define tmxsec(t) ((Tmxsec_t)(t)) 61da2e3ebdSchin #define tmxnsec(t) (0) 62da2e3ebdSchin #define tmxsns(s,n) ((Time_t)(s)) 63da2e3ebdSchin} 64da2e3ebdSchinendif 65da2e3ebdSchin 66da2e3ebdSchincat{ 67da2e3ebdSchin #define TMX_NOTIME ((Time_t)(-1)) 68da2e3ebdSchin #define TMX_NOW tmxgettime() 69da2e3ebdSchin #define TMX_MAXTIME tmxsns(TMX_MAXSEC,TMX_MAXNSEC) 70da2e3ebdSchin 71da2e3ebdSchin #define tmx2tv(t,v) ((v)->tv_nsec=tmxnsec(t),(v)->tv_sec=tmxsec(t)) 72da2e3ebdSchin #define tv2tmx(v) tmxsns((v)->tv_sec,(v)->tv_nsec) 73da2e3ebdSchin 74da2e3ebdSchin #define tmxclock(p) tmxsns(((p)?*(p):time(NiL)),0) 75da2e3ebdSchin 76da2e3ebdSchin #define tmxgetatime(s) tmxsns((s)->st_atime,ST_ATIME_NSEC_GET(s)) 77da2e3ebdSchin #define tmxgetctime(s) tmxsns((s)->st_ctime,ST_CTIME_NSEC_GET(s)) 78da2e3ebdSchin #define tmxgetmtime(s) tmxsns((s)->st_mtime,ST_MTIME_NSEC_GET(s)) 79da2e3ebdSchin 80da2e3ebdSchin #define tmxsetatime(s,t) ((s)->st_atime=tmxsec(t),ST_ATIME_NSEC_SET(s,tmxnsec(t))) 81da2e3ebdSchin #define tmxsetctime(s,t) ((s)->st_ctime=tmxsec(t),ST_CTIME_NSEC_SET(s,tmxnsec(t))) 82da2e3ebdSchin #define tmxsetmtime(s,t) ((s)->st_mtime=tmxsec(t),ST_MTIME_NSEC_SET(s,tmxnsec(t))) 83da2e3ebdSchin 84da2e3ebdSchin #if _BLD_ast && defined(__EXPORT__) 85da2e3ebdSchin #define extern __EXPORT__ 86da2e3ebdSchin #endif 87da2e3ebdSchin 88da2e3ebdSchin extern Time_t tmxdate(const char*, char**, Time_t); 89*34f9b3eeSRoland Mainz extern Time_t tmxduration(const char*, char**); 90da2e3ebdSchin extern char* tmxfmt(char*, size_t, const char*, Time_t); 91da2e3ebdSchin extern Time_t tmxleap(Time_t); 92da2e3ebdSchin extern Tm_t* tmxmake(Time_t); 93da2e3ebdSchin extern Time_t tmxscan(const char*, char**, const char*, char**, Time_t, long); 94da2e3ebdSchin extern int tmxsleep(Time_t); 95da2e3ebdSchin extern Time_t tmxtime(Tm_t*, int); 96*34f9b3eeSRoland Mainz extern Tm_t* tmxtm(Tm_t*, Time_t, Tm_zone_t*); 97da2e3ebdSchin 98da2e3ebdSchin extern Time_t tmxgettime(void); 99da2e3ebdSchin extern int tmxsettime(Time_t); 100da2e3ebdSchin 101da2e3ebdSchin extern int tmxtouch(const char*, Time_t, Time_t, Time_t, int); 102da2e3ebdSchin 103da2e3ebdSchin extern char* fmttmx(const char*, Time_t); 104da2e3ebdSchin 105da2e3ebdSchin #undef extern 106da2e3ebdSchin}end 107