From 36621e6be9604517c900adc0d97665e975c2b325 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 22 Aug 2018 13:58:13 +0800 Subject: *update --- src/lua/modules/jin.cpp | 104 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 src/lua/modules/jin.cpp (limited to 'src/lua/modules/jin.cpp') diff --git a/src/lua/modules/jin.cpp b/src/lua/modules/jin.cpp new file mode 100644 index 0000000..a25ec6c --- /dev/null +++ b/src/lua/modules/jin.cpp @@ -0,0 +1,104 @@ +#include "jin.h" +#include "lua/modules/luax.h" +#include "embed/embed.h" + +namespace jin +{ +namespace lua +{ + + extern int luaopen_core(lua_State* L); + extern int luaopen_graphics(lua_State* L); + extern int luaopen_audio(lua_State* L); + extern int luaopen_net(lua_State* L); + extern int luaopen_event(lua_State* L); + extern int luaopen_time(lua_State* L); + extern int luaopen_mouse(lua_State* L); + extern int luaopen_keyboard(lua_State* L); + extern int luaopen_filesystem(lua_State* L); + extern int luaopen_joypad(lua_State* L); + extern int luaopen_math(lua_State* L); + extern int luaopen_thread(lua_State* L); + extern int luaopen_bit(lua_State* L); + + static int l_getversion(lua_State* L) + { + luax_pushstring(L, VERSION); + return 1; + } + + static int l_getAuthor(lua_State* L) + { + luax_pushstring(L, AUTHOR); + return 1; + } + + static int l_getOS(lua_State* L) + { + #ifdef _WIN32 + luax_pushstring(L, "windows"); + #elif defined __unix__ + luax_pushstring(L, "unix"); + #elif defined __APPLE__ + luax_pushstring(L, "macos"); + #endif + return 1; + } + + static int l_revision(lua_State* L) + { + luax_pushnumber(L, REVISION); + return 1; + } + + static const luaL_Reg f[] = { + { "version", l_getversion }, + { "revision", l_revision }, + { "author", l_getAuthor }, + { "os", l_getOS }, + { 0, 0 } + }; + + // submodules + static const luaL_Reg mods[] = { + { "core", luaopen_core }, + { "event", luaopen_event }, + { "graphics", luaopen_graphics }, + { "time", luaopen_time }, + { "mouse", luaopen_mouse }, + { "keyboard", luaopen_keyboard }, + { "filesystem", luaopen_filesystem }, + { "net", luaopen_net }, + { "audio", luaopen_audio }, + { "joypad", luaopen_joypad }, + { "math", luaopen_math }, + { "thread", luaopen_thread }, + { "bit", luaopen_bit }, + { 0, 0 } + }; + + int luaopen_jin(lua_State* L) + { + // jin module is on top of the stack + luax_newlib(L, f); + + // set to global field + luax_justglobal(L, -1, MODULE_NAME); + + // register submodules + for (int i = 0; mods[i].name; ++i) + { + mods[i].func(L); + luax_setfield(L, -2, mods[i].name); + } + + return 1; + } + + void boot(lua_State* L) + { + jin::embed::boot(L); + } + +} // lua +} // jin \ No newline at end of file -- cgit v1.1-26-g67d0