static void dotty(LuaState L) { int status; CharPtr oldprogname = progname; progname = null; while ((status = loadline(L)) != -1) { if (status == 0) { status = docall(L, 0, 0); } report(L, status); if (status == 0 && Lua.LuaGetTop(L) > 0) { /* any result to print? */ Lua.LuaGetGlobal(L, "print"); Lua.LuaInsert(L, 1); if (Lua.LuaPCall(L, Lua.LuaGetTop(L) - 1, 0, 0) != 0) { l_message(progname, Lua.LuaPushFString(L, "error calling " + Lua.LUA_QL("print").ToString() + " (%s)", Lua.LuaToString(L, -1))); } } } Lua.LuaSetTop(L, 0); /* clear stack */ Lua.fputs("\n", Lua.stdout); Lua.fflush(Lua.stdout); progname = oldprogname; }
static int pushline(LuaState L, int firstline) { CharPtr buffer = new char[Lua.LUA_MAXINPUT]; CharPtr b = new CharPtr(buffer); int l; CharPtr prmt = get_prompt(L, firstline); if (!Lua.lua_readline(L, b, prmt)) { return(0); /* no input */ } l = Lua.strlen(b); if (l > 0 && b[l - 1] == '\n') /* line ends with newline? */ { b[l - 1] = '\0'; /* remove it */ } if ((firstline != 0) && (b[0] == '=')) /* first line starts with `=' ? */ { Lua.LuaPushFString(L, "return %s", b + 1); /* change it to `return' */ } else { Lua.LuaPushString(L, b); } Lua.lua_freeline(L, b); return(1); }