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