da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinset prototyped
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinset explicit
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chiniff TMX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincat{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * AT&T Research
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * high resolution Time_t support
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <tm.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <tv.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chininc FEATURE/common
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif ( _ast_int8_t ) {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TMX_MAXDATE "2554-07-21+23:34:33.709551614 UTC"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TMX_MAXYEAR 2554
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TMX_MAXSEC ((Time_t)18446744073)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TMX_MAXNSEC 709551614
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TMX_RESOLUTION 1000000000
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typedef uint64_t Time_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typedef uint64_t Tmxsec_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typedef uint32_t Tmxnsec_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tmxsec(t) ((Tmxsec_t)((t)/1000000000))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tmxnsec(t) ((Tmxnsec_t)((t)%1000000000))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tmxsns(s,n) (((((Time_t)(s))*1000000000))+((Time_t)(n)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinelif ( _ast_flt8_t ) {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TMX_FLOAT 1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TMX_MAXDATE "2106-02-07+06:28:15.999 UTC"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TMX_MAXYEAR 2106
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TMX_MAXSEC 0xffffffffL
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TMX_MAXNSEC 999000000L
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TMX_RESOLUTION 1000
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typedef _ast_flt8_t Time_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typedef uint32_t Tmxsec_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typedef uint32_t Tmxnsec_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tmxsec(t) ((Tmxsec_t)(t))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tmxnsec(t) (((Tmxnsec_t)(((t)-((uint32_t)(t))+0.0000005)*1000L))*1000000L)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tmxsns(s,n) (((Time_t)(s))+((((uint32_t)(n))/1000L)/1e6))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinelse {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TMX_MAXDATE "2106-02-07+06:28:14 UTC"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TMX_MAXYEAR 2106
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TMX_MAXSEC 0xfffffffeL
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TMX_MAXNSEC 0L
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TMX_RESOLUTION 1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typedef uint32_t Time_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typedef uint32_t Tmxsec_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typedef uint32_t Tmxnsec_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tmxsec(t) ((Tmxsec_t)(t))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tmxnsec(t) (0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tmxsns(s,n) ((Time_t)(s))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinendif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincat{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TMX_NOTIME ((Time_t)(-1))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TMX_NOW tmxgettime()
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TMX_MAXTIME tmxsns(TMX_MAXSEC,TMX_MAXNSEC)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tmx2tv(t,v) ((v)->tv_nsec=tmxnsec(t),(v)->tv_sec=tmxsec(t))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tv2tmx(v) tmxsns((v)->tv_sec,(v)->tv_nsec)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tmxclock(p) tmxsns(((p)?*(p):time(NiL)),0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tmxgetatime(s) tmxsns((s)->st_atime,ST_ATIME_NSEC_GET(s))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tmxgetctime(s) tmxsns((s)->st_ctime,ST_CTIME_NSEC_GET(s))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tmxgetmtime(s) tmxsns((s)->st_mtime,ST_MTIME_NSEC_GET(s))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tmxsetatime(s,t) ((s)->st_atime=tmxsec(t),ST_ATIME_NSEC_SET(s,tmxnsec(t)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tmxsetctime(s,t) ((s)->st_ctime=tmxsec(t),ST_CTIME_NSEC_SET(s,tmxnsec(t)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tmxsetmtime(s,t) ((s)->st_mtime=tmxsec(t),ST_MTIME_NSEC_SET(s,tmxnsec(t)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _BLD_ast && defined(__EXPORT__)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define extern __EXPORT__
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern Time_t tmxdate(const char*, char**, Time_t);
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz extern Time_t tmxduration(const char*, char**);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern char* tmxfmt(char*, size_t, const char*, Time_t);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern Time_t tmxleap(Time_t);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern Tm_t* tmxmake(Time_t);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern Time_t tmxscan(const char*, char**, const char*, char**, Time_t, long);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int tmxsleep(Time_t);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern Time_t tmxtime(Tm_t*, int);
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz extern Tm_t* tmxtm(Tm_t*, Time_t, Tm_zone_t*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern Time_t tmxgettime(void);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int tmxsettime(Time_t);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int tmxtouch(const char*, Time_t, Time_t, Time_t, int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern char* fmttmx(const char*, Time_t);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #undef extern
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end