hedgewars/LuaPas.pas
changeset 10238 7e20804db6a2
parent 10230 361d36ec5181
child 10293 201ea4989985
equal deleted inserted replaced
10237:282e49f9ce9d 10238:7e20804db6a2
     6 (*
     6 (*
     7  * A complete Pascal wrapper for Lua 5.1 DLL module.
     7  * A complete Pascal wrapper for Lua 5.1 DLL module.
     8  *
     8  *
     9  * Created by Geo Massar, 2006
     9  * Created by Geo Massar, 2006
    10  * Distributed as free/open source.
    10  * Distributed as free/open source.
    11  *
       
    12  * Note: This file contains custom modification for Hedgewars
       
    13  * These changes should accomplish compatibility for both lua 5.1 and 5.2
       
    14  * Differences: In 5.1 set/getglobal ARE macros and tonumber/tointeger are NOT
       
    15  *)
    11  *)
    16 
    12 
    17 interface
    13 interface
    18 uses uConsts;
    14 uses uConsts;
    19 {.$DEFINE LUA_GETHOOK}
    15 {.$DEFINE LUA_GETHOOK}
   240 
   236 
   241 
   237 
   242 (*
   238 (*
   243 ** access functions (stack -> C)
   239 ** access functions (stack -> C)
   244 *)
   240 *)
   245 
   241 function lua_isnumber(L : Plua_State; idx : LongInt) : LongBool;
   246 {$IFNDEF LUA51}
   242     cdecl; external LuaLibName;
   247 
   243 
   248 function lua_tointegerx(L : Plua_State; idx : LongInt; success : PInteger) : lua_Integer;
   244 function lua_isstring(L : Plua_State; idx : LongInt) : LongBool;
   249     cdecl; external LuaLibName;
   245     cdecl; external LuaLibName;
       
   246 
       
   247 function lua_iscfunction(L : Plua_State; idx : LongInt) : LongBool;
       
   248     cdecl; external LuaLibName;
       
   249 
       
   250 function lua_isuserdata(L : Plua_State; idx : LongInt) : LongBool;
       
   251     cdecl; external LuaLibName;
       
   252 
       
   253 function lua_type(L : Plua_State; idx : LongInt) : LongInt;
       
   254     cdecl; external LuaLibName;
       
   255 
       
   256 function lua_typename(L : Plua_State; tp : LongInt) : PChar;
       
   257     cdecl; external LuaLibName;
       
   258 
       
   259 function lua_equal(L : Plua_State; idx1, idx2 : LongInt) : LongBool;
       
   260     cdecl; external LuaLibName;
       
   261 
       
   262 function lua_rawequal(L : Plua_State; idx1, idx2 : LongInt) : LongBool;
       
   263     cdecl; external LuaLibName;
       
   264 
       
   265 function lua_lessthan(L : Plua_State; idx1, idx2 : LongInt) : LongBool;
       
   266     cdecl; external LuaLibName;
       
   267 
       
   268 function lua_tonumber(L : Plua_State; idx : LongInt) : lua_Number;
       
   269     cdecl; external LuaLibName;
       
   270 
   250 function lua_tointeger(L : Plua_State; idx : LongInt) : lua_Integer;
   271 function lua_tointeger(L : Plua_State; idx : LongInt) : lua_Integer;
   251 
       
   252 function lua_tonumberx(L : Plua_State; idx : LongInt; success : PInteger) : lua_Number;
       
   253     cdecl; external LuaLibName;
       
   254 function lua_tonumber(L : Plua_State; idx : LongInt) : lua_Number;
       
   255 
       
   256 {$ELSE}
       
   257 
       
   258 function lua_tointeger(L : Plua_State; idx : LongInt) : lua_Integer;
       
   259     cdecl; external LuaLibName;
       
   260 
       
   261 function lua_tonumber(L : Plua_State; idx : LongInt) : lua_Number;
       
   262     cdecl; external LuaLibName;
       
   263 
       
   264 {$ENDIF}
       
   265 
       
   266 function lua_isnumber(L : Plua_State; idx : LongInt) : LongBool;
       
   267     cdecl; external LuaLibName;
       
   268 
       
   269 function lua_isstring(L : Plua_State; idx : LongInt) : LongBool;
       
   270     cdecl; external LuaLibName;
       
   271 
       
   272 function lua_iscfunction(L : Plua_State; idx : LongInt) : LongBool;
       
   273     cdecl; external LuaLibName;
       
   274 
       
   275 function lua_isuserdata(L : Plua_State; idx : LongInt) : LongBool;
       
   276     cdecl; external LuaLibName;
       
   277 
       
   278 function lua_type(L : Plua_State; idx : LongInt) : LongInt;
       
   279     cdecl; external LuaLibName;
       
   280 
       
   281 function lua_typename(L : Plua_State; tp : LongInt) : PChar;
       
   282     cdecl; external LuaLibName;
       
   283 
       
   284 function lua_equal(L : Plua_State; idx1, idx2 : LongInt) : LongBool;
       
   285     cdecl; external LuaLibName;
       
   286 
       
   287 function lua_rawequal(L : Plua_State; idx1, idx2 : LongInt) : LongBool;
       
   288     cdecl; external LuaLibName;
       
   289 
       
   290 function lua_lessthan(L : Plua_State; idx1, idx2 : LongInt) : LongBool;
       
   291     cdecl; external LuaLibName;
   272     cdecl; external LuaLibName;
   292 
   273 
   293 function lua_toboolean(L : Plua_State; idx : LongInt) : LongBool;
   274 function lua_toboolean(L : Plua_State; idx : LongInt) : LongBool;
   294     cdecl; external LuaLibName;
   275     cdecl; external LuaLibName;
   295 
   276 
   403 ** `load' and `call' functions (load and run Lua code)
   384 ** `load' and `call' functions (load and run Lua code)
   404 *)
   385 *)
   405 procedure lua_call(L : Plua_State; nargs, nresults : LongInt);
   386 procedure lua_call(L : Plua_State; nargs, nresults : LongInt);
   406     cdecl; external LuaLibName;
   387     cdecl; external LuaLibName;
   407 
   388 
   408 
       
   409 {$IFNDEF LUA51}
       
   410 function  lua_pcallk(L: Plua_State; nargs, nresults, errfunc, ctx: Integer; k: lua_CFunction): Integer;
       
   411     cdecl; external LuaLibName;
       
   412 function  lua_pcall(L : Plua_State; nargs, nresults, errfunc : LongInt) : LongInt;
   389 function  lua_pcall(L : Plua_State; nargs, nresults, errfunc : LongInt) : LongInt;
   413 {$ELSE}
   390     cdecl; external LuaLibName;
   414 function  lua_pcall(L : Plua_State; nargs, nresults, errfunc : LongInt) : LongInt;
       
   415     cdecl; external LuaLibName;
       
   416 {$ENDIF}
       
   417 
   391 
   418 function  lua_cpcall(L : Plua_State; func : lua_CFunction; ud : Pointer) : LongInt;
   392 function  lua_cpcall(L : Plua_State; func : lua_CFunction; ud : Pointer) : LongInt;
   419     cdecl; external LuaLibName;
   393     cdecl; external LuaLibName;
   420 
   394 
   421 function  lua_load(L : Plua_State; reader : lua_Reader; dt : Pointer; const chunkname : PChar) : LongInt;
   395 function  lua_load(L : Plua_State; reader : lua_Reader; dt : Pointer; const chunkname : PChar) : LongInt;
   484 
   458 
   485 procedure lua_register(L : Plua_State; n : PChar; f : lua_CFunction);
   459 procedure lua_register(L : Plua_State; n : PChar; f : lua_CFunction);
   486 
   460 
   487 procedure lua_pushcfunction(L : Plua_State; f : lua_CFunction);
   461 procedure lua_pushcfunction(L : Plua_State; f : lua_CFunction);
   488 
   462 
       
   463 function  lua_strlen(L : Plua_State; idx : LongInt) : LongInt;
       
   464 
   489 function lua_isfunction(L : Plua_State; n : LongInt) : Boolean;
   465 function lua_isfunction(L : Plua_State; n : LongInt) : Boolean;
   490 function lua_istable(L : Plua_State; n : LongInt) : Boolean;
   466 function lua_istable(L : Plua_State; n : LongInt) : Boolean;
   491 function lua_islightuserdata(L : Plua_State; n : LongInt) : Boolean;
   467 function lua_islightuserdata(L : Plua_State; n : LongInt) : Boolean;
   492 function lua_isnil(L : Plua_State; n : LongInt) : Boolean;
   468 function lua_isnil(L : Plua_State; n : LongInt) : Boolean;
   493 function lua_isboolean(L : Plua_State; n : LongInt) : Boolean;
   469 function lua_isboolean(L : Plua_State; n : LongInt) : Boolean;
   496 function lua_isnoneornil(L : Plua_State; n : LongInt) : Boolean;
   472 function lua_isnoneornil(L : Plua_State; n : LongInt) : Boolean;
   497 
   473 
   498 procedure lua_pushliteral(L : Plua_State; s : PChar);
   474 procedure lua_pushliteral(L : Plua_State; s : PChar);
   499 
   475 
   500 procedure lua_setglobal(L : Plua_State; s : PChar);
   476 procedure lua_setglobal(L : Plua_State; s : PChar);
   501 {$IFNDEF LUA51}
       
   502     cdecl;  external LuaLibName;
       
   503 {$ENDIF}
       
   504 procedure lua_getglobal(L : Plua_State; s : PChar);
   477 procedure lua_getglobal(L : Plua_State; s : PChar);
   505 {$IFNDEF LUA51}
       
   506     cdecl;  external LuaLibName;
       
   507 {$ENDIF}
       
   508 
   478 
   509 function lua_tostring(L : Plua_State; idx : LongInt) : shortstring;
   479 function lua_tostring(L : Plua_State; idx : LongInt) : shortstring;
   510 function lua_tostringA(L : Plua_State; idx : LongInt) : ansistring;
   480 function lua_tostringA(L : Plua_State; idx : LongInt) : ansistring;
   511 
   481 
   512 
   482 
   513 (*
   483 (*
   514 ** compatibility macros and functions
   484 ** compatibility macros and functions
   515 *)
   485 *)
   516 (*
       
   517 function lua_open : Plua_State;
   486 function lua_open : Plua_State;
   518 
   487 
   519 procedure lua_getregistry(L : Plua_State);
   488 procedure lua_getregistry(L : Plua_State);
   520 
   489 
   521 function lua_getgccount(L : Plua_State) : LongInt;
   490 function lua_getgccount(L : Plua_State) : LongInt;
   522 
   491 
   523 type
   492 type
   524     lua_Chuckreader = lua_Reader;
   493     lua_Chuckreader = lua_Reader;
   525     lua_Chuckwriter = lua_Writer;
   494     lua_Chuckwriter = lua_Writer;
   526 *)
       
   527 
   495 
   528 (* ====================================================================== *)
   496 (* ====================================================================== *)
   529 
   497 
   530 (*
   498 (*
   531 ** {======================================================================
   499 ** {======================================================================
   666 ** $Id: lauxlib.h,v 1.87 2005/12/29 15:32:11 roberto Exp $
   634 ** $Id: lauxlib.h,v 1.87 2005/12/29 15:32:11 roberto Exp $
   667 ** Auxiliary functions for building Lua libraries
   635 ** Auxiliary functions for building Lua libraries
   668 ** See Copyright Notice at the end of this file.
   636 ** See Copyright Notice at the end of this file.
   669 *)
   637 *)
   670 
   638 
       
   639 // not compatibility with the behavior of setn/getn in Lua 5.0
       
   640 function  luaL_getn(L : Plua_State; idx : LongInt) : LongInt;
       
   641 procedure luaL_setn(L : Plua_State; i, j : LongInt);
       
   642 
   671 const
   643 const
   672     LUA_ERRFILE = LUA_ERRERR + 1;
   644     LUA_ERRFILE = LUA_ERRERR + 1;
   673 
   645 
   674 type
   646 type
   675     luaL_Reg = packed record
   647     luaL_Reg = packed record
   677     func : lua_CFunction;
   649     func : lua_CFunction;
   678     end;
   650     end;
   679     PluaL_Reg = ^luaL_Reg;
   651     PluaL_Reg = ^luaL_Reg;
   680 
   652 
   681 
   653 
   682 (*procedure luaL_openlib(L : Plua_State; const libname : PChar; const lr : PluaL_Reg; nup : LongInt);
   654 procedure luaL_openlib(L : Plua_State; const libname : PChar; const lr : PluaL_Reg; nup : LongInt);
   683     cdecl; external LuaLibName;*)
   655     cdecl; external LuaLibName;
   684 procedure luaL_register(L : Plua_State; const libname : PChar; const lr : PluaL_Reg);
   656 procedure luaL_register(L : Plua_State; const libname : PChar; const lr : PluaL_Reg);
   685     cdecl; external LuaLibName;
   657     cdecl; external LuaLibName;
   686 function luaL_getmetafield(L : Plua_State; obj : LongInt; const e : PChar) : LongInt;
   658 function luaL_getmetafield(L : Plua_State; obj : LongInt; const e : PChar) : LongInt;
   687     cdecl; external LuaLibName;
   659     cdecl; external LuaLibName;
   688 function luaL_callmeta(L : Plua_State; obj : LongInt; const e : PChar) : LongInt;
   660 function luaL_callmeta(L : Plua_State; obj : LongInt; const e : PChar) : LongInt;
   761 function luaL_optint(L : Plua_State; n : LongInt; d : lua_Integer): lua_Integer;
   733 function luaL_optint(L : Plua_State; n : LongInt; d : lua_Integer): lua_Integer;
   762 function luaL_checklong(L : Plua_State; n : LongInt) : lua_Integer;
   734 function luaL_checklong(L : Plua_State; n : LongInt) : lua_Integer;
   763 function luaL_optlong(L : Plua_State; n : LongInt; d : lua_Integer) : lua_Integer;
   735 function luaL_optlong(L : Plua_State; n : LongInt; d : lua_Integer) : lua_Integer;
   764 
   736 
   765 function luaL_typename(L : Plua_State; idx : LongInt) : PChar;
   737 function luaL_typename(L : Plua_State; idx : LongInt) : PChar;
       
   738 
       
   739 function luaL_dofile(L : Plua_State; fn : PChar) : LongInt;
       
   740 
       
   741 function luaL_dostring(L : Plua_State; s : PChar) : LongInt;
   766 
   742 
   767 procedure luaL_getmetatable(L : Plua_State; n : PChar);
   743 procedure luaL_getmetatable(L : Plua_State; n : PChar);
   768 
   744 
   769 (* not implemented yet
   745 (* not implemented yet
   770 #define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n)))
   746 #define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n)))
   783     L : Plua_State;
   759     L : Plua_State;
   784     buffer : array [0..LUAL_BUFFERSIZE-1] of Char;
   760     buffer : array [0..LUAL_BUFFERSIZE-1] of Char;
   785     end;
   761     end;
   786     PluaL_Buffer = ^luaL_Buffer;
   762     PluaL_Buffer = ^luaL_Buffer;
   787 
   763 
       
   764 procedure luaL_addchar(B : PluaL_Buffer; c : Char);
       
   765 
   788 (* compatibility only *)
   766 (* compatibility only *)
       
   767 procedure luaL_putchar(B : PluaL_Buffer; c : Char);
       
   768 
   789 procedure luaL_addsize(B : PluaL_Buffer; n : LongInt);
   769 procedure luaL_addsize(B : PluaL_Buffer; n : LongInt);
   790 
   770 
   791 procedure luaL_buffinit(L : Plua_State; B : PluaL_Buffer);
   771 procedure luaL_buffinit(L : Plua_State; B : PluaL_Buffer);
   792     cdecl; external LuaLibName;
   772     cdecl; external LuaLibName;
   793 function  luaL_prepbuffer(B : PluaL_Buffer) : PChar;
   773 function  luaL_prepbuffer(B : PluaL_Buffer) : PChar;
   841     ReadLn(s);                       // get line
   821     ReadLn(s);                       // get line
   842     b := PChar(s);                   //   and return it
   822     b := PChar(s);                   //   and return it
   843     lua_readline := (b[0] <> #4);          // test for ctrl-D
   823     lua_readline := (b[0] <> #4);          // test for ctrl-D
   844 end;
   824 end;
   845 }
   825 }
   846 
       
   847 {$IFNDEF LUA51}
       
   848 
       
   849 (* compatibility with 5.2 *)
       
   850 
       
   851 function lua_tointeger(L : Plua_State; idx : LongInt) : lua_Integer;
       
   852 begin
       
   853     lua_tointeger := lua_tointegerx(L, idx, nil);
       
   854 end;
       
   855 
       
   856 function lua_tonumber(L : Plua_State; idx : LongInt) : lua_Number;
       
   857 begin
       
   858     lua_tonumber := lua_tonumberx(L, idx, nil);
       
   859 end;
       
   860 
       
   861 function lua_pcall(L : Plua_State; nargs, nresults, errfunc : LongInt) : LongInt;
       
   862 begin
       
   863     lua_pcall := lua_pcallk(L, nargs, nresults, errfunc, 0, nil);
       
   864 end;
       
   865 
       
   866 {$ENDIF}
       
   867 
       
   868 procedure lua_saveline(L : Plua_State; idx : LongInt);
   826 procedure lua_saveline(L : Plua_State; idx : LongInt);
   869 begin
   827 begin
   870 end;
   828 end;
   871 
   829 
   872 procedure lua_freeline(L : Plua_State; b : PChar);
   830 procedure lua_freeline(L : Plua_State; b : PChar);
   902 procedure lua_pushcfunction(L : Plua_State; f : lua_CFunction);
   860 procedure lua_pushcfunction(L : Plua_State; f : lua_CFunction);
   903 begin
   861 begin
   904     lua_pushcclosure(L, f, 0);
   862     lua_pushcclosure(L, f, 0);
   905 end;
   863 end;
   906 
   864 
       
   865 function  lua_strlen(L : Plua_State; idx : LongInt) : LongInt;
       
   866 begin
       
   867     lua_strlen := lua_objlen(L, idx);
       
   868 end;
       
   869 
   907 function lua_isfunction(L : Plua_State; n : LongInt) : Boolean;
   870 function lua_isfunction(L : Plua_State; n : LongInt) : Boolean;
   908 begin
   871 begin
   909     lua_isfunction := lua_type(L, n) = LUA_TFUNCTION;
   872     lua_isfunction := lua_type(L, n) = LUA_TFUNCTION;
   910 end;
   873 end;
   911 
   874 
   947 procedure lua_pushliteral(L : Plua_State; s : PChar);
   910 procedure lua_pushliteral(L : Plua_State; s : PChar);
   948 begin
   911 begin
   949     lua_pushlstring(L, s, StrLen(s));
   912     lua_pushlstring(L, s, StrLen(s));
   950 end;
   913 end;
   951 
   914 
   952 
       
   953 {$IFDEF LUA51}
       
   954 procedure lua_setglobal(L : Plua_State; s : PChar);
   915 procedure lua_setglobal(L : Plua_State; s : PChar);
   955 begin
   916 begin
   956     lua_setfield(L, LUA_GLOBALSINDEX, s);
   917     lua_setfield(L, LUA_GLOBALSINDEX, s);
   957 end;
   918 end;
   958 
   919 
   959 procedure lua_getglobal(L: Plua_State; s: PChar);
   920 procedure lua_getglobal(L: Plua_State; s: PChar);
   960 begin
   921 begin
   961     lua_getfield(L, LUA_GLOBALSINDEX, s);
   922     lua_getfield(L, LUA_GLOBALSINDEX, s);
   962 end;
   923 end;
   963 {$ENDIF}
       
   964 
   924 
   965 function lua_tostring(L : Plua_State; idx : LongInt) : shortstring;
   925 function lua_tostring(L : Plua_State; idx : LongInt) : shortstring;
   966 begin
   926 begin
   967     lua_tostring := StrPas(lua_tolstring(L, idx, nil));
   927     lua_tostring := StrPas(lua_tolstring(L, idx, nil));
   968 end;
   928 end;
   971 var p: PChar;
   931 var p: PChar;
   972 begin
   932 begin
   973     p:= lua_tolstring(L, idx, nil);
   933     p:= lua_tolstring(L, idx, nil);
   974     lua_tostringA := ansistring(p);
   934     lua_tostringA := ansistring(p);
   975 end;
   935 end;
   976 (*
   936 
   977 function lua_open : Plua_State;
   937 function lua_open : Plua_State;
   978 begin
   938 begin
   979     lua_open := luaL_newstate;
   939     lua_open := luaL_newstate;
   980 end;
   940 end;
   981 
   941 
   986 
   946 
   987 function lua_getgccount(L : Plua_State) : LongInt;
   947 function lua_getgccount(L : Plua_State) : LongInt;
   988 begin
   948 begin
   989     lua_getgccount := lua_gc(L, LUA_GCCOUNT, 0);
   949     lua_getgccount := lua_gc(L, LUA_GCCOUNT, 0);
   990 end;
   950 end;
   991 *)
   951 
   992 
   952 
   993 (*****************************************************************************)
   953 (*****************************************************************************)
   994 (*                                  lualib.h                                 *)
   954 (*                                  lualib.h                                 *)
   995 (*****************************************************************************)
   955 (*****************************************************************************)
   996 
   956 
  1000 
   960 
  1001 
   961 
  1002 (*****************************************************************************)
   962 (*****************************************************************************)
  1003 (*                                  lauxlib.h    n                           *)
   963 (*                                  lauxlib.h    n                           *)
  1004 (*****************************************************************************)
   964 (*****************************************************************************)
       
   965 
       
   966 function luaL_getn(L : Plua_State; idx : LongInt) : LongInt;
       
   967 begin
       
   968     luaL_getn := lua_objlen(L, idx);
       
   969 end;
  1005 
   970 
  1006 procedure luaL_setn(L : plua_State; i, j : LongInt);
   971 procedure luaL_setn(L : plua_State; i, j : LongInt);
  1007 begin
   972 begin
  1008     (* no op *)
   973     (* no op *)
  1009 end;
   974 end;
  1049 function luaL_typename(L : Plua_State; idx : LongInt) : PChar;
  1014 function luaL_typename(L : Plua_State; idx : LongInt) : PChar;
  1050 begin
  1015 begin
  1051     luaL_typename := lua_typename( L, lua_type(L, idx) );
  1016     luaL_typename := lua_typename( L, lua_type(L, idx) );
  1052 end;
  1017 end;
  1053 
  1018 
       
  1019 function luaL_dofile(L : Plua_State; fn : PChar) : LongInt;
       
  1020 begin
       
  1021     luaL_dofile := luaL_loadfile(L, fn);
       
  1022     if luaL_dofile = 0 then
       
  1023         luaL_dofile := lua_pcall(L, 0, 0, 0);
       
  1024 end;
       
  1025 
       
  1026 function luaL_dostring(L : Plua_State; s : PChar) : LongInt;
       
  1027 begin
       
  1028     luaL_dostring := luaL_loadstring(L, s);
       
  1029     if luaL_dostring = 0 then
       
  1030         luaL_dostring := lua_pcall(L, 0, 0, 0);
       
  1031 end;
       
  1032 
  1054 procedure luaL_getmetatable(L : Plua_State; n : PChar);
  1033 procedure luaL_getmetatable(L : Plua_State; n : PChar);
  1055 begin
  1034 begin
  1056     lua_getfield(L, LUA_REGISTRYINDEX, n);
  1035     lua_getfield(L, LUA_REGISTRYINDEX, n);
       
  1036 end;
       
  1037 
       
  1038 procedure luaL_addchar(B : PluaL_Buffer; c : Char);
       
  1039 begin
       
  1040     if not(B^.p < B^.buffer + LUAL_BUFFERSIZE) then
       
  1041         luaL_prepbuffer(B);
       
  1042     (B^.p^) := c;
       
  1043     Inc(B^.p);
       
  1044 end;
       
  1045 
       
  1046 procedure luaL_putchar(B : PluaL_Buffer; c : Char);
       
  1047 begin
       
  1048     luaL_addchar(B, c);
  1057 end;
  1049 end;
  1058 
  1050 
  1059 procedure luaL_addsize(B : PluaL_Buffer; n : LongInt);
  1051 procedure luaL_addsize(B : PluaL_Buffer; n : LongInt);
  1060 begin
  1052 begin
  1061   Inc(B^.p, n);
  1053   Inc(B^.p, n);