summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkdx <kikoodx@paranoici.org>2023-06-10 16:12:33 +0200
committerkdx <kikoodx@paranoici.org>2023-06-10 16:12:33 +0200
commit37d470da243a2165d28b8a807ce940cb27b2c321 (patch)
treea64995748228bcb0e998ffeffa4fd124bf4e07ad
parentc9dd409007a4c87bac3c497fd2df2e7d333b8609 (diff)
downloadgolem-37d470da243a2165d28b8a807ce940cb27b2c321.tar.gz
read source from file
-rw-r--r--src/main.c25
-rwxr-xr-xtesting.sh3
2 files changed, 25 insertions, 3 deletions
diff --git a/src/main.c b/src/main.c
index 2a15976..a256143 100644
--- a/src/main.c
+++ b/src/main.c
@@ -944,13 +944,34 @@ parse(Token *tok)
return head.next;
}
+static char *
+drain(FILE *fp)
+{
+ if (fseek(fp, 0, SEEK_END) < 0)
+ error("fseek failed");
+ const size_t size = ftell(fp);
+ if (fseek(fp, 0, SEEK_SET) < 0)
+ error("fseek failed");
+ char *data = malloc(size + 1);
+ if (data == NULL)
+ error("malloc failed");
+ if (fread(data, 1, size, fp) != size)
+ error("fread failed");
+ data[size] = '\0';
+ return data;
+}
+
int
main(int argc, char **argv)
{
if (argc != 2)
- error("usage: %s code", argv[0]);
+ error("usage: %s file", argv[0]);
- Token *tok = tokenize(argv[1]);
+ FILE *const fp = fopen(argv[1], "rb");
+ if (fp == NULL)
+ error("fopen failed");
+ Token *const tok = tokenize(drain(fp));
+ fclose(fp);
Node *node = parse(tok);
diff --git a/testing.sh b/testing.sh
index 4fe973e..f50354f 100755
--- a/testing.sh
+++ b/testing.sh
@@ -4,7 +4,8 @@ function test() {
QUIET="$1"
CODE="$2"
echo "--- $CODE ---"
- ./build/golem "$CODE" >"build/tmp.orgaasm"
+ printf '%s' "$CODE" >"build/tmp.golem"
+ ./build/golem "build/tmp.golem" >"build/tmp.orgaasm"
[ "$QUIET" != "-q" ] && cat "build/tmp.orgaasm"
orgaasm "build/tmp.orgaasm" "build/tmp.rom"
orgaemu "build/tmp.rom"