Compress program on load

This commit is contained in:
Devine Lu Linvega 2024-04-07 10:56:43 -07:00
parent 135204131a
commit 2250f9231e
2 changed files with 26 additions and 6 deletions

View File

@ -1,4 +1,5 @@
<> (plode (String ?*)) (String ?*) <> (?x dup) (?x ?x)
<> (?x ?y swap) (?y ?x)
(plode (plode (String hello))) <> ( ?x pop) ()
(1 2 3) (4 5 6) swap pop dup

View File

@ -213,18 +213,37 @@ print_rules(void)
fprintf(stderr, "\n"); fprintf(stderr, "\n");
} }
static int
load(char *path)
{
char c, *w = bank_a;
FILE *f = fopen(path, "r");
if(!f) return 0;
while(fread(&c, 1, 1, f)) {
if(prog_ > bank_a) {
if(c == ')' && *(w - 1) == ' ') w--;
if(c == '(' && *(w - 1) == ' ') w--;
if(c == ' ' && *(w - 1) == ' ') w--;
if(c == ' ' && *(w - 1) == '(') continue;
if(c == ' ' && *(w - 1) == ')') continue;
}
*w++ = c;
}
*w++ = 0;
fclose(f);
return 1;
}
int int
main(int argc, char **argv) main(int argc, char **argv)
{ {
FILE *f;
if(argc < 2) if(argc < 2)
return !printf("usage: modal [-v] source.modal\n"); return !printf("usage: modal [-v] source.modal\n");
if(argc < 3 && argv[1][0] == '-' && argv[1][1] == 'v') if(argc < 3 && argv[1][0] == '-' && argv[1][1] == 'v')
return !printf("Modal - Modal Interpreter, 4 Apr 2024.\n"); return !printf("Modal - Modal Interpreter, 4 Apr 2024.\n");
if(!(f = fopen(argv[1], "r"))) if(!load(argv[1]))
return !printf("Invalid Modal file: %s.\n", argv[1]); return !printf("Invalid Modal file: %s.\n", argv[1]);
queue = 2; queue = 2;
fread(bank_a, 1, 0x1000, f), fclose(f);
while(rewrite(argv[queue])) while(rewrite(argv[queue]))
; ;
print_rules(); print_rules();