summaryrefslogtreecommitdiff
path: root/src/lisp/ao_lisp_os.h
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2017-11-17 23:23:50 -0800
committerKeith Packard <keithp@keithp.com>2017-11-17 23:26:59 -0800
commitcf5729a0bae51172f12fc9ec4339d4e975a45fcc (patch)
treef67bef57d31f5f202718f7e8dbc6f41ac6b6c346 /src/lisp/ao_lisp_os.h
parente1acf5eb12aceda7aa838df031c1da1129d0fa5d (diff)
altos/lisp: Finish first pass through r7rs
* print -> write, patom -> display * Add read-char, write-char * Add exit, current-jiffy, current-second, jiffies-per-second * Add for-each and string-for-each * Avoid duplicate builtins with different atoms Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/lisp/ao_lisp_os.h')
-rw-r--r--src/lisp/ao_lisp_os.h16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/lisp/ao_lisp_os.h b/src/lisp/ao_lisp_os.h
index 5fa3686b..4285cb8c 100644
--- a/src/lisp/ao_lisp_os.h
+++ b/src/lisp/ao_lisp_os.h
@@ -41,13 +41,23 @@ ao_lisp_os_led(int led)
printf("leds set to 0x%x\n", led);
}
+#define AO_LISP_JIFFIES_PER_SECOND 100
+
static inline void
-ao_lisp_os_delay(int delay)
+ao_lisp_os_delay(int jiffies)
{
struct timespec ts = {
- .tv_sec = delay / 1000,
- .tv_nsec = (delay % 1000) * 1000000,
+ .tv_sec = jiffies / AO_LISP_JIFFIES_PER_SECOND,
+ .tv_nsec = (jiffies % AO_LISP_JIFFIES_PER_SECOND) * (1000000000L / AO_LISP_JIFFIES_PER_SECOND)
};
nanosleep(&ts, NULL);
}
+
+static inline int
+ao_lisp_os_jiffy(void)
+{
+ struct timespec tp;
+ clock_gettime(CLOCK_MONOTONIC, &tp);
+ return tp.tv_sec * AO_LISP_JIFFIES_PER_SECOND + (tp.tv_nsec / (1000000000L / AO_LISP_JIFFIES_PER_SECOND));
+}
#endif