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
|
#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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue