Browse Source

Initial commit

master
Mark van Renswoude 9 years ago
commit
b946dbcca5
  1. 750
      Lua.Wrapper.pas
  2. 650
      Lua.pas
  3. 212
      LuaBinaries/include/lauxlib.h
  4. 439
      LuaBinaries/include/lua.h
  5. 9
      LuaBinaries/include/lua.hpp
  6. 548
      LuaBinaries/include/luaconf.h
  7. 55
      LuaBinaries/include/lualib.h
  8. BIN
      LuaBinaries/liblua52.a
  9. BIN
      LuaBinaries/lua52.dll
  10. 15
      UnitTests/DelphiLuaUnitTests.dpr
  11. 161
      UnitTests/DelphiLuaUnitTests.dproj
  12. BIN
      UnitTests/DelphiLuaUnitTests.res
  13. 128
      UnitTests/source/TestAPI.pas
  14. 106
      UnitTests/source/TestWrapper.pas

750
Lua.Wrapper.pas

@ -0,0 +1,750 @@ @@ -0,0 +1,750 @@
unit Lua.Wrapper;
interface
uses
System.Classes,
System.Generics.Collections,
System.SysUtils,
Lua;
type
ELuaException = class(Exception);
ELuaInitException = class(ELuaException);
TLuaLibrary = (Base, Coroutine, Table, IO, OS, StringLib, Bit32, Math, Debug, Package, All);
TLuaLibraries = set of TLuaLibrary;
TLuaDataType = (LuaNone, LuaNil, LuaNumber, LuaBoolean, LuaString, LuaTable,
LuaCFunction, LuaUserData, LuaThread, LuaLightUserData);
ILuaParameter = interface
['{ADA0D4FB-F0FB-4493-8FEC-6FC92C80117F}']
function GetAsBoolean: Boolean;
function GetAsInteger: Integer;
function GetAsNumber: Double;
function GetAsUserData: Pointer;
function GetAsString: string;
function GetDataType: TLuaDataType;
function GetIndex: Integer;
property AsBoolean: Boolean read GetAsBoolean;
property AsInteger: Integer read GetAsInteger;
property AsNumber: Double read GetAsNumber;
property AsUserData: Pointer read GetAsUserData;
property AsString: string read GetAsString;
property DataType: TLuaDataType read GetDataType;
property Index: Integer read GetIndex;
end;
ILuaParameters = interface
['{FB611D9E-B51D-460B-B5AB-B567EF853222}']
function GetCount: Integer;
function GetItem(Index: Integer): ILuaParameter;
function GetState: lua_State;
function ToString: string;
property Count: Integer read GetCount;
property Items[Index: Integer]: ILuaParameter read GetItem; default;
property State: lua_State read GetState;
end;
ILuaResult = interface
['{5CEEB16B-158E-44BE-8CAD-DC2C330A244A}']
function GetCount: Integer;
procedure Push(ABoolean: Boolean); overload;
procedure Push(AInteger: Integer); overload;
procedure Push(ANumber: Double); overload;
procedure Push(AUserData: Pointer); overload;
procedure Push(const AString: string); overload;
property Count: Integer read GetCount;
end;
ILuaContext = interface
['{1F999593-E3D1-4195-9463-A42025AE9830}']
function GetParameters: ILuaParameters;
function GetResult: ILuaResult;
property Parameters: ILuaParameters read GetParameters;
property Result: ILuaResult read GetResult;
end;
TLuaFunction = reference to procedure(Context: ILuaContext);
TLuaRegisteredFunction = record
Name: string;
Callback: TLuaFunction;
end;
TLuaRegisteredFunctionDictionary = TDictionary<Integer, TLuaRegisteredFunction>;
TLua = class(TObject)
private
FState: lua_State;
FLoaded: Boolean;
FRegisteredFunctions: TLuaRegisteredFunctionDictionary;
FRegisteredFunctionCookie: Integer;
FAutoOpenLibraries: TLuaLibraries;
function GetHasState: Boolean;
function GetState: lua_State;
function GetRegisteredFunctions: TLuaRegisteredFunctionDictionary;
protected
function DoAlloc(APointer: Pointer; AOldSize, ANewSize: Cardinal): Pointer; virtual;
procedure DoNewState; virtual;
procedure DoClose; virtual;
procedure DoRegisterFunction(ACookie: Integer); virtual;
procedure SetAutoOpenLibraries(const Value: TLuaLibraries); virtual;
protected
procedure CheckState; virtual;
procedure RaiseLastLuaError; virtual;
procedure AfterLoad; virtual;
function GetRegisteredFunctionCookie: Integer; virtual;
function RunRegisteredFunction(ACookie: Integer): Integer; virtual;
property Loaded: Boolean read FLoaded write FLoaded;
property RegisteredFunctions: TLuaRegisteredFunctionDictionary read GetRegisteredFunctions;
public
constructor Create;
destructor Destroy; override;
procedure LoadFromString(const AData: string; const AChunkName: string = ''); virtual;
procedure LoadFromStream(AStream: TStream; AOwnership: TStreamOwnership = soReference; const AChunkName: string = ''); virtual;
procedure RegisterFunction(const AName: string; AFunction: TLuaFunction);
procedure OpenLibraries(ALibraries: TLuaLibraries); virtual;
procedure Call; virtual;
property HasState: Boolean read GetHasState;
property State: lua_State read GetState;
property AutoOpenLibraries: TLuaLibraries read FAutoOpenLibraries write SetAutoOpenLibraries default [TLuaLibrary.All];
end;
implementation
uses
System.Math;
type
PLuaScript = ^TLuaScript;
TLuaScript = class(TObject)
private
FStream: TStream;
FStreamOwnership: TStreamOwnership;
FBuffer: PAnsiChar;
public
constructor Create(const AData: string); overload;
constructor Create(const AStream: TStream; AOwnership: TStreamOwnership = soReference); overload;
destructor Destroy; override;
function GetNextChunk(out ASize: Cardinal): PAnsiChar;
end;
TLuaParameters = class(TInterfacedObject, ILuaParameters)
private
FState: lua_State;
FCount: Integer;
protected
property State: lua_State read FState;
public
constructor Create(AState: lua_State);
function PushResultParameters: Integer;
public
{ ILuaParameters }
function GetCount: Integer;
function GetItem(Index: Integer): ILuaParameter;
function GetState: lua_State;
function ToString: string; override;
end;
TLuaParameter = class(TInterfacedObject, ILuaParameter)
private
FState: lua_State;
FIndex: Integer;
protected
property State: lua_State read FState;
public
constructor Create(AState: lua_State; AIndex: Integer);
{ ILuaParameter }
function GetAsBoolean: Boolean;
function GetAsInteger: Integer;
function GetAsNumber: Double;
function GetAsUserData: Pointer;
function GetAsString: string;
function GetDataType: TLuaDataType;
function GetIndex: Integer;
end;
TLuaResult = class(TInterfacedObject, ILuaResult)
private
FState: lua_State;
FCount: Integer;
protected
procedure Pushed;
property State: lua_State read FState;
public
constructor Create(AState: lua_State);
{ ILuaResult }
function GetCount: Integer;
procedure Push(ABoolean: Boolean); overload;
procedure Push(AInteger: Integer); overload;
procedure Push(ANumber: Double); overload;
procedure Push(AUserData: Pointer); overload;
procedure Push(const AString: string); overload;
end;
TLuaContext = class(TInterfacedObject, ILuaContext)
private
FParameters: ILuaParameters;
FResult: ILuaResult;
public
constructor Create(AState: lua_State);
{ ILuaContext }
function GetParameters: ILuaParameters;
function GetResult: ILuaResult;
end;
{ TLuaScript }
constructor TLuaScript.Create(const AData: string);
begin
Create(TStringStream.Create(AData), soOwned);
end;
constructor TLuaScript.Create(const AStream: TStream; AOwnership: TStreamOwnership);
begin
inherited Create;
FStream := AStream;
FStreamOwnership := AOwnership;
end;
destructor TLuaScript.Destroy;
begin
if Assigned(FBuffer) then
FreeMem(FBuffer);
if FStreamOwnership = soOwned then
FreeAndNil(FStream);
inherited Destroy;
end;
function TLuaScript.GetNextChunk(out ASize: Cardinal): PAnsiChar;
const
BufferSize = 4096;
begin
if not Assigned(FBuffer) then
GetMem(FBuffer, BufferSize);
ASize := FStream.Read(FBuffer^, BufferSize);
if ASize > 0 then
Result := FBuffer
else
Result := nil;
end;
{ Callback functions }
function LuaWrapperAlloc(ud, ptr: Pointer; osize, nsize: size_t): Pointer; cdecl;
begin
Result := TLua(ud).DoAlloc(ptr, osize, nsize);
end;
function LuaWrapperReader(L: lua_State; ud: Pointer; var sz: size_t): PAnsiChar; cdecl;
var
script: PLuaScript;
begin
script := ud;
Result := script^.GetNextChunk(sz);
end;
function LuaWrapperFunction(L: lua_State): Integer; cdecl;
var
lua: TLua;
cookie: Integer;
begin
Result := 0;
lua := TLua(lua_touserdata(L, lua_upvalueindex(1)));
cookie := lua_tointeger(L, lua_upvalueindex(2));
if Assigned(lua) then
Result := lua.RunRegisteredFunction(cookie);
end;
function NilPAnsiChar(const AValue: string): PAnsiChar;
begin
if Length(AValue) > 0 then
Result := PAnsiChar(AnsiString(AValue))
else
Result := nil;
end;
{ TLua }
constructor TLua.Create;
begin
inherited Create;
FAutoOpenLibraries := [TLuaLibrary.All];
end;
destructor TLua.Destroy;
begin
FreeAndNil(FRegisteredFunctions);
if HasState then
DoClose;
inherited Destroy;
end;
procedure TLua.LoadFromString(const AData: string; const AChunkName: string);
var
script: TLuaScript;
begin
script := TLuaScript.Create(AData);
try
if lua_load(State, LuaWrapperReader, @script, NilPAnsiChar(AChunkName), nil) <> 0 then
RaiseLastLuaError;
AfterLoad;
finally
FreeAndNil(script);
end;
end;
procedure TLua.LoadFromStream(AStream: TStream; AOwnership: TStreamOwnership; const AChunkName: string);
var
script: TLuaScript;
begin
script := TLuaScript.Create(AStream, AOwnership);
try
if lua_load(State, LuaWrapperReader, @script, NilPAnsiChar(AChunkName), nil) <> 0 then
RaiseLastLuaError;
AfterLoad;
finally
FreeAndNil(script);
end;
end;
procedure TLua.OpenLibraries(ALibraries: TLuaLibraries);
begin
if TLuaLibrary.All in ALibraries then
luaL_openlibs(State)
else
begin
if TLuaLibrary.Base in ALibraries then
luaopen_base(State);
if TLuaLibrary.Coroutine in ALibraries then
luaopen_coroutine(State);
if TLuaLibrary.Table in ALibraries then
luaopen_table(State);
if TLuaLibrary.IO in ALibraries then
luaopen_io(State);
if TLuaLibrary.OS in ALibraries then
luaopen_os(State);
if TLuaLibrary.StringLib in ALibraries then
luaopen_string(State);
if TLuaLibrary.Bit32 in ALibraries then
luaopen_bit32(State);
if TLuaLibrary.Math in ALibraries then
luaopen_math(State);
if TLuaLibrary.Debug in ALibraries then
luaopen_debug(State);
if TLuaLibrary.Package in ALibraries then
luaopen_package(State);
end;
end;
procedure TLua.Call;
begin
if lua_pcall(State, 0, 0, 0) <> 0 then
RaiseLastLuaError;
end;
procedure TLua.CheckState;
begin
if not LuaLibLoaded then
LoadLuaLib;
if not HasState then
DoNewState;
end;
procedure TLua.RaiseLastLuaError;
begin
raise ELuaException.Create(string(lua_tolstring(State, -1, nil)));
end;
procedure TLua.AfterLoad;
var
cookie: Integer;
begin
Loaded := True;
{ Register functions in the current environment }
for cookie in RegisteredFunctions.Keys do
DoRegisterFunction(cookie);
end;
procedure TLua.RegisterFunction(const AName: string; AFunction: TLuaFunction);
var
registeredFunction: TLuaRegisteredFunction;
cookie: Integer;
begin
{ Since anonymous methods are basically interfaces, we need to keep a reference around }
registeredFunction.Name := AName;
registeredFunction.Callback := AFunction;
cookie := GetRegisteredFunctionCookie;
RegisteredFunctions.Add(cookie, registeredFunction);
{ Only register functions after Load, otherwise they'll not be available in the environment }
if Loaded then
DoRegisterFunction(cookie);
end;
function TLua.DoAlloc(APointer: Pointer; AOldSize, ANewSize: Cardinal): Pointer;
begin
Result := DefaultLuaAlloc(nil, APointer, AOldSize, ANewSize);
end;
procedure TLua.DoNewState;
begin
FState := lua_newstate(@LuaWrapperAlloc, Pointer(Self));
if not HasState then
raise ELuaInitException.Create('Failed to initialize new state');
OpenLibraries(AutoOpenLibraries);
end;
procedure TLua.DoClose;
begin
lua_close(FState);
FState := nil;
end;
procedure TLua.DoRegisterFunction(ACookie: Integer);
var
name: string;
begin
name := RegisteredFunctions[ACookie].Name;
lua_pushlightuserdata(State, Self);
lua_pushinteger(State, ACookie);
lua_pushcclosure(State, @LuaWrapperFunction, 2);
lua_setglobal(State, NilPAnsiChar(name));
end;
function TLua.GetRegisteredFunctionCookie: Integer;
begin
Inc(FRegisteredFunctionCookie);
Result := FRegisteredFunctionCookie;
end;
function TLua.RunRegisteredFunction(ACookie: Integer): Integer;
var
context: ILuaContext;
begin
Result := 0;
if RegisteredFunctions.ContainsKey(ACookie) then
begin
context := TLuaContext.Create(State);
RegisteredFunctions[ACookie].Callback(context);
Result := context.Result.Count;
end;
end;
function TLua.GetHasState: Boolean;
begin
Result := Assigned(FState);
end;
function TLua.GetState: lua_State;
begin
CheckState;
Result := FState;
end;
function TLua.GetRegisteredFunctions: TLuaRegisteredFunctionDictionary;
begin
if not Assigned(FRegisteredFunctions) then
FRegisteredFunctions := TLuaRegisteredFunctionDictionary.Create;
Result := FRegisteredFunctions;
end;
procedure TLua.SetAutoOpenLibraries(const Value: TLuaLibraries);
begin
FAutoOpenLibraries := Value;
end;
{ TLuaParameters }
constructor TLuaParameters.Create(AState: lua_State);
begin
inherited Create;
FState := AState;
FCount := lua_gettop(FState);
end;
function TLuaParameters.PushResultParameters: Integer;
begin
Result := 0;
end;
function TLuaParameters.GetCount: Integer;
begin
Result := FCount;
end;
function TLuaParameters.GetItem(Index: Integer): ILuaParameter;
begin
Result := TLuaParameter.Create(State, Succ(Index));
end;
function TLuaParameters.GetState: lua_State;
begin
Result := FState;
end;
function TLuaParameters.ToString: string;
var
parameterIndex: Integer;
begin
Result := '';
for parameterIndex := 0 to Pred(GetCount) do
Result := Result + GetItem(parameterIndex).AsString;
end;
{ TLuaParameter }
constructor TLuaParameter.Create(AState: lua_State; AIndex: Integer);
begin
inherited Create;
FState := AState;
FIndex := AIndex;
end;
function TLuaParameter.GetAsBoolean: Boolean;
begin
Result := (lua_toboolean(State, GetIndex) <> 0);
end;
function TLuaParameter.GetAsInteger: Integer;
begin
Result := lua_tointeger(State, GetIndex);
end;
function TLuaParameter.GetAsNumber: Double;
begin
Result := lua_tonumber(State, GetIndex);
end;
function TLuaParameter.GetAsUserData: Pointer;
begin
Result := lua_touserdata(State, GetIndex);
end;
function TLuaParameter.GetAsString: string;
begin
Result := string(lua_tostring(State, GetIndex));
end;
function TLuaParameter.GetDataType: TLuaDataType;
begin
case lua_type(State, GetIndex) of
LUA_TNIL: Result := LuaNil;
LUA_TNUMBER: Result := LuaNumber;
LUA_TBOOLEAN: Result := LuaBoolean;
LUA_TSTRING: Result := LuaString;
LUA_TTABLE: Result := LuaTable;
LUA_TFUNCTION: Result := LuaCFunction;
LUA_TUSERDATA: Result := LuaUserData;
LUA_TTHREAD: Result := LuaThread;
LUA_TLIGHTUSERDATA: Result := LuaLightUserData;
else
Result := LuaNone;
end;
end;
function TLuaParameter.GetIndex: Integer;
begin
Result := FIndex;
end;
{ TLuaContext }
constructor TLuaContext.Create(AState: lua_State);
begin
inherited Create;
FParameters := TLuaParameters.Create(AState);
FResult := TLuaResult.Create(AState);
end;
function TLuaContext.GetParameters: ILuaParameters;
begin
Result := FParameters;
end;
function TLuaContext.GetResult: ILuaResult;
begin
Result := FResult;
end;
{ TLuaResult }
constructor TLuaResult.Create(AState: lua_State);
begin
inherited Create;
FState := AState;
end;
function TLuaResult.GetCount: Integer;
begin
Result := FCount;
end;
procedure TLuaResult.Push(ABoolean: Boolean);
begin
lua_pushboolean(State, IfThen(ABoolean, 1, 0));
Pushed;
end;
procedure TLuaResult.Push(AInteger: Integer);
begin
lua_pushinteger(State, AInteger);
Pushed;
end;
procedure TLuaResult.Push(ANumber: Double);
begin
lua_pushnumber(State, ANumber);
Pushed;
end;
procedure TLuaResult.Push(AUserData: Pointer);
begin
lua_pushlightuserdata(State, AUserData);
Pushed;
end;
procedure TLuaResult.Push(const AString: string);
begin
lua_pushstring(State, NilPAnsiChar(AString));
Pushed;
end;
procedure TLuaResult.Pushed;
begin
Inc(FCount);
end;
end.

650
Lua.pas

@ -0,0 +1,650 @@ @@ -0,0 +1,650 @@
{
Header for Lua 5.2.1 Binaries DLL
http://luabinaries.sourceforge.net/
Delphi conversion by M. van Renswoude, April 2014:
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
}
unit Lua;
interface
uses
System.SysUtils;
const
LUA_VERSION_MAJOR = '5';
LUA_VERSION_MINOR = '2';
LUA_VERSION_NUM = 502;
LUA_VERSION_RELEASE = '1';
LUA_VERSION_ = 'Lua ' + LUA_VERSION_MAJOR + '.' + LUA_VERSION_MINOR;
LUA_RELEASE = LUA_VERSION_ + '.' + LUA_VERSION_RELEASE;
LUA_COPYRIGHT = LUA_RELEASE + ' Copyright (C) 1994-2012 Lua.org, PUC-Rio';
LUA_AUTHORS = 'R. Ierusalimschy, L. H. de Figueiredo, W. Celes';
{ mark for precompiled code ('<esc>Lua') }
LUA_SIGNATURE = #33'Lua';
{ option for multiple returns in 'lua_pcall' and 'lua_call' }
LUA_MULTRET = -1;
{ reserve some space for error handling }
LUAI_MAXSTACK = 1000000;
LUAI_FIRSTPSEUDOIDX = (-LUAI_MAXSTACK - 1000);
{ pseudo-indices }
LUA_REGISTRYINDEX = LUAI_FIRSTPSEUDOIDX;
function lua_upvalueindex(idx: Integer): Integer; inline;
const
{ thread status }
LUA_OK = 0;
LUA_YIELD = 1;
LUA_ERRRUN = 2;
LUA_ERRSYNTAX = 3;
LUA_ERRMEM = 4;
LUA_ERRGCMM = 5;
LUA_ERRERR = 6;
type
size_t = Cardinal;
psize_t = ^size_t;
lua_State = type Pointer;
lua_CFunction = function(L: lua_State): Integer; cdecl;
{ functions that read/write blocks when loading/dumping Lua chunks }
lua_Reader = function(L: lua_State; ud: Pointer; var sz: size_t): PAnsiChar; cdecl;
lua_Writer = function(L: lua_State; p: Pointer; sz: size_t; ud: Pointer): Integer; cdecl;
{ prototype for memory-allocation functions }
lua_Alloc = function(ud, ptr: Pointer; osize, nsize: size_t): Pointer; cdecl;
const
{ basic types }
LUA_TNONE = (-1);
LUA_TNIL = 0;
LUA_TBOOLEAN = 1;
LUA_TLIGHTUSERDATA = 2;
LUA_TNUMBER = 3;
LUA_TSTRING = 4;
LUA_TTABLE = 5;
LUA_TFUNCTION = 6;
LUA_TUSERDATA = 7;
LUA_TTHREAD = 8;
LUA_NUMTAGS = 9;
{ minimum Lua stack available to a C function }
LUA_MINSTACK = 20;
{ predefined values in the registry }
LUA_RIDX_MAINTHREAD = 1;
LUA_RIDX_GLOBALS = 2;
LUA_RIDX_LAST = LUA_RIDX_GLOBALS;
type
{ type of numbers in Lua }
lua_Number = type Double;
{ type for integer functions }
lua_Integer = type Integer;
{ unsigned integer type }
lua_Unsigned = type Cardinal;
var
{ state manipulation }
lua_newstate: function(f: lua_Alloc; ud: Pointer): lua_State; cdecl;
lua_close: procedure(L: lua_State); cdecl;
lua_newthread: function(L: lua_State): lua_State; cdecl;
lua_atpanic: function(L: lua_State; panicf: lua_CFunction): lua_CFunction; cdecl;
lua_version: function(L: lua_State): lua_Number; cdecl;
{ basic stack manipulation }
lua_absindex: function(L: lua_State; idx: Integer): Integer; cdecl;
lua_gettop: function(L: lua_State): Integer; cdecl;
lua_settop: procedure(L: lua_State; idx: Integer); cdecl;
lua_pushvalue: procedure(L: lua_State; idx: Integer); cdecl;
lua_remove: procedure(L: lua_State; idx: Integer); cdecl;
lua_insert: procedure(L: lua_State; idx: Integer); cdecl;
lua_replace: procedure(L: lua_State; idx: Integer); cdecl;
lua_copy: procedure(L: lua_State; fromidx, toidx: Integer); cdecl;
lua_checkstack: function(L: lua_State; sz: Integer): Integer; cdecl;
lua_xmove: procedure(from: lua_State; _to: lua_State; n: Integer); cdecl;
{ access functions (stack -> C) }
lua_isnumber: function (L: lua_State; idx: Integer): Integer; cdecl;
lua_isstring: function (L: lua_State; idx: Integer): Integer; cdecl;
lua_iscfunction: function (L: lua_State; idx: Integer): Integer; cdecl;
lua_isuserdata: function (L: lua_State; idx: Integer): Integer; cdecl;
lua_type: function (L: lua_State; idx: Integer): Integer; cdecl;
lua_typename: function (L: lua_State; tp: Integer): PAnsiChar; cdecl;
lua_tonumberx: function (L: lua_State; idx: Integer; isnum: PInteger): lua_Number; cdecl;
lua_tointegerx: function (L: lua_State; idx: Integer; isnum: PInteger): lua_Integer; cdecl;
lua_tounsignedx: function (L: lua_State; idx: Integer; isnum: PInteger): lua_Unsigned; cdecl;
lua_toboolean: function (L: lua_State; idx: Integer): Integer; cdecl;
lua_tolstring: function(L: lua_State; idx: Integer; len: psize_t): PAnsiChar; cdecl;
lua_rawlen: function (L: lua_State; idx: Integer): size_t; cdecl;
lua_tocfunction: function (L: lua_State; idx: Integer): lua_CFunction; cdecl;
lua_touserdata: function (L: lua_State; idx: Integer): Pointer; cdecl;
lua_tothread: function (L: lua_State; idx: Integer): lua_State; cdecl;
lua_topointer: function (L: lua_State; idx: Integer): Pointer; cdecl;
(*
/*
** Comparison and arithmetic functions
*/
#define LUA_OPADD 0 /* ORDER TM */
#define LUA_OPSUB 1
#define LUA_OPMUL 2
#define LUA_OPDIV 3
#define LUA_OPMOD 4
#define LUA_OPPOW 5
#define LUA_OPUNM 6
LUA_API void (lua_arith) (lua_State *L, int op);
#define LUA_OPEQ 0
#define LUA_OPLT 1
#define LUA_OPLE 2
LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2);
LUA_API int (lua_compare) (lua_State *L, int idx1, int idx2, int op);
*)
{ push functions (C -> stack) }
lua_pushnil: procedure(L: lua_State); cdecl;
lua_pushnumber: procedure(L: lua_State; n: lua_Number); cdecl;
lua_pushinteger: procedure(L: lua_State; n: lua_Integer); cdecl;
lua_pushunsigned: procedure(L: lua_State; n: lua_Unsigned); cdecl;
lua_pushlstring: function (L: lua_State; s: PAnsiChar; l_: size_t): PAnsiChar; cdecl;
lua_pushstring: function (L: lua_State; s: PAnsiChar): PAnsiChar; cdecl;
lua_pushvfstring: function (L: lua_State; fmt: PAnsiChar; argp: array of const): PAnsiChar; cdecl;
lua_pushfstring: function (L: lua_State; fmt: PAnsiChar): PAnsiChar; cdecl; {$IFDEF FPC}varargs;{$ENDIF}
lua_pushcclosure: procedure(L: lua_State; fn: lua_CFunction; n: Integer); cdecl;
lua_pushboolean: procedure(L: lua_State; b: Integer); cdecl;
lua_pushlightuserdata: procedure(L: lua_State; p: Pointer); cdecl;
lua_pushthread: function (L: lua_State): Integer; cdecl;
{ get functions (Lua -> stack) }
lua_getglobal: procedure(L: lua_State; value: PAnsiChar); cdecl;
(*
LUA_API void (lua_gettable) (lua_State *L, int idx);
LUA_API void (lua_getfield) (lua_State *L, int idx, const char *k);
LUA_API void (lua_rawget) (lua_State *L, int idx);
*)
lua_rawgeti: procedure(L: lua_State; idx, n: integer); cdecl;
(*
LUA_API void (lua_rawgetp) (lua_State *L, int idx, const void *p);
LUA_API void (lua_createtable) (lua_State *L, int narr, int nrec);
LUA_API void *(lua_newuserdata) (lua_State *L, size_t sz);
LUA_API int (lua_getmetatable) (lua_State *L, int objindex);
LUA_API void (lua_getuservalue) (lua_State *L, int idx);
*)
{ set functions (stack -> Lua) }
lua_setglobal: procedure(L: lua_State; value: PAnsiChar); cdecl;
(*
LUA_API void (lua_settable) (lua_State *L, int idx);
LUA_API void (lua_setfield) (lua_State *L, int idx, const char *k);
LUA_API void (lua_rawset) (lua_State *L, int idx);
LUA_API void (lua_rawseti) (lua_State *L, int idx, int n);
LUA_API void (lua_rawsetp) (lua_State *L, int idx, const void *p);
LUA_API int (lua_setmetatable) (lua_State *L, int objindex);
LUA_API void (lua_setuservalue) (lua_State *L, int idx);
*)
{ 'load' and 'call' functions (load and run Lua code) }
lua_callk: procedure(L: lua_State; nargs, nresults, ctx: Integer; k: lua_CFunction); cdecl;
lua_getctx: function(L: lua_State; var ctx: Integer): Integer; cdecl;
lua_pcallk: function(L: lua_State; nargs, nresults, errfunc, ctx: Integer; k: lua_CFunction): Integer; cdecl;
lua_load: function(L: lua_State; reader: lua_Reader; dt: Pointer; chunkname, mode: PAnsiChar): Integer; cdecl;
lua_dump: function(L: lua_State; writer: lua_Writer; data: Pointer): Integer; cdecl;
procedure lua_call(L: lua_State; nargs, nresults: Integer); inline;
function lua_pcall(L: lua_State; nargs, nresults, errfunc: Integer): Integer; inline;
(*
/*
** coroutine functions
*/
LUA_API int (lua_yieldk) (lua_State *L, int nresults, int ctx,
lua_CFunction k);
#define lua_yield(L,n) lua_yieldk(L, (n), 0, NULL)
LUA_API int (lua_resume) (lua_State *L, lua_State *from, int narg);
LUA_API int (lua_status) (lua_State *L);
/*
** garbage-collection function and options
*/
#define LUA_GCSTOP 0
#define LUA_GCRESTART 1
#define LUA_GCCOLLECT 2
#define LUA_GCCOUNT 3
#define LUA_GCCOUNTB 4
#define LUA_GCSTEP 5
#define LUA_GCSETPAUSE 6
#define LUA_GCSETSTEPMUL 7
#define LUA_GCSETMAJORINC 8
#define LUA_GCISRUNNING 9
#define LUA_GCGEN 10
#define LUA_GCINC 11
LUA_API int (lua_gc) (lua_State *L, int what, int data);
/*
** miscellaneous functions
*/
LUA_API int (lua_error) (lua_State *L);
LUA_API int (lua_next) (lua_State *L, int idx);
LUA_API void (lua_concat) (lua_State *L, int n);
LUA_API void (lua_len) (lua_State *L, int idx);
LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud);
LUA_API void (lua_setallocf) (lua_State *L, lua_Alloc f, void *ud);
*)
{ some useful macros }
function lua_tonumber(L: lua_State; idx: Integer): lua_Number; inline;
function lua_tointeger(L: lua_State; idx: Integer): lua_Integer; inline;
function lua_tounsigned(L: lua_State; idx: Integer): lua_Unsigned; inline;
(*
#define lua_pop(L,n) lua_settop(L, -(n)-1)
#define lua_newtable(L) lua_createtable(L, 0, 0)
#define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n)))
*)
procedure lua_pushcfunction(L: lua_State; f: lua_CFunction); inline;
(*
#define lua_isfunction(L,n) (lua_type(L, (n)) == LUA_TFUNCTION)
#define lua_istable(L,n) (lua_type(L, (n)) == LUA_TTABLE)
#define lua_islightuserdata(L,n) (lua_type(L, (n)) == LUA_TLIGHTUSERDATA)
#define lua_isnil(L,n) (lua_type(L, (n)) == LUA_TNIL)
#define lua_isboolean(L,n) (lua_type(L, (n)) == LUA_TBOOLEAN)
#define lua_isthread(L,n) (lua_type(L, (n)) == LUA_TTHREAD)
#define lua_isnone(L,n) (lua_type(L, (n)) == LUA_TNONE)
#define lua_isnoneornil(L, n) (lua_type(L, (n)) <= 0)
#define lua_pushliteral(L, s) \
lua_pushlstring(L, "" s, (sizeof(s)/sizeof(char))-1)
*)
procedure lua_pushglobaltable(L: lua_State); inline;
function lua_tostring(L: lua_State; idx: Integer): PAnsiChar; inline;
(*
/*
** {======================================================================
** Debug API
** =======================================================================
*/
/*
** Event codes
*/
#define LUA_HOOKCALL 0
#define LUA_HOOKRET 1
#define LUA_HOOKLINE 2
#define LUA_HOOKCOUNT 3
#define LUA_HOOKTAILCALL 4
/*
** Event masks
*/
#define LUA_MASKCALL (1 << LUA_HOOKCALL)
#define LUA_MASKRET (1 << LUA_HOOKRET)
#define LUA_MASKLINE (1 << LUA_HOOKLINE)
#define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT)
/* Functions to be called by the debugger in specific events */
typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
*)
const
LUA_IDSIZE = 60;
type
lua_Debug = record
event: Integer;
name: PAnsiChar;
namewhat: PAnsiChar; // 'global', 'local', 'field', 'method'
what: PAnsiChar; // 'Lua', 'C', 'main', 'tail'
source: PAnsiChar;
currentline: Integer;
linedefined: Integer;
lastlinedefined: Integer;
nups: Byte;
nparams: Byte;
isvararg: Byte;
istailcall: Byte;
short_src: array[0..LUA_IDSIZE - 1] of AnsiChar;
//struct CallInfo *i_ci; /* active function */
end;
var
lua_getstack: function(L: lua_State; level: Integer; var ar: lua_Debug): Integer; cdecl;
lua_getinfo: function(L: lua_State; what: PAnsiChar; var ar: lua_Debug): Integer; cdecl;
(*
LUA_API const char *(lua_getlocal) (lua_State *L, const lua_Debug *ar, int n);
LUA_API const char *(lua_setlocal) (lua_State *L, const lua_Debug *ar, int n);
LUA_API const char *(lua_getupvalue) (lua_State *L, int funcindex, int n);
LUA_API const char *(lua_setupvalue) (lua_State *L, int funcindex, int n);
LUA_API void *(lua_upvalueid) (lua_State *L, int fidx, int n);
LUA_API void (lua_upvaluejoin) (lua_State *L, int fidx1, int n1,
int fidx2, int n2);
LUA_API int (lua_sethook) (lua_State *L, lua_Hook func, int mask, int count);
LUA_API lua_Hook (lua_gethook) (lua_State *L);
LUA_API int (lua_gethookmask) (lua_State *L);
LUA_API int (lua_gethookcount) (lua_State *L);
/* }====================================================================== */
#endif
*)
const
LUA_COLIBNAME = 'coroutine';
LUA_TABLIBNAME = 'table';
LUA_IOLIBNAME = 'io';
LUA_OSLIBNAME = 'os';
LUA_STRLIBNAME = 'string';
LUA_BITLIBNAME = 'bit32';
LUA_MATHLIBNAME = 'math';
LUA_DBLIBNAME = 'debug';
LUA_LOADLIBNAME = 'package';
var
{ lualib }
luaopen_base: function(L: lua_State): Integer; cdecl;
luaopen_coroutine: function(L: lua_State): Integer; cdecl;
luaopen_table: function(L: lua_State): Integer; cdecl;
luaopen_io: function(L: lua_State): Integer; cdecl;
luaopen_os: function(L: lua_State): Integer; cdecl;
luaopen_string: function(L: lua_State): Integer; cdecl;
luaopen_bit32: function(L: lua_State): Integer; cdecl;
luaopen_math: function(L: lua_State): Integer; cdecl;
luaopen_debug: function(L: lua_State): Integer; cdecl;
luaopen_package: function(L: lua_State): Integer; cdecl;
{ open all previous libraries }
luaL_openlibs: procedure(L: lua_State); cdecl;
type
luaL_Reg = record
name: PAnsiChar;
func: lua_CFunction;
end;
PluaL_Reg = ^luaL_Reg;
var
luaL_setfuncs: procedure(L: lua_State; luaL_Reg: PluaL_Reg; nup: Integer); cdecl;
const
DefaultLuaLibName = 'lua' + LUA_VERSION_MAJOR + LUA_VERSION_MINOR + '.dll';
procedure LoadLuaLib(const AFileName: string = DefaultLuaLibName);
procedure UnloadLuaLib;
function LuaLibLoaded: Boolean;
function DefaultLuaAlloc(ud, ptr: Pointer; osize, nsize: size_t): Pointer; cdecl;
implementation
uses
System.Generics.Collections,
Winapi.Windows;
var
LuaLibHandle: THandle;
LuaFunctions: TList<PPointer>;
function DefaultLuaAlloc(ud, ptr: Pointer; osize, nsize: size_t): Pointer;
begin
if (nsize = 0) then
begin
FreeMemory(ptr);
Result := nil;
end else
Result := ReallocMemory(ptr, nsize);
end;
procedure LoadLuaLib(const AFileName: string = DefaultLuaLibName);
procedure Load(var AVariable: Pointer; const AName: string);
begin
AVariable := GetProcAddress(LuaLibHandle, PChar(AName));
LuaFunctions.Add(@AVariable);
end;
begin
UnloadLuaLib;
LuaLibHandle := SafeLoadLibrary(AFileName);
if LuaLibHandle = 0 then
RaiseLastOSError;
if not Assigned(LuaFunctions) then
LuaFunctions := TList<PPointer>.Create();
Load(@lua_newstate, 'lua_newstate');
Load(@lua_close, 'lua_close');
Load(@lua_newthread, 'lua_newthread');
Load(@lua_atpanic, 'lua_atpanic');
Load(@lua_version, 'lua_version');
Load(@lua_absindex, 'lua_absindex');
Load(@lua_gettop, 'lua_gettop');
Load(@lua_settop, 'lua_settop');
Load(@lua_pushvalue, 'lua_pushvalue');
Load(@lua_remove, 'lua_remove');
Load(@lua_insert, 'lua_insert');
Load(@lua_replace, 'lua_replace');
Load(@lua_copy, 'lua_copy');
Load(@lua_checkstack, 'lua_checkstack');
Load(@lua_xmove, 'lua_xmove');
Load(@lua_isnumber, 'lua_isnumber');
Load(@lua_isstring, 'lua_isstring');
Load(@lua_iscfunction, 'lua_iscfunction');
Load(@lua_isuserdata, 'lua_isuserdata');
Load(@lua_type, 'lua_type');
Load(@lua_typename, 'lua_typename');
Load(@lua_tonumberx, 'lua_tonumberx');
Load(@lua_tointegerx, 'lua_tointegerx');
Load(@lua_tounsignedx, 'lua_tounsignedx');
Load(@lua_toboolean, 'lua_toboolean');
Load(@lua_tolstring, 'lua_tolstring');
Load(@lua_rawlen, 'lua_rawlen');
Load(@lua_tocfunction, 'lua_tocfunction');
Load(@lua_touserdata, 'lua_touserdata');
Load(@lua_tothread, 'lua_tothread');
Load(@lua_topointer, 'lua_topointer');
Load(@lua_pushnil, 'lua_pushnil');
Load(@lua_pushnumber, 'lua_pushnumber');
Load(@lua_pushinteger, 'lua_pushinteger');
Load(@lua_pushunsigned, 'lua_pushunsigned');
Load(@lua_pushlstring, 'lua_pushlstring');
Load(@lua_pushstring, 'lua_pushstring');
Load(@lua_pushvfstring, 'lua_pushvfstring');
Load(@lua_pushfstring, 'lua_pushfstring');
Load(@lua_pushcclosure, 'lua_pushcclosure');
Load(@lua_pushboolean, 'lua_pushboolean');
Load(@lua_pushlightuserdata, 'lua_pushlightuserdata');
Load(@lua_pushthread, 'lua_pushthread');
Load(@lua_getglobal, 'lua_getglobal');
Load(@lua_rawgeti, 'lua_rawgeti');
Load(@lua_setglobal, 'lua_setglobal');
Load(@lua_callk, 'lua_callk');
Load(@lua_getctx, 'lua_getctx');
Load(@lua_pcallk, 'lua_pcallk');
Load(@lua_load, 'lua_load');
Load(@lua_dump, 'lua_dump');
Load(@lua_getstack, 'lua_getstack');
Load(@lua_getinfo, 'lua_getinfo');
Load(@luaopen_base, 'luaopen_base');
Load(@luaopen_coroutine, 'luaopen_coroutine');
Load(@luaopen_table, 'luaopen_table');
Load(@luaopen_io, 'luaopen_io');
Load(@luaopen_os, 'luaopen_os');
Load(@luaopen_string, 'luaopen_string');
Load(@luaopen_bit32, 'luaopen_bit32');
Load(@luaopen_math, 'luaopen_math');
Load(@luaopen_debug, 'luaopen_debug');
Load(@luaopen_package, 'luaopen_package');
Load(@luaL_openlibs, 'luaL_openlibs');
Load(@luaL_setfuncs, 'luaL_setfuncs');
end;
procedure UnloadLuaLib;
var
variable: PPointer;
begin
if Assigned(LuaFunctions) then
begin
for variable in LuaFunctions do
variable^ := nil;
end;
if LuaLibLoaded then
begin
FreeLibrary(LuaLibHandle);
LuaLibHandle := 0;
end;
end;
function LuaLibLoaded: Boolean;
begin
Result := (LuaLibHandle <> 0);
end;
{ Macros }
function lua_upvalueindex(idx: Integer): Integer;
begin
Result := (LUA_REGISTRYINDEX - idx);
end;
procedure lua_call(L: lua_State; nargs, nresults: Integer);
begin
lua_callk(L, nargs, nresults, 0, nil);
end;
function lua_pcall(L: lua_State; nargs, nresults, errfunc: Integer): Integer;
begin
Result := lua_pcallk(L, nargs, nresults, errfunc, 0, nil);
end;
function lua_tonumber(L: lua_State; idx: Integer): lua_Number;
begin
Result := lua_tonumberx(L, idx, nil);
end;
function lua_tointeger(L: lua_State; idx: Integer): lua_Integer;
begin
Result := lua_tointegerx(L, idx, nil);
end;
function lua_tounsigned(L: lua_State; idx: Integer): lua_Unsigned;
begin
Result := lua_tounsignedx(L, idx, nil);
end;
procedure lua_pushcfunction(L: lua_State; f: lua_CFunction);
begin
lua_pushcclosure(L, f, 0);
end;
procedure lua_pushglobaltable(L: lua_State);
begin
lua_rawgeti(L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS);
end;
function lua_tostring(L: lua_State; idx: Integer): PAnsiChar;
begin
Result := lua_tolstring(L, idx, nil);
end;
initialization
finalization
UnloadLuaLib;
FreeAndNil(LuaFunctions);
end.

212
LuaBinaries/include/lauxlib.h

@ -0,0 +1,212 @@ @@ -0,0 +1,212 @@
/*
** $Id: lauxlib.h,v 1.120 2011/11/29 15:55:08 roberto Exp $
** Auxiliary functions for building Lua libraries
** See Copyright Notice in lua.h
*/
#ifndef lauxlib_h
#define lauxlib_h
#include <stddef.h>
#include <stdio.h>
#include "lua.h"
/* extra error code for `luaL_load' */
#define LUA_ERRFILE (LUA_ERRERR+1)
typedef struct luaL_Reg {
const char *name;
lua_CFunction func;
} luaL_Reg;
LUALIB_API void (luaL_checkversion_) (lua_State *L, lua_Number ver);
#define luaL_checkversion(L) luaL_checkversion_(L, LUA_VERSION_NUM)
LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e);
LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e);
LUALIB_API const char *(luaL_tolstring) (lua_State *L, int idx, size_t *len);
LUALIB_API int (luaL_argerror) (lua_State *L, int numarg, const char *extramsg);
LUALIB_API const char *(luaL_checklstring) (lua_State *L, int numArg,
size_t *l);
LUALIB_API const char *(luaL_optlstring) (lua_State *L, int numArg,
const char *def, size_t *l);
LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int numArg);
LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int nArg, lua_Number def);
LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int numArg);
LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int nArg,
lua_Integer def);
LUALIB_API lua_Unsigned (luaL_checkunsigned) (lua_State *L, int numArg);
LUALIB_API lua_Unsigned (luaL_optunsigned) (lua_State *L, int numArg,
lua_Unsigned def);
LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg);
LUALIB_API void (luaL_checktype) (lua_State *L, int narg, int t);
LUALIB_API void (luaL_checkany) (lua_State *L, int narg);
LUALIB_API int (luaL_newmetatable) (lua_State *L, const char *tname);
LUALIB_API void (luaL_setmetatable) (lua_State *L, const char *tname);
LUALIB_API void *(luaL_testudata) (lua_State *L, int ud, const char *tname);
LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname);
LUALIB_API void (luaL_where) (lua_State *L, int lvl);
LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...);
LUALIB_API int (luaL_checkoption) (lua_State *L, int narg, const char *def,
const char *const lst[]);
LUALIB_API int (luaL_fileresult) (lua_State *L, int stat, const char *fname);
LUALIB_API int (luaL_execresult) (lua_State *L, int stat);
/* pre-defined references */
#define LUA_NOREF (-2)
#define LUA_REFNIL (-1)
LUALIB_API int (luaL_ref) (lua_State *L, int t);
LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref);
LUALIB_API int (luaL_loadfilex) (lua_State *L, const char *filename,
const char *mode);
#define luaL_loadfile(L,f) luaL_loadfilex(L,f,NULL)
LUALIB_API int (luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz,
const char *name, const char *mode);
LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s);
LUALIB_API lua_State *(luaL_newstate) (void);
LUALIB_API int (luaL_len) (lua_State *L, int idx);
LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p,
const char *r);
LUALIB_API void (luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup);
LUALIB_API int (luaL_getsubtable) (lua_State *L, int idx, const char *fname);
LUALIB_API void (luaL_traceback) (lua_State *L, lua_State *L1,
const char *msg, int level);
LUALIB_API void (luaL_requiref) (lua_State *L, const char *modname,
lua_CFunction openf, int glb);
/*
** ===============================================================
** some useful macros
** ===============================================================
*/
#define luaL_newlibtable(L,l) \
lua_createtable(L, 0, sizeof(l)/sizeof((l)[0]) - 1)
#define luaL_newlib(L,l) (luaL_newlibtable(L,l), luaL_setfuncs(L,l,0))
#define luaL_argcheck(L, cond,numarg,extramsg) \
((void)((cond) || luaL_argerror(L, (numarg), (extramsg))))
#define luaL_checkstring(L,n) (luaL_checklstring(L, (n), NULL))
#define luaL_optstring(L,n,d) (luaL_optlstring(L, (n), (d), NULL))
#define luaL_checkint(L,n) ((int)luaL_checkinteger(L, (n)))
#define luaL_optint(L,n,d) ((int)luaL_optinteger(L, (n), (d)))
#define luaL_checklong(L,n) ((long)luaL_checkinteger(L, (n)))
#define luaL_optlong(L,n,d) ((long)luaL_optinteger(L, (n), (d)))
#define luaL_typename(L,i) lua_typename(L, lua_type(L,(i)))
#define luaL_dofile(L, fn) \
(luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0))
#define luaL_dostring(L, s) \
(luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0))
#define luaL_getmetatable(L,n) (lua_getfield(L, LUA_REGISTRYINDEX, (n)))
#define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n)))
#define luaL_loadbuffer(L,s,sz,n) luaL_loadbufferx(L,s,sz,n,NULL)
/*
** {======================================================
** Generic Buffer manipulation
** =======================================================
*/
typedef struct luaL_Buffer {
char *b; /* buffer address */
size_t size; /* buffer size */
size_t n; /* number of characters in buffer */
lua_State *L;
char initb[LUAL_BUFFERSIZE]; /* initial buffer */
} luaL_Buffer;
#define luaL_addchar(B,c) \
((void)((B)->n < (B)->size || luaL_prepbuffsize((B), 1)), \
((B)->b[(B)->n++] = (c)))
#define luaL_addsize(B,s) ((B)->n += (s))
LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B);
LUALIB_API char *(luaL_prepbuffsize) (luaL_Buffer *B, size_t sz);
LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l);
LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s);
LUALIB_API void (luaL_addvalue) (luaL_Buffer *B);
LUALIB_API void (luaL_pushresult) (luaL_Buffer *B);
LUALIB_API void (luaL_pushresultsize) (luaL_Buffer *B, size_t sz);
LUALIB_API char *(luaL_buffinitsize) (lua_State *L, luaL_Buffer *B, size_t sz);
#define luaL_prepbuffer(B) luaL_prepbuffsize(B, LUAL_BUFFERSIZE)
/* }====================================================== */
/*
** {======================================================
** File handles for IO library
** =======================================================
*/
/*
** A file handle is a userdata with metatable 'LUA_FILEHANDLE' and
** initial structure 'luaL_Stream' (it may contain other fields
** after that initial structure).
*/
#define LUA_FILEHANDLE "FILE*"
typedef struct luaL_Stream {
FILE *f; /* stream (NULL for incompletely created streams) */
lua_CFunction closef; /* to close stream (NULL for closed streams) */
} luaL_Stream;
/* }====================================================== */
/* compatibility with old module system */
#if defined(LUA_COMPAT_MODULE)
LUALIB_API void (luaL_pushmodule) (lua_State *L, const char *modname,
int sizehint);
LUALIB_API void (luaL_openlib) (lua_State *L, const char *libname,
const luaL_Reg *l, int nup);
#define luaL_register(L,n,l) (luaL_openlib(L,(n),(l),0))
#endif
#endif

439
LuaBinaries/include/lua.h

@ -0,0 +1,439 @@ @@ -0,0 +1,439 @@
/*
** $Id: lua.h,v 1.283 2012/04/20 13:18:26 roberto Exp $
** Lua - A Scripting Language
** Lua.org, PUC-Rio, Brazil (http://www.lua.org)
** See Copyright Notice at the end of this file
*/
#ifndef lua_h
#define lua_h
#include <stdarg.h>
#include <stddef.h>
#include "luaconf.h"
#define LUA_VERSION_MAJOR "5"
#define LUA_VERSION_MINOR "2"
#define LUA_VERSION_NUM 502
#define LUA_VERSION_RELEASE "1"
#define LUA_VERSION "Lua " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR
#define LUA_RELEASE LUA_VERSION "." LUA_VERSION_RELEASE
#define LUA_COPYRIGHT LUA_RELEASE " Copyright (C) 1994-2012 Lua.org, PUC-Rio"
#define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo, W. Celes"
/* mark for precompiled code ('<esc>Lua') */
#define LUA_SIGNATURE "\033Lua"
/* option for multiple returns in 'lua_pcall' and 'lua_call' */
#define LUA_MULTRET (-1)
/*
** pseudo-indices
*/
#define LUA_REGISTRYINDEX LUAI_FIRSTPSEUDOIDX
#define lua_upvalueindex(i) (LUA_REGISTRYINDEX - (i))
/* thread status */
#define LUA_OK 0
#define LUA_YIELD 1
#define LUA_ERRRUN 2
#define LUA_ERRSYNTAX 3
#define LUA_ERRMEM 4
#define LUA_ERRGCMM 5
#define LUA_ERRERR 6
typedef struct lua_State lua_State;
typedef int (*lua_CFunction) (lua_State *L);
/*
** functions that read/write blocks when loading/dumping Lua chunks
*/
typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz);
typedef int (*lua_Writer) (lua_State *L, const void* p, size_t sz, void* ud);
/*
** prototype for memory-allocation functions
*/
typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize);
/*
** basic types
*/
#define LUA_TNONE (-1)
#define LUA_TNIL 0
#define LUA_TBOOLEAN 1
#define LUA_TLIGHTUSERDATA 2
#define LUA_TNUMBER 3
#define LUA_TSTRING 4
#define LUA_TTABLE 5
#define LUA_TFUNCTION 6
#define LUA_TUSERDATA 7
#define LUA_TTHREAD 8
#define LUA_NUMTAGS 9
/* minimum Lua stack available to a C function */
#define LUA_MINSTACK 20
/* predefined values in the registry */
#define LUA_RIDX_MAINTHREAD 1
#define LUA_RIDX_GLOBALS 2
#define LUA_RIDX_LAST LUA_RIDX_GLOBALS
/* type of numbers in Lua */
typedef LUA_NUMBER lua_Number;
/* type for integer functions */
typedef LUA_INTEGER lua_Integer;
/* unsigned integer type */
typedef LUA_UNSIGNED lua_Unsigned;
/*
** generic extra include file
*/
#if defined(LUA_USER_H)
#include LUA_USER_H
#endif
/*
** state manipulation
*/
LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud);
LUA_API void (lua_close) (lua_State *L);
LUA_API lua_State *(lua_newthread) (lua_State *L);
LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf);
LUA_API const lua_Number *(lua_version) (lua_State *L);
/*
** basic stack manipulation
*/
LUA_API int (lua_absindex) (lua_State *L, int idx);
LUA_API int (lua_gettop) (lua_State *L);
LUA_API void (lua_settop) (lua_State *L, int idx);
LUA_API void (lua_pushvalue) (lua_State *L, int idx);
LUA_API void (lua_remove) (lua_State *L, int idx);
LUA_API void (lua_insert) (lua_State *L, int idx);
LUA_API void (lua_replace) (lua_State *L, int idx);
LUA_API void (lua_copy) (lua_State *L, int fromidx, int toidx);
LUA_API int (lua_checkstack) (lua_State *L, int sz);
LUA_API void (lua_xmove) (lua_State *from, lua_State *to, int n);
/*
** access functions (stack -> C)
*/
LUA_API int (lua_isnumber) (lua_State *L, int idx);
LUA_API int (lua_isstring) (lua_State *L, int idx);
LUA_API int (lua_iscfunction) (lua_State *L, int idx);