rt-thread/components/external/lua/exlibs/lexamplelib.c

76 lines
1.4 KiB
C

/**
* 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
}