diff options
Diffstat (limited to 'src/program.c')
-rw-r--r-- | src/program.c | 31 |
1 files changed, 10 insertions, 21 deletions
diff --git a/src/program.c b/src/program.c index dcec0f7..1d94da3 100644 --- a/src/program.c +++ b/src/program.c @@ -6,21 +6,17 @@ #include <string.h> #include <errno.h> -static FILE* f; -static uint32_t count; - -static char next_char() { +static char next_char(FILE* file) { char c; - if (fread(&c, 1, 1, f) != 1) { + if (fread(&c, 1, 1, file) != 1) { return EOF; } else { - count++; return c; } } -static Symbol next_symbol() { - char c = next_char(); +static Symbol next_symbol(FILE* file) { + char c = next_char(file); retest: switch (c) { case '<': @@ -56,28 +52,21 @@ retest: case '\n': case '\t': case ' ': - while(c = next_char(), c == '\n' || c == '\t' || c == ' '); + while(c = next_char(file), c == '\n' || c == '\t' || c == ' '); goto retest; case '/': - while(c = next_char(), c != '\n' && c != EOF); + while(c = next_char(file), c != '\n' && c != EOF); goto retest; case EOF: return Eof; default: - c = next_char(); + c = next_char(file); goto retest; } } -void program_init(char* file_path, Program* program) { - f = fopen (file_path, "r"); - if (f == NULL) { - printf("error: failed to open %s (%s)\n", file_path, strerror(errno)); - exit(EXIT_FAILURE); - } - +void program_init(FILE* file, Program* program) { uint32_t capacity = 8; - count = 0; program->data = malloc(capacity * sizeof(Symbol)); program->len = 0; @@ -85,7 +74,7 @@ void program_init(char* file_path, Program* program) { Symbol s; while(true) { - s = next_symbol(); + s = next_symbol(file); if (program->len == capacity) { capacity *= 2; @@ -98,7 +87,7 @@ void program_init(char* file_path, Program* program) { if (s == Eof) break; } - fclose(f); + fclose(file); } void program_peek(Program* program, Symbol* symbol) { |