diff options
author | kdx <kikoodx@paranoici.org> | 2023-06-10 16:12:33 +0200 |
---|---|---|
committer | kdx <kikoodx@paranoici.org> | 2023-06-10 16:12:33 +0200 |
commit | 37d470da243a2165d28b8a807ce940cb27b2c321 (patch) | |
tree | a64995748228bcb0e998ffeffa4fd124bf4e07ad | |
parent | c9dd409007a4c87bac3c497fd2df2e7d333b8609 (diff) | |
download | golem-37d470da243a2165d28b8a807ce940cb27b2c321.tar.gz |
read source from file
-rw-r--r-- | src/main.c | 25 | ||||
-rwxr-xr-x | testing.sh | 3 |
2 files changed, 25 insertions, 3 deletions
@@ -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); @@ -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" |