int luaopen_tek_lib_support(lua_State *L) { tek_lua_register(L, TEK_LIB_SUPPORT_NAME, tek_lib_support_funcs, 0); lua_pushstring(L, TEK_LIB_SUPPORT_VERSION); lua_setfield(L, -2, "_VERSION"); return 1; }
TMODENTRY int luaopen_tek_lib_exec(lua_State *L) { struct TExecBase *TExecBase; struct LuaExecTask *lexec; TTAGITEM tags[2]; luaL_newmetatable(L, TEK_LIB_EXEC_CLASSNAME); tek_lua_register(L, NULL, tek_lib_exec_methods, 0); /* execmeta */ #if defined(ENABLE_TASKS) luaL_newmetatable(L, TEK_LIB_TASK_CLASSNAME); /* execmeta, taskmeta */ lua_pushvalue(L, -2); /* execmeta, taskmeta, execmeta */ tek_lua_register(L, NULL, tek_lib_exec_child_methods, 1); lua_pushvalue(L, -1); /* execmeta, taskmeta, taskmeta */ lua_setfield(L, -2, "__index"); lua_pop(L, 1); /* execmeta */ #endif lexec = (struct LuaExecTask *)lua_newuserdata(L, sizeof(struct LuaExecTask)); /* execmeta, luaexec */ lexec->exec = TNULL; lua_pushvalue(L, -1); /* execmeta, luaexec, luaexec */ lua_pushvalue(L, -3); /* execmeta, luaexec, luaexec, execmeta */ tek_lua_register(L, "tek.lib.exec", tek_lib_exec_funcs, 2); /* execmeta, luaexec, libtab */ lua_pushvalue(L, -2); /* execmeta, luaexec, libtab, libtab */ lua_pushvalue(L, -4); /* execmeta, luaexec, libtab, libtab, execmeta */ lua_remove(L, -4); lua_remove(L, -4); /* libtab, libtab, execmeta */ lua_setmetatable(L, -2); /* libtab, libtab */ lua_setfield(L, -2, "base"); /* libtab */ tags[0].tti_Tag = TExecBase_ModInit; tags[0].tti_Value = (TTAG) tek_lib_exec_initmodules; tags[1].tti_Tag = TTAG_DONE; lexec->task = TEKCreate(tags); if (lexec->task == TNULL) luaL_error(L, "Failed to initialize TEKlib"); lexec->exec = TExecBase = (struct TExecBase *)TGetExecBase(lexec->task); #if defined(ENABLE_TASKS) if (!tek_lib_exec_init_link_to_parent(L, lexec)) { lua_pop(L, 1); return 0; } #endif return 1; }