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; |
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); |