summaryrefslogtreecommitdiff
path: root/components/external/lua/exlibs/lexamplelib.c
diff options
context:
space:
mode:
Diffstat (limited to 'components/external/lua/exlibs/lexamplelib.c')
-rw-r--r--components/external/lua/exlibs/lexamplelib.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/components/external/lua/exlibs/lexamplelib.c b/components/external/lua/exlibs/lexamplelib.c
new file mode 100644
index 0000000000..f160ae35d8
--- /dev/null
+++ b/components/external/lua/exlibs/lexamplelib.c
@@ -0,0 +1,75 @@
+/**
+ * example of adding lua external library
+ */
+
+#include "lua.h"
+#include "lauxlib.h"
+
+#include "lexlibs.h"
+
+#define VERSION 1
+
+int example_hello(lua_State *L)
+{
+ rt_kprintf("Hello, Lua on RT-Thead!\n");
+
+ return 0;
+}
+
+int example_print(lua_State *L)
+{
+ int n = lua_gettop(L);
+ int i;
+
+ for (i=1; i<=n; i++)
+ {
+ if (i>1)
+ rt_kprintf("\t");
+
+ if (lua_isstring(L,i))
+ rt_kprintf("%s",lua_tostring(L,i));
+ else if (lua_isnumber(L, i))
+ rt_kprintf("%d",lua_tointeger(L,i));
+ else if (lua_isnil(L,i))
+ rt_kprintf("%s","nil");
+ else if (lua_isboolean(L,i))
+ rt_kprintf("%s",lua_toboolean(L,i) ? "true" : "false");
+ else
+ rt_kprintf("%s:%p",luaL_typename(L,i),lua_topointer(L,i));
+ }
+
+ rt_kprintf("\n");
+
+ return 0;
+}
+
+
+#define MIN_OPT_LEVEL 2
+#include "lrodefs.h"
+
+const LUA_REG_TYPE example_map[] =
+{
+ {LSTRKEY("hello"), LFUNCVAL(example_hello)},
+ {LSTRKEY("print"), LFUNCVAL(example_print)},
+#if LUA_OPTIMIZE_MEMORY > 0
+ {LSTRKEY("version"), LNUMVAL(VERSION)},
+#endif
+ {LNILKEY, LNILVAL}
+};
+
+/**
+ * Open exmaple library
+ */
+LUALIB_API int luaopen_example(lua_State *L)
+{
+#if LUA_OPTIMIZE_MEMORY > 0
+ return 0;
+#else
+ luaL_register(L, EXLIB_EXAMPLE, example_map);
+ lua_pushnumber(L, VERSION);
+ lua_setfield(L, -2, "version");
+ return 1;
+#endif
+}
+
+