aboutsummaryrefslogtreecommitdiff
path: root/std
diff options
context:
space:
mode:
Diffstat (limited to 'std')
-rw-r--r--std/stdio.c12
-rw-r--r--std/stdio.sloth9
-rw-r--r--std/stdlib.c5
-rw-r--r--std/stdlib.sloth14
-rw-r--r--std/stdmath.sloth69
5 files changed, 109 insertions, 0 deletions
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 <stdio.h>
+#include <stdlib.h>
+
+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 <unistd.h>
+
+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);
+}