summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkdx <kikoodx@paranoici.org>2023-06-09 00:05:25 +0200
committerkdx <kikoodx@paranoici.org>2023-06-09 00:05:25 +0200
commit77d04aa15c9d77e00ec4597375433d93b4cdd9c0 (patch)
tree7d886e34182b0fa4668718d4285b8db1390c5e09
parentd8335995903014d77ab8ce5833c7ee178616eee7 (diff)
downloadgolem-77d04aa15c9d77e00ec4597375433d93b4cdd9c0.tar.gz
worst calculator ever
-rw-r--r--Tupfile10
-rw-r--r--Tupfile.ini0
-rw-r--r--compile_flags.txt3
-rw-r--r--src/main.c52
4 files changed, 65 insertions, 0 deletions
diff --git a/Tupfile b/Tupfile
new file mode 100644
index 0000000..4b55aec
--- /dev/null
+++ b/Tupfile
@@ -0,0 +1,10 @@
+CC = gcc
+LD = $(CC)
+CFLAGS = -std=c99 -Wall -Wextra
+LIBS =
+NAME = golem
+
+: foreach src/*.c |> $(CC) $(CFLAGS) -c -o %o %f |> build/%B.o
+: build/*.o |> $(LD) -o %o %f $(LIBS) |> build/$(NAME)
+
+.gitignore
diff --git a/Tupfile.ini b/Tupfile.ini
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tupfile.ini
diff --git a/compile_flags.txt b/compile_flags.txt
new file mode 100644
index 0000000..c376403
--- /dev/null
+++ b/compile_flags.txt
@@ -0,0 +1,3 @@
+-Wall
+-Wextra
+-std=c99
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 0000000..1bcb71c
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,52 @@
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+static void
+error(const char *fmt, ...) {
+ fprintf(stderr, "error: ");
+ va_list va;
+ va_start(va, fmt);
+ vfprintf(stderr, fmt, va);
+ va_end(va);
+ fprintf(stderr, "\n");
+ exit(1);
+}
+
+int
+main(int argc, char **argv)
+{
+ if (argc != 2)
+ error("usage: %s code", argv[0]);
+
+ char *p = argv[1];
+
+ printf("main:\n");
+ printf("\tLIT %04lu\n", strtoul(p, &p, 10));
+
+ while (*p != '\0') {
+ const char *op;
+ switch (*p) {
+ case '+':
+ op = "ADD";
+ break;
+ case '-':
+ op = "SUB";
+ break;
+ case '*':
+ op = "MUL";
+ break;
+ case '/':
+ op = "DIV";
+ break;
+ default:
+ error("unexpected character: '%c'", *p);
+ }
+ p++;
+ printf("\tLIT %04lu %s\n", strtoul(p, &p, 10), op);
+ }
+
+ printf("\tRET\n");
+
+ return 0;
+}