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