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.c19
-rw-r--r--std/stdlib.sloth17
-rw-r--r--std/stdmath.c9
-rw-r--r--std/stdmath.sloth69
6 files changed, 135 insertions, 0 deletions
diff --git a/std/stdio.c b/std/stdio.c
new file mode 100644
index 0000000..1a4d98c
--- /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) {
+ fputs(str, stdout);
+}
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..7e77385
--- /dev/null
+++ b/std/stdlib.c
@@ -0,0 +1,19 @@
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+void wait(long long x) {
+ sleep(x);
+}
+
+long long slen(char *str) {
+ return (long long) strlen(str);
+}
+
+char charAt(char *str, long long x) {
+ return str[x];
+}
+
+long long parse_int(char *str) {
+ return (long long) atoi(str);
+}
diff --git a/std/stdlib.sloth b/std/stdlib.sloth
new file mode 100644
index 0000000..d7ddeff
--- /dev/null
+++ b/std/stdlib.sloth
@@ -0,0 +1,17 @@
+foreign fn wait(x: Int) Void;
+foreign fn print(str: String) Void;
+foreign fn slen(str: String) Int;
+foreign fn charAt(str: String) Char;
+foreign fn parse_int(str: String) Int;
+
+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.c b/std/stdmath.c
new file mode 100644
index 0000000..dad292f
--- /dev/null
+++ b/std/stdmath.c
@@ -0,0 +1,9 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+
+
+long long randGen(long long min, long long max) {
+ srandom((unsigned) time(NULL));
+ return random() % (max - min + 1) + min;
+}
diff --git a/std/stdmath.sloth b/std/stdmath.sloth
new file mode 100644
index 0000000..7ff5c82
--- /dev/null
+++ b/std/stdmath.sloth
@@ -0,0 +1,69 @@
+foreign fn randGen(min: Int, max: Int) Int;
+
+fn abs(x: Int) Int {
+ if x < 0 {
+ return -x;
+ }
+ return x;
+}
+
+fn fabs(x: Float) Float {
+ if x < 0.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 - fabs(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);
+}