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