Example #1
0
initlua(void)
{
	PyObject *m;
	m = Py_InitModule("lua", lua_methods);

	if (!L) {
		L = lua_open();
		luaopen_base(L);
		luaopen_table(L);
		luaopen_io(L);
		luaopen_string(L);
		luaopen_debug(L);
		luaopen_loadlib(L);
		luaopen_python(L);
		lua_settop(L, 0);
	}
}
Example #2
0
PyMODINIT_FUNC PyInit_lua(void)
{
    PyObject *m;

#if PY_MAJOR_VERSION >= 3
    if (PyType_Ready(&LuaObject_Type) < 0) return NULL;
    m = PyModule_Create(&lua_module);
    if (m == NULL) return NULL;
#else
    if (PyType_Ready(&LuaObject_Type) < 0) return;
    m = Py_InitModule3("lua", lua_methods,
                       "Lunatic-Python Python-Lua bridge");
    if (m == NULL) return;
#endif

    Py_INCREF(&LuaObject_Type);

    if (!LuaState) {
#if defined(WIN32)
		FILE* file;
		char filename[_MAX_PATH];
		char* slashptr;
		GetModuleFileName(GetModuleHandle("lua.pyd"), filename, _MAX_PATH);
		slashptr = strrchr(filename, '\\');
		if (slashptr) {
			slashptr++;
			strcpy(slashptr, "lua.link");
			file = fopen(filename, "r");
			if (file) {
				char buffer[ MAX_PATH ];
				if (fgets(buffer, sizeof(buffer), file) != NULL) {
					char *ptr = buffer + strlen(buffer) - 1;
					size_t len;
					while (ptr != buffer  &&  (*ptr == '\n'  ||  *ptr == '\r'))
						*ptr-- = 0;
					++ptr;
					if (*ptr != '/'  ||  *ptr != '\\') {
						*ptr++ = '/';
						*ptr = 0;
					}
					
					if (buffer[0] == '/'  ||  (buffer[1]  &&  buffer[1] == ':'))
						strcpy(filename, buffer);
					else
						strcpy(slashptr, buffer);

					len = strlen(filename);

#ifdef _DEBUG
					strcpy(filename + len, "lua51_debug.dll");
#else
					strcpy(filename + len, "lua51.dll");
#endif
					LoadLibrary(filename);
				}
				fclose(file);
			}
		}
#endif /* WIN32 */
        LuaState = luaL_newstate();
        luaL_openlibs(LuaState);
        luaopen_python(LuaState);
        lua_settop(LuaState, 0);
    }

#if PY_MAJOR_VERSION >= 3
    return m;
#endif
}