diff options
Diffstat (limited to 'components/external/lua/exlibs/lexamplelib.c')
| -rw-r--r-- | components/external/lua/exlibs/lexamplelib.c | 75 |
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 +} + + |
