diff --git a/minproto.leg b/minproto.leg index ae021f0..81d3f33 100644 --- a/minproto.leg +++ b/minproto.leg @@ -1,6 +1,6 @@ # minproto.leg -- minimal prototype langauge for semantic experiments # -# last edited: 2024-05-23 15:37:35 by piumarta on zora-1034.local +# last edited: 2024-05-26 10:21:16 by piumarta on xubuntu %{ ; @@ -3791,29 +3791,34 @@ int main(int argc, char **argv) trace = new(pObject); + oop args = new(pObject); + _set(intern("__argv__"), Symbol,value, args); + signal(SIGINT, sigint); - int repled = 0; + int argn = 1; - for (int argn = 1; argn < argc; ++argn) { + while (argn < argc) { char *arg = argv[argn]; - if ('-' == *arg) { - while (*++arg) { - switch (*arg) { - case 'O': ++opt_O; break; - case 'd': ++opt_d, ++opt_v; break; - case 'v': ++opt_v; break; - default: fatal("unknown command-line option '%c'", *arg); - } + if ('-' != *arg) break; + while (*++arg) { + switch (*arg) { + case 'O': ++opt_O; continue; + case 'd': ++opt_d, ++opt_v; continue; + case 'v': ++opt_v; continue; + default: fatal("unknown command-line option '%c'", *arg); } } - else { - replPath(arg); - ++repled; - } + ++argn; } - if (!repled) replFile(stdin); + for (int i = argn; i < argc; ++i) + Object_push(args, newString(argv[i])); + + if (argn == argc) + replFile(stdin); + else + replPath(argv[argn]); return 0; }