*/
static $DESCRIPTOR(dscepoch,"01-JAN-1970 00:00:00.00");
+#ifdef __VAX
+static long base_adjust=0L;
+#else
static __int64 base_adjust=0;
+#endif
int
gettimeofday (struct timeval *tp, void *tpz)
{
long ret;
+#ifdef __VAX
+ long quad;
+ div_t ans1,ans2;
+#else
__int64 quad;
__qdiv_t ans1,ans2;
-
+#endif
/*
In case of error, tv_usec = 0 and tv_sec = VMS condition code.
The return from function is also set to -1.
ret=sys$gettim(&quad); /* Get VMS system time */
if ((1 && ret) == 1) {
quad -= base_adjust; /* convert to epoch offset */
+#ifdef __VAX
+ ans1=div(quad,DIV_100NS_TO_SECS);
+ ans2=div(ans1.rem,DIV_100NS_TO_USECS);
+#else
ans1=qdiv(quad,DIV_100NS_TO_SECS);
ans2=qdiv(ans1.rem,DIV_100NS_TO_USECS);
+#endif
tp->tv_sec = ans1.quot; /* Whole seconds */
tp->tv_usec = ans2.quot; /* Micro-seconds */
} else {
#ifdef HAS_GETTIMEOFDAY
-static void
+static int
myU2time(UV *ret)
{
struct timeval Tp;
status = gettimeofday (&Tp, NULL);
ret[0] = Tp.tv_sec;
ret[1] = Tp.tv_usec;
+ return status;
}
static NV
struct timeval Tp;
int status;
status = gettimeofday (&Tp, NULL);
- return Tp.tv_sec + (Tp.tv_usec / 1000000.);
+ return status == 0 ? Tp.tv_sec + (Tp.tv_usec / 1000000.) : -1.0;
}
#endif
BOOT:
#ifdef HAS_GETTIMEOFDAY
- hv_store(PL_modglobal, "Time::NVtime", 12, newSViv((IV) myNVtime ()), 0);
- hv_store(PL_modglobal, "Time::U2time", 12, newSViv((IV) myU2time ()), 0);
+{
+ UV auv[2];
+ hv_store(PL_modglobal, "Time::NVtime", 12, newSViv((IV) myNVtime()), 0);
+ if (myU2time(auv) == 0)
+ hv_store(PL_modglobal, "Time::U2time", 12, newSViv((IV) auv[0]), 0);
+}
#endif
IV
uinterval = finterval * 1000000;
RETVAL = ualarm (useconds, uinterval);
+ OUTPUT:
+ RETVAL
+
#endif
#ifdef HAS_GETTIMEOFDAY