diff --git a/Makefile b/Makefile index 632ac3fd..582d82bd 100644 --- a/Makefile +++ b/Makefile @@ -128,7 +128,8 @@ COMPILED_LIBS := lib/srfi/18/threads$(SO) lib/srfi/27/rand$(SO) \ lib/chibi/filesystem$(SO) lib/chibi/process$(SO) lib/chibi/time$(SO) \ lib/chibi/system$(SO) lib/chibi/io/io$(SO) lib/chibi/stty$(SO) \ lib/chibi/weak$(SO) lib/chibi/heap-stats$(SO) lib/chibi/disasm$(SO) \ - lib/chibi/optimize/rest$(SO) lib/chibi/optimize/profile$(SO) + lib/chibi/optimize/rest$(SO) lib/chibi/optimize/profile$(SO) \ + lib/scheme/time$(SO) libs: $(COMPILED_LIBS) diff --git a/lib/scheme/time.c b/lib/scheme/time.c new file mode 100644 index 00000000..62294f66 --- /dev/null +++ b/lib/scheme/time.c @@ -0,0 +1,19 @@ +/* time.c -- R7RS time routines */ +/* Copyright (c) 2011 Alex Shinn. All rights reserved. */ +/* BSD-style license: http://synthcode.com/license.txt */ + +#include +#include + +/* TODO: Check a leap second table file at appropriate intervals. */ +static time_t leap_seconds_since_epoch = 34; + +static sexp sexp_current_second (sexp ctx sexp_api_params(self, n)) { + time_t res = time(NULL); + return sexp_make_flonum(ctx, res + leap_seconds_since_epoch); +} + +sexp sexp_init_library (sexp ctx sexp_api_params(self, n), sexp env) { + sexp_define_foreign(ctx, env, "current-second", 0, sexp_current_second); + return SEXP_VOID; +} diff --git a/lib/scheme/time.sld b/lib/scheme/time.sld index d18004e6..1b2bddf1 100644 --- a/lib/scheme/time.sld +++ b/lib/scheme/time.sld @@ -2,7 +2,7 @@ (define-library (scheme time) (import (scheme)) (export current-second current-jiffy jiffies-per-second) - (include-shared "time.c") + (include-shared "time") (begin (define current-jiffy current-second) (define (jiffies-per-second) 1)))