From ac6004730fa54a756d1627a4e8450cd32df86f75 Mon Sep 17 00:00:00 2001 From: Preston Pan Date: Tue, 9 Jan 2024 18:39:49 -0800 Subject: reorganize directory structure --- src/main.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/main.c (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..7e9f5d9 --- /dev/null +++ b/src/main.c @@ -0,0 +1,76 @@ +#include +#include +#include +#include +#include +#include +#include + +extern ht_t *WORD_TABLE; + +extern array_t *STACK; +extern char *INBUF; +extern parser_t *PARSER; +extern array_t *EVAL_STACK; +extern ht_t *OBJ_TABLE; +extern ht_t *FLIT; + +void usage() { + printf("Usage: stem [-hv] [file]\n"); + exit(1); +} + +void version() { + printf("Author: Preston Pan, MIT License 2023\n"); + printf("stem, version 1.2 alpha\n"); + exit(0); +} + +int main(int argc, char **argv) { + value_t *v; + size_t len; + + if (argc < 2) { + usage(); + } + + if (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0) { + usage(); + } else if (strcmp(argv[1], "-v") == 0 || strcmp(argv[1], "--version") == 0) { + version(); + } + + FILE *FP = fopen(argv[1], "rb"); + + if (!FP) { + usage(); + } + + ssize_t bytes_read = getdelim(&INBUF, &len, '\0', FP); + fclose(FP); + + PARSER = init_parser(INBUF); + STACK = init_array(10); + WORD_TABLE = init_ht(500); + EVAL_STACK = init_array(10); + FLIT = init_ht(500); + OBJ_TABLE = init_ht(500); + + add_funcs(); + + while (1) { + v = parser_get_next(PARSER); + if (v == NULL) + break; + eval(v); + } + + free(INBUF); + ht_free(WORD_TABLE, value_free); + ht_free(FLIT, func_free); + ht_free(OBJ_TABLE, custom_free); + array_free(STACK); + free(PARSER); + array_free(EVAL_STACK); + return 0; +} -- cgit