static void manual_input (lua_State *lua_state, int prompt) { int cont = 1; while (cont) { char buffer[BUFSIZ]; int i = 0; if (prompt) { lua_getglobal(lua_state, "_PROMPT"); printf("%s", lua_tostring(lua_state, -1)); lua_remove(lua_state, -1); } for(;;) { int c = getchar(); if (c == EOF) { cont = 0; break; } else if (c == '\n') { if (i>0 && buffer[i-1] == '\\') buffer[i-1] = '\n'; else break; } else if (i >= BUFSIZ-1) { fprintf(stderr, "lua: argument line too long\n"); break; } else buffer[i++] = (char)c; } buffer[i] = '\0'; ldo(lua_state, lua_dostring, buffer); } printf("\n"); }
static void manual_input (int prompt) { int cont = 1; while (cont) { char buffer[BUFSIZ]; int i = 0; lua_beginblock(); if (prompt) printf("%s", lua_getstring(lua_getglobal("_PROMPT"))); for(;;) { int c = getchar(); if (c == EOF) { cont = 0; break; } else if (c == '\n') { if (i>0 && buffer[i-1] == '\\') buffer[i-1] = '\n'; else break; } else if (i >= BUFSIZ-1) { fprintf(stderr, "lua: argument line too long\n"); break; } else buffer[i++] = (char)c; } buffer[i] = '\0'; ldo(lua_dostring, buffer); lua_endblock(); } printf("\n"); }
static int file_input (const char *argv) { int result = ldo(lua_dofile, argv); if (result) { if (result == LUA_ERRFILE) { fprintf(stderr, "colua: cannot execute file "); perror(argv); } return EXIT_FAILURE; } else return EXIT_SUCCESS; }
static void manual_input (int version, int prompt) { int cont = 1; if (version) print_version(); while (cont) { char buffer[MAXINPUT]; int i = 0; if (prompt) { const char *s; lua_getglobal(L, "_PROMPT"); s = lua_tostring(L, -1); if (!s) s = PROMPT; fputs(s, stdout); lua_pop(L, 1); /* remove global */ } for(;;) { int c = getchar(); if (c == EOF) { cont = 0; break; } else if (c == '\n') { if (i>0 && buffer[i-1] == '\\') buffer[i-1] = '\n'; else break; } else if (i >= MAXINPUT-1) { fprintf(stderr, "colua: input line too long\n"); break; } else buffer[i++] = (char)c; } buffer[i] = '\0'; ldo(lua_dostring, buffer); lua_settop(L, 0); /* remove eventual results */ } printf("\n"); }
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; }
int main (int argc, char *argv[]) { int i; OleInitialize(NULL); SetConsoleTitle(LUACOM_VERSION); #if defined(LUA4) lua_State *lua_state = lua_open(0); lua_baselibopen (lua_state); lua_mathlibopen (lua_state); lua_iolibopen (lua_state); lua_strlibopen (lua_state); #elif defined(LUA5) lua_State *lua_state = lua_open(); luaopen_base (lua_state); luaopen_math (lua_state); luaopen_io (lua_state); luaopen_string (lua_state); luaopen_table (lua_state); #endif lua_pushstring(lua_state, "> "); lua_setglobal(lua_state, "_PROMPT"); luacom_open(lua_state); init_windows(lua_state); if (argc < 2) { /* no arguments? */ if (isatty(0)) { printf("%s %s\n", LUACOM_VERSION, LUACOM_COPYRIGHT); manual_input(lua_state, 1); } else ldo(lua_state, 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_state, lua_dofile, NULL); /* executes stdin as a file */ break; case 'i': manual_input(lua_state, 1); break; case 'q': manual_input(lua_state, 0); break; case 'v': printf("%s %s\n(written by %s)\n\n", LUACOM_VERSION, LUACOM_COPYRIGHT, LUACOM_AUTHORS); break; case 'e': i++; if (ldo(lua_state, 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(lua_state, argv[i]); else { int result = ldo(lua_state, lua_dofile, argv[i]); if (result) { if (result == 2) { fprintf(stderr, "lua: cannot execute file "); perror(argv[i]); } exit(1); } } } luacom_close(lua_state); lua_close(lua_state); OleUninitialize(); return 0; }
static int handle_argv (char *argv[], struct Options *opt) { if (opt->stacksize > 0) argv++; /* skip option `-s' (if present) */ if (*argv == NULL) { /* no more arguments? */ if (isatty(0)) { manual_input(1, 1); } else ldo(lua_dofile, NULL); /* executes stdin as a file */ } else { /* other arguments; loop over them */ int i; for (i = 0; argv[i] != NULL; i++) { if (argv[i][0] != '-') { /* not an option? */ if (strchr(argv[i], '=')) assign(argv[i]); else if (file_input(argv[i]) != EXIT_SUCCESS) return EXIT_FAILURE; /* stop if file fails */ } else switch (argv[i][1]) { /* option */ case 0: { ldo(lua_dofile, NULL); /* executes stdin as a file */ break; } case 'i': { manual_input(0, 1); break; } case 'q': { manual_input(0, 0); break; } case 'c': { opt->toclose = 1; break; } case 'v': { print_version(); break; } case 'e': { i++; if (argv[i] == NULL) { print_message(); return EXIT_FAILURE; } if (ldo(lua_dostring, argv[i]) != 0) { fprintf(stderr, "colua: error running argument `%.99s'\n", argv[i]); return EXIT_FAILURE; } break; } case 'f': { i++; if (argv[i] == NULL) { print_message(); return EXIT_FAILURE; } getargs(argv+i); /* collect remaining arguments */ lua_setglobal(L, "arg"); return file_input(argv[i]); /* stop scanning arguments */ } case 's': { fprintf(stderr, "colua: stack size (`-s') must be the first option\n"); return EXIT_FAILURE; } default: { print_message(); return EXIT_FAILURE; } } } } return EXIT_SUCCESS; }