X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FKM_tai.cpp;h=00a1231ea253330fceb8bfc5ba8c8081a73a3b6c;hb=03ba76d3a337c6ae2fc35f3b96fa230d0c40ca44;hp=7aa7ada1e0e788e27f365a6dce3d07fa61a68b61;hpb=16c33b45f493dc07a64a51473df3b405551385a8;p=asdcplib.git diff --git a/src/KM_tai.cpp b/src/KM_tai.cpp index 7aa7ada..00a1231 100644 --- a/src/KM_tai.cpp +++ b/src/KM_tai.cpp @@ -49,12 +49,17 @@ The libtai source code is in the public domain. */ #include +#ifdef KM_WIN32 +#include +#else #include +#endif // void caldate_frommjd(Kumu::TAI::caldate* cd, i32_t day) { + assert(cd); i32_t year, month, yday; year = day / 146097L; @@ -101,6 +106,7 @@ static ui32_t montab[12] = i32_t caldate_mjd(const Kumu::TAI::caldate* cd) { + assert(cd); i32_t y, m, d; d = cd->day - 678882L; @@ -138,16 +144,10 @@ caldate_mjd(const Kumu::TAI::caldate* cd) void caltime_utc(Kumu::TAI::caltime* ct, const Kumu::TAI::tai* t) { + assert(ct&&t); Kumu::TAI::tai t2 = *t; - ui64_t u; - i32_t s; - - /* XXX: check for overfow? */ - - u = t2.x; - - u += 58486; - s = u % ui64_C(86400); + ui64_t u = t2.x + 58486; + i32_t s = (i32_t)(u % ui64_C(86400)); ct->second = (s % 60); s /= 60; ct->minute = s % 60; s /= 60; @@ -163,6 +163,7 @@ caltime_utc(Kumu::TAI::caltime* ct, const Kumu::TAI::tai* t) void caltime_tai(const Kumu::TAI::caltime* ct, Kumu::TAI::tai* t) { + assert(ct&&t); i32_t day, s; /* XXX: check for overflow? */ @@ -179,16 +180,32 @@ caltime_tai(const Kumu::TAI::caltime* ct, Kumu::TAI::tai* t) void Kumu::TAI::tai::now() { +#ifdef KM_WIN32 + SYSTEMTIME st; + ::GetSystemTime(&st); + TAI::caltime ct; + ct.date.year = st.wYear; + ct.date.month = st.wMonth; + ct.date.day = st.wDay; + ct.hour = st.wHour; + ct.minute = st.wMinute; + ct.second = st.wSecond; + ct.offset = 0; + caltime_tai(&ct, this); +#else struct timeval now; gettimeofday(&now, 0); x = ui64_C(4611686018427387914) + (ui64_t)now.tv_sec; +#endif } + // const Kumu::TAI::tai& Kumu::TAI::tai::operator=(const Kumu::TAI::caltime& rhs) { caltime_tai(&rhs, this); + return *this; } // @@ -196,6 +213,7 @@ const Kumu::TAI::caltime& Kumu::TAI::caltime::operator=(const Kumu::TAI::tai& rhs) { caltime_utc(this, &rhs); + return *this; }