aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornic-gaffney <gaffney_nic@protonmail.com>2023-06-27 12:29:42 -0500
committernic-gaffney <gaffney_nic@protonmail.com>2023-06-27 12:29:42 -0500
commit2c347aae8ab225cc873b7c36c8a1c73ca6ee4123 (patch)
tree7d5c0fd3ad3646d9bbf70ba0012798bf8af199f9
parent2cf498f7bf1311ebca156315a0c9ac25b0addef5 (diff)
downloadsloth-2c347aae8ab225cc873b7c36c8a1c73ca6ee4123.tar.gz
Fixed wait
-rwxr-xr-xbuild.sh2
-rwxr-xr-xcgolbin22096 -> 17184 bytes
-rw-r--r--examples/cgol.sloth2
-rw-r--r--std/stdlib.c23
-rw-r--r--std/stdlib.sloth2
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
--- a/cgol
+++ b/cgol
Binary files 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 <unistd.h>
+#include <errno.h>
#include <stdlib.h>
#include <string.h>
+#include <time.h>
-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;