forked from redo/BlockLua
26 lines
700 B
C++
26 lines
700 B
C++
|
|
// Call a Lua function from TS, return true if success - result will be on Lua stack
|
|
bool bll_LuaCall(const char* fname, int argc, const char* argv[]) {
|
|
lua_getglobal(gL, fname);
|
|
for(int i=0; i<argc; i++) {
|
|
lua_pushstring(gL, argv[i]);
|
|
}
|
|
if(bll_pcall(gL, argc, 1)) {
|
|
bll_printError(gL, "call", fname);
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// TS lib function: luacall
|
|
const char* bll_ts_luacall(ADDR obj, int argc, const char* argv[]) {
|
|
if(argc<2) return "";
|
|
|
|
if(!bll_LuaCall(argv[1], argc-2, &argv[2])) { return ""; }
|
|
|
|
char* retbuf = BlReturnBuffer(BLL_ARG_MAX);
|
|
bll_toarg(gL, retbuf, -1, false); // provide returned value to ts
|
|
lua_pop(gL, 1); // pop returned value
|
|
return retbuf;
|
|
}
|