From bf647e430e3a3642c8199dc81a411d5e1586cabb Mon Sep 17 00:00:00 2001 From: nic-gaffney Date: Sun, 25 Jun 2023 18:55:58 -0500 Subject: Standard library beginnings --- std/stdio.c | 12 ++++++++++ std/stdio.sloth | 9 ++++++++ std/stdlib.c | 5 ++++ std/stdlib.sloth | 14 +++++++++++ std/stdmath.sloth | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 109 insertions(+) create mode 100644 std/stdio.c create mode 100644 std/stdio.sloth create mode 100644 std/stdlib.c create mode 100644 std/stdlib.sloth create mode 100644 std/stdmath.sloth (limited to 'std') diff --git a/std/stdio.c b/std/stdio.c new file mode 100644 index 0000000..d1bc69a --- /dev/null +++ b/std/stdio.c @@ -0,0 +1,12 @@ +#include +#include + +char* readln() { + char* str = malloc(128); + scanf("%127s", str); + return str; +} + +void print(char *str) { + puts(str); +} diff --git a/std/stdio.sloth b/std/stdio.sloth new file mode 100644 index 0000000..c28d474 --- /dev/null +++ b/std/stdio.sloth @@ -0,0 +1,9 @@ +foreign fn print(str: String) Void; +foreign fn readln() String; + +fn println(str: String) Void { + print(str); + print("\n"); +} + + diff --git a/std/stdlib.c b/std/stdlib.c new file mode 100644 index 0000000..b50c0c5 --- /dev/null +++ b/std/stdlib.c @@ -0,0 +1,5 @@ +#include + +void wait(long long x) { + sleep(x); +} diff --git a/std/stdlib.sloth b/std/stdlib.sloth new file mode 100644 index 0000000..7b6e2f9 --- /dev/null +++ b/std/stdlib.sloth @@ -0,0 +1,14 @@ +foreign fn wait(x: Int) Void; +foreign fn print(str: String) Void; + +fn termpos(x: int, y: int) Void { + print("\x1b["); + print(x); + print(";"); + print(y); + print("H"); +} + +fn termclear() Void { + print("\x1b[2J\x1b[H"); +} diff --git a/std/stdmath.sloth b/std/stdmath.sloth new file mode 100644 index 0000000..ebf9a7c --- /dev/null +++ b/std/stdmath.sloth @@ -0,0 +1,69 @@ +foreign fn rand() Int; + +fn abs(x: Int) Int { + if x < 0 { + return -x; + } + return x; +} + +fn fabs(x: Float) Float { + if x < 0 { + return -x; + } + return x; +} + +fn max(x: Int, y: Int) Int { + if x > y { + return x; + } + return y; +} + +fn min(x: Int, y: Int) Int { + if x < y { + return x; + } + return y; +} + +fn fmax(x: Float, y: Float) Float { + if x > y { + return x; + } + return y; +} + +fn fmin(x: Float, y: Float) Float { + if x < y { + return x; + } + return y; +} + +fn pow(x: Int, y: Int) Int { + while y > 1 { + x = x*x; + y = y-1; + } + return x; +} + +fn floor(x: Float) Float { + return x - abs(x % 1.0); +} + +fn ceil(x: Float) Float { + if x < 0.0 { + return floor(x) - 1.0; + } + return floor(x) + 1.0; +} + +fn round(x: Float) Float { + if fabs(x % 1.0) >= 0.5 { + return ceil(x); + } + return floor(x); +} -- cgit v1.2.3