From d40b1684e245f2fbdfd561b77477b99a26e66560 Mon Sep 17 00:00:00 2001 From: peter Date: Sat, 29 Aug 2026 16:23:56 +0000 Subject: Commit work in progress changes. FossilOrigin-Name: ebe13a745f4816a4239d9dfe937bc9daf97ffc466e8bbdc412b05c3c891118fd --- src/bin/main.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 8 deletions(-) diff --git a/src/bin/main.c b/src/bin/main.c index 93d28c0..e799202 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -11,10 +11,11 @@ main(int argc, char *argv[]) struct aplwc_line *line; struct aplwc_value *value; uint8_t *data; - char *input; + char *input, *src; int ret, exit_code, line_number; - size_t memsize, input_size; + size_t memsize, input_size, src_size, i; int opt, xflag, input_file; + long tmp; FILE *f; input = NULL; @@ -64,6 +65,49 @@ usage: return 1; } + if(input_file){ + if(fseek(f, 0, SEEK_END)){ +file_size: + fprintf(stderr, "Failed to determine file size\n"); + return 1; + } + tmp = ftell(f); + if(tmp < 0) + goto file_size; + input_size = tmp; + rewind(f); + input = malloc(input_size); + if(input == NULL){ + fprintf(stderr, "Failed to allocate space for file contents\n"); + return 1; + } + if(fread(input, 1, input_size, f) < input_size){ + fprintf(stderr, "Failed to read file contents\n"); + return 1; + } + fclose(f); + + src = input; + src_size = input_size; + if((input_size > 2) && (input[0] == '#') && (input[1] == '!')){ + for(i = 0; i < input_size; i++){ + if(input[i] == '\n'){ + src += i; + src_size -= i; + xflag = 1; + break; + } + } + } + + ret = aplwc_load_module(aplwc, "Main", src, src_size); + if(ret){ + fprintf(stderr, "Couldn't load Main module from file %s: %s\n", argv[optind], aplwc_errstr_rc(ret)); + return 1; + } + free(input); + } + if(xflag) goto exit; @@ -76,16 +120,11 @@ usage: aplwc_free_value(value); input = NULL; - if(getline(&input, &input_size, f) < 0){ + if(getline(&input, &input_size, stdin) < 0){ free(input); break; }else{ line_number++; - if(input_file && (line_number == 1)){ - if((strlen(input) > 2) && (input[0] == '#') && (input[1] == '!')) - continue; - } - line = aplwc_read(aplwc, input); if(line == NULL){ line_error: -- cgit v1.2.3 From 969729d0b0e13314e1cb6266b1304e7606d4563f Mon Sep 17 00:00:00 2001 From: peter Date: Sun, 30 Aug 2026 12:49:56 +0000 Subject: Small tweaks to get the current set of tests to pass FossilOrigin-Name: 840e78468372f506a665fb06ddedd1e51266d465bf250273858e6e2f8976717e --- src/bin/main.c | 1 + src/include/aplwc.h | 2 +- tests/scripts/1.aplwc | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/bin/main.c b/src/bin/main.c index e799202..572d170 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -106,6 +106,7 @@ file_size: return 1; } free(input); + input = NULL; } if(xflag) diff --git a/src/include/aplwc.h b/src/include/aplwc.h index a22bd8d..3061500 100644 --- a/src/include/aplwc.h +++ b/src/include/aplwc.h @@ -30,6 +30,6 @@ void aplwc_free_value(struct aplwc_value *); const char *aplwc_value_string(struct aplwc_value *); enum aplwc_rc aplwc_load_module(struct aplwc *, const char *, const char *, int n); -#define APLWC_MIN_MEM (2048) +#define APLWC_MIN_MEM (64000) #endif /* APLWC_H */ diff --git a/tests/scripts/1.aplwc b/tests/scripts/1.aplwc index 77104b2..e101d02 100755 --- a/tests/scripts/1.aplwc +++ b/tests/scripts/1.aplwc @@ -1,3 +1,5 @@ #!/usr/bin/env aplwc-repl +∇ run ⎕←40 + 2 +∇ -- cgit v1.2.3