Exemple #1
0
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);
}
Exemple #2
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);
        }
    }
}