From e47f6d4651d7c1f64b56b45060c318b7d1afbe21 Mon Sep 17 00:00:00 2001 From: Connor O'Connor Date: Mon, 6 Oct 2025 12:03:51 -0400 Subject: [PATCH] Fix all warnings and errors in C++ --- .clang-format | 14 ++ inc/lua/lauxlib.h | 170 ++++++++-------- inc/lua/lua.h | 428 ++++++++++++++++++---------------------- inc/lua/lua.hpp | 5 +- inc/lua/luaconf.h | 137 ++++++------- inc/lua/luajit.h | 40 ++-- inc/lua/lualib.h | 26 +-- inc/tsfuncs/BlFuncs.cpp | 377 +++++++++++++++++++---------------- inc/tsfuncs/BlFuncs.hpp | 103 ++++++---- inc/tsfuncs/BlHooks.cpp | 272 ++++++++++++------------- inc/tsfuncs/BlHooks.hpp | 173 ++++++++-------- src/bllua4.cpp | 160 ++++++++------- src/luainterp.cpp | 114 ++++++----- src/luainterp.hpp | 16 ++ src/lualibts.cpp | 408 +++++++++++++++++++++++++------------- src/tsliblua.cpp | 47 +++-- src/util/libts-lua.lua | 6 +- 17 files changed, 1373 insertions(+), 1123 deletions(-) create mode 100644 .clang-format create mode 100644 src/luainterp.hpp diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..874b411 --- /dev/null +++ b/.clang-format @@ -0,0 +1,14 @@ +BasedOnStyle: LLVM +SortIncludes: CaseSensitive +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '' + Priority: 1 + - Regex: '' + Priority: 2 + - Regex: '"BlHooks\\.hpp"' + Priority: 3 + - Regex: '"BlFuncs\\.hpp"' + Priority: 4 + - Regex: ".*" + Priority: 5 diff --git a/inc/lua/lauxlib.h b/inc/lua/lauxlib.h index a44f027..d21293e 100644 --- a/inc/lua/lauxlib.h +++ b/inc/lua/lauxlib.h @@ -4,93 +4,88 @@ ** See Copyright Notice in lua.h */ - #ifndef lauxlib_h #define lauxlib_h - #include #include #include "lua.h" - /* extra error code for `luaL_load' */ -#define LUA_ERRFILE (LUA_ERRERR+1) +#define LUA_ERRFILE (LUA_ERRERR + 1) typedef struct luaL_Reg { const char *name; lua_CFunction func; } luaL_Reg; -LUALIB_API void (luaL_openlib) (lua_State *L, const char *libname, - const luaL_Reg *l, int nup); -LUALIB_API void (luaL_register) (lua_State *L, const char *libname, - const luaL_Reg *l); -LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e); -LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e); -LUALIB_API int (luaL_typerror) (lua_State *L, int narg, const char *tname); -LUALIB_API int (luaL_argerror) (lua_State *L, int numarg, const char *extramsg); -LUALIB_API const char *(luaL_checklstring) (lua_State *L, int numArg, - size_t *l); -LUALIB_API const char *(luaL_optlstring) (lua_State *L, int numArg, - const char *def, size_t *l); -LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int numArg); -LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int nArg, lua_Number def); +LUALIB_API void(luaL_openlib)(lua_State *L, const char *libname, + const luaL_Reg *l, int nup); +LUALIB_API void(luaL_register)(lua_State *L, const char *libname, + const luaL_Reg *l); +LUALIB_API int(luaL_getmetafield)(lua_State *L, int obj, const char *e); +LUALIB_API int(luaL_callmeta)(lua_State *L, int obj, const char *e); +LUALIB_API int(luaL_typerror)(lua_State *L, int narg, const char *tname); +LUALIB_API int(luaL_argerror)(lua_State *L, int numarg, const char *extramsg); +LUALIB_API const char *(luaL_checklstring)(lua_State * L, int numArg, + size_t *l); +LUALIB_API const char *(luaL_optlstring)(lua_State * L, int numArg, + const char *def, size_t *l); +LUALIB_API lua_Number(luaL_checknumber)(lua_State *L, int numArg); +LUALIB_API lua_Number(luaL_optnumber)(lua_State *L, int nArg, lua_Number def); -LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int numArg); -LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int nArg, - lua_Integer def); +LUALIB_API lua_Integer(luaL_checkinteger)(lua_State *L, int numArg); +LUALIB_API lua_Integer(luaL_optinteger)(lua_State *L, int nArg, + lua_Integer def); -LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg); -LUALIB_API void (luaL_checktype) (lua_State *L, int narg, int t); -LUALIB_API void (luaL_checkany) (lua_State *L, int narg); +LUALIB_API void(luaL_checkstack)(lua_State *L, int sz, const char *msg); +LUALIB_API void(luaL_checktype)(lua_State *L, int narg, int t); +LUALIB_API void(luaL_checkany)(lua_State *L, int narg); -LUALIB_API int (luaL_newmetatable) (lua_State *L, const char *tname); -LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname); +LUALIB_API int(luaL_newmetatable)(lua_State *L, const char *tname); +LUALIB_API void *(luaL_checkudata)(lua_State * L, int ud, const char *tname); -LUALIB_API void (luaL_where) (lua_State *L, int lvl); -LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...); +LUALIB_API void(luaL_where)(lua_State *L, int lvl); +LUALIB_API int(luaL_error)(lua_State *L, const char *fmt, ...); -LUALIB_API int (luaL_checkoption) (lua_State *L, int narg, const char *def, - const char *const lst[]); +LUALIB_API int(luaL_checkoption)(lua_State *L, int narg, const char *def, + const char *const lst[]); /* pre-defined references */ -#define LUA_NOREF (-2) -#define LUA_REFNIL (-1) +#define LUA_NOREF (-2) +#define LUA_REFNIL (-1) -LUALIB_API int (luaL_ref) (lua_State *L, int t); -LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref); +LUALIB_API int(luaL_ref)(lua_State *L, int t); +LUALIB_API void(luaL_unref)(lua_State *L, int t, int ref); -LUALIB_API int (luaL_loadfile) (lua_State *L, const char *filename); -LUALIB_API int (luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, - const char *name); -LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s); +LUALIB_API int(luaL_loadfile)(lua_State *L, const char *filename); +LUALIB_API int(luaL_loadbuffer)(lua_State *L, const char *buff, size_t sz, + const char *name); +LUALIB_API int(luaL_loadstring)(lua_State *L, const char *s); -LUALIB_API lua_State *(luaL_newstate) (void); +LUALIB_API lua_State *(luaL_newstate)(void); +LUALIB_API const char *(luaL_gsub)(lua_State * L, const char *s, const char *p, + const char *r); -LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p, - const char *r); - -LUALIB_API const char *(luaL_findtable) (lua_State *L, int idx, - const char *fname, int szhint); +LUALIB_API const char *(luaL_findtable)(lua_State * L, int idx, + const char *fname, int szhint); /* From Lua 5.2. */ LUALIB_API int luaL_fileresult(lua_State *L, int stat, const char *fname); LUALIB_API int luaL_execresult(lua_State *L, int stat); -LUALIB_API int (luaL_loadfilex) (lua_State *L, const char *filename, - const char *mode); -LUALIB_API int (luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, - const char *name, const char *mode); -LUALIB_API void luaL_traceback (lua_State *L, lua_State *L1, const char *msg, - int level); -LUALIB_API void (luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup); -LUALIB_API void (luaL_pushmodule) (lua_State *L, const char *modname, - int sizehint); -LUALIB_API void *(luaL_testudata) (lua_State *L, int ud, const char *tname); -LUALIB_API void (luaL_setmetatable) (lua_State *L, const char *tname); - +LUALIB_API int(luaL_loadfilex)(lua_State *L, const char *filename, + const char *mode); +LUALIB_API int(luaL_loadbufferx)(lua_State *L, const char *buff, size_t sz, + const char *name, const char *mode); +LUALIB_API void luaL_traceback(lua_State *L, lua_State *L1, const char *msg, + int level); +LUALIB_API void(luaL_setfuncs)(lua_State *L, const luaL_Reg *l, int nup); +LUALIB_API void(luaL_pushmodule)(lua_State *L, const char *modname, + int sizehint); +LUALIB_API void *(luaL_testudata)(lua_State * L, int ud, const char *tname); +LUALIB_API void(luaL_setmetatable)(lua_State *L, const char *tname); /* ** =============================================================== @@ -98,31 +93,31 @@ LUALIB_API void (luaL_setmetatable) (lua_State *L, const char *tname); ** =============================================================== */ -#define luaL_argcheck(L, cond,numarg,extramsg) \ - ((void)((cond) || luaL_argerror(L, (numarg), (extramsg)))) -#define luaL_checkstring(L,n) (luaL_checklstring(L, (n), NULL)) -#define luaL_optstring(L,n,d) (luaL_optlstring(L, (n), (d), NULL)) -#define luaL_checkint(L,n) ((int)luaL_checkinteger(L, (n))) -#define luaL_optint(L,n,d) ((int)luaL_optinteger(L, (n), (d))) -#define luaL_checklong(L,n) ((long)luaL_checkinteger(L, (n))) -#define luaL_optlong(L,n,d) ((long)luaL_optinteger(L, (n), (d))) +#define luaL_argcheck(L, cond, numarg, extramsg) \ + ((void)((cond) || luaL_argerror(L, (numarg), (extramsg)))) +#define luaL_checkstring(L, n) (luaL_checklstring(L, (n), NULL)) +#define luaL_optstring(L, n, d) (luaL_optlstring(L, (n), (d), NULL)) +#define luaL_checkint(L, n) ((int)luaL_checkinteger(L, (n))) +#define luaL_optint(L, n, d) ((int)luaL_optinteger(L, (n), (d))) +#define luaL_checklong(L, n) ((long)luaL_checkinteger(L, (n))) +#define luaL_optlong(L, n, d) ((long)luaL_optinteger(L, (n), (d))) -#define luaL_typename(L,i) lua_typename(L, lua_type(L,(i))) +#define luaL_typename(L, i) lua_typename(L, lua_type(L, (i))) -#define luaL_dofile(L, fn) \ - (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0)) +#define luaL_dofile(L, fn) \ + (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0)) -#define luaL_dostring(L, s) \ - (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0)) +#define luaL_dostring(L, s) \ + (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0)) -#define luaL_getmetatable(L,n) (lua_getfield(L, LUA_REGISTRYINDEX, (n))) +#define luaL_getmetatable(L, n) (lua_getfield(L, LUA_REGISTRYINDEX, (n))) -#define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n))) +#define luaL_opt(L, f, n, d) (lua_isnoneornil(L, (n)) ? (d) : f(L, (n))) /* From Lua 5.2. */ -#define luaL_newlibtable(L, l) \ - lua_createtable(L, 0, sizeof(l)/sizeof((l)[0]) - 1) -#define luaL_newlib(L, l) (luaL_newlibtable(L, l), luaL_setfuncs(L, l, 0)) +#define luaL_newlibtable(L, l) \ + lua_createtable(L, 0, sizeof(l) / sizeof((l)[0]) - 1) +#define luaL_newlib(L, l) (luaL_newlibtable(L, l), luaL_setfuncs(L, l, 0)) /* ** {====================================================== @@ -130,31 +125,28 @@ LUALIB_API void (luaL_setmetatable) (lua_State *L, const char *tname); ** ======================================================= */ - - typedef struct luaL_Buffer { - char *p; /* current position in buffer */ - int lvl; /* number of strings in the stack (level) */ + char *p; /* current position in buffer */ + int lvl; /* number of strings in the stack (level) */ lua_State *L; char buffer[LUAL_BUFFERSIZE]; } luaL_Buffer; -#define luaL_addchar(B,c) \ - ((void)((B)->p < ((B)->buffer+LUAL_BUFFERSIZE) || luaL_prepbuffer(B)), \ +#define luaL_addchar(B, c) \ + ((void)((B)->p < ((B)->buffer + LUAL_BUFFERSIZE) || luaL_prepbuffer(B)), \ (*(B)->p++ = (char)(c))) /* compatibility only */ -#define luaL_putchar(B,c) luaL_addchar(B,c) +#define luaL_putchar(B, c) luaL_addchar(B, c) -#define luaL_addsize(B,n) ((B)->p += (n)) - -LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B); -LUALIB_API char *(luaL_prepbuffer) (luaL_Buffer *B); -LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l); -LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s); -LUALIB_API void (luaL_addvalue) (luaL_Buffer *B); -LUALIB_API void (luaL_pushresult) (luaL_Buffer *B); +#define luaL_addsize(B, n) ((B)->p += (n)) +LUALIB_API void(luaL_buffinit)(lua_State *L, luaL_Buffer *B); +LUALIB_API char *(luaL_prepbuffer)(luaL_Buffer * B); +LUALIB_API void(luaL_addlstring)(luaL_Buffer *B, const char *s, size_t l); +LUALIB_API void(luaL_addstring)(luaL_Buffer *B, const char *s); +LUALIB_API void(luaL_addvalue)(luaL_Buffer *B); +LUALIB_API void(luaL_pushresult)(luaL_Buffer *B); /* }====================================================== */ diff --git a/inc/lua/lua.h b/inc/lua/lua.h index 850bd79..eb61e5f 100644 --- a/inc/lua/lua.h +++ b/inc/lua/lua.h @@ -5,88 +5,75 @@ ** See Copyright Notice at the end of this file */ - #ifndef lua_h #define lua_h #include #include - #include "luaconf.h" - -#define LUA_VERSION "Lua 5.1" -#define LUA_RELEASE "Lua 5.1.4" -#define LUA_VERSION_NUM 501 -#define LUA_COPYRIGHT "Copyright (C) 1994-2008 Lua.org, PUC-Rio" -#define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo & W. Celes" - +#define LUA_VERSION "Lua 5.1" +#define LUA_RELEASE "Lua 5.1.4" +#define LUA_VERSION_NUM 501 +#define LUA_COPYRIGHT "Copyright (C) 1994-2008 Lua.org, PUC-Rio" +#define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo & W. Celes" /* mark for precompiled code (`Lua') */ -#define LUA_SIGNATURE "\033Lua" +#define LUA_SIGNATURE "\033Lua" /* option for multiple returns in `lua_pcall' and `lua_call' */ -#define LUA_MULTRET (-1) - +#define LUA_MULTRET (-1) /* ** pseudo-indices */ -#define LUA_REGISTRYINDEX (-10000) -#define LUA_ENVIRONINDEX (-10001) -#define LUA_GLOBALSINDEX (-10002) -#define lua_upvalueindex(i) (LUA_GLOBALSINDEX-(i)) - +#define LUA_REGISTRYINDEX (-10000) +#define LUA_ENVIRONINDEX (-10001) +#define LUA_GLOBALSINDEX (-10002) +#define lua_upvalueindex(i) (LUA_GLOBALSINDEX - (i)) /* thread status */ -#define LUA_OK 0 -#define LUA_YIELD 1 -#define LUA_ERRRUN 2 -#define LUA_ERRSYNTAX 3 -#define LUA_ERRMEM 4 -#define LUA_ERRERR 5 - +#define LUA_OK 0 +#define LUA_YIELD 1 +#define LUA_ERRRUN 2 +#define LUA_ERRSYNTAX 3 +#define LUA_ERRMEM 4 +#define LUA_ERRERR 5 typedef struct lua_State lua_State; -typedef int (*lua_CFunction) (lua_State *L); - +typedef int (*lua_CFunction)(lua_State *L); /* ** functions that read/write blocks when loading/dumping Lua chunks */ -typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz); - -typedef int (*lua_Writer) (lua_State *L, const void* p, size_t sz, void* ud); +typedef const char *(*lua_Reader)(lua_State *L, void *ud, size_t *sz); +typedef int (*lua_Writer)(lua_State *L, const void *p, size_t sz, void *ud); /* ** prototype for memory-allocation functions */ -typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize); - +typedef void *(*lua_Alloc)(void *ud, void *ptr, size_t osize, size_t nsize); /* ** basic types */ -#define LUA_TNONE (-1) - -#define LUA_TNIL 0 -#define LUA_TBOOLEAN 1 -#define LUA_TLIGHTUSERDATA 2 -#define LUA_TNUMBER 3 -#define LUA_TSTRING 4 -#define LUA_TTABLE 5 -#define LUA_TFUNCTION 6 -#define LUA_TUSERDATA 7 -#define LUA_TTHREAD 8 - +#define LUA_TNONE (-1) +#define LUA_TNIL 0 +#define LUA_TBOOLEAN 1 +#define LUA_TLIGHTUSERDATA 2 +#define LUA_TNUMBER 3 +#define LUA_TSTRING 4 +#define LUA_TTABLE 5 +#define LUA_TFUNCTION 6 +#define LUA_TUSERDATA 7 +#define LUA_TTHREAD 8 /* minimum Lua stack available to a C function */ -#define LUA_MINSTACK 20 - +#define LUA_MINSTACK 20 /* ** generic extra include file @@ -95,157 +82,143 @@ typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize); #include LUA_USER_H #endif - /* type of numbers in Lua */ typedef LUA_NUMBER lua_Number; - /* type for integer functions */ typedef LUA_INTEGER lua_Integer; - - /* ** state manipulation */ -LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud); -LUA_API void (lua_close) (lua_State *L); -LUA_API lua_State *(lua_newthread) (lua_State *L); - -LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf); +LUA_API lua_State *(lua_newstate)(lua_Alloc f, void *ud); +LUA_API void(lua_close)(lua_State *L); +LUA_API lua_State *(lua_newthread)(lua_State * L); +LUA_API lua_CFunction(lua_atpanic)(lua_State *L, lua_CFunction panicf); /* ** basic stack manipulation */ -LUA_API int (lua_gettop) (lua_State *L); -LUA_API void (lua_settop) (lua_State *L, int idx); -LUA_API void (lua_pushvalue) (lua_State *L, int idx); -LUA_API void (lua_remove) (lua_State *L, int idx); -LUA_API void (lua_insert) (lua_State *L, int idx); -LUA_API void (lua_replace) (lua_State *L, int idx); -LUA_API int (lua_checkstack) (lua_State *L, int sz); - -LUA_API void (lua_xmove) (lua_State *from, lua_State *to, int n); +LUA_API int(lua_gettop)(lua_State *L); +LUA_API void(lua_settop)(lua_State *L, int idx); +LUA_API void(lua_pushvalue)(lua_State *L, int idx); +LUA_API void(lua_remove)(lua_State *L, int idx); +LUA_API void(lua_insert)(lua_State *L, int idx); +LUA_API void(lua_replace)(lua_State *L, int idx); +LUA_API int(lua_checkstack)(lua_State *L, int sz); +LUA_API void(lua_xmove)(lua_State *from, lua_State *to, int n); /* ** access functions (stack -> C) */ -LUA_API int (lua_isnumber) (lua_State *L, int idx); -LUA_API int (lua_isstring) (lua_State *L, int idx); -LUA_API int (lua_iscfunction) (lua_State *L, int idx); -LUA_API int (lua_isuserdata) (lua_State *L, int idx); -LUA_API int (lua_type) (lua_State *L, int idx); -LUA_API const char *(lua_typename) (lua_State *L, int tp); +LUA_API int(lua_isnumber)(lua_State *L, int idx); +LUA_API int(lua_isstring)(lua_State *L, int idx); +LUA_API int(lua_iscfunction)(lua_State *L, int idx); +LUA_API int(lua_isuserdata)(lua_State *L, int idx); +LUA_API int(lua_type)(lua_State *L, int idx); +LUA_API const char *(lua_typename)(lua_State * L, int tp); -LUA_API int (lua_equal) (lua_State *L, int idx1, int idx2); -LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2); -LUA_API int (lua_lessthan) (lua_State *L, int idx1, int idx2); - -LUA_API lua_Number (lua_tonumber) (lua_State *L, int idx); -LUA_API lua_Integer (lua_tointeger) (lua_State *L, int idx); -LUA_API int (lua_toboolean) (lua_State *L, int idx); -LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len); -LUA_API size_t (lua_objlen) (lua_State *L, int idx); -LUA_API lua_CFunction (lua_tocfunction) (lua_State *L, int idx); -LUA_API void *(lua_touserdata) (lua_State *L, int idx); -LUA_API lua_State *(lua_tothread) (lua_State *L, int idx); -LUA_API const void *(lua_topointer) (lua_State *L, int idx); +LUA_API int(lua_equal)(lua_State *L, int idx1, int idx2); +LUA_API int(lua_rawequal)(lua_State *L, int idx1, int idx2); +LUA_API int(lua_lessthan)(lua_State *L, int idx1, int idx2); +LUA_API lua_Number(lua_tonumber)(lua_State *L, int idx); +LUA_API lua_Integer(lua_tointeger)(lua_State *L, int idx); +LUA_API int(lua_toboolean)(lua_State *L, int idx); +LUA_API const char *(lua_tolstring)(lua_State * L, int idx, size_t *len); +LUA_API size_t(lua_objlen)(lua_State *L, int idx); +LUA_API lua_CFunction(lua_tocfunction)(lua_State *L, int idx); +LUA_API void *(lua_touserdata)(lua_State * L, int idx); +LUA_API lua_State *(lua_tothread)(lua_State * L, int idx); +LUA_API const void *(lua_topointer)(lua_State * L, int idx); /* ** push functions (C -> stack) */ -LUA_API void (lua_pushnil) (lua_State *L); -LUA_API void (lua_pushnumber) (lua_State *L, lua_Number n); -LUA_API void (lua_pushinteger) (lua_State *L, lua_Integer n); -LUA_API void (lua_pushlstring) (lua_State *L, const char *s, size_t l); -LUA_API void (lua_pushstring) (lua_State *L, const char *s); -LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt, - va_list argp); -LUA_API const char *(lua_pushfstring) (lua_State *L, const char *fmt, ...); -LUA_API void (lua_pushcclosure) (lua_State *L, lua_CFunction fn, int n); -LUA_API void (lua_pushboolean) (lua_State *L, int b); -LUA_API void (lua_pushlightuserdata) (lua_State *L, void *p); -LUA_API int (lua_pushthread) (lua_State *L); - +LUA_API void(lua_pushnil)(lua_State *L); +LUA_API void(lua_pushnumber)(lua_State *L, lua_Number n); +LUA_API void(lua_pushinteger)(lua_State *L, lua_Integer n); +LUA_API void(lua_pushlstring)(lua_State *L, const char *s, size_t l); +LUA_API void(lua_pushstring)(lua_State *L, const char *s); +LUA_API const char *(lua_pushvfstring)(lua_State * L, const char *fmt, + va_list argp); +LUA_API const char *(lua_pushfstring)(lua_State * L, const char *fmt, ...); +LUA_API void(lua_pushcclosure)(lua_State *L, lua_CFunction fn, int n); +LUA_API void(lua_pushboolean)(lua_State *L, int b); +LUA_API void(lua_pushlightuserdata)(lua_State *L, void *p); +LUA_API int(lua_pushthread)(lua_State *L); /* ** get functions (Lua -> stack) */ -LUA_API void (lua_gettable) (lua_State *L, int idx); -LUA_API void (lua_getfield) (lua_State *L, int idx, const char *k); -LUA_API void (lua_rawget) (lua_State *L, int idx); -LUA_API void (lua_rawgeti) (lua_State *L, int idx, int n); -LUA_API void (lua_createtable) (lua_State *L, int narr, int nrec); -LUA_API void *(lua_newuserdata) (lua_State *L, size_t sz); -LUA_API int (lua_getmetatable) (lua_State *L, int objindex); -LUA_API void (lua_getfenv) (lua_State *L, int idx); - +LUA_API void(lua_gettable)(lua_State *L, int idx); +LUA_API void(lua_getfield)(lua_State *L, int idx, const char *k); +LUA_API void(lua_rawget)(lua_State *L, int idx); +LUA_API void(lua_rawgeti)(lua_State *L, int idx, int n); +LUA_API void(lua_createtable)(lua_State *L, int narr, int nrec); +LUA_API void *(lua_newuserdata)(lua_State * L, size_t sz); +LUA_API int(lua_getmetatable)(lua_State *L, int objindex); +LUA_API void(lua_getfenv)(lua_State *L, int idx); /* ** set functions (stack -> Lua) */ -LUA_API void (lua_settable) (lua_State *L, int idx); -LUA_API void (lua_setfield) (lua_State *L, int idx, const char *k); -LUA_API void (lua_rawset) (lua_State *L, int idx); -LUA_API void (lua_rawseti) (lua_State *L, int idx, int n); -LUA_API int (lua_setmetatable) (lua_State *L, int objindex); -LUA_API int (lua_setfenv) (lua_State *L, int idx); - +LUA_API void(lua_settable)(lua_State *L, int idx); +LUA_API void(lua_setfield)(lua_State *L, int idx, const char *k); +LUA_API void(lua_rawset)(lua_State *L, int idx); +LUA_API void(lua_rawseti)(lua_State *L, int idx, int n); +LUA_API int(lua_setmetatable)(lua_State *L, int objindex); +LUA_API int(lua_setfenv)(lua_State *L, int idx); /* ** `load' and `call' functions (load and run Lua code) */ -LUA_API void (lua_call) (lua_State *L, int nargs, int nresults); -LUA_API int (lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc); -LUA_API int (lua_cpcall) (lua_State *L, lua_CFunction func, void *ud); -LUA_API int (lua_load) (lua_State *L, lua_Reader reader, void *dt, - const char *chunkname); - -LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data); +LUA_API void(lua_call)(lua_State *L, int nargs, int nresults); +LUA_API int(lua_pcall)(lua_State *L, int nargs, int nresults, int errfunc); +LUA_API int(lua_cpcall)(lua_State *L, lua_CFunction func, void *ud); +LUA_API int(lua_load)(lua_State *L, lua_Reader reader, void *dt, + const char *chunkname); +LUA_API int(lua_dump)(lua_State *L, lua_Writer writer, void *data); /* ** coroutine functions */ -LUA_API int (lua_yield) (lua_State *L, int nresults); -LUA_API int (lua_resume) (lua_State *L, int narg); -LUA_API int (lua_status) (lua_State *L); +LUA_API int(lua_yield)(lua_State *L, int nresults); +LUA_API int(lua_resume)(lua_State *L, int narg); +LUA_API int(lua_status)(lua_State *L); /* ** garbage-collection function and options */ -#define LUA_GCSTOP 0 -#define LUA_GCRESTART 1 -#define LUA_GCCOLLECT 2 -#define LUA_GCCOUNT 3 -#define LUA_GCCOUNTB 4 -#define LUA_GCSTEP 5 -#define LUA_GCSETPAUSE 6 -#define LUA_GCSETSTEPMUL 7 -#define LUA_GCISRUNNING 9 - -LUA_API int (lua_gc) (lua_State *L, int what, int data); +#define LUA_GCSTOP 0 +#define LUA_GCRESTART 1 +#define LUA_GCCOLLECT 2 +#define LUA_GCCOUNT 3 +#define LUA_GCCOUNTB 4 +#define LUA_GCSTEP 5 +#define LUA_GCSETPAUSE 6 +#define LUA_GCSETSTEPMUL 7 +#define LUA_GCISRUNNING 9 +LUA_API int(lua_gc)(lua_State *L, int what, int data); /* ** miscellaneous functions */ -LUA_API int (lua_error) (lua_State *L); +LUA_API int(lua_error)(lua_State *L); -LUA_API int (lua_next) (lua_State *L, int idx); - -LUA_API void (lua_concat) (lua_State *L, int n); - -LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud); -LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud); +LUA_API int(lua_next)(lua_State *L, int idx); +LUA_API void(lua_concat)(lua_State *L, int n); +LUA_API lua_Alloc(lua_getallocf)(lua_State *L, void **ud); +LUA_API void lua_setallocf(lua_State *L, lua_Alloc f, void *ud); /* ** =============================================================== @@ -253,52 +226,48 @@ LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud); ** =============================================================== */ -#define lua_pop(L,n) lua_settop(L, -(n)-1) +#define lua_pop(L, n) lua_settop(L, -(n) - 1) -#define lua_newtable(L) lua_createtable(L, 0, 0) +#define lua_newtable(L) lua_createtable(L, 0, 0) -#define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n))) +#define lua_register(L, n, f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n))) -#define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0) +#define lua_pushcfunction(L, f) lua_pushcclosure(L, (f), 0) -#define lua_strlen(L,i) lua_objlen(L, (i)) +#define lua_strlen(L, i) lua_objlen(L, (i)) -#define lua_isfunction(L,n) (lua_type(L, (n)) == LUA_TFUNCTION) -#define lua_istable(L,n) (lua_type(L, (n)) == LUA_TTABLE) -#define lua_islightuserdata(L,n) (lua_type(L, (n)) == LUA_TLIGHTUSERDATA) -#define lua_isnil(L,n) (lua_type(L, (n)) == LUA_TNIL) -#define lua_isboolean(L,n) (lua_type(L, (n)) == LUA_TBOOLEAN) -#define lua_isthread(L,n) (lua_type(L, (n)) == LUA_TTHREAD) -#define lua_isnone(L,n) (lua_type(L, (n)) == LUA_TNONE) -#define lua_isnoneornil(L, n) (lua_type(L, (n)) <= 0) +#define lua_isfunction(L, n) (lua_type(L, (n)) == LUA_TFUNCTION) +#define lua_istable(L, n) (lua_type(L, (n)) == LUA_TTABLE) +#define lua_islightuserdata(L, n) (lua_type(L, (n)) == LUA_TLIGHTUSERDATA) +#define lua_isnil(L, n) (lua_type(L, (n)) == LUA_TNIL) +#define lua_isboolean(L, n) (lua_type(L, (n)) == LUA_TBOOLEAN) +#define lua_isthread(L, n) (lua_type(L, (n)) == LUA_TTHREAD) +#define lua_isnone(L, n) (lua_type(L, (n)) == LUA_TNONE) +#define lua_isnoneornil(L, n) (lua_type(L, (n)) <= 0) -#define lua_pushliteral(L, s) \ - lua_pushlstring(L, "" s, (sizeof(s)/sizeof(char))-1) - -#define lua_setglobal(L,s) lua_setfield(L, LUA_GLOBALSINDEX, (s)) -#define lua_getglobal(L,s) lua_getfield(L, LUA_GLOBALSINDEX, (s)) - -#define lua_tostring(L,i) lua_tolstring(L, (i), NULL) +#define lua_pushliteral(L, s) \ + lua_pushlstring(L, "" s, (sizeof(s) / sizeof(char)) - 1) +#define lua_setglobal(L, s) lua_setfield(L, LUA_GLOBALSINDEX, (s)) +#define lua_getglobal(L, s) lua_getfield(L, LUA_GLOBALSINDEX, (s)) +#define lua_tostring(L, i) lua_tolstring(L, (i), NULL) /* ** compatibility macros and functions */ -#define lua_open() luaL_newstate() +#define lua_open() luaL_newstate() -#define lua_getregistry(L) lua_pushvalue(L, LUA_REGISTRYINDEX) +#define lua_getregistry(L) lua_pushvalue(L, LUA_REGISTRYINDEX) -#define lua_getgccount(L) lua_gc(L, LUA_GCCOUNT, 0) - -#define lua_Chunkreader lua_Reader -#define lua_Chunkwriter lua_Writer +#define lua_getgccount(L) lua_gc(L, LUA_GCCOUNT, 0) +#define lua_Chunkreader lua_Reader +#define lua_Chunkwriter lua_Writer /* hack */ -LUA_API void lua_setlevel (lua_State *from, lua_State *to); - +LUA_API void lua_setlevel(lua_State *from, lua_State *to); /* ** {====================================================================== @@ -306,97 +275,90 @@ LUA_API void lua_setlevel (lua_State *from, lua_State *to); ** ======================================================================= */ - /* ** Event codes */ -#define LUA_HOOKCALL 0 -#define LUA_HOOKRET 1 -#define LUA_HOOKLINE 2 -#define LUA_HOOKCOUNT 3 +#define LUA_HOOKCALL 0 +#define LUA_HOOKRET 1 +#define LUA_HOOKLINE 2 +#define LUA_HOOKCOUNT 3 #define LUA_HOOKTAILRET 4 - /* ** Event masks */ -#define LUA_MASKCALL (1 << LUA_HOOKCALL) -#define LUA_MASKRET (1 << LUA_HOOKRET) -#define LUA_MASKLINE (1 << LUA_HOOKLINE) -#define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT) - -typedef struct lua_Debug lua_Debug; /* activation record */ +#define LUA_MASKCALL (1 << LUA_HOOKCALL) +#define LUA_MASKRET (1 << LUA_HOOKRET) +#define LUA_MASKLINE (1 << LUA_HOOKLINE) +#define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT) +typedef struct lua_Debug lua_Debug; /* activation record */ /* Functions to be called by the debuger in specific events */ -typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar); +typedef void (*lua_Hook)(lua_State *L, lua_Debug *ar); - -LUA_API int lua_getstack (lua_State *L, int level, lua_Debug *ar); -LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar); -LUA_API const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n); -LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n); -LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n); -LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n); -LUA_API int lua_sethook (lua_State *L, lua_Hook func, int mask, int count); -LUA_API lua_Hook lua_gethook (lua_State *L); -LUA_API int lua_gethookmask (lua_State *L); -LUA_API int lua_gethookcount (lua_State *L); +LUA_API int lua_getstack(lua_State *L, int level, lua_Debug *ar); +LUA_API int lua_getinfo(lua_State *L, const char *what, lua_Debug *ar); +LUA_API const char *lua_getlocal(lua_State *L, const lua_Debug *ar, int n); +LUA_API const char *lua_setlocal(lua_State *L, const lua_Debug *ar, int n); +LUA_API const char *lua_getupvalue(lua_State *L, int funcindex, int n); +LUA_API const char *lua_setupvalue(lua_State *L, int funcindex, int n); +LUA_API int lua_sethook(lua_State *L, lua_Hook func, int mask, int count); +LUA_API lua_Hook lua_gethook(lua_State *L); +LUA_API int lua_gethookmask(lua_State *L); +LUA_API int lua_gethookcount(lua_State *L); /* From Lua 5.2. */ -LUA_API void *lua_upvalueid (lua_State *L, int idx, int n); -LUA_API void lua_upvaluejoin (lua_State *L, int idx1, int n1, int idx2, int n2); -LUA_API int lua_loadx (lua_State *L, lua_Reader reader, void *dt, - const char *chunkname, const char *mode); -LUA_API const lua_Number *lua_version (lua_State *L); -LUA_API void lua_copy (lua_State *L, int fromidx, int toidx); -LUA_API lua_Number lua_tonumberx (lua_State *L, int idx, int *isnum); -LUA_API lua_Integer lua_tointegerx (lua_State *L, int idx, int *isnum); +LUA_API void *lua_upvalueid(lua_State *L, int idx, int n); +LUA_API void lua_upvaluejoin(lua_State *L, int idx1, int n1, int idx2, int n2); +LUA_API int lua_loadx(lua_State *L, lua_Reader reader, void *dt, + const char *chunkname, const char *mode); +LUA_API const lua_Number *lua_version(lua_State *L); +LUA_API void lua_copy(lua_State *L, int fromidx, int toidx); +LUA_API lua_Number lua_tonumberx(lua_State *L, int idx, int *isnum); +LUA_API lua_Integer lua_tointegerx(lua_State *L, int idx, int *isnum); /* From Lua 5.3. */ -LUA_API int lua_isyieldable (lua_State *L); - +LUA_API int lua_isyieldable(lua_State *L); struct lua_Debug { int event; - const char *name; /* (n) */ - const char *namewhat; /* (n) `global', `local', `field', `method' */ - const char *what; /* (S) `Lua', `C', `main', `tail' */ - const char *source; /* (S) */ - int currentline; /* (l) */ - int nups; /* (u) number of upvalues */ - int linedefined; /* (S) */ - int lastlinedefined; /* (S) */ + const char *name; /* (n) */ + const char *namewhat; /* (n) `global', `local', `field', `method' */ + const char *what; /* (S) `Lua', `C', `main', `tail' */ + const char *source; /* (S) */ + int currentline; /* (l) */ + int nups; /* (u) number of upvalues */ + int linedefined; /* (S) */ + int lastlinedefined; /* (S) */ char short_src[LUA_IDSIZE]; /* (S) */ /* private part */ - int i_ci; /* active function */ + int i_ci; /* active function */ }; /* }====================================================================== */ - /****************************************************************************** -* Copyright (C) 1994-2008 Lua.org, PUC-Rio. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining -* a copy of this software and associated documentation files (the -* "Software"), to deal in the Software without restriction, including -* without limitation the rights to use, copy, modify, merge, publish, -* distribute, sublicense, and/or sell copies of the Software, and to -* permit persons to whom the Software is furnished to do so, subject to -* the following conditions: -* -* The above copyright notice and this permission notice shall be -* included in all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -******************************************************************************/ - + * Copyright (C) 1994-2008 Lua.org, PUC-Rio. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ******************************************************************************/ #endif diff --git a/inc/lua/lua.hpp b/inc/lua/lua.hpp index 07e9002..d16a012 100644 --- a/inc/lua/lua.hpp +++ b/inc/lua/lua.hpp @@ -1,9 +1,8 @@ // C++ wrapper for LuaJIT header files. extern "C" { -#include "lua.h" #include "lauxlib.h" -#include "lualib.h" +#include "lua.h" #include "luajit.h" +#include "lualib.h" } - diff --git a/inc/lua/luaconf.h b/inc/lua/luaconf.h index c2d29d9..64a789a 100644 --- a/inc/lua/luaconf.h +++ b/inc/lua/luaconf.h @@ -18,135 +18,140 @@ ** In Windows, any exclamation mark ('!') in the path is replaced by the ** path of the directory of the executable file of the current process. */ -#define LUA_LDIR "!\\lua\\" -#define LUA_CDIR "!\\" -#define LUA_PATH_DEFAULT \ - ".\\?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" -#define LUA_CPATH_DEFAULT \ - ".\\?.dll;" LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll" +#define LUA_LDIR "!\\lua\\" +#define LUA_CDIR "!\\" +#define LUA_PATH_DEFAULT ".\\?.lua;" LUA_LDIR "?.lua;" LUA_LDIR "?\\init.lua;" +#define LUA_CPATH_DEFAULT ".\\?.dll;" LUA_CDIR "?.dll;" LUA_CDIR "loadall.dll" #else /* ** Note to distribution maintainers: do NOT patch the following lines! ** Please read ../doc/install.html#distro and pass PREFIX=/usr instead. */ #ifndef LUA_MULTILIB -#define LUA_MULTILIB "lib" +#define LUA_MULTILIB "lib" #endif #ifndef LUA_LMULTILIB -#define LUA_LMULTILIB "lib" +#define LUA_LMULTILIB "lib" #endif -#define LUA_LROOT "/usr/local" -#define LUA_LUADIR "/lua/5.1/" -#define LUA_LJDIR "/luajit-2.1.0-beta3/" +#define LUA_LROOT "/usr/local" +#define LUA_LUADIR "/lua/5.1/" +#define LUA_LJDIR "/luajit-2.1.0-beta3/" #ifdef LUA_ROOT -#define LUA_JROOT LUA_ROOT -#define LUA_RLDIR LUA_ROOT "/share" LUA_LUADIR -#define LUA_RCDIR LUA_ROOT "/" LUA_MULTILIB LUA_LUADIR -#define LUA_RLPATH ";" LUA_RLDIR "?.lua;" LUA_RLDIR "?/init.lua" -#define LUA_RCPATH ";" LUA_RCDIR "?.so" +#define LUA_JROOT LUA_ROOT +#define LUA_RLDIR LUA_ROOT "/share" LUA_LUADIR +#define LUA_RCDIR LUA_ROOT "/" LUA_MULTILIB LUA_LUADIR +#define LUA_RLPATH ";" LUA_RLDIR "?.lua;" LUA_RLDIR "?/init.lua" +#define LUA_RCPATH ";" LUA_RCDIR "?.so" #else -#define LUA_JROOT LUA_LROOT +#define LUA_JROOT LUA_LROOT #define LUA_RLPATH #define LUA_RCPATH #endif -#define LUA_JPATH ";" LUA_JROOT "/share" LUA_LJDIR "?.lua" -#define LUA_LLDIR LUA_LROOT "/share" LUA_LUADIR -#define LUA_LCDIR LUA_LROOT "/" LUA_LMULTILIB LUA_LUADIR -#define LUA_LLPATH ";" LUA_LLDIR "?.lua;" LUA_LLDIR "?/init.lua" -#define LUA_LCPATH1 ";" LUA_LCDIR "?.so" -#define LUA_LCPATH2 ";" LUA_LCDIR "loadall.so" +#define LUA_JPATH ";" LUA_JROOT "/share" LUA_LJDIR "?.lua" +#define LUA_LLDIR LUA_LROOT "/share" LUA_LUADIR +#define LUA_LCDIR LUA_LROOT "/" LUA_LMULTILIB LUA_LUADIR +#define LUA_LLPATH ";" LUA_LLDIR "?.lua;" LUA_LLDIR "?/init.lua" +#define LUA_LCPATH1 ";" LUA_LCDIR "?.so" +#define LUA_LCPATH2 ";" LUA_LCDIR "loadall.so" -#define LUA_PATH_DEFAULT "./?.lua" LUA_JPATH LUA_LLPATH LUA_RLPATH -#define LUA_CPATH_DEFAULT "./?.so" LUA_LCPATH1 LUA_RCPATH LUA_LCPATH2 +#define LUA_PATH_DEFAULT "./?.lua" LUA_JPATH LUA_LLPATH LUA_RLPATH +#define LUA_CPATH_DEFAULT "./?.so" LUA_LCPATH1 LUA_RCPATH LUA_LCPATH2 #endif /* Environment variable names for path overrides and initialization code. */ -#define LUA_PATH "LUA_PATH" -#define LUA_CPATH "LUA_CPATH" -#define LUA_INIT "LUA_INIT" +#define LUA_PATH "LUA_PATH" +#define LUA_CPATH "LUA_CPATH" +#define LUA_INIT "LUA_INIT" /* Special file system characters. */ #if defined(_WIN32) -#define LUA_DIRSEP "\\" +#define LUA_DIRSEP "\\" #else -#define LUA_DIRSEP "/" +#define LUA_DIRSEP "/" #endif -#define LUA_PATHSEP ";" -#define LUA_PATH_MARK "?" -#define LUA_EXECDIR "!" -#define LUA_IGMARK "-" -#define LUA_PATH_CONFIG \ - LUA_DIRSEP "\n" LUA_PATHSEP "\n" LUA_PATH_MARK "\n" \ - LUA_EXECDIR "\n" LUA_IGMARK "\n" +#define LUA_PATHSEP ";" +#define LUA_PATH_MARK "?" +#define LUA_EXECDIR "!" +#define LUA_IGMARK "-" +#define LUA_PATH_CONFIG \ + LUA_DIRSEP "\n" LUA_PATHSEP "\n" LUA_PATH_MARK "\n" LUA_EXECDIR \ + "\n" LUA_IGMARK "\n" /* Quoting in error messages. */ -#define LUA_QL(x) "'" x "'" -#define LUA_QS LUA_QL("%s") +#define LUA_QL(x) "'" x "'" +#define LUA_QS LUA_QL("%s") /* Various tunables. */ -#define LUAI_MAXSTACK 65500 /* Max. # of stack slots for a thread (<64K). */ -#define LUAI_MAXCSTACK 8000 /* Max. # of stack slots for a C func (<10K). */ -#define LUAI_GCPAUSE 200 /* Pause GC until memory is at 200%. */ -#define LUAI_GCMUL 200 /* Run GC at 200% of allocation speed. */ -#define LUA_MAXCAPTURES 32 /* Max. pattern captures. */ +#define LUAI_MAXSTACK 65500 /* Max. # of stack slots for a thread (<64K). */ +#define LUAI_MAXCSTACK 8000 /* Max. # of stack slots for a C func (<10K). */ +#define LUAI_GCPAUSE 200 /* Pause GC until memory is at 200%. */ +#define LUAI_GCMUL 200 /* Run GC at 200% of allocation speed. */ +#define LUA_MAXCAPTURES 32 /* Max. pattern captures. */ /* Configuration for the frontend (the luajit executable). */ #if defined(luajit_c) -#define LUA_PROGNAME "luajit" /* Fallback frontend name. */ -#define LUA_PROMPT "> " /* Interactive prompt. */ -#define LUA_PROMPT2 ">> " /* Continuation prompt. */ -#define LUA_MAXINPUT 512 /* Max. input line length. */ +#define LUA_PROGNAME "luajit" /* Fallback frontend name. */ +#define LUA_PROMPT "> " /* Interactive prompt. */ +#define LUA_PROMPT2 ">> " /* Continuation prompt. */ +#define LUA_MAXINPUT 512 /* Max. input line length. */ #endif /* Note: changing the following defines breaks the Lua 5.1 ABI. */ -#define LUA_INTEGER ptrdiff_t -#define LUA_IDSIZE 60 /* Size of lua_Debug.short_src. */ +#define LUA_INTEGER ptrdiff_t +#define LUA_IDSIZE 60 /* Size of lua_Debug.short_src. */ /* ** Size of lauxlib and io.* on-stack buffers. Weird workaround to avoid using ** unreasonable amounts of stack space, but still retain ABI compatibility. ** Blame Lua for depending on BUFSIZ in the ABI, blame **** for wrecking it. */ -#define LUAL_BUFFERSIZE (BUFSIZ > 16384 ? 8192 : BUFSIZ) +#define LUAL_BUFFERSIZE (BUFSIZ > 16384 ? 8192 : BUFSIZ) /* The following defines are here only for compatibility with luaconf.h ** from the standard Lua distribution. They must not be changed for LuaJIT. */ #define LUA_NUMBER_DOUBLE -#define LUA_NUMBER double -#define LUAI_UACNUMBER double -#define LUA_NUMBER_SCAN "%lf" -#define LUA_NUMBER_FMT "%.14g" -#define lua_number2str(s, n) sprintf((s), LUA_NUMBER_FMT, (n)) -#define LUAI_MAXNUMBER2STR 32 -#define LUA_INTFRMLEN "l" -#define LUA_INTFRM_T long +#define LUA_NUMBER double +#define LUAI_UACNUMBER double +#define LUA_NUMBER_SCAN "%lf" +#define LUA_NUMBER_FMT "%.14g" +#define lua_number2str(s, n) sprintf((s), LUA_NUMBER_FMT, (n)) +#define LUAI_MAXNUMBER2STR 32 +#define LUA_INTFRMLEN "l" +#define LUA_INTFRM_T long /* Linkage of public API functions. */ #if defined(LUA_BUILD_AS_DLL) #if defined(LUA_CORE) || defined(LUA_LIB) -#define LUA_API __declspec(dllexport) +#define LUA_API __declspec(dllexport) #else -#define LUA_API __declspec(dllimport) +#define LUA_API __declspec(dllimport) #endif #else -#define LUA_API extern +#define LUA_API extern #endif -#define LUALIB_API LUA_API +#define LUALIB_API LUA_API /* Support for internal assertions. */ #if defined(LUA_USE_ASSERT) || defined(LUA_USE_APICHECK) #include #endif #ifdef LUA_USE_ASSERT -#define lua_assert(x) assert(x) +#define lua_assert(x) assert(x) #endif #ifdef LUA_USE_APICHECK -#define luai_apicheck(L, o) { (void)L; assert(o); } +#define luai_apicheck(L, o) \ + { \ + (void)L; \ + assert(o); \ + } #else -#define luai_apicheck(L, o) { (void)L; } +#define luai_apicheck(L, o) \ + { \ + (void)L; \ + } #endif #endif diff --git a/inc/lua/luajit.h b/inc/lua/luajit.h index 708a5a1..542c25c 100644 --- a/inc/lua/luajit.h +++ b/inc/lua/luajit.h @@ -30,34 +30,34 @@ #include "lua.h" -#define LUAJIT_VERSION "LuaJIT 2.1.0-beta3" -#define LUAJIT_VERSION_NUM 20100 /* Version 2.1.0 = 02.01.00. */ -#define LUAJIT_VERSION_SYM luaJIT_version_2_1_0_beta3 -#define LUAJIT_COPYRIGHT "Copyright (C) 2005-2017 Mike Pall" -#define LUAJIT_URL "http://luajit.org/" +#define LUAJIT_VERSION "LuaJIT 2.1.0-beta3" +#define LUAJIT_VERSION_NUM 20100 /* Version 2.1.0 = 02.01.00. */ +#define LUAJIT_VERSION_SYM luaJIT_version_2_1_0_beta3 +#define LUAJIT_COPYRIGHT "Copyright (C) 2005-2017 Mike Pall" +#define LUAJIT_URL "http://luajit.org/" /* Modes for luaJIT_setmode. */ -#define LUAJIT_MODE_MASK 0x00ff +#define LUAJIT_MODE_MASK 0x00ff enum { - LUAJIT_MODE_ENGINE, /* Set mode for whole JIT engine. */ - LUAJIT_MODE_DEBUG, /* Set debug mode (idx = level). */ + LUAJIT_MODE_ENGINE, /* Set mode for whole JIT engine. */ + LUAJIT_MODE_DEBUG, /* Set debug mode (idx = level). */ - LUAJIT_MODE_FUNC, /* Change mode for a function. */ - LUAJIT_MODE_ALLFUNC, /* Recurse into subroutine protos. */ - LUAJIT_MODE_ALLSUBFUNC, /* Change only the subroutines. */ + LUAJIT_MODE_FUNC, /* Change mode for a function. */ + LUAJIT_MODE_ALLFUNC, /* Recurse into subroutine protos. */ + LUAJIT_MODE_ALLSUBFUNC, /* Change only the subroutines. */ - LUAJIT_MODE_TRACE, /* Flush a compiled trace. */ + LUAJIT_MODE_TRACE, /* Flush a compiled trace. */ - LUAJIT_MODE_WRAPCFUNC = 0x10, /* Set wrapper mode for C function calls. */ + LUAJIT_MODE_WRAPCFUNC = 0x10, /* Set wrapper mode for C function calls. */ LUAJIT_MODE_MAX }; /* Flags or'ed in to the mode. */ -#define LUAJIT_MODE_OFF 0x0000 /* Turn feature off. */ -#define LUAJIT_MODE_ON 0x0100 /* Turn feature on. */ -#define LUAJIT_MODE_FLUSH 0x0200 /* Flush JIT-compiled code. */ +#define LUAJIT_MODE_OFF 0x0000 /* Turn feature off. */ +#define LUAJIT_MODE_ON 0x0100 /* Turn feature on. */ +#define LUAJIT_MODE_FLUSH 0x0200 /* Flush JIT-compiled code. */ /* LuaJIT public C API. */ @@ -65,13 +65,13 @@ enum { LUA_API int luaJIT_setmode(lua_State *L, int idx, int mode); /* Low-overhead profiling API. */ -typedef void (*luaJIT_profile_callback)(void *data, lua_State *L, - int samples, int vmstate); +typedef void (*luaJIT_profile_callback)(void *data, lua_State *L, int samples, + int vmstate); LUA_API void luaJIT_profile_start(lua_State *L, const char *mode, - luaJIT_profile_callback cb, void *data); + luaJIT_profile_callback cb, void *data); LUA_API void luaJIT_profile_stop(lua_State *L); LUA_API const char *luaJIT_profile_dumpstack(lua_State *L, const char *fmt, - int depth, size_t *len); + int depth, size_t *len); /* Enforce (dynamic) linker error for version mismatches. Call from main. */ LUA_API void LUAJIT_VERSION_SYM(void); diff --git a/inc/lua/lualib.h b/inc/lua/lualib.h index bfc130a..e7e8332 100644 --- a/inc/lua/lualib.h +++ b/inc/lua/lualib.h @@ -8,19 +8,19 @@ #include "lua.h" -#define LUA_FILEHANDLE "FILE*" +#define LUA_FILEHANDLE "FILE*" -#define LUA_COLIBNAME "coroutine" -#define LUA_MATHLIBNAME "math" -#define LUA_STRLIBNAME "string" -#define LUA_TABLIBNAME "table" -#define LUA_IOLIBNAME "io" -#define LUA_OSLIBNAME "os" -#define LUA_LOADLIBNAME "package" -#define LUA_DBLIBNAME "debug" -#define LUA_BITLIBNAME "bit" -#define LUA_JITLIBNAME "jit" -#define LUA_FFILIBNAME "ffi" +#define LUA_COLIBNAME "coroutine" +#define LUA_MATHLIBNAME "math" +#define LUA_STRLIBNAME "string" +#define LUA_TABLIBNAME "table" +#define LUA_IOLIBNAME "io" +#define LUA_OSLIBNAME "os" +#define LUA_LOADLIBNAME "package" +#define LUA_DBLIBNAME "debug" +#define LUA_BITLIBNAME "bit" +#define LUA_JITLIBNAME "jit" +#define LUA_FFILIBNAME "ffi" LUALIB_API int luaopen_base(lua_State *L); LUALIB_API int luaopen_math(lua_State *L); @@ -37,7 +37,7 @@ LUALIB_API int luaopen_ffi(lua_State *L); LUALIB_API void luaL_openlibs(lua_State *L); #ifndef lua_assert -#define lua_assert(x) ((void)0) +#define lua_assert(x) ((void)0) #endif #endif diff --git a/inc/tsfuncs/BlFuncs.cpp b/inc/tsfuncs/BlFuncs.cpp index 68b789d..524e76a 100644 --- a/inc/tsfuncs/BlFuncs.cpp +++ b/inc/tsfuncs/BlFuncs.cpp @@ -2,15 +2,18 @@ ////////////////////////////////////////////////// // BlFuncs Version 1.0 - // Includes - -#include "BlHooks.hpp" +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif #include "BlFuncs.hpp" +#include +#include "BlHooks.hpp" +#include +#include #include - // Scanned structures ADDR tsf_mCacheSequence; @@ -18,221 +21,263 @@ ADDR tsf_mCacheAllocator; ADDR tsf_gIdDictionary; ADDR tsf_gEvalState_globalVars; -BlFunctionDefIntern(tsf_BlStringTable__insert ); -BlFunctionDefIntern(tsf_BlNamespace__find ); +BlFunctionDefIntern(tsf_BlStringTable__insert); +BlFunctionDefIntern(tsf_BlNamespace__find); BlFunctionDefIntern(tsf_BlNamespace__createLocalEntry); -BlFunctionDefIntern(tsf_BlDataChunker__freeBlocks ); -BlFunctionDefIntern(tsf_BlCon__evaluate ); -BlFunctionDefIntern(tsf_BlCon__executef ); -BlFunctionDefIntern(tsf_BlCon__executefSimObj ); -BlFunctionDefIntern(tsf_BlCon__getVariable ); -BlFunctionDefIntern(tsf_BlDictionary__addVariable ); -BlFunctionDefIntern(tsf_BlSim__findObject_name ); -BlFunctionDefIntern(tsf_BlStringStack__getArgBuffer ); -BlFunctionDefIntern(tsf_BlSimObject__getDataField ); -BlFunctionDefIntern(tsf_BlSimObject__setDataField ); -BlFunctionDefIntern(tsf_BlCon__getReturnBuffer ); - +BlFunctionDefIntern(tsf_BlDataChunker__freeBlocks); +BlFunctionDefIntern(tsf_BlCon__evaluate); +BlFunctionDefIntern(tsf_BlCon__executef); +BlFunctionDefIntern(tsf_BlCon__executefSimObj); +BlFunctionDefIntern(tsf_BlCon__getVariable); +BlFunctionDefIntern(tsf_BlDictionary__addVariable); +BlFunctionDefIntern(tsf_BlSim__findObject_name); +BlFunctionDefIntern(tsf_BlStringStack__getArgBuffer); +BlFunctionDefIntern(tsf_BlSimObject__getDataField); +BlFunctionDefIntern(tsf_BlSimObject__setDataField); +BlFunctionDefIntern(tsf_BlCon__getReturnBuffer); // C->TS Args -char* tsf_GetIntArg(signed int value) { - char* ret = tsf_BlStringStack__getArgBuffer(16); - snprintf(ret, 16, "%d", value); - return ret; +char *tsf_GetIntArg(signed int value) { + char *ret = tsf_BlStringStack__getArgBuffer(16); + snprintf(ret, 16, "%d", value); + return ret; } -char* tsf_GetFloatArg(float value) { - char* ret = tsf_BlStringStack__getArgBuffer(32); - snprintf(ret, 32, "%g", value); - return ret; +char *tsf_GetFloatArg(float value) { + char *ret = tsf_BlStringStack__getArgBuffer(32); + snprintf(ret, 32, "%g", value); + return ret; } -char* tsf_GetStringArg(char* value) { - int len = strlen(value)+1; - char* ret = tsf_BlStringStack__getArgBuffer(len); - memcpy(ret, value, len); - return ret; +char *tsf_GetStringArg(char *value) { + int len = strlen(value) + 1; + char *ret = tsf_BlStringStack__getArgBuffer(len); + memcpy(ret, value, len); + return ret; } -char* tsf_GetThisArg(ADDR obj) { - return tsf_GetIntArg(*(signed int *)(obj + 32)); +char *tsf_GetThisArg(ADDR obj) { + return tsf_GetIntArg(*(signed int *)(obj + 32)); } - // Eval -const char* tsf_Eval(const char *code) { - const char *argv[] = {nullptr, code}; - return tsf_BlCon__evaluate(0, 2, argv); +const char *tsf_Eval(const char *code) { + const char *argv[] = {nullptr, code}; + return tsf_BlCon__evaluate(0, 2, argv); } -const char* tsf_Evalf(const char *fmt, ...) { - va_list args; - char code[4096]; - va_start(args, fmt); - vsnprintf(code, 4096, fmt, args); - va_end(args); - - return tsf_Eval((const char*)code); -} +const char *tsf_Evalf(const char *fmt, ...) { + va_list args; + char code[4096]; + va_start(args, fmt); + vsnprintf(code, 4096, fmt, args); + va_end(args); + return tsf_Eval((const char *)code); +} // Objects ADDR tsf_FindObject(unsigned int id) { - ADDR obj = *(ADDR*)(*(ADDR*)(tsf_gIdDictionary) + 4*(id & 0xFFF)); - if(!obj) return 0; - - while(obj && *(unsigned int *)(obj + 32) != id) { - obj = *(ADDR*)(obj + 16); - if(!obj) return 0; - } - - return obj; + ADDR obj = *(ADDR *)(*(ADDR *)(tsf_gIdDictionary) + 4 * (id & 0xFFF)); + if (!obj) + return 0; + + while (obj && *(unsigned int *)(obj + 32) != id) { + obj = *(ADDR *)(obj + 16); + if (!obj) + return 0; + } + + return obj; } -ADDR tsf_FindObject(const char* name) { - return (ADDR)tsf_BlSim__findObject_name(name); +ADDR tsf_FindObject(const char *name) { + return (ADDR)tsf_BlSim__findObject_name(name); } -ADDR tsf_LookupNamespace(const char* ns, const char* package) { - const char* ste_package; - if(package) { - ste_package = tsf_BlStringTable__insert(package, 0); - } else { - ste_package = nullptr; - } - - if(ns) { - const char* ste_namespace = tsf_BlStringTable__insert(ns, 0); - return tsf_BlNamespace__find(ste_namespace, ste_package); - } else { - return tsf_BlNamespace__find(nullptr, ste_package); - } -} -ADDR tsf_LookupNamespace(const char* ns) { - return tsf_LookupNamespace(ns, nullptr); -} +ADDR tsf_LookupNamespace(const char *ns, const char *package) { + const char *ste_package; + if (package) { + ste_package = tsf_BlStringTable__insert(package, 0); + } else { + ste_package = nullptr; + } + if (ns) { + const char *ste_namespace = tsf_BlStringTable__insert(ns, 0); + return tsf_BlNamespace__find(ste_namespace, ste_package); + } else { + return tsf_BlNamespace__find(nullptr, ste_package); + } +} +ADDR tsf_LookupNamespace(const char *ns) { + return tsf_LookupNamespace(ns, nullptr); +} // Object Fields -const char* tsf_GetDataField(ADDR simObject, const char* slotName, const char* array) { - const char *ste_slotName; - if(slotName) { - ste_slotName = tsf_BlStringTable__insert(slotName, 0); - } else { - ste_slotName = nullptr; - } - - return tsf_BlSimObject__getDataField(simObject, ste_slotName, array); +const char *tsf_GetDataField(ADDR simObject, const char *slotName, + const char *array) { + const char *ste_slotName; + if (slotName) { + ste_slotName = tsf_BlStringTable__insert(slotName, 0); + } else { + ste_slotName = nullptr; + } + + return tsf_BlSimObject__getDataField(simObject, ste_slotName, array); } -void tsf_SetDataField(ADDR simObject, const char* slotName, const char* array, const char* value) { - const char* ste_slotName; - if(slotName) { - ste_slotName = tsf_BlStringTable__insert(slotName, 0); - } else { - ste_slotName = nullptr; - } - - tsf_BlSimObject__setDataField(simObject, ste_slotName, array, value); -} +void tsf_SetDataField(ADDR simObject, const char *slotName, const char *array, + const char *value) { + const char *ste_slotName; + if (slotName) { + ste_slotName = tsf_BlStringTable__insert(slotName, 0); + } else { + ste_slotName = nullptr; + } + tsf_BlSimObject__setDataField(simObject, ste_slotName, array, value); +} // TS Global Variables -const char *tsf_GetVar(const char* name) { - return tsf_BlCon__getVariable(name); +const char *tsf_GetVar(const char *name) { + return tsf_BlCon__getVariable(name); } -void tsf_AddVarInternal(const char* name, signed int varType, void* data) { - tsf_BlDictionary__addVariable((ADDR *)tsf_gEvalState_globalVars, name, varType, data); +void tsf_AddVarInternal(const char *name, signed int varType, void *data) { + tsf_BlDictionary__addVariable((ADDR *)tsf_gEvalState_globalVars, name, + varType, data); } -void tsf_AddVar(const char* name, const char** data) { - tsf_AddVarInternal(name, 10, data); +void tsf_AddVar(const char *name, const char **data) { + tsf_AddVarInternal(name, 10, data); } -void tsf_AddVar(const char* name, signed int* data) { - tsf_AddVarInternal(name, 4, data); +void tsf_AddVar(const char *name, signed int *data) { + tsf_AddVarInternal(name, 4, data); } -void tsf_AddVar(const char* name, float* data) { - tsf_AddVarInternal(name, 8, data); +void tsf_AddVar(const char *name, float *data) { + tsf_AddVarInternal(name, 8, data); } -void tsf_AddVar(const char* name, bool* data) { - tsf_AddVarInternal(name, 6, data); +void tsf_AddVar(const char *name, bool *data) { + tsf_AddVarInternal(name, 6, data); } - // TS->C Functions -ADDR tsf_AddConsoleFuncInternal(const char* pname, const char* cname, const char* fname, signed int cbtype, const char* usage, signed int mina, signed int maxa) { - const char *ste_fname = tsf_BlStringTable__insert(fname, 0); - ADDR ns = tsf_LookupNamespace(cname, pname); - ADDR ent = tsf_BlNamespace__createLocalEntry(ns, ste_fname); - - *(signed int *)tsf_mCacheSequence += 1; - tsf_BlDataChunker__freeBlocks(*(ADDR *)tsf_mCacheAllocator); - - *(const char**)(ent + 24) = usage ; - *(signed int* )(ent + 16) = mina ; - *(signed int* )(ent + 20) = maxa ; - *(signed int* )(ent + 12) = cbtype; - - return ent; +ADDR tsf_AddConsoleFuncInternal(const char *pname, const char *cname, + const char *fname, signed int cbtype, + const char *usage, signed int mina, + signed int maxa) { + const char *ste_fname = tsf_BlStringTable__insert(fname, 0); + ADDR ns = tsf_LookupNamespace(cname, pname); + ADDR ent = tsf_BlNamespace__createLocalEntry(ns, ste_fname); + + *(signed int *)tsf_mCacheSequence += 1; + tsf_BlDataChunker__freeBlocks(*(ADDR *)tsf_mCacheAllocator); + + *(const char **)(ent + 24) = usage; + *(signed int *)(ent + 16) = mina; + *(signed int *)(ent + 20) = maxa; + *(signed int *)(ent + 12) = cbtype; + + return ent; } -void tsf_AddConsoleFunc(const char* pname, const char* cname, const char* fname, tsf_StringCallback sc, const char* usage, signed int mina, signed int maxa) { - ADDR ent = tsf_AddConsoleFuncInternal(pname, cname, fname, 1, usage, mina, maxa); - *(tsf_StringCallback *)(ent + 40) = sc; +void tsf_AddConsoleFunc(const char *pname, const char *cname, const char *fname, + tsf_StringCallback sc, const char *usage, + signed int mina, signed int maxa) { + ADDR ent = + tsf_AddConsoleFuncInternal(pname, cname, fname, 1, usage, mina, maxa); + *(tsf_StringCallback *)(ent + 40) = sc; } -void tsf_AddConsoleFunc(const char* pname, const char* cname, const char* fname, tsf_IntCallback ic, const char* usage, signed int mina, signed int maxa) { - ADDR ent = tsf_AddConsoleFuncInternal(pname, cname, fname, 2, usage, mina, maxa); - *(tsf_IntCallback *)(ent + 40) = ic; +void tsf_AddConsoleFunc(const char *pname, const char *cname, const char *fname, + tsf_IntCallback ic, const char *usage, signed int mina, + signed int maxa) { + ADDR ent = + tsf_AddConsoleFuncInternal(pname, cname, fname, 2, usage, mina, maxa); + *(tsf_IntCallback *)(ent + 40) = ic; } -void tsf_AddConsoleFunc(const char* pname, const char* cname, const char* fname, tsf_FloatCallback fc, const char* usage, signed int mina, signed int maxa) { - ADDR ent = tsf_AddConsoleFuncInternal(pname, cname, fname, 3, usage, mina, maxa); - *(tsf_FloatCallback *)(ent + 40) = fc; +void tsf_AddConsoleFunc(const char *pname, const char *cname, const char *fname, + tsf_FloatCallback fc, const char *usage, + signed int mina, signed int maxa) { + ADDR ent = + tsf_AddConsoleFuncInternal(pname, cname, fname, 3, usage, mina, maxa); + *(tsf_FloatCallback *)(ent + 40) = fc; } -void tsf_AddConsoleFunc(const char* pname, const char* cname, const char* fname, tsf_VoidCallback vc, const char* usage, signed int mina, signed int maxa) { - ADDR ent = tsf_AddConsoleFuncInternal(pname, cname, fname, 4, usage, mina, maxa); - *(tsf_VoidCallback *)(ent + 40) = vc; +void tsf_AddConsoleFunc(const char *pname, const char *cname, const char *fname, + tsf_VoidCallback vc, const char *usage, signed int mina, + signed int maxa) { + ADDR ent = + tsf_AddConsoleFuncInternal(pname, cname, fname, 4, usage, mina, maxa); + *(tsf_VoidCallback *)(ent + 40) = vc; } -void tsf_AddConsoleFunc(const char* pname, const char* cname, const char* fname, tsf_BoolCallback bc, const char* usage, signed int mina, signed int maxa) { - ADDR ent = tsf_AddConsoleFuncInternal(pname, cname, fname, 5, usage, mina, maxa); - *(tsf_BoolCallback *)(ent + 40) = bc; +void tsf_AddConsoleFunc(const char *pname, const char *cname, const char *fname, + tsf_BoolCallback bc, const char *usage, signed int mina, + signed int maxa) { + ADDR ent = + tsf_AddConsoleFuncInternal(pname, cname, fname, 5, usage, mina, maxa); + *(tsf_BoolCallback *)(ent + 40) = bc; } - // Initialization bool tsf_InitInternal() { - BlScanFunctionText(tsf_BlStringTable__insert , "83 EC 0C 80 3D ? ? ? ? ?" ); - BlScanFunctionText(tsf_BlNamespace__find , "55 8B EC 6A FF 68 ? ? ? ? 64 A1 ? ? ? ? 50 83 EC 0C 53 56 57 A1 ? ? ? ? 33 C5 50 8D 45 F4 64 A3 ? ? ? ? 8B DA 8B D1" ); - BlScanFunctionText(tsf_BlNamespace__createLocalEntry, "55 8B EC 6A FF 68 ? ? ? ? 64 A1 ? ? ? ? 50 83 EC 08 53 56 57 A1 ? ? ? ? 33 C5 50 8D 45 F4 64 A3 ? ? ? ? 89 4D F0" ); - BlScanFunctionText(tsf_BlDataChunker__freeBlocks , "55 8B EC 6A FF 68 ? ? ? ? 64 A1 ? ? ? ? 50 51 53 56 57 A1 ? ? ? ? 33 C5 50 8D 45 F4 64 A3 ? ? ? ? 8B D9 8B 33" ); - BlScanFunctionText(tsf_BlCon__evaluate , "55 8B EC 6A FF 68 ? ? ? ? 64 A1 ? ? ? ? 50 56 57 A1 ? ? ? ? 33 C5 50 8D 45 F4 64 A3 ? ? ? ? 8B 75 10" ); - BlScanFunctionText(tsf_BlCon__executef , "81 EC ? ? ? ? A1 ? ? ? ? 33 C4 89 84 24 ? ? ? ? 53 55 56 8B B4 24 ? ? ? ? 33 C9" ); - BlScanFunctionText(tsf_BlCon__executefSimObj , "81 EC ? ? ? ? A1 ? ? ? ? 33 C4 89 84 24 ? ? ? ? 53 56 8B B4 24 ? ? ? ? 33 C9" ); - BlScanFunctionText(tsf_BlCon__getVariable , "53 56 8B F1 57 85 F6 0F 84 ? ? ? ?" ); - BlScanFunctionText(tsf_BlDictionary__addVariable , "8B 44 24 04 56 57 8B F9" ); - BlScanFunctionText(tsf_BlSim__findObject_name , "57 8B F9 8A 17" ); - BlScanFunctionText(tsf_BlStringStack__getArgBuffer , "55 8B EC 83 E4 F8 8B 0D ? ? ? ? A1 ? ? ? ? 56 57 8B 7D 08 8D 14 01 03 D7 3B 15 ? ? ? ? 72 2C 8B 0D" ); - BlScanFunctionText(tsf_BlSimObject__getDataField , "51 53 8B D9 55 56 8B 74 24 14" ); - BlScanFunctionText(tsf_BlSimObject__setDataField , "81 EC ? ? ? ? A1 ? ? ? ? 33 C4 89 84 24 ? ? ? ? 8B 84 24 ? ? ? ? 53 8B D9 89 44 24 04" ); - BlScanFunctionText(tsf_BlCon__getReturnBuffer , "81 F9 ? ? ? ? 76 2B" ); - - ADDR BlScanText (tsf_mCacheSequenceLoc , "FF 05 ? ? ? ? B9 ? ? ? ? 8B F8 E8 ? ? ? ? 8B 44 24 1C 89 47 18 8B 44 24 14" ); - ADDR BlScanText (tsf_mCacheAllocatorLoc , "89 35 ? ? ? ? C7 06 ? ? ? ? A1 ? ? ? ? 68 ? ? ? ? C7 40 ? ? ? ? ? E8 ? ? ? ? 83 C4 04 8B 4D F4 64 89 0D ? ? ? ? 59 5E 8B E5 5D C3"); - ADDR BlScanText (tsf_gIdDictionaryLoc , "89 15 ? ? ? ? E8 ? ? ? ? 8B F0 89 75 F0" ); - ADDR BlScanText (tsf_gEvalState_globalVarsLoc , "B9 ? ? ? ? E8 ? ? ? ? 68 ? ? ? ? 6A 0A 68 ? ? ? ? B9 ? ? ? ? E8 ? ? ? ? E8 ? ? ? ?" ); - - tsf_mCacheSequence = *(ADDR*)(tsf_mCacheSequenceLoc + 2); - tsf_mCacheAllocator = *(ADDR*)(tsf_mCacheAllocatorLoc + 2); - tsf_gIdDictionary = *(ADDR*)(tsf_gIdDictionaryLoc + 2); - tsf_gEvalState_globalVars = *(ADDR*)(tsf_gEvalState_globalVarsLoc + 1); - - return true; + BlScanFunctionText(tsf_BlStringTable__insert, "83 EC 0C 80 3D ? ? ? ? ?"); + BlScanFunctionText( + tsf_BlNamespace__find, + "55 8B EC 6A FF 68 ? ? ? ? 64 A1 ? ? ? ? 50 83 EC 0C 53 56 57 A1 ? ? ? ? " + "33 C5 50 8D 45 F4 64 A3 ? ? ? ? 8B DA 8B D1"); + BlScanFunctionText( + tsf_BlNamespace__createLocalEntry, + "55 8B EC 6A FF 68 ? ? ? ? 64 A1 ? ? ? ? 50 83 EC 08 53 56 57 A1 ? ? ? ? " + "33 C5 50 8D 45 F4 64 A3 ? ? ? ? 89 4D F0"); + BlScanFunctionText(tsf_BlDataChunker__freeBlocks, + "55 8B EC 6A FF 68 ? ? ? ? 64 A1 ? ? ? ? 50 51 53 56 57 " + "A1 ? ? ? ? 33 C5 50 8D 45 F4 64 A3 ? ? ? ? 8B D9 8B 33"); + BlScanFunctionText(tsf_BlCon__evaluate, + "55 8B EC 6A FF 68 ? ? ? ? 64 A1 ? ? ? ? 50 56 57 A1 ? ? " + "? ? 33 C5 50 8D 45 F4 64 A3 ? ? ? ? 8B 75 10"); + BlScanFunctionText(tsf_BlCon__executef, + "81 EC ? ? ? ? A1 ? ? ? ? 33 C4 89 84 24 ? ? ? ? 53 55 56 " + "8B B4 24 ? ? ? ? 33 C9"); + BlScanFunctionText(tsf_BlCon__executefSimObj, + "81 EC ? ? ? ? A1 ? ? ? ? 33 C4 89 84 24 ? ? ? ? 53 56 8B " + "B4 24 ? ? ? ? 33 C9"); + BlScanFunctionText(tsf_BlCon__getVariable, + "53 56 8B F1 57 85 F6 0F 84 ? ? ? ?"); + BlScanFunctionText(tsf_BlDictionary__addVariable, "8B 44 24 04 56 57 8B F9"); + BlScanFunctionText(tsf_BlSim__findObject_name, "57 8B F9 8A 17"); + BlScanFunctionText(tsf_BlStringStack__getArgBuffer, + "55 8B EC 83 E4 F8 8B 0D ? ? ? ? A1 ? ? ? ? 56 57 8B 7D " + "08 8D 14 01 03 D7 3B 15 ? ? ? ? 72 2C 8B 0D"); + BlScanFunctionText(tsf_BlSimObject__getDataField, + "51 53 8B D9 55 56 8B 74 24 14"); + BlScanFunctionText(tsf_BlSimObject__setDataField, + "81 EC ? ? ? ? A1 ? ? ? ? 33 C4 89 84 24 ? ? ? ? 8B 84 24 " + "? ? ? ? 53 8B D9 89 44 24 04"); + BlScanFunctionText(tsf_BlCon__getReturnBuffer, "81 F9 ? ? ? ? 76 2B"); + + ADDR BlScanText(tsf_mCacheSequenceLoc, + "FF 05 ? ? ? ? B9 ? ? ? ? 8B F8 E8 ? ? ? ? 8B 44 24 1C 89 47 " + "18 8B 44 24 14"); + ADDR BlScanText( + tsf_mCacheAllocatorLoc, + "89 35 ? ? ? ? C7 06 ? ? ? ? A1 ? ? ? ? 68 ? ? ? ? C7 40 ? ? ? ? ? E8 ? " + "? ? ? 83 C4 04 8B 4D F4 64 89 0D ? ? ? ? 59 5E 8B E5 5D C3"); + ADDR BlScanText(tsf_gIdDictionaryLoc, + "89 15 ? ? ? ? E8 ? ? ? ? 8B F0 89 75 F0"); + ADDR BlScanText(tsf_gEvalState_globalVarsLoc, + "B9 ? ? ? ? E8 ? ? ? ? 68 ? ? ? ? 6A 0A 68 ? ? ? ? B9 ? ? ? " + "? E8 ? ? ? ? E8 ? ? ? ?"); + + tsf_mCacheSequence = *(ADDR *)(tsf_mCacheSequenceLoc + 2); + tsf_mCacheAllocator = *(ADDR *)(tsf_mCacheAllocatorLoc + 2); + tsf_gIdDictionary = *(ADDR *)(tsf_gIdDictionaryLoc + 2); + tsf_gEvalState_globalVars = *(ADDR *)(tsf_gEvalState_globalVarsLoc + 1); + + return true; } -bool tsf_DeinitInternal() { - return true; -} +bool tsf_DeinitInternal() { return true; } diff --git a/inc/tsfuncs/BlFuncs.hpp b/inc/tsfuncs/BlFuncs.hpp index b14626d..c9c0d32 100644 --- a/inc/tsfuncs/BlFuncs.hpp +++ b/inc/tsfuncs/BlFuncs.hpp @@ -5,16 +5,16 @@ #ifndef _H_BLFUNCS #define _H_BLFUNCS -// Require BlHooks to be included before this header +// Ensure BlHooks is available (include it if not already included) #ifndef _H_BLHOOKS - #error "BlFuncs.hpp: You must include BlHooks.hpp first" -#else +#include "BlHooks.hpp" +#endif -typedef const char * (*tsf_StringCallback)(ADDR, signed int, const char *[]); -typedef signed int (*tsf_IntCallback )(ADDR, signed int, const char *[]); -typedef float (*tsf_FloatCallback )(ADDR, signed int, const char *[]); -typedef void (*tsf_VoidCallback )(ADDR, signed int, const char *[]); -typedef bool (*tsf_BoolCallback )(ADDR, signed int, const char *[]); +typedef const char *(*tsf_StringCallback)(ADDR, signed int, const char *[]); +typedef signed int (*tsf_IntCallback)(ADDR, signed int, const char *[]); +typedef float (*tsf_FloatCallback)(ADDR, signed int, const char *[]); +typedef void (*tsf_VoidCallback)(ADDR, signed int, const char *[]); +typedef bool (*tsf_BoolCallback)(ADDR, signed int, const char *[]); /* These functions are used for tsf_BlCon__executefSimObj. They refer to a special buffer for the argument stack. @@ -42,12 +42,21 @@ void tsf_AddVar(const char *, signed int *); void tsf_AddVar(const char *, float *); void tsf_AddVar(const char *, bool *); -ADDR tsf_AddConsoleFuncInternal(const char *, const char *, const char *, signed int, const char *, signed int, signed int); -void tsf_AddConsoleFunc(const char *, const char *, const char *, tsf_StringCallback, const char *, signed int, signed int); -void tsf_AddConsoleFunc(const char *, const char *, const char *, tsf_IntCallback, const char *, signed int, signed int); -void tsf_AddConsoleFunc(const char *, const char *, const char *, tsf_FloatCallback, const char *, signed int, signed int); -void tsf_AddConsoleFunc(const char *, const char *, const char *, tsf_VoidCallback, const char *, signed int, signed int); -void tsf_AddConsoleFunc(const char *, const char *, const char *, tsf_BoolCallback, const char *, signed int, signed int); +ADDR tsf_AddConsoleFuncInternal(const char *, const char *, const char *, + signed int, const char *, signed int, + signed int); +void tsf_AddConsoleFunc(const char *, const char *, const char *, + tsf_StringCallback, const char *, signed int, + signed int); +void tsf_AddConsoleFunc(const char *, const char *, const char *, + tsf_IntCallback, const char *, signed int, signed int); +void tsf_AddConsoleFunc(const char *, const char *, const char *, + tsf_FloatCallback, const char *, signed int, + signed int); +void tsf_AddConsoleFunc(const char *, const char *, const char *, + tsf_VoidCallback, const char *, signed int, signed int); +void tsf_AddConsoleFunc(const char *, const char *, const char *, + tsf_BoolCallback, const char *, signed int, signed int); bool tsf_InitInternal(); @@ -56,21 +65,32 @@ extern ADDR tsf_mCacheAllocator; extern ADDR tsf_gIdDictionary; extern ADDR tsf_gEvalState_globalVars; -BlFunctionDefExtern(const char *, __stdcall, tsf_BlStringTable__insert, const char *, bool); -BlFunctionDefExtern(ADDR, __fastcall, tsf_BlNamespace__find, const char *, const char *); -BlFunctionDefExtern(ADDR, __thiscall, tsf_BlNamespace__createLocalEntry, ADDR, const char *); +BlFunctionDefExtern(const char *, __stdcall, tsf_BlStringTable__insert, + const char *, bool); +BlFunctionDefExtern(ADDR, __fastcall, tsf_BlNamespace__find, const char *, + const char *); +BlFunctionDefExtern(ADDR, __thiscall, tsf_BlNamespace__createLocalEntry, ADDR, + const char *); BlFunctionDefExtern(void, __thiscall, tsf_BlDataChunker__freeBlocks, ADDR); -BlFunctionDefExtern(const char *, , tsf_BlCon__evaluate, ADDR, signed int, const char **); +BlFunctionDefExtern(const char *, , tsf_BlCon__evaluate, ADDR, signed int, + const char **); BlFunctionDefExtern(const char *, , tsf_BlCon__executef, signed int, ...); -BlFunctionDefExtern(const char *, , tsf_BlCon__executefSimObj, ADDR *, signed int, ...); -BlFunctionDefExtern(const char *, __thiscall, tsf_BlCon__getVariable, const char *); -BlFunctionDefExtern(void, __thiscall, tsf_BlDictionary__addVariable, ADDR *, const char *, signed int, void *); -BlFunctionDefExtern(ADDR *, __thiscall, tsf_BlSim__findObject_name, const char *); -BlFunctionDefExtern(char *, __stdcall, tsf_BlStringStack__getArgBuffer, unsigned int); -BlFunctionDefExtern(const char *, __thiscall, tsf_BlSimObject__getDataField, ADDR, const char *, const char *); -BlFunctionDefExtern(void, __thiscall, tsf_BlSimObject__setDataField, ADDR, const char *, const char *, const char *); -BlFunctionDefExtern(char *, __fastcall, tsf_BlCon__getReturnBuffer, unsigned int); - +BlFunctionDefExtern(const char *, , tsf_BlCon__executefSimObj, ADDR *, + signed int, ...); +BlFunctionDefExtern(const char *, __thiscall, tsf_BlCon__getVariable, + const char *); +BlFunctionDefExtern(void, __thiscall, tsf_BlDictionary__addVariable, ADDR *, + const char *, signed int, void *); +BlFunctionDefExtern(ADDR *, __thiscall, tsf_BlSim__findObject_name, + const char *); +BlFunctionDefExtern(char *, __stdcall, tsf_BlStringStack__getArgBuffer, + unsigned int); +BlFunctionDefExtern(const char *, __thiscall, tsf_BlSimObject__getDataField, + ADDR, const char *, const char *); +BlFunctionDefExtern(void, __thiscall, tsf_BlSimObject__setDataField, ADDR, + const char *, const char *, const char *); +BlFunctionDefExtern(char *, __fastcall, tsf_BlCon__getReturnBuffer, + unsigned int); // Function short names @@ -80,7 +100,7 @@ BlFunctionDefExtern(char *, __fastcall, tsf_BlCon__getReturnBuffer, unsigned int #define BlIntArg tsf_GetIntArg #define BlFloatArg tsf_GetFloatArg #define BlThisArg tsf_GetThisArg -#define BlStringArg(x) tsf_GetStringArg((char*)x) +#define BlStringArg(x) tsf_GetStringArg((char *)x) #define BlReturnBuffer tsf_BlCon__getReturnBuffer #define BlObject tsf_FindObject @@ -94,16 +114,23 @@ BlFunctionDefExtern(char *, __fastcall, tsf_BlCon__getReturnBuffer, unsigned int #define BlAddFunction tsf_AddConsoleFunc -#define __22ND_ARGUMENT(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, ...) a22 -#define __NUM_LIST(...) __22ND_ARGUMENT(dummy, ##__VA_ARGS__, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) -#define BlCall(...) \ - tsf_BlCon__executef(__NUM_LIST(__VA_ARGS__), __VA_ARGS__) -#define BlCallObj(obj, ...) \ - tsf_BlCon__executefSimObj((ADDR*)obj, __NUM_LIST(__VA_ARGS__), __VA_ARGS__) - -#define BlFuncsInit() if(!tsf_InitInternal()) { return false; } -#define BlFuncsDeinit() if(!tsf_DeinitInternal()) { return false; } +#define __22ND_ARGUMENT(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, \ + a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, ...) \ + a22 +#define __NUM_LIST(...) \ + __22ND_ARGUMENT(dummy, ##__VA_ARGS__, 20, 19, 18, 17, 16, 15, 14, 13, 12, \ + 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) +#define BlCall(...) tsf_BlCon__executef(__NUM_LIST(__VA_ARGS__), __VA_ARGS__) +#define BlCallObj(obj, ...) \ + tsf_BlCon__executefSimObj((ADDR *)obj, __NUM_LIST(__VA_ARGS__), __VA_ARGS__) +#define BlFuncsInit() \ + if (!tsf_InitInternal()) { \ + return false; \ + } +#define BlFuncsDeinit() \ + if (!tsf_DeinitInternal()) { \ + return false; \ + } #endif -#endif diff --git a/inc/tsfuncs/BlHooks.cpp b/inc/tsfuncs/BlHooks.cpp index e46a852..b29d922 100644 --- a/inc/tsfuncs/BlHooks.cpp +++ b/inc/tsfuncs/BlHooks.cpp @@ -2,206 +2,208 @@ ////////////////////////////////////////////////// // RedoBlHooks Version 3.0 - // Includes +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#include +#endif #include #include -//#include +// #include #include "BlHooks.hpp" - // Scanned structures BlFunctionDefIntern(tsh_BlPrintf); - // Sig Scanning ADDR ImageBase; ADDR ImageSize; -void tsh_i_InitScanner(){ - HMODULE module = GetModuleHandle(NULL); - if(module) { - MODULEINFO info; - GetModuleInformation(GetCurrentProcess(), module, &info, sizeof(MODULEINFO)); - ImageBase = (ADDR)info.lpBaseOfDll; - ImageSize = info.SizeOfImage; - } +void tsh_i_InitScanner() { + HMODULE module = GetModuleHandle(NULL); + if (module) { + MODULEINFO info; + GetModuleInformation(GetCurrentProcess(), module, &info, + sizeof(MODULEINFO)); + ImageBase = (ADDR)info.lpBaseOfDll; + ImageSize = info.SizeOfImage; + } } -bool tsh_i_CompareData(BYTE *data, BYTE *pattern, char* mask){ - for (; *mask; ++data, ++pattern, ++mask){ - if (*mask=='x' && *data!=*pattern) - return false; - } - return (*mask)==0; +bool tsh_i_CompareData(BYTE *data, BYTE *pattern, char *mask) { + for (; *mask; ++data, ++pattern, ++mask) { + if (*mask == 'x' && *data != *pattern) + return false; + } + return (*mask) == 0; } -ADDR tsh_i_FindPattern(ADDR imageBase, ADDR imageSize, BYTE *pattern, char *mask){ - for (ADDR i=imageBase; i < imageBase+imageSize; i++){ - if(tsh_i_CompareData((PBYTE)i, pattern, mask)){ - return i; - } - } - return 0; +ADDR tsh_i_FindPattern(ADDR imageBase, ADDR imageSize, BYTE *pattern, + char *mask) { + for (ADDR i = imageBase; i < imageBase + imageSize; i++) { + if (tsh_i_CompareData((PBYTE)i, pattern, mask)) { + return i; + } + } + return 0; } // Convert a text-style pattern into code-style -void tsh_i_PatternTextToCode(char* text, char** opatt, char** omask) { - unsigned int len = strlen(text); - char* patt = (char*)malloc(len); - char* mask = (char*)malloc(len); - - int outidx = 0; - int val = 0; - bool uk = false; - for(unsigned int i=0; i='0' && c<='9'){ - val = (val<<4) + (c-'0'); - }else if(c>='A' && c<='F'){ - val = (val<<4) + (c-'A'+10); - }else if(c>='a' && c<='f'){ - val = (val<<4) + (c-'a'+10); - }else if(c==' '){ - patt[outidx] = uk ? 0 : val; - mask[outidx] = uk ? '?' : 'x'; - val = 0; - uk = false; - outidx++; - } - } - - patt[outidx] = uk ? 0 : val; - mask[outidx] = uk ? '?' : 'x'; - outidx++; - patt[outidx] = 0; - mask[outidx] = 0; - - *opatt = patt; - *omask = mask; -} +void tsh_i_PatternTextToCode(char *text, char **opatt, char **omask) { + unsigned int len = strlen(text); + char *patt = (char *)malloc(len); + char *mask = (char *)malloc(len); + int outidx = 0; + int val = 0; + bool uk = false; + for (unsigned int i = 0; i < len; i++) { + char c = text[i]; + if (c == '?') { + uk = true; + } else if (c >= '0' && c <= '9') { + val = (val << 4) + (c - '0'); + } else if (c >= 'A' && c <= 'F') { + val = (val << 4) + (c - 'A' + 10); + } else if (c >= 'a' && c <= 'f') { + val = (val << 4) + (c - 'a' + 10); + } else if (c == ' ') { + patt[outidx] = uk ? 0 : val; + mask[outidx] = uk ? '?' : 'x'; + val = 0; + uk = false; + outidx++; + } + } + + patt[outidx] = uk ? 0 : val; + mask[outidx] = uk ? '?' : 'x'; + outidx++; + patt[outidx] = 0; + mask[outidx] = 0; + + *opatt = patt; + *omask = mask; +} // Public functions for sig scanning // Scan using code-style pattern -ADDR tsh_ScanCode(char* pattern, char* mask) { - return tsh_i_FindPattern(ImageBase, ImageSize-strlen(mask), (BYTE*)pattern, mask); +ADDR tsh_ScanCode(char *pattern, char *mask) { + return tsh_i_FindPattern(ImageBase, ImageSize - strlen(mask), (BYTE *)pattern, + mask); } // Scan using a text-style pattern -ADDR tsh_ScanText(char* text) { - char* patt; - char* mask; - tsh_i_PatternTextToCode(text, &patt, &mask); - - ADDR res = tsh_ScanCode(patt, mask); - - free(patt); - free(mask); - - return res; -} +ADDR tsh_ScanText(char *text) { + char *patt; + char *mask; + tsh_i_PatternTextToCode(text, &patt, &mask); + ADDR res = tsh_ScanCode(patt, mask); + + free(patt); + free(mask); + + return res; +} // Call Patching and Hooking // Remove protection from address -//std::map> tsh_DeprotectedAddresses; +// std::map> tsh_DeprotectedAddresses; void tsh_DeprotectAddress(ADDR length, ADDR location) { - DWORD oldProtection; - VirtualProtect((void*)location, length, PAGE_EXECUTE_READWRITE, &oldProtection); - //tsh_DeprotectedAddresses[location] = {length, oldProtection}; + DWORD oldProtection; + VirtualProtect((void *)location, length, PAGE_EXECUTE_READWRITE, + &oldProtection); + // tsh_DeprotectedAddresses[location] = {length, oldProtection}; } // Patch a string of bytes by deprotecting and then overwriting -void tsh_PatchBytes(ADDR length, ADDR location, BYTE* repl) { - tsh_DeprotectAddress(length, location); - memcpy((void*)location, (void*)repl, (size_t)length); +void tsh_PatchBytes(ADDR length, ADDR location, BYTE *repl) { + tsh_DeprotectAddress(length, location); + memcpy((void *)location, (void *)repl, (size_t)length); } void tsh_PatchByte(ADDR location, BYTE value) { - tsh_PatchBytes(location, 1, &value); + tsh_PatchBytes(location, 1, &value); } void tsh_ReplaceInt(ADDR addr, int rval) { - tsh_PatchBytes(4, addr, (BYTE*)(&rval)); + tsh_PatchBytes(4, addr, (BYTE *)(&rval)); } -int tsh_i_CallOffset(ADDR instr, ADDR func) { - return func - (instr+4); -} +int tsh_i_CallOffset(ADDR instr, ADDR func) { return func - (instr + 4); } void tsh_i_ReplaceCall(ADDR instr, ADDR target) { - tsh_ReplaceInt(instr, tsh_i_CallOffset(instr, target)); + tsh_ReplaceInt(instr, tsh_i_CallOffset(instr, target)); } void tsh_i_PatchCopy(ADDR dest, ADDR src, unsigned int len) { - for(unsigned int i=0; i bool: success -#define BlHooksInit() if(!tsh_InitInternal()) { BlPrintf("BlHooksInit failed"); return false; } +#define BlHooksInit() \ + if (!tsh_InitInternal()) { \ + BlPrintf("BlHooksInit failed"); \ + return false; \ + } // BlHooksDeinit() -> bool: success -#define BlHooksDeinit() if(!tsh_DeinitInternal()) { BlPrintf("BlHooksDeinit failed"); return false; } - +#define BlHooksDeinit() \ + if (!tsh_DeinitInternal()) { \ + BlPrintf("BlHooksDeinit failed"); \ + return false; \ + } // Scanned structures -BlFunctionDefExtern(void, , tsh_BlPrintf, const char*, ...); - +BlFunctionDefExtern(void, , tsh_BlPrintf, const char *, ...); #endif diff --git a/src/bllua4.cpp b/src/bllua4.cpp index c8955fe..d5acac0 100644 --- a/src/bllua4.cpp +++ b/src/bllua4.cpp @@ -2,16 +2,19 @@ // Includes +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif #include #include -#include "lua.hpp" -#include "BlHooks.cpp" #include "BlFuncs.cpp" +#include "BlHooks.cpp" +#include "lua.hpp" #include "luainterp.cpp" #include "lualibts.cpp" -lua_State* gL; +lua_State *gL; #include "tsliblua.cpp" // Global variables @@ -19,87 +22,92 @@ lua_State* gL; // Setup // Hack to encode the contents of text files as static strings -#define INCLUDE_BIN(varname, filename) \ - asm("_" #varname ": .incbin \"" filename "\""); \ - asm(".byte 0"); \ - extern char varname[]; +#define INCLUDE_BIN(varname, filename) \ + asm("_" #varname ": .incbin \"" filename "\""); \ + asm(".byte 0"); \ + extern char varname[]; INCLUDE_BIN(bll_fileLuaEnvSafe, "lua-env-safe.lua"); -INCLUDE_BIN(bll_fileLuaEnv , "lua-env.lua"); -INCLUDE_BIN(bll_fileTsEnv , "ts-env.cs" ); -INCLUDE_BIN(bll_fileLuaStd , "util/std.lua"); -INCLUDE_BIN(bll_fileLuaVector , "util/vector.lua"); -INCLUDE_BIN(bll_fileLuaLibts , "util/libts-lua.lua"); -INCLUDE_BIN(bll_fileTsLibts , "util/libts-ts.cs"); -INCLUDE_BIN(bll_fileLuaLibbl , "util/libbl.lua" ); -INCLUDE_BIN(bll_fileLuaLibblTypes , "util/libbl-types.lua"); +INCLUDE_BIN(bll_fileLuaEnv, "lua-env.lua"); +INCLUDE_BIN(bll_fileTsEnv, "ts-env.cs"); +INCLUDE_BIN(bll_fileLuaStd, "util/std.lua"); +INCLUDE_BIN(bll_fileLuaVector, "util/vector.lua"); +INCLUDE_BIN(bll_fileLuaLibts, "util/libts-lua.lua"); +INCLUDE_BIN(bll_fileTsLibts, "util/libts-ts.cs"); +INCLUDE_BIN(bll_fileLuaLibbl, "util/libbl.lua"); +INCLUDE_BIN(bll_fileLuaLibblTypes, "util/libbl-types.lua"); INCLUDE_BIN(bll_fileTsLibblSupport, "util/libbl-support.cs"); -INCLUDE_BIN(bll_fileLoadaddons , "util/loadaddons.cs"); +INCLUDE_BIN(bll_fileLoadaddons, "util/loadaddons.cs"); -#define BLL_LOAD_LUA(lstate, vname) \ - if(!bll_LuaEval(lstate, vname)) { \ - BlPrintf(" Error executing " #vname); \ - return false; \ - } +#define BLL_LOAD_LUA(lstate, vname) \ + if (!bll_LuaEval(lstate, vname)) { \ + BlPrintf(" Error executing " #vname); \ + return false; \ + } bool init() { - BlHooksInit(); - BlPrintf("BlockLua: Loading"); - - BlFuncsInit(); - - // Initialize Lua environment - gL = lua_open(); - luaL_openlibs(gL); - - // Expose TS API to Lua - llibbl_init(gL); - - // Set up Lua environment - BLL_LOAD_LUA(gL, bll_fileLuaEnv); - #ifndef BLLUA_UNSAFE - BLL_LOAD_LUA(gL, bll_fileLuaEnvSafe); - #endif - - // Expose Lua API to TS - BlAddFunction(NULL, NULL, "_bllua_luacall", bll_ts_luacall, "LuaCall(name, ...) - Call Lua function and return result", 2, 20); - BlEval(bll_fileTsEnv); - - // Load utilities - BLL_LOAD_LUA(gL, bll_fileLuaStd); - BLL_LOAD_LUA(gL, bll_fileLuaVector); - BLL_LOAD_LUA(gL, bll_fileLuaLibts); - BlEval(bll_fileTsLibts); - BLL_LOAD_LUA(gL, bll_fileLuaLibbl); - BLL_LOAD_LUA(gL, bll_fileLuaLibblTypes); - BlEval(bll_fileTsLibblSupport); - BlEval(bll_fileLoadaddons); - - BlEval("$_bllua_active = 1;"); - - BlPrintf(" BlockLua: Done Loading"); - return true; + BlHooksInit(); + BlPrintf("BlockLua: Loading"); + + BlFuncsInit(); + + // Initialize Lua environment + gL = lua_open(); + luaL_openlibs(gL); + + // Expose TS API to Lua + llibbl_init(gL); + + // Set up Lua environment + BLL_LOAD_LUA(gL, bll_fileLuaEnv); +#ifndef BLLUA_UNSAFE + BLL_LOAD_LUA(gL, bll_fileLuaEnvSafe); +#endif + + // Expose Lua API to TS + BlAddFunction(NULL, NULL, "_bllua_luacall", bll_ts_luacall, + "LuaCall(name, ...) - Call Lua function and return result", 2, + 20); + BlEval(bll_fileTsEnv); + + // Load utilities + BLL_LOAD_LUA(gL, bll_fileLuaStd); + BLL_LOAD_LUA(gL, bll_fileLuaVector); + BLL_LOAD_LUA(gL, bll_fileLuaLibts); + BlEval(bll_fileTsLibts); + BLL_LOAD_LUA(gL, bll_fileLuaLibbl); + BLL_LOAD_LUA(gL, bll_fileLuaLibblTypes); + BlEval(bll_fileTsLibblSupport); + BlEval(bll_fileLoadaddons); + + BlEval("$_bllua_active = 1;"); + + BlPrintf(" BlockLua: Done Loading"); + return true; } bool deinit() { - BlPrintf("BlockLua: Unloading"); - - BlEval("deactivatePackage(_bllua_main);"); - BlEval("$_bllua_active = 0;"); - bll_LuaEval(gL, "for _,f in pairs(_bllua_on_unload) do f() end"); - - lua_close(gL); - - BlHooksDeinit(); - BlFuncsDeinit(); - - BlPrintf(" BlockLua: Done Unloading"); - return true; + BlPrintf("BlockLua: Unloading"); + + BlEval("deactivatePackage(_bllua_main);"); + BlEval("$_bllua_active = 0;"); + bll_LuaEval(gL, "for _,f in pairs(_bllua_on_unload) do f() end"); + + lua_close(gL); + + BlHooksDeinit(); + BlFuncsDeinit(); + + BlPrintf(" BlockLua: Done Unloading"); + return true; } -bool __stdcall DllMain(HINSTANCE hinstance, DWORD reason, void* reserved) { - switch(reason) { - case DLL_PROCESS_ATTACH: return init(); - case DLL_PROCESS_DETACH: return deinit(); - default : return true; - } +bool __stdcall DllMain(HINSTANCE hinstance, DWORD reason, void *reserved) { + switch (reason) { + case DLL_PROCESS_ATTACH: + return init(); + case DLL_PROCESS_DETACH: + return deinit(); + default: + return true; + } } diff --git a/src/luainterp.cpp b/src/luainterp.cpp index 86f22a6..a202f6a 100644 --- a/src/luainterp.cpp +++ b/src/luainterp.cpp @@ -1,68 +1,78 @@ // Handle errors with a Lua function, defined in lua-env.lua +#include "luainterp.hpp" +#include "BlHooks.hpp" +#include "lauxlib.h" +#include "lua.h" +#include int bll_error_handler(lua_State *L) { - lua_getfield(L, LUA_GLOBALSINDEX, "_bllua_on_error"); - if (!lua_isfunction(L, -1)) { - BlPrintf(" Lua error handler: _bllua_on_error not defined."); - lua_pop(L, 1); - return 1; - } - - // move function to before arg - int hpos = lua_gettop(L) - 1; - lua_insert(L, hpos); - - lua_pcall(L, 1, 1, 0); - return 1; + lua_getfield(L, LUA_GLOBALSINDEX, "_bllua_on_error"); + if (!lua_isfunction(L, -1)) { + BlPrintf(" Lua error handler: _bllua_on_error not defined."); + lua_pop(L, 1); + return 1; + } + + // move function to before arg + int hpos = lua_gettop(L) - 1; + lua_insert(L, hpos); + + lua_pcall(L, 1, 1, 0); + return 1; } -int bll_pcall(lua_State* L, int nargs, int nret) { - // calculate stack position for message handler - int hpos = lua_gettop(L) - nargs; - // push custom error message handler - lua_pushcfunction(L, bll_error_handler); - // move it before function and arguments - lua_insert(L, hpos); - // call lua_pcall function with custom handler - int ret = lua_pcall(L, nargs, nret, hpos); - // remove custom error message handler from stack - lua_remove(L, hpos); - return ret; +int bll_pcall(lua_State *L, int nargs, int nret) { + // calculate stack position for message handler + int hpos = lua_gettop(L) - nargs; + // push custom error message handler + lua_pushcfunction(L, bll_error_handler); + // move it before function and arguments + lua_insert(L, hpos); + // call lua_pcall function with custom handler + int ret = lua_pcall(L, nargs, nret, hpos); + // remove custom error message handler from stack + lua_remove(L, hpos); + return ret; } // Display the last Lua error in the BL console -void bll_printError(lua_State* L, const char* operation, const char* item) { - //error_handler(L); - BlPrintf("\x03Lua error: %s", lua_tostring(L, -1)); - BlPrintf("\x03 (%s: %s)", operation, item); - lua_pop(L, 1); +void bll_printError(lua_State *L, const char *operation, const char *item) { + // error_handler(L); + BlPrintf("\x03Lua error: %s", lua_tostring(L, -1)); + BlPrintf("\x03 (%s: %s)", operation, item); + lua_pop(L, 1); } // Eval a string of Lua code -bool bll_LuaEval(lua_State* L, const char* str) { - if(luaL_loadbuffer(L, str, strlen(str), "input") || bll_pcall(L, 0, 1)) { - bll_printError(L, "eval", str); - return false; - } - return true; +bool bll_LuaEval(lua_State *L, const char *str) { + if (luaL_loadbuffer(L, str, strlen(str), "input") || bll_pcall(L, 0, 1)) { + bll_printError(L, "eval", str); + return false; + } + return true; } // Convert a Lua stack entry into a string for providing to TS // Use static buffer to avoid excessive malloc -#define BLL_ARG_COUNT 20 -#define BLL_ARG_MAX 8192 char bll_arg_buffer[BLL_ARG_COUNT][BLL_ARG_MAX]; -bool bll_toarg(lua_State* L, char* buf, int i, bool err) { - if(lua_isstring(L, i)) { - const char* str = lua_tostring(L, i); - if(strlen(str) >= BLL_ARG_MAX) { - if(err) luaL_error(L, "argument to TS is too long - max length is 8192"); - return true; - } else { - strcpy(buf, str); - return false; - } - } else { - if(err) luaL_error(L, "argument to TS must be a string"); - return true; - } +bool bll_toarg(lua_State *L, char *buf, int i, bool err) { + if (lua_isstring(L, i)) { + const char *str = lua_tostring(L, i); + if (strlen(str) >= BLL_ARG_MAX) { + if (err) + luaL_error(L, "argument to TS is too long - max length is 8192"); + return true; + } else { +#ifdef _MSC_VER + strncpy_s(buf, BLL_ARG_MAX, str, _TRUNCATE); +#else + strncpy(buf, str, BLL_ARG_MAX - 1); + buf[BLL_ARG_MAX - 1] = '\0'; +#endif + return false; + } + } else { + if (err) + luaL_error(L, "argument to TS must be a string"); + return true; + } } diff --git a/src/luainterp.hpp b/src/luainterp.hpp new file mode 100644 index 0000000..e672ca5 --- /dev/null +++ b/src/luainterp.hpp @@ -0,0 +1,16 @@ +// Shared declarations for Lua <-> TS argument handling +#ifndef _H_LUAINTERP_SHARED +#define _H_LUAINTERP_SHARED + +#include "lua.h" +#define BLL_ARG_COUNT 20 +#define BLL_ARG_MAX 8192 + +extern char bll_arg_buffer[BLL_ARG_COUNT][BLL_ARG_MAX]; +bool bll_toarg(lua_State *L, char *buf, int i, bool err); +int bll_pcall(lua_State *L, int nargs, int nret); +void bll_printError(lua_State *L, const char *operation, const char *item); + +extern lua_State *gL; + +#endif diff --git a/src/lualibts.cpp b/src/lualibts.cpp index ee90a47..7283c70 100644 --- a/src/lualibts.cpp +++ b/src/lualibts.cpp @@ -1,159 +1,303 @@ -//run ../compile +// run ../compile // TS -> Lua API // Call a TS function from Lua, push the result to Lua stack -int bll_TsCall(lua_State* L, const char* oname, const char* fname, int argc, int ofs) { - ADDR obj = (ADDR)NULL; - if(oname) { - obj = BlObject(oname); - if(!obj) { return luaL_error(L, "Lua->TS call: Object not found"); } - } - - if(argc > BLL_ARG_COUNT) { return luaL_error(L, "Lua->TS call: Too many arguments (Max is 19)"); } - - char* argv[BLL_ARG_COUNT]; - for(int i=0; iTS object call: Too many arguments (Max is 19)"); - } - } else { - switch(argc) { - case 0: res = BlCall(fname); break; - case 1: res = BlCall(fname, argv[0]); break; - case 2: res = BlCall(fname, argv[0], argv[1]); break; - case 3: res = BlCall(fname, argv[0], argv[1], argv[2]); break; - case 4: res = BlCall(fname, argv[0], argv[1], argv[2], argv[3]); break; - case 5: res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4]); break; - case 6: res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]); break; - case 7: res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]); break; - case 8: res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]); break; - case 9: res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]); break; - case 10: res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]); break; - case 11: res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10]); break; - case 12: res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11]); break; - case 13: res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12]); break; - case 14: res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13]); break; - case 15: res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], argv[14]); break; - case 16: res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], argv[14], argv[15]); break; - case 17: res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], argv[14], argv[15], argv[16]); break; - case 18: res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], argv[14], argv[15], argv[16], argv[17]); break; - case 19: res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], argv[14], argv[15], argv[16], argv[17], argv[18]); break; - default: res = ""; luaL_error(L, "Lua->TS call: Too many arguments (Max is 19)"); - } - } - - lua_pushstring(L, res); - - return 1; +#include "BlFuncs.hpp" +#include "BlHooks.hpp" +#include "lauxlib.h" +#include "lua.h" +#include "luainterp.hpp" +int bll_TsCall(lua_State *L, const char *oname, const char *fname, int argc, + int ofs) { + ADDR obj = (ADDR)NULL; + if (oname) { + obj = BlObject(oname); + if (!obj) { + return luaL_error(L, "Lua->TS call: Object not found"); + } + } + + if (argc > BLL_ARG_COUNT) { + return luaL_error(L, "Lua->TS call: Too many arguments (Max is 19)"); + } + + char *argv[BLL_ARG_COUNT]; + for (int i = 0; i < argc; i++) { + char *argbuf = bll_arg_buffer[i]; + argv[i] = argbuf; + bll_toarg(L, argbuf, i + ofs + 1, true); + } + + // /:^| / + const char *res; + if (obj) { + switch (argc) { + case 0: + res = BlCallObj(obj, fname); + break; // no idea why this happens sometimes, it shouldnt be possible + case 1: + res = BlCallObj(obj, fname); + break; + case 2: + res = BlCallObj(obj, fname, argv[0]); + break; + case 3: + res = BlCallObj(obj, fname, argv[0], argv[1]); + break; + case 4: + res = BlCallObj(obj, fname, argv[0], argv[1], argv[2]); + break; + case 5: + res = BlCallObj(obj, fname, argv[0], argv[1], argv[2], argv[3]); + break; + case 6: + res = BlCallObj(obj, fname, argv[0], argv[1], argv[2], argv[3], argv[4]); + break; + case 7: + res = BlCallObj(obj, fname, argv[0], argv[1], argv[2], argv[3], argv[4], + argv[5]); + break; + case 8: + res = BlCallObj(obj, fname, argv[0], argv[1], argv[2], argv[3], argv[4], + argv[5], argv[6]); + break; + case 9: + res = BlCallObj(obj, fname, argv[0], argv[1], argv[2], argv[3], argv[4], + argv[5], argv[6], argv[7]); + break; + case 10: + res = BlCallObj(obj, fname, argv[0], argv[1], argv[2], argv[3], argv[4], + argv[5], argv[6], argv[7], argv[8]); + break; + case 11: + res = BlCallObj(obj, fname, argv[0], argv[1], argv[2], argv[3], argv[4], + argv[5], argv[6], argv[7], argv[8], argv[9]); + break; + case 12: + res = BlCallObj(obj, fname, argv[0], argv[1], argv[2], argv[3], argv[4], + argv[5], argv[6], argv[7], argv[8], argv[9], argv[10]); + break; + case 13: + res = BlCallObj(obj, fname, argv[0], argv[1], argv[2], argv[3], argv[4], + argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], + argv[11]); + break; + case 14: + res = BlCallObj(obj, fname, argv[0], argv[1], argv[2], argv[3], argv[4], + argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], + argv[11], argv[12]); + break; + case 15: + res = BlCallObj(obj, fname, argv[0], argv[1], argv[2], argv[3], argv[4], + argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], + argv[11], argv[12], argv[13]); + break; + case 16: + res = BlCallObj(obj, fname, argv[0], argv[1], argv[2], argv[3], argv[4], + argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], + argv[11], argv[12], argv[13], argv[14]); + break; + case 17: + res = BlCallObj(obj, fname, argv[0], argv[1], argv[2], argv[3], argv[4], + argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], + argv[11], argv[12], argv[13], argv[14], argv[15]); + break; + case 18: + res = + BlCallObj(obj, fname, argv[0], argv[1], argv[2], argv[3], argv[4], + argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], + argv[11], argv[12], argv[13], argv[14], argv[15], argv[16]); + break; + case 19: + res = BlCallObj(obj, fname, argv[0], argv[1], argv[2], argv[3], argv[4], + argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], + argv[11], argv[12], argv[13], argv[14], argv[15], + argv[16], argv[17]); + break; + case 20: + res = BlCallObj(obj, fname, argv[0], argv[1], argv[2], argv[3], argv[4], + argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], + argv[11], argv[12], argv[13], argv[14], argv[15], + argv[16], argv[17], argv[18]); + break; + default: + res = ""; + luaL_error(L, "Lua->TS object call: Too many arguments (Max is 19)"); + } + } else { + switch (argc) { + case 0: + res = BlCall(fname); + break; + case 1: + res = BlCall(fname, argv[0]); + break; + case 2: + res = BlCall(fname, argv[0], argv[1]); + break; + case 3: + res = BlCall(fname, argv[0], argv[1], argv[2]); + break; + case 4: + res = BlCall(fname, argv[0], argv[1], argv[2], argv[3]); + break; + case 5: + res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4]); + break; + case 6: + res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]); + break; + case 7: + res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], + argv[6]); + break; + case 8: + res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], + argv[6], argv[7]); + break; + case 9: + res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], + argv[6], argv[7], argv[8]); + break; + case 10: + res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], + argv[6], argv[7], argv[8], argv[9]); + break; + case 11: + res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], + argv[6], argv[7], argv[8], argv[9], argv[10]); + break; + case 12: + res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], + argv[6], argv[7], argv[8], argv[9], argv[10], argv[11]); + break; + case 13: + res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], + argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], + argv[12]); + break; + case 14: + res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], + argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], + argv[12], argv[13]); + break; + case 15: + res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], + argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], + argv[12], argv[13], argv[14]); + break; + case 16: + res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], + argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], + argv[12], argv[13], argv[14], argv[15]); + break; + case 17: + res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], + argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], + argv[12], argv[13], argv[14], argv[15], argv[16]); + break; + case 18: + res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], + argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], + argv[12], argv[13], argv[14], argv[15], argv[16], argv[17]); + break; + case 19: + res = BlCall(fname, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], + argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], + argv[12], argv[13], argv[14], argv[15], argv[16], argv[17], + argv[18]); + break; + default: + res = ""; + luaL_error(L, "Lua->TS call: Too many arguments (Max is 19)"); + } + } + + lua_pushstring(L, res); + + return 1; } // Lua lib function: ts.call -int bll_lua_tscall(lua_State* L) { - int argc = lua_gettop(L)-1; // number of arguments after function name - if(argc < 0) return luaL_error(L, "_bllua_ts.call: Must provide a function name"); - - const char* fname = luaL_checkstring(L, 1); - - return bll_TsCall(L, NULL, fname, argc, 1); +int bll_lua_tscall(lua_State *L) { + int argc = lua_gettop(L) - 1; // number of arguments after function name + if (argc < 0) + return luaL_error(L, "_bllua_ts.call: Must provide a function name"); + + const char *fname = luaL_checkstring(L, 1); + + return bll_TsCall(L, NULL, fname, argc, 1); } // Lua lib function: ts.callobj -int bll_lua_tscallobj(lua_State* L) { - int argc = lua_gettop(L)-2; // number of arguments after function name and object? - if(argc < 0) return luaL_error(L, "_bllua_ts.callobj: Must provide an object and function name"); - - const char* oname = luaL_checkstring(L, 1); - const char* fname = luaL_checkstring(L, 2); - - return bll_TsCall(L, oname, fname, argc, 2); +int bll_lua_tscallobj(lua_State *L) { + int argc = + lua_gettop(L) - 2; // number of arguments after function name and object? + if (argc < 0) + return luaL_error( + L, "_bllua_ts.callobj: Must provide an object and function name"); + + const char *oname = luaL_checkstring(L, 1); + const char *fname = luaL_checkstring(L, 2); + + return bll_TsCall(L, oname, fname, argc, 2); } // Lua lib function: ts.getvar -int bll_lua_tsgetvar(lua_State* L) { - const char* vname = luaL_checkstring(L, 1); - - const char* var = BlGetVar(vname); - lua_pushstring(L, var); - return 1; +int bll_lua_tsgetvar(lua_State *L) { + const char *vname = luaL_checkstring(L, 1); + + const char *var = BlGetVar(vname); + lua_pushstring(L, var); + return 1; } // Lua lib function: ts.getfield -int bll_lua_tsgetfield(lua_State* L) { - const char* oname = luaL_checkstring(L, 1); - const char* vname = luaL_checkstring(L, 2); - ADDR obj = BlObject(oname); - if(!obj) { return luaL_error(L, "_bllua_ts.getfield: Object not found"); } - - const char* val = BlGetField(obj, vname, NULL); - lua_pushstring(L, val); - return 1; +int bll_lua_tsgetfield(lua_State *L) { + const char *oname = luaL_checkstring(L, 1); + const char *vname = luaL_checkstring(L, 2); + ADDR obj = BlObject(oname); + if (!obj) { + return luaL_error(L, "_bllua_ts.getfield: Object not found"); + } + + const char *val = BlGetField(obj, vname, NULL); + lua_pushstring(L, val); + return 1; } // Lua lib function: ts.setfield -int bll_lua_tssetfield(lua_State* L) { - const char* oname = luaL_checkstring(L, 1); - const char* vname = luaL_checkstring(L, 2); - const char* val = luaL_checkstring(L, 3); - ADDR obj = BlObject(oname); - if(!obj) { return luaL_error(L, "_bllua_ts.setfield: Object not found"); } - - BlSetField(obj, vname, NULL, val); - return 0; +int bll_lua_tssetfield(lua_State *L) { + const char *oname = luaL_checkstring(L, 1); + const char *vname = luaL_checkstring(L, 2); + const char *val = luaL_checkstring(L, 3); + ADDR obj = BlObject(oname); + if (!obj) { + return luaL_error(L, "_bllua_ts.setfield: Object not found"); + } + + BlSetField(obj, vname, NULL, val); + return 0; } // Lua lib function: ts.eval -int bll_lua_tseval(lua_State* L) { - const char* str = luaL_checkstring(L, 1); - const char* res = BlEval(str); - lua_pushstring(L, res); - return 1; +int bll_lua_tseval(lua_State *L) { + const char *str = luaL_checkstring(L, 1); + const char *res = BlEval(str); + lua_pushstring(L, res); + return 1; } // Lua lib function: ts.echo // Print to BL console - used in Lua print implementation -int bll_lua_tsecho(lua_State* L) { - const char* str = luaL_checkstring(L, 1); - BlPrintf("%s", str); - return 0; +int bll_lua_tsecho(lua_State *L) { + const char *str = luaL_checkstring(L, 1); + BlPrintf("%s", str); + return 0; } const luaL_Reg bll_lua_reg[] = { - {"call" , bll_lua_tscall }, - {"callobj" , bll_lua_tscallobj }, - {"getvar" , bll_lua_tsgetvar }, - {"getfield", bll_lua_tsgetfield}, - {"setfield", bll_lua_tssetfield}, - {"eval" , bll_lua_tseval }, - {"echo" , bll_lua_tsecho }, - {NULL, NULL}, + {"call", bll_lua_tscall}, {"callobj", bll_lua_tscallobj}, + {"getvar", bll_lua_tsgetvar}, {"getfield", bll_lua_tsgetfield}, + {"setfield", bll_lua_tssetfield}, {"eval", bll_lua_tseval}, + {"echo", bll_lua_tsecho}, {NULL, NULL}, }; -void llibbl_init(lua_State* L) { - luaL_register(L, "_bllua_ts", bll_lua_reg); -} +void llibbl_init(lua_State *L) { luaL_register(L, "_bllua_ts", bll_lua_reg); } diff --git a/src/tsliblua.cpp b/src/tsliblua.cpp index 03fc03d..1448d1f 100644 --- a/src/tsliblua.cpp +++ b/src/tsliblua.cpp @@ -1,25 +1,32 @@ -// 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