From 2c347aae8ab225cc873b7c36c8a1c73ca6ee4123 Mon Sep 17 00:00:00 2001 From: nic-gaffney Date: Tue, 27 Jun 2023 12:29:42 -0500 Subject: Fixed wait --- build.sh | 2 +- cgol | Bin 22096 -> 17184 bytes examples/cgol.sloth | 2 +- std/stdlib.c | 23 ++++++++++++++++++++--- std/stdlib.sloth | 2 +- 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/build.sh b/build.sh index 62bd830..fe78ddf 100755 --- a/build.sh +++ b/build.sh @@ -1,5 +1,5 @@ # Build Sloth -cargo build +cargo build --features=llvm-sys/prefer-dynamic FILENAME="$1" # Compile standard library ./target/debug/sloth std/stdio.sloth std/stdlib.sloth std/stdmath.sloth $FILENAME diff --git a/cgol b/cgol index 9a1335c..c614991 100755 Binary files a/cgol and b/cgol differ diff --git a/examples/cgol.sloth b/examples/cgol.sloth index a5b761f..c4d9537 100644 --- a/examples/cgol.sloth +++ b/examples/cgol.sloth @@ -104,7 +104,7 @@ fn main() Int { update(life, new); display(new); life = new; - wait(1.0); + wait(100); } return 0; } diff --git a/std/stdlib.c b/std/stdlib.c index b70f5b7..dcb7ec3 100644 --- a/std/stdlib.c +++ b/std/stdlib.c @@ -1,9 +1,26 @@ -#include +#include #include #include +#include -void wait(float x) { - sleep(x); +int wait(int msec) { + struct timespec ts; + int res; + + if (msec < 0) + { + errno = EINVAL; + return -1; + } + + ts.tv_sec = msec / 1000; + ts.tv_nsec = (msec % 1000) * 1000000; + + do { + res = nanosleep(&ts, &ts); + } while (res && errno == EINTR); + + return res; } int slen(char *str) { diff --git a/std/stdlib.sloth b/std/stdlib.sloth index eb6000d..ea57e45 100644 --- a/std/stdlib.sloth +++ b/std/stdlib.sloth @@ -1,4 +1,4 @@ -foreign fn wait(x: Float) Void; +foreign fn wait(x: Int) Int; foreign fn print(str: String) Void; foreign fn slen(str: String) Int; # foreign fn charAt(str: String) Char; -- cgit v1.2.3