2000-12-19 11:33:51 -05:00
|
|
|
/* OS-dependent support for fine-grained timer.
|
|
|
|
** Copyright (c) 1995 by Olin Shivers.
|
|
|
|
**
|
|
|
|
** We return the current time in seconds and sub-second "ticks" where the
|
|
|
|
** number of ticks/second is OS dependent (and is defined in time_dep.scm).
|
|
|
|
** This definition works on any BSD Unix with the gettimeofday()
|
|
|
|
** microsecond-resolution timer.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <errno.h>
|
|
|
|
#include <sys/time.h>
|
|
|
|
#include "scheme48.h"
|
|
|
|
#include "../time1.h"
|
|
|
|
|
2001-01-01 11:45:32 -05:00
|
|
|
s48_value time_plus_ticks()
|
2000-12-19 11:33:51 -05:00
|
|
|
{
|
|
|
|
struct timeval t;
|
|
|
|
struct timezone tz;
|
2002-02-12 08:43:37 -05:00
|
|
|
s48_value sch_tv_sec = S48_UNSPECIFIC;
|
|
|
|
s48_value sch_tv_usec = S48_UNSPECIFIC;
|
|
|
|
s48_value sch_listval = S48_UNSPECIFIC;
|
2002-02-12 10:31:36 -05:00
|
|
|
s48_value sch_retval = S48_UNSPECIFIC;
|
2002-02-12 08:43:37 -05:00
|
|
|
S48_DECLARE_GC_PROTECT(3);
|
|
|
|
|
2002-02-12 10:31:36 -05:00
|
|
|
S48_GC_PROTECT_3(sch_tv_sec, sch_tv_usec, sch_listval);
|
|
|
|
|
2001-01-01 11:45:32 -05:00
|
|
|
if( gettimeofday(&t, &tz) ) s48_raise_os_error (errno);
|
2000-12-19 11:33:51 -05:00
|
|
|
|
2002-02-12 08:43:37 -05:00
|
|
|
|
|
|
|
sch_tv_sec = s48_enter_integer(t.tv_sec);
|
|
|
|
sch_tv_usec = s48_enter_integer(t.tv_usec);
|
|
|
|
sch_listval = s48_cons (sch_tv_usec, S48_NULL);
|
|
|
|
sch_retval = s48_cons (sch_tv_sec, sch_listval);
|
|
|
|
|
2002-02-12 10:31:36 -05:00
|
|
|
S48_GC_UNPROTECT();
|
2002-02-12 08:43:37 -05:00
|
|
|
|
|
|
|
return sch_retval;
|
|
|
|
|
2001-01-01 11:45:32 -05:00
|
|
|
}
|