The BSDCan 2011 slides on BSDLUA are here: bsdlua.pdf and also here: http://people.freebsd.org/~ivoras/slides/bsdlua2011.pdf .
The current (may be temporary) Mercurial (hg) repository for BSDLUA is available at http://cosmos.boldlygoingnowhere.org:81/~ivoras/hg/bsdlua .
You can make a local clone of the repository with:
hg clone http://cosmos.boldlygoingnowhere.org:81/~ivoras/hg/bsdlua
Please send patches via hg export!
Tutorial for embedders
Please read the following documentation:
http://www.lua.org/ - The main Lua site
http://pgl.yoyo.org/luai/i/3.7+Functions+and+Types - C functions and types used to access Lua from C
http://www.lua.org/manual/5.1/#index - all else on Lua
http://lua-users.org/wiki/LuaDirectory - some Lua Wiki resources
http://www.codeproject.com/KB/cpp/luaincpp.aspx - Another tutorial on embedding
The newest version of this script is committed in the BSDLUA hg repository in the bsdlua/tests/scripting directory.
An example program (note that this program and its Makefile require that the BSDLUA is installed, i.e. that the make install target was executed):
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <assert.h>
#include <bsdlua.h>
#include <bsdlauxlib.h>
lua_State *L;
static int
greeting(lua_State *L)
{
/* This function accepts one string argument and returns no values */
int nargs = lua_gettop(L);
const char *arg;
assert(nargs == 1);
arg = lua_tostring(L, 1);
printf("Hello from C: %s\n", arg);
/* lua_pushstring(L, "blah blah blah"); */
/* if the above line were uncommented, the function would return "1" */
return 0;
}
int
main()
{
L = lua_open();
luaL_openlibs(L);
luaL_dostring(L, "print(\"Hello from lua\")");
lua_register(L, "greeting", greeting);
luaL_dostring(L, "greeting(\"cromulent\")");
/* Call BSDLUA */
luaL_dostring(L, "print(\"My PID is: \" .. posix.getpid())");
}Makefile:
all: luainc
clean:
rm -f *.o *.core luainc
luainc: luainc.o
gcc -o luainc luainc.o -lbsdlua -lm -lcurses -lpanel
luainc.o: luainc.c
gcc -O2 -o luainc.o -c luainc.c