All routines from the C API and auxiliary library mentioned in the Lua 5.1 reference manual are supported in the lua, lualib or lauxlib libraries of Free Pascal 2.4. There is no documentation, but you can use the Lua manual since the call sequences are basically identical, with a few exceptions.
In order to split strings over multiple lines in Free Pascal, create multiple string constants that are concatenated via the '+' operator. Alternatively, you can store your Lua code in files, or put it all on one line.
luaL_Reg => lua_CFunctionMost others are obvious, with P used for pointer, e.g.
luaState* => Plua_Stateor standard, e.g.
void* => Pointer int => IntegerYou can always look at the interface of lauxlib.pas etc (package fpc-source on Ubuntu) to make sure.
Some names starting with
lua_L are different (probably typos):
luaL_dofile => lua_dofile luaL_dostring => lua_dostring luaL_getmetatable => lua_Lgetmetatable
uses lua, lualib, lauxlib; var L: Plua_State; result: integer; begin L := lua_open(); luaL_openlibs(L); result := lua_dostring(L, 'for k in string.gmatch("a,b,c,d,e,f,g,h","([^,]+),") do print(k) end' ); lua_close(L); end.
Egor Skriptunoff has made an update to Lua 5.2, of which [
is a snapshot made on 2013-05-01, with the non-Windows
LUA_LIB_NAME changed to
The latest enhancment is Delphi compatibility, added by Vladimir Klimov.
LUA_LIB_NAMEto that of your system's Lua 5.2 shared library.
A minimal usage example is:
uses lua52; (* 5.2 change *) var L: Plua_State; result: integer; begin L := luaL_newstate(); (* 5.2 change *) luaL_openlibs(L); result := luaL_dostring(L, 'print (unpack,table.unpack)'); lua_close(L); end.
Note that you no longer need
uses with three units, just the one.
Vladimir Klimov has made an update to lua52.pas