static int pmain (lua_State *l) { struct Smain *s = (struct Smain *)lua_touserdata(l, 1); int status; int interactive = 0; if (s->argv[0] && s->argv[0][0]) progname = s->argv[0]; L = l; lua_userinit(l); /* open libraries */ status = handle_luainit(); if (status == 0) { status = handle_argv(s->argv, &interactive); if (status == 0 && interactive) manual_input(); } s->status = status; return 0; }
int main (int argc, char *argv[]) { int i; lua_open(); lua_pushstring("> "); lua_setglobal("_PROMPT"); lua_userinit(); if (argc < 2) { /* no arguments? */ if (isatty(0)) { printf("%s %s\n", LUA_VERSION, LUA_COPYRIGHT); manual_input(1); } else ldo(lua_dofile, NULL); /* executes stdin as a file */ } else for (i=1; i<argc; i++) { if (argv[i][0] == '-') { /* option? */ switch (argv[i][1]) { case 0: ldo(lua_dofile, NULL); /* executes stdin as a file */ break; case 'i': manual_input(1); break; case 'q': manual_input(0); break; case 'd': lua_setdebug(1); break; case 'v': printf("%s %s\n(written by %s)\n\n", LUA_VERSION, LUA_COPYRIGHT, LUA_AUTHORS); break; case 'e': i++; if (ldo(lua_dostring, argv[i]) != 0) { fprintf(stderr, "lua: error running argument `%s'\n", argv[i]); return 1; } break; default: print_message(); exit(1); } } else if (strchr(argv[i], '=')) assign(argv[i]); else { int result = ldo(lua_dofile, argv[i]); if (result) { if (result == 2) { fprintf(stderr, "lua: cannot execute file "); perror(argv[i]); } exit(1); } } } #ifdef DEBUG lua_close(); #endif return 0; }