aboutsummaryrefslogtreecommitdiff
path: root/src/libjin-lua/l_jin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin-lua/l_jin.cpp')
-rw-r--r--src/libjin-lua/l_jin.cpp356
1 files changed, 178 insertions, 178 deletions
diff --git a/src/libjin-lua/l_jin.cpp b/src/libjin-lua/l_jin.cpp
index 6a0809a..9972684 100644
--- a/src/libjin-lua/l_jin.cpp
+++ b/src/libjin-lua/l_jin.cpp
@@ -6,182 +6,182 @@
namespace JinEngine
{
- namespace Lua
- {
-
- LUA_IMPLEMENT int l_getversion(lua_State* L)
- {
- luax_pushstring(L, VERSION);
- return 1;
- }
-
- LUA_IMPLEMENT int l_getAuthor(lua_State* L)
- {
- luax_pushstring(L, AUTHOR);
- return 1;
- }
-
- LUA_IMPLEMENT 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;
- }
-
- LUA_IMPLEMENT int l_revision(lua_State* L)
- {
- luax_pushnumber(L, REVISION);
- return 1;
- }
-
- // Register jin module, keep it on the top of stack.
- // The reason why not using luaL_register is because we want register some variables into jin module.
- LUA_EXPORT void open(lua_State* L)
- {
- jin_log_info("Openning jin library.");
-
- luax_globaltable(L, MODULE_NAME);
-
- const luax_Str s[] = {
- { "version", VERSION },
- { "author", AUTHOR },
- { "codename", CODE_NAME },
- { 0, 0 }
- };
- const luax_Num n[] = {
- { "revision", REVISION },
- { 0, 0 }
- };
- // Register values.
- luax_setfieldstrings(L, s);
- luax_setfieldnumbers(L, n);
-
- luax_Reg modules[] = {
- { "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 },
- //{"ai", luaopen_ai },
- { 0, 0 }
- };
-
- // Register sub modules.
- for (int i = 0; modules[i].name; ++i)
- {
- modules[i].func(L);
- luax_setfield(L, -2, modules[i].name);
- }
-
- // Pop jin table.
- luax_pop(L, 1);
-
- jin_log_info("Done.");
- }
-
- // Embed structure.
- struct jin_Embed
- {
- const char* file;
- const char* source;
- };
-
- // Embed scripts.
- #include "scripts/ai/state_machine.lua.h"
- #include "scripts/graphics/graphics.lua.h"
- #include "scripts/keyboard/keyboard.lua.h"
- #include "scripts/mouse/mouse.lua.h"
- #include "scripts/path/path.lua.h"
- #include "scripts/time/time.lua.h"
- #include "scripts/utils/json.lua.h"
- #include "scripts/utils/xml.lua.h"
- #include "scripts/log.lua.h"
- #include "scripts/tiledmap/tiledmap.lua.h"
- #include "scripts/physics/physics.lua.h"
- #include "scripts/audio/audio.lua.h"
-
- #include "scripts/app.lua.h"
-
- // In order.
- static const jin_Embed modules[] = {
- // ai
- { "state_machine.lua", state_machine_lua },
- // keyboard
- { "keyboard.lua", keyboard_lua },
- { "mouse.lua", mouse_lua },
- { "graphics.lua", graphics_lua },
- { "path.lua", path_lua },
- { "time.lua", time_lua },
- { "json.lua", json_lua },
- { "xml.lua", xml_lua },
- { "tiledmap.lua", tiledmap_lua },
- { "physics.lua", physics_lua },
- { "audio.lua", audio_lua },
- //
- { "log.lua", log_lua },
- { 0, 0 }
- };
-
- static const jin_Embed bootscript = { "app.lua", app_lua };
-
- static void embed(lua_State* L)
- {
- jin_log_info("Load embeded scripts.");
- const char* file, *source;
- for (int i = 0; modules[i].file != 0; ++i)
- {
- file = modules[i].file;
- source = modules[i].source;
- jin_log_info("Embed script \"%s\".", file);
- luax_clearstack(L);
- if (luax_loadbuffer(L, source, strlen(source), file) == 0)
- {
- luax_call(L, 0, 0);
- }
- else
- {
- jin_log_error("Embed script \"%s\" failed.", file);
- }
- }
- }
-
- static void run(lua_State* L)
- {
- const char* file, *source;
- file = bootscript.file;
- source = bootscript.source;
- jin_log_info("Run boot script \"%s\".", file);
- luax_clearstack(L);
- if (luax_loadbuffer(L, source, strlen(source), file) == 0)
- {
- luax_call(L, 0, 0);
- }
- }
-
- LUA_EXPORT void boot(lua_State* L, const char* cwd)
- {
- luax_clearstack(L);
- luax_getglobal(L, MODULE_NAME);
- luax_newtable(L);
- luax_setfieldstring(L, "cwd", cwd);
- luax_setfield(L, -2, "args");
- luax_clearstack(L);
- embed(L);
- run(L);
- }
-
- } // namespace Lua
+ namespace Lua
+ {
+
+ LUA_IMPLEMENT int l_getversion(lua_State* L)
+ {
+ luax_pushstring(L, VERSION);
+ return 1;
+ }
+
+ LUA_IMPLEMENT int l_getAuthor(lua_State* L)
+ {
+ luax_pushstring(L, AUTHOR);
+ return 1;
+ }
+
+ LUA_IMPLEMENT 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;
+ }
+
+ LUA_IMPLEMENT int l_revision(lua_State* L)
+ {
+ luax_pushnumber(L, REVISION);
+ return 1;
+ }
+
+ // Register jin module, keep it on the top of stack.
+ // The reason why not using luaL_register is because we want register some variables into jin module.
+ LUA_EXPORT void open(lua_State* L)
+ {
+ jin_log_info("Openning jin library.");
+
+ luax_globaltable(L, MODULE_NAME);
+
+ const luax_Str s[] = {
+ { "version", VERSION },
+ { "author", AUTHOR },
+ { "codename", CODE_NAME },
+ { 0, 0 }
+ };
+ const luax_Num n[] = {
+ { "revision", REVISION },
+ { 0, 0 }
+ };
+ // Register values.
+ luax_setfieldstrings(L, s);
+ luax_setfieldnumbers(L, n);
+
+ luax_Reg modules[] = {
+ { "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 },
+ //{"ai", luaopen_ai },
+ { 0, 0 }
+ };
+
+ // Register sub modules.
+ for (int i = 0; modules[i].name; ++i)
+ {
+ modules[i].func(L);
+ luax_setfield(L, -2, modules[i].name);
+ }
+
+ // Pop jin table.
+ luax_pop(L, 1);
+
+ jin_log_info("Done.");
+ }
+
+ // Embed structure.
+ struct jin_Embed
+ {
+ const char* file;
+ const char* source;
+ };
+
+ // Embed scripts.
+ #include "scripts/ai/state_machine.lua.h"
+ #include "scripts/graphics/graphics.lua.h"
+ #include "scripts/keyboard/keyboard.lua.h"
+ #include "scripts/mouse/mouse.lua.h"
+ #include "scripts/path/path.lua.h"
+ #include "scripts/time/time.lua.h"
+ #include "scripts/utils/json.lua.h"
+ #include "scripts/utils/xml.lua.h"
+ #include "scripts/log.lua.h"
+ #include "scripts/tiledmap/tiledmap.lua.h"
+ #include "scripts/physics/physics.lua.h"
+ #include "scripts/audio/audio.lua.h"
+
+ #include "scripts/app.lua.h"
+
+ // In order.
+ static const jin_Embed modules[] = {
+ // ai
+ { "state_machine.lua", state_machine_lua },
+ // keyboard
+ { "keyboard.lua", keyboard_lua },
+ { "mouse.lua", mouse_lua },
+ { "graphics.lua", graphics_lua },
+ { "path.lua", path_lua },
+ { "time.lua", time_lua },
+ { "json.lua", json_lua },
+ { "xml.lua", xml_lua },
+ { "tiledmap.lua", tiledmap_lua },
+ { "physics.lua", physics_lua },
+ { "audio.lua", audio_lua },
+ //
+ { "log.lua", log_lua },
+ { 0, 0 }
+ };
+
+ static const jin_Embed bootscript = { "app.lua", app_lua };
+
+ static void embed(lua_State* L)
+ {
+ jin_log_info("Load embeded scripts.");
+ const char* file, *source;
+ for (int i = 0; modules[i].file != 0; ++i)
+ {
+ file = modules[i].file;
+ source = modules[i].source;
+ jin_log_info("Embed script \"%s\".", file);
+ luax_clearstack(L);
+ if (luax_loadbuffer(L, source, strlen(source), file) == 0)
+ {
+ luax_call(L, 0, 0);
+ }
+ else
+ {
+ jin_log_error("Embed script \"%s\" failed.", file);
+ }
+ }
+ }
+
+ static void run(lua_State* L)
+ {
+ const char* file, *source;
+ file = bootscript.file;
+ source = bootscript.source;
+ jin_log_info("Run boot script \"%s\".", file);
+ luax_clearstack(L);
+ if (luax_loadbuffer(L, source, strlen(source), file) == 0)
+ {
+ luax_call(L, 0, 0);
+ }
+ }
+
+ LUA_EXPORT void boot(lua_State* L, const char* cwd)
+ {
+ luax_clearstack(L);
+ luax_getglobal(L, MODULE_NAME);
+ luax_newtable(L);
+ luax_setfieldstring(L, "cwd", cwd);
+ luax_setfield(L, -2, "args");
+ luax_clearstack(L);
+ embed(L);
+ run(L);
+ }
+
+ } // namespace Lua
} // namespace JinEngine \ No newline at end of file