/* * $Id: macdate.c,v 0.70 2005/08/09 15:47:00 dankogai Exp $ */ #include # include #define EPOCH_DELTA 2082844800 /* * I HATE TINKERING WITH BITS! */ static double UDT2D(UTCDateTime *u){ SInt64 q; double d; q = u->highSeconds; q <<= 32; q += u->lowSeconds - EPOCH_DELTA; q <<= 16; q += u->fraction; d = q; return (d / 65536); } static UTCDateTime * D2UDT(double d, UTCDateTime *u){ SInt64 q = (d + EPOCH_DELTA) * 65536; u->highSeconds = q >> 48; u->lowSeconds = (q & 0x0000ffffffff0000) >> 16; u->fraction = q & 0x000000000000ffff; /* fprintf(stderr, "%f-> %qd -> %u,%u,%u\n", d, q, u->highSeconds, u->lowSeconds, u->fraction); */ return u; }