From f3de9e31d8113926fa7fca985222af6c67556cac Mon Sep 17 00:00:00 2001 From: mykola2312 <49044616+mykola2312@users.noreply.github.com> Date: Sun, 14 May 2017 00:00:20 +0300 Subject: [PATCH] Initial commit --- Release/CL.read.1.tlog | Bin 0 -> 27798 bytes Release/CL.write.1.tlog | Bin 0 -> 728 bytes Release/cl.command.1.tlog | Bin 0 -> 1078 bytes .../gmcl_jack_win32.dll.intermediate.manifest | 10 + Release/gmcl_jack_win32.lastbuildstate | 2 + Release/gmcl_jack_win32.log | 29 ++ ...in32.vcxprojResolveAssemblyReference.cache | Bin 0 -> 713 bytes Release/gmcl_jack_win32.write.1.tlog | 135 +++++++ Release/link.command.1.tlog | Bin 0 -> 1272 bytes Release/link.read.1.tlog | Bin 0 -> 2812 bytes Release/link.write.1.tlog | Bin 0 -> 480 bytes Release/main.obj | Bin 0 -> 67017 bytes Release/mt.command.1.tlog | Bin 0 -> 428 bytes Release/mt.read.1.tlog | Bin 0 -> 604 bytes Release/mt.write.1.tlog | Bin 0 -> 232 bytes Release/state.obj | Bin 0 -> 82214 bytes Release/vc100.pdb | Bin 0 -> 110592 bytes gmcl_jack_win32.vcxproj | 74 ++++ gmcl_jack_win32.vcxproj.filters | 36 ++ gmcl_jack_win32.vcxproj.user | 3 + interface.h | 37 ++ lua.h | 87 +++++ main.cpp | 156 ++++++++ state.cpp | 343 ++++++++++++++++++ state.h | 102 ++++++ 25 files changed, 1014 insertions(+) create mode 100644 Release/CL.read.1.tlog create mode 100644 Release/CL.write.1.tlog create mode 100644 Release/cl.command.1.tlog create mode 100644 Release/gmcl_jack_win32.dll.intermediate.manifest create mode 100644 Release/gmcl_jack_win32.lastbuildstate create mode 100644 Release/gmcl_jack_win32.log create mode 100644 Release/gmcl_jack_win32.vcxprojResolveAssemblyReference.cache create mode 100644 Release/gmcl_jack_win32.write.1.tlog create mode 100644 Release/link.command.1.tlog create mode 100644 Release/link.read.1.tlog create mode 100644 Release/link.write.1.tlog create mode 100644 Release/main.obj create mode 100644 Release/mt.command.1.tlog create mode 100644 Release/mt.read.1.tlog create mode 100644 Release/mt.write.1.tlog create mode 100644 Release/state.obj create mode 100644 Release/vc100.pdb create mode 100644 gmcl_jack_win32.vcxproj create mode 100644 gmcl_jack_win32.vcxproj.filters create mode 100644 gmcl_jack_win32.vcxproj.user create mode 100644 interface.h create mode 100644 lua.h create mode 100644 main.cpp create mode 100644 state.cpp create mode 100644 state.h diff --git a/Release/CL.read.1.tlog b/Release/CL.read.1.tlog new file mode 100644 index 0000000000000000000000000000000000000000..3c05c3035ef8ece4e0ed78364e065a02f29b514b GIT binary patch literal 27798 zcmeHQT~FIk486~j_8)lMUeI7@UvH%?rL<|QB(#94@&EtCwsWqDlC~+V$(3v*3k3>E z({pWKUtilN{QdJgjKZ(54U>?C+b{?ZFRzDT9-hM;{xS?RyxN3mScI?P66Z7gmA{?i z+zMYG!w0=q;wW8ARS6*8`hBPp_ImuJ#|$Y!9(4bQG+)ai47SQQL;9$453xp_W-ku`hJ9z zsQoRDCG?&{n{sx6-%DIm;`|a``CWBNd*8RTXJ~lw z;zhOR!YIxFiD~M2p^b{tUL!iSiEaj+=Fs36E4Uq*U1JR_fT_gyk-GPoz{aP*A+bU_ zd+HM{H~oD&MBO~Y3R=2_mzRCmmAbxGh%&kA2p(I~xilc1rnY{l0>jC z7-86$Pt08~H<&8#)kiL=b8y|T2#OrG%e;*Z$>fLt_46P^!D!Tu#V}egk$0XM(9;6* zNZ($DF*fHKscpHkOR#|=gU8iJGB=TtnujOMnuoY6V7@|IE*WCpBIe9X;L6nTEW$M^ zXROfZu8BD`r0-7z#Ry3BGrUbK`k7Qg!y1l${9j?=46@++1rK9|M-!_e_xa50%@Mz> z4CqVtN6aGUW@<`|>)1V@?e|!@VKtIjVr?vy(ALU18z+Z6%sW-PO{^g4vEOo7V=B4WvKu(q5IQ8%B% z-iaBG4GwKAVm+*L>(A{Waz;{f*Om(V80WAT3)x@sGd48D?u;B2Ch4YLt6ML#X%Eno zzU?mIe{JYUbi~UJC8J+sl5QS$QBQ$Je=VqDPj>2Sdtk=D z59%lwGw5gOiDHai!XbW2_kA71oX(M9JTJM^8~ChduKV z@DpqnVREtB!L>rPCQLH%k~Ifxg0qaG#g9KlEeYdAI5FfCQS*}*j!exj;;J~u+4E=@ zMS~x<{~67ip)lRJ3m(847T62Fjq&jPB`TxraiH$%5vH)q)9;bmi*(zS?aDlz59x+R z-sOC~xA=q3*JJhmIKR^QdSnG3a(Yi$9q7HA%wDco&euES@`?v_zTTl^YL1Qb^^P;< z+oj}uz1_%!O#0Jh=zP7mPwSb9&ewZAOW}OI<}8-3cIWFI=9`=S{@Qz^3XAjg z+Mg5ae7)E5AhHv1zTV*+ul7h*cxlepYoFg$Zpit1Z8mJ@31HPa<$S&Utb<6#`Fh7Q zRRwxX*oowPy?xtpzTUn>oUivk{};gddhOAK^Yz-iu=DlWt;P9z$La;n*K4;J=j$D> lqewT8^Yz+1u=Dlm|NQhCU$1{;-`@60OC!aNA%qN*892PZ=R5I=d4P?MOn{@k{w(13st9=uU@V5uwb-wqI6_G$_CGZ(}vNY!^**PWG1 zucPT6?HdtJROeKQGu30Tj*)%O56si^Obe)BCLhG!Of08@((3Rzok^?E%aR#5tN3^R V^Cx@JrTQk+{@;v0vKjk-^c$}|p#T5? literal 0 HcmV?d00001 diff --git a/Release/gmcl_jack_win32.dll.intermediate.manifest b/Release/gmcl_jack_win32.dll.intermediate.manifest new file mode 100644 index 0000000..ecea6f7 --- /dev/null +++ b/Release/gmcl_jack_win32.dll.intermediate.manifest @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Release/gmcl_jack_win32.lastbuildstate b/Release/gmcl_jack_win32.lastbuildstate new file mode 100644 index 0000000..67b41d3 --- /dev/null +++ b/Release/gmcl_jack_win32.lastbuildstate @@ -0,0 +1,2 @@ +#v4.0:v100:false +Release|Win32|D:\GMHax\| diff --git a/Release/gmcl_jack_win32.log b/Release/gmcl_jack_win32.log new file mode 100644 index 0000000..f153b35 --- /dev/null +++ b/Release/gmcl_jack_win32.log @@ -0,0 +1,29 @@ +Build started 09.05.2017 1:38:12. + 1>Project "D:\GMHax\gmcl_jack_win32\gmcl_jack_win32.vcxproj" on node 2 (build target(s)). + 1>InitializeBuildStatus: + Creating "Release\gmcl_jack_win32.unsuccessfulbuild" because "AlwaysCreate" was specified. + ClCompile: + C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\CL.exe /c /Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D _WINDLL /D _MBCS /Gm- /EHsc /MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Fo"Release\\" /Fd"Release\vc100.pdb" /Gd /TP /analyze- /errorReport:prompt state.cpp + state.cpp + 1>state.cpp(116): warning C4996: 'vsnprintf': This function or variable may be unsafe. Consider using vsnprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdio.h(354): см. объявление "vsnprintf" + 1>state.cpp(140): warning C4800: int: принудительно задано логическое значение "true" или "false" (предупреждение о производительности) + 1>state.cpp(325): warning C4996: '_snprintf': This function or variable may be unsafe. Consider using _snprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdio.h(363): см. объявление "_snprintf" + Link: + C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"D:\GMHax\Release\gmcl_jack_win32.dll" /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /ManifestFile:"Release\gmcl_jack_win32.dll.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"D:\GMHax\Release\gmcl_jack_win32.pdb" /OPT:REF /OPT:ICF /LTCG /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"D:\GMHax\Release\gmcl_jack_win32.lib" /MACHINE:X86 /DLL Release\main.obj + Release\state.obj + Создается библиотека D:\GMHax\Release\gmcl_jack_win32.lib и объект D:\GMHax\Release\gmcl_jack_win32.exp + Создание кода + Создание кода завершено + gmcl_jack_win32.vcxproj -> D:\GMHax\Release\gmcl_jack_win32.dll + Manifest: + C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\mt.exe /nologo /verbose /outputresource:"D:\GMHax\Release\gmcl_jack_win32.dll;#2" /manifest Release\gmcl_jack_win32.dll.intermediate.manifest + FinalizeBuildStatus: + Deleting file "Release\gmcl_jack_win32.unsuccessfulbuild". + Touching "Release\gmcl_jack_win32.lastbuildstate". + 1>Done Building Project "D:\GMHax\gmcl_jack_win32\gmcl_jack_win32.vcxproj" (build target(s)). + +Построение успешно завершено. + +Time Elapsed 00:00:02.79 diff --git a/Release/gmcl_jack_win32.vcxprojResolveAssemblyReference.cache b/Release/gmcl_jack_win32.vcxprojResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..3f0168105c545dc757bd6373b277614955157056 GIT binary patch literal 713 zcmaKq;cn9~5XZf=>DnwqeSm!k5+6XTtX5^PO{yjqQEh@vgI4<#KDhA(tUB>zJ7eWJ z5O2a;An_u+1Kf360a4*d|M=qb-S6(gHW*_+anYMr9H6{AQ@J(H6rLZ~N=rT!ZtnQ? zQ{L|-mtdVT)d&rGdP!PqUt1VePy)M`3eXK`o zm{0$S|KrX65fvLn1m9_rgeYCw(Lt+)GD{CLM0#&UnT)Y3E_r;j|LjTj77DOX<&eB^ z4od7ixNOzjY>fW!(b##$&tFb|TQtjTg=c|Ft-F+U*>-ADNV2<%^w*#8$C!2rW;r6F zjJ0t7%t%!zkg>QWTAU+8Ea3_&iKGY^yIgn=c3H>+TUTC{a5stV;vSi>CP1(Ary&4?6{$j#8K*sAVpM;af2Z*)wFcMZwI~^J8I*u zkRr?1^SWow+?ngYf4-=%uI3tOr1$D+*2s~Dy3z+Mkv<}Q(z(WZtylP`it)zyE?DR6 z?725kqL4kmkAQih6x0;_J?e8k(<%CtC-F7b#HEx9CT<<^P1PYT(Irw>FAlh5x_ADC zRw|UKVx4QLwQ?+1`i?Ev52RlzweflbeZ{u|$#BOY4|xZ?9U=?e5NCLHHUZyK3p}@u zebcfo!75v}I#Z>cwmhpx7&-ddvoBkFGOTxS-9168^v&6{`51E1LaA*TTz|Gax7bQ@ zJk+yATW~gqRqm}hOb$J#J{4o;;*6eIH|_LBaNdA?4VQ|nXUN9O`ZRUk|J#)Sgbhg6 zhc&C6Z{~V{eweN9piS#zUYF>RGcYE1&f=X;*jvGVgJs+F`NaEL5})%}1(huFn%EU` zfn4Y4Q*+1!4!r6KGZ-Fe7I)rbe~9)J*_7?);UVfDVb;vK literal 0 HcmV?d00001 diff --git a/Release/link.read.1.tlog b/Release/link.read.1.tlog new file mode 100644 index 0000000000000000000000000000000000000000..869c4e45ce0d4c754a75a1012ba51cf0e451b7c8 GIT binary patch literal 2812 zcmd6p+e*Vg5QhJ2!FTAT-V{%Gx=WL^MstvE($=!*i}>v7H%Wt%q96uVq}g3(XZD}- zyuUpw(XG4|Ds-nvo83NEt{2_&pI8s<*2+}sTxZaiN};CE9A6J-)KaIaG=t}L1es1X zQfuV*QV(?i7Q^}of(pb-ZWNkm&g+K9u|GnCYhCKN#g)NfcOAbu(kAQ@^l?x-jS?v9 z_Po*+Z=E31BP~M{&&?G6l5gJXKHX75U}->UXv_y8aV)T4792(AJx455{N+I{5`&bh*Kk$*GqFCmH&mD`9G`Md%6ptEAuCD6`!gzZXj}9+ zVzOq4W&G}Fz2omvf9j9J&bA=>tusfgnYOGoYeir4^puL8V&{_T^?6RnmpL~Zcxs}g zWOW*+@2z;vA=&U)N3PjhPpLSa(t)iDd#YH>ch(~F?5*orjm-m~=;wg~w1&$pHg4wp z#wI-)t0xJbu_?%=pM6BbNN{>;?VZA5k?zrBi#8p1DC_nZ{lH V^JX}U+8q1+>^eo$4Own+`~jjBfz<#2 literal 0 HcmV?d00001 diff --git a/Release/link.write.1.tlog b/Release/link.write.1.tlog new file mode 100644 index 0000000000000000000000000000000000000000..1659a7b412491c204ec7bfa12f3eabcccfe15a47 GIT binary patch literal 480 zcmb`DK@Ng25Jlgb#H)0nJ9mIpK|}*2x*&QH&JO%G;zBEl32D+yXF6~GpP_%SV@u0{ zGe=_XuQ;XPNv=%FNzsjrk_~IsE3B$kwOV(p&e&HC7ZUY!3ovUMQ5*3m>WV19{nX-o x{MK$nD0ITC`QC5e^Z%z=#_z^Csie(HLH2g$HdpGsSKc`e>-yK@RWlOL8UgVcMLYli literal 0 HcmV?d00001 diff --git a/Release/main.obj b/Release/main.obj new file mode 100644 index 0000000000000000000000000000000000000000..211465d1b9d9a9db936c78ec0c9d2442feb59385 GIT binary patch literal 67017 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 literal 0 HcmV?d00001 diff --git a/Release/mt.command.1.tlog b/Release/mt.command.1.tlog new file mode 100644 index 0000000000000000000000000000000000000000..1f120add873b7445826c54ebe5185f20d30e5c7a GIT binary patch literal 428 zcmb7=O-}+r5JcbE#Q$LMJ|uX<6Twwh(Zgb*2ZBLZ4X}V&){kGWz8Sr6@L)DGsjBX- zn%=L^31@T}bHOzOdfflwK0_Y3ROxdix+CX?6FSxlGOL-jk@wH+-~GXapFuSSCDY_F)_ZMt<%UbO87t8{3$x>{fw{GcQ;ub=l)1KVW5-jQt&yq6zgz1=WID;M>ps-yg%U>gqoZe(O64(&86lKwgcIkJLvUCY*MfN8#)2bHsJ-Shi@;jz0mAAbNnU{x{z literal 0 HcmV?d00001 diff --git a/Release/mt.write.1.tlog b/Release/mt.write.1.tlog new file mode 100644 index 0000000000000000000000000000000000000000..b3aff2a2b61189966ac2537d387f6428f81a0b4d GIT binary patch literal 232 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 literal 0 HcmV?d00001 diff --git a/gmcl_jack_win32.vcxproj b/gmcl_jack_win32.vcxproj new file mode 100644 index 0000000..709ed28 --- /dev/null +++ b/gmcl_jack_win32.vcxproj @@ -0,0 +1,74 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {14BE7A2F-5B95-442B-9650-391727398D18} + gmcl_jack_win32 + + + + Application + true + MultiByte + + + DynamicLibrary + false + true + MultiByte + + + + + + + + + + + + + + + Level3 + Disabled + + + true + + + + + Level3 + MaxSpeed + true + true + + + true + true + true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/gmcl_jack_win32.vcxproj.filters b/gmcl_jack_win32.vcxproj.filters new file mode 100644 index 0000000..bccb874 --- /dev/null +++ b/gmcl_jack_win32.vcxproj.filters @@ -0,0 +1,36 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Файлы исходного кода + + + Файлы исходного кода + + + + + Заголовочные файлы + + + Заголовочные файлы + + + Заголовочные файлы + + + \ No newline at end of file diff --git a/gmcl_jack_win32.vcxproj.user b/gmcl_jack_win32.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/gmcl_jack_win32.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/interface.h b/interface.h new file mode 100644 index 0000000..9b1b656 --- /dev/null +++ b/interface.h @@ -0,0 +1,37 @@ +#ifndef __INTERFACE_H +#define __INTERFACE_H + +#include "lua.h" +#include "state.h" + +class CLuaInterface; + +class CLuaShared +{ +public: + void** vtable; + char tmp[88]; + CLuaInterface* m_pClient; + CLuaInterface* m_pServer; + CLuaInterface* m_pMenu; +}; + +class CLuaInterface +{ +public: + void** vtable; + CLuaState* m_pState; +}; + +#ifndef DLL_EXPORT +#if defined(__GCC__) +#define DLL_EXPORT __attribute__((dllexport)) +#elif defined (_MSC_VER) +#define DLL_EXPORT __declspec(dllexport) +#endif +#endif + +#define GMOD_MODULE_OPEN() extern "C" DLL_EXPORT int gmod13_open(CLuaState* L) +#define GMOD_MODULE_CLOSE() extern "C" DLL_EXPORT int gmod13_close(CLuaState* L) + +#endif \ No newline at end of file diff --git a/lua.h b/lua.h new file mode 100644 index 0000000..fafb160 --- /dev/null +++ b/lua.h @@ -0,0 +1,87 @@ +#ifndef __LUA_H +#define __LUA_H + +#include +#include +#include + +#define LUA_REGISTRYINDEX (-10000) +#define LUA_ENVIRONINDEX (-10001) +#define LUA_GLOBALSINDEX (-10002) + +class CLuaState; +typedef int (*CLuaFunction)(CLuaState*); + +typedef int (*lua_type) (CLuaState *L, int idx); +typedef const char *(*lua_typename) (CLuaState *L, int tp); + +typedef int (*lua_gettop) (CLuaState *L); +typedef void (*lua_settop) (CLuaState *L, int idx); +typedef void (*lua_pushvalue) (CLuaState *L, int idx); + +typedef double (*lua_tonumber) (CLuaState *L, int idx); +typedef int (*lua_toboolean) (CLuaState *L, int idx); +typedef const char *(*lua_tolstring) (CLuaState *L, int idx, size_t *len); +typedef CLuaFunction (*lua_tocfunction) (CLuaState *L, int idx); +typedef void *(*lua_touserdata) (CLuaState *L, int idx); +typedef CLuaState *(*lua_tothread) (CLuaState *L, int idx); +typedef const void *(*lua_topointer) (CLuaState *L, int idx); + +typedef void (*lua_pushnil) (CLuaState *L); +typedef void (*lua_pushnumber) (CLuaState *L, double n); +typedef void (*lua_pushlstring) (CLuaState *L, const char *s, size_t l); +typedef void (*lua_pushcclosure) (CLuaState *L, CLuaFunction fn, int n); +typedef void (*lua_pushboolean) (CLuaState *L, int b); +typedef void (*lua_pushlightuserdata) (CLuaState *L, void *p); +typedef int (*lua_pushthread) (CLuaState *L); + +typedef void (*lua_gettable) (CLuaState *L, int idx); +typedef void (*lua_getfield) (CLuaState *L, int idx, const char *k); +typedef void (*lua_rawget) (CLuaState *L, int idx); +typedef void (*lua_rawgeti) (CLuaState *L, int idx, int n); +typedef void (*lua_createtable) (CLuaState *L, int narr, int nrec); +typedef void *(*lua_newuserdata) (CLuaState *L, size_t sz); +typedef int (*lua_getmetatable) (CLuaState *L, int objindex); +typedef void (*lua_getfenv) (CLuaState *L, int idx); + +typedef void (*lua_settable) (CLuaState *L, int idx); +typedef void (*lua_setfield) (CLuaState *L, int idx, const char *k); +typedef void (*lua_rawset) (CLuaState *L, int idx); +typedef void (*lua_rawseti) (CLuaState *L, int idx, int n); +typedef int (*lua_setmetatable) (CLuaState *L, int objindex); +typedef int (*lua_setfenv) (CLuaState *L, int idx); + +typedef void (*lua_call) (CLuaState *L, int nargs, int nresults); +typedef int (*lua_pcall) (CLuaState *L, int nargs, int nresults, int errfunc); + +typedef int (*luaL_loadbufferx)(CLuaState *L, const char *buff, + size_t sz,const char *name,const char* mode); +typedef int (*luaL_newmetatable) (CLuaState *L, const char *tname); +typedef void (*luaL_checktype) (CLuaState *L, int narg, int t); +typedef size_t (*lua_objlen) (CLuaState *L, int idx); +typedef void (*lua_pushinteger)(CLuaState *L, int n); +typedef int (*lua_tointeger)(CLuaState* L,int idx); + +typedef enum { + OK = 0, + YIELD, + ERRRUN, + ERRSYNTAX, + ERRMEM, + ERRERR +} ret_t; + +typedef enum { + NONE = -1, + NIL, + TBOOLEAN, + LIGHTUSERDATA, + NUMBER, + STRING, + TABLE, + FUNCTION, + USERDATA, + THREAD, +} luatype_t; + +#endif \ No newline at end of file diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..154b6c7 --- /dev/null +++ b/main.cpp @@ -0,0 +1,156 @@ +#include +#include "interface.h" + +#define BALL_NAME "luaL_Ball" +#define BALL_TYPE 195 + +typedef struct { + int mass; + int speed; +} ball_t; + +int refId; + +int TestFunc(CLuaState* L) +{ + L->PushString("Hello World!"); + return 1; +} + +int CallBack(CLuaState* L) +{ + L->CheckType(1,FUNCTION); + L->CheckType(2,NUMBER); + int n = L->GetNumber(2); + + L->Push(1); + L->Call(0,n); + L->Pop(n); + return 0; +} + +int CreateBall(CLuaState* L) +{ + L->CheckType(1,NUMBER); + L->CheckType(2,NUMBER); + ball_t* pBall = new ball_t; + + pBall->mass = L->GetNumber(1); + pBall->speed = L->GetNumber(2); + + userdata_t* pData = L->NewUserData(); + pData->data = pBall; + pData->type = BALL_TYPE; + + L->GetMetaFromRegistry(BALL_NAME); + L->SetMetaTable(-2); + + return 1; +} + +ball_t* CheckBall(CLuaState* L,int idx) +{ + userdata_t* pData = L->GetUserData(idx); + if(pData->type == BALL_TYPE) + return (ball_t*)pData->data; + else + return NULL; +} + +int ball_tostring(CLuaState* L) +{ + ball_t* pBall = CheckBall(L,1); + if(!pBall) + L->PushString("pBall = NULL"); + else + L->PushFString("[Ball with mass %d and speed %d]",pBall->mass,pBall->speed); + return 1; +} + +int ball_eq(CLuaState *L) +{ + ball_t* pBall1 = CheckBall(L,1),*pBall2 = CheckBall(L,2); + L->PushBool(((pBall1->mass == pBall2->mass) && (pBall1->speed == pBall2->speed))); + return 1; +} + +int ball_add(CLuaState *L) +{ + ball_t* pBall1 = CheckBall(L,1),*pBall2 = CheckBall(L,2); + + L->PushCFunction(CreateBall); + L->PushNumber(pBall1->mass + pBall2->mass); + L->PushNumber(pBall1->speed + pBall2->speed); + L->Call(2,1); + + return 1; +} + +int ball_gc(CLuaState* L) +{ + ball_t* pBall = CheckBall(L,1); + delete pBall; + return 0; +} + +int ball_increment(CLuaState* L) +{ + ball_t* pBall = CheckBall(L,1); + pBall->mass++; + pBall->speed++; + return 0; +} + +GMOD_MODULE_OPEN() +{ + L->CreateMetaTable(BALL_NAME); + + L->PushCFunction(ball_tostring); + L->SetField(-2,"__tostring"); + + L->PushCFunction(ball_eq); + L->SetField(-2,"__eq"); + + L->PushCFunction(ball_gc); + L->SetField(-2,"__gc"); + + L->PushCFunction(ball_add); + L->SetField(-2,"__add"); + + L->PushCFunction(ball_increment); + L->SetField(-2,"Increment"); + + L->Push(-1); + L->SetField(-2,"__index"); + + L->CreateTable(); + + L->PushCFunction(TestFunc); + L->SetField(-2,"TestFunc"); + + L->PushCFunction(CallBack); + L->SetField(-2,"CallBack"); + + L->PushCFunction(CreateBall); + L->SetField(-2,"CreateBall"); + + L->SetGlobal("jack"); + + L->PushString("Hello World!"); + refId = L->ReferenceCreate(); + L->Print("Reference ID: %d",refId); + + L->GetGlobal("print"); + L->ReferencePush(refId); + L->Call(1,0); + return 0; +} + +GMOD_MODULE_CLOSE() +{ + L->ReferenceFree(refId); + + L->PushNil(); + L->SetGlobal("jack"); + return 0; +} \ No newline at end of file diff --git a/state.cpp b/state.cpp new file mode 100644 index 0000000..651dad8 --- /dev/null +++ b/state.cpp @@ -0,0 +1,343 @@ +#include "state.h" + +func_t lua_api[] = { + {"lua_gettop",NULL}, //0 + {"lua_settop",NULL}, //1 + {"lua_pushvalue",NULL}, //2 + {"lua_tonumber",NULL}, //3 + {"lua_toboolean",NULL}, //4 + {"lua_tolstring",NULL}, //5 + {"lua_tocfunction",NULL}, //6 + {"lua_touserdata",NULL}, //7 + {"lua_tothread",NULL}, //8 + {"lua_topointer",NULL}, //9 + {"lua_pushnil",NULL}, //10 + {"lua_pushnumber",NULL}, //11 + {"lua_pushlstring",NULL}, //12 + {"lua_pushcclosure",NULL}, //13 + {"lua_pushboolean",NULL}, //14 + {"lua_pushlightuserdata",NULL}, //15 + {"lua_pushthread",NULL}, //16 + {"lua_gettable",NULL}, //17 + {"lua_getfield",NULL}, //18 + {"lua_rawget",NULL}, //19 + {"lua_rawgeti",NULL}, //20 + {"lua_createtable",NULL}, //21 + {"lua_getmetatable",NULL}, //22 + {"lua_newuserdata",NULL}, //23 + {"lua_getfenv",NULL}, //24 + {"lua_settable",NULL}, //25 + {"lua_setfield",NULL}, //26 + {"lua_rawset",NULL}, //27 + {"lua_rawseti",NULL}, //28 + {"lua_setmetatable",NULL}, //29 + {"lua_setfenv",NULL}, //30 + {"lua_call",NULL}, //31 + {"lua_pcall",NULL}, //32 + {"luaL_loadbufferx",NULL}, //33 + {"luaL_newmetatable",NULL}, //34 + {"lua_type",NULL}, //35 + {"lua_typename",NULL}, //36 + {"luaL_checktype",NULL}, //37 + {"lua_objlen",NULL}, //38 + {"lua_pushinteger",NULL}, //39 + {"lua_tointeger",NULL}, //40 + {NULL,NULL} +}; + +CLuaState::CLuaState() +{ +} + +CLuaState::~CLuaState() +{ +} + +int CLuaState::GetTop() +{ + return (((lua_gettop)lua_api[0].ptr))(this); +} + +void CLuaState::SetTop(int n) +{ + (((lua_settop)lua_api[1].ptr))(this,n); +} + +void CLuaState::SetField(int idx,const char* name) +{ + (((lua_setfield)lua_api[26].ptr))(this,idx,name); +} + +void CLuaState::GetField(int idx,const char* name) +{ + (((lua_getfield)lua_api[18].ptr))(this,idx,name); +} + +void CLuaState::Push(int idx) +{ + (((lua_pushvalue)lua_api[2].ptr))(this,idx); +} + +void CLuaState::PushNil() +{ + (((lua_pushnil)lua_api[10].ptr))(this); +} + +void CLuaState::PushBool(bool val) +{ + (((lua_pushboolean)lua_api[14].ptr))(this,val); +} + +void CLuaState::PushNumber(double num) +{ + (((lua_pushnumber)lua_api[11].ptr))(this,num); +} + +void CLuaState::PushInteger(int n) +{ + (((lua_pushinteger)lua_api[39].ptr))(this,n); +} + +void CLuaState::PushCClosure(CLuaFunction fn,int n) +{ + (((lua_pushcclosure)lua_api[13].ptr))(this,fn,n); +} + +void CLuaState::PushString(const char* str,size_t len) +{ + if(!len) + len = strlen(str); + (((lua_pushlstring)lua_api[12].ptr))(this,str,len); +} + +void CLuaState::PushVString(const char* fmt,va_list ap) +{ + char buf[512]; + vsnprintf(buf,512,fmt,ap); + PushString(buf); +} + +void CLuaState::PushFString(const char* fmt,...) +{ + va_list ap; + va_start(ap,fmt); + PushVString(fmt,ap); + va_end(ap); +} + +void CLuaState::PushLightUserData(void* p) +{ + (((lua_pushlightuserdata)lua_api[15].ptr))(this,p); +} + +void CLuaState::PushThread(CLuaState* L) +{ + (((lua_pushthread)lua_api[16].ptr))(L); +} + +bool CLuaState::GetBool(int idx) +{ + return (((lua_toboolean)lua_api[4].ptr))(this,idx); +} + +double CLuaState::GetNumber(int idx) +{ + return (((lua_tonumber)lua_api[3].ptr))(this,idx); +} + +int CLuaState::GetInteger(int idx) +{ + return (((lua_tointeger)lua_api[40].ptr))(this,idx); +} + +const char* CLuaState::GetString(int idx,size_t* len) +{ + return (((lua_tolstring)lua_api[5].ptr))(this,idx,len); +} + +userdata_t* CLuaState::GetUserData(int idx) +{ + return (userdata_t*)(((lua_touserdata)lua_api[7].ptr))(this,idx); +} + +CLuaFunction CLuaState::GetCFunction(int idx) +{ + return (((lua_tocfunction)lua_api[6].ptr))(this,idx); +} + +CLuaState* CLuaState::GetThread(int idx) +{ + return (((lua_tothread)lua_api[8].ptr))(this,idx); +} + +const void* CLuaState::GetPointer(int idx) +{ + return (((lua_topointer)lua_api[9].ptr))(this,idx); +} + +void CLuaState::CreateTable() +{ + (((lua_createtable)lua_api[21].ptr))(this,0,0); +} + +void CLuaState::GetTable(int idx) +{ + (((lua_gettable)lua_api[17].ptr))(this,idx); +} + +void CLuaState::SetTable(int idx) +{ + (((lua_settable)lua_api[25].ptr))(this,idx); +} + +void CLuaState::RawGet(int idx) +{ + (((lua_rawget)lua_api[19].ptr))(this,idx); +} + +void CLuaState::RawGeti(int idx,int n) +{ + (((lua_rawgeti)lua_api[20].ptr))(this,idx,n); +} + +void CLuaState::RawSet(int idx) +{ + (((lua_rawset)lua_api[27].ptr))(this,idx); +} + +void CLuaState::RawSeti(int idx,int n) +{ + (((lua_rawseti)lua_api[28].ptr))(this,idx,n); +} + +void CLuaState::GetEnvironment(int idx) +{ + (((lua_getfenv)lua_api[24].ptr))(this,idx); +} + +void CLuaState::SetEnvironment(int idx) +{ + (((lua_setfenv)lua_api[30].ptr))(this,idx); +} + +userdata_t* CLuaState::NewUserData() +{ + return (userdata_t*)(((lua_newuserdata)lua_api[23].ptr))(this,sizeof(userdata_t)); +} + +void CLuaState::CreateMetaTable(const char* name) +{ + (((luaL_newmetatable)lua_api[34].ptr))(this,name); +} + +int CLuaState::GetMetaTable(int idx) +{ + return (((lua_getmetatable)lua_api[22].ptr))(this,idx); +} + +int CLuaState::SetMetaTable(int idx) +{ + return (((lua_setmetatable)lua_api[29].ptr))(this,idx); +} + +luatype_t CLuaState::Type(int idx) +{ + return (luatype_t)(((lua_type)lua_api[35].ptr))(this,idx); +} + +const char* CLuaState::TypeName(int idx) +{ + return (((lua_typename)lua_api[36].ptr))(this,Type(idx)); +} + +void CLuaState::CheckType(int idx,luatype_t tp) +{ + (((luaL_checktype)lua_api[37].ptr))(this,idx,tp); +} + +void CLuaState::Call(int nargs,int nret) +{ + (((lua_call)lua_api[31].ptr))(this,nargs,nret); +} + +int CLuaState::PCall(int nargs,int nret,int errfunc) +{ + return (((lua_pcall)lua_api[32].ptr))(this,nargs,nret,errfunc); +} + +void CLuaState::Print(const char* msg,...) +{ + GetGlobal("print"); + va_list ap; + va_start(ap,msg); + PushVString(msg,ap); + va_end(ap); + Call(1,0); +} + +int CLuaState::ObjLen(int idx) +{ + return (((lua_objlen)lua_api[38].ptr))(this,idx); +} + +int CLuaState::ReferenceCreate() +{ + int len = ObjLen(-1); + len++; + PushInteger(len); + Push(-2); + SetTable(LUA_REGISTRYINDEX); + Pop(); + return len; +} + +void CLuaState::ReferencePush(int refId) +{ + PushInteger(refId); + GetTable(LUA_REGISTRYINDEX); +} + +void CLuaState::ReferenceFree(int refId) +{ + PushInteger(refId); + PushNil(); + SetTable(LUA_REGISTRYINDEX); +} + +const char* CLuaState::RunString(const char* name,const char* buf,size_t len) +{ + const char* err = NULL; + if( (((luaL_loadbufferx)lua_api[33].ptr))(this,buf,len,name,NULL) != OK) + { + err = GetString(-1); + Pop(); + } + else + PCall(0,0,0); + return err; +} + +BOOL WINAPI ConnectLuaShared() +{ + HMODULE hLuaShared = NULL; + char szDebugInfo[128]; + if(!(hLuaShared = GetModuleHandle("lua_shared.dll"))) + return FALSE; + for(func_t* i = lua_api; i->name; i++) + { + if(!(i->ptr = (void*)GetProcAddress(hLuaShared,i->name))) + { + _snprintf(szDebugInfo,128,"GetProcAddress failed at %s",i->name); + MessageBoxA(NULL,szDebugInfo,"ConnectLuaShared",MB_ICONHAND); + return FALSE; + } + } + return TRUE; +} + +BOOL APIENTRY DllMain(HINSTANCE hDll,DWORD fdwReason,LPVOID lpReserved) +{ + if(fdwReason == DLL_PROCESS_ATTACH) + return ConnectLuaShared(); + return TRUE; +} \ No newline at end of file diff --git a/state.h b/state.h new file mode 100644 index 0000000..ffbc529 --- /dev/null +++ b/state.h @@ -0,0 +1,102 @@ +#ifndef __STATE_H +#define __STATE_H + +#include "lua.h" +#include +#include +#include + +typedef struct { + const char* name; + void* ptr; +} func_t; + +typedef struct { + void* data; + unsigned char type; +} userdata_t; + +class CLuaState +{ +public: + CLuaState(); + ~CLuaState(); + + int GetTop(); + void SetTop(int n); + + void SetField(int idx,const char* name); + void GetField(int idx,const char* name); + + inline void GetGlobal(const char* name){GetField(LUA_GLOBALSINDEX,name);} + inline void SetGlobal(const char* name){SetField(LUA_GLOBALSINDEX,name);} + inline void GetMetaFromRegistry(const char* name){GetField(LUA_REGISTRYINDEX,name);} + + void Push(int idx); + void Pop(int amt = 1){SetTop(-(amt)-1);} + + void PushNil(); + void PushBool(bool val); + void PushNumber(double num); + void PushInteger(int n); + void PushCClosure(CLuaFunction fn,int n); + inline void PushCFunction(CLuaFunction fn){PushCClosure(fn,0);} + void PushString(const char* str,size_t len = 0); + void PushVString(const char* fmt,va_list ap); + void PushFString(const char* fmt,...); + void PushLightUserData(void* p); + void PushThread(CLuaState* L); + + bool GetBool(int idx); + double GetNumber(int idx); + int GetInteger(int idx); + const char* GetString(int idx,size_t* len = NULL); + userdata_t* GetUserData(int idx); + CLuaFunction GetCFunction(int idx); + CLuaState* GetThread(int idx); + const void* GetPointer(int idx); + + void CreateTable(); + void GetTable(int idx); + void SetTable(int idx); + + void RawGet(int idx); + void RawGeti(int idx,int n); + void RawSet(int idx); + void RawSeti(int idx,int n); + + void GetEnvironment(int idx); + void SetEnvironment(int idx); + + userdata_t* NewUserData(); + void CreateMetaTable(const char* name); + int GetMetaTable(int idx); + int SetMetaTable(int idx); + + luatype_t Type(int idx); + const char* TypeName(int idx); + void CheckType(int idx,luatype_t tp); + + void Call(int nargs,int nret); + int PCall(int nargs,int nret,int errfunc); + + int ObjLen(int idx); + int ReferenceCreate(); + void ReferencePush(int refId); + void ReferenceFree(int refId); + + void Print(const char*,...); + const char* RunString(const char* name,const char* buf,size_t len); + + inline bool IsNil(int idx){return (Type(idx) == NIL);} + inline bool IsBool(int idx){return (Type(idx) == TBOOLEAN);} + inline bool IsLightUserData(int idx){return (Type(idx) == LIGHTUSERDATA);} + inline bool IsNumber(int idx){return (Type(idx) == NUMBER);} + inline bool IsString(int idx){return (Type(idx) == STRING);} + inline bool IsTable(int idx){return (Type(idx) == TABLE);} + inline bool IsFunction(int idx){return (Type(idx) == FUNCTION);} + inline bool IsUserData(int idx){return (Type(idx) == USERDATA);} + inline bool IsThread(int idx){return (Type(idx) == THREAD);} +}; + +#endif \ No newline at end of file