void ls_lua_init() { LIST *luaSharedLibrary; #ifdef OS_NT HINSTANCE handle = NULL; #else void* handle = NULL; #endif if (L) return; #ifdef _DEBUG luaSharedLibrary = var_get("LUA_SHARED_LIBRARY.DEBUG"); #else luaSharedLibrary = var_get("LUA_SHARED_LIBRARY.RELEASE"); #endif if (luaSharedLibrary) { #ifdef OS_NT handle = LoadLibrary(luaSharedLibrary->string); #else handle = dlopen(luaSharedLibrary->string, RTLD_LAZY | RTLD_GLOBAL); #endif } if (!handle) { char fileName[4096]; getprocesspath(fileName, 4096); #ifdef OS_NT #ifdef _DEBUG strcat(fileName, "/lua/luaplus51-1200_debug.dll"); #else strcat(fileName, "/lua/luaplus51-1200.dll"); #endif handle = LoadLibrary(fileName); #else #ifdef _DEBUG strcat(fileName, "/lua/luaplus51-1200_debug.so"); #else strcat(fileName, "/lua/luaplus51-1200.so"); #endif handle = dlopen(fileName, RTLD_LAZY | RTLD_GLOBAL); #endif if (!handle) { printf("jam: Unable to find the LuaPlus shared library.\n"); exit(EXITBAD); } } ls_lua_close = (void (*)(ls_lua_State *))ls_lua_loadsymbol(handle, "lua_close"); ls_lua_gettop = (int (*)(ls_lua_State *))ls_lua_loadsymbol(handle, "lua_gettop"); ls_lua_settop = (void (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_settop"); ls_lua_pushvalue = (void (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_pushvalue"); ls_lua_isnumber = (int (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_isnumber"); ls_lua_isstring = (int (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_isstring"); ls_lua_type = (int (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_type"); ls_lua_tonumber = (ls_lua_Number (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_tonumber"); ls_lua_toboolean = (int (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_toboolean"); ls_lua_tolstring = (const char *(*)(ls_lua_State *, int, size_t *))ls_lua_loadsymbol(handle, "lua_tolstring"); ls_lua_objlen = (size_t (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_objlen"); ls_lua_pushnil = (void (*) (ls_lua_State *))ls_lua_loadsymbol(handle, "lua_pushnil"); ls_lua_pushnumber = (void (*) (ls_lua_State *, ls_lua_Number))ls_lua_loadsymbol(handle, "lua_pushnumber"); ls_lua_pushinteger = (void (*) (ls_lua_State *, ls_lua_Integer))ls_lua_loadsymbol(handle, "lua_pushinteger"); ls_lua_pushstring = (void (*) (ls_lua_State *, const char *))ls_lua_loadsymbol(handle, "lua_pushstring"); ls_lua_pushcclosure = (void (*) (ls_lua_State *, ls_lua_CFunction, int))ls_lua_loadsymbol(handle, "lua_pushcclosure"); ls_lua_pushboolean = (void (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_pushboolean"); ls_lua_gettable = (void (*) (ls_lua_State *, int id))ls_lua_loadsymbol(handle, "lua_gettable"); ls_lua_getfield = (void (*)(ls_lua_State *, int, const char *))ls_lua_loadsymbol(handle, "lua_getfield"); ls_lua_rawgeti = (void (*) (ls_lua_State *, int, int))ls_lua_loadsymbol(handle, "lua_rawgeti"); ls_lua_createtable = (void (*)(ls_lua_State *, int, int))ls_lua_loadsymbol(handle, "lua_createtable"); ls_lua_settable = (void (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_settable"); ls_lua_setfield = (void (*)(ls_lua_State *, int, const char *))ls_lua_loadsymbol(handle, "lua_setfield"); ls_lua_rawseti = (void (*)(ls_lua_State *, int, int))ls_lua_loadsymbol(handle, "lua_rawseti"); ls_lua_pcall = (int (*)(ls_lua_State *, int, int, int))ls_lua_loadsymbol(handle, "lua_pcall"); ls_lua_cpcall = (int (*)(ls_lua_State *, ls_lua_CFunction, void *))ls_lua_loadsymbol(handle, "lua_cpcall"); ls_lua_next = (int (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_next"); ls_luaL_openlibs = (void (*)(ls_lua_State *))ls_lua_loadsymbol(handle, "luaL_openlibs"); ls_luaL_loadstring = (int (*)(ls_lua_State *, const char *))ls_lua_loadsymbol(handle, "luaL_loadstring"); ls_luaL_loadfile = (int (*)(ls_lua_State *, const char *))ls_lua_loadsymbol(handle, "luaL_loadfile"); ls_luaL_newstate = (ls_lua_State *(*)(void))ls_lua_loadsymbol(handle, "luaL_newstate"); ls_luaL_ref = (int (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "luaL_ref"); ls_luaL_unref = (void (*)(ls_lua_State *, int, int))ls_lua_loadsymbol(handle, "luaL_unref"); L = ls_luaL_newstate(); ls_lua_cpcall(L, &pmain, 0); }
void ls_lua_init() { char fileName[4096]; LIST *luaSharedLibrary; #ifdef OS_NT HINSTANCE handle = NULL; #else void* handle = NULL; #endif if (L) return; #ifdef _DEBUG luaSharedLibrary = var_get("LUA_SHARED_LIBRARY.DEBUG"); #else luaSharedLibrary = var_get("LUA_SHARED_LIBRARY.RELEASE"); #endif if (list_first(luaSharedLibrary)) { strcpy(fileName, list_value(list_first(luaSharedLibrary))); handle = ls_lua_loadlibrary(fileName); } if (!handle) { getprocesspath(fileName, 4096); #ifdef OS_NT #ifdef _DEBUG strcat(fileName, "/lua/lua53_debug.dll"); #else strcat(fileName, "/lua/lua53.dll"); #endif #else #ifdef _DEBUG strcat(fileName, "/lua/liblua53_debug.so"); #else strcat(fileName, "/lua/liblua53.so"); #endif #endif handle = ls_lua_loadlibrary(fileName); if (!handle) { printf("jam: Unable to find the LuaPlus shared library.\n"); exit(EXITBAD); } } ls_lua_close = (void (*)(ls_lua_State *))ls_lua_loadsymbol(handle, "lua_close"); ls_lua_gettop = (int (*)(ls_lua_State *))ls_lua_loadsymbol(handle, "lua_gettop"); ls_lua_settop = (void (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_settop"); ls_lua_pushvalue = (void (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_pushvalue"); ls_lua_rotate = (void (*)(ls_lua_State *, int, int))ls_lua_loadsymbol(handle, "lua_rotate"); ls_lua_isnumber = (int (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_isnumber"); ls_lua_isstring = (int (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_isstring"); ls_lua_isuserdata = (int (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_isuserdata"); ls_lua_type = (int (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_type"); ls_lua_tonumberx = (ls_lua_Number (*)(ls_lua_State *, int, int *))ls_lua_loadsymbol(handle, "lua_tonumberx"); ls_lua_toboolean = (int (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_toboolean"); ls_lua_tolstring = (const char *(*)(ls_lua_State *, int, size_t *))ls_lua_loadsymbol(handle, "lua_tolstring"); ls_lua_rawlen = (size_t (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_rawlen"); ls_lua_pushnil = (void (*) (ls_lua_State *))ls_lua_loadsymbol(handle, "lua_pushnil"); ls_lua_pushnumber = (void (*) (ls_lua_State *, ls_lua_Number))ls_lua_loadsymbol(handle, "lua_pushnumber"); ls_lua_pushinteger = (void (*) (ls_lua_State *, ls_lua_Integer))ls_lua_loadsymbol(handle, "lua_pushinteger"); ls_lua_pushstring = (const char *(*) (ls_lua_State *, const char *))ls_lua_loadsymbol(handle, "lua_pushstring"); ls_lua_pushlstring = (const char *(*) (ls_lua_State *, const char *, size_t))ls_lua_loadsymbol(handle, "lua_pushlstring"); ls_lua_pushcclosure = (void (*) (ls_lua_State *, ls_lua_CFunction, int))ls_lua_loadsymbol(handle, "lua_pushcclosure"); ls_lua_pushboolean = (void (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_pushboolean"); ls_lua_getglobal = (void (*) (ls_lua_State *, const char *))ls_lua_loadsymbol(handle, "lua_getglobal"); ls_lua_gettable = (void (*) (ls_lua_State *, int id))ls_lua_loadsymbol(handle, "lua_gettable"); ls_lua_getfield = (void (*)(ls_lua_State *, int, const char *))ls_lua_loadsymbol(handle, "lua_getfield"); ls_lua_rawgeti = (void (*) (ls_lua_State *, int, ls_lua_Integer))ls_lua_loadsymbol(handle, "lua_rawgeti"); ls_lua_createtable = (void (*)(ls_lua_State *, int, int))ls_lua_loadsymbol(handle, "lua_createtable"); ls_lua_setglobal = (void (*)(ls_lua_State *, const char *))ls_lua_loadsymbol(handle, "lua_setglobal"); ls_lua_settable = (void (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_settable"); ls_lua_setfield = (void (*)(ls_lua_State *, int, const char *))ls_lua_loadsymbol(handle, "lua_setfield"); ls_lua_rawseti = (void (*)(ls_lua_State *, int, ls_lua_Integer))ls_lua_loadsymbol(handle, "lua_rawseti"); ls_lua_pcallk = (int (*)(ls_lua_State *, int, int, int, ls_lua_KContext, ls_lua_CFunction))ls_lua_loadsymbol(handle, "lua_pcallk"); ls_lua_next = (int (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "lua_next"); ls_lua_getstack = (int(*)(ls_lua_State *, int, ls_lua_Debug *))ls_lua_loadsymbol(handle, "lua_getstack"); ls_lua_getinfo = (int(*)(ls_lua_State *, const char *, ls_lua_Debug *))ls_lua_loadsymbol(handle, "lua_getinfo"); ls_luaL_openlibs = (void (*)(ls_lua_State *))ls_lua_loadsymbol(handle, "luaL_openlibs"); ls_luaL_loadstring = (int (*)(ls_lua_State *, const char *))ls_lua_loadsymbol(handle, "luaL_loadstring"); ls_luaL_loadfilex = (int (*)(ls_lua_State *, const char *, const char *))ls_lua_loadsymbol(handle, "luaL_loadfilex"); ls_luaL_newstate = (ls_lua_State *(*)(void))ls_lua_loadsymbol(handle, "luaL_newstate"); ls_luaL_ref = (int (*)(ls_lua_State *, int))ls_lua_loadsymbol(handle, "luaL_ref"); ls_luaL_unref = (void (*)(ls_lua_State *, int, int))ls_lua_loadsymbol(handle, "luaL_unref"); L = ls_luaL_newstate(); ls_lua_pushcclosure(L, &pmain, 0); ls_lua_pcall(L, 0, 0, 0); if (globs.lua_debugger) { char* slashPtr; char* backslashPtr; slashPtr = strrchr(fileName, '/'); backslashPtr = strrchr(fileName, '\\'); slashPtr = slashPtr > backslashPtr ? slashPtr : backslashPtr; if (slashPtr) { ++slashPtr; } else { slashPtr = fileName; } #ifdef OS_NT #ifdef _DEBUG strcpy(slashPtr, "lua-tilde.debug.dll"); #else strcpy(slashPtr, "lua-tilde.dll"); #endif #else #ifdef _DEBUG strcpy(slashPtr, "lua-tilde.debug.so"); #else strcpy(slashPtr, "lua-tilde.so"); #endif #endif luaTildeModule = ls_lua_loadlibrary(fileName); if (luaTildeModule) { LuaTildeHost* host; LuaTilde_Command = (LuaTildeHost* (*)(LuaTildeHost*, const char*, void*, void*))ls_lua_loadsymbol(luaTildeModule, "LuaTilde_Command"); host = LuaTilde_Command(NULL, "create", (void*)10000, NULL); LuaTilde_Command(host, "registerstate", "State", L); LuaTilde_Command(host, "waitfordebuggerconnection", NULL, NULL); } } }