bool kgmLuaScript::resl(kgmString fmt, ...) { int args = 0; char* f = fmt.data(); va_list vl; va_start(vl, fmt); while((*f != '\0') && (args < 128)) { switch(*f) { case 's': push((char*)va_arg(vl, char*)); break; case 'i': push((int)va_arg(vl, int)); break; case 'd': push((double)va_arg(vl, double)); break; case 'p': push((void*)va_arg(vl, void*)); break; } f++; args++; } return true; }
void kgmLog::log_(kgmString s) { #ifdef ANDROID LOGI((char*)s); #else printf("%s", (char*)s.data()); #endif }
bool kgmLuaCall(kgmString name, kgmString fmt, ...){ lua_getglobal(lua_main, name.data()); if( !lua_isfunction(lua_main,-1) ) return false; int args = 0; int nres = 0; char* f = fmt.data(); va_list vl; va_start(vl, fmt); while((*f != '\0') && (args < 128)){ switch(*f){ case 's': kgmLuaPush((char*)va_arg(vl, char*)); break; case 'i': kgmLuaPush((int)va_arg(vl, int)); break; case 'd': kgmLuaPush((double)va_arg(vl, double)); break; case 'v': kgmLuaPush((void*)va_arg(vl, void*)); break; } f++; args++; } if(lua_call(lua_main, args, nres)) return false; return true; }
bool kgmLuaScript::args(kgmString fmt, ...) { int args = 0; char* f = fmt.data(); va_list vl; va_start(vl, fmt); s32 largs = lua_gettop(handler); if(largs < 2) m_carg = -1; else m_carg = 1; while((*f != '\0') && (args < 128)) { switch(*f) { case 's': pop((char**)va_arg(vl, char**)); break; case 'i': pop((int*)va_arg(vl, int*)); break; case 'd': pop((double*)va_arg(vl, double*)); break; case 'p': pop((void**)va_arg(vl, void**)); break; } f++; args++; if(largs > 1) m_carg = args + 1; } return true; }
bool kgmLuaSet(kgmString name, void* fn){ lua_register(lua_main, name.data(), (int (*)(lua_State*))fn); return true; }
bool kgmLuaRun(kgmString str){ if(lua_dostring(lua_main, str.data())) return false; return true; }
bool kgmLuaScript::set(kgmString name, FN fn) { lua_register(handler, name.data(), (int (*)(lua_State*)) fn); return true; }