Basic file execution

This commit is contained in:
Sage Vaillancourt 2020-10-29 11:18:06 -04:00
parent 94555e4497
commit 9486854267
1 changed files with 29 additions and 4 deletions

View File

@ -549,6 +549,29 @@ Object parseEval(const char *input, struct Environment *env)
} }
#ifdef STANDALONE #ifdef STANDALONE
int read_file(const char *filename, struct Environment *env) {
FILE *input = fopen(filename, "r");
if(!input) {
return 1;
}
Object r = numberObject(0);
char buf[256];
if(fgets(buf, 256, input)){
if(buf[0] != '#' || buf[1] != '!') {
r = parseEval(buf, env);
printAndClean(&r);
}
}
while(fgets(buf, 256, input)) {
if(buf[0] != ';') {
r = parseEval(buf, env);
printAndClean(&r);
}
}
fclose(input);
return 0;
}
void repl(struct Environment *env) void repl(struct Environment *env)
{ {
char input[200] = ""; char input[200] = "";
@ -564,11 +587,13 @@ int main(int argc, const char* argv[])
{ {
struct Environment env = defaultEnv(); struct Environment env = defaultEnv();
if(argc >= 2) { if(argc >= 2) {
if(read_file(argv[1], &env) != 0) {
Object r = numberObject(0); Object r = numberObject(0);
for(int i = 1; i < argc; i++) { for(int i = 1; i < argc; i++) {
r = parseEval(argv[i], &env); r = parseEval(argv[i], &env);
printAndClean(&r); printAndClean(&r);
} }
}
} else { } else {
repl(&env); repl(&env);
} }