Basic file execution
This commit is contained in:
parent
94555e4497
commit
9486854267
|
@ -549,6 +549,29 @@ Object parseEval(const char *input, struct Environment *env)
|
|||
}
|
||||
|
||||
#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)
|
||||
{
|
||||
char input[200] = "";
|
||||
|
@ -564,11 +587,13 @@ int main(int argc, const char* argv[])
|
|||
{
|
||||
struct Environment env = defaultEnv();
|
||||
if(argc >= 2) {
|
||||
if(read_file(argv[1], &env) != 0) {
|
||||
Object r = numberObject(0);
|
||||
for(int i = 1; i < argc; i++) {
|
||||
r = parseEval(argv[i], &env);
|
||||
printAndClean(&r);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
repl(&env);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue