mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-19 05:39:18 +02:00
27 lines
953 B
C
27 lines
953 B
C
/* time.c -- R7RS time routines */
|
|
/* Copyright (c) 2011-2012 Alex Shinn. All rights reserved. */
|
|
/* BSD-style license: http://synthcode.com/license.txt */
|
|
|
|
#include <chibi/eval.h>
|
|
|
|
#ifndef PLAN9
|
|
#include <time.h>
|
|
#else
|
|
typedef long time_t;
|
|
#endif
|
|
|
|
/* TODO: Check a leap second table file at appropriate intervals. */
|
|
static time_t leap_seconds_since_epoch = 24;
|
|
|
|
static sexp sexp_current_second (sexp ctx, sexp self, sexp_sint_t n) {
|
|
time_t res = time(NULL);
|
|
return sexp_make_flonum(ctx, res + leap_seconds_since_epoch);
|
|
}
|
|
|
|
sexp sexp_init_library (sexp ctx, sexp self, sexp_sint_t n, sexp env, const char* version, sexp_abi_identifier_t abi) {
|
|
if (!(sexp_version_compatible(ctx, version, sexp_version)
|
|
&& sexp_abi_compatible(ctx, abi, SEXP_ABI_IDENTIFIER)))
|
|
return sexp_global(ctx, SEXP_G_ABI_ERROR);
|
|
sexp_define_foreign(ctx, env, "current-second", 0, sexp_current_second);
|
|
return SEXP_VOID;
|
|
}
|