codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
/* gm_preproc - lua preprocessor written by yakahughes on 1/3/2011 updated on 1/5/2011 thanks to chrisaster's advice to unreference ILuaObject*s linux binary thanks to chrisaster */ #define NO_SDK #include <GMLuaModule.h> #include <vfnhook.h> GMOD_MODULE(Init, Shutdown); DEFVFUNC_(RunStringReal, bool, (ILuaInterface* liface, const char* filename, const char* path, const char* lua, bool run, bool showErrors)); bool VFUNC RunStringDetour(ILuaInterface* liface, const char* filename, const char* path, const char* lua, bool run, bool showErrors) { ILuaObject* hookTable = liface->GetGlobal("hook"); ILuaObject* hookCall = NULL; char bl = -1; if (hookTable && hookTable->isTable()) { hookCall = hookTable->GetMember("Call"); if (hookCall && hookCall->isFunction()) { liface->Push(hookCall); liface->Push("Lua_Preprocess"); liface->PushNil(); liface->Push(filename); liface->Push(path); liface->Push(lua); liface->Call(5, 1); ILuaObject* retrn = liface->GetReturn(0); if (retrn && retrn->GetType() == GLua::TYPE_STRING) lua = retrn->GetString(); else if (retrn && retrn->GetType() == GLua::TYPE_BOOL) bl = (char)retrn->GetBool(); } } if (hookTable) hookTable->UnReference(); if (hookCall) hookCall->UnReference(); if (bl != -1) return bl; return RunStringReal(liface, filename, path, lua, run, showErrors); } LUA_FUNCTION(RawRunString) { ILuaInterface* gLua = Lua(); gLua->CheckType(1, GLua::TYPE_STRING); gLua->CheckType(2, GLua::TYPE_STRING); gLua->CheckType(3, GLua::TYPE_STRING); const char* file = gLua->GetString(1); const char* path = gLua->GetString(2); const char* lua = gLua->GetString(3); gLua->Push(RunStringReal(gLua, file, path, lua, true, true)); return 1; } int Init(lua_State* L) { HOOKVFUNC(Lua(), 68, RunStringReal, RunStringDetour); Lua()->SetGlobal("RawRunString", RawRunString); return 0; } int Shutdown(lua_State* L) { UNHOOKVFUNC(Lua(), 68, RunStringReal); return 0; }
Private
[
?
]
Run code
Submit