RFMVHFNCB7PHI424BZ7XQQLJZIYP2HRBUH36SV4HQLMAA5QNQQYQC char specs[80];while (true)
if (status == LUA_ERRSYNTAX){size_t lmsg;const char *msg = lua_tolstring(ls, -1, &lmsg);const char *tp = msg + lmsg - (sizeof(LUA_QL("<eof>")) - 1);if (strstr(msg, LUA_QL("<eof>")) == tp){lua_pop(ls, 1);return 1;}}return 0;}static int _pushline(lua_State *ls, int firstline){char buffer[80];char *b = buffer;size_t l;mpr(firstline ? "> " : ". ", MSGCH_PROMPT);get_input_line(buffer, sizeof(buffer));l = strlen(b);if (l == 0)return (0);if (l > 0 && b[l-1] == '\n') // line ends with newline?b[l-1] = '\0'; // remove itif (firstline && b[0] == '=') // first line starts with `=' ?lua_pushfstring(ls, "return %s", b+1); // change it to `return'elselua_pushstring(ls, b);return 1;}static int _loadline(lua_State *ls){int status;lua_settop(ls, 0);if (!_pushline(ls, 1))return -1; /* no input */// repeat until gets a complete linefor (;;)
mpr("> ", MSGCH_PROMPT);get_input_line(specs, sizeof(specs));std::string s = specs;
status = luaL_loadbuffer(ls, lua_tostring(ls, 1),lua_strlen(ls, 1), "=terp");if (!_incomplete(ls, status))break;if (!_pushline(ls, 0))return -1;lua_pushliteral(ls, "\n"); // add a new line...lua_insert(ls, -2); // ...between the two lineslua_concat(ls, 3); // join them}lua_remove(ls, 1); // remove linereturn status;}static int _docall(lua_State *ls){int status;int base = lua_gettop(ls);status = lua_pcall(ls, 0, LUA_MULTRET, base);if (status != 0)lua_gc(ls, LUA_GCCOLLECT, 0);return (status);}
if (s.empty())return;
static int _report(lua_State *ls, int status){if (status && !lua_isnil(ls, -1)){const char *msg = lua_tostring(ls, -1);if (msg == NULL)msg = "(error object is not a string)";mprf(MSGCH_ERROR, msg);lua_pop(ls, 1);}return status;}