amxmodx/mac_support.patch

30768 lines
1.3 MiB
Diff
Raw Normal View History

diff --git a/amxmodx/CCmd.cpp b/amxmodx/CCmd.cpp
--- a/amxmodx/CCmd.cpp
+++ b/amxmodx/CCmd.cpp
@@ -148,17 +148,17 @@ void CmdMngr::setCmdLink(CmdLink** a, Co
if (np == 0) return;
if (sorted)
{
while (*a)
{
int i = strcmp(c->getCommand(), (*a)->cmd->getCommand());
- if ((i < 0) || (i == 0) && (strcmp(c->getArgument(), (*a)->cmd->getArgument()) < 0))
+ if ((i < 0) || ((i == 0) && (strcmp(c->getArgument(), (*a)->cmd->getArgument()) < 0)))
break;
a = &(*a)->next;
}
np->next = *a;
*a = np;
} else {
diff --git a/amxmodx/CForward.h b/amxmodx/CForward.h
--- a/amxmodx/CForward.h
+++ b/amxmodx/CForward.h
@@ -139,17 +139,16 @@ public:
return m_ParamTypes[paramId];
}
};
// Single plugin forward
class CSPForward
{
friend class CForwardMngr;
- const char *m_FuncName;
int m_NumParams;
ForwardParam m_ParamTypes[FORWARD_MAX_PARAMS];
AMX *m_Amx;
int m_Func;
bool m_HasFunc;
String m_Name;
diff --git a/amxmodx/CLang.cpp b/amxmodx/CLang.cpp
--- a/amxmodx/CLang.cpp
+++ b/amxmodx/CLang.cpp
@@ -30,17 +30,17 @@
*/
#include <stdarg.h>
#include "amxmodx.h"
#include "CLang.h"
#include "format.h"
#include "amxmod_compat.h"
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
#define _snprintf snprintf
#endif
#define LITIDX_NONE 0
#define LITIDX_BRACKET 1
#define LITIDX_DEFINITION 2
#define INSERT_NUMBER 1
@@ -103,17 +103,17 @@ int Compare<int>(const int &k1, const in
// return the number of written characters (including the terimating zero char)
size_t CLangMngr::strip(char *str, char *newstr, bool makelower)
{
size_t i = 0;
size_t pos = 0;
int flag = 0;
size_t strln = strlen(str);
- for (i = strln - 1; i >= 0; i--)
+ for (i = strln - 1; i < strln; i--)
{
if (str[i] == '\n' || str[i] == ' ' || str[i] == '\t')
{
str[i] = 0;
} else {
break;
}
}
diff --git a/amxmodx/CLogEvent.cpp b/amxmodx/CLogEvent.cpp
--- a/amxmodx/CLogEvent.cpp
+++ b/amxmodx/CLogEvent.cpp
@@ -106,34 +106,34 @@ void LogEventsMngr::CLogEvent::registerF
LogCondEle* aa = new LogCondEle(cmp, 0);
if (aa == 0)
return;
filters = new LogCond(cmp->pos, aa, filters);
}
-void LogEventsMngr::setLogString(char* frmt, va_list& vaptr)
+void LogEventsMngr::setLogString(const char* frmt, va_list& vaptr)
{
++logCounter;
int len = vsnprintf(logString, 255, frmt, vaptr);
if (len == - 1)
{
len = 255;
logString[len] = 0;
}
if (len)
logString[--len] = 0;
logArgc = 0;
}
-void LogEventsMngr::setLogString(char* frmt, ...)
+void LogEventsMngr::setLogString(const char* frmt, ...)
{
++logCounter;
va_list logArgPtr;
va_start(logArgPtr, frmt);
int len = vsnprintf(logString, 255, frmt, logArgPtr);
if (len == - 1)
{
diff --git a/amxmodx/CLogEvent.h b/amxmodx/CLogEvent.h
--- a/amxmodx/CLogEvent.h
+++ b/amxmodx/CLogEvent.h
@@ -136,18 +136,18 @@ private:
public:
LogEventsMngr();
~LogEventsMngr();
// Interface
CLogEvent* registerLogEvent(CPluginMngr::CPlugin* plugin, int func, int pos);
inline bool logEventsExist() { return arelogevents; }
- void setLogString(char* frmt, va_list& vaptr);
- void setLogString(char* frmt, ...);
+ void setLogString(const char* frmt, va_list& vaptr);
+ void setLogString(const char* frmt, ...);
void parseLogString();
void executeLogEvents();
inline const char* getLogString() { return logString; }
inline int getLogArgNum() { return logArgc; }
inline const char* getLogArg(int i) { return (i < 0 || i >= logArgc) ? "" : logArgs[i]; }
void clearLogEvents();
diff --git a/amxmodx/CMisc.h b/amxmodx/CMisc.h
--- a/amxmodx/CMisc.h
+++ b/amxmodx/CMisc.h
@@ -337,17 +337,17 @@ public:
while (i<sizeof(m_AuthData)-1)
{
if ((m_AuthData[i++]=*Input++)==0)
{
return;
}
}
- m_AuthData[sizeof(m_AuthData)-1]=0;
+ m_AuthData[arraysize(m_AuthData)-1]=0;
};
const cell *GetAuthID(void) const
{
return &m_AuthData[0];
};
void SetPass(const cell *Input)
@@ -356,17 +356,17 @@ public:
while (i<sizeof(m_Password)-1)
{
if ((m_Password[i++]=*Input++)==0)
{
return;
}
}
- m_Password[sizeof(m_Password)-1]=0;
+ m_Password[arraysize(m_Password)-1]=0;
};
const cell *GetPass(void) const
{
return &m_Password[0];
};
CAdminData & operator = (const CAdminData &src)
diff --git a/amxmodx/CModule.cpp b/amxmodx/CModule.cpp
--- a/amxmodx/CModule.cpp
+++ b/amxmodx/CModule.cpp
@@ -215,17 +215,17 @@ bool CModule::attachModule()
bool CModule::queryModule()
{
if (m_Status != MODULE_NONE) // don't check if already queried
return false;
m_Handle = DLLOAD(m_Filename.c_str()); // load file
if (!m_Handle)
{
-#if defined __linux__
+#if defined(__linux__) || defined(__APPLE__)
AMXXLOG_Log("[AMXX] Module \"%s\" failed to load (%s)", m_Filename.c_str(), dlerror());
#endif
m_Status = MODULE_BADLOAD;
return false;
}
// Check whether the module uses metamod (for auto attach)
if (DLPROC(m_Handle, "Meta_Attach"))
diff --git a/amxmodx/CString.h b/amxmodx/CString.h
--- a/amxmodx/CString.h
+++ b/amxmodx/CString.h
@@ -239,17 +239,17 @@ public:
if (len < 1)
{
return;
}
if (is_space(v[len-1]))
{
- for (i=len-1; i>=0; i--)
+ for (i=len-1; i<len; i--)
{
if (!is_space(v[i])
|| (is_space(v[i]) && i==0))
{
erase(i+1, j);
break;
}
j++;
diff --git a/amxmodx/JIT/amxexecn-darwin.o b/amxmodx/JIT/amxexecn-darwin.o
new file mode 100644
index 0000000000000000000000000000000000000000..6821de60c581597547010060e33328f0cfabf85d
GIT binary patch
literal 16356
zc%1E<eRNZ0p2u&RTPWHwowX}ft5(fX+#*t`3@o@q+5}oin>I;li-nLj0V<)5d8u^{
z&N2j*OsKGmiYtRS!>YTY=nSLGkzI=xL4292a45<-A_F_T>EZ!}L749E_dMU5doMVD
z?qA!U^XupHyxh0vKDoKiukg{iul_n*Q4}kMg(8PyK#@OO?p1#H=c8gpISumm!?7*@
z1Okb0cS7$Q2>4x1e)IOjisbhE(|4VsT*jgrw+RIkL1WqJ@H@=g@1*|cie$O)dPTX(
zVm=0+4>#LyRg@o7+sScs%*z$UmvP$jGJbo0ro~>6aoY<UXEvlx<PSzm2BXD;(IT&}
zelS`{9SSXedr_uN%|!Du-T9fSf=p9kMzMT9cuQugntC@cqYfvXDYS5;UTf8BuN=H3
z^{zUJ4roi=M8_smV|f#I+LjhlN$fy2=9(JM(0F7zRBETa+^oKwL)T$As`<d?W1HHp
zG_+~8TG^`FwJK{NYX@uEdAE{vzrmf?8S2^jy8L|V)9GZ%_|$jVmQJQpTBW1P#@kJe
zH^}RveWWf}lDW&dU+RLI7&cFAB7VvC%;-DP>K(>Xp`lc2YAY3OJ?hfzP`@$4IGX=H
z0z+M&sZ~EcK-*aQn`OsGO&ynL9cf3jJGlXM|MWn!rGN02|Ktf;Dh^t9#9Tb4olWY3
zk{m`8tdK9vl2p@YS#m_3%4$tsmWj~3qr;19r!G5La+A3kz9Z?ArDAJsceH65n{wZ6
zvhVQpJ89L<Q;|+J-7oRBz+<xDw4F~KRi*pk+N~7Dn&fxcnuw`GCUUoON!4|F740&k
z+EUw~g;LYIthH)Sd+)@EUA3*W<<Y>pX^2-Ak;!RC6PjiM4?lIu_B>3_4lyE&ibchW
zk~}fli|u^sE#jEz@6-8q%lp}FUK=jE@R2j+{CiTuUT9nT7S)p#*;2nJOBag~y0qJx
zY_~_XZkf@x9`|i@89g0&nJzVZtvwxT`duq+r4L9K{jzq+kJ5<VM6SFzt{u^vJR?dI
z`x9S7l7}I&{gAFtA@}cs#J52fZ-LkzeQ9uTP%ErlXDIaii&m&le@sI}lQXMFbUoW_
zoW8mrH24vNA8QtO(|hLFtif9zOYbRr`{{1mh_7tRHVotYr=Gb$*GI)CsCecARgCx~
zVYM8q!d3@qtMs1RKH)AgZ1F8sZBO^h%Gr7)!6K*ZZG<xedih3)5fWt*X9lkBodT1f
zdaL$K>!5>wHA^_}uvg*}ZQ|}w@8ItOy;v%X+YS^_zinrWNDm4<S0px_*uRB)*jD$N
zicgq}kC}^4nu|}Fi;tU&Yt6-V=Hj#F;;*PUX{y@Om8YLpS?{EoT%(<%9GnX68VB`f
z<Dgn9+6M7ZlXq)+wmDz#nJ;^$Mh~}W-%0nW#)o5@DxTz2->e#+=`*O5-frzsYbHgw
zbrQEmMC*sPrMGkI9=-KCQ>%?in1GEld&-CROdeUk?P$)ae``*CX+5=JPM}#km%~=$
zx$L!S=klS|crI^Q&F8YoYCPI=RJv`uWshuo+|>4v)pRB!dnOMr>pk^+BKPXv)WD!P
z5j>F(pHDdDvFlC8uB1|pw)63(osZ%J?{U>PrjODU@&&%cJ4`LM=PQZf^zh41yTmgv
z?eeD^n$k5T^jf0Q6EIy<l%8FfnIj(3;)@~eDll}M?LJy$)xJ_E9<e?0aZdI{LFIn@
z2zA@-X}`VX;=QI%mA26SW*4O2P9LEbdrynK*z%W#nT_>6Z{1)+UaGGkFlV+rnmct?
zu|2er_D)}1#q=02q5bei;sHAc$I83-SgJUdtB?-hr@rTC=d|ljQ+;{7XP4W!a}V#_
zyyK(mE&R~P*PpkdAT0eZKfCC{x2u^NC6iP~yqCyNZO^No<WiESs7wQVbS`aAPj(&!
z)t093Y!nJ@>FhVQb+q01%_e^BbK2Aaw=FMqLfuzvZ_?`$KTzlVfx3{n?sKX$mhV;4
zho9N^pptPZbz={CGk)rR(7NqlPTuY%A6RKJ>|3O8f7<M!PZBxD3kG@za<8J7z|Uz9
zAD=xwY~OjdS+mol?fXXCXKM$}<1Icr`o)1~*4do7*V6{JX}LEsDsr!p?~rm*q#n#y
zk~uVrVjj_b;%{cYQ4K|O@3K=ZePk}pg#1*WO1CIMv(z1=yLNN~J&8#CnT960N4c9F
zE;l{om7@<Siejpz*DB?B%v8k-j^hDS6|W(VyG>QOTs6^D#V=jQ%?Hinsw+)Zmvfao
ziDUtt@|@;-X3d#1C)Jlfdrsh<cZQY#LrZ|6CBV=UU}y<2v;-Jh0t_tyhL!+BOMsyz
z!2hcyz#xAI49dS0(6=euPeJjQ4-ai$Nvx%4rU+5|fno>69*RFvbW*IO_=e&yyd7<r
zPcf3>W{Nu~CQ&>~@iN7m6z@??qnJ;zm*O1vrFmaUF_EH*qLJcxijOGvQ0%8TNbxnr
zIf{H5x@#%MP&g=fC>trdDW0czkK!c7^)yoa^!+J?lY&QX76m`YBNR!BpHn<Sv5Mkp
zieFP~qS#9D9>s2oFDQ;td`FQ(H{=S6Ybfj#H&fJ6G*d(<enGLEVkN~Iif1XFr+As-
z4T}Gw*iP{w#XgDy6o01pjv|-lP65TW6#qamk)n#CkzyW2l42Rf;}pN9c#UEk#YYso
zDL$h(OmULpEX7|bRGL#Zifbrtrr1O=fu>8E;uDG^6bC8(gJ$R^ip>;TDc+^nMRAPc
ze<;pVjG(p4wG{Q_+bAxOmr#^bR8h20L@Aa~?4cN%V?%T7|9Xzm-MUKrty4V(o&etj
zU(c81i~{o{cof_M{!aeQRP9s6>{NTft>6}LGx#dF5quHc0Imnuf@{Fl;3{whxEx#t
zE&&&V-CzQYf)Q{57y{>lEnpMq2kSsLSOq%4Dd1#q0$2`?1xJIUKs#6h7K24#Ay@$B
zgL$9|D&Tpm<XP}EcoIAT9sv)52f+Q{0Jt0M2R{IJf_-2wxE0(2ZU$ckH-ayM8^HD8
zT5t`x8e9dg0GETyz$M^fup3N(Q7{5707Kwhumx-a{a_vF2CG0PI0c*xP5{fnvEXQM
z6le!az+$inECdU{d@v7GK?OXYgZmGj22X+~z$4%x@Bp|U8~}HN{on`SPOuN`1-F7*
zz|G*R;70I8a09p=TnnxNSA(m-72tAk88{bg0h>TSSO>bnD$of|0VjhKz;bXbI2s%U
z+QAaA7%Tz{!2&QJ%mY<W0nb}-|G?AWN$>=C1Uv*D0QZ9f;BK%V`~chu_JO_NR&Wcr
z8GIGo2)+nz0M~<S!8PD&a22=$Tn;V+mw=1GZZH8x!3ekj41sgO7O)BQgLR-AtOA|j
z6mT*)0W1f{f}_DvpdBm$i@_qW5G(-m!8}j}74W=*`wyN5Pl6}FBj6$M0Jt9<0C$7^
z;0NGNun+77w}M;1&ETuxM({;&1GpYs3$6iIgR8(5;Bs&oxCC4bc7q8p3P!*MU<jNG
zwt!8bAFKo2U=`>Dr+|~e31B%m790(Z0_|W4SgGj$wyh3M^~!8GM+D?G?SpV$rmleV
zDs~;57s#97yx{GH^BT4v&dcR5;rx<!63&a-K{&nEDL=AEFQ6!f|Cpi_{&$L89k5?X
z;f5Dd%!2<t#R53JGAc><NQ#Fo`oE)l3Vt=k^YCjZeh<HvV!K5jlie1591dIbYy8e|
z&iu?2V@o%yNOPJvw`xv5w;Oz1j=s;yIr=`Q=ICQmlcVq7o1<TEV~&0;E%0KBAe`^_
zJUGvRg>ar1F*wha#c-Zi55sv5_P}|LJPqf$x(?3s_cw5!)33niQv3nVbH5MHpNBsh
zu6>`uzc7r$f9L4)>U54iuPj!5d@i%<bLmQ}K2}9meXOpt>SJZM>SI-E)yL{it3Fnf
ztom3vt@>Dbtom3r!TGZ`2hN|rb~t|~`MvH6i(CmWgY$}b6`WVb>)<>-8{xb%ejWZx
z@*QwqEq@Guf&3txSJq#{d4+ur&MR$x_h#o6_f>FSao-H*mG@XUufQk6`Pp9u=M}jh
z&MWh|a9*Kz!1=Sd7|tv7hvBUhPr-TB{v7<DDSiuINzn`cSBm%Hyz<`*=M2D~;G7Bg
z2F@9QK{#gwhUZHEmZAvGS%RD3*VD}z2j|SeKfyVJFayq+geEw@dxhcrIqQHgAn$_T
zNB(m-e}*20XUHFg^Sj}baQ@t^gL9_h1^64}o8bJ8`UafeW8Z>vR^xp*XE*l3`Ca%6
zIA=SK!#V45MjMA5nI&N72f7W;@99^=IWux2oHHb)aL$yBhx59^0q4xgbU4p<FPt+e
zv*4Uj3Bq}8*AC|l%YAUpv^)ssjLSoCUbFUS$0dIP-ax({&RLlk;GCU#1<vc|*WsM4
zc?-^2n;me@-t@zH-97;4Y|cSAXLXLlIlJ>Mobv~N)vl2|cer%U`sBko`%?(#EYOW`
z&IXNvb5>{)oU=n!aLy9d!8udZ0_V(82>y@cQFtx+&)}R@S_<dv(l6nhWqK0M*`{B?
zIqS3m&e^9;aLz)#4(DvtRyb#+-hp#=Y8Ra6?8k7<R(%fVtkoenXRp47a~A6yoU>WO
z@}zTC>k2q$w~F9Af9-J2c8!H|)@wYRvtM_^ISb~3b2iKk=d73?&e^eh;G883!8uzN
zfpgX@3FqwDgK*BGrQw`Sdjif`we@h$uDt~3EZcA4oNap(&RMrUIA`Df2<Q3r8Jx3m
zU&1*ncMQ(ixl?e?(tQu-IrXCv(tYGN!0#h3gRdm7g!4V00pCGB8~z1(C;S5WFW^_x
zaUO?{BYzss8N%n_Jg&ckcad+0KSJIQ=kXhWKSlm$IA<8YfpeDe0-UpsmtQ8Gvxy_&
zoQ1pr&e_OY;hdE$gL8Ir5}dP;E;wf_>*1Waya&FQ{9ZVpS2vt9n<+SFI9I|s)A<aX
zGoCNNIrI4noU@*9!a4i76JCYPCp%|D55hSs`Zb)hqZhR6BJw}AV(%j#3*SZVg!BID
z;k?}}cs}u7_*7yyoHO?+c$l~X&h1aaGsNG(*AZWXGq-BzL);19OZ*gmjQBZwj{Lta
zhv57Nz$@r$$!5X(Fgw-XQY6<TTD{#+UkvBJ{wcvl-GOj-xGfNjFH!=g()_@@NN|2!
zbm@$?b%w%`_IN^eGL#)PO#zqJ8>scvy0QgVQ?)-^aQJ*KuU_=|9hEakvK1AchFYgD
zTdZ-_I4Ub$KE0;8c4l?0&+j$w!tH6yR#dqhb;fd~!|kr1KKj`?{M9q{^K(|utaj=}
zpWEfCGoFCQ+ng;<^>}L>`svSfd41KMTElhwr}70D&erK_(vRe-XqaYbGmJ|E4U711
zOvcv0bVH9ihu2Y~kAu@w<EYk;Jk3?>@;cn2Jk{-(W;m88R(fjc9F=~(qN3UF^3+x8
z6}6tqDp%zUpP`G_)97>QWv|QasT5Nnt^`_x@vtKPCssT>UkS7YBazl%+d`@ew<fuw
zJ*oue#b_ce2nXp`<bEX(Pb}nL+#qICAQ=zG5?K@ftt$|Y#X4h3AR3GX7qxXJJ7|_g
zW9>B6B4n{}Je-jGkt%i`e<04s4}|2&1>)^L3$s#Vh|g7&1B-(5+uP{S?U8VxD;$fr
zcXr4LoGmQS&MOq2C%2)QEiRJV<aNmNUm&k9nrw}<x6uY2!9;skm?YBP8VknSS*fur
z7$cEa*b!V5P6S&chBK2V=BW#~Jq~A}&Rd;zhufcZpQ*)XYO7YpjG0n)*O*`^MB@<;
zbS{)l&I&aB<l-i;Yif3X?AqSgeWsS|kt#j(fzz5~0WA)v)2lTIN4?MQ$<_-u*85B?
zK2w`G>2YNjoiu&iaXsV48JpsXSZko8Gf~$1Kq4$l<wAKI!-e_`7wR)zsLynv?rLWf
zAEo@_6X1qGg=iXgQ4_WBl^c{g@^HATr`2Z1MijK8RQkPcCDN9NMFM5uo!~gI9J~u0
zFHTl$7)OUVI>hx3HJ+I+?U2H8#HPxsY0SC?UzOG_9PPs84T~n@3j&eO&S<v2QnPH0
zPZ$SwC9V)Rksq`q{16sxUXR#;*X0Ll#Vn#{vPNw;(;I5UCe!ITBRI?DRqjnLiqZ#Y
zVYow7)y@)d)yop-<}U~-vSOOo@0EfIU$%=+>*LFI@}ZZn$}J(PeHyFWfy(TB5e4mH
ztGvb*uc4);LGFsaTe5ZJN<7rwMNgnmh#mvN=XZ9BD{H_O4crSfe9FWQ8Y+NnL#=4=
zi1TccpsyeSm$>8fZOLD^awqau^0`T)@%3n@FC4pN&(?`i^BLx{&oGtcxZyTvLyQ5|
zhF2S0ty#MP+40wg-&L=Vrf?jjx;9(Qs@G~YK21a)rz_i?72Qd-8lNWG=fo$Tl;bBF
zKiT5hIrfs8vP)|2yy$sQSyLzX_mlEV`rdU(&G<`dOb_g~MbUT}?{#W5eO^TSC1*Lo
zbe8n(7NM`kVCVtyDdekPK;NA7l%(23S1`iWc*)|iZ>A?;Jtl^9?KaDj6GwN+$6&2X
zw$)U4<OKIRYNu&+e#bQJbDZ5vW3|7sO6iOS;`g^F+VE)6i{Xxtd<^(p{tCIrMu%Z*
zN1gE*r9EhCJ>o$zmA(S~0eo;|0iPaOz~@F5@ad5SzejhkcwsXa$Fz0EV&S&L#nthJ
z?a{#BXbW|Ag!Q^g`7EpOx*Ri<R=Obz#VeA0Ig;g$&R}b2EP;<HeMLAGdiN3Cgv1m4
zK9#jd=l!CvD7+}x)<(Bmlv?QxDI}HNDWX~@dbG5M!u*nyNX9ypNN1=u5Tvo5ABgb=
MfsSyHW=ul)Uv^;sV*mgE
diff --git a/amxmodx/JIT/amxexecn.o b/amxmodx/JIT/amxexecn.o
index 4528160d4d3b96ff3b697575be150cfd439be4b4..566b4ec526cc711ca6973757980692545973fc75
GIT binary patch
literal 12896
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
UN&TeFq+!xl(uJgpN%`;p0C3oGl>h($
diff --git a/amxmodx/JIT/amxexecn.obj b/amxmodx/JIT/amxexecn.obj
index 70edf84ae043da56d677b8adaf47ae82f99bb890..059c2c833f384e96409edfd6902f17edd206ecf8
GIT binary patch
literal 12621
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
SJW^wWsi8!27|B>!`u_k-)kQA=
diff --git a/amxmodx/JIT/amxjitsn-darwin.o b/amxmodx/JIT/amxjitsn-darwin.o
new file mode 100644
index 0000000000000000000000000000000000000000..0b21d6d5ec31a489100b53dde3c3e6097b2da816
GIT binary patch
literal 24434
zc%1EAd3+Sbww`1r3lJbcHdf&RN|YT$FsKa4kOZ<%0ttdcmVpdrV`dVA7Zn*0#v#fT
z*DK-zUQxMER8SCYgJJW!TvQP7iXx)2yC4z}$UCR%>*)^6Jl@~$_xMqK-#PVFb#--B
zb@%isK0SZ(QiQ=^Fj5Mk6iR8ILH=R8(Gd90pxy?<??5gefwKI^W^>!?-I~^B%eNHf
zw=O@or!3EZ`t>mw*6_hh`Z8t3?qa>2V$L_WF29}*SlLV3WrGcd=Pzp`w<m#8#R!Ap
zIMrV>k$kZRLxFY5WM4|Z7+-$B1mCoNJyzXMmHE=5eB+|M|2DQ~%NWN0hJ5Soc@N<#
zKH843MLlJ`-j7=P_y)1Sv%~25>B1D>jV$nG#@vt@eR{P|l({4E8?P%m@x!F{T+G$O
zXKL%4*Vg3O66x7t@);7Fy{Q*up7XG=GRl|SBjgCV_uY^j<xTG4`)lvSKYWw=C7zq<
zbG2>rp*z-RO40<x&nEtQ*YS<qoI7l{PjB)in^s*UL-~{b*%Z#LO!72Eo?e~QliSwO
zGpU9C^z|*SpFFZNi?62+Q3iwr7Wb0kCsgqi78e8&|9VM?J*s#iix&hDZ<XTZELL7(
zQ5%R%n&?>}YKeV{d({*{mHJGJxT{tj;kv)!VjZrmyS#O={%V6_X&@+FLUqT|6&i6#
z*DvB&t1PTf4x%?+(sfNtJnL&&?+T*-;-ap1Wc@F)epL|ts*73&q5j>h|AO^lSL$6t
zzfnC`p2$i|5N)c^zN2afvi1i0XH&$L+U{Dt#t>FdWpz;y^~nqVnvI=U?Pc|1W8gvX
zzEFGpWAQB(uMZ-AM2h`m@p~437es8AV*gl-rX@w`U<xcAEyZ#yjxYrti(M|rLG=t-
zUK3vrPjg7^0HxFv`1*bSr>0+GiuW{|+=<FE7Pq}p{FY8UlWJEs1*x^+&&yk}>Nua;
z(IEQiLhpNxPt9u@!uswsAe63Qf%Sv*`WT^~#QO9g`itj<{#9N5e`WpLAo@@A`j{cg
z^Q?=yvbSFpx(3q%|15qm+4RDfT=nj-z_Z>diflR9Ib@f=kP<?ddz10X`YmexT<xH6
z9{=Hi=Sp|2+Kqf)x`9q{Iv1E0q`<LrT;N7NLw|vXxIjaA;NiDP6uAF4j8#vwq4qDz
zJNky}#7l+PXO7{~*GKt|WuXDazmR#GJ<Xw1SwuwO%5FntbWCGye`Rn);07j0nIqa~
z=||(Zwy#piO4F6fQ_bSAza-Lu!>D=lBLX*XyU_VUytk|&h4NBF;I4eOS-+;qbNM33
zxwzz^`CLpSJ0C=rA!H3BM{@)FD}5pZpK^a$Taz~=<WG^+(pSlh)SZlOES)<mw7Zn5
zAcB2T@PYC$3qr0Gye$NeD6d88`azffgvf8GyWkC1z6hdm`89Do3q#uQ`X3p1s-y~S
z?k4V7QR|^|MO<hM7aG|n@YL<B9$-hfx~e)@U&i`&SLzS_0X<fe!Cc~LF7bGf66^dW
z<oYmJX>1etWFHVpUwA{ENjV%uQzA8Sq~RmS(6XyU(?6S{uRQW7q4oZD|8_ob;`x@?
z=Xn94VwqelHAu0RGvW}rru)q%F4z+LBKeg%mbbsMMZ3<Z=a=Xm>>cJkoj68$A&7Rh
zthyJqp8k5fhWy#2eA-qwSasTZp>65^I=6YyBH41U>H3D$w%(NMO&;;U8mY8z7kD&`
zIpe>u{1|zJ|50vkr@KbFV@0(Vx9n<tz!3cb?`;=&TJQXw>o|&0Br9l0Nr?R4*YJR-
zq4l9n`hw@UVC0nrGeyBRjU5+q>;H!eZjK6EL6lm-qN`N!*B}*qbeby|v+JrYcsED|
z52_Vhtpyi@RFJM#u;3~c+}b{H1(9k64_u{!`+`)k<2O{W_$n1N2C3iywF1voDhTNi
zxB`n>!P2W#Fg{2HCbfcxu2O*~NCi#5qJoF7Qo+_B6)aFIXb=<jc!$7?!|g(r>;3GD
zgGEYo$H1ade$kO4<;EbQPJU5y5kEGSkxnV;82CPW_!m4jvGO5SE)Al5M=B2q<wjP%
z6-2pADvt=|Ayys?qMRv}$2u#a(YhxU-N~c~Mc&zCQ<eVFfzP+kFY;M?1Fz{5qjfJl
zI?;un#jP8vnjlB}@@ILpLsOOI(Se_M-xLz>p2W{vVqYfD*)xg~ty{2l(j`*5&AUq{
zJ{}$T;p2884%wwdbqXxFSqKt$DT6u%ZhTiEIJ=MP$O%%%AE#K-XO}W3h+vNpwArOR
z5=5|G2!`!a-s}|kcE0?SY(>|`amwBxl~hBcGzSr6Nx?3@v;U<tU9di#1K(i!3t^c0
zpp(Pe%+7%);<=OJ;yM~xJymgc4t(s-g)FgAc`S(Fbt(9q57@{DR5}NKTU;W9JH%_V
zSUjk}uUz2gAO)t#0v@%1lF%jakRN<f&f0`6%?ZjaK}2n&=upCz^9f2x7u_LsqQfWT
z>Lh-d>iB4*;tL|&+)DUZqq07T@R3%+M;es_L4=N0!p9qx@R-2Dajk?;G%7=a2;*A`
zmp3YfL4>D{>xC;CmHUGTx3v<kY*bzeB3#i*_-v!{MG&E@mGGHH9u#4*bgfOXx+hHC
zpcpR-+#=pnagn&pSS~X<Ht-XAhvRY#-+!Kq@ntQE4g5-T_!uk4DGP$+Zx#9D`G{-z
zh_A#3ei2(CbS?g$i1xF1ZxC^{6pL}LT!;<)>OWD6Oc6@2xWH{2AQWlJtwHi5MgBx?
zPB}@GnQ?)ebMUA*(!*-oA7k<IAmTTr*eBY)F)nc1ACjUd@$=zfuI^A=;Hz79RC~p1
ziQPm#@rIWWPi5lb1D6@vs?2+8nG7y7F-VyUNAzX3sAYUy=3XunAK>|4l<~}sGPuKi
zjwr9iAYSoX`u`IzUGH(}cjE((!3Ra@_v8V$p~TNz;#80lg-859BecYR$oJ{f@j=!<
zq2$M~q=sq6NdNp7Zq`Qmpa0+@tzLQZrz@0S376ta2)ycV7TGPm8&bp1?(-Zpdbg}w
zcKQ`>l5!vcZ9Ki&=Q7a=dA6H;9n5%A41d)(fgcv>U(fbP?>u^5+!pz2dhL&1k<ZU9
zdt~1<Olyjw<G1S?__-rV9N#xsyl7tVhI@}Fqk>4ITTA1-$GGcflUi};i|D%kz>ofm
zWlZEkgOx{FYPhoYH-1FluX>kj+}t(r#q<f;W_d9`>4|(bxAI4||4piEs&Faox&?mG
zP7>MsCz$qSMS4z{_V?&lsN57p+tIJB^J`0kXutnK)lTqh9}c2@+pnGJ*KY0>c%AnN
z?SJU9LwJ~lSyu{6gmAXO`@_@w?=ko+hMb{?^L&#dJ%@~24uwYUp8v6tX5Riv16MS`
zwCHnp=<(=%jr+oWpyL0bnm=nk9=`tqv#Ha)1N-eC*l)U$+no;9=gNbfIV{g0l4|<u
z=(h)-UfD4v>;Pw_hJD8{K5Re1Mjp?1*ovk%O_^L^)qi{QW%TRqIT6)T)1##(A<vrI
zQWN9LG5N|Pef3eknrL5PjL#7AXUL_HdHo{gPY>SjTK2SBL)dvd)cbL6uFnze{WbBN
zH?wz<FWuzLOz`e!E5>Wd_ZAcuCC-iXZ0&dZ^gC=#8+nmE{?SH$vOm5xX-?#Qzc+2<
zXT0NYv+)!E=vmogjKehVXwyc1PCWi>k~z}#dy?7YjA$4*ddwN;k*1{FNY|mHT;aKy
zJYP0>_YC{ssrraEC*AdDFE$a(IeW3q=Wb)jv9zXT%fzobG@HF$#ayD(Iz|1_FfyWH
zY<%vPqoJo?Eb@G3JiVIQ$L{!su@S=>PyfRm*0s^IuZ6uNWZkQ_CQq|rUf7r;_k}cx
zADfR}ywuV{$0L*H&e2n3=1!)wNWA3D?cuHM?VDrrb@kRJc&EoS6eU=53R()NGotP&
zqKY~$dY|MzbAm6ohmU`8x}szVm$bwbw0z;&8d*e{o_jK=*b**=GELKSeVK-aiccaJ
zedunRWNCJXc}_+i`lHBLd7<TpjXY4B443_B;nV_7e@68%7}6+pqSTAhK1zFO<kb^S
zrL>gNDoUFuZKd=Rr9L#g3MftPDeK_6LS&V<IjQV!w#hM=((RN^Q0hVJaR#M%l$Maa
zj?!A<`zV=cWDKV?gHi*fcPRZt=>zKK-zfcsMnfK@7~*3oEg=3+N{1+!Xn+o-R7`0(
zrL{D?2Ggj@rc^^|8Kw1<_EBoz#$dRGQZ=RLDQ%;4lu~b+`%@@+D7{8$H>K`$O)Zo>
zlo~08(26^rl84e(N@29NOrW%w(oRZk=;d)DB_E}aDg8<*j$WCQDA_4J%&*UszNZvU
z?~gZ7%BAF{^em;1DV?O$fnKMEQOcv_qVy=Gjg<CNI#20ZdaEd)R7dFvN;@f?qtuI@
z(32@uP<pHje|)7rq!dlhuwy8dQ1Ve)Pw4=qPV~r@OsSNThtfJq2Pm~rx`rNfZlhE|
z=_yK^Dg8{TFWt(gP<o8gIZ8VyCD5&N2&M6qiYQf3YM}Hzr4y9m>E1G)QY|IE9c`zy
zpVA3R3ACK1P^zJ{g3>lh!@G-dRMlO?5}0NIX8<k05#7a*GsVN+*G=N~Zqol6>}Ozm
zV9$X)1-1qD4Y0eyZs{uRlU=2K5cVg)4}h-$pMma4;1c-jU{8lV3HAiw_3$UaZb`s#
z6Qunu?7hIZfh&=JAM8rlGhk-|M*;f+qk!k*rT$F3v=0Gy!T%Ak3I27!mGD0W{2TmE
z;0*Y02j;<lD{vtE*8zLM-xk;$C;g{^$Ks^_OW;=c-v_RR|L?FD!>)y01Dpzf8ti1?
zaQJ(}?hM-i`<Ga0e-n#-fxQX#df-a<m%?5Qtb@M{_GH*8um{5K20Iqm93%Zd#z^}+
z;12jVz+MS^DePL<rLZ$#-weAi>`t)HcaipyF4F!C_WQ8cz<wO|eXuKGPllZWdl>9%
zU`N3|-&xw<cb4{Nus;UA0snKbp9Xs2zYBIb?8&gru!q3D9vBP15%#4{5>IrJ{;yzv
z1bY+gmta2z`vKT)*ml@f*eS4w!|nsSBWwfgQ_+~u(O5@dZ-@N`@HzOOg1s163x65x
zJlL7AZv_s7|2o)Rff4Zk(NWrmJ4$;u><?hS2YdzoCt)uK&WFDWwgWgB{uJ1^0Tbbm
zhi!uWTL<(<2lNN*jj;a#`#IPRz`KBU<lA6p07n7)A-@;wcEB_3C4S#t<{yClFW`FM
z3&>vq+Y597i;;gj>@?tTU~lAigB=0<HA>>QQ8Ir&?CrpHz?H~<680isHE=rer@&4D
z4hHr>ejIEg@MJrQ|7j=l_rU%DxE}Zd@>jrK0(1grAb%?CRN!D>59Eiy{<*ERkG92n
z4%`L&0Jsji$6+soJsWl*Y%A;}U?TkefIZ+h0e@>F{U?F@+MwTIuZR5t><3}j!*&4+
z;hzB83>*M|9PCcO(~;8uU8J<X2JV1=1MF3>{|4Iwdk*Xp*g3Gxu!q2og>8g=Dni;{
zN8os{H^6=xwiot7pd0=Y*cq^IhW!`V(Xjsvm-f+cj3?Mlu>TA83fT9<u7*7um;?W<
zu*U$efxkWMNZ^?;%;PX={|EL?;9Ky&4*UoFj{!aKSHiv>_GI8K@ZSLYT3~zl|1@De
z1s*U-|3|R512@C}PvFz=KLUFp&<VdC_7tE6{u^Om2aJV36!tGhX&(pfG2%MFR)A~Z
ze;oGTfPaPG0lN&C34apoQNU~9Zx1^Xcsdm0Jrv^|xC8zTu-5^ffPWF}`M_E57r@Q|
z-UNSt*u8-f@Sh2h_AkJLA=3Xjuo3>vz_;Lk8Td5Ni~Ks+Ww33)bog(AJsj8r{<g5g
zfIl0g|9}DO56}mHHLw_H1x^5t1`Y=f0`>=91MCD;`*$sH4RAH^Ip7N5lfXxT%YaLP
zOMnY6yH4|f^*}eU23P?s2bKY60H*;9f%%tR?+joXFa<acI2Je>I1)G%I1o4h*zdA&
z(*u|Qi~&Xiqkxe>6VL#>fa}`~{Qa`=cLI0>cvv?s#ry#71MUXy0)7nK3ET=)$ML(s
zjllK5b-=a2HNe%t=YT7KPXZqWE(0zFE&(nC&Iir|)&t$Z8ej#m9H`Et8Ng}4LSQ~H
z2bcj&1Ev7S0mlMI14jaf0tW&I0Q&)ZhiLOvTz_B;Fd7&Ij0Bp12H*wE<7VLRz+ZqT
zfJcCbfd_$KU$!3X2JQlW4BQFa3Ty<v3)~1?4_pUa3tR(S4SWu`0{A5GQQ$J*Qs5Hc
zLg0MhJYYT04Xgo90~P}FfjPhoU>Yz5I1V@#I2t$-I21S#H~`oW*jsl#q4??Zd2sR@
z{tKMbdqDnu`crWJf%gD7{}zq)+YpZ5I+^ni*`2`ockDjk9MCx&oWClV!TDF>9B}@A
za|bv_J63}8`aKVv;|G?4(`&Th8E|@aH@pfSYmnbfna5Gu4$hwf_k#0&oFm{}DV+uH
z#^)pNn+E>XEiP2+lm4MvKa2|1&M`GqYjY8}fi9Lq<uowrRZf5I)$xV8IvaF#;u%2n
z$x2=Qt3tK&T@$LE%Rj+;P<jKLulL*FJO<tc=W)>l&ST{ha2{8C!FddR1J2{}7&wpB
zpTT+j{tnJ#x&?d&Ut{?!WGLh70bb7I0lb2b4bJo8CZpCTW*tv8YW<UC)W+L1qc+|g
zMy=nRMs1AY`AziUe52Nfi;P+yE;VX>xZJ4q;opr~AFeWLeYn=B_2Jt_tq&W)c@Ay|
z=Xv=VIM3CCy7M||)aKoJqc+Ccn6!D<&7_@sqDh-~NhYlyGE7=OOgCx$P-)WU-MuEQ
zPZ~_xyjx+?`sWps)<2s}+PvFo(&pVhlQ!>;nzTMVYtrUjSeQ2NI)`cVu5Xyu&m+UM
zd6yif&AYrXZQhlHX?-#$OzVdQVcIz^57XNGVwg7XHmH2Q!LXHh2kK;ALq7+vHOS8-
z%sGVg6!_nWUjpC2=N~Tlzj#c5^Sx*QIB#(q0nVRxZUg80>O^q<+*1h78`tdM{0Ybf
z&U@76gYz@RgW$X^Z8<nUyF3HV`_BFW{u8A)!1=jK0q1RIAA<Aq+#Yb=PIeHSpCeC!
z^R}@+!TI^MO@!pU-o%0Pb8}yC-Uc=VoIh8M1?M#&4V*t=<%9F~E*m(1*18j%H*(d1
z^QW!_;Jjt40h~X7Jq6CYvsQ!iC$Trcc_Y^Q;QX2F6L8*h^%XdODmx6$+pJE4^XId(
z;JlrRe=lHOLA(<<@0{uh{&(U7z<I8W1m{n4<G^`-OakZ6byL83<5LMZf5NK)=M7Hx
zfb%@?f%8VDC&78_KL^emmtF$r&wj6i^X{Z~z<G>s1LuuM{|4vJgI|O5wxc89{K@bP
zIPWgvJsiyWGhzpD-bB<5oX2KgaNaL82>d<bH-hs9q1(W}C!Pw<TY_@I+Y&DV=RH8B
z;3J9O3C=ryYQd)wzXzOm_$&tJvGXuEZ|QjooIiiQ0M6TY)`EXYd_6et*HOSP65kHa
z8+3MoUq}3a+RjM%nUpzi%=sOhKe6&c%bfS)v;*hs+y$Js;dBG%PqEj6^Y)uz;QV>^
z7I5BjlLpS8Y$t>B_L@@gF#d!K&YyJWg7a>g1>pRd_hB7>0-SfytOV!Jz%T3go8Y`>
z=3Q|9O#Gpa?*`}HGT(rU&&c4sL*_I%_t^z--VI}FCpmv^jsoZHE?vNLiC+WGpQEn>
z=RGci!TA&Qjo`eWB?+8ATPK6_-j#{q+}=EJ-jq@V9!FRT&Y!v~!FexA9XNmfz89Qv
zk=h2r25|l~{unrK1X%&jpUYRNbrOFWoIjzj1LtiUZ>e<>SHO8U#x`*N)cz?rZ?gCj
zoIk&R1I~LVegNlB@~6OgOT-`G{F(le+GgTmQIhkg`;Oqefgu5$Kj-%W=Y0u@;QWby
z1UPRu7z@sy{Vm|Uiy#x6Ljm%^dE3BLa1IYB2Irjuv%ooIpc<Sv2h@Rc7=Z_z_W?W%
z&Y=Y>z&YxF4LFAzYyjsN|1IDgg77IgNA!OM&S43Mz&VcpC^&~I{0h#&`_14SzF=yP
zJ|W%_oI@Jo!8t;|7dVGGTno-&`GdeY^kED*$Ka=cb2!8#a1OW61?LcnLU4|<zXP1Z
zCLG`#T<-$sP>Q?3Iih|(IEPm}0M3E*K5!1Xcm$l|=br@UFpOuxIc)w#a1PB_3(leP
zZ-8^S#=GDgA-@frLpVMK=YaSx!8xqsAUFrV9|h-7k27i?@`GsytO>-Uz&Xf09-Ko$
zt^wzm_G`g8Ok^lHhpvwS=g<)gI7h1IfO9y>G;j`1p9Rh#CY9hEkM0ELu#>sq9DaVE
z+BV{g!8zLeA+>EBrUK5v<xhii$jT~kjwOEuoWodN2j|f7x4}8Ir4gJX#doT0Bfblq
z1H<>KZ6kgVoa4ZcsBI(u3pj^;pH<sN+}Kfaj_&RN&fzoNz&V1uKRAcf3<c+S?VG_l
z%*F!FaoXA79C|Yuoa3^mfpa*H9h^h3E5SKLrw*K>uI~lsupKWr$67B3=TM%N;2dMU
z2AsotUIXWt>J8u=@}q!r`1E#g4g>l(I7dwH1?SM9Z^1b}`bTgM7di#bG0<ngIfUpU
zILA4gq9y0Bq9|~VW$pt0Ao0FBJ_wvckZuC!=;d+X9Fmj)&N0eUz&Q$e1~`W<Re^K(
zQXM#lG2IK!;Y>@wIjrdsa1L);3C>~0FN1T))0^O%iN6odk;OZ~IV9=}a1M?77M#O{
zkAZWz)F0p+8ywOJ?IGSCoCAOpz&Why8gLG;>aXL&z&X5kEI5Z>O#tUGtZZ-&$C?Jt
z;k)JF9HLbV&Y`;ZgLBx{L*N{i`*&~-<$4L6LvY^&=kTug)%Fno7dVG}?FZ-R+MmF?
z(2Ma!@V>+oI!m5N{049i6&nrC!Lljf9D<k){sHkB;GYt|8+;FOA2^3QE(bUEpm$I3
zw!~in=kUnQ;PJ$FfOE*?UhpBre*ovO%4YCX;+MchsAU(7E8_9s9BSDYyqx$D@LJ+y
zz&Rw-0?uKXx!@e0IUW2h;-%mmvRMtzp_})Be@c7_IEQ;a0e*n^3*a2)xeh$8C!H@i
zhkot_=Md1t;2aA28+a-4kQm7;d&;%DL#X`!gSvwAf7f#zIRCFcL%=zpehj#m_;_&s
zPbPA~`9I{C0nU5JYruI!_<i8KQ|}>g-s<oaIPcqj0i3rHz6#E}Hr9jlZjAT9d6&g@
zaNYp%88~lk_!^ue<Bx)WM*K85Zwj~s&i`i<f2-?AeKN1R__@Z=k^Dz{%HO2e&ws{)
zyL!ssk5ql7P9LJv=fTer-_yZ4sC<O39z(IK(&ntKnwXw%u<3YlWxdT_Z!fjYcDN}+
zZ_Tp1GmGn!tIO<G$K7^=?J|3oZDvLBESFH)oYl2eWwt7NvD5Byi%P3&N=aGaaJjXr
zFY}o*3vHIXJX=<Fmc?&a3aM49VYXT=d75d>Hz!Xb;&+VCF33u;`pryBra3v;V%0q9
zS(DSVtoeDZtH{Wn;&-H3%sF~H*_@Fvo-|tP%=zh)wf3c?PfkzKOlyY4lA~`xc3zR+
zoRFQDY1W!Q*^*~X&(6}Fcm4!E0bOfTEQQ*UEaMAOb$PmeDWGl<|1Xz5*EUh7$T8=c
zGqrw5$<8#VYe!DCWLfge8N!~BVNTT@OPI;onK|a<e9bYwDBqHuldL(ivXj#+$&;))
zNnZ98t3|W(EE(C!Vko!_wvu8OjUfK7#a#AT23u)yMMX(*>7C@Vm(;SuQDd;pbXFQ{
z<@RFwr{XSy&E>w6|KSWCXa-xY%kFghnfQOoY<8!!+G()W6g!J6OKA|&NUL!=Xt-4n
zqrqr*%X%agmAmG;`1rOm_EuDv+FW9I^U#!3wAoLoOc|eoR8<zwa+Few92It3o!#kj
zR9DHd?KjHR=9bxK`fC>F&Uy0m<Y|@5)2^v4sc@81fvRG+qs~sG!cpQZb~>0+W?iw9
zh&=JC;!3-_xTHeYGTE^IpG*Ju=aLwqv+Py2vg#_kL5^MFtEjH7G2G>Jxb1R8>+^J4
z3^Xa1E|Hs^W6Q`kr`U4x(hajImqr!OA=Pcp$XDGwt5mmDuXnX7Vbzy$wJPN=0d>lF
zxXMb%r4pN~Qe@{@Ca6bo+GqNY!EPLZ-D>^pw(9k+Rwb<ZGX7R2XVaKQq0;Iqx;3GU
z%#cN721=MyQu0usxU9^n>V;d%g&S&XezvN1xvTwZ;g)LQ)~l_0y{lCTtG<k@RVjZ7
zsPo3d<>U?>R$>sWs@grQWUkw;<qSv8$ky(WC88Sb3b=Gvz^YvVm+lH!^;f{v>Izu(
zSHRWk3S^|G6!K+pl+~-IZ9E({(F*c#?~;#P+_^fZkisq1=8W{zEcF6aIA&G(uaL;V
zB@!8G3zGBmGWdw4ZfAvUs6pZ|zh@Xc!~LG&@Qm<#M!+-D?->ctjegIK@Qm_%Mv1<`
z;a#ZO<*!I(E`LQTlSt=K?GzI@GkdZH=UiD`XID>IxaAoOH%_=PIW3i3^`+&r*vu)g
zrlD|6t*cxuEZnlNaHFtr=jruwRKpOfiz-W2y`_F)vsaa=`EaUvx*VHTb-Mh-pU+7i
zy}HKVSaE^#;q*@ozWeZ)=7$Y(@EwY5x^vb5#IuN~ATL|A)=BFpnRynj%V~GR$dXo-
zSQ_ZQ#;XFClwh-uRx`w`6F$+di3OQ_#M!l#qE{x;QZ8_+g~#*kyX|5yPt2OiR@L3Y
zu;j8~pCfamRRuGHZ^>j=*j+9-a-}WvQ}gmg#j~7lS#zq)pM`v@T7k=7gB4Y{)H<wc
zB`$w0R#f9cJ=QcaV#_O}ktYlxwZc-(v<zFax+IiW(DheW1d)LSL1d^GEiF%1!l^Hj
zrz_#qmB=g*t*NY)&7tQCHp?7!s;QPDms+Sm7OF*|0$HdQg$lGnwYoyI;>h(~R9wJo
zkE^x>hI)|N62Cl4$mOuj=5DDLol+=xy)@|2g$!Dlg<;`|S!EaVlAgHuk&V{3Dtf$B
z8z3eXHNjS@p1bhy*-IA<t!(rk4X<jo`-EFIQMl1YcEjaYSyhb~AXaTXb?KH<tG1fD
zbc?ANCvuR;p^K4=ai@+tIp#3pFy7SBCdZmO(ooPpUNKzN(W(ws|5(LPRY$5N*FT!<
zbF{%E+_Lq;jn=1UsbWW!U&~G@Wv8Z;4pm`AzDsqewTL=WENaDNc7Mg}lohiR6_Zms
zRD~7!F4dvdqAu}Pxx9<~<jfp4ODk)HIU!vvRrJ0hMtPb%S~(v|0u4M{U2#RNUA5(-
z7v2VD+e-M&UiNzt-NbX{Ser|?@Ht{pmsFR}Cn*nXk+<_Ki_Fa&pPeBe1<YBg7Ikez
zr||mdA6Qe;^OMuWD(b?+Egk1Bhr6^~F0xij{&-o{6th}^>#ky51!nbTAl$ke7oH>d
zhN3=5WM$`w`B$Smi4^T5%h39KbE@c=Jd1gfI6-=z&9})#WF|e*x@}lVWQJT$WCqq0
znIV@DnSq5wX2|74W?)f~8Tr|Mzq?v<=ZW_nHAnmc)7lzbTJ3b&OWl`wU3WU@t`{&%
zeI1YoNEUZ4nO`bzU$i38Q&bAQJ-BO~Rn#1Dr=xq=<qmCF*^ouIWqBKh!$7a@xH0=#
zMK!(mC#OxyH0PzJXW{nExqPR-EK}UdIj_=QSzKDmivzzErcWs1YfNi~&0bt@sH1;|
zU6E178D*3~uX#50jv;OiGaY4R^mZ-ytZI6nheA97fQuOiE~Xn#Hh*1W#(`rNaVs&8
z_ypu@uUL0EhYsZ^v-_JO24HK8E@YM4QB`}Hh(@V;95E=>OgVk%DM-#4IfFD)Jc`hx
zlz2a+m&(c-M}-|0epSHRVO4FVLA;Rh9gOZkj+t|5$U4!nnn~SRT7IXkve-GxQ6(>_
zW{YPnHsyJW`^;>ITO9?Ul89S26S0~x5$hNev4Sx{M+&)Ido)UuRY;un;ya~Vt{N7a
GDE|%fW>kCt
diff --git a/amxmodx/JIT/amxjitsn.o b/amxmodx/JIT/amxjitsn.o
index 4b48453124d28e161a199b2a8e920c6d8f682a03..5f4b0e404c62d025d4b8752936943172735656a6
GIT binary patch
literal 25728
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
ZeE|9}^bzRe&`r=Mq0d0oI*0oA{{YwJoOJ*I
diff --git a/amxmodx/JIT/amxjitsn.obj b/amxmodx/JIT/amxjitsn.obj
index 24682e0009dcb7981401fd089f48988f6f5bdd99..4981755744847fb0e5389254cde73c5001a0fe62
GIT binary patch
literal 26143
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
diff --git a/amxmodx/JIT/helpers-darwin-x86.o b/amxmodx/JIT/helpers-darwin-x86.o
new file mode 100644
index 0000000000000000000000000000000000000000..384475097d776857738e7e7993025b7fbbc87ab6
GIT binary patch
literal 365
zc$_=;>+L^w1_lOZAZ7$&CLo@|00AI=4Fh)I0K^-hG&>YCLgnJ)OHwOJ5NhM&LtG<5
zu<J(wEC?pZ9TGtN0V=EjG~5?Rhju;<-T_j;zo_{KV~zF>Mlf5o0qB5(FW8%Zu$G87
z|6nN*I{1pe`4MCDFNP9!u$tFQh6kc!4=Vwgd_cZ6khXxbZGp5P$QVY1zhP{K#N3LC
ec;|xB;L?JE{Gt+uctQetX^ELRn4+n9DGUJRIzk@+
diff --git a/amxmodx/JIT/helpers-x86.o b/amxmodx/JIT/helpers-x86.o
index 1727aba55a4d0134eb1f0e5ce91cfe50d45d4300..1d7e9590dfd2a57fb6712cff0ae3340c9fdf2561
GIT binary patch
literal 592
zc$}+u^>JflWMqH=Mh0dE1doBi0ZN;INeu>81||k_03#H$LHPoV2(!U_D9sMU%t+z^
zKy`{}=74}85F@*!0Vq)bq*;KN6-tB5lteS{15jNo7V}^rwDW234iJNXQS%SR8tom7
zV76)l&|wE(us8o;EfH`2!BQf0@D+daBgW=m3?=MfHLsZr4@AcvX3#51ttes8E6yk`
zDJn@!0<tP|AvA<fL^#0!3&Y3%$a0{VF#^)oNUA-6q%9I(5J|lNkgtfwXUIs+DM&3U
t)~&EG(@QMQWk}4esEBtiC=D(xD9A4=VTdOrpqG}InS&{snwJ8y0{~9^O(*~W
diff --git a/amxmodx/JIT/helpers-x86.obj b/amxmodx/JIT/helpers-x86.obj
index d9268b7f526d8d3a53c2d1682129c26f5fef3af6..752205846eeb665bcb804a126bb7cc6eabd15a86
GIT binary patch
literal 384
zc%1WLWMo+KTOhE8fq{XG0Rr?&QY%Ur5WoS5ZGgB2NlbwuAR)B#Y48pZhksG?55^kp
z9gJYMY6Ck1!@(Eq%|BR6#G8Mxln5Ps#ozphvH2H62|HNLYbL`3(Xog1(lT>Wq2~Sj
z&%lt*n30-OkXlr%TVY|Qmsp&O<`$4vW=01FbfA}*RGgnv3Rd<XXbv-2lm$r_6PP7}
zA)*Sz)-aR7A|ReET*M(QHL*m`z<?2MasZH(m|Ia1?_5wCTv||&UsS>nPe?#7Eip3(
KQ#3U%g#iFvQ&CL-
diff --git a/amxmodx/JIT/natives-darwin-x86.o b/amxmodx/JIT/natives-darwin-x86.o
new file mode 100644
index 0000000000000000000000000000000000000000..9ad779d29ebf8ac2a2b709718302802ccbd40bbd
GIT binary patch
literal 708
zc$_=;>+L^w1_lOZAZ7$&CLq4S00AKW0S4?K8Hm3?X?7@Pg386mm!wvdAk@akhqy+B
zpz4o@>IZ=cMu`0kEXaCN5=#=1`7Vwjj;Q)U%7YnkI1uU{2_P;2s^NhO905|Holm=6
zITnMA*a6ZWdl)DZ9@bsUvCkUF-6;hm{(N2n<ToE@>2~GmWRHtSDBMvIW+L>zl;?jb
zN5FqkkRi=Scpx%TU^QU7eIVAcNJGMr1sXmqwLqE=C;+l(B9v_hq?bY2p&&<r*h~;V
zW&trjRNNEF2I=L8vOz!x$`%5JC6an;B=w9)>gABsGbH9#RK&Yf<|TUOWtK3+qjKRq
z-^A=xBuOwA&T}ixOGc6ebKyMa{FKz<%qnEvScE`&f=d#MkX_)LUzX~hmR6ivf~L?l
TFNML~$KT1(C*IvL#FYU6FY|?U
diff --git a/amxmodx/JIT/natives-x86.o b/amxmodx/JIT/natives-x86.o
index 45cc2aeda2e8fc664a4559c3ae387899da7bbb62..b8f58393cb700a956067ffb864952febbaa976fe
GIT binary patch
literal 1040
zc$}+u^>JflWMqH=Mh0dE1doBi0ZN;INeu>epgcK%5sKNM`~)B;9!XvRO0z@N!E8AI
z<gg&AgRyy$)PTSRpgKb|`#?Y(h?$V>VS-4q0x1rtc_6#x(aaM7a;{)8PaTLkk;Fd$
z)k#3jVT95gNb;ebPrF??7K4~OK=QGNfg<5y-L)M1tbyE}Qb6L*=OsXX^Kq7LSDsGx
zxOjxZ9Tj0FLjOy7{+DtD{1*io(tLymA|nM>!+-(wN>VFI81zySOA;CMiZhB!ib@ib
zfUL?~2o2>IrRG3X5&+0)fra7Ye`Gn-lmg;2F=PN~Yb4z@K++D0KM@orNc<BhCNMDw
zBJl)(^73eWJs>TF#J54?dn4Ho;zy$K7bDpZ;%`OcGvp<fWR|5C>sDBp=_MBDG9>0!
zRK&Yf<|TUOWtK3+qjKRq-^A=xBuOwA&T}ixOGc8!!VNA-EJ8NiH@_^^KP{~|wFFI}
wYhDV%T<83h)Z)x4WQ*ZK?mqrbjz013jv=lnAq>u6z%(ljqJeqA2g-*509r1PT>t<8
diff --git a/amxmodx/JIT/natives-x86.obj b/amxmodx/JIT/natives-x86.obj
index 67b0b0bb6c8ab4c27eb8f96b6aafcce70e33c677..60855c6ab7206c8235be58de78974fbd33623d17
GIT binary patch
literal 788
zc%1WLWMbI*TOjZ$0|SEy0|e-mq*jzLAV542rvUL`D4!XK6&L~%^imQ_5|Pxg0P#a0
zeu^aKz+iA7wDW1VE5~9GcLyVoh&>Dx2@mV8<=AHp<nELL5`R7~0rH!Vvvj-ibh5|A
zBNXna2s07-U&`~plq2B3D9DiJBRmipDX<!LsMTx?(m;|4%<_SYfjyL#nUe~2(7*o-
z4C#z{i6xn3sl~b#7G`>h#kpvn2HDNb7!UO-0w8;s39N>N0UhWiCKc!Bl!A@={~u-o
zOdTUsCj)~JhKM3m6d|IIAz}x_)+i!A7$VU~A`sj2p*j&FEkGQKA~Fq01Y*t#43XW)
zerIq<OHC}%GcaI;`}8=Fm6%&m5${r&m*|<7S;7#H%7ycM6SGs1B*9!b&#g2s8A%cg
zH@GCR2-$Go{IXR4w6x;X5;TRbc_|2Uo%2&ti!-Z`ErtuZ`}jLK`oz0ChPW~S03E%Q
A`~Uy|
diff --git a/amxmodx/Makefile b/amxmodx/Makefile
--- a/amxmodx/Makefile
+++ b/amxmodx/Makefile
@@ -1,120 +1,147 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
-HLSDK = ../../hlsdk
+###########################################
+### EDIT THESE PATHS FOR YOUR OWN SETUP ###
+###########################################
+
+HLSDK = ../../hlsdk/multiplayer
MM_ROOT = ../../metamod/metamod
+#####################################
### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
-OPT_FLAGS = -O2 -fno-strict-aliasing -funroll-loops -s -fomit-frame-pointer -pipe -DNDEBUG
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-NAME = amxmodx
-
-BIN_SUFFIX_32 = mm_i386.so
-BIN_SUFFIX_64 = mm_amd64.so
+PROJECT = amxmodx
OBJECTS = meta_api.cpp CFile.cpp CVault.cpp vault.cpp float.cpp file.cpp modules.cpp \
- CMisc.cpp CTask.cpp string.cpp amxmodx.cpp CEvent.cpp CCmd.cpp CLogEvent.cpp \
- srvcmd.cpp strptime.cpp amxcore.cpp amxtime.cpp power.cpp amxxlog.cpp fakemeta.cpp \
- amxxfile.cpp CLang.cpp md5.cpp emsg.cpp CForward.cpp CPlugin.cpp CModule.cpp \
- CMenu.cpp util.cpp amx.cpp amxdbg.cpp natives.cpp newmenus.cpp debugger.cpp \
- optimizer.cpp format.cpp messages.cpp libraries.cpp vector.cpp sorting.cpp \
- amxmod_compat.cpp nongpl_matches.cpp CFlagManager.cpp datastructs.cpp \
- trie_natives.cpp
+ CMisc.cpp CTask.cpp string.cpp amxmodx.cpp CEvent.cpp CCmd.cpp CLogEvent.cpp \
+ srvcmd.cpp strptime.cpp amxcore.cpp amxtime.cpp power.cpp amxxlog.cpp fakemeta.cpp \
+ amxxfile.cpp CLang.cpp md5.cpp emsg.cpp CForward.cpp CPlugin.cpp CModule.cpp \
+ CMenu.cpp util.cpp amx.cpp amxdbg.cpp natives.cpp newmenus.cpp debugger.cpp \
+ optimizer.cpp format.cpp messages.cpp libraries.cpp vector.cpp sorting.cpp \
+ amxmod_compat.cpp nongpl_matches.cpp CFlagManager.cpp datastructs.cpp \
+ trie_natives.cpp
-LINK = -lgcc -static-libgcc
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
-INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
- -I$(MM_ROOT) -Lzlib -I$(HLSDK)/common
+C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
-GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+LINK = -Lzlib
-ifeq "$(GCC_VERSION)" "4"
- OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
+INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
+ -I$(MM_ROOT)
+
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
+
+OS := $(shell uname -s)
+
+ifeq "$(OS)" "Darwin"
+ OBJECTS += JIT/amxexecn-darwin.o JIT/amxjitsn-darwin.o JIT/natives-darwin-x86.o \
+ JIT/helpers-darwin-x86.o
+
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ LIB_SUFFIX = _mm
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 -Wl,-read_only_relocs,suppress -lz-darwin
+else
+ OBJECTS += JIT/amxexecn.o JIT/amxjitsn.o JIT/natives-x86.o JIT/helpers-x86.o
+
+ LIB_EXT = so
+ LIB_SUFFIX = _mm_i386
+ CFLAGS += -DLINUX
+ LINK += -shared -lz
endif
+LINK += -m32 -lm -ldl
+
+CFLAGS += -DAMX_NOPROPLIST -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing \
+ -m32 -Wall -Werror
+CPPFLAGS += -fno-exceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
+
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS = $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
BIN_DIR = Release
- CFLAGS = $(OPT_FLAGS)
+ CFLAGS += $(C_OPT_FLAGS)
+ LINK += -s
endif
ifeq "$(BINLOG)" "true"
- NAME := $(NAME)_bl
+ LIB_SUFFIX := _bl$(LIB_SUFFIX)
BIN_DIR := $(BIN_DIR)BinLog
OBJECTS += binlog.cpp
CFLAGS += -DBINLOG_ENABLED
endif
-CFLAGS += -DLINUX -DAMX_NOPROPLIST -Wall -Werror -DHAVE_STDINT_H -static-libgcc -fno-rtti -fno-exceptions
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-ifeq "$(AMD64)" "true"
- BINARY = $(NAME)_$(BIN_SUFFIX_64)
- CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -DAMD64 -m64
- LINK += -lz64
- OBJECTS += JIT/natives-amd64.o
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
else
- BINARY = $(NAME)_$(BIN_SUFFIX_32)
- OBJECTS += JIT/amxexecn.o JIT/amxjitsn.o JIT/natives-x86.o
- OBJECTS += JIT/helpers-x86.o
- CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
- LINK += -lz
- OPT_FLAGS += -march=i586
- CFLAGS += -m32
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
endif
-OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
all:
mkdir -p $(BIN_DIR)
- $(MAKE) amxmodx
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-amd64:
- rm -f zlib/libz.a
- $(MAKE) all AMD64=true
+binlog:
+ $(MAKE) -f $(MAKEFILE_NAME) all BINLOG=true
-amd64_debug:
- rm -f zlib/libz.a
- $(MAKE) all AMD64=true DEBUG=true
+binlog_debug:
+ $(MAKE) -f $(MAKEFILE_NAME) all BINLOG=true DEBUG=true
-amd64_binlog:
- rm -f zlib/libz.a
- $(MAKE) all AMD64=true BINLOG=true
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
-amd64_binlog_debug:
- rm -f zlib/libz.a
- $(MAKE) all AMD64=true BINLOG=true DEBUG=true
-
-binlog:
- $(MAKE) all BINLOG=true
-
-binlog_debug:
- $(MAKE) all BINLOG=true DEBUG=true
-
-amxmodx: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
-
-debug:
- $(MAKE) all DEBUG=true
+debug:
+ $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
default: all
clean:
- rm -rf Release/*.o
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_64)
- rm -rf ReleaseBinLog/*.o
- rm -rf ReleaseBinLog/$(NAME)_bl_$(BIN_SUFFIX_32)
- rm -rf ReleaseBinLog/$(NAME)_bl_$(BIN_SUFFIX_64)
- rm -rf Debug/*.o
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64)
- rm -rf DebugBinLog/*.o
- rm -rf DebugBinLog/$(NAME)_bl_$(BIN_SUFFIX_32)
- rm -rf DebugBinLog/$(NAME)_bl_$(BIN_SUFFIX_64)
+ rm -rf $(BIN_DIR)/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
+
diff --git a/amxmodx/amx.cpp b/amxmodx/amx.cpp
--- a/amxmodx/amx.cpp
+++ b/amxmodx/amx.cpp
@@ -43,17 +43,17 @@
#include <limits.h>
#include <stdarg.h>
#include <stddef.h> /* for wchar_t */
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "osdefs.h"
-#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
#include <sclinux.h>
#include <unistd.h>
#include <errno.h>
#if !defined AMX_NODYNALOAD
#include <dlfcn.h>
#endif
#if defined JIT
#include <sys/types.h>
@@ -431,17 +431,17 @@ int AMXAPI amx_Callback(AMX *amx, cell i
{
AMX_HEADER *hdr;
AMX_FUNCSTUB *func;
AMX_NATIVE f;
hdr=(AMX_HEADER *)amx->base;
assert(hdr->natives<=hdr->libraries);
#if defined AMX_NATIVETABLE
- if (index<NULL) {
+ if (index<0) {
assert(-(index+1)<(sizeof(AMX_NATIVETABLE)/sizeof(AMX_NATIVETABLE)[0]));
f=(AMX_NATIVETABLE)[-(index+1)];
} else {
#endif
assert(index>=0 && index<(cell)NUMENTRIES(hdr,natives,libraries));
func=GETENTRY(hdr,natives,index);
f=(AMX_NATIVE)func->address;
#if defined AMX_NATIVETABLE
@@ -927,17 +927,17 @@ int AMXAPI amx_Init(AMX *amx, void *prog
p = PAGE_EXECUTE_READWRITE;
else
p |= PAGE_EXECUTE_READ;
return !VirtualProtect(addr, len, p, &prev);
}
#define ALIGN(addr) (addr)
- #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+ #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
/* Linux already has mprotect() */
/* But wants the address aligned! */
#define ALIGN(addr) (char *)(((long)addr + sysconf(_SC_PAGESIZE)-1) & ~(sysconf(_SC_PAGESIZE)-1))
#else
// TODO: Add cases for Linux, Unix, OS/2, ...
@@ -1009,50 +1009,50 @@ int AMXAPI amx_InitJIT(AMX *amx,void *co
#endif /* #if defined JIT */
#endif /* AMX_INIT */
#if defined AMX_CLEANUP
int AMXAPI amx_Cleanup(AMX *amx)
{
- #if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD
+ #if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD
#if defined _Windows
typedef int (FAR WINAPI *AMX_ENTRY)(AMX FAR *amx);
- #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+ #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
typedef int (*AMX_ENTRY)(AMX *amx);
#endif
AMX_HEADER *hdr;
int numlibraries,i;
AMX_FUNCSTUB *lib;
AMX_ENTRY libcleanup;
#endif
/* unload all extension modules */
- #if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD
+ #if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD
hdr=(AMX_HEADER *)amx->base;
assert(hdr->magic==AMX_MAGIC);
numlibraries=NUMENTRIES(hdr,libraries,pubvars);
for (i=0; i<numlibraries; i++) {
lib=GETENTRY(hdr,libraries,i);
if (lib->address!=0) {
char funcname[sNAMEMAX+12]; /* +1 for '\0', +4 for 'amx_', +7 for 'Cleanup' */
strcpy(funcname,"amx_");
strcat(funcname,GETENTRYNAME(hdr,lib));
strcat(funcname,"Cleanup");
#if defined _Windows
libcleanup=(AMX_ENTRY)GetProcAddress((HINSTANCE)lib->address,funcname);
- #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+ #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
libcleanup=(AMX_ENTRY)dlsym((void*)lib->address,funcname);
#endif
if (libcleanup!=NULL)
libcleanup(amx);
#if defined _Windows
FreeLibrary((HINSTANCE)lib->address);
- #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+ #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
dlclose((void*)lib->address);
#endif
} /* if */
} /* for */
#else
(void)amx;
#endif
return AMX_ERR_NONE;
@@ -3690,17 +3690,17 @@ int AMXAPI amx_GetAddr(AMX *amx,cell amx
assert(amx!=NULL);
hdr=(AMX_HEADER *)amx->base;
assert(hdr!=NULL);
assert(hdr->magic==AMX_MAGIC);
data=(amx->data!=NULL) ? amx->data : amx->base+(int)hdr->dat;
assert(phys_addr!=NULL);
- if (amx_addr>=amx->hea && amx_addr<amx->stk || amx_addr<0 || amx_addr>=amx->stp) {
+ if ((amx_addr>=amx->hea && amx_addr<amx->stk) || amx_addr<0 || amx_addr>=amx->stp) {
*phys_addr=NULL;
return AMX_ERR_MEMACCESS;
} /* if */
*phys_addr=(cell *)(data + (int)amx_addr);
return AMX_ERR_NONE;
}
#endif /* AMX_GETADDR */
@@ -4089,17 +4089,17 @@ int AMXAPI amx_UTF8Len(const cell *cstr,
int AMXAPI amx_GetLibraries(AMX *amx)
{
AMX_HEADER *hdr = (AMX_HEADER *)amx->base;
int numLibraries = NUMENTRIES(hdr, libraries, pubvars);
return numLibraries;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
#define _snprintf snprintf
#endif
const char *AMXAPI amx_GetLibrary(AMX *amx, int index, char *buffer, int len)
{
AMX_HEADER *hdr = (AMX_HEADER *)amx->base;
AMX_FUNCSTUB *lib;
diff --git a/amxmodx/amx.h b/amxmodx/amx.h
--- a/amxmodx/amx.h
+++ b/amxmodx/amx.h
@@ -19,27 +19,27 @@
* 3. This notice may not be removed or altered from any source distribution.
*
* Version: $Id: amx.h 3006 2006-08-28 11:08:18Z dvander $
*/
#if defined FREEBSD && !defined __FreeBSD__
#define __FreeBSD__
#endif
-#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
#include <sclinux.h>
#endif
#ifndef AMX_H_INCLUDED
#define AMX_H_INCLUDED
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -185,17 +185,17 @@ typedef int (AMXAPI *AMX_NATIVE_FILTER)(
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -437,17 +437,17 @@ int AMXAPI amx_GetStringOld(char *dest,c
#else
#error Unsupported cell size
#endif
#define amx_RegisterFunc(amx, name, func) \
amx_Register((amx), amx_NativeInfo((name),(func)), 1);
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack() /* reset default packing */
#elif defined MACOS && defined __MWERKS__
#pragma options align=reset
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
diff --git a/amxmodx/amxcore.cpp b/amxmodx/amxcore.cpp
--- a/amxmodx/amxcore.cpp
+++ b/amxmodx/amxcore.cpp
@@ -175,17 +175,17 @@ static cell AMX_NATIVE_CALL setarg(AMX *
hdr=(AMX_HEADER *)amx->base;
data=amx->data ? amx->data : amx->base+(int)hdr->dat;
/* get the base value */
value= * (cell *)(data+(int)amx->frm+((int)params[1]+3)*sizeof(cell));
/* adjust the address in "value" in case of an array access */
value+=params[2]*sizeof(cell);
/* verify the address */
- if (value<0 || value>=amx->hea && value<amx->stk)
+ if (value<0 || (value>=amx->hea && value<amx->stk))
return 0;
/* set the value indirectly */
* (cell *)(data+(int)value) = params[3];
return 1;
}
static cell AMX_NATIVE_CALL heapspace(AMX *amx,cell *params)
{
diff --git a/amxmodx/amxdbg.cpp b/amxmodx/amxdbg.cpp
--- a/amxmodx/amxdbg.cpp
+++ b/amxmodx/amxdbg.cpp
@@ -457,18 +457,18 @@ int AMXAPI dbg_GetVariable(AMX_DBG *amxd
while (index < amxdbg->hdr->symbols
&& (amxdbg->symboltbl[index]->ident == iFUNCTN || strcmp(amxdbg->symboltbl[index]->name, symname) != 0)
&& (amxdbg->symboltbl[index]->codestart > scopeaddr || amxdbg->symboltbl[index]->codeend < scopeaddr))
index++;
if (index >= amxdbg->hdr->symbols)
break;
/* check the range, keep a pointer to the symbol with the smallest range */
if (strcmp(amxdbg->symboltbl[index]->name, symname) == 0
- && (codestart == 0 && codeend == 0
- || amxdbg->symboltbl[index]->codestart >= codestart && amxdbg->symboltbl[index]->codeend <= codeend))
+ && ((codestart == 0 && codeend == 0)
+ || (amxdbg->symboltbl[index]->codestart >= codestart && amxdbg->symboltbl[index]->codeend <= codeend)))
{
*sym = amxdbg->symboltbl[index];
codestart = amxdbg->symboltbl[index]->codestart;
codeend = amxdbg->symboltbl[index]->codeend;
} /* if */
index++;
} /* for */
diff --git a/amxmodx/amxdbg.h b/amxmodx/amxdbg.h
--- a/amxmodx/amxdbg.h
+++ b/amxmodx/amxdbg.h
@@ -44,17 +44,17 @@ extern "C" {
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -151,17 +151,17 @@ int AMXAPI dbg_GetLineAddress(AMX_DBG *a
int AMXAPI dbg_GetAutomatonName(AMX_DBG *amxdbg, int automaton, const char **name);
int AMXAPI dbg_GetStateName(AMX_DBG *amxdbg, int state, const char **name);
int AMXAPI dbg_GetTagName(AMX_DBG *amxdbg, int tag, const char **name);
int AMXAPI dbg_GetVariable(AMX_DBG *amxdbg, const char *symname, ucell scopeaddr, const AMX_DBG_SYMBOL **sym);
int AMXAPI dbg_GetArrayDim(AMX_DBG *amxdbg, const AMX_DBG_SYMBOL *sym, const AMX_DBG_SYMDIM **symdim);
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack() /* reset default packing */
#elif defined MACOS && defined __MWERKS__
#pragma options align=reset
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
diff --git a/amxmodx/amxjitsn.asm b/amxmodx/amxjitsn.asm
--- a/amxmodx/amxjitsn.asm
+++ b/amxmodx/amxjitsn.asm
@@ -298,24 +298,16 @@
%endmacro
%macro _DROPARGS 1 ; (TR) remove function arguments from the stack
%ifndef STDECL ; (for __cdecl calling convention only)
add esp,%1
%endif
%endmacro
-
-%ifdef WIN32
-section .data exec
-%else
-section .text
-%endif
-
-
global asm_runJIT, _asm_runJIT
global amx_exec_jit, _amx_exec_jit
global getMaxCodeSize, _getMaxCodeSize
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
; void asm_runJIT( AMX_HEADER *amxh, JumpAddressArray *jumps, void *dest ) ;
@@ -431,25 +423,16 @@ reloc_code_done:
reloc_done:
mov eax,0
pop esi
pop edi
pop ebx
pop ebp
ret
-; GWMV:
-; The code below modifies itself to store the arguments to the Pawn opcodes
-; in the compiled code. This is fine, but the .text section in an ELF executable
-; is usually marked read-only, that's why this code is in the .data section.
-
-%ifndef WIN32
-section .data exec
-%endif
-
OP_LOAD_PRI:
;nop;
putval j_load_pri+2
GO_ON j_load_pri, OP_LOAD_ALT, 8
j_load_pri:
mov eax,[edi+12345678h]
CHECKCODESIZE j_load_pri
@@ -1047,17 +1030,17 @@ OP_RETN:
OP_CALL:
;nop;
RELOC j_call_e8-j_call+1
GO_ON j_call, OP_CALL_I, 8
j_call:
;call 12345678h ; tasm chokes on this out of a sudden
_PUSH 0
- j_call_e8
+ j_call_e8:
db 0e8h, 0, 0, 0, 0
CHECKCODESIZE j_call
OP_CALL_I:
;nop;
GO_ON j_call_i, OP_JUMP
j_call_i:
@@ -2586,9 +2569,9 @@ amx_opcodelist_jit:
DD OP_FLOAT_MUL ; DA
DD OP_FLOAT_DIV ; DA
DD OP_FLOAT_ADD ; DA
DD OP_FLOAT_SUB ; DA
DD OP_FLOAT_TO ; DA
DD OP_FLOAT_ROUND ; DA
DD OP_FLOAT_CMP ; DA
-END
+END:
diff --git a/amxmodx/amxmodx.cpp b/amxmodx/amxmodx.cpp
--- a/amxmodx/amxmodx.cpp
+++ b/amxmodx/amxmodx.cpp
@@ -141,17 +141,17 @@ static cell AMX_NATIVE_CALL server_print
message[len] = 0;
SERVER_PRINT(message);
return len;
}
static cell AMX_NATIVE_CALL engclient_print(AMX *amx, cell *params) /* 3 param */
{
- int len;
+ int len = 0;
char *msg;
if (params[1] == 0)
{
for (int i = 1; i <= gpGlobals->maxClients; ++i)
{
CPlayer* pPlayer = GET_PLAYER_POINTER_I(i);
@@ -492,16 +492,25 @@ static cell AMX_NATIVE_CALL is_amd64_ser
{
#if PAWN_CELL_SIZE==64
return 1;
#else
return 0;
#endif
}
+static cell AMX_NATIVE_CALL is_mac_server(AMX *amx, cell *params)
+{
+#ifdef __APPLE__
+ return 1;
+#else
+ return 0;
+#endif
+}
+
static cell AMX_NATIVE_CALL is_jit_enabled(AMX *amx, cell *params) // PM: Useless ;P
{
#ifdef JIT
return 1;
#else
return 0;
#endif
}
@@ -1000,17 +1009,17 @@ static cell AMX_NATIVE_CALL get_user_tea
{
// SidLuke, DoD fix
if (g_bmod_dod)
{
int iTeam = pPlayer->pEdict->v.team;
if (params[3])
{
- char *szTeam = "";
+ const char *szTeam = "";
switch (iTeam)
{
case 1:
szTeam = "Allies";
break;
case 2:
szTeam = "Axis";
@@ -3838,17 +3847,17 @@ cell AMX_NATIVE_CALL require_module(AMX
}
static cell AMX_NATIVE_CALL amx_mkdir(AMX *amx, cell *params)
{
int len = 0;
char *path = get_amxstring(amx, params[1], 0, len);
char *realpath = build_pathname("%s", path);
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
return mkdir(realpath, 0700);
#else
return mkdir(realpath);
#endif
}
static cell AMX_NATIVE_CALL find_plugin_byfile(AMX *amx, cell *params)
{
@@ -4701,16 +4710,17 @@ AMX_NATIVE_INFO amxmodx_Natives[] =
{"get_xvar_float", get_xvar_num},
{"get_xvar_id", get_xvar_id},
{"get_xvar_num", get_xvar_num},
{"int3", int3},
{"is_amd64_server", is_amd64_server},
{"is_dedicated_server", is_dedicated_server},
{"is_jit_enabled", is_jit_enabled},
{"is_linux_server", is_linux_server},
+ {"is_mac_server", is_mac_server},
{"is_map_valid", is_map_valid},
{"is_module_loaded", is_module_loaded},
{"is_plugin_loaded", is_plugin_loaded},
{"is_user_alive", is_user_alive},
{"is_user_authorized", is_user_authorized},
{"is_user_bot", is_user_bot},
{"is_user_connected", is_user_connected},
{"is_user_connecting", is_user_connecting},
diff --git a/amxmodx/amxmodx.h b/amxmodx/amxmodx.h
--- a/amxmodx/amxmodx.h
+++ b/amxmodx/amxmodx.h
@@ -27,17 +27,17 @@
* to your version of the file, but you are not obligated to do so. If
* you do not wish to do so, delete this exception statement from your
* version.
*/
#ifndef AMXMODX_H
#define AMXMODX_H
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
#include <unistd.h>
#include <stdlib.h>
#include "sclinux.h"
#endif
#include <ctype.h> //tolower, etc
#include "string.h"
#include <extdll.h>
#include <meta_api.h>
@@ -81,17 +81,17 @@ extern AMX_NATIVE_INFO file_Natives[];
extern AMX_NATIVE_INFO float_Natives[];
extern AMX_NATIVE_INFO string_Natives[];
extern AMX_NATIVE_INFO vault_Natives[];
extern AMX_NATIVE_INFO msg_Natives[];
extern AMX_NATIVE_INFO vector_Natives[];
extern AMX_NATIVE_INFO g_SortNatives[];
extern AMX_NATIVE_INFO g_DataStructNatives[];
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLOAD(path) (DLHANDLE)LoadLibrary(path)
#define DLPROC(m, func) GetProcAddress(m, func)
#define DLFREE(m) FreeLibrary(m)
#else
#define DLLOAD(path) (DLHANDLE)dlopen(path, RTLD_NOW)
#define DLPROC(m, func) dlsym(m, func)
#define DLFREE(m) dlclose(m)
#endif
@@ -102,24 +102,24 @@ extern AMX_NATIVE_INFO g_DataStructNativ
#else
#if defined AMD64
typedef __int64 _INT_PTR;
#else
typedef __int32 _INT_PTR;
#endif
#endif
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
typedef HINSTANCE DLHANDLE;
#else
typedef void* DLHANDLE;
#define INFINITE 0xFFFFFFFF
#endif
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define PATH_SEP_CHAR '\\'
#define ALT_SEP_CHAR '/'
#else
#define PATH_SEP_CHAR '/'
#define ALT_SEP_CHAR '\\'
#endif
#ifndef GETPLAYERAUTHID
@@ -134,17 +134,17 @@ extern AMX_NATIVE_INFO g_DataStructNativ
#define SETCLIENTMAXSPEED (*g_engfuncs.pfnSetClientMaxspeed)
char* UTIL_SplitHudMessage(register const char *src);
int UTIL_ReadFlags(const char* c);
void UTIL_ClientPrint(edict_t *pEntity, int msg_dest, char *msg);
void UTIL_FakeClientCommand(edict_t *pEdict, const char *cmd, const char *arg1 = NULL, const char *arg2 = NULL);
void UTIL_GetFlags(char* flags, int flag);
-void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, char *pMessage);
+void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, const char *pMessage);
void UTIL_IntToString(int value, char *output);
void UTIL_ShowMOTD(edict_t *client, char *motd, int mlen, const char *name);
void UTIL_ShowMenu(edict_t* pEntity, int slots, int time, char *menu, int mlen);
char *UTIL_VarArgs(const char *fmt, ...);
#define GET_PLAYER_POINTER(e) (&g_players[ENTINDEX(e)])
@@ -271,34 +271,34 @@ enum CountModulesMode
};
int countModules(CountModulesMode mode);
void modules_callPluginsLoaded();
void modules_callPluginsUnloaded();
void modules_callPluginsUnloading();
cell* get_amxaddr(AMX *amx, cell amx_addr);
-char* build_pathname(char *fmt, ...);
-char* build_pathname_r(char *buffer, size_t maxlen, char *fmt, ...);
+char* build_pathname(const char *fmt, ...);
+char* build_pathname_r(char *buffer, size_t maxlen, const char *fmt, ...);
char* format_amxstring(AMX *amx, cell *params, int parm, int& len);
AMX* get_amxscript(int, void**, const char**);
const char* get_amxscriptname(AMX* amx);
char* get_amxstring(AMX *amx, cell amx_addr, int id, int& len);
extern "C" size_t get_amxstring_r(AMX *amx, cell amx_addr, char *destination, int maxlen);
int amxstring_len(cell* cstr);
int load_amxscript(AMX* amx, void** program, const char* path, char error[64], int debug);
int set_amxnatives(AMX* amx, char error[64]);
int set_amxstring(AMX *amx, cell amx_addr, const char *source, int max);
int unload_amxscript(AMX* amx, void** program);
void copy_amxmemory(cell* dest, cell* src, int len);
void get_modname(char*);
-void print_srvconsole(char *fmt, ...);
-void report_error(int code, char* fmt, ...);
+void print_srvconsole(const char *fmt, ...);
+void report_error(int code, const char* fmt, ...);
void* alloc_amxmemory(void**, int size);
void free_amxmemory(void **ptr);
// get_localinfo
const char* get_localinfo(const char* name, const char* def);
cell AMX_NATIVE_CALL require_module(AMX *amx, cell *params);
extern "C" void LogError(AMX *amx, int err, const char *fmt, ...);
enum ModuleCallReason
diff --git a/amxmodx/amxxfile.cpp b/amxmodx/amxxfile.cpp
--- a/amxmodx/amxxfile.cpp
+++ b/amxmodx/amxxfile.cpp
@@ -37,17 +37,17 @@
**********************/
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
-#if defined __linux__
+#if defined(__linux__) || defined(__APPLE__)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#else
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
#endif
#endif
@@ -122,27 +122,27 @@ CAmxxReader::CAmxxReader(const char *fil
DATAREAD(&m_Bh.numPlugins, sizeof(mint8_t), 1);
m_Bh.plugins = new PluginEntry[m_Bh.numPlugins];
PluginEntry *pe;
m_SectionHdrOffset = 0;
m_Entry = -1;
for (mint8_t i = 0; i < m_Bh.numPlugins; i++)
{
- pe = &(m_Bh.plugins[i]);
+ pe = &(m_Bh.plugins[(unsigned)i]);
DATAREAD(&pe->cellsize, sizeof(mint8_t), 1);
DATAREAD(&pe->disksize, sizeof(int32_t), 1);
DATAREAD(&pe->imagesize, sizeof(int32_t), 1);
DATAREAD(&pe->memsize, sizeof(int32_t), 1);
DATAREAD(&pe->offs, sizeof(int32_t), 1);
}
for (mint8_t i = 0; i < m_Bh.numPlugins; i++)
{
- pe = &(m_Bh.plugins[i]);
+ pe = &(m_Bh.plugins[(unsigned)i]);
if (pe->cellsize == m_CellSize)
{
m_Entry = i;
break;
}
}
diff --git a/amxmodx/amxxlog.cpp b/amxmodx/amxxlog.cpp
--- a/amxmodx/amxxlog.cpp
+++ b/amxmodx/amxxlog.cpp
@@ -30,22 +30,22 @@
// amxx_logging localinfo:
// 0 = no logging
// 1 = one logfile / day
// 2 = one logfile / map
// 3 = HL Logs
#include <time.h>
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#include <io.h>
#endif
#include "amxmodx.h"
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define vsnprintf _vsnprintf
#endif
#include "svn_version.h"
CLog::CLog()
{
m_LogType = 0;
@@ -132,17 +132,17 @@ void CLog::UseFile(const String &fileNam
static char file[256];
m_LogFile.assign(build_pathname_r(file, sizeof(file)-1, "%s/%s", g_log_dir.c_str(), fileName.c_str()));
}
void CLog::MapChange()
{
// create dir if not existing
char file[256];
-#ifdef __linux
+#if defined(__linux__) || defined(__APPLE__)
mkdir(build_pathname_r(file, sizeof(file)-1, "%s", g_log_dir.c_str()), 0700);
#else
mkdir(build_pathname_r(file, sizeof(file)-1, "%s", g_log_dir.c_str()));
#endif
m_LogType = atoi(get_localinfo("amxx_logging", "1"));
if (m_LogType < 0 || m_LogType > 3)
diff --git a/amxmodx/binlog.cpp b/amxmodx/binlog.cpp
--- a/amxmodx/binlog.cpp
+++ b/amxmodx/binlog.cpp
@@ -41,17 +41,17 @@ bool BinLog::Open()
{
const char *data = get_localinfo("amxmodx_datadir", "addons/amxmodx/data");
char path[255];
build_pathname_r(path, sizeof(path)-1, "%s/binlogs", data);
if (!DirExists(path))
{
mkdir(path
-#if defined __linux__
+#if defined(__linux__) || defined(__APPLE__)
, 0755
#endif
);
if (!DirExists(path))
return false;
}
char file[255];
diff --git a/amxmodx/datastructs.h b/amxmodx/datastructs.h
--- a/amxmodx/datastructs.h
+++ b/amxmodx/datastructs.h
@@ -210,18 +210,17 @@ public:
return NULL;
}
return data + (which * cellcount);
};
// Shifts all items from this item, and including this item up 1.
int ShiftUpFrom(size_t which)
{
// No point shifting this.
- if (this->count < 0 ||
- which > this->count)
+ if (which > this->count)
{
return 0;
}
// First make a new item.
this->Push();
// If we got an InsertAfter(lastitem), then which will equal this->count - 1
@@ -249,18 +248,17 @@ public:
return 1;
};
// Shifts all items from this item, and including this item down 1.
// This deletes the item specified.
int Delete(size_t which)
{
// No point shifting this.
- if (this->count < 0 ||
- which >= this->count)
+ if (which >= this->count)
{
return 0;
}
for (size_t i=which; i<this->count - 1; i++)
{
memcpy(GetCellPointer(i), GetCellPointer(i + 1), sizeof(cell) * cellcount);
diff --git a/amxmodx/debugger.cpp b/amxmodx/debugger.cpp
--- a/amxmodx/debugger.cpp
+++ b/amxmodx/debugger.cpp
@@ -609,19 +609,19 @@ void Debugger::FmtGenericMsg(AMX *amx, i
{
const char *filename = "";
char native[sNAMEMAX+1];
CList<CScript,AMX*>::iterator a = g_loadedscripts.find(amx);
if (a)
filename = (*a).getName();
size_t len = strlen(filename);
- for (size_t i=len-1; i>=0; i--)
+ for (size_t i=len-1; i<len; i--)
{
- if (filename[i] == '/' || filename[i] == '\\' && i != len - 1)
+ if ((filename[i] == '/' || filename[i] == '\\') && i != len - 1)
{
filename = &(filename[i+1]);
break;
}
}
if (error == AMX_ERR_EXIT)
{
diff --git a/amxmodx/file.cpp b/amxmodx/file.cpp
--- a/amxmodx/file.cpp
+++ b/amxmodx/file.cpp
@@ -38,17 +38,17 @@
#ifdef __GNUC__
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#endif
// header file for unlink()
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
#include <unistd.h>
#else
#define WINDOWS_LEAN_AND_MEAN
#include <windows.h>
#include <io.h>
#endif
#include "amxmodx.h"
@@ -779,17 +779,17 @@ static cell AMX_NATIVE_CALL amx_ungetc(A
FILE *fp = (FILE *)params[1];
if (!fp)
return 0;
return ungetc(static_cast<int>(params[2]), fp);
}
-#if defined __linux__
+#if defined(__linux__) || defined(__APPLE__)
#define _rmdir rmdir
#endif
static cell AMX_NATIVE_CALL amx_rmdir(AMX *amx, cell *params)
{
int len;
char* sFile = build_pathname("%s", get_amxstring(amx, params[1], 0, len));
@@ -812,17 +812,17 @@ static cell AMX_NATIVE_CALL amx_rename(A
{
build_pathname_r(f_old_r, sizeof(f_old_r)-1, "%s", fold);
build_pathname_r(f_new_r, sizeof(f_new_r)-1, "%s", fnew);
} else {
snprintf(f_old_r, sizeof(f_old_r)-1, "%s", fold);
snprintf(f_new_r, sizeof(f_new_r)-1, "%s", fnew);
}
-#if defined __linux__
+#if defined(__linux__) || defined(__APPLE__)
return (rename(f_old_r, f_new_r) == 0);
#elif defined WIN32
return MoveFileA(f_old_r, f_new_r);
#endif
}
static cell LoadFileForMe(AMX *amx, cell *params)
{
diff --git a/amxmodx/format.cpp b/amxmodx/format.cpp
--- a/amxmodx/format.cpp
+++ b/amxmodx/format.cpp
@@ -24,16 +24,21 @@
#define is_digit(c) ((unsigned)to_digit(c) <= 9)
#define to_char(n) ((n) + '0')
#define CHECK_ARGS(n) \
if ((arg+n) > args) { \
LogError(amx, AMX_ERR_PARAMS, "String formatted incorrectly - parameter %d (total %d)", arg, args); \
return 0; \
}
+template size_t atcprintf<cell, cell>(cell *, size_t, const cell *, AMX *, cell *, int *);
+template size_t atcprintf<char, cell>(char *, size_t, const cell *, AMX *, cell *, int *);
+template size_t atcprintf<cell, char>(cell *, size_t, const char *, AMX *, cell *, int *);
+template size_t atcprintf<char, char>(char *, size_t, const char *, AMX *, cell *, int *);
+
THash<String, lang_err> BadLang_Table;
static cvar_t *amx_mldebug = NULL;
static cvar_t *amx_cl_langs = NULL;
const char *translate(AMX *amx, cell amxaddr, const char *key)
{
const char *pLangName = NULL;
diff --git a/amxmodx/format.h b/amxmodx/format.h
--- a/amxmodx/format.h
+++ b/amxmodx/format.h
@@ -1,11 +1,14 @@
#ifndef _INCLUDE_FORMATTING_H
#define _INCLUDE_FORMATTING_H
//Amx Templatized Cell Printf
template <typename D, typename S>
size_t atcprintf(D *buffer, size_t maxlen, const S *format, AMX *amx, cell *params, int *param);
+//extern template
+//size_t atcprintf<cell, cell>(cell *buffer, size_t maxlen, const cell *format, AMX *amx, cell *params, int *param);
+
const char *translate(AMX *amx, cell amxaddr, const char *key);
bool translate_bcompat(AMX *amx, cell *source, const char **_key, const char **_def);
#endif //_INCLUDE_FORMATTING_H
diff --git a/amxmodx/helpers-x86.asm b/amxmodx/helpers-x86.asm
--- a/amxmodx/helpers-x86.asm
+++ b/amxmodx/helpers-x86.asm
@@ -38,14 +38,14 @@ amxx_CpuSupport:
je .fail
mov eax, 1
jmp .end
.fail:
xor eax, eax
-.end
+.end:
pop ebx
pop ebp
ret
diff --git a/amxmodx/md5.cpp b/amxmodx/md5.cpp
--- a/amxmodx/md5.cpp
+++ b/amxmodx/md5.cpp
@@ -180,17 +180,17 @@ unsigned char *MD5::raw_digest(){
}
memcpy(s, digest, 16);
return s;
}
-char *MD5::hex_digest(){
+const char *MD5::hex_digest(){
int i;
char *s= new char[33];
if (!finalized){
/* cerr << "MD5::hex_digest: Can't get digest if you haven't "<<
"finalized the digest!" <<endl;*/
return "";
@@ -200,17 +200,17 @@ char *MD5::hex_digest(){
sprintf(s+i*2, "%02x", digest[i]);
s[32]='\0';
return s;
}
-char *MD5::hex_digest(char buffer[33]){
+const char *MD5::hex_digest(char buffer[33]){
int i;
if (!finalized)
{
/* cerr << "MD5::hex_digest: Can't get digest if you haven't "<<
"finalized the digest!" <<endl;*/
return "";
diff --git a/amxmodx/md5.h b/amxmodx/md5.h
--- a/amxmodx/md5.h
+++ b/amxmodx/md5.h
@@ -54,18 +54,18 @@ public:
// constructors for special circumstances. All these constructors finalize
// the MD5 context.
MD5 (unsigned char *string); // digest string, finalize
MD5 (FILE *file); // digest file, close, finalize
// methods to acquire finalized result
unsigned char *raw_digest (); // digest as a 16-byte binary array
- char * hex_digest (); // digest as a 33-byte ascii-hex string
- char * hex_digest (char buffer[33]); //same as above, passing buffer
+ const char *hex_digest (); // digest as a 33-byte ascii-hex string
+ const char *hex_digest (char buffer[33]); //same as above, passing buffer
private:
// first, some types:
typedef unsigned int uint4; // assumes integer is 4 words long
typedef unsigned short int uint2; // assumes short integer is 2 words long
diff --git a/amxmodx/meta_api.cpp b/amxmodx/meta_api.cpp
--- a/amxmodx/meta_api.cpp
+++ b/amxmodx/meta_api.cpp
@@ -193,17 +193,17 @@ void BuildPluginFileList(const char *ini
}
while (!_findnext(handle, &fd))
{
ParseAndOrAdd(files, fd.name);
}
_findclose(handle);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
build_pathname_r(path, sizeof(path)-1, "%s/", initialdir);
struct dirent *ep;
DIR *dp;
if ((dp = opendir(path)) == NULL)
{
return;
}
@@ -249,32 +249,32 @@ void LoadExtraPluginsFromDir(const char
g_plugins.loadPluginsFromFile(path);
delete pString;
files.pop();
}
}
// Precache stuff from force consistency calls
// or check for pointed files won't be done
-int C_PrecacheModel(char *s)
+int C_PrecacheModel(const char *s)
{
if (!g_forcedmodules)
{
g_forcedmodules = true;
for (CList<ForceObject>::iterator a = g_forcemodels.begin(); a; ++a)
{
PRECACHE_MODEL((char*)(*a).getFilename());
ENGINE_FORCE_UNMODIFIED((*a).getForceType(), (*a).getMin(), (*a).getMax(), (*a).getFilename());
}
}
RETURN_META_VALUE(MRES_IGNORED, 0);
}
-int C_PrecacheSound(char *s)
+int C_PrecacheSound(const char *s)
{
if (!g_forcedsounds)
{
g_forcedsounds = true;
for (CList<ForceObject>::iterator a = g_forcesounds.begin(); a; ++a)
{
PRECACHE_SOUND((char*)(*a).getFilename());
ENGINE_FORCE_UNMODIFIED((*a).getForceType(), (*a).getMin(), (*a).getMax(), (*a).getFilename());
@@ -726,26 +726,26 @@ void C_ServerDeactivate_Post()
{
if (g_memreport_count == 0)
{
// make new directory
time_t td;
time(&td);
tm *curTime = localtime(&td);
int i = 0;
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")), 0700);
#else
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")));
#endif
while (true)
{
char buffer[256];
sprintf(buffer, "%s/memreports/D%02d%02d%03d", get_localinfo("amxx_basedir", "addons/amxmodx"), curTime->tm_mon + 1, curTime->tm_mday, i);
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
mkdir(build_pathname("%s", g_log_dir.c_str()), 0700);
if (mkdir(build_pathname(buffer), 0700) < 0)
#else
mkdir(build_pathname("%s", g_log_dir.c_str()));
if (mkdir(build_pathname(buffer)) < 0)
#endif
{
if (errno == EEXIST)
@@ -1078,26 +1078,26 @@ void C_StartFrame_Post(void)
if (g_memreport_count == 0)
{
// make new directory
time_t td;
time(&td);
tm *curTime = localtime(&td);
int i = 0;
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")), 0700);
#else
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")));
#endif
while (true)
{
char buffer[256];
sprintf(buffer, "%s/memreports/D%02d%02d%03d", get_localinfo("amxx_basedir", "addons/amxmodx"), curTime->tm_mon + 1, curTime->tm_mday, i);
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
mkdir(build_pathname("%s", g_log_dir.c_str()), 0700);
if (mkdir(build_pathname(buffer), 0700) < 0)
#else
mkdir(build_pathname("%s", g_log_dir.c_str()));
if (mkdir(build_pathname(buffer)) < 0)
#endif
{
if (errno == EEXIST)
@@ -1280,17 +1280,17 @@ void C_TraceLine_Post(const float *v1, c
pPlayer->aiming = ptr->iHitgroup;
pPlayer->lastTrace = ptr->vecEndPos;
}
RETURN_META(MRES_IGNORED);
}
-void C_AlertMessage(ALERT_TYPE atype, char *szFmt, ...)
+void C_AlertMessage(ALERT_TYPE atype, const char *szFmt, ...)
{
if (atype != at_logged)
{
RETURN_META(MRES_IGNORED);
}
/* There are also more messages but we want only logs
at_notice,
@@ -1324,17 +1324,17 @@ void C_AlertMessage(ALERT_TYPE atype, ch
if (retVal)
{
RETURN_META(MRES_SUPERCEDE);
}
RETURN_META(MRES_IGNORED);
}
-void C_ChangeLevel(char *map, char *what)
+void C_ChangeLevel(const char *map, const char *what)
{
int ret = executeForwards(FF_ChangeLevel, map);
if (ret)
RETURN_META(MRES_SUPERCEDE);
RETURN_META(MRES_IGNORED);
}
void C_CvarValue2(const edict_t *pEdict, int requestId, const char *cvar, const char *value)
@@ -1366,17 +1366,17 @@ void C_CvarValue2(const edict_t *pEdict,
break;
}
}
RETURN_META(MRES_HANDLED);
}
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
gpMetaUtilFuncs = pMetaUtilFuncs;
*pPlugInfo = &Plugin_info;
int mmajor = 0, mminor = 0, pmajor = 0, pminor = 0;
sscanf(ifvers, "%d:%d", &mmajor, &mminor);
sscanf(Plugin_info.ifvers, "%d:%d", &pmajor, &pminor);
@@ -1530,17 +1530,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
Module_UncacheFunctions();
ClearLibraries(LibSource_Plugin);
ClearLibraries(LibSource_Module);
return (TRUE);
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll(enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals)
{
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll(enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals)
{
diff --git a/amxmodx/modules.cpp b/amxmodx/modules.cpp
--- a/amxmodx/modules.cpp
+++ b/amxmodx/modules.cpp
@@ -24,18 +24,21 @@
* L.L.C ("Valve"). You must obey the GNU General Public License in all
* respects for all of the code used other than the HL Engine and MODs
* from Valve. If you modify this file, you may extend this exception
* to your version of the file, but you are not obligated to do so. If
* you do not wish to do so, delete this exception statement from your
* version.
*/
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
+#if defined(__linux__)
#include <malloc.h>
+#endif
+
#include <stdlib.h>
#include <sys/mman.h>
#include "sclinux.h"
#endif
#include "amxmodx.h"
#include "osdep.h" // sleep, etc
#include "CFile.h"
@@ -81,17 +84,17 @@ bool DirExists(const char *dir)
if (S_ISDIR(s.st_mode))
return true;
#endif
return false;
}
-void report_error(int code, char* fmt, ...)
+void report_error(int code, const char* fmt, ...)
{
va_list argptr;
char string[256];
*string = 0;
va_start(argptr, fmt);
vsnprintf(string, 255, fmt, argptr);
string[255] = 0;
va_end(argptr);
@@ -101,17 +104,17 @@ void report_error(int code, char* fmt, .
AMXXLOG_Log("Error:");
AMXXLOG_Log(string);
} else {
AMXXLOG_Log("!!! There was an unexpected module error.");
AMXXLOG_Log("The server may not work correctly.");
}
}
-void print_srvconsole(char *fmt, ...)
+void print_srvconsole(const char *fmt, ...)
{
va_list argptr;
static char string[384];
va_start(argptr, fmt);
vsnprintf(string, sizeof(string) - 1, fmt, argptr);
string[sizeof(string) - 1] = '\0';
va_end(argptr);
@@ -335,21 +338,24 @@ int load_amxscript(AMX *amx, void **prog
strcpy(error, "Failed to initialize JIT'd plugin");
return (amx->error = AMX_ERR_INIT);
}
if ((err = amx_InitJIT(amx, (void *)rt, (void *)np)) == AMX_ERR_NONE)
{
//amx->base = (unsigned char FAR *)realloc(np, amx->code_size);
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
amx->base = (unsigned char *)VirtualAlloc(NULL, amx->code_size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
-#else
- //posix_memalign((void **)&(amx->base), sysconf(_SC_PAGESIZE), amx->code_size);
+#elif defined(__GNUC__)
+# if defined(__APPLE__)
+ amx->base = (unsigned char *)valloc(amx->code_size);
+# else
amx->base = (unsigned char *)memalign(sysconf(_SC_PAGESIZE), amx->code_size);
+# endif
mprotect((void *)amx->base, amx->code_size, PROT_READ|PROT_WRITE|PROT_EXEC);
#endif
if (amx->base)
memcpy(amx->base, np, amx->code_size);
delete [] np;
delete [] rt;
@@ -636,17 +642,17 @@ int unload_amxscript(AMX* amx, void** pr
a.remove();
char *prg = (char *)*program;
if (!prg)
return AMX_ERR_NONE;
#if defined JIT
-#if defined __linux__
+#if defined(__linux__) || defined(__APPLE__)
if ((flags & AMX_FLAG_JITC) != AMX_FLAG_JITC)
{
delete [] prg;
} else {
#ifdef free
#undef free
free(prg);
#define free(ptr) m_deallocator(__FILE__, __LINE__, __FUNCTION__, m_alloc_free, ptr)
@@ -715,17 +721,17 @@ const char* get_amxscriptname(AMX* amx)
return a ? (*a).getName() : "";
}
void get_modname(char* buffer)
{
strcpy(buffer, g_mod_name.c_str());
}
-char* build_pathname(char *fmt, ...)
+char* build_pathname(const char *fmt, ...)
{
static char string[256];
int b;
int a = b = snprintf(string, 255, "%s%c", g_mod_name.c_str(), PATH_SEP_CHAR);
va_list argptr;
va_start(argptr, fmt);
a += vsnprintf (&string[a], 255 - a, fmt, argptr);
@@ -741,17 +747,17 @@ char* build_pathname(char *fmt, ...)
*path = PATH_SEP_CHAR;
}
++path;
}
return string;
}
-char *build_pathname_r(char *buffer, size_t maxlen, char *fmt, ...)
+char *build_pathname_r(char *buffer, size_t maxlen, const char *fmt, ...)
{
snprintf(buffer, maxlen, "%s%c", g_mod_name.c_str(), PATH_SEP_CHAR);
size_t len = strlen(buffer);
char *ptr = buffer + len;
va_list argptr;
va_start(argptr, fmt);
@@ -766,17 +772,17 @@ char *build_pathname_r(char *buffer, siz
}
++ptr;
}
return buffer;
}
// build pathname based on addons dir
-char* build_pathname_addons(char *fmt, ...)
+char* build_pathname_addons(const char *fmt, ...)
{
static char string[256];
va_list argptr;
va_start(argptr, fmt);
vsnprintf (string, 255, fmt, argptr);
va_end(argptr);
@@ -870,29 +876,31 @@ bool ConvertModuleName(const char *pathS
} else {
*ptr = '\0';
}
path.assign(orig_path);
path.append(PATH_SEP_CHAR);
path.append(tmpname);
path.append("_amxx");
-#if defined __linux__
+#if defined(__linux__) || defined(__APPLE__)
#if defined AMD64 || PAWN_CELL_SIZE==64
path.append("_amd64");
#else
path.append("_i");
path.append(iDigit);
path.append("86");
#endif
#endif
#if defined WIN32
path.append(".dll");
#elif defined __linux__
path.append(".so");
+#elif defined __APPLE__
+ path.append(".dylib");
#endif
return true;
}
bool LoadModule(const char *shortname, PLUG_LOADTIME now, bool simplify, bool noFileBail)
{
char pathString[512];
@@ -1174,30 +1182,26 @@ void modules_callPluginsUnloading()
(*iter).CallPluginsUnloading();
++iter;
}
}
// new functions
int MNF_AddNatives(AMX_NATIVE_INFO* natives)
{
- CList<CModule, const char *>::iterator a = g_modules.begin();
-
if (!g_CurrentlyCalledModule || g_ModuleCallReason != ModuleCall_Attach)
return FALSE; // may only be called from attach
g_CurrentlyCalledModule->m_Natives.push_back(natives);
return TRUE;
}
int MNF_AddNewNatives(AMX_NATIVE_INFO *natives)
{
- CList<CModule, const char *>::iterator a = g_modules.begin();
-
if (!g_CurrentlyCalledModule || g_ModuleCallReason != ModuleCall_Attach)
return FALSE; // may only be called from attach
g_CurrentlyCalledModule->m_NewNatives.push_back(natives);
return TRUE;
}
diff --git a/amxmodx/modules.h b/amxmodx/modules.h
--- a/amxmodx/modules.h
+++ b/amxmodx/modules.h
@@ -30,17 +30,17 @@
*/
#ifndef __MODULES_H__
#define __MODULES_H__
#include "amx.h"
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
#define WINAPI
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
diff --git a/amxmodx/natives.cpp b/amxmodx/natives.cpp
--- a/amxmodx/natives.cpp
+++ b/amxmodx/natives.cpp
@@ -30,18 +30,21 @@
#include "amxmodx.h"
#include "sh_stack.h"
#include "natives.h"
#include "debugger.h"
#include "libraries.h"
#include "format.h"
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
+#if defined(__linux__)
#include <malloc.h>
+#endif
+
#include <stdlib.h>
#include <sys/mman.h>
#include "sclinux.h"
#endif
//Written by David "BAILOPAN" Anderson
//With the exception for param_convert, which was written by
// Julien "dJeyL" Laurent
@@ -474,22 +477,26 @@ static cell AMX_NATIVE_CALL register_nat
regnative *pNative = new regnative;
pNative->amx = amx;
pNative->func = idx;
//we'll apply a safety buffer too
//make our function
int size = amxx_DynaCodesize();
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
DWORD temp;
pNative->pfn = new char[size + 10];
VirtualProtect(pNative->pfn, size+10, PAGE_EXECUTE_READWRITE, &temp);
-#else
+#elif defined(__GNUC__)
+# if defined(__APPLE__)
+ pNative->pfn = (char *)valloc(size+10);
+# else
pNative->pfn = (char *)memalign(sysconf(_SC_PAGESIZE), size+10);
+# endif
mprotect((void *)pNative->pfn, size+10, PROT_READ|PROT_WRITE|PROT_EXEC);
#endif
int id = (int)g_RegNatives.size();
amxx_DynaMake(pNative->pfn, id);
pNative->func = idx;
pNative->style = params[3];
diff --git a/amxmodx/osdefs.h b/amxmodx/osdefs.h
--- a/amxmodx/osdefs.h
+++ b/amxmodx/osdefs.h
@@ -34,16 +34,20 @@
# define __32BIT__ 1
# endif
#endif
#if defined __linux__
#include <endian.h>
#endif
+#if defined __APPLE__
+ #include <sys/types.h>
+#endif
+
/* Linux NOW has these */
#if !defined BIG_ENDIAN
#define BIG_ENDIAN 4321
#endif
#if !defined LITTLE_ENDIAN
#define LITTLE_ENDIAN 1234
#endif
diff --git a/amxmodx/sclinux.h b/amxmodx/sclinux.h
--- a/amxmodx/sclinux.h
+++ b/amxmodx/sclinux.h
@@ -15,36 +15,40 @@
*
* So we stick to getchar at the moment... (one needs to key ctrl-d to terminate input if getch is called with a controlling
* terminal driven by a tty having -raw)
*/
#define getch getchar
#define stricmp(a,b) strcasecmp(a,b)
#define strnicmp(a,b,c) strncasecmp(a,b,c)
-#if defined __linux__ && !defined _snprintf
+#if ( defined(__linux__) || defined(__APPLE__) ) && !defined _snprintf
#define _snprintf snprintf
#endif
-#if defined __linux__ && !defined _vsnprintf
+#if ( defined(__linux__) || defined(__APPLE__) ) && !defined _vsnprintf
//#define _vsnprintf vsnprintf
#endif
/*
* WinWorld wants '\'. Unices do not.
*/
#define DIRECTORY_SEP_CHAR '/'
#define DIRECTORY_SEP_STR "/"
/*
* SC assumes that a computer is Little Endian unless told otherwise. It uses
* (and defines) the macros BYTE_ORDER and BIG_ENDIAN.
* For Linux, we must overrule these settings with those defined in glibc.
*/
#if !defined __BYTE_ORDER
# include <stdlib.h>
+# if defined __APPLE__
+# include <sys/types.h>
+# define __BYTE_ORDER BYTE_ORDER
+# endif
#endif
#if defined __OpenBSD__
# define __BYTE_ORDER BYTE_ORDER
# define __LITTLE_ENDIAN LITTLE_ENDIAN
# define __BIG_ENDIAN BIG_ENDIAN
#endif
diff --git a/amxmodx/sdk/amxxmodule.cpp b/amxmodx/sdk/amxxmodule.cpp
--- a/amxmodx/sdk/amxxmodule.cpp
+++ b/amxmodx/sdk/amxxmodule.cpp
@@ -2235,17 +2235,17 @@ static META_FUNCTIONS g_MetaFunctions_Ta
GetEntityAPI2,
GetEntityAPI2_Post,
GetNewDLLFunctions,
GetNewDLLFunctions_Post,
GetEngineFunctions,
GetEngineFunctions_Post
};
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
if ((int) CVAR_GET_FLOAT("developer") != 0)
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
Plugin_info.logtag, ifvers, Plugin_info.ifvers);
// Check for valid pMetaUtilFuncs before we continue.
if(!pMetaUtilFuncs) {
UTIL_LogPrintf("[%s] ERROR: Meta_Query called with null pMetaUtilFuncs\n", Plugin_info.logtag);
@@ -2329,17 +2329,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
#ifdef FN_META_DETACH
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
@@ -3045,17 +3045,17 @@ char* UTIL_VarArgs( char *format, ... )
return string;
}
//=========================================================
// UTIL_LogPrintf - Prints a logged message to console.
// Preceded by LOG: ( timestamp ) < message >
//=========================================================
-void UTIL_LogPrintf( char *fmt, ... )
+void UTIL_LogPrintf( const char *fmt, ... )
{
va_list argptr;
static char string[1024];
va_start ( argptr, fmt );
vsnprintf ( string, sizeof(string), fmt, argptr );
va_end ( argptr );
diff --git a/amxmodx/sdk/amxxmodule.h b/amxmodx/sdk/amxxmodule.h
--- a/amxmodx/sdk/amxxmodule.h
+++ b/amxmodx/sdk/amxxmodule.h
@@ -15,21 +15,26 @@
#ifdef USE_METAMOD
#include <extdll.h>
#include <meta_api.h>
#include "osdep.h"
#endif // #ifdef USE_METAMOD
// DLL Export
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
+#endif
+
+#if defined(__linux__) && !defined(LINUX)
#define LINUX
+#elif defined(__APPLE__) && !defined(OSX)
+#define OSX
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
// ***** AMXX stuff *****
// module interface version was 1
@@ -61,17 +66,17 @@ struct amxx_module_info_s
// *** Small stuff ***
// The next section is copied from the amx.h file
// Copyright (c) ITB CompuPhase, 1997-2005
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -303,17 +308,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -390,28 +395,28 @@ enum {
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
AMX_ERR_PARAMS, /* parameter error */
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
};
#if !defined AMX_NO_ALIGN
- #if defined __linux__
+ #if defined(__linux__) || defined(__APPLE__)
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions *****
#ifdef USE_METAMOD
-void UTIL_LogPrintf( char *fmt, ... );
+void UTIL_LogPrintf( const char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY
void FN_META_QUERY(void);
#endif // FN_META_QUERY
@@ -828,21 +833,21 @@ int FN_InconsistentFile_Post(const edict
#ifdef FN_AllowLagCompensation_Post
int FN_AllowLagCompensation_Post(void);
#endif // FN_AllowLagCompensation_Post
#ifdef FN_PrecacheModel
-int FN_PrecacheModel(char *s);
+int FN_PrecacheModel(const char *s);
#endif // FN_PrecacheModel
#ifdef FN_PrecacheSound
-int FN_PrecacheSound(char *s);
+int FN_PrecacheSound(const char *s);
#endif // FN_PrecacheSound
#ifdef FN_SetModel
void FN_SetModel(edict_t *e, const char *m);
#endif // FN_SetModel
#ifdef FN_ModelIndex
int FN_ModelIndex(const char *m);
@@ -852,17 +857,17 @@ int FN_ModelIndex(const char *m);
int FN_ModelFrames(int modelIndex);
#endif // FN_ModelFrames
#ifdef FN_SetSize
void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize
#ifdef FN_ChangeLevel
-void FN_ChangeLevel(char *s1, char *s2);
+void FN_ChangeLevel(const char *s1, const char *s2);
#endif // FN_ChangeLevel
#ifdef FN_GetSpawnParms
void FN_GetSpawnParms(edict_t *ent);
#endif // FN_GetSpawnParms
#ifdef FN_SaveSpawnParms
void FN_SaveSpawnParms(edict_t *ent);
@@ -1256,37 +1261,37 @@ void FN_RunPlayerMove(edict_t *fakeclien
int FN_NumberOfEntities(void);
#endif // FN_NumberOfEntities
#ifdef FN_GetInfoKeyBuffer
char *FN_GetInfoKeyBuffer(edict_t *e);
#endif // FN_GetInfoKeyBuffer
#ifdef FN_InfoKeyValue
-char *FN_InfoKeyValue(char *infobuffer, char *key);
+char *FN_InfoKeyValue(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue
#ifdef FN_SetKeyValue
-void FN_SetKeyValue(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue
#ifdef FN_SetClientKeyValue
-void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue
#ifdef FN_IsMapValid
-int FN_IsMapValid(char *filename);
+int FN_IsMapValid(const char *filename);
#endif // FN_IsMapValid
#ifdef FN_StaticDecal
void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal
#ifdef FN_PrecacheGeneric
-int FN_PrecacheGeneric(char *s);
+int FN_PrecacheGeneric(const char *s);
#endif // FN_PrecacheGeneric
#ifdef FN_GetPlayerUserId
int FN_GetPlayerUserId(edict_t *e );
#endif // FN_GetPlayerUserId
#ifdef FN_BuildSoundMsg
void FN_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -1409,21 +1414,21 @@ const char *FN_GetPlayerAuthId(edict_t *
#endif // FN_GetPlayerAuthId
#ifdef FN_PrecacheModel_Post
-int FN_PrecacheModel_Post(char *s);
+int FN_PrecacheModel_Post(const char *s);
#endif // FN_PrecacheModel_Post
#ifdef FN_PrecacheSound_Post
-int FN_PrecacheSound_Post(char *s);
+int FN_PrecacheSound_Post(const char *s);
#endif // FN_PrecacheSound_Post
#ifdef FN_SetModel_Post
void FN_SetModel_Post(edict_t *e, const char *m);
#endif // FN_SetModel_Post
#ifdef FN_ModelIndex_Post
int FN_ModelIndex_Post(const char *m);
@@ -1433,17 +1438,17 @@ int FN_ModelIndex_Post(const char *m);
int FN_ModelFrames_Post(int modelIndex);
#endif // FN_ModelFrames_Post
#ifdef FN_SetSize_Post
void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize_Post
#ifdef FN_ChangeLevel_Post
-void FN_ChangeLevel_Post(char *s1, char *s2);
+void FN_ChangeLevel_Post(const char *s1, const char *s2);
#endif // FN_ChangeLevel_Post
#ifdef FN_GetSpawnParms_Post
void FN_GetSpawnParms_Post(edict_t *ent);
#endif // FN_GetSpawnParms_Post
#ifdef FN_SaveSpawnParms_Post
void FN_SaveSpawnParms_Post(edict_t *ent);
@@ -1837,37 +1842,37 @@ void FN_RunPlayerMove_Post(edict_t *fake
int FN_NumberOfEntities_Post(void);
#endif // FN_NumberOfEntities_Post
#ifdef FN_GetInfoKeyBuffer_Post
char *FN_GetInfoKeyBuffer_Post(edict_t *e);
#endif // FN_GetInfoKeyBuffer_Post
#ifdef FN_InfoKeyValue_Post
-char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
+char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue_Post
#ifdef FN_SetKeyValue_Post
-void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue_Post
#ifdef FN_SetClientKeyValue_Post
-void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue_Post
#ifdef FN_IsMapValid_Post
-int FN_IsMapValid_Post(char *filename);
+int FN_IsMapValid_Post(const char *filename);
#endif // FN_IsMapValid_Post
#ifdef FN_StaticDecal_Post
void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal_Post
#ifdef FN_PrecacheGeneric_Post
-int FN_PrecacheGeneric_Post(char *s);
+int FN_PrecacheGeneric_Post(const char *s);
#endif // FN_PrecacheGeneric_Post
#ifdef FN_GetPlayerUserId_Post
int FN_GetPlayerUserId_Post(edict_t *e );
#endif // FN_GetPlayerUserId_Post
#ifdef FN_BuildSoundMsg_Post
void FN_BuildSoundMsg_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -2111,17 +2116,17 @@ enum LibType
typedef void (*AUTHORIZEFUNC)(int player, const char *authstring);
typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
-typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
+typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
typedef const char * (*PFN_GET_MODNAME) (void);
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/);
typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */);
typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/);
typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr);
@@ -2170,18 +2175,18 @@ typedef void * (*PFN_ALLOCATOR) (co
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ );
typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const void* /*addr*/ );
#endif
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
-typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
-typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
diff --git a/amxmodx/sh_list.h b/amxmodx/sh_list.h
--- a/amxmodx/sh_list.h
+++ b/amxmodx/sh_list.h
@@ -14,17 +14,17 @@
// MSVC8 fix for offsetof macro redefition warnings
#ifdef _MSC_VER
#if _MSC_VER >= 1400
#undef offsetof
#endif
#endif
#include <new>
-#include <malloc.h>
+#include <stdlib.h>
//namespace SourceHook
//{
//This class is from CSDM for AMX Mod X
/*
A circular, doubly-linked list with one sentinel node
Empty:
diff --git a/amxmodx/sh_tinyhash.h b/amxmodx/sh_tinyhash.h
--- a/amxmodx/sh_tinyhash.h
+++ b/amxmodx/sh_tinyhash.h
@@ -49,22 +49,22 @@
val = other.val;
}
K key;
V val;
};
typedef List<THashNode *> * NodePtr;
public:
class const_iterator;
- THash() : m_Buckets(NULL), m_numBuckets(0), m_percentUsed(0.0f), m_items(0)
+ THash() : m_Buckets(NULL), m_numBuckets(0), m_percentUsed(0.0f)
{
_Refactor();
}
THash(const THash &other) : m_Buckets(new NodePtr[other.m_numBuckets]),
- m_numBuckets(other.m_numBuckets), m_percentUsed(other.m_percentUsed), m_items(0)
+ m_numBuckets(other.m_numBuckets), m_percentUsed(other.m_percentUsed)
{
for (size_t i=0; i<m_numBuckets; i++)
m_Buckets[i] = NULL;
for (const_iterator iter = other.begin(); iter != other.end(); ++iter)
_FindOrInsert(iter->key)->val = iter->val;
}
void operator=(const THash &other)
{
@@ -77,20 +77,16 @@
{
_Clear();
}
void clear()
{
_Clear();
_Refactor();
}
- size_t size()
- {
- return m_items;
- }
size_t GetBuckets()
{
return m_numBuckets;
}
float PercentUsed()
{
return m_percentUsed;
}
@@ -117,17 +113,16 @@
delete m_Buckets[i];
m_Buckets[i] = NULL;
}
}
if (m_Buckets)
delete [] m_Buckets;
m_Buckets = NULL;
m_numBuckets = 0;
- m_items = 0;
}
public:
template <typename U>
V & AltFindOrInsert(const U & ukey)
{
size_t place = HashAlt(ukey) % m_numBuckets;
THashNode *pNode = NULL;
if (!m_Buckets[place])
@@ -224,18 +219,16 @@
}
}
//reassign bucket table
delete [] m_Buckets;
m_Buckets = temp;
}
}
public:
- friend class iterator;
- friend class const_iterator;
class iterator
{
friend class THash;
public:
iterator() : curbucket(-1), hash(NULL), end(true)
{
};
iterator(THash *h) : curbucket(-1), hash(h), end(false)
@@ -299,18 +292,16 @@
// Remove this element and move to the next one
iterator tmp = *this;
++tmp;
delete (*iter);
hash->m_Buckets[curbucket]->erase(iter);
*this = tmp;
// :TODO: Maybe refactor to a lower size if required
-
- m_items--;
}
private:
void _Inc()
{
if (end || !hash || curbucket >= static_cast<int>(hash->m_numBuckets))
return;
if (curbucket < 0)
{
@@ -449,16 +440,18 @@
}
}
private:
int curbucket;
typename List<THashNode *>::iterator iter;
const THash *hash;
bool end;
};
+ friend class iterator;
+ friend class const_iterator;
public:
iterator begin()
{
return iterator(this);
}
iterator end()
{
iterator iter;
diff --git a/amxmodx/sm_trie_tpl.h b/amxmodx/sm_trie_tpl.h
--- a/amxmodx/sm_trie_tpl.h
+++ b/amxmodx/sm_trie_tpl.h
@@ -29,17 +29,17 @@
* Version: $Id$
*/
#ifndef _INCLUDE_SOURCEMOD_TEMPLATED_TRIE_H_
#define _INCLUDE_SOURCEMOD_TEMPLATED_TRIE_H_
#include <new>
#include <string.h>
-#include <malloc.h>
+#include <stdlib.h>
#include <assert.h>
enum NodeType
{
Node_Unused = 0, /* Node is not being used (sparse) */
Node_Arc, /* Node is part of an arc and does not terminate */
Node_Term, /* Node is a terminator */
};
diff --git a/amxmodx/strptime.cpp b/amxmodx/strptime.cpp
--- a/amxmodx/strptime.cpp
+++ b/amxmodx/strptime.cpp
@@ -5,17 +5,17 @@
Localized strptime().
*-----------------------------------------------------------------------*/
//#include "config.h"
#include <time.h>
#include <ctype.h>
#include <string.h>
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
#define strnicmp strncasecmp
#endif
#if _MSC_VER
#if _MSC_VER >= 1400
// MSVC8 - Replace POSIX stricmp with ISO C++ conformant one as it is deprecated
#define stricmp _stricmp
@@ -331,18 +331,20 @@ char *strptime(const char *buf, const ch
ti.qZ = /* 0 = STD, 1 = DST */
ti.qU = /* week in year (0...53) */
ti.qV = -1; /* week in year mode: 0=U, 1=W, 2=V */
if (0 > time_int(&ti, (const unsigned char **)&buf, fmt, addthem)) buf = NULL;
if (0 <= ti.qS) (*defoper) ( &tm->tm_sec , ti.qS );
if (0 <= ti.qM) (*defoper) ( &tm->tm_min , ti.qM ); //tm->tm_min = ti.qM;
if (0 <= ti.qI)
+ {
if (0 <= ti.qp) ti.qH = ti.qI % 12 + ti.qp * 12;
- else (*defoper) ( &tm->tm_hour , ti.qI ); //tm->tm_hour = ti.qI;
+ else (*defoper) ( &tm->tm_hour , ti.qI ); //tm->tm_hour = ti.qI;
+ }
if (0 <= ti.qH) (*defoper) ( &tm->tm_hour , ti.qH ); //tm->tm_hour = ti.qH;
if (0 <= ti.qZ) (*defoper) ( &tm->tm_isdst , ti.qZ - 1 ); //tm->tm_isdst = ti.qZ - 1;
if (0 <= ti.qy) ti.qY = ti.qy;
if (0 <= ti.qY) (*defoper) ( &tm->tm_year ,
ti.qY +=
(ti.qY > 99? -1900:
(ti.qY < 70? 100: 0)) );
/*tm->tm_year = ti.qY +=
diff --git a/amxmodx/util.cpp b/amxmodx/util.cpp
--- a/amxmodx/util.cpp
+++ b/amxmodx/util.cpp
@@ -27,17 +27,17 @@
* to your version of the file, but you are not obligated to do so. If
* you do not wish to do so, delete this exception statement from your
* version.
*/
#include <time.h>
#include "amxmodx.h"
-#if defined __linux__ && !defined _vsnprintf
+#if ( defined(__linux__) || defined(__APPLE__) ) && !defined _vsnprintf
#define _vsnprintf vsnprintf
#endif
char *UTIL_VarArgs(const char *fmt, ...)
{
va_list ap;
static char string[4096];
@@ -152,38 +152,38 @@ void UTIL_IntToString(int value, char *o
*output = 0;
if (value < 0) value = -value;
int tho = value / 1000;
int aaa = 0;
if (tho)
{
- aaa += sprintf(&output[aaa], words[tho]);
- aaa += sprintf(&output[aaa], words[29]);
+ aaa += sprintf(&output[aaa], "%s", words[tho]);
+ aaa += sprintf(&output[aaa], "%s", words[29]);
value = value % 1000;
}
int hun = value / 100;
if (hun)
{
- aaa += sprintf(&output[aaa], words[hun]);
- aaa += sprintf(&output[aaa], words[28]);
+ aaa += sprintf(&output[aaa], "%s", words[hun]);
+ aaa += sprintf(&output[aaa], "%s", words[28]);
value = value % 100;
}
int ten = value / 10;
int unit = value % 10;
if (ten)
- aaa += sprintf(&output[aaa], words[(ten > 1) ? (ten + 18) : (unit + 10)]);
+ aaa += sprintf(&output[aaa], "%s", words[(ten > 1) ? (ten + 18) : (unit + 10)]);
if (ten != 1 && (unit || (!value && !hun && !tho)))
- sprintf(&output[aaa], words[unit]);
+ sprintf(&output[aaa], "%s", words[unit]);
}
char* UTIL_SplitHudMessage(const char *src)
{
static char message[512];
short b = 0, d = 0, e = 0, c = -1;
while (src[d] && e < 480)
@@ -237,17 +237,17 @@ short FixedSigned16(float value, float s
if (output > 32767)
output = 32767;
else if (output < -32768)
output = -32768;
return (short)output;
}
-void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, char *pMessage)
+void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, const char *pMessage)
{
if (pEntity)
MESSAGE_BEGIN(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, NULL, pEntity);
else
MESSAGE_BEGIN(MSG_BROADCAST, SVC_TEMPENTITY);
WRITE_BYTE(29);
WRITE_BYTE(textparms.channel & 0xFF);
diff --git a/compiler/amxxpc/Makefile b/compiler/amxxpc/Makefile
--- a/compiler/amxxpc/Makefile
+++ b/compiler/amxxpc/Makefile
@@ -1,46 +1,107 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
+#####################################
### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
-OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-BINARY = amxxpc
-
+PROJECT = amxxpc
OBJECTS = amx.cpp amxxpc.cpp Binary.cpp
-LINK = -lz /lib32/libstdc++.a
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
-INCLUDE = -I. -L.
+C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
+
+LINK =
+
+INCLUDE = -I.
+
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
+
+OS := $(shell uname -s)
+
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_SUFFIX = _osx
+ CFLAGS += -DOSX
+ LINK += -lstdc++ -mmacosx-version-min=10.5 -lz-darwin
+else
+ LIB_SUFFIX =
+ CFLAGS += -DLINUX
+ LINK += -lz /lib32/libstdc++.a
+endif
+
+LINK += -m32 -lm -ldl -L.
+
+CFLAGS += -DAMX_ANSIONLY -DHAVE_STDINT_H -fno-strict-aliasing \
+ -m32 -Wall -Werror
+CPPFLAGS += -fexceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX)
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS = $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
BIN_DIR = Release
- CFLAGS = $(OPT_FLAGS)
+ CFLAGS += $(C_OPT_FLAGS)
endif
-CFLAGS += -DLINUX -DNDEBUG -Wno-deprecated -fexceptions -DHAVE_STDINT_H -DAMX_ANSIONLY -fno-rtti -static-libgcc
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
+else
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
+endif
+
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CFLAGS) -m32 -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
all:
mkdir -p $(BIN_DIR)
- $(MAKE) amxxpc
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-amxxpc: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) -m32 $(OBJ_LINUX) $(LINK) -ldl -lm -o$(BIN_DIR)/$(BINARY)
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
default: all
clean:
- rm -rf Release/*.o
- rm -rf Release/$(BINARY)
- rm -rf Debug/*.o
- rm -rf Debug/$(BINARY)
+ rm -rf $(BIN_DIR)/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
diff --git a/compiler/amxxpc/amx.cpp b/compiler/amxxpc/amx.cpp
--- a/compiler/amxxpc/amx.cpp
+++ b/compiler/amxxpc/amx.cpp
@@ -37,17 +37,17 @@
#endif
#include <assert.h>
#include <limits.h>
#include <stdarg.h>
#include <stddef.h> /* for wchar_t */
#include <string.h>
#include "osdefs.h"
-#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
#include <sclinux.h>
#if !defined AMX_NODYNALOAD
#include <dlfcn.h>
#endif
#if defined JIT
#include <sys/types.h>
#include <sys/mman.h>
#endif
@@ -810,22 +810,22 @@ static void expand(unsigned char *code,
/* when all bytes have been expanded, the complete memory block should be done */
assert(memsize==0);
}
#endif /* defined AMX_INIT */
int AMXAPI amx_Init(AMX *amx,void *program)
{
AMX_HEADER *hdr;
- #if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD
+ #if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD
char libname[sNAMEMAX+8]; /* +1 for '\0', +3 for 'amx' prefix, +4 for extension */
#if defined _Windows
typedef int (FAR WINAPI *AMX_ENTRY)(AMX _FAR *amx);
HINSTANCE hlib;
- #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+ #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
typedef int (*AMX_ENTRY)(AMX *amx);
void *hlib;
#endif
int numlibraries,i;
AMX_FUNCSTUB *lib;
AMX_ENTRY libinit;
#endif
@@ -960,47 +960,47 @@ int AMXAPI amx_Init(AMX *amx,void *progr
} /* for */
} /* local */
#endif
/* relocate call and jump instructions */
amx_BrowseRelocate(amx);
/* load any extension modules that the AMX refers to */
- #if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD
+ #if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD
hdr=(AMX_HEADER *)amx->base;
numlibraries=NUMENTRIES(hdr,libraries,pubvars);
for (i=0; i<numlibraries; i++) {
lib=GETENTRY(hdr,libraries,i);
strcpy(libname,"amx");
strcat(libname,GETENTRYNAME(hdr,lib));
#if defined _Windows
strcat(libname,".dll");
#if defined __WIN32__
hlib=LoadLibraryA(libname);
#else
hlib=LoadLibrary(libname);
if (hlib<=HINSTANCE_ERROR)
hlib=NULL;
#endif
- #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+ #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
strcat(libname,".so");
hlib=dlopen(libname,RTLD_NOW);
#endif
if (hlib!=NULL) {
/* a library that cannot be loaded or that does not have the required
* initialization function is simply ignored
*/
char funcname[sNAMEMAX+9]; /* +1 for '\0', +4 for 'amx_', +4 for 'Init' */
strcpy(funcname,"amx_");
strcat(funcname,GETENTRYNAME(hdr,lib));
strcat(funcname,"Init");
#if defined _Windows
libinit=(AMX_ENTRY)GetProcAddress(hlib,funcname);
- #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+ #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
libinit=(AMX_ENTRY)dlsym(hlib,funcname);
#endif
if (libinit!=NULL)
libinit(amx);
} /* if */
lib->address=(ucell)hlib;
} /* for */
#endif
@@ -1024,17 +1024,17 @@ int AMXAPI amx_Init(AMX *amx,void *progr
DWORD prev, p = 0;
if ((prot & PROT_WRITE)!=0)
p = PAGE_EXECUTE_READWRITE;
else
p |= PAGE_EXECUTE_READ;
return !VirtualProtect(addr, len, p, &prev);
}
- #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+ #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
/* Linux already has mprotect() */
#else
// TODO: Add cases for Linux, Unix, OS/2, ...
/* DOS32 has no imposed limits on its segments */
@@ -1099,50 +1099,50 @@ int AMXAPI amx_InitJIT(AMX *amx,void *co
#endif /* #if defined JIT */
#endif /* AMX_INIT */
#if defined AMX_CLEANUP
int AMXAPI amx_Cleanup(AMX *amx)
{
- #if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD
+ #if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD
#if defined _Windows
typedef int (FAR WINAPI *AMX_ENTRY)(AMX FAR *amx);
- #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+ #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
typedef int (*AMX_ENTRY)(AMX *amx);
#endif
AMX_HEADER *hdr;
int numlibraries,i;
AMX_FUNCSTUB *lib;
AMX_ENTRY libcleanup;
#endif
/* unload all extension modules */
- #if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD
+ #if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD
hdr=(AMX_HEADER *)amx->base;
assert(hdr->magic==AMX_MAGIC);
numlibraries=NUMENTRIES(hdr,libraries,pubvars);
for (i=0; i<numlibraries; i++) {
lib=GETENTRY(hdr,libraries,i);
if (lib->address!=0) {
char funcname[sNAMEMAX+12]; /* +1 for '\0', +4 for 'amx_', +7 for 'Cleanup' */
strcpy(funcname,"amx_");
strcat(funcname,GETENTRYNAME(hdr,lib));
strcat(funcname,"Cleanup");
#if defined _Windows
libcleanup=(AMX_ENTRY)GetProcAddress((HINSTANCE)lib->address,funcname);
- #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+ #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
libcleanup=(AMX_ENTRY)dlsym((void*)lib->address,funcname);
#endif
if (libcleanup!=NULL)
libcleanup(amx);
#if defined _Windows
FreeLibrary((HINSTANCE)lib->address);
- #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+ #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
dlclose((void*)lib->address);
#endif
} /* if */
} /* for */
#else
(void)amx;
#endif
return AMX_ERR_NONE;
@@ -1661,17 +1661,17 @@ int AMXAPI amx_PushString(AMX *amx, cell
#define CHKSTACK() if (stk>amx->stp) return AMX_ERR_STACKLOW
#define CHKHEAP() if (hea<amx->hlw) return AMX_ERR_HEAPLOW
#if defined __GNUC__ && !(defined ASM32 || defined JIT)
/* GNU C version uses the "labels as values" extension to create
* fast "indirect threaded" interpreter.
*/
-#define NEXT(cip) goto **cip++
+#define NEXT(cip) goto *(const void *)*cip++
int AMXAPI amx_Exec(AMX *amx, cell *retval, int index)
{
static const void * const amx_opcodelist[] = {
&&op_none, &&op_load_pri, &&op_load_alt, &&op_load_s_pri,
&&op_load_s_alt,&&op_lref_pri, &&op_lref_alt, &&op_lref_s_pri,
&&op_lref_s_alt,&&op_load_i, &&op_lodb_i, &&op_const_pri,
&&op_const_alt, &&op_addr_pri, &&op_addr_alt, &&op_stor_pri,
@@ -1841,24 +1841,24 @@ static const void * const amx_opcodelist
NEXT(cip);
op_lref_s_alt:
GETPARAM(offs);
offs= * (cell *)(data+(int)frm+(int)offs);
alt= * (cell *)(data+(int)offs);
NEXT(cip);
op_load_i:
/* verify address */
- if (pri>=hea && pri<stk || (ucell)pri>=(ucell)amx->stp)
+ if ((pri>=hea && pri<stk) || (ucell)pri>=(ucell)amx->stp)
ABORT(amx,AMX_ERR_MEMACCESS);
pri= * (cell *)(data+(int)pri);
NEXT(cip);
op_lodb_i:
GETPARAM(offs);
/* verify address */
- if (pri>=hea && pri<stk || (ucell)pri>=(ucell)amx->stp)
+ if ((pri>=hea && pri<stk) || (ucell)pri>=(ucell)amx->stp)
ABORT(amx,AMX_ERR_MEMACCESS);
switch (offs) {
case 1:
pri= * (data+(int)pri);
break;
case 2:
pri= * (uint16_t *)(data+(int)pri);
break;
@@ -1914,49 +1914,49 @@ static const void * const amx_opcodelist
NEXT(cip);
op_sref_s_alt:
GETPARAM(offs);
offs= * (cell *)(data+(int)frm+(int)offs);
*(cell *)(data+(int)offs)=alt;
NEXT(cip);
op_stor_i:
/* verify address */
- if (alt>=hea && alt<stk || (ucell)alt>=(ucell)amx->stp)
+ if ((alt>=hea && alt<stk) || (ucell)alt>=(ucell)amx->stp)
ABORT(amx,AMX_ERR_MEMACCESS);
*(cell *)(data+(int)alt)=pri;
NEXT(cip);
op_strb_i:
GETPARAM(offs);
/* verify address */
- if (alt>=hea && alt<stk || (ucell)alt>=(ucell)amx->stp)
+ if ((alt>=hea && alt<stk) || (ucell)alt>=(ucell)amx->stp)
ABORT(amx,AMX_ERR_MEMACCESS);
switch (offs) {
case 1:
*(data+(int)alt)=(unsigned char)pri;
break;
case 2:
*(uint16_t *)(data+(int)alt)=(uint16_t)pri;
break;
case 4:
*(uint32_t *)(data+(int)alt)=(uint32_t)pri;
break;
} /* switch */
NEXT(cip);
op_lidx:
offs=pri*sizeof(cell)+alt;
/* verify address */
- if (offs>=hea && offs<stk || (ucell)offs>=(ucell)amx->stp)
+ if ((offs>=hea && offs<stk) || (ucell)offs>=(ucell)amx->stp)
ABORT(amx,AMX_ERR_MEMACCESS);
pri= * (cell *)(data+(int)offs);
NEXT(cip);
op_lidx_b:
GETPARAM(offs);
offs=(pri << (int)offs)+alt;
/* verify address */
- if (offs>=hea && offs<stk || (ucell)offs>=(ucell)amx->stp)
+ if ((offs>=hea && offs<stk) || (ucell)offs>=(ucell)amx->stp)
ABORT(amx,AMX_ERR_MEMACCESS);
pri= * (cell *)(data+(int)offs);
NEXT(cip);
op_idxaddr:
pri=pri*sizeof(cell)+alt;
NEXT(cip);
op_idxaddr_b:
GETPARAM(offs);
@@ -2383,47 +2383,47 @@ static const void * const amx_opcodelist
op_dec_i:
*(cell *)(data+(int)pri) -= 1;
NEXT(cip);
op_movs:
GETPARAM(offs);
/* verify top & bottom memory addresses, for both source and destination
* addresses
*/
- if (pri>=hea && pri<stk || (ucell)pri>=(ucell)amx->stp)
+ if ((pri>=hea && pri<stk) || (ucell)pri>=(ucell)amx->stp)
ABORT(amx,AMX_ERR_MEMACCESS);
- if ((pri+offs)>hea && (pri+offs)<stk || (ucell)(pri+offs)>(ucell)amx->stp)
+ if (((pri+offs)>hea && (pri+offs)<stk) || (ucell)(pri+offs)>(ucell)amx->stp)
ABORT(amx,AMX_ERR_MEMACCESS);
- if (alt>=hea && alt<stk || (ucell)alt>=(ucell)amx->stp)
+ if ((alt>=hea && alt<stk) || (ucell)alt>=(ucell)amx->stp)
ABORT(amx,AMX_ERR_MEMACCESS);
- if ((alt+offs)>hea && (alt+offs)<stk || (ucell)(alt+offs)>(ucell)amx->stp)
+ if (((alt+offs)>hea && (alt+offs)<stk) || (ucell)(alt+offs)>(ucell)amx->stp)
ABORT(amx,AMX_ERR_MEMACCESS);
memcpy(data+(int)alt, data+(int)pri, (int)offs);
NEXT(cip);
op_cmps:
GETPARAM(offs);
/* verify top & bottom memory addresses, for both source and destination
* addresses
*/
- if (pri>=hea && pri<stk || (ucell)pri>=(ucell)amx->stp)
+ if ((pri>=hea && pri<stk) || (ucell)pri>=(ucell)amx->stp)
ABORT(amx,AMX_ERR_MEMACCESS);
- if ((pri+offs)>hea && (pri+offs)<stk || (ucell)(pri+offs)>(ucell)amx->stp)
+ if (((pri+offs)>hea && (pri+offs)<stk) || (ucell)(pri+offs)>(ucell)amx->stp)
ABORT(amx,AMX_ERR_MEMACCESS);
- if (alt>=hea && alt<stk || (ucell)alt>=(ucell)amx->stp)
+ if ((alt>=hea && alt<stk) || (ucell)alt>=(ucell)amx->stp)
ABORT(amx,AMX_ERR_MEMACCESS);
- if ((alt+offs)>hea && (alt+offs)<stk || (ucell)(alt+offs)>(ucell)amx->stp)
+ if (((alt+offs)>hea && (alt+offs)<stk) || (ucell)(alt+offs)>(ucell)amx->stp)
ABORT(amx,AMX_ERR_MEMACCESS);
pri=memcmp(data+(int)alt, data+(int)pri, (int)offs);
NEXT(cip);
op_fill:
GETPARAM(offs);
/* verify top & bottom memory addresses */
- if (alt>=hea && alt<stk || (ucell)alt>=(ucell)amx->stp)
+ if ((alt>=hea && alt<stk) || (ucell)alt>=(ucell)amx->stp)
ABORT(amx,AMX_ERR_MEMACCESS);
- if ((alt+offs)>hea && (alt+offs)<stk || (ucell)(alt+offs)>(ucell)amx->stp)
+ if (((alt+offs)>hea && (alt+offs)<stk) || (ucell)(alt+offs)>(ucell)amx->stp)
ABORT(amx,AMX_ERR_MEMACCESS);
for (i=(int)alt; offs>=(int)sizeof(cell); i+=sizeof(cell), offs-=sizeof(cell))
*(cell *)(data+i) = pri;
NEXT(cip);
op_halt:
GETPARAM(offs);
if (retval!=NULL)
*retval=pri;
@@ -3587,17 +3587,17 @@ int AMXAPI amx_GetAddr(AMX *amx,cell amx
assert(amx!=NULL);
hdr=(AMX_HEADER *)amx->base;
assert(hdr!=NULL);
assert(hdr->magic==AMX_MAGIC);
data=(amx->data!=NULL) ? amx->data : amx->base+(int)hdr->dat;
assert(phys_addr!=NULL);
- if (amx_addr>=amx->hea && amx_addr<amx->stk || amx_addr<0 || amx_addr>=amx->stp) {
+ if ((amx_addr>=amx->hea && amx_addr<amx->stk) || amx_addr<0 || amx_addr>=amx->stp) {
*phys_addr=NULL;
return AMX_ERR_MEMACCESS;
} /* if */
*phys_addr=(cell *)(data + (int)amx_addr);
return AMX_ERR_NONE;
}
#endif /* AMX_GETADDR */
diff --git a/compiler/amxxpc/amx.h b/compiler/amxxpc/amx.h
--- a/compiler/amxxpc/amx.h
+++ b/compiler/amxxpc/amx.h
@@ -19,27 +19,27 @@
* 3. This notice may not be removed or altered from any source distribution.
*
* Version: $Id: amx.h 3736 2008-08-16 20:13:12Z damagedsoul $
*/
#if defined FREEBSD && !defined __FreeBSD__
#define __FreeBSD__
#endif
-#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
#include <sclinux.h>
#endif
#ifndef AMX_H_INCLUDED
#define AMX_H_INCLUDED
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -183,17 +183,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -411,17 +411,17 @@ int AMXAPI amx_UTF8Put(char *string, cha
#else
#error Unsupported cell size
#endif
#define amx_RegisterFunc(amx, name, func) \
amx_Register((amx), amx_NativeInfo((name),(func)), 1);
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack() /* reset default packing */
#elif defined MACOS && defined __MWERKS__
#pragma options align=reset
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
diff --git a/compiler/amxxpc/amxdbg.h b/compiler/amxxpc/amxdbg.h
--- a/compiler/amxxpc/amxdbg.h
+++ b/compiler/amxxpc/amxdbg.h
@@ -44,17 +44,17 @@ extern "C" {
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -151,17 +151,17 @@ int AMXAPI dbg_GetLineAddress(AMX_DBG *a
int AMXAPI dbg_GetAutomatonName(AMX_DBG *amxdbg, int automaton, const char **name);
int AMXAPI dbg_GetStateName(AMX_DBG *amxdbg, int state, const char **name);
int AMXAPI dbg_GetTagName(AMX_DBG *amxdbg, int tag, const char **name);
int AMXAPI dbg_GetVariable(AMX_DBG *amxdbg, const char *symname, ucell scopeaddr, const AMX_DBG_SYMBOL **sym);
int AMXAPI dbg_GetArrayDim(AMX_DBG *amxdbg, const AMX_DBG_SYMBOL *sym, const AMX_DBG_SYMDIM **symdim);
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack() /* reset default packing */
#elif defined MACOS && defined __MWERKS__
#pragma options align=reset
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
diff --git a/compiler/amxxpc/amxxpc.cpp b/compiler/amxxpc/amxxpc.cpp
--- a/compiler/amxxpc/amxxpc.cpp
+++ b/compiler/amxxpc/amxxpc.cpp
@@ -1,10 +1,10 @@
#include <stdio.h>
-#ifdef __linux__
+#if defined(__linux__) | defined (__APPLE__)
#include <unistd.h>
#else
#include <fcntl.h>
#include <io.h>
#endif
#include <stdlib.h>
#include "zlib.h"
#include "amx.h"
@@ -24,57 +24,58 @@ static PRINTF pc_printf = NULL;
void ReadFileIntoPl(abl *pl, FILE *fp);
bool CompressPl(abl *pl);
void Pl2Bh(abl *pl, BinPlugin *bh);
void WriteBh(BinaryWriter *bw, BinPlugin *bh);
int main(int argc, char **argv)
{
struct abl pl32;
- struct abl pl64;
#ifdef _DEBUG
printf("debug clamp\n");
getchar();
#endif
-#ifdef __linux__
+#if defined(__linux__)
HINSTANCE lib = NULL;
if (FileExists("./amxxpc32.so"))
lib = dlmount("./amxxpc32.so");
else
lib = dlmount("amxxpc32.so");
+#elif defined(__APPLE__)
+ HINSTANCE lib = dlmount("amxxpc32.dylib");
#else
HINSTANCE lib = dlmount("amxxpc32.dll");
#endif
if (!lib)
{
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
printf("compiler failed to instantiate: %s\n", dlerror());
#else
printf("compiler failed to instantiate: %d\n", GetLastError());
#endif
exit(0);
}
COMPILER sc32 = (COMPILER)dlsym(lib, "Compile32");
pc_printf = (PRINTF)dlsym(lib, "pc_printf");
if (!sc32 || !pc_printf)
{
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
printf("compiler failed to link: %p.\n",sc32);
#else
printf("compiler failed to link: %d.\n", GetLastError());
#endif
exit(0);
}
pc_printf("Welcome to the AMX Mod X %s Compiler.\n", VERSION_STRING);
- pc_printf("Copyright (c) 1997-2006 ITB CompuPhase, AMX Mod X Team\n\n");
+ pc_printf("Copyright (c) 1997-2013 ITB CompuPhase, AMX Mod X Team\n\n");
if (argc < 2)
{
pc_printf("Usage: <file.sma> [options]\n");
pc_printf("Use -? or --help to see full options\n\n");
getchar();
exit(0);
}
@@ -238,17 +239,17 @@ void ReadFileIntoPl(abl *pl, FILE *fp)
//we get the full name of the file here
//our job is to a] switch the .sma extension to .amx
// and to b] strip everything but the trailing name
char *swiext(const char *file, const char *ext, int isO)
{
int i = 0, pos = -1, j = 0;
int fileLen = strlen(file);
int extLen = strlen(ext);
- int max = 0, odirFlag = -1;
+ int odirFlag = -1;
for (i=fileLen-1; i>=0; i--)
{
if (file[i] == '.' && pos == -1)
{
pos = i+1;
}
if ((file[i] == '/' || file[i] == '\\') && !isO)
@@ -334,17 +335,17 @@ void show_help()
printf("\t-H<hwnd> window handle to send a notification message on finish\n");
printf("\t-i<name> path for include files\n");
printf("\t-l create list file (preprocess only)\n");
printf("\t-o<name> set base name of output file\n");
printf("\t-p<name> set name of \"prefix\" file\n");
printf("\t-r[name] write cross reference report to console or to specified file\n");
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
bool FileExists(const char *file)
{
FILE *fp = fopen(file, "rb");
if (!fp)
return false;
fclose(fp);
return true;
}
diff --git a/compiler/amxxpc/amxxpc.h b/compiler/amxxpc/amxxpc.h
--- a/compiler/amxxpc/amxxpc.h
+++ b/compiler/amxxpc/amxxpc.h
@@ -1,24 +1,24 @@
#ifndef _AMXXSC_INCLUDE_H
#define _AMXXSC_INCLUDE_H
#define VERSION_STRING "1.8.1-300"
#define MAGIC_HEADER2 0x414D5858
#define MAGIC_VERSION 0x0300
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
# include <dlfcn.h>
#else
# include <windows.h>
#endif
#include <string.h>
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
# define dlmount(x) dlopen(x, RTLD_NOW|RTLD_GLOBAL)
typedef void* HINSTANCE;
#else
# define dlsym(x, s) GetProcAddress(x, s)
# define dlmount(x) LoadLibrary(x)
# define dlclose(x) FreeLibrary(x)
#endif
@@ -60,13 +60,13 @@ struct BinPlugin
{
int8_t cellsize; //cell size
int32_t imagesize; //uncompressed image size
int32_t disksize; //compressed image size
int32_t memsize; //memory image size
int32_t offs; //file offset
};
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
bool FileExists(const char *file);
#endif
#endif //_AMXXSC_INCLUDE_H
diff --git a/compiler/amxxpc/libz-darwin.a b/compiler/amxxpc/libz-darwin.a
new file mode 100644
index 0000000000000000000000000000000000000000..03964e8e745100720d199fbdcfabe399f3aafdaa
GIT binary patch
literal 87176
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
diff --git a/compiler/amxxpc/osdefs.h b/compiler/amxxpc/osdefs.h
--- a/compiler/amxxpc/osdefs.h
+++ b/compiler/amxxpc/osdefs.h
@@ -34,16 +34,20 @@
# define __32BIT__ 1
# endif
#endif
#if defined __linux__
#include <endian.h>
#endif
+#if defined __APPLE__
+ #include <sys/types.h>
+#endif
+
/* Linux NOW has these */
#if !defined BIG_ENDIAN
#define BIG_ENDIAN 4321
#endif
#if !defined LITTLE_ENDIAN
#define LITTLE_ENDIAN 1234
#endif
diff --git a/compiler/amxxpc/sclinux.h b/compiler/amxxpc/sclinux.h
--- a/compiler/amxxpc/sclinux.h
+++ b/compiler/amxxpc/sclinux.h
@@ -27,16 +27,20 @@
/*
* SC assumes that a computer is Little Endian unless told otherwise. It uses
* (and defines) the macros BYTE_ORDER and BIG_ENDIAN.
* For Linux, we must overrule these settings with those defined in glibc.
*/
#if !defined __BYTE_ORDER
# include <stdlib.h>
+# if defined __APPLE__
+# include <sys/types.h>
+# define __BYTE_ORDER BYTE_ORDER
+# endif
#endif
#if defined __OpenBSD__ || defined __FreeBSD__
# define __BYTE_ORDER BYTE_ORDER
# define __LITTLE_ENDIAN LITTLE_ENDIAN
# define __BIG_ENDIAN BIG_ENDIAN
#endif
diff --git a/compiler/libpc300/Makefile b/compiler/libpc300/Makefile
--- a/compiler/libpc300/Makefile
+++ b/compiler/libpc300/Makefile
@@ -1,46 +1,108 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
+#####################################
### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
-OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -fvisibility=hidden
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-NAME = amxxpc32
+PROJECT = amxxpc32
+OBJECTS = sc1.c sc2.c sc3.c sc4.c sc5.c sc6.c sc7.c scvars.c scmemfil.c scstate.c sclist.c sci18n.c \
+ scexpand.c pawncc.c libpawnc.c prefix.c memfile.c
-OBJECTS = sc1.c sc2.c sc3.c sc4.c sc5.c sc6.c sc7.c scvars.c scmemfil.c \
- scstate.c sclist.c sci18n.c scexpand.c pawncc.c libpawnc.c prefix.c \
- memfile.c
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
+
+C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
LINK = -lpthread
-INCLUDE = -I.
+INCLUDE = -I.
-BINARY = $(NAME).so
-BIN_DIR = Release
-CFLAGS += -DPAWN_CELL_SIZE=32
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
-CFLAGS += -DLINUX -DNDEBUG -DHAVE_STDINT_H -DENABLE_BINRELOC -DNO_MAIN -DPAWNC_DLL -static-libgcc
+OS := $(shell uname -s)
-CFLAGS += $(OPT_FLAGS)
-OBJ_LINUX := $(OBJECTS:%.c=$(BIN_DIR)/%.o)
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -mmacosx-version-min=10.5
+else
+ LIB_EXT = so
+ CFLAGS += -DLINUX
+ LINK += -shared
+endif
+
+LINK += -m32 -lm -ldl
+
+CFLAGS += -DENABLE_BINRELOC -DNO_MAIN -DPAWNC_DLL -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall \
+ -Werror
+CPPFLAGS += -fexceptions -fno-rtti
+
+BINARY = $(PROJECT).$(LIB_EXT)
+
+ifeq "$(DEBUG)" "true"
+ BIN_DIR = Debug
+ CFLAGS += $(C_DEBUG_FLAGS)
+else
+ BIN_DIR = Release
+ CFLAGS += $(C_OPT_FLAGS)
+endif
+
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
+
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
+else
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
+endif
+
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.c=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.c
- $(CPP) $(INCLUDE) $(CFLAGS) -m32 -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
all:
- mkdir -p Release
- $(MAKE) pawn_make
+ mkdir -p $(BIN_DIR)
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-pawn_make: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) -m32 $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
-
-debug:
- $(MAKE) all DEBUG=true
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
default: all
clean:
- rm -rf Release/*.o
- rm -rf Release/$(BINARY)
+ rm -rf $(BIN_DIR)/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
diff --git a/compiler/libpc300/amx.h b/compiler/libpc300/amx.h
--- a/compiler/libpc300/amx.h
+++ b/compiler/libpc300/amx.h
@@ -28,27 +28,27 @@
#define chdir _chdir
#define stricmp _stricmp
#endif
#endif
#if defined FREEBSD && !defined __FreeBSD__
#define __FreeBSD__
#endif
-#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
#include <sclinux.h>
#endif
#ifndef AMX_H_INCLUDED
#define AMX_H_INCLUDED
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -192,17 +192,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -420,17 +420,17 @@ int AMXAPI amx_UTF8Put(char *string, cha
#else
#error Unsupported cell size
#endif
#define amx_RegisterFunc(amx, name, func) \
amx_Register((amx), amx_NativeInfo((name),(func)), 1);
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack() /* reset default packing */
#elif defined MACOS && defined __MWERKS__
#pragma options align=reset
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
diff --git a/compiler/libpc300/amxdbg.h b/compiler/libpc300/amxdbg.h
--- a/compiler/libpc300/amxdbg.h
+++ b/compiler/libpc300/amxdbg.h
@@ -44,17 +44,17 @@ extern "C" {
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -151,17 +151,17 @@ int AMXAPI dbg_GetLineAddress(AMX_DBG *a
int AMXAPI dbg_GetAutomatonName(AMX_DBG *amxdbg, int automaton, const char **name);
int AMXAPI dbg_GetStateName(AMX_DBG *amxdbg, int state, const char **name);
int AMXAPI dbg_GetTagName(AMX_DBG *amxdbg, int tag, const char **name);
int AMXAPI dbg_GetVariable(AMX_DBG *amxdbg, const char *symname, ucell scopeaddr, const AMX_DBG_SYMBOL **sym);
int AMXAPI dbg_GetArrayDim(AMX_DBG *amxdbg, const AMX_DBG_SYMBOL *sym, const AMX_DBG_SYMDIM **symdim);
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack() /* reset default packing */
#elif defined MACOS && defined __MWERKS__
#pragma options align=reset
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
diff --git a/compiler/libpc300/libpawnc.c b/compiler/libpc300/libpawnc.c
--- a/compiler/libpc300/libpawnc.c
+++ b/compiler/libpc300/libpawnc.c
@@ -25,28 +25,25 @@
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sc.h"
#if defined PAWNC_DLL
-#ifndef __linux__
+#if !defined(__linux__) && !defined(__APPLE__)
#include "dllmain.c"
#endif
# define MAX_ARGS 100
# if !defined UNUSED_PARAM
# define UNUSED_PARAM(p) ((void)(p))
# endif
- static char *argv[MAX_ARGS];
- static int argc;
-
#if PAWN_CELL_SIZE==32
#define EXCOMPILER Compile32
#else
#define EXCOMPILER Compile64
#endif
# if defined __WIN32__ || defined _WIN32 || defined WIN32 || defined __NT__
__declspec (dllexport)
diff --git a/compiler/libpc300/memfile.c b/compiler/libpc300/memfile.c
--- a/compiler/libpc300/memfile.c
+++ b/compiler/libpc300/memfile.c
@@ -5,16 +5,17 @@
memfile_t *memfile_creat(const char *name, size_t init)
{
memfile_t mf;
memfile_t *pmf;
mf.size = init;
mf.base = (char *)malloc(init);
mf.usedoffs = 0;
+ mf.name = NULL;
if (!mf.base)
{
return NULL;
}
mf.offs = 0;
mf._static = 0;
diff --git a/compiler/libpc300/memfile.h b/compiler/libpc300/memfile.h
--- a/compiler/libpc300/memfile.h
+++ b/compiler/libpc300/memfile.h
@@ -4,17 +4,17 @@
#ifdef _MSC_VER
// MSVC8 - replace POSIX functions with ISO C++ conformant ones as they are deprecated
#if _MSC_VER >= 1400
#define strdup _strdup
#pragma warning(disable : 4996)
#endif
#endif
-#include <malloc.h>
+#include <stdlib.h>
typedef struct memfile_s
{
char *name;
char *base;
long offs;
long usedoffs;
size_t size;
diff --git a/compiler/libpc300/osdefs.h b/compiler/libpc300/osdefs.h
--- a/compiler/libpc300/osdefs.h
+++ b/compiler/libpc300/osdefs.h
@@ -36,16 +36,20 @@
#endif
#if defined __FreeBSD__
#include <sys/endian.h>
#elif defined LINUX
#include <endian.h>
#endif
+#if defined __APPLE__
+ #include <sys/types.h>
+#endif
+
/* Linux NOW has these */
#if !defined BIG_ENDIAN
#define BIG_ENDIAN 4321
#endif
#if !defined LITTLE_ENDIAN
#define LITTLE_ENDIAN 1234
#endif
diff --git a/compiler/libpc300/sc.h b/compiler/libpc300/sc.h
--- a/compiler/libpc300/sc.h
+++ b/compiler/libpc300/sc.h
@@ -58,17 +58,17 @@
#define sDIMEN_MAX 3 /* maximum number of array dimensions */
#define sLINEMAX 511 /* input line length (in characters) */
#define sCOMP_STACK 32 /* maximum nesting of #if .. #endif sections */
#define sDEF_LITMAX 500 /* initial size of the literal pool, in "cells" */
#define sDEF_AMXSTACK 4096 /* default stack size for AMX files */
#define PREPROC_TERM '\x7f'/* termination character for preprocessor expressions (the "DEL" code) */
#define sDEF_PREFIX "default.inc" /* default prefix filename */
-#if defined WIN32
+#if defined WIN32 || defined __clang__
#define INVISIBLE
#else
#define INVISIBLE __attribute__((visibility("protected")))
#endif
typedef union {
void *pv; /* e.g. a name */
int i;
diff --git a/compiler/libpc300/sc1.c b/compiler/libpc300/sc1.c
--- a/compiler/libpc300/sc1.c
+++ b/compiler/libpc300/sc1.c
@@ -30,19 +30,20 @@
#include <stdlib.h>
#include <string.h>
#if defined __WIN32__ || defined _WIN32 || defined __MSDOS__
#include <conio.h>
#include <io.h>
#endif
-#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
#include <sclinux.h>
#include <prefix.h> /* from BinReloc, see www.autopackage.org */
+ #include <unistd.h>
#endif
#if defined FORTIFY
#include "fortify.h"
#endif
#if defined __BORLANDC__ || defined __WATCOMC__
#include <dos.h>
@@ -416,17 +417,17 @@ int pc_compile(int argc, char *argv[])
int retcode;
char incfname[_MAX_PATH];
char reportname[_MAX_PATH];
char codepage[MAXCODEPAGE+1];
FILE *binf;
void *inpfmark;
int lcl_packstr,lcl_needsemicolon,lcl_tabsize;
#if !defined SC_LIGHT
- int hdrsize;
+ int hdrsize=0;
#endif
/* set global variables to their initial value */
binf=NULL;
initglobals();
errorset(sRESET);
errorset(sEXPRRELEASE);
lexinit();
@@ -1243,19 +1244,19 @@ static void setconfig(char *root)
#else
char path[_MAX_PATH];
char *ptr,*base;
int len;
/* add the default "include" directory */
#if defined __WIN32__ || defined _WIN32
GetModuleFileName(NULL,path,_MAX_PATH);
- #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+ #elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
/* see www.autopackage.org for the BinReloc module */
- ptr = SELFPATH;
+ ptr = (char *)SELFPATH;
if (!ptr)
ptr = root;
strncpy(path,ptr,sizeof path);
#else
if (root!=NULL)
strncpy(path,root,sizeof path); /* path + filename (hopefully) */
#endif
#if defined __MSDOS__
@@ -1917,17 +1918,17 @@ static int declloc(int fstatic)
constvalue *enumroot;
cell val,size;
char *str;
value lval = {0};
int cur_lit=0;
int dim[sDIMEN_MAX];
int numdim;
int fconst;
- int staging_start;
+ int staging_start=0;
fconst=matchtoken(tCONST);
do {
ident=iVARIABLE;
size=1;
numdim=0; /* no dimensions */
tag=pc_addtag(NULL);
if (lex(&val,&str)!=tSYMBOL) /* read in (new) token */
@@ -1943,17 +1944,17 @@ static int declloc(int fstatic)
*/
if ((sym=findloc(name))!=NULL && sym->compound==nestlevel)
error(21,name); /* symbol already defined */
/* Although valid, a local variable whose name is equal to that
* of a global variable or to that of a local variable at a lower
* level might indicate a bug.
* NOTE - don't bother with the error if there's no valid function!
*/
- if ((sym=findloc(name))!=NULL && sym->compound!=nestlevel || findglb(name)!=NULL)
+ if (((sym=findloc(name))!=NULL && sym->compound!=nestlevel) || findglb(name)!=NULL)
if (curfunc!=NULL && (curfunc->usage & uNATIVE))
error(219,name); /* variable shadows another symbol */
while (matchtoken('[')){
ident=iARRAY;
if (numdim == sDIMEN_MAX) {
error(53); /* exceeding maximum number of dimensions */
return ident;
} /* if */
@@ -2858,17 +2859,17 @@ static int operatoradjust(int opertok,sy
if (count!=1 && count!=2)
error(62); /* number or placement of the operands does not fit the operator */
break;
default:
if (count!=2)
error(62); /* number or placement of the operands does not fit the operator */
} /* switch */
- if (tags[0]==0 && (opertok!='=' && tags[1]==0 || opertok=='=' && resulttag==0))
+ if (tags[0]==0 && ((opertok!='=' && tags[1]==0) || (opertok=='=' && resulttag==0)))
error(64); /* cannot change predefined operators */
/* change the operator name */
assert(strlen(opername)>0);
operator_symname(tmpname,opername,tags[0],tags[1],count,resulttag);
if ((oldsym=findglb(tmpname))!=NULL) {
int i;
if ((oldsym->usage & uDEFINE)!=0) {
@@ -3040,17 +3041,17 @@ static void funcstub(int native)
if (size > INT_MAX)
error(105); /* overflow, exceeding capacity */
#endif
dim[numdim++]=(int)size;
} /* while */
tok=lex(&val,&str);
if (native) {
- if (tok==tPUBLIC || tok==tSTOCK || tok==tSTATIC || tok==tSYMBOL && *str==PUBLIC_CHAR)
+ if (tok==tPUBLIC || tok==tSTOCK || tok==tSTATIC || (tok==tSYMBOL && *str==PUBLIC_CHAR))
error(42); /* invalid combination of class specifiers */
} else {
if (tok==tPUBLIC || tok==tSTOCK || tok==tSTATIC)
tok=lex(&val,&str);
} /* if */
if (tok==tOPERATOR) {
opertok=operatorname(symbolname);
@@ -3161,17 +3162,17 @@ static int newfunc(char *firstname,int f
if (firstname!=NULL) {
assert(strlen(firstname)<=sNAMEMAX);
strcpy(symbolname,firstname); /* save symbol name */
tag=firsttag;
} else {
tag= (firsttag>=0) ? firsttag : pc_addtag(NULL);
tok=lex(&val,&str);
assert(!fpublic);
- if (tok==tNATIVE || tok==tPUBLIC && stock)
+ if (tok==tNATIVE || (tok==tPUBLIC && stock))
error(42); /* invalid combination of class specifiers */
if (tok==tOPERATOR) {
opertok=operatorname(symbolname);
if (opertok==0)
return TRUE; /* error message already given */
check_operatortag(opertok,tag,symbolname);
} else {
if (tok!=tSYMBOL && freading) {
@@ -3507,17 +3508,17 @@ static int declargs(symbol *sym)
error(25); /* function definition does not match prototype */
} /* if */
argcnt++;
break;
default:
error(10); /* illegal function or declaration */
} /* switch */
} while (tok=='&' || tok==tLABEL || tok==tCONST
- || tok!=tELLIPS && matchtoken(',')); /* more? */
+ || (tok!=tELLIPS && matchtoken(','))); /* more? */
/* if the next token is not ",", it should be ")" */
needtoken(')');
} /* if */
/* resolve any "sizeof" arguments (now that all arguments are known) */
assert(sym->dim.arglist!=NULL);
arglist=sym->dim.arglist;
for (idx=0; idx<argcnt && arglist[idx].ident!=0; idx++) {
if ((arglist[idx].hasdefault & uSIZEOF)!=0 || (arglist[idx].hasdefault & uTAGOF)!=0) {
@@ -3868,27 +3869,27 @@ static void make_report(symbol *root,FIL
if (sym->parent!=NULL)
continue; /* hierarchical data type */
assert(sym->ident==iCONSTEXPR || sym->ident==iVARIABLE
|| sym->ident==iARRAY || sym->ident==iFUNCTN);
if (sym->ident!=iCONSTEXPR || (sym->usage & uENUMROOT)==0)
continue;
if ((sym->usage & uREAD)==0)
continue;
- fprintf(log,"\t\t<member name=\"T:%s\" value=\"%ld\">\n",funcdisplayname(symname,sym->name),sym->addr);
+ fprintf(log,"\t\t<member name=\"T:%s\" value=\"%ld\">\n",funcdisplayname(symname,sym->name),(long)sym->addr);
if (sym->tag!=0) {
tagsym=find_tag_byval(sym->tag);
assert(tagsym!=NULL);
fprintf(log,"\t\t\t<tagname value=\"%s\"/>\n",tagsym->name);
} /* if */
/* browse through all fields */
if ((enumroot=sym->dim.enumlist)!=NULL) {
enumroot=enumroot->next; /* skip root */
while (enumroot!=NULL) {
- fprintf(log,"\t\t\t<member name=\"C:%s\" value=\"%ld\">\n",funcdisplayname(symname,enumroot->name),enumroot->value);
+ fprintf(log,"\t\t\t<member name=\"C:%s\" value=\"%ld\">\n",funcdisplayname(symname,enumroot->name),(long)enumroot->value);
/* find the constant with this name and get the tag */
ref=findglb(enumroot->name);
if (ref!=NULL) {
if (ref->x.idxtag!=0) {
tagsym=find_tag_byval(ref->x.idxtag);
assert(tagsym!=NULL);
fprintf(log,"\t\t\t\t<tagname value=\"%s\"/>\n",tagsym->name);
} /* if */
@@ -3914,17 +3915,17 @@ static void make_report(symbol *root,FIL
if (sym->parent!=NULL)
continue; /* hierarchical data type */
assert(sym->ident==iCONSTEXPR || sym->ident==iVARIABLE
|| sym->ident==iARRAY || sym->ident==iFUNCTN);
if (sym->ident!=iCONSTEXPR)
continue;
if ((sym->usage & uREAD)==0 || (sym->usage & (uENUMFIELD | uENUMROOT))!=0)
continue;
- fprintf(log,"\t\t<member name=\"C:%s\" value=\"%ld\">\n",funcdisplayname(symname,sym->name),sym->addr);
+ fprintf(log,"\t\t<member name=\"C:%s\" value=\"%ld\">\n",funcdisplayname(symname,sym->name),(long)sym->addr);
if (sym->tag!=0) {
tagsym=find_tag_byval(sym->tag);
assert(tagsym!=NULL);
fprintf(log,"\t\t\t<tagname value=\"%s\"/>\n",tagsym->name);
} /* if */
assert(sym->refer!=NULL);
for (i=0; i<sym->numrefers; i++) {
if ((ref=sym->refer[i])!=NULL)
@@ -4034,17 +4035,17 @@ static void make_report(symbol *root,FIL
if (ref->refer[i]==sym)
fprintf(log,"\t\t\t<dependency name=\"%s\"/>\n",xmlencode(symname,funcdisplayname(symname,ref->name)));
} /* for */
/* print parameter list, with tag & const information, plus descriptions */
assert(sym->dim.arglist!=NULL);
for (arg=0; sym->dim.arglist[arg].ident!=0; arg++) {
int dim,paraminfo;
char *outer_start,*inner_start;
- int outer_length,inner_length;
+ int outer_length=0,inner_length=0;
if (sym->dim.arglist[arg].ident==iVARARGS)
fprintf(log,"\t\t\t<param name=\"...\">\n");
else
fprintf(log,"\t\t\t<param name=\"%s\">\n",sym->dim.arglist[arg].name);
/* print the tag name(s) for each parameter */
assert(sym->dim.arglist[arg].numtags>0);
assert(sym->dim.arglist[arg].tags!=NULL);
paraminfo=(sym->dim.arglist[arg].numtags>1 || sym->dim.arglist[arg].tags[0]!=0)
@@ -5243,26 +5244,26 @@ static void doreturn(void)
ident=doexpr(TRUE,FALSE,TRUE,TRUE,&tag,&sym,TRUE);
needtoken(tTERM);
/* see if this function already has a sub type (an array attached) */
sub=finddepend(curfunc);
assert(sub==NULL || sub->ident==iREFARRAY);
if ((rettype & uRETVALUE)!=0) {
int retarray=(ident==iARRAY || ident==iREFARRAY);
/* there was an earlier "return" statement in this function */
- if (sub==NULL && retarray || sub!=NULL && !retarray)
+ if ((sub==NULL && retarray) || (sub!=NULL && !retarray))
error(79); /* mixing "return array;" and "return value;" */
} /* if */
rettype|=uRETVALUE; /* function returns a value */
/* check tagname with function tagname */
assert(curfunc!=NULL);
if (!matchtag(curfunc->tag,tag,TRUE))
error(213); /* tagname mismatch */
if (ident==iARRAY || ident==iREFARRAY) {
- int dim[sDIMEN_MAX],numdim;
+ int dim[sDIMEN_MAX],numdim=0;
cell arraysize;
assert(sym!=NULL);
if (sub!=NULL) {
assert(sub->ident==iREFARRAY);
/* this function has an array attached already; check that the current
* "return" statement returns exactly the same array
*/
level=sym->dim.array.level;
diff --git a/compiler/libpc300/sc2.c b/compiler/libpc300/sc2.c
--- a/compiler/libpc300/sc2.c
+++ b/compiler/libpc300/sc2.c
@@ -22,17 +22,17 @@
*/
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include "sc.h"
-#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
#include <sclinux.h>
#endif
#if defined FORTIFY
#include "fortify.h"
#endif
/* flags for litchar() */
@@ -193,17 +193,17 @@ SC_FUNC int plungefile(char *name,int tr
if (try_includepaths && name[0]!=DIRSEP_CHAR) {
int i;
char *ptr;
for (i=0; !result && (ptr=get_path(i))!=NULL; i++) {
char path[_MAX_PATH];
strncpy(path,ptr,sizeof path);
path[sizeof path - 1]='\0'; /* force '\0' termination */
- strncat(path,name,sizeof(path)-strlen(path));
+ strncat(path,name,sizeof(path) - strlen(path) - 1);
path[sizeof path - 1]='\0';
result=plungequalifiedfile(path);
} /* while */
} /* if */
return result;
}
static void check_empty(const unsigned char *lptr)
@@ -403,17 +403,17 @@ static void stripcom(unsigned char *line
*(line+1)=' ';
line+=2;
} else {
if (*line=='/' && *(line+1)=='*')
error(216); /* nested comment */
#if !defined SC_LIGHT
/* collect the comment characters in a string */
if (icomment==2) {
- if (skipstar && (*line!='\0' && *line<=' ' || *line=='*')) {
+ if (skipstar && ((*line!='\0' && *line<=' ') || *line=='*')) {
/* ignore leading whitespace and '*' characters */
} else if (commentidx<COMMENT_LIMIT+COMMENT_MARGIN-1) {
comment[commentidx++]=(char)((*line!='\n') ? *line : ' ');
if (commentidx>COMMENT_LIMIT && *line!='\0' && *line<=' ') {
comment[commentidx]='\0';
insert_docstring(comment);
commentidx=0;
} /* if */
@@ -580,32 +580,19 @@ static int htoi(cell *val,const unsigned
} /* if */
if (alphanum(*ptr))
return 0;
else
return (int)(ptr-curptr);
}
#if defined __GNUC__
-static double pow10(int value)
+static double pow10(double d)
{
- double res=1.0;
- while (value>=4) {
- res*=10000.0;
- value-=5;
- } /* while */
- while (value>=2) {
- res*=100.0;
- value-=2;
- } /* while */
- while (value>=1) {
- res*=10.0;
- value-=1;
- } /* while */
- return res;
+ return pow(10, d);
}
#endif
/* ftoi
*
* Attempts to interpret a numeric symbol as a rational number, either as
* IEEE 754 single/double precision floating point or as a fixed point integer.
* On success it returns the number of characters processed and the value is
@@ -1205,17 +1192,17 @@ static int command(void)
case tRATIONAL:
outval(val,FALSE);
code_idx+=opargs(1);
break;
case tSYMBOL:
sym=findloc(str);
if (sym==NULL)
sym=findglb(str);
- if (sym==NULL || sym->ident!=iFUNCTN && sym->ident!=iREFFUNC && (sym->usage & uDEFINE)==0) {
+ if (sym==NULL || (sym->ident!=iFUNCTN && sym->ident!=iREFFUNC && (sym->usage & uDEFINE)==0)) {
error(17,str); /* undefined symbol */
} else {
outval(sym->addr,FALSE);
/* mark symbol as "used", unknown whether for read or write */
markusage(sym,uREAD | uWRITTEN);
code_idx+=opargs(1);
} /* if */
break;
@@ -1639,17 +1626,17 @@ static void substallpatterns(unsigned ch
start++; /* skip non-alphapetic character (or closing quote of a string) */
} /* while */
if (*start=='\0')
break; /* abort loop on error */
/* if matching the operator "defined", skip it plus the symbol behind it */
if (strncmp((char*)start,"defined",7)==0 && !isalpha((char)*(start+7))) {
start+=7; /* skip "defined" */
/* skip white space & parantheses */
- while (*start<=' ' && *start!='\0' || *start=='(')
+ while ((*start<=' ' && *start!='\0') || *start=='(')
start++;
/* skip the symbol behind it */
while (isalpha(*start) || isdigit(*start) || *start=='_')
start++;
/* drop back into the main loop */
continue;
} /* if */
/* get the prefix (length), look for a matching definition */
@@ -1941,32 +1928,32 @@ SC_FUNC int lex(cell *lexvalue,char **le
} else if (find_constval(&tagname_tab,_lexstr,0)!=NULL) {
/* this looks like a tag override (because a tag with this name
* exists), but tags are not allowed right now, so it is probably an
* error
*/
error(220);
} /* if */
} /* if */
- } else if (*lptr=='\"' || *lptr==sc_ctrlchar && *(lptr+1)=='\"')
+ } else if (*lptr=='\"' || (*lptr==sc_ctrlchar && *(lptr+1)=='\"'))
{ /* unpacked string literal */
_lextok=tSTRING;
stringflags= (*lptr==sc_ctrlchar) ? RAWMODE : 0;
*lexvalue=_lexval=litidx;
lptr+=1; /* skip double quote */
if ((stringflags & RAWMODE)!=0)
lptr+=1; /* skip "escape" character too */
lptr=sc_packstr ? packedstring(lptr,stringflags) : unpackedstring(lptr,stringflags);
if (*lptr=='\"')
lptr+=1; /* skip final quote */
else
error(37); /* invalid (non-terminated) string */
- } else if (*lptr=='!' && *(lptr+1)=='\"'
- || *lptr=='!' && *(lptr+1)==sc_ctrlchar && *(lptr+2)=='\"'
- || *lptr==sc_ctrlchar && *(lptr+1)=='!' && *(lptr+2)=='\"')
+ } else if ((*lptr=='!' && *(lptr+1)=='\"')
+ || (*lptr=='!' && *(lptr+1)==sc_ctrlchar && *(lptr+2)=='\"')
+ || (*lptr==sc_ctrlchar && *(lptr+1)=='!' && *(lptr+2)=='\"'))
{ /* packed string literal */
_lextok=tSTRING;
stringflags= (*lptr==sc_ctrlchar || *(lptr+1)==sc_ctrlchar) ? RAWMODE : 0;
*lexvalue=_lexval=litidx;
lptr+=2; /* skip exclamation point and double quote */
if ((stringflags & RAWMODE)!=0)
lptr+=1; /* skip "escape" character too */
lptr=sc_packstr ? unpackedstring(lptr,stringflags) : packedstring(lptr,stringflags);
@@ -2048,17 +2035,17 @@ SC_FUNC void lexclr(int clreol)
*/
SC_FUNC int matchtoken(int token)
{
cell val;
char *str;
int tok;
tok=lex(&val,&str);
- if (tok==token || token==tTERM && (tok==';' || tok==tENDEXPR)) {
+ if (tok==token || (token==tTERM && (tok==';' || tok==tENDEXPR))) {
return 1;
} else if (!sc_needsemicolon && token==tTERM && (_lexnewline || !freading)) {
/* Push "tok" back, because it is the token following the implicit statement
* termination (newline) token.
*/
lexpush();
return 2;
} else {
@@ -2413,17 +2400,17 @@ SC_FUNC void delete_symbol(symbol *root,
root->next=sym->next;
free_symbol(sym);
}
SC_FUNC void delete_symbols(symbol *root,int level,int delete_labels,int delete_functions)
{
symbol *sym,*parent_sym;
constvalue *stateptr;
- int mustdelete;
+ int mustdelete=0;
/* erase only the symbols with a deeper nesting level than the
* specified nesting level */
while (root->next!=NULL) {
sym=root->next;
if (sym->compound<level)
break;
switch (sym->ident) {
diff --git a/compiler/libpc300/sc3.c b/compiler/libpc300/sc3.c
--- a/compiler/libpc300/sc3.c
+++ b/compiler/libpc300/sc3.c
@@ -924,17 +924,17 @@ static int hier14(value *lval1)
if (val<0) {
val=-val;
if (lval3.sym->x.idxtag==0)
exactmatch=FALSE;
} /* if */
} /* if */
if (lval3.sym->dim.array.level!=level)
return error(48); /* array dimensions must match */
- else if (ltlength<val || exactmatch && ltlength>val || val==0)
+ else if (ltlength<val || (exactmatch && ltlength>val) || val==0)
return error(47); /* array sizes must match */
else if (lval3.ident!=iARRAYCELL && !matchtag(lval3.sym->x.idxtag,idxtag,TRUE))
error(229,(lval2.sym!=NULL) ? lval2.sym->name : lval3.sym->name); /* index tag mismatch */
if (level>0) {
/* check the sizes of all sublevels too */
symbol *sym1 = lval3.sym;
symbol *sym2 = lval2.sym;
int i;
@@ -1119,17 +1119,17 @@ static int hier3(value *lval)
}
static int hier2(value *lval)
{
int lvalue,tok;
int tag,paranthese;
cell val;
char *st;
- symbol *sym;
+ symbol *sym=NULL;
int saveresult;
tok=lex(&val,&st);
switch (tok) {
case tINC: /* ++lval */
if (!hier2(lval))
return error(22); /* must be lvalue */
assert(lval->sym!=NULL);
@@ -1242,17 +1242,17 @@ static int hier2(value *lval)
error(72); /* "function" symbol has no size */
else if ((sym->usage & uDEFINE)==0)
return error(17,st); /* undefined symbol (symbol is in the table, but it is "used" only) */
clear_value(lval);
lval->ident=iCONSTEXPR;
lval->constval=1; /* preset */
if (sym->ident==iARRAY || sym->ident==iREFARRAY) {
int level;
- symbol *idxsym;
+ symbol *idxsym=NULL;
for (level=0; matchtoken('['); level++) {
idxsym=NULL;
if (level==sym->dim.array.level && matchtoken(tSYMBOL)) {
char *idxname;
tokeninfo(&val,&idxname);
if ((idxsym=findconst(idxname))==NULL)
error(80,idxname); /* unknown symbol, or non-constant */
} /* if */
@@ -1288,17 +1288,17 @@ static int hier2(value *lval)
if (sym==NULL)
return error(17,st); /* undefined symbol */
if ((sym->usage & uDEFINE)==0)
return error(17,st); /* undefined symbol (symbol is in the table, but it is "used" only) */
tag=sym->tag;
} /* if */
if (sym->ident==iARRAY || sym->ident==iREFARRAY) {
int level;
- symbol *idxsym;
+ symbol *idxsym=NULL;
for (level=0; matchtoken('['); level++) {
idxsym=NULL;
if (level==sym->dim.array.level && matchtoken(tSYMBOL)) {
char *idxname;
tokeninfo(&val,&idxname);
if ((idxsym=findconst(idxname))==NULL)
error(80,idxname); /* unknown symbol, or non-constant */
} /* if */
@@ -1457,35 +1457,35 @@ restart:
if (lval2.ident==iCONSTEXPR) { /* constant expression */
stgdel(index,cidx); /* scratch generated code */
if (lval1->arrayidx!=NULL) { /* keep constant index, for checking */
assert(sym->dim.array.level>=0 && sym->dim.array.level<sDIMEN_MAX);
lval1->arrayidx[sym->dim.array.level]=lval2.constval;
} /* if */
if (close==']') {
/* normal array index */
- if (lval2.constval<0 || sym->dim.array.length!=0 && sym->dim.array.length<=lval2.constval)
+ if (lval2.constval<0 || (sym->dim.array.length!=0 && sym->dim.array.length<=lval2.constval))
error(32,sym->name); /* array index out of bounds */
if (lval2.constval!=0) {
/* don't add offsets for zero subscripts */
#if PAWN_CELL_SIZE==16
ldconst(lval2.constval<<1,sALT);
#elif PAWN_CELL_SIZE==32
ldconst(lval2.constval<<2,sALT);
#elif PAWN_CELL_SIZE==64
ldconst(lval2.constval<<3,sALT);
#else
#error Unsupported cell size
#endif
ob_add();
} /* if */
} else {
/* character index */
- if (lval2.constval<0 || sym->dim.array.length!=0
- && sym->dim.array.length*((8*sizeof(cell))/sCHARBITS)<=(ucell)lval2.constval)
+ if (lval2.constval<0 || (sym->dim.array.length!=0
+ && sym->dim.array.length*((8*sizeof(cell))/sCHARBITS)<=(ucell)lval2.constval))
error(32,sym->name); /* array index out of bounds */
if (lval2.constval!=0) {
/* don't add offsets for zero subscripts */
#if sCHARBITS==16
ldconst(lval2.constval<<1,sALT);/* 16-bit character */
#else
ldconst(lval2.constval,sALT); /* 8-bit character */
#endif
@@ -2030,18 +2030,18 @@ static int nesting=0;
if (lval.ident==iARRAYCELL) {
error(47); /* array sizes must match */
} else {
assert(lval.constval!=0); /* literal array must have a size */
/* A literal array must have exactly the same size as the
* function argument; a literal string may be smaller than
* the function argument.
*/
- if (lval.constval>0 && arg[argidx].dim[0]!=lval.constval
- || lval.constval<0 && arg[argidx].dim[0] < -lval.constval)
+ if ((lval.constval>0 && arg[argidx].dim[0]!=lval.constval)
+ || (lval.constval<0 && arg[argidx].dim[0] < -lval.constval))
error(47); /* array sizes must match */
} /* if */
} /* if */
if (lval.ident!=iARRAYCELL) {
/* save array size, for default values with uSIZEOF flag */
cell array_sz=lval.constval;
assert(array_sz!=0);/* literal array must have a size */
if (array_sz<0)
diff --git a/compiler/libpc300/sc4.c b/compiler/libpc300/sc4.c
--- a/compiler/libpc300/sc4.c
+++ b/compiler/libpc300/sc4.c
@@ -230,17 +230,17 @@ SC_FUNC void begdseg(void)
stgwrite("DATA\t; ");
outval(glb_declared-litidx,TRUE);
curseg=sIN_DSEG;
} /* if */
}
SC_FUNC void setline(int chkbounds)
{
- if ((sc_debug & sSYMBOLIC)!=0 || chkbounds && (sc_debug & sCHKBOUNDS)!=0) {
+ if ((sc_debug & sSYMBOLIC)!=0 || (chkbounds && (sc_debug & sCHKBOUNDS)!=0)) {
/* generate a "break" (start statement) opcode rather than a "line" opcode
* because earlier versions of Small/Pawn have an incompatible version of the
* line opcode
*/
stgwrite("\tbreak\t; ");
outval(code_idx,TRUE);
code_idx+=opcodes(1);
} /* if */
@@ -714,17 +714,17 @@ SC_FUNC void ffcall(symbol *sym,const ch
stgwrite("\tcall ");
if (label!=NULL) {
stgwrite("l.");
stgwrite(label);
} else {
stgwrite(sym->name);
} /* if */
if (sc_asmfile
- && (label!=NULL || !isalpha(sym->name[0]) && sym->name[0]!='_' && sym->name[0]!=sc_ctrlchar))
+ && (label!=NULL || (!isalpha(sym->name[0]) && sym->name[0]!='_' && sym->name[0]!=sc_ctrlchar)))
{
stgwrite("\t; ");
stgwrite(symname);
} /* if */
stgwrite("\n");
code_idx+=opcodes(1)+opargs(1);
} /* if */
}
diff --git a/compiler/libpc300/sc5.c b/compiler/libpc300/sc5.c
--- a/compiler/libpc300/sc5.c
+++ b/compiler/libpc300/sc5.c
@@ -20,17 +20,17 @@
* 3. This notice may not be removed or altered from any source distribution.
*
* Version: $Id: sc5.c 1724 2005-07-24 20:00:55Z dvander $
*/
#include <assert.h>
#if defined __WIN32__ || defined _WIN32 || defined __MSDOS__
#include <io.h>
#endif
-#if defined LINUX || defined __GNUC__
+#if defined LINUX || defined __APPLE__ || defined __GNUC__
#include <unistd.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h> /* ANSI standardized variable argument list functions */
#include <string.h>
#if defined FORTIFY
#include "fortify.h"
@@ -127,17 +127,17 @@ static short lastfile;
else
fprintf(fp,"%s(%d) : %s %03d: ",inpfname,fline,pre,number);
vfprintf(fp,string,argptr);
fclose(fp);
} /* if */
} /* if */
va_end(argptr);
- if (number>=100 && number<200 || errnum>25){
+ if ((number>=100 && number<200) || errnum>25){
if (strlen(errfname)==0) {
va_start(argptr,number);
pc_error(0,"\nCompilation aborted.",NULL,0,0,argptr);
va_end(argptr);
} /* if */
if (outf!=NULL) {
pc_closeasm(outf,TRUE);
outf=NULL;
diff --git a/compiler/libpc300/sc6.c b/compiler/libpc300/sc6.c
--- a/compiler/libpc300/sc6.c
+++ b/compiler/libpc300/sc6.c
@@ -25,17 +25,17 @@
#include <stdlib.h> /* for macro max() */
#include <string.h>
#include <ctype.h>
#if defined FORTIFY
#include "fortify.h"
#endif
#include "sc.h"
#include "amxdbg.h"
-#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
#include <sclinux.h>
#endif
static void append_dbginfo(FILE *fout);
typedef cell (*OPCODE_PROC)(FILE *fbin,char *params,cell opcode);
@@ -890,17 +890,17 @@ SC_FUNC int assemble(FILE *fout,FILE *fi
bytes_out=0;
for (pass=sIN_CSEG; pass<=sIN_DSEG; pass++) {
pc_resetasm(fin);
while (pc_readasm(fin,line,sizeof line)!=NULL) {
stripcomment(line);
instr=skipwhitespace(line);
/* ignore empty lines and labels (labels have a special syntax, so these
* must be parsed separately) */
- if (*instr=='\0' || tolower(*instr)=='l' && *(instr+1)=='.')
+ if (*instr=='\0' || (tolower(*instr)=='l' && *(instr+1)=='.'))
continue;
/* get to the end of the instruction (make use of the '\n' that fgets()
* added at the end of the line; this way we will *always* drop on a
* whitespace character) */
for (params=instr; *params!='\0' && !isspace(*params); params++)
/* nothing */;
assert(params>instr);
i=findopcode(instr,(int)(params-instr));
diff --git a/compiler/libpc300/sc7.c b/compiler/libpc300/sc7.c
--- a/compiler/libpc300/sc7.c
+++ b/compiler/libpc300/sc7.c
@@ -452,28 +452,28 @@ static int matchsequence(char *start,cha
start++;
ptr++;
} /* while */
pattern--; /* there is an increment following at the end of the loop */
break;
case ' ':
if (*start!='\t' && *start!=' ')
return FALSE;
- while (start<end && *start=='\t' || *start==' ')
+ while ((start<end && *start=='\t') || *start==' ')
start++;
break;
case '!':
- while (start<end && *start=='\t' || *start==' ')
+ while ((start<end && *start=='\t') || *start==' ')
start++; /* skip trailing white space */
if (*start!='\n')
return FALSE;
assert(*(start+1)=='\0');
start+=2; /* skip '\n' and '\0' */
if (*(pattern+1)!='\0')
- while (start<end && *start=='\t' || *start==' ')
+ while ((start<end && *start=='\t') || *start==' ')
start++; /* skip leading white space of next instruction */
break;
default:
if (tolower(*start) != tolower(*pattern))
return FALSE;
start++;
} /* switch */
pattern++;
diff --git a/compiler/libpc300/sci18n.c b/compiler/libpc300/sci18n.c
--- a/compiler/libpc300/sci18n.c
+++ b/compiler/libpc300/sci18n.c
@@ -42,17 +42,17 @@
#if !defined TRUE
#define FALSE 0
#define TRUE 1
#endif
#if !defined _MAX_PATH
#define _MAX_PATH 250
#endif
#if !defined DIRSEP_CHAR
- #if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE___
#define DIRSEP_CHAR '/'
#elif defined macintosh
#define DIRSEP_CHAR ':'
#else
#define DIRSEP_CHAR '\\'
#endif
#endif
@@ -334,17 +334,17 @@ SC_FUNC cell get_utf8_char(const unsigne
* the chance of heuristic dectection of non-UTF-8 text
* (JAVA writes zero bytes as a 2-byte code UTF-8, which is invalid)
*/
if (result<lowmark)
return -1;
/* the code positions 0xd800--0xdfff and 0xfffe & 0xffff do not
* exist in UCS-4 (and hence, they do not exist in Unicode)
*/
- if (result>=0xd800 && result<=0xdfff || result==0xfffe || result==0xffff)
+ if ((result>=0xd800 && result<=0xdfff) || result==0xfffe || result==0xffff)
return -1;
} /* if */
break;
} else if (follow==0 && (ch & 0x80)==0x80) {
/* UTF-8 leader code */
if ((ch & 0xe0)==0xc0) {
/* 110xxxxx 10xxxxxx */
follow=1;
diff --git a/compiler/libpc300/sclinux.h b/compiler/libpc300/sclinux.h
--- a/compiler/libpc300/sclinux.h
+++ b/compiler/libpc300/sclinux.h
@@ -27,16 +27,20 @@
/*
* SC assumes that a computer is Little Endian unless told otherwise. It uses
* (and defines) the macros BYTE_ORDER and BIG_ENDIAN.
* For Linux, we must overrule these settings with those defined in glibc.
*/
#if !defined __BYTE_ORDER
# include <stdlib.h>
+# if defined __APPLE__
+# include <sys/types.h>
+# define __BYTE_ORDER BYTE_ORDER
+# endif
#endif
#if defined __OpenBSD__ || defined __FreeBSD__
# define __BYTE_ORDER BYTE_ORDER
# define __LITTLE_ENDIAN LITTLE_ENDIAN
# define __BIG_ENDIAN BIG_ENDIAN
#endif
diff --git a/compiler/libpc300/sclist.c b/compiler/libpc300/sclist.c
--- a/compiler/libpc300/sclist.c
+++ b/compiler/libpc300/sclist.c
@@ -233,17 +233,17 @@ SC_FUNC void delete_aliastable(void)
/* ----- include paths list -------------------------------------- */
static stringlist includepaths = {NULL, NULL}; /* directory list for include files */
SC_FUNC stringlist *insert_path(char *path)
{
char *extra_path = malloc(strlen(path) + 16);
strcpy(extra_path, path);
-#if defined __linux__
+#if defined __linux__ || defined __APPLE__
strcat(extra_path, "/amxmod_compat/");
#elif defined WIN32 || defined _WIN32
strcat(extra_path, "\\amxmod_compat\\");
#endif
insert_string(&includepaths, extra_path);
free(extra_path);
return insert_string(&includepaths,path);
}
@@ -439,20 +439,20 @@ SC_FUNC stringlist *insert_dbgsymbol(sym
int count=0;
#endif
funcdisplayname(symname,sym->name);
/* address tag:name codestart codeend ident vclass [tag:dim ...] */
#if PAWN_CELL_SIZE==32
if (sym->ident==iFUNCTN)
- sprintf(string,"S:%08lx %x:%s %08lx %08lx %x %x",sym->addr,sym->tag,
+ sprintf(string,"S:%08x %x:%s %08x %08x %x %x",sym->addr,sym->tag,
symname,sym->addr,sym->codeaddr,sym->ident,sym->vclass);
else
- sprintf(string,"S:%08lx %x:%s %08lx %08lx %x %x",sym->addr,sym->tag,
+ sprintf(string,"S:%08x %x:%s %08x %08x %x %x",sym->addr,sym->tag,
symname,sym->codeaddr,code_idx,sym->ident,sym->vclass);
#elif PAWN_CELL_SIZE==64
if (sym->ident==iFUNCTN)
sprintf(string,"S:%08Lx %x:%s %08Lx %08Lx %x %x",(LONGCAST)sym->addr,sym->tag,
symname,sym->addr,sym->codeaddr,sym->ident,sym->vclass);
else
sprintf(string,"S:%08Lx %x:%s %08Lx %08Lx %x %x",(LONGCAST)sym->addr,sym->tag,
symname,sym->codeaddr,code_idx,sym->ident,sym->vclass);
diff --git a/compiler/libpc300/scstate.c b/compiler/libpc300/scstate.c
--- a/compiler/libpc300/scstate.c
+++ b/compiler/libpc300/scstate.c
@@ -46,17 +46,17 @@
* Version: $Id: scstate.c 1724 2005-07-24 20:00:55Z dvander $
*/
#include <assert.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sc.h"
-#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
+#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
#include <sclinux.h>
#endif
#if defined FORTIFY
#include "fortify.h"
#endif
typedef struct s_statelist {
diff --git a/configs/hamdata.ini b/configs/hamdata.ini
--- a/configs/hamdata.ini
+++ b/configs/hamdata.ini
@@ -256,16 +256,126 @@
weapon_shouldweaponidle 92
weapon_usedecrement 93
cstrike_restart 2
cstrike_roundrespawn 84
cstrike_item_candrop 63
cstrike_item_getmaxspeed 78
@end
+
+@section cstrike mac
+ pev 4
+ base 0x0
+
+ spawn 0
+ precache 1
+ keyvalue 3
+ objectcaps 6
+ activate 7
+ setobjectcollisionbox 8
+ classify 9
+ deathnotice 10
+ traceattack 11
+ takedamage 12
+ takehealth 13
+ killed 14
+ bloodcolor 15
+ tracebleed 16
+ istriggered 17
+ mymonsterpointer 18
+ mysquadmonsterpointer 19
+ gettogglestate 20
+ addpoints 21
+ addpointstoteam 22
+ addplayeritem 23
+ removeplayeritem 24
+ giveammo 25
+ getdelay 26
+ ismoving 27
+ overridereset 28
+ damagedecal 29
+ settogglestate 30
+ startsneaking 31
+ stopsneaking 32
+ oncontrols 33
+ issneaking 34
+ isalive 35
+ isbspmodel 36
+ reflectgauss 37
+ hastarget 38
+ isinworld 39
+ isplayer 40
+ isnetclient 41
+ teamid 42
+ getnexttarget 43
+ think 44
+ touch 45
+ use 46
+ blocked 47
+ respawn 48
+ updateowner 49
+ fbecomeprone 50
+ center 51
+ eyeposition 52
+ earposition 53
+ bodytarget 54
+ illumination 55
+ fvisible 56
+ fvecvisible 57
+
+ player_jump 76
+ player_duck 77
+ player_prethink 78
+ player_postthink 79
+ player_getgunposition 80
+ player_shouldfadeondeath 66
+ player_impulsecommands 83
+ player_updateclientdata 82
+
+ item_addtoplayer 59
+ item_addduplicate 60
+ item_getiteminfo 61
+ item_candeploy 62
+ item_deploy 64
+ item_canholster 66
+ item_holster 67
+ item_updateiteminfo 68
+ item_preframe 69
+ item_postframe 70
+ item_drop 71
+ item_kill 72
+ item_attachtoplayer 73
+ item_primaryammoindex 74
+ item_secondaryammoindex 75
+ item_updateclientdata 76
+ item_getweaponptr 77
+ item_itemslot 79
+
+ weapon_extractammo 80
+ weapon_extractclipammo 81
+ weapon_addweapon 82
+ weapon_playemptysound 83
+ weapon_resetemptysound 84
+ weapon_sendweaponanim 85
+ weapon_isusable 86
+ weapon_primaryattack 87
+ weapon_secondaryattack 88
+ weapon_reload 89
+ weapon_weaponidle 90
+ weapon_retireweapon 91
+ weapon_shouldweaponidle 92
+ weapon_usedecrement 93
+
+ cstrike_restart 2
+ cstrike_roundrespawn 84
+ cstrike_item_candrop 63
+ cstrike_item_getmaxspeed 78
+@end
+
@section dod linux
pev 0
base 0x154
spawn 5
precache 6
keyvalue 7
objectcaps 10
@@ -1742,18 +1852,122 @@
weapon_isusable 82
weapon_primaryattack 83
weapon_secondaryattack 84
weapon_reload 85
weapon_weaponidle 86
weapon_retireweapon 87
weapon_shouldweaponidle 88
weapon_usedecrement 89
+@end
+
+@section valve mac
+ pev 4
+ base 0x0
+ spawn 0
+ precache 1
+ keyvalue 2
+ objectcaps 5
+ activate 6
+ setobjectcollisionbox 7
+ classify 8
+ deathnotice 9
+ traceattack 10
+ takedamage 11
+ takehealth 12
+ killed 13
+ bloodcolor 14
+ tracebleed 15
+ istriggered 16
+ mymonsterpointer 17
+ mysquadmonsterpointer 18
+ gettogglestate 19
+ addpoints 20
+ addpointstoteam 21
+ addplayeritem 22
+ removeplayeritem 23
+ giveammo 24
+ getdelay 25
+ ismoving 26
+ overridereset 27
+ damagedecal 28
+ settogglestate 29
+ startsneaking 30
+ stopsneaking 31
+ oncontrols 32
+ issneaking 33
+ isalive 34
+ isbspmodel 35
+ reflectgauss 36
+ hastarget 37
+ isinworld 38
+ isplayer 39
+ isnetclient 40
+ teamid 41
+ getnexttarget 42
+ think 43
+ touch 44
+ use 45
+ blocked 46
+ respawn 47
+ updateowner 48
+ fbecomeprone 49
+ center 50
+ eyeposition 51
+ earposition 52
+ bodytarget 53
+ illumination 54
+ fvisible 55
+ fvecvisible 56
+
+ player_jump 125
+ player_duck 126
+ player_prethink 127
+ player_postthink 128
+ player_getgunposition 119
+ player_shouldfadeondeath 60
+ player_impulsecommands 130
+ player_updateclientdata 129
+
+ item_addtoplayer 58
+ item_addduplicate 59
+ item_getiteminfo 60
+ item_candeploy 61
+ item_deploy 62
+ item_canholster 63
+ item_holster 64
+ item_updateiteminfo 65
+ item_preframe 66
+ item_postframe 67
+ item_drop 68
+ item_kill 69
+ item_attachtoplayer 70
+ item_primaryammoindex 71
+ item_secondaryammoindex 72
+ item_updateclientdata 73
+ item_getweaponptr 74
+ item_itemslot 75
+
+ weapon_extractammo 76
+ weapon_extractclipammo 77
+ weapon_addweapon 78
+ weapon_playemptysound 79
+ weapon_resetemptysound 80
+ weapon_sendweaponanim 81
+ weapon_isusable 82
+ weapon_primaryattack 83
+ weapon_secondaryattack 84
+ weapon_reload 85
+ weapon_weaponidle 86
+ weapon_retireweapon 87
+ weapon_shouldweaponidle 88
+ weapon_usedecrement 89
@end
+
; Sven-Coop has no linux binaries. This makes disassembly much harder.
; These offsets were contributed by ts2do
@section SvenCoop windows
pev 4
base 0x0
spawn 0
precache 1
diff --git a/dlls/cstrike/cstrike/CstrikeHacks.cpp b/dlls/cstrike/cstrike/CstrikeHacks.cpp
--- a/dlls/cstrike/cstrike/CstrikeHacks.cpp
+++ b/dlls/cstrike/cstrike/CstrikeHacks.cpp
@@ -1,15 +1,19 @@
#include <assert.h>
-#include <malloc.h>
+#include <stdlib.h>
#include "cstrike.h"
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
#include <sys/mman.h>
#define PAGE_EXECUTE_READWRITE PROT_READ|PROT_WRITE|PROT_EXEC
+
+#if defined(__linux)
+#include <malloc.h>
+#endif
#endif
/* Utils */
unsigned char *UTIL_CodeAlloc(size_t size);
void UTIL_CodeFree(unsigned char *addr);
void UTIL_MemProtect(void *addr, int length, int prot);
bool UTIL_GetLibraryOfAddress(void *memInBase, char *buffer, size_t maxlength);
@@ -60,17 +64,17 @@ void CtrlDetour_ClientCommand(bool set)
const unsigned int DetourJmpBytes = 5;
static unsigned char *FullDetour = NULL;
void *target = (void *)MDLL_ClientCommand;
unsigned char *paddr;
if (!g_UseBotArgs)
{
-#if defined __linux__
+#if defined(__linux__) || defined(__APPLE__)
/* Find the DLL */
char dll[256];
if (!UTIL_GetLibraryOfAddress(target, dll, sizeof(dll)))
{
return;
}
void *handle = dlopen(dll, RTLD_NOW);
if (!handle)
@@ -97,17 +101,17 @@ void CtrlDetour_ClientCommand(bool set)
/* Copy the main trampoline function */
memcpy(FullDetour, DetourOps, DetourBytes);
/* Copy our detour call into the trampoline */
paddr = &FullDetour[DetourCallPos];
*(unsigned long *)paddr = (unsigned long)Detour_ClientCommand - (unsigned long)(paddr + 4);
/* Copy original bytes onto the end of the function */
- memcpy(&FullDetour[DetourBytes], target, CS_DETOURCOPYBYTES_CLIENTCOMMAND);
+ memcpy(&FullDetour[DetourBytes], target, CS_DETOURCOPYBYTES_CLIENTCOMMAND);
/* Patch and copy the final jmp */
paddr = &FullDetour[DetourJmpPos];
*paddr++ = DetourJmp;
*(unsigned long *)paddr = ((unsigned long)target + CS_DETOURCOPYBYTES_CLIENTCOMMAND)
- (unsigned long)(paddr + 4);
/* Now overwrite the target function with our trampoline */
@@ -137,47 +141,51 @@ int Detour_ClientCommand(edict_t *pEdict
}
return 0;
}
unsigned char *UTIL_CodeAlloc(size_t size)
{
#if defined WIN32
return (unsigned char *)VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
+#elif defined __GNUC__
+#if defined __APPLE__
+ unsigned char *addr = (unsigned char *)valloc(size);
#else
unsigned char *addr = (unsigned char *)memalign(sysconf(_SC_PAGESIZE), size);
+#endif
mprotect(addr, size, PROT_READ|PROT_WRITE|PROT_EXEC);
return addr;
#endif
}
void UTIL_CodeFree(unsigned char *addr)
{
#if defined WIN32
VirtualFree(addr, 0, MEM_RELEASE);
#else
free(addr);
#endif
}
void UTIL_MemProtect(void *addr, int length, int prot)
{
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
#define ALIGN(ar) ((long)ar & ~(sysconf(_SC_PAGESIZE)-1))
void *addr2 = (void *)ALIGN(addr);
mprotect(addr2, sysconf(_SC_PAGESIZE), prot);
#else
DWORD old_prot;
VirtualProtect(addr, length, prot, &old_prot);
#endif
}
bool UTIL_GetLibraryOfAddress(void *memInBase, char *buffer, size_t maxlength)
{
-#if defined __linux__
+#if defined(__linux__) || defined(__APPLE__)
Dl_info info;
if (!dladdr(memInBase, &info))
{
return false;
}
if (!info.dli_fbase || !info.dli_fname)
{
return false;
diff --git a/dlls/cstrike/cstrike/Makefile b/dlls/cstrike/cstrike/Makefile
--- a/dlls/cstrike/cstrike/Makefile
+++ b/dlls/cstrike/cstrike/Makefile
@@ -1,78 +1,123 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
-HLSDK = ../../../../hlsdk
+###########################################
+### EDIT THESE PATHS FOR YOUR OWN SETUP ###
+###########################################
+
+HLSDK = ../../../../hlsdk/multiplayer
MM_ROOT = ../../../../metamod/metamod
+#####################################
### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
-OPT_FLAGS = -O2 -funroll-loops -s -pipe -fomit-frame-pointer -fno-strict-aliasing
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-NAME = cstrike
-
-BIN_SUFFIX_32 = amxx_i386.so
-BIN_SUFFIX_64 = amxx_amd64.so
+PROJECT = cstrike
OBJECTS = sdk/amxxmodule.cpp CstrikePlayer.cpp cstrike.cpp CstrikeHacks.cpp
-LINK =
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
-INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
- -I$(MM_ROOT) -I$(HLSDK)/common -Isdk
+C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
-GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+LINK =
-ifeq "$(GCC_VERSION)" "4"
- OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
+INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
+ -I$(MM_ROOT) -Isdk
+
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
+
+OS := $(shell uname -s)
+
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ LIB_SUFFIX = _amxx
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
+else
+ LIB_EXT = so
+ LIB_SUFFIX = _amxx_i386
+ CFLAGS += -DLINUX
+ LINK += -shared
endif
+LINK += -m32 -lm -ldl
+
+CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror
+CPPFLAGS += -fno-exceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
+
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS = $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
BIN_DIR = Release
- CFLAGS = $(OPT_FLAGS)
+ CFLAGS += $(C_OPT_FLAGS)
+ LINK += -s
endif
-CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -fno-rtti -static-libgcc -m32
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-ifeq "$(AMD64)" "true"
- BINARY = $(NAME)_$(BIN_SUFFIX_64)
- CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
else
- BINARY = $(NAME)_$(BIN_SUFFIX_32)
- CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
- OPT_FLAGS += -march=i586
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
endif
-OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
all:
mkdir -p $(BIN_DIR)
mkdir -p $(BIN_DIR)/sdk
- $(MAKE) cstrike
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-amd64:
- $(MAKE) all AMD64=true
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
-cstrike: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
-
-debug:
- $(MAKE) all DEBUG=true
+debug:
+ $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
default: all
clean:
- rm -rf Release/sdk/*.o
- rm -rf Release/*.o
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_64)
- rm -rf Debug/sdk/*.o
- rm -rf Debug/*.o
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64)
+ rm -rf $(BIN_DIR)/*.o
+ rm -rf $(BIN_DIR)/sdk/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
+
diff --git a/dlls/cstrike/cstrike/cstrike.cpp b/dlls/cstrike/cstrike/cstrike.cpp
--- a/dlls/cstrike/cstrike/cstrike.cpp
+++ b/dlls/cstrike/cstrike/cstrike.cpp
@@ -44,17 +44,17 @@ bool UTIL_IsPlayer(AMX* amx, edict_t* pP
bool player = false;
if (strcmp(STRING(pPlayer->v.classname), "player") == 0)
player = true;
return player;
}
-void UTIL_TextMsg_Generic(edict_t* pPlayer, char* message)
+void UTIL_TextMsg_Generic(edict_t* pPlayer, const char* message)
{
MESSAGE_BEGIN(MSG_ONE, GET_USER_MSG_ID(PLID, "TextMsg", NULL), NULL, pPlayer);
WRITE_BYTE(HUD_PRINTCENTER); // 1 = console, 2 = console, 3 = chat, 4 = center
WRITE_STRING(message);
MESSAGE_END();
/*
The byte above seems to use these:
#define HUD_PRINTNOTIFY 1
@@ -741,17 +741,17 @@ static cell AMX_NATIVE_CALL cs_set_user_
if (params[i + 3] != -1)
{
colour[i] = params[i + 3];
}
}
pPlayer->v.body = 1;
- char* icon;
+ const char* icon;
if (params[6] != -1)
{
int len;
icon = MF_GetAmxString(amx, params[6], 1, &len);
} else {
icon = "defuser";
}
diff --git a/dlls/cstrike/cstrike/cstrike.h b/dlls/cstrike/cstrike/cstrike.h
--- a/dlls/cstrike/cstrike/cstrike.h
+++ b/dlls/cstrike/cstrike/cstrike.h
@@ -39,25 +39,25 @@
#include <meta_api.h>
#include "CstrikePlayer.h"
#define GETINFOKEYBUFFER (*g_engfuncs.pfnGetInfoKeyBuffer)
#define SETCLIENTKEYVALUE (*g_engfuncs.pfnSetClientKeyValue)
#define GETCLIENTKEYVALUE (*g_engfuncs.pfnInfoKeyValue)
#define CREATENAMEDENTITY (*g_engfuncs.pfnCreateNamedEntity)
-#if defined __linux__
+#if defined(__linux__) || defined (__APPLE__)
#define EXTRAOFFSET 5 // offsets 5 higher in Linux builds
#define EXTRAOFFSET_WEAPONS 4 // weapon offsets are obviously only 4 steps higher on Linux!
#define ACTUAL_EXTRA_OFFSET 20 // actual, byte-addressable offset
#else
#define EXTRAOFFSET 0 // no change in Windows builds
#define EXTRAOFFSET_WEAPONS 0
#define ACTUAL_EXTRA_OFFSET 0
-#endif // defined __linux__
+#endif // defined(__linux__) || defined(__APPLE__)
/*
Offset history:
041029:
Confirmed (pretty much) ALL offsets for 32 bit Windows, 32 bit Linux and amd64 (yes that's all of them).
Found out that weapon offsets are only +4 higher on Linux.
Also backpack ammo offsets were all obviously 5 steps too high since unknown time...
*/
@@ -153,16 +153,18 @@
#define OFFSET_SILENCER_FIREMODE 88 + EXTRAOFFSET // +14
// "hostage_entity" entities
#define OFFSET_HOSTAGEFOLLOW 51 + EXTRAOFFSET // +21, long=51, int=107! (must use the long* offset because pointers on amd64 are stored the size of longs, 8 bytes, instead of the usual int 4 bytes.)
#define OFFSET_HOSTAGEID 516 + EXTRAOFFSET // +29
#endif
#if defined __linux__
#define CS_DETOURCOPYBYTES_CLIENTCOMMAND 6
+#elif defined __APPLE__
+#define CS_DETOURCOPYBYTES_CLIENTCOMMAND 5
#else
#define CS_DETOURCOPYBYTES_CLIENTCOMMAND 6
#define CS_CLICMD_OFFS_USEBOTARGS 2
#define CS_CLICMD_OFFS_BOTARGS 22
#endif
// Ids of weapons in CS
diff --git a/dlls/cstrike/cstrike/sdk/amxxmodule.cpp b/dlls/cstrike/cstrike/sdk/amxxmodule.cpp
--- a/dlls/cstrike/cstrike/sdk/amxxmodule.cpp
+++ b/dlls/cstrike/cstrike/sdk/amxxmodule.cpp
@@ -2235,17 +2235,17 @@ static META_FUNCTIONS g_MetaFunctions_Ta
GetEntityAPI2,
GetEntityAPI2_Post,
GetNewDLLFunctions,
GetNewDLLFunctions_Post,
GetEngineFunctions,
GetEngineFunctions_Post
};
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
if ((int) CVAR_GET_FLOAT("developer") != 0)
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
Plugin_info.logtag, ifvers, Plugin_info.ifvers);
// Check for valid pMetaUtilFuncs before we continue.
if(!pMetaUtilFuncs) {
UTIL_LogPrintf("[%s] ERROR: Meta_Query called with null pMetaUtilFuncs\n", Plugin_info.logtag);
@@ -2329,17 +2329,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
#ifdef FN_META_DETACH
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
@@ -3045,17 +3045,17 @@ char* UTIL_VarArgs( char *format, ... )
return string;
}
//=========================================================
// UTIL_LogPrintf - Prints a logged message to console.
// Preceded by LOG: ( timestamp ) < message >
//=========================================================
-void UTIL_LogPrintf( char *fmt, ... )
+void UTIL_LogPrintf( const char *fmt, ... )
{
va_list argptr;
static char string[1024];
va_start ( argptr, fmt );
vsnprintf ( string, sizeof(string), fmt, argptr );
va_end ( argptr );
diff --git a/dlls/cstrike/cstrike/sdk/amxxmodule.h b/dlls/cstrike/cstrike/sdk/amxxmodule.h
--- a/dlls/cstrike/cstrike/sdk/amxxmodule.h
+++ b/dlls/cstrike/cstrike/sdk/amxxmodule.h
@@ -15,21 +15,26 @@
#ifdef USE_METAMOD
#include <extdll.h>
#include <meta_api.h>
#include "osdep.h"
#endif // #ifdef USE_METAMOD
// DLL Export
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
+#endif
+
+#if defined(__linux__) && !defined(LINUX)
#define LINUX
+#elif defined(__APPLE__) && !defined(OSX)
+#define OSX
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
// ***** AMXX stuff *****
// module interface version was 1
@@ -61,17 +66,17 @@ struct amxx_module_info_s
// *** Small stuff ***
// The next section is copied from the amx.h file
// Copyright (c) ITB CompuPhase, 1997-2005
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -303,17 +308,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -390,28 +395,28 @@ enum {
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
AMX_ERR_PARAMS, /* parameter error */
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
};
#if !defined AMX_NO_ALIGN
- #if defined __linux__
+ #if defined(__linux__) || defined(__APPLE__)
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions *****
#ifdef USE_METAMOD
-void UTIL_LogPrintf( char *fmt, ... );
+void UTIL_LogPrintf( const char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY
void FN_META_QUERY(void);
#endif // FN_META_QUERY
@@ -828,21 +833,21 @@ int FN_InconsistentFile_Post(const edict
#ifdef FN_AllowLagCompensation_Post
int FN_AllowLagCompensation_Post(void);
#endif // FN_AllowLagCompensation_Post
#ifdef FN_PrecacheModel
-int FN_PrecacheModel(char *s);
+int FN_PrecacheModel(const char *s);
#endif // FN_PrecacheModel
#ifdef FN_PrecacheSound
-int FN_PrecacheSound(char *s);
+int FN_PrecacheSound(const char *s);
#endif // FN_PrecacheSound
#ifdef FN_SetModel
void FN_SetModel(edict_t *e, const char *m);
#endif // FN_SetModel
#ifdef FN_ModelIndex
int FN_ModelIndex(const char *m);
@@ -852,17 +857,17 @@ int FN_ModelIndex(const char *m);
int FN_ModelFrames(int modelIndex);
#endif // FN_ModelFrames
#ifdef FN_SetSize
void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize
#ifdef FN_ChangeLevel
-void FN_ChangeLevel(char *s1, char *s2);
+void FN_ChangeLevel(const char *s1, const char *s2);
#endif // FN_ChangeLevel
#ifdef FN_GetSpawnParms
void FN_GetSpawnParms(edict_t *ent);
#endif // FN_GetSpawnParms
#ifdef FN_SaveSpawnParms
void FN_SaveSpawnParms(edict_t *ent);
@@ -1256,37 +1261,37 @@ void FN_RunPlayerMove(edict_t *fakeclien
int FN_NumberOfEntities(void);
#endif // FN_NumberOfEntities
#ifdef FN_GetInfoKeyBuffer
char *FN_GetInfoKeyBuffer(edict_t *e);
#endif // FN_GetInfoKeyBuffer
#ifdef FN_InfoKeyValue
-char *FN_InfoKeyValue(char *infobuffer, char *key);
+char *FN_InfoKeyValue(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue
#ifdef FN_SetKeyValue
-void FN_SetKeyValue(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue
#ifdef FN_SetClientKeyValue
-void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue
#ifdef FN_IsMapValid
-int FN_IsMapValid(char *filename);
+int FN_IsMapValid(const char *filename);
#endif // FN_IsMapValid
#ifdef FN_StaticDecal
void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal
#ifdef FN_PrecacheGeneric
-int FN_PrecacheGeneric(char *s);
+int FN_PrecacheGeneric(const char *s);
#endif // FN_PrecacheGeneric
#ifdef FN_GetPlayerUserId
int FN_GetPlayerUserId(edict_t *e );
#endif // FN_GetPlayerUserId
#ifdef FN_BuildSoundMsg
void FN_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -1409,21 +1414,21 @@ const char *FN_GetPlayerAuthId(edict_t *
#endif // FN_GetPlayerAuthId
#ifdef FN_PrecacheModel_Post
-int FN_PrecacheModel_Post(char *s);
+int FN_PrecacheModel_Post(const char *s);
#endif // FN_PrecacheModel_Post
#ifdef FN_PrecacheSound_Post
-int FN_PrecacheSound_Post(char *s);
+int FN_PrecacheSound_Post(const char *s);
#endif // FN_PrecacheSound_Post
#ifdef FN_SetModel_Post
void FN_SetModel_Post(edict_t *e, const char *m);
#endif // FN_SetModel_Post
#ifdef FN_ModelIndex_Post
int FN_ModelIndex_Post(const char *m);
@@ -1433,17 +1438,17 @@ int FN_ModelIndex_Post(const char *m);
int FN_ModelFrames_Post(int modelIndex);
#endif // FN_ModelFrames_Post
#ifdef FN_SetSize_Post
void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize_Post
#ifdef FN_ChangeLevel_Post
-void FN_ChangeLevel_Post(char *s1, char *s2);
+void FN_ChangeLevel_Post(const char *s1, const char *s2);
#endif // FN_ChangeLevel_Post
#ifdef FN_GetSpawnParms_Post
void FN_GetSpawnParms_Post(edict_t *ent);
#endif // FN_GetSpawnParms_Post
#ifdef FN_SaveSpawnParms_Post
void FN_SaveSpawnParms_Post(edict_t *ent);
@@ -1837,37 +1842,37 @@ void FN_RunPlayerMove_Post(edict_t *fake
int FN_NumberOfEntities_Post(void);
#endif // FN_NumberOfEntities_Post
#ifdef FN_GetInfoKeyBuffer_Post
char *FN_GetInfoKeyBuffer_Post(edict_t *e);
#endif // FN_GetInfoKeyBuffer_Post
#ifdef FN_InfoKeyValue_Post
-char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
+char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue_Post
#ifdef FN_SetKeyValue_Post
-void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue_Post
#ifdef FN_SetClientKeyValue_Post
-void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue_Post
#ifdef FN_IsMapValid_Post
-int FN_IsMapValid_Post(char *filename);
+int FN_IsMapValid_Post(const char *filename);
#endif // FN_IsMapValid_Post
#ifdef FN_StaticDecal_Post
void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal_Post
#ifdef FN_PrecacheGeneric_Post
-int FN_PrecacheGeneric_Post(char *s);
+int FN_PrecacheGeneric_Post(const char *s);
#endif // FN_PrecacheGeneric_Post
#ifdef FN_GetPlayerUserId_Post
int FN_GetPlayerUserId_Post(edict_t *e );
#endif // FN_GetPlayerUserId_Post
#ifdef FN_BuildSoundMsg_Post
void FN_BuildSoundMsg_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -2111,17 +2116,17 @@ enum LibType
typedef void (*AUTHORIZEFUNC)(int player, const char *authstring);
typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
-typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
+typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
typedef const char * (*PFN_GET_MODNAME) (void);
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/);
typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */);
typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/);
typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr);
@@ -2170,18 +2175,18 @@ typedef void * (*PFN_ALLOCATOR) (co
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ );
typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const void* /*addr*/ );
#endif
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
-typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
-typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
diff --git a/dlls/cstrike/csx/Makefile b/dlls/cstrike/csx/Makefile
--- a/dlls/cstrike/csx/Makefile
+++ b/dlls/cstrike/csx/Makefile
@@ -1,78 +1,123 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
-HLSDK = ../../../../hlsdk
+###########################################
+### EDIT THESE PATHS FOR YOUR OWN SETUP ###
+###########################################
+
+HLSDK = ../../../../hlsdk/multiplayer
MM_ROOT = ../../../../metamod/metamod
+#####################################
### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
-OPT_FLAGS = -O3 -funroll-loops -s -pipe -fomit-frame-pointer -fno-strict-aliasing
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-NAME = csx
-
-BIN_SUFFIX_32 = amxx_i386.so
-BIN_SUFFIX_64 = amxx_amd64.so
+PROJECT = csx
OBJECTS = sdk/amxxmodule.cpp CRank.cpp CMisc.cpp meta_api.cpp rank.cpp usermsg.cpp
-LINK =
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
-INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
- -I$(MM_ROOT) -I$(HLSDK)/common -Isdk
+C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
-GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+LINK =
-ifeq "$(GCC_VERSION)" "4"
- OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
+INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
+ -I$(MM_ROOT) -Isdk
+
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
+
+OS := $(shell uname -s)
+
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ LIB_SUFFIX = _amxx
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
+else
+ LIB_EXT = so
+ LIB_SUFFIX = _amxx_i386
+ CFLAGS += -DLINUX
+ LINK += -shared
endif
+LINK += -m32 -lm -ldl
+
+CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror
+CPPFLAGS += -fno-exceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
+
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS = $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
BIN_DIR = Release
- CFLAGS = $(OPT_FLAGS)
+ CFLAGS += $(C_OPT_FLAGS)
+ LINK += -s
endif
-CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -m32
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-ifeq "$(AMD64)" "true"
- BINARY = $(NAME)_$(BIN_SUFFIX_64)
- CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
else
- BINARY = $(NAME)_$(BIN_SUFFIX_32)
- CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
- OPT_FLAGS += -march=i586
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
endif
-OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
all:
mkdir -p $(BIN_DIR)
mkdir -p $(BIN_DIR)/sdk
- $(MAKE) csx
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-amd64:
- $(MAKE) all AMD64=true
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
-csx: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
-
-debug:
- $(MAKE) all DEBUG=true
+debug:
+ $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
default: all
clean:
- rm -rf Release/sdk/*.o
- rm -rf Release/*.o
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_64)
- rm -rf Debug/sdk/*.o
- rm -rf Debug/*.o
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64)
+ rm -rf $(BIN_DIR)/*.o
+ rm -rf $(BIN_DIR)/sdk/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
+
diff --git a/dlls/cstrike/csx/sdk/amxxmodule.cpp b/dlls/cstrike/csx/sdk/amxxmodule.cpp
--- a/dlls/cstrike/csx/sdk/amxxmodule.cpp
+++ b/dlls/cstrike/csx/sdk/amxxmodule.cpp
@@ -2235,17 +2235,17 @@ static META_FUNCTIONS g_MetaFunctions_Ta
GetEntityAPI2,
GetEntityAPI2_Post,
GetNewDLLFunctions,
GetNewDLLFunctions_Post,
GetEngineFunctions,
GetEngineFunctions_Post
};
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
if ((int) CVAR_GET_FLOAT("developer") != 0)
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
Plugin_info.logtag, ifvers, Plugin_info.ifvers);
// Check for valid pMetaUtilFuncs before we continue.
if(!pMetaUtilFuncs) {
UTIL_LogPrintf("[%s] ERROR: Meta_Query called with null pMetaUtilFuncs\n", Plugin_info.logtag);
@@ -2329,17 +2329,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
#ifdef FN_META_DETACH
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
@@ -3045,17 +3045,17 @@ char* UTIL_VarArgs( char *format, ... )
return string;
}
//=========================================================
// UTIL_LogPrintf - Prints a logged message to console.
// Preceded by LOG: ( timestamp ) < message >
//=========================================================
-void UTIL_LogPrintf( char *fmt, ... )
+void UTIL_LogPrintf( const char *fmt, ... )
{
va_list argptr;
static char string[1024];
va_start ( argptr, fmt );
vsnprintf ( string, sizeof(string), fmt, argptr );
va_end ( argptr );
diff --git a/dlls/cstrike/csx/sdk/amxxmodule.h b/dlls/cstrike/csx/sdk/amxxmodule.h
--- a/dlls/cstrike/csx/sdk/amxxmodule.h
+++ b/dlls/cstrike/csx/sdk/amxxmodule.h
@@ -15,21 +15,26 @@
#ifdef USE_METAMOD
#include <extdll.h>
#include <meta_api.h>
#include "osdep.h"
#endif // #ifdef USE_METAMOD
// DLL Export
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
+#endif
+
+#if defined(__linux__) && !defined(LINUX)
#define LINUX
+#elif defined(__APPLE__) && !defined(OSX)
+#define OSX
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
// ***** AMXX stuff *****
// module interface version was 1
@@ -61,17 +66,17 @@ struct amxx_module_info_s
// *** Small stuff ***
// The next section is copied from the amx.h file
// Copyright (c) ITB CompuPhase, 1997-2005
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -303,17 +308,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -390,28 +395,28 @@ enum {
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
AMX_ERR_PARAMS, /* parameter error */
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
};
#if !defined AMX_NO_ALIGN
- #if defined __linux__
+ #if defined(__linux__) || defined(__APPLE__)
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions *****
#ifdef USE_METAMOD
-void UTIL_LogPrintf( char *fmt, ... );
+void UTIL_LogPrintf( const char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY
void FN_META_QUERY(void);
#endif // FN_META_QUERY
@@ -828,21 +833,21 @@ int FN_InconsistentFile_Post(const edict
#ifdef FN_AllowLagCompensation_Post
int FN_AllowLagCompensation_Post(void);
#endif // FN_AllowLagCompensation_Post
#ifdef FN_PrecacheModel
-int FN_PrecacheModel(char *s);
+int FN_PrecacheModel(const char *s);
#endif // FN_PrecacheModel
#ifdef FN_PrecacheSound
-int FN_PrecacheSound(char *s);
+int FN_PrecacheSound(const char *s);
#endif // FN_PrecacheSound
#ifdef FN_SetModel
void FN_SetModel(edict_t *e, const char *m);
#endif // FN_SetModel
#ifdef FN_ModelIndex
int FN_ModelIndex(const char *m);
@@ -852,17 +857,17 @@ int FN_ModelIndex(const char *m);
int FN_ModelFrames(int modelIndex);
#endif // FN_ModelFrames
#ifdef FN_SetSize
void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize
#ifdef FN_ChangeLevel
-void FN_ChangeLevel(char *s1, char *s2);
+void FN_ChangeLevel(const char *s1, const char *s2);
#endif // FN_ChangeLevel
#ifdef FN_GetSpawnParms
void FN_GetSpawnParms(edict_t *ent);
#endif // FN_GetSpawnParms
#ifdef FN_SaveSpawnParms
void FN_SaveSpawnParms(edict_t *ent);
@@ -1256,37 +1261,37 @@ void FN_RunPlayerMove(edict_t *fakeclien
int FN_NumberOfEntities(void);
#endif // FN_NumberOfEntities
#ifdef FN_GetInfoKeyBuffer
char *FN_GetInfoKeyBuffer(edict_t *e);
#endif // FN_GetInfoKeyBuffer
#ifdef FN_InfoKeyValue
-char *FN_InfoKeyValue(char *infobuffer, char *key);
+char *FN_InfoKeyValue(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue
#ifdef FN_SetKeyValue
-void FN_SetKeyValue(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue
#ifdef FN_SetClientKeyValue
-void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue
#ifdef FN_IsMapValid
-int FN_IsMapValid(char *filename);
+int FN_IsMapValid(const char *filename);
#endif // FN_IsMapValid
#ifdef FN_StaticDecal
void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal
#ifdef FN_PrecacheGeneric
-int FN_PrecacheGeneric(char *s);
+int FN_PrecacheGeneric(const char *s);
#endif // FN_PrecacheGeneric
#ifdef FN_GetPlayerUserId
int FN_GetPlayerUserId(edict_t *e );
#endif // FN_GetPlayerUserId
#ifdef FN_BuildSoundMsg
void FN_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -1409,21 +1414,21 @@ const char *FN_GetPlayerAuthId(edict_t *
#endif // FN_GetPlayerAuthId
#ifdef FN_PrecacheModel_Post
-int FN_PrecacheModel_Post(char *s);
+int FN_PrecacheModel_Post(const char *s);
#endif // FN_PrecacheModel_Post
#ifdef FN_PrecacheSound_Post
-int FN_PrecacheSound_Post(char *s);
+int FN_PrecacheSound_Post(const char *s);
#endif // FN_PrecacheSound_Post
#ifdef FN_SetModel_Post
void FN_SetModel_Post(edict_t *e, const char *m);
#endif // FN_SetModel_Post
#ifdef FN_ModelIndex_Post
int FN_ModelIndex_Post(const char *m);
@@ -1433,17 +1438,17 @@ int FN_ModelIndex_Post(const char *m);
int FN_ModelFrames_Post(int modelIndex);
#endif // FN_ModelFrames_Post
#ifdef FN_SetSize_Post
void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize_Post
#ifdef FN_ChangeLevel_Post
-void FN_ChangeLevel_Post(char *s1, char *s2);
+void FN_ChangeLevel_Post(const char *s1, const char *s2);
#endif // FN_ChangeLevel_Post
#ifdef FN_GetSpawnParms_Post
void FN_GetSpawnParms_Post(edict_t *ent);
#endif // FN_GetSpawnParms_Post
#ifdef FN_SaveSpawnParms_Post
void FN_SaveSpawnParms_Post(edict_t *ent);
@@ -1837,37 +1842,37 @@ void FN_RunPlayerMove_Post(edict_t *fake
int FN_NumberOfEntities_Post(void);
#endif // FN_NumberOfEntities_Post
#ifdef FN_GetInfoKeyBuffer_Post
char *FN_GetInfoKeyBuffer_Post(edict_t *e);
#endif // FN_GetInfoKeyBuffer_Post
#ifdef FN_InfoKeyValue_Post
-char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
+char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue_Post
#ifdef FN_SetKeyValue_Post
-void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue_Post
#ifdef FN_SetClientKeyValue_Post
-void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue_Post
#ifdef FN_IsMapValid_Post
-int FN_IsMapValid_Post(char *filename);
+int FN_IsMapValid_Post(const char *filename);
#endif // FN_IsMapValid_Post
#ifdef FN_StaticDecal_Post
void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal_Post
#ifdef FN_PrecacheGeneric_Post
-int FN_PrecacheGeneric_Post(char *s);
+int FN_PrecacheGeneric_Post(const char *s);
#endif // FN_PrecacheGeneric_Post
#ifdef FN_GetPlayerUserId_Post
int FN_GetPlayerUserId_Post(edict_t *e );
#endif // FN_GetPlayerUserId_Post
#ifdef FN_BuildSoundMsg_Post
void FN_BuildSoundMsg_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -2111,17 +2116,17 @@ enum LibType
typedef void (*AUTHORIZEFUNC)(int player, const char *authstring);
typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
-typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
+typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
typedef const char * (*PFN_GET_MODNAME) (void);
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/);
typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */);
typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/);
typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr);
@@ -2170,18 +2175,18 @@ typedef void * (*PFN_ALLOCATOR) (co
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ );
typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const void* /*addr*/ );
#endif
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
-typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
-typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
diff --git a/dlls/dod/dodfun/CMisc.cpp b/dlls/dod/dodfun/CMisc.cpp
--- a/dlls/dod/dodfun/CMisc.cpp
+++ b/dlls/dod/dodfun/CMisc.cpp
@@ -62,17 +62,17 @@ void CPlayer::Init( int pi, edict_t* pe
void CPlayer::killPlayer(){
pEdict->v.dmg_inflictor = NULL;
pEdict->v.health = 0;
pEdict->v.deadflag = DEAD_RESPAWNABLE;
pEdict->v.weaponmodel = 0;
pEdict->v.weapons = 0;
}
-void CPlayer::setTeamName( char *szName ){
+void CPlayer::setTeamName( const char *szName ){
for (int i=0;i<16;i++){
*( (char*)pEdict->pvPrivateData + STEAM_PDOFFSET_TEAMNAME + i ) = szName[i];
}
}
void CPlayer::getTeamName(char * szName ){
for (int i=0;i<16;i++){
diff --git a/dlls/dod/dodfun/CMisc.h b/dlls/dod/dodfun/CMisc.h
--- a/dlls/dod/dodfun/CMisc.h
+++ b/dlls/dod/dodfun/CMisc.h
@@ -27,17 +27,17 @@
* you do not wish to do so, delete this exception statement from your
* version.
*
*/
#ifndef CMISC_H
#define CMISC_H
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define LINUXOFFSET 0
#else
#define LINUXOFFSET 5
#endif
#define DODFUN_VERSION "1.0.2"
// DoD Player
@@ -48,17 +48,17 @@
#define STEAM_PDOFFSET_RCLASS 367 + LINUXOFFSET // random class
#define STEAM_PDOFFSET_SCORE 475 + LINUXOFFSET // score
#define STEAM_PDOFFSET_DEATHS 476 + LINUXOFFSET // deaths
// DoD Control Point
struct pd_dcp {
int iunk_0;
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
int iunk_1; // windows only
#endif
int iunk_2; // pointer edict_t*
int iunk_3;
float origin_x;
float origin_y;
float origin_z; // 6
@@ -77,17 +77,17 @@ struct pd_dcp {
// 19 - spawnflags ?
// 20-int , always 1
int unknown_block1[19];
int iunk_35; // pointer entvars_t*
int iunk_36; // pointer entvars_t*
int unknown_block2[52];
int iunk_89; // pointer entvars_t*
-#ifdef __linux__
+#if defined (__linux__) || defined (__APPLE__)
int iunk_extra1;
int iunk_extra2;
int iunk_extra3;
int iunk_extra4;
#endif
int owner; // 90
int iunk_91;
int iunk_92;
@@ -124,17 +124,17 @@ struct pd_dcp {
#define GET_CP_PD( x ) (*(pd_dcp*)x->pvPrivateData)
// DoD Capture Area
struct pd_dca {
int iunk_0;
int iunk_1;
int iunk_2;
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
int iunk_3; // if def windows
#endif
float origin_x;
float origin_y;
float origin_z; // 6
float mins_x;
@@ -145,17 +145,17 @@ struct pd_dca {
float maxs_y;
float maxs_z;
float angles_x;
float angles_y;
float angles_z; // 15
// 16-135
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
int unknown_block_16[111];
#else
int unknown_block_16[116]; // linux +5 more
#endif
int time_to_cap; // 127
int iunk_128;
int allies_numcap; // 129
@@ -258,17 +258,17 @@ public:
bool ingame;
bool bot;
void Init( int pi, edict_t* pe );
void Connect();
void PutInServer();
void Disconnect();
void killPlayer();
- void setTeamName( char *szName );
+ void setTeamName( const char *szName );
void getTeamName( char *szName );
inline bool IsBot(){
const char* auth= (*g_engfuncs.pfnGetPlayerAuthId)(pEdict);
return ( auth && !strcmp( auth , "BOT" ) );
}
inline bool IsAlive(){
return ((pEdict->v.deadflag==DEAD_NO)&&(pEdict->v.health>0));
diff --git a/dlls/dod/dodfun/Makefile b/dlls/dod/dodfun/Makefile
--- a/dlls/dod/dodfun/Makefile
+++ b/dlls/dod/dodfun/Makefile
@@ -1,67 +1,123 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
-HLSDK = ../../../../hlsdk
+###########################################
+### EDIT THESE PATHS FOR YOUR OWN SETUP ###
+###########################################
+
+HLSDK = ../../../../hlsdk/multiplayer
MM_ROOT = ../../../../metamod/metamod
+#####################################
### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
-OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-NAME = dodfun
-
-BIN_SUFFIX = amxx_i386.so
+PROJECT = dodfun
OBJECTS = sdk/amxxmodule.cpp NBase.cpp CMisc.cpp NPD.cpp Utils.cpp usermsg.cpp moduleconfig.cpp
-LINK =
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
-INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
- -I$(MM_ROOT) -I$(HLSDK)/common -Isdk
+C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
-GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+LINK =
-ifeq "$(GCC_VERSION)" "4"
- OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
+INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
+ -I$(MM_ROOT) -Isdk
+
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
+
+OS := $(shell uname -s)
+
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ LIB_SUFFIX = _amxx
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
+else
+ LIB_EXT = so
+ LIB_SUFFIX = _amxx_i386
+ CFLAGS += -DLINUX
+ LINK += -shared
endif
+LINK += -m32 -lm -ldl
+
+CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror
+CPPFLAGS += -fno-exceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
+
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS = $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
BIN_DIR = Release
- CFLAGS = $(OPT_FLAGS)
+ CFLAGS += $(C_OPT_FLAGS)
+ LINK += -s
endif
-CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -m32
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-BINARY = $(NAME)_$(BIN_SUFFIX)
-CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
-OPT_FLAGS += -march=i586
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
+else
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
+endif
-OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
all:
mkdir -p $(BIN_DIR)
mkdir -p $(BIN_DIR)/sdk
- $(MAKE) dodfun
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-dodfun: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
-debug:
- $(MAKE) all DEBUG=true
+debug:
+ $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
default: all
clean:
- rm -rf Release/sdk/*.o
- rm -rf Release/*.o
- rm -rf Release/$(NAME)_$(BIN_SUFFIX)
- rm -rf Debug/sdk/*.o
- rm -rf Debug/*.o
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX)
+ rm -rf $(BIN_DIR)/*.o
+ rm -rf $(BIN_DIR)/sdk/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
+
diff --git a/dlls/dod/dodfun/sdk/amxxmodule.cpp b/dlls/dod/dodfun/sdk/amxxmodule.cpp
--- a/dlls/dod/dodfun/sdk/amxxmodule.cpp
+++ b/dlls/dod/dodfun/sdk/amxxmodule.cpp
@@ -2235,17 +2235,17 @@ static META_FUNCTIONS g_MetaFunctions_Ta
GetEntityAPI2,
GetEntityAPI2_Post,
GetNewDLLFunctions,
GetNewDLLFunctions_Post,
GetEngineFunctions,
GetEngineFunctions_Post
};
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
if ((int) CVAR_GET_FLOAT("developer") != 0)
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
Plugin_info.logtag, ifvers, Plugin_info.ifvers);
// Check for valid pMetaUtilFuncs before we continue.
if(!pMetaUtilFuncs) {
UTIL_LogPrintf("[%s] ERROR: Meta_Query called with null pMetaUtilFuncs\n", Plugin_info.logtag);
@@ -2329,17 +2329,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
#ifdef FN_META_DETACH
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
@@ -3045,17 +3045,17 @@ char* UTIL_VarArgs( char *format, ... )
return string;
}
//=========================================================
// UTIL_LogPrintf - Prints a logged message to console.
// Preceded by LOG: ( timestamp ) < message >
//=========================================================
-void UTIL_LogPrintf( char *fmt, ... )
+void UTIL_LogPrintf( const char *fmt, ... )
{
va_list argptr;
static char string[1024];
va_start ( argptr, fmt );
vsnprintf ( string, sizeof(string), fmt, argptr );
va_end ( argptr );
diff --git a/dlls/dod/dodfun/sdk/amxxmodule.h b/dlls/dod/dodfun/sdk/amxxmodule.h
--- a/dlls/dod/dodfun/sdk/amxxmodule.h
+++ b/dlls/dod/dodfun/sdk/amxxmodule.h
@@ -15,21 +15,26 @@
#ifdef USE_METAMOD
#include <extdll.h>
#include <meta_api.h>
#include "osdep.h"
#endif // #ifdef USE_METAMOD
// DLL Export
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
+#endif
+
+#if defined(__linux__) && !defined(LINUX)
#define LINUX
+#elif defined(__APPLE__) && !defined(OSX)
+#define OSX
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
// ***** AMXX stuff *****
// module interface version was 1
@@ -61,17 +66,17 @@ struct amxx_module_info_s
// *** Small stuff ***
// The next section is copied from the amx.h file
// Copyright (c) ITB CompuPhase, 1997-2005
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -303,17 +308,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -390,28 +395,28 @@ enum {
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
AMX_ERR_PARAMS, /* parameter error */
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
};
#if !defined AMX_NO_ALIGN
- #if defined __linux__
+ #if defined(__linux__) || defined(__APPLE__)
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions *****
#ifdef USE_METAMOD
-void UTIL_LogPrintf( char *fmt, ... );
+void UTIL_LogPrintf( const char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY
void FN_META_QUERY(void);
#endif // FN_META_QUERY
@@ -828,21 +833,21 @@ int FN_InconsistentFile_Post(const edict
#ifdef FN_AllowLagCompensation_Post
int FN_AllowLagCompensation_Post(void);
#endif // FN_AllowLagCompensation_Post
#ifdef FN_PrecacheModel
-int FN_PrecacheModel(char *s);
+int FN_PrecacheModel(const char *s);
#endif // FN_PrecacheModel
#ifdef FN_PrecacheSound
-int FN_PrecacheSound(char *s);
+int FN_PrecacheSound(const char *s);
#endif // FN_PrecacheSound
#ifdef FN_SetModel
void FN_SetModel(edict_t *e, const char *m);
#endif // FN_SetModel
#ifdef FN_ModelIndex
int FN_ModelIndex(const char *m);
@@ -852,17 +857,17 @@ int FN_ModelIndex(const char *m);
int FN_ModelFrames(int modelIndex);
#endif // FN_ModelFrames
#ifdef FN_SetSize
void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize
#ifdef FN_ChangeLevel
-void FN_ChangeLevel(char *s1, char *s2);
+void FN_ChangeLevel(const char *s1, const char *s2);
#endif // FN_ChangeLevel
#ifdef FN_GetSpawnParms
void FN_GetSpawnParms(edict_t *ent);
#endif // FN_GetSpawnParms
#ifdef FN_SaveSpawnParms
void FN_SaveSpawnParms(edict_t *ent);
@@ -1256,37 +1261,37 @@ void FN_RunPlayerMove(edict_t *fakeclien
int FN_NumberOfEntities(void);
#endif // FN_NumberOfEntities
#ifdef FN_GetInfoKeyBuffer
char *FN_GetInfoKeyBuffer(edict_t *e);
#endif // FN_GetInfoKeyBuffer
#ifdef FN_InfoKeyValue
-char *FN_InfoKeyValue(char *infobuffer, char *key);
+char *FN_InfoKeyValue(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue
#ifdef FN_SetKeyValue
-void FN_SetKeyValue(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue
#ifdef FN_SetClientKeyValue
-void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue
#ifdef FN_IsMapValid
-int FN_IsMapValid(char *filename);
+int FN_IsMapValid(const char *filename);
#endif // FN_IsMapValid
#ifdef FN_StaticDecal
void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal
#ifdef FN_PrecacheGeneric
-int FN_PrecacheGeneric(char *s);
+int FN_PrecacheGeneric(const char *s);
#endif // FN_PrecacheGeneric
#ifdef FN_GetPlayerUserId
int FN_GetPlayerUserId(edict_t *e );
#endif // FN_GetPlayerUserId
#ifdef FN_BuildSoundMsg
void FN_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -1409,21 +1414,21 @@ const char *FN_GetPlayerAuthId(edict_t *
#endif // FN_GetPlayerAuthId
#ifdef FN_PrecacheModel_Post
-int FN_PrecacheModel_Post(char *s);
+int FN_PrecacheModel_Post(const char *s);
#endif // FN_PrecacheModel_Post
#ifdef FN_PrecacheSound_Post
-int FN_PrecacheSound_Post(char *s);
+int FN_PrecacheSound_Post(const char *s);
#endif // FN_PrecacheSound_Post
#ifdef FN_SetModel_Post
void FN_SetModel_Post(edict_t *e, const char *m);
#endif // FN_SetModel_Post
#ifdef FN_ModelIndex_Post
int FN_ModelIndex_Post(const char *m);
@@ -1433,17 +1438,17 @@ int FN_ModelIndex_Post(const char *m);
int FN_ModelFrames_Post(int modelIndex);
#endif // FN_ModelFrames_Post
#ifdef FN_SetSize_Post
void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize_Post
#ifdef FN_ChangeLevel_Post
-void FN_ChangeLevel_Post(char *s1, char *s2);
+void FN_ChangeLevel_Post(const char *s1, const char *s2);
#endif // FN_ChangeLevel_Post
#ifdef FN_GetSpawnParms_Post
void FN_GetSpawnParms_Post(edict_t *ent);
#endif // FN_GetSpawnParms_Post
#ifdef FN_SaveSpawnParms_Post
void FN_SaveSpawnParms_Post(edict_t *ent);
@@ -1837,37 +1842,37 @@ void FN_RunPlayerMove_Post(edict_t *fake
int FN_NumberOfEntities_Post(void);
#endif // FN_NumberOfEntities_Post
#ifdef FN_GetInfoKeyBuffer_Post
char *FN_GetInfoKeyBuffer_Post(edict_t *e);
#endif // FN_GetInfoKeyBuffer_Post
#ifdef FN_InfoKeyValue_Post
-char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
+char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue_Post
#ifdef FN_SetKeyValue_Post
-void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue_Post
#ifdef FN_SetClientKeyValue_Post
-void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue_Post
#ifdef FN_IsMapValid_Post
-int FN_IsMapValid_Post(char *filename);
+int FN_IsMapValid_Post(const char *filename);
#endif // FN_IsMapValid_Post
#ifdef FN_StaticDecal_Post
void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal_Post
#ifdef FN_PrecacheGeneric_Post
-int FN_PrecacheGeneric_Post(char *s);
+int FN_PrecacheGeneric_Post(const char *s);
#endif // FN_PrecacheGeneric_Post
#ifdef FN_GetPlayerUserId_Post
int FN_GetPlayerUserId_Post(edict_t *e );
#endif // FN_GetPlayerUserId_Post
#ifdef FN_BuildSoundMsg_Post
void FN_BuildSoundMsg_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -2111,17 +2116,17 @@ enum LibType
typedef void (*AUTHORIZEFUNC)(int player, const char *authstring);
typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
-typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
+typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
typedef const char * (*PFN_GET_MODNAME) (void);
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/);
typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */);
typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/);
typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr);
@@ -2170,18 +2175,18 @@ typedef void * (*PFN_ALLOCATOR) (co
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ );
typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const void* /*addr*/ );
#endif
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
-typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
-typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
diff --git a/dlls/dod/dodx/CMisc.h b/dlls/dod/dodx/CMisc.h
--- a/dlls/dod/dodx/CMisc.h
+++ b/dlls/dod/dodx/CMisc.h
@@ -32,17 +32,17 @@
#ifndef CMISC_H
#define CMISC_H
#include "CRank.h"
#define DODMAX_CUSTOMWPNS 5 // custom weapons
#define DODMAX_WEAPONS 42 + DODMAX_CUSTOMWPNS
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define LINUXOFFSET 0
#else
#define LINUXOFFSET 5
#endif
#define DOD_VERSION "0.1"
#define MAX_TRACE 6
diff --git a/dlls/dod/dodx/Makefile b/dlls/dod/dodx/Makefile
--- a/dlls/dod/dodx/Makefile
+++ b/dlls/dod/dodx/Makefile
@@ -1,67 +1,123 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
-HLSDK = ../../../../hlsdk
+###########################################
+### EDIT THESE PATHS FOR YOUR OWN SETUP ###
+###########################################
+
+HLSDK = ../../../../hlsdk/multiplayer
MM_ROOT = ../../../../metamod/metamod
+#####################################
### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
-OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-NAME = dodx
-
-BIN_SUFFIX = amxx_i386.so
+PROJECT = dodx
OBJECTS = sdk/amxxmodule.cpp CRank.cpp CMisc.cpp NBase.cpp NRank.cpp usermsg.cpp Utils.cpp moduleconfig.cpp
-LINK =
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
-INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
- -I$(MM_ROOT) -I$(HLSDK)/common -Isdk
+C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
-GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+LINK =
-ifeq "$(GCC_VERSION)" "4"
- OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
+INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
+ -I$(MM_ROOT) -Isdk
+
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
+
+OS := $(shell uname -s)
+
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ LIB_SUFFIX = _amxx
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
+else
+ LIB_EXT = so
+ LIB_SUFFIX = _amxx_i386
+ CFLAGS += -DLINUX
+ LINK += -shared
endif
+LINK += -m32 -lm -ldl
+
+CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror
+CPPFLAGS += -fno-exceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
+
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS = $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
BIN_DIR = Release
- CFLAGS = $(OPT_FLAGS)
+ CFLAGS += $(C_OPT_FLAGS)
+ LINK += -s
endif
-CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -m32
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-BINARY = $(NAME)_$(BIN_SUFFIX)
-CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
-OPT_FLAGS += -march=i586
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
+else
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
+endif
-OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
all:
mkdir -p $(BIN_DIR)
mkdir -p $(BIN_DIR)/sdk
- $(MAKE) dodx
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-dodx: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
-debug:
- $(MAKE) all DEBUG=true
+debug:
+ $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
default: all
clean:
- rm -rf Release/sdk/*.o
- rm -rf Release/*.o
- rm -rf Release/$(NAME)_$(BIN_SUFFIX)
- rm -rf Debug/sdk/*.o
- rm -rf Debug/*.o
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX)
+ rm -rf $(BIN_DIR)/*.o
+ rm -rf $(BIN_DIR)/sdk/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
+
diff --git a/dlls/dod/dodx/NBase.cpp b/dlls/dod/dodx/NBase.cpp
--- a/dlls/dod/dodx/NBase.cpp
+++ b/dlls/dod/dodx/NBase.cpp
@@ -485,17 +485,17 @@ static cell AMX_NATIVE_CALL get_user_tea
int index = params[1];
CHECK_PLAYER(index);
CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
int iTeam = pPlayer->pEdict->v.team;
if ( params[3] )
{
- char *szTeam = "";
+ const char *szTeam = "";
switch(iTeam)
{
case 1:
szTeam = "Allies";
break;
case 2:
szTeam = "Axis";
diff --git a/dlls/dod/dodx/moduleconfig.cpp b/dlls/dod/dodx/moduleconfig.cpp
--- a/dlls/dod/dodx/moduleconfig.cpp
+++ b/dlls/dod/dodx/moduleconfig.cpp
@@ -425,17 +425,17 @@ void DispatchKeyValue_Post( edict_t *pen
}
}
else if ( pkvd->szKeyName[12]=='p' ) g_map.detect_axis_paras=atoi(pkvd->szValue);
}
}
RETURN_META(MRES_IGNORED);
}
-void SetClientKeyValue(int id, char *protocol, char *type, char *var)
+void SetClientKeyValue(int id, char *protocol, const char *type, const char *var)
{
// ID: Number
// protocol: \name\Sgt.MEOW\topcolor\1\bottomcolor\1\cl_lw\1\team\axis\model\axis-inf
// type: model
// var: axis-inf
// Check to see if its a player and we are setting a model
if(strcmp(type, "model") == 0 &&
diff --git a/dlls/dod/dodx/sdk/amxxmodule.cpp b/dlls/dod/dodx/sdk/amxxmodule.cpp
--- a/dlls/dod/dodx/sdk/amxxmodule.cpp
+++ b/dlls/dod/dodx/sdk/amxxmodule.cpp
@@ -2235,17 +2235,17 @@ static META_FUNCTIONS g_MetaFunctions_Ta
GetEntityAPI2,
GetEntityAPI2_Post,
GetNewDLLFunctions,
GetNewDLLFunctions_Post,
GetEngineFunctions,
GetEngineFunctions_Post
};
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
if ((int) CVAR_GET_FLOAT("developer") != 0)
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
Plugin_info.logtag, ifvers, Plugin_info.ifvers);
// Check for valid pMetaUtilFuncs before we continue.
if(!pMetaUtilFuncs) {
UTIL_LogPrintf("[%s] ERROR: Meta_Query called with null pMetaUtilFuncs\n", Plugin_info.logtag);
@@ -2329,17 +2329,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
#ifdef FN_META_DETACH
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
@@ -3045,17 +3045,17 @@ char* UTIL_VarArgs( char *format, ... )
return string;
}
//=========================================================
// UTIL_LogPrintf - Prints a logged message to console.
// Preceded by LOG: ( timestamp ) < message >
//=========================================================
-void UTIL_LogPrintf( char *fmt, ... )
+void UTIL_LogPrintf( const char *fmt, ... )
{
va_list argptr;
static char string[1024];
va_start ( argptr, fmt );
vsnprintf ( string, sizeof(string), fmt, argptr );
va_end ( argptr );
diff --git a/dlls/dod/dodx/sdk/amxxmodule.h b/dlls/dod/dodx/sdk/amxxmodule.h
--- a/dlls/dod/dodx/sdk/amxxmodule.h
+++ b/dlls/dod/dodx/sdk/amxxmodule.h
@@ -15,21 +15,26 @@
#ifdef USE_METAMOD
#include <extdll.h>
#include <meta_api.h>
#include "osdep.h"
#endif // #ifdef USE_METAMOD
// DLL Export
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
+#endif
+
+#if defined(__linux__) && !defined(LINUX)
#define LINUX
+#elif defined(__APPLE__) && !defined(OSX)
+#define OSX
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
// ***** AMXX stuff *****
// module interface version was 1
@@ -61,17 +66,17 @@ struct amxx_module_info_s
// *** Small stuff ***
// The next section is copied from the amx.h file
// Copyright (c) ITB CompuPhase, 1997-2005
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -303,17 +308,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -390,28 +395,28 @@ enum {
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
AMX_ERR_PARAMS, /* parameter error */
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
};
#if !defined AMX_NO_ALIGN
- #if defined __linux__
+ #if defined(__linux__) || defined(__APPLE__)
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions *****
#ifdef USE_METAMOD
-void UTIL_LogPrintf( char *fmt, ... );
+void UTIL_LogPrintf( const char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY
void FN_META_QUERY(void);
#endif // FN_META_QUERY
@@ -828,21 +833,21 @@ int FN_InconsistentFile_Post(const edict
#ifdef FN_AllowLagCompensation_Post
int FN_AllowLagCompensation_Post(void);
#endif // FN_AllowLagCompensation_Post
#ifdef FN_PrecacheModel
-int FN_PrecacheModel(char *s);
+int FN_PrecacheModel(const char *s);
#endif // FN_PrecacheModel
#ifdef FN_PrecacheSound
-int FN_PrecacheSound(char *s);
+int FN_PrecacheSound(const char *s);
#endif // FN_PrecacheSound
#ifdef FN_SetModel
void FN_SetModel(edict_t *e, const char *m);
#endif // FN_SetModel
#ifdef FN_ModelIndex
int FN_ModelIndex(const char *m);
@@ -852,17 +857,17 @@ int FN_ModelIndex(const char *m);
int FN_ModelFrames(int modelIndex);
#endif // FN_ModelFrames
#ifdef FN_SetSize
void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize
#ifdef FN_ChangeLevel
-void FN_ChangeLevel(char *s1, char *s2);
+void FN_ChangeLevel(const char *s1, const char *s2);
#endif // FN_ChangeLevel
#ifdef FN_GetSpawnParms
void FN_GetSpawnParms(edict_t *ent);
#endif // FN_GetSpawnParms
#ifdef FN_SaveSpawnParms
void FN_SaveSpawnParms(edict_t *ent);
@@ -1256,37 +1261,37 @@ void FN_RunPlayerMove(edict_t *fakeclien
int FN_NumberOfEntities(void);
#endif // FN_NumberOfEntities
#ifdef FN_GetInfoKeyBuffer
char *FN_GetInfoKeyBuffer(edict_t *e);
#endif // FN_GetInfoKeyBuffer
#ifdef FN_InfoKeyValue
-char *FN_InfoKeyValue(char *infobuffer, char *key);
+char *FN_InfoKeyValue(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue
#ifdef FN_SetKeyValue
-void FN_SetKeyValue(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue
#ifdef FN_SetClientKeyValue
-void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue
#ifdef FN_IsMapValid
-int FN_IsMapValid(char *filename);
+int FN_IsMapValid(const char *filename);
#endif // FN_IsMapValid
#ifdef FN_StaticDecal
void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal
#ifdef FN_PrecacheGeneric
-int FN_PrecacheGeneric(char *s);
+int FN_PrecacheGeneric(const char *s);
#endif // FN_PrecacheGeneric
#ifdef FN_GetPlayerUserId
int FN_GetPlayerUserId(edict_t *e );
#endif // FN_GetPlayerUserId
#ifdef FN_BuildSoundMsg
void FN_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -1409,21 +1414,21 @@ const char *FN_GetPlayerAuthId(edict_t *
#endif // FN_GetPlayerAuthId
#ifdef FN_PrecacheModel_Post
-int FN_PrecacheModel_Post(char *s);
+int FN_PrecacheModel_Post(const char *s);
#endif // FN_PrecacheModel_Post
#ifdef FN_PrecacheSound_Post
-int FN_PrecacheSound_Post(char *s);
+int FN_PrecacheSound_Post(const char *s);
#endif // FN_PrecacheSound_Post
#ifdef FN_SetModel_Post
void FN_SetModel_Post(edict_t *e, const char *m);
#endif // FN_SetModel_Post
#ifdef FN_ModelIndex_Post
int FN_ModelIndex_Post(const char *m);
@@ -1433,17 +1438,17 @@ int FN_ModelIndex_Post(const char *m);
int FN_ModelFrames_Post(int modelIndex);
#endif // FN_ModelFrames_Post
#ifdef FN_SetSize_Post
void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize_Post
#ifdef FN_ChangeLevel_Post
-void FN_ChangeLevel_Post(char *s1, char *s2);
+void FN_ChangeLevel_Post(const char *s1, const char *s2);
#endif // FN_ChangeLevel_Post
#ifdef FN_GetSpawnParms_Post
void FN_GetSpawnParms_Post(edict_t *ent);
#endif // FN_GetSpawnParms_Post
#ifdef FN_SaveSpawnParms_Post
void FN_SaveSpawnParms_Post(edict_t *ent);
@@ -1837,37 +1842,37 @@ void FN_RunPlayerMove_Post(edict_t *fake
int FN_NumberOfEntities_Post(void);
#endif // FN_NumberOfEntities_Post
#ifdef FN_GetInfoKeyBuffer_Post
char *FN_GetInfoKeyBuffer_Post(edict_t *e);
#endif // FN_GetInfoKeyBuffer_Post
#ifdef FN_InfoKeyValue_Post
-char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
+char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue_Post
#ifdef FN_SetKeyValue_Post
-void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue_Post
#ifdef FN_SetClientKeyValue_Post
-void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue_Post
#ifdef FN_IsMapValid_Post
-int FN_IsMapValid_Post(char *filename);
+int FN_IsMapValid_Post(const char *filename);
#endif // FN_IsMapValid_Post
#ifdef FN_StaticDecal_Post
void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal_Post
#ifdef FN_PrecacheGeneric_Post
-int FN_PrecacheGeneric_Post(char *s);
+int FN_PrecacheGeneric_Post(const char *s);
#endif // FN_PrecacheGeneric_Post
#ifdef FN_GetPlayerUserId_Post
int FN_GetPlayerUserId_Post(edict_t *e );
#endif // FN_GetPlayerUserId_Post
#ifdef FN_BuildSoundMsg_Post
void FN_BuildSoundMsg_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -2111,17 +2116,17 @@ enum LibType
typedef void (*AUTHORIZEFUNC)(int player, const char *authstring);
typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
-typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
+typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
typedef const char * (*PFN_GET_MODNAME) (void);
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/);
typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */);
typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/);
typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr);
@@ -2170,18 +2175,18 @@ typedef void * (*PFN_ALLOCATOR) (co
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ );
typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const void* /*addr*/ );
#endif
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
-typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
-typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
diff --git a/dlls/engine/Makefile b/dlls/engine/Makefile
--- a/dlls/engine/Makefile
+++ b/dlls/engine/Makefile
@@ -1,79 +1,124 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
-HLSDK = ../../../hlsdk
+###########################################
+### EDIT THESE PATHS FOR YOUR OWN SETUP ###
+###########################################
+
+HLSDK = ../../../hlsdk/multiplayer
MM_ROOT = ../../../metamod/metamod
+#####################################
### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
-OPT_FLAGS = -O2 -funroll-loops -s -pipe -fomit-frame-pointer -fno-strict-aliasing
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-NAME = engine
-
-BIN_SUFFIX_32 = amxx_i386.so
-BIN_SUFFIX_64 = amxx_amd64.so
+PROJECT = engine
OBJECTS = sdk/amxxmodule.cpp amxxapi.cpp engine.cpp entity.cpp globals.cpp forwards.cpp \
- amxmod_compat.cpp
+ amxmod_compat.cpp
-LINK =
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
-INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
- -I$(MM_ROOT) -I$(HLSDK)/common -Isdk
+C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
-GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+LINK =
-ifeq "$(GCC_VERSION)" "4"
- OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
+INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
+ -I$(MM_ROOT) -Isdk
+
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
+
+OS := $(shell uname -s)
+
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ LIB_SUFFIX = _amxx
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
+else
+ LIB_EXT = so
+ LIB_SUFFIX = _amxx_i386
+ CFLAGS += -DLINUX
+ LINK += -shared
endif
+LINK += -m32 -lm -ldl
+
+CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror
+CPPFLAGS += -fno-exceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
+
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS = $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
BIN_DIR = Release
- CFLAGS = $(OPT_FLAGS)
+ CFLAGS += $(C_OPT_FLAGS)
+ LINK += -s
endif
-CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -fno-rtti -static-libgcc -m32
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-ifeq "$(AMD64)" "true"
- BINARY = $(NAME)_$(BIN_SUFFIX_64)
- CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
else
- BINARY = $(NAME)_$(BIN_SUFFIX_32)
- CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
- OPT_FLAGS += -march=i586
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
endif
-OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
all:
mkdir -p $(BIN_DIR)
mkdir -p $(BIN_DIR)/sdk
- $(MAKE) engine
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-amd64:
- $(MAKE) all AMD64=true
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
-engine: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
-
-debug:
- $(MAKE) all DEBUG=true
+debug:
+ $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
default: all
clean:
- rm -rf Release/sdk/*.o
- rm -rf Release/*.o
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_64)
- rm -rf Debug/sdk/*.o
- rm -rf Debug/*.o
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64)
+ rm -rf $(BIN_DIR)/*.o
+ rm -rf $(BIN_DIR)/sdk/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
+
diff --git a/dlls/engine/amxmod_compat.cpp b/dlls/engine/amxmod_compat.cpp
--- a/dlls/engine/amxmod_compat.cpp
+++ b/dlls/engine/amxmod_compat.cpp
@@ -11,18 +11,18 @@ static int gmsgDamage = 0;
static int gmsgDeathMsg = 0;
static int gmsgScoreInfo = 0;
//From VexdUM (AMX Mod 2006.2)
//This is not exposed, and is only provided as a compatibility helper.
BOOL is_breakable(edict_t* pBreak)
{
if (FStrEq("func_breakable", STRING(pBreak->v.classname))
- || FStrEq("func_pushable", STRING(pBreak->v.classname))
- && pBreak->v.spawnflags & SF_PUSH_BREAKABLE)
+ || (FStrEq("func_pushable", STRING(pBreak->v.classname))
+ && pBreak->v.spawnflags & SF_PUSH_BREAKABLE))
{
return true;
}
return false;
}
//From VexdUM (AMX Mod 2006.2)
diff --git a/dlls/engine/entity.cpp b/dlls/engine/entity.cpp
--- a/dlls/engine/entity.cpp
+++ b/dlls/engine/entity.cpp
@@ -1465,17 +1465,17 @@ static cell AMX_NATIVE_CALL find_ent_by_
int oEnt = params[3];
// Check index to start searching at, 0 must be possible for iEnt.
CHECK_ENTITY(oEnt);
edict_t *pEnt = INDEXENT2(iEnt);
edict_t *entOwner = INDEXENT2(oEnt);
//optional fourth parameter is for jghg2 compatibility
- char* sCategory = NULL;
+ const char* sCategory = NULL;
switch(params[4]){
case 1: sCategory = "target"; break;
case 2: sCategory = "targetname"; break;
default: sCategory = "classname";
}
// No need to check if there is a real ent where entOwner points at since we don't access it anyway.
diff --git a/dlls/engine/sdk/CString.h b/dlls/engine/sdk/CString.h
--- a/dlls/engine/sdk/CString.h
+++ b/dlls/engine/sdk/CString.h
@@ -215,17 +215,17 @@ public:
if (len < 1)
{
return;
}
if (is_space(v[len-1]))
{
- for (i=len-1; i>=0; i--)
+ for (i=len-1; i<len; i--)
{
if (!is_space(v[i])
|| (is_space(v[i]) && i==0))
{
erase(i+1, j);
break;
}
j++;
diff --git a/dlls/engine/sdk/amxxmodule.cpp b/dlls/engine/sdk/amxxmodule.cpp
--- a/dlls/engine/sdk/amxxmodule.cpp
+++ b/dlls/engine/sdk/amxxmodule.cpp
@@ -2235,17 +2235,17 @@ static META_FUNCTIONS g_MetaFunctions_Ta
GetEntityAPI2,
GetEntityAPI2_Post,
GetNewDLLFunctions,
GetNewDLLFunctions_Post,
GetEngineFunctions,
GetEngineFunctions_Post
};
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
if ((int) CVAR_GET_FLOAT("developer") != 0)
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
Plugin_info.logtag, ifvers, Plugin_info.ifvers);
// Check for valid pMetaUtilFuncs before we continue.
if(!pMetaUtilFuncs) {
UTIL_LogPrintf("[%s] ERROR: Meta_Query called with null pMetaUtilFuncs\n", Plugin_info.logtag);
@@ -2329,17 +2329,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
#ifdef FN_META_DETACH
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
@@ -3045,17 +3045,17 @@ char* UTIL_VarArgs( char *format, ... )
return string;
}
//=========================================================
// UTIL_LogPrintf - Prints a logged message to console.
// Preceded by LOG: ( timestamp ) < message >
//=========================================================
-void UTIL_LogPrintf( char *fmt, ... )
+void UTIL_LogPrintf( const char *fmt, ... )
{
va_list argptr;
static char string[1024];
va_start ( argptr, fmt );
vsnprintf ( string, sizeof(string), fmt, argptr );
va_end ( argptr );
diff --git a/dlls/engine/sdk/amxxmodule.h b/dlls/engine/sdk/amxxmodule.h
--- a/dlls/engine/sdk/amxxmodule.h
+++ b/dlls/engine/sdk/amxxmodule.h
@@ -15,21 +15,26 @@
#ifdef USE_METAMOD
#include <extdll.h>
#include <meta_api.h>
#include "osdep.h"
#endif // #ifdef USE_METAMOD
// DLL Export
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
+#endif
+
+#if defined(__linux__) && !defined(LINUX)
#define LINUX
+#elif defined(__APPLE__) && !defined(OSX)
+#define OSX
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
// ***** AMXX stuff *****
// module interface version was 1
@@ -61,17 +66,17 @@ struct amxx_module_info_s
// *** Small stuff ***
// The next section is copied from the amx.h file
// Copyright (c) ITB CompuPhase, 1997-2005
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -303,17 +308,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -390,28 +395,28 @@ enum {
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
AMX_ERR_PARAMS, /* parameter error */
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
};
#if !defined AMX_NO_ALIGN
- #if defined __linux__
+ #if defined(__linux__) || defined(__APPLE__)
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions *****
#ifdef USE_METAMOD
-void UTIL_LogPrintf( char *fmt, ... );
+void UTIL_LogPrintf( const char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY
void FN_META_QUERY(void);
#endif // FN_META_QUERY
@@ -828,21 +833,21 @@ int FN_InconsistentFile_Post(const edict
#ifdef FN_AllowLagCompensation_Post
int FN_AllowLagCompensation_Post(void);
#endif // FN_AllowLagCompensation_Post
#ifdef FN_PrecacheModel
-int FN_PrecacheModel(char *s);
+int FN_PrecacheModel(const char *s);
#endif // FN_PrecacheModel
#ifdef FN_PrecacheSound
-int FN_PrecacheSound(char *s);
+int FN_PrecacheSound(const char *s);
#endif // FN_PrecacheSound
#ifdef FN_SetModel
void FN_SetModel(edict_t *e, const char *m);
#endif // FN_SetModel
#ifdef FN_ModelIndex
int FN_ModelIndex(const char *m);
@@ -852,17 +857,17 @@ int FN_ModelIndex(const char *m);
int FN_ModelFrames(int modelIndex);
#endif // FN_ModelFrames
#ifdef FN_SetSize
void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize
#ifdef FN_ChangeLevel
-void FN_ChangeLevel(char *s1, char *s2);
+void FN_ChangeLevel(const char *s1, const char *s2);
#endif // FN_ChangeLevel
#ifdef FN_GetSpawnParms
void FN_GetSpawnParms(edict_t *ent);
#endif // FN_GetSpawnParms
#ifdef FN_SaveSpawnParms
void FN_SaveSpawnParms(edict_t *ent);
@@ -1256,37 +1261,37 @@ void FN_RunPlayerMove(edict_t *fakeclien
int FN_NumberOfEntities(void);
#endif // FN_NumberOfEntities
#ifdef FN_GetInfoKeyBuffer
char *FN_GetInfoKeyBuffer(edict_t *e);
#endif // FN_GetInfoKeyBuffer
#ifdef FN_InfoKeyValue
-char *FN_InfoKeyValue(char *infobuffer, char *key);
+char *FN_InfoKeyValue(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue
#ifdef FN_SetKeyValue
-void FN_SetKeyValue(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue
#ifdef FN_SetClientKeyValue
-void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue
#ifdef FN_IsMapValid
-int FN_IsMapValid(char *filename);
+int FN_IsMapValid(const char *filename);
#endif // FN_IsMapValid
#ifdef FN_StaticDecal
void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal
#ifdef FN_PrecacheGeneric
-int FN_PrecacheGeneric(char *s);
+int FN_PrecacheGeneric(const char *s);
#endif // FN_PrecacheGeneric
#ifdef FN_GetPlayerUserId
int FN_GetPlayerUserId(edict_t *e );
#endif // FN_GetPlayerUserId
#ifdef FN_BuildSoundMsg
void FN_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -1409,21 +1414,21 @@ const char *FN_GetPlayerAuthId(edict_t *
#endif // FN_GetPlayerAuthId
#ifdef FN_PrecacheModel_Post
-int FN_PrecacheModel_Post(char *s);
+int FN_PrecacheModel_Post(const char *s);
#endif // FN_PrecacheModel_Post
#ifdef FN_PrecacheSound_Post
-int FN_PrecacheSound_Post(char *s);
+int FN_PrecacheSound_Post(const char *s);
#endif // FN_PrecacheSound_Post
#ifdef FN_SetModel_Post
void FN_SetModel_Post(edict_t *e, const char *m);
#endif // FN_SetModel_Post
#ifdef FN_ModelIndex_Post
int FN_ModelIndex_Post(const char *m);
@@ -1433,17 +1438,17 @@ int FN_ModelIndex_Post(const char *m);
int FN_ModelFrames_Post(int modelIndex);
#endif // FN_ModelFrames_Post
#ifdef FN_SetSize_Post
void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize_Post
#ifdef FN_ChangeLevel_Post
-void FN_ChangeLevel_Post(char *s1, char *s2);
+void FN_ChangeLevel_Post(const char *s1, const char *s2);
#endif // FN_ChangeLevel_Post
#ifdef FN_GetSpawnParms_Post
void FN_GetSpawnParms_Post(edict_t *ent);
#endif // FN_GetSpawnParms_Post
#ifdef FN_SaveSpawnParms_Post
void FN_SaveSpawnParms_Post(edict_t *ent);
@@ -1837,37 +1842,37 @@ void FN_RunPlayerMove_Post(edict_t *fake
int FN_NumberOfEntities_Post(void);
#endif // FN_NumberOfEntities_Post
#ifdef FN_GetInfoKeyBuffer_Post
char *FN_GetInfoKeyBuffer_Post(edict_t *e);
#endif // FN_GetInfoKeyBuffer_Post
#ifdef FN_InfoKeyValue_Post
-char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
+char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue_Post
#ifdef FN_SetKeyValue_Post
-void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue_Post
#ifdef FN_SetClientKeyValue_Post
-void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue_Post
#ifdef FN_IsMapValid_Post
-int FN_IsMapValid_Post(char *filename);
+int FN_IsMapValid_Post(const char *filename);
#endif // FN_IsMapValid_Post
#ifdef FN_StaticDecal_Post
void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal_Post
#ifdef FN_PrecacheGeneric_Post
-int FN_PrecacheGeneric_Post(char *s);
+int FN_PrecacheGeneric_Post(const char *s);
#endif // FN_PrecacheGeneric_Post
#ifdef FN_GetPlayerUserId_Post
int FN_GetPlayerUserId_Post(edict_t *e );
#endif // FN_GetPlayerUserId_Post
#ifdef FN_BuildSoundMsg_Post
void FN_BuildSoundMsg_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -2111,17 +2116,17 @@ enum LibType
typedef void (*AUTHORIZEFUNC)(int player, const char *authstring);
typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
-typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
+typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
typedef const char * (*PFN_GET_MODNAME) (void);
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/);
typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */);
typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/);
typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr);
@@ -2170,18 +2175,18 @@ typedef void * (*PFN_ALLOCATOR) (co
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ );
typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const void* /*addr*/ );
#endif
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
-typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
-typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
diff --git a/dlls/fakemeta/Makefile b/dlls/fakemeta/Makefile
--- a/dlls/fakemeta/Makefile
+++ b/dlls/fakemeta/Makefile
@@ -1,81 +1,125 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
-HLSDK = ../../../hlsdk
+###########################################
+### EDIT THESE PATHS FOR YOUR OWN SETUP ###
+###########################################
+
+HLSDK = ../../../hlsdk/multiplayer
MM_ROOT = ../../../metamod/metamod
+#####################################
### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
-OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -fomit-frame-pointer
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-NAME = fakemeta
-
-BIN_SUFFIX_32 = amxx_i386.so
-BIN_SUFFIX_64 = amxx_amd64.so
+PROJECT = fakemeta
OBJECTS = sdk/amxxmodule.cpp dllfunc.cpp engfunc.cpp fakemeta_amxx.cpp pdata.cpp forward.cpp \
- fm_tr.cpp pev.cpp glb.cpp fm_tr2.cpp misc.cpp
+ fm_tr.cpp pev.cpp glb.cpp fm_tr2.cpp misc.cpp
+
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
+
+C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
LINK =
-INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
- -I$(MM_ROOT) -I$(HLSDK)/common -I$(HLSDK)/pm_shared -Isdk
+INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
+ -I$(HLSDK)/pm_shared -I$(MM_ROOT) -Isdk
-GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
-ifeq "$(GCC_VERSION)" "4"
- OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
+OS := $(shell uname -s)
+
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ LIB_SUFFIX = _amxx
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
+else
+ LIB_EXT = so
+ LIB_SUFFIX = _amxx_i386
+ CFLAGS += -DLINUX
+ LINK += -shared
endif
+LINK += -m32 -lm -ldl
+
+CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror \
+ -Wno-invalid-offsetof
+CPPFLAGS += -fno-exceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS = $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
BIN_DIR = Release
- CFLAGS = $(OPT_FLAGS)
+ CFLAGS += $(C_OPT_FLAGS)
+ LINK += -s
endif
-CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -Wno-invalid-offsetof -m32
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-ifeq "$(AMD64)" "true"
- BINARY = $(NAME)_$(BIN_SUFFIX_64)
- CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
else
- BINARY = $(NAME)_$(BIN_SUFFIX_32)
- CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
- OPT_FLAGS += -march=i586
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
endif
-OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
all:
mkdir -p $(BIN_DIR)
mkdir -p $(BIN_DIR)/sdk
- $(MAKE) fakemeta
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-amd64:
- $(MAKE) all AMD64=true
-
-fakemeta: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
debug:
- $(MAKE) all DEBUG=true
+ $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
default: all
clean:
- rm -rf Release/sdk/*.o
- rm -rf Release/*.o
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_64)
- rm -rf Debug/sdk/*.o
- rm -rf Debug/*.o
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64)
-
+ rm -rf $(BIN_DIR)/*.o
+ rm -rf $(BIN_DIR)/sdk/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
+
diff --git a/dlls/fakemeta/dllfunc.cpp b/dlls/fakemeta/dllfunc.cpp
--- a/dlls/fakemeta/dllfunc.cpp
+++ b/dlls/fakemeta/dllfunc.cpp
@@ -2,19 +2,19 @@
//by mahnsawce from his NS module
static cell AMX_NATIVE_CALL dllfunc(AMX *amx,cell *params)
{
int type;
int index;
int indexb;
unsigned char *pset;
- char *temp = "";
- char *temp2 = "";
- char *temp3 = "";
+ const char *temp = "";
+ const char *temp2 = "";
+ const char *temp3 = "";
vec3_t Vec1;
vec3_t Vec2;
int iparam1;
int iparam2;
int iparam3;
entity_state_t *es;
int len;
cell *cRet;
@@ -100,17 +100,17 @@ static cell AMX_NATIVE_CALL dllfunc(AMX
case DLLFunc_ClientConnect: // bool) ( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[ 128 ] );
// index,szName,szAddress,szRetRejectReason,size
cRet = MF_GetAmxAddr(amx,params[2]);
index=cRet[0];
CHECK_ENTITY(index);
temp = MF_GetAmxString(amx,params[3],0,&len);
temp2 = MF_GetAmxString(amx,params[4],1,&len);
//temp3 = GET_AMXSTRING(amx,params[5],2,len);
- iparam1 = MDLL_ClientConnect(INDEXENT2(index),STRING(ALLOC_STRING(temp)),STRING(ALLOC_STRING(temp2)),temp3);
+ iparam1 = MDLL_ClientConnect(INDEXENT2(index),STRING(ALLOC_STRING(temp)),STRING(ALLOC_STRING(temp2)),(char *)temp3);
cRet = MF_GetAmxAddr(amx,params[6]);
MF_SetAmxString(amx,params[5],temp3,cRet[0]);
return iparam1;
case DLLFunc_ClientDisconnect: // void ) ( edict_t *pEntity );
cRet = MF_GetAmxAddr(amx,params[2]);
index=cRet[0];
CHECK_ENTITY(index);
diff --git a/dlls/fakemeta/engfunc.cpp b/dlls/fakemeta/engfunc.cpp
--- a/dlls/fakemeta/engfunc.cpp
+++ b/dlls/fakemeta/engfunc.cpp
@@ -29,25 +29,25 @@ static cell AMX_NATIVE_CALL engfunc(AMX
// float fTemp[3];
int index;
unsigned char *pset;
edict_t *pRet=NULL;
// Now start calling.. :/
switch (type)
{
// pfnPrecacheModel
- case EngFunc_PrecacheModel: // int ) (char* s);
+ case EngFunc_PrecacheModel: // int ) (const char* s);
temp = MF_GetAmxString(amx,params[2],0,&len);
if (temp[0]==0)
return 0;
- return (*g_engfuncs.pfnPrecacheModel)((char*)STRING(ALLOC_STRING(temp)));
+ return (*g_engfuncs.pfnPrecacheModel)((char *)STRING(ALLOC_STRING(temp)));
// pfnPrecacheSound
- case EngFunc_PrecacheSound: // int ) (char* s);
+ case EngFunc_PrecacheSound: // int ) (const char* s);
temp = MF_GetAmxString(amx,params[2],0,&len);
if (temp[0]==0)
return 0;
return (*g_engfuncs.pfnPrecacheSound)((char*)STRING(ALLOC_STRING(temp)));
// pfnSetModel
case EngFunc_SetModel: // void ) (edict_t *e, const char *m);
diff --git a/dlls/fakemeta/forward.cpp b/dlls/fakemeta/forward.cpp
--- a/dlls/fakemeta/forward.cpp
+++ b/dlls/fakemeta/forward.cpp
@@ -78,20 +78,20 @@ static cell AMX_NATIVE_CALL fm_return(AM
return 1;
}
/*
* Begining of Game DLL->Engine hooks
*/
// pfnPrecacheModel
-SIMPLE_INT_HOOK_STRING(PrecacheModel);
+SIMPLE_INT_HOOK_CONSTSTRING(PrecacheModel);
// pfnPrecacheSound
-SIMPLE_INT_HOOK_STRING(PrecacheSound);
+SIMPLE_INT_HOOK_CONSTSTRING(PrecacheSound);
void ClientUserInfoChanged(edict_t *e, char *infobuffer)
{
FM_ENG_HANDLE(FM_ClientUserInfoChanged, (Engine[FM_ClientUserInfoChanged].at(i), (cell)ENTINDEX(e), (cell)infobuffer));
RETURN_META(mswi(lastFmRes));
}
void ClientUserInfoChanged_post(edict_t *e, char *infobuffer)
@@ -256,28 +256,28 @@ void KeyValue(edict_t* entity, KeyValueD
void KeyValue_post(edict_t* entity, KeyValueData* data)
{
g_kvd_hook.kvd = data;
FM_ENG_HANDLE_POST(FM_KeyValue, (EnginePost[FM_KeyValue].at(i), (cell)ENTINDEX(entity), (cell)(&g_kvd_hook)));
RETURN_META(MRES_IGNORED);
}
-void AlertMessage(ALERT_TYPE atype, char *szFmt, ...)
+void AlertMessage(ALERT_TYPE atype, const char *szFmt, ...)
{
static char buf[2048];
va_list ap;
va_start(ap, szFmt);
vsprintf(buf, szFmt, ap);
va_end(ap);
FM_ENG_HANDLE(FM_AlertMessage, (Engine[FM_AlertMessage].at(i), (cell)atype, buf));
RETURN_META(mswi(lastFmRes));
}
-void AlertMessage_post(ALERT_TYPE atype, char *szFmt, ...)
+void AlertMessage_post(ALERT_TYPE atype, const char *szFmt, ...)
{
static char buf[2048];
va_list ap;
va_start(ap, szFmt);
vsprintf(buf, szFmt, ap);
va_end(ap);
FM_ENG_HANDLE_POST(FM_AlertMessage, (EnginePost[FM_AlertMessage].at(i), (cell)atype, buf));
RETURN_META(MRES_IGNORED);
@@ -288,17 +288,17 @@ SIMPLE_INT_HOOK_CONSTSTRING(ModelIndex);
// pfnModelFrames
SIMPLE_INT_HOOK_INT(ModelFrames);
// pfnSetSize
SIMPLE_VOID_HOOK_EDICT_CONSTVECT_CONSTVECT(SetSize);
// pfnChangeLevel
-SIMPLE_VOID_HOOK_STRING_STRING(ChangeLevel);
+SIMPLE_VOID_HOOK_CONSTSTRING_CONSTSTRING(ChangeLevel);
// pfnVecToYaw
SIMPLE_FLOAT_HOOK_CONSTVECT(VecToYaw);
void VecToAngles(const float *rgflVectorIn, float *rgflVectorOut)
{
PREPARE_VECTOR(rgflVectorIn);
PREPARE_VECTOR(rgflVectorOut);
@@ -502,17 +502,17 @@ SIMPLE_FLOAT_HOOK_VOID(Time);
SIMPLE_VOID_HOOK_CONSTEDICT_FLOAT_FLOAT(CrosshairAngle);
SIMPLE_VOID_HOOK_CONSTEDICT_INT_INT_INT_INT(FadeClientVolume);
// pfnSetClientMaxspeed
SIMPLE_VOID_HOOK_CONSTEDICT_FLOAT(SetClientMaxspeed);
// pfnPrecacheGeneric
-SIMPLE_INT_HOOK_STRING(PrecacheGeneric);
+SIMPLE_INT_HOOK_CONSTSTRING(PrecacheGeneric);
// pfnPrecacheEvent
SIMPLE_USHORT_HOOK_INT_CONSTSTRING(PrecacheEvent);
// pfnGetPhysicsKeyValue
SIMPLE_CONSTSTRING_HOOK_CONSTEDICT_CONSTSTRING(GetPhysicsKeyValue);
// pfnSetPhysicsKeyValue
@@ -595,27 +595,27 @@ SIMPLE_INT_HOOK_CONSTEDICT(CanSkipPlayer
SIMPLE_VOID_HOOK_INT_INT(SetGroupMask);
// pfnVoice_GetClientListening
SIMPLE_BOOL_HOOK_INT_INT(Voice_GetClientListening);
// pfnVoice_SetClientListening
SIMPLE_BOOL_HOOK_INT_INT_BOOL(Voice_SetClientListening);
-SIMPLE_STRING_HOOK_STRING_STRING(InfoKeyValue);
+SIMPLE_STRING_HOOK_STRING_CONSTSTRING(InfoKeyValue);
-SIMPLE_VOID_HOOK_STRING_STRING_STRING(SetKeyValue);
+SIMPLE_VOID_HOOK_STRING_CONSTSTRING_CONSTSTRING(SetKeyValue);
-SIMPLE_VOID_HOOK_INT_STRING_STRING_STRING(SetClientKeyValue);
+SIMPLE_VOID_HOOK_INT_STRING_CONSTSTRING_CONSTSTRING(SetClientKeyValue);
SIMPLE_CONSTSTRING_HOOK_EDICT(GetPlayerAuthId);
SIMPLE_UINT_HOOK_EDICT(GetPlayerWONId);
-SIMPLE_INT_HOOK_STRING(IsMapValid);
+SIMPLE_INT_HOOK_CONSTSTRING(IsMapValid);
int CreateInstancedBaseline(int classname, struct entity_state_s *baseline)
{
g_es_hook = baseline;
FM_ENG_HANDLE(FM_CreateInstancedBaseline, (Engine[FM_CreateInstancedBaseline].at(i), (cell)classname, (cell)baseline));
RETURN_META_VALUE(mswi(lastFmRes), (int)mlCellResult);
}
@@ -720,17 +720,17 @@ SIMPLE_VOID_HOOK_EDICT(SpectatorDisconne
// pfnSpectatorThink
SIMPLE_VOID_HOOK_EDICT(SpectatorThink);
// pfnSys_Error
SIMPLE_VOID_HOOK_CONSTSTRING(Sys_Error);
// pfnPM_FindTextureType
-SIMPLE_CHAR_HOOK_STRING(PM_FindTextureType);
+SIMPLE_CHAR_HOOK_CONSTSTRING(PM_FindTextureType);
// pfnRegisterEncoders
SIMPLE_VOID_HOOK_VOID(RegisterEncoders);
// pfnCreateInstancedBaselines
SIMPLE_VOID_HOOK_VOID(CreateInstancedBaselines);
// pfnAllowLagCompensation
diff --git a/dlls/fakemeta/forwardmacros.h b/dlls/fakemeta/forwardmacros.h
--- a/dlls/fakemeta/forwardmacros.h
+++ b/dlls/fakemeta/forwardmacros.h
@@ -70,40 +70,77 @@
RETURN_META(mswi(lastFmRes)); \
} \
void call##_post (int v, char *c, char *cb, char *cc) \
{ \
FM_ENG_HANDLE_POST(FM_##call, (EnginePost[FM_##call].at(i),(cell)v,c,cb,cc)); \
RETURN_META(MRES_IGNORED); \
}
+#define SIMPLE_VOID_HOOK_INT_STRING_CONSTSTRING_CONSTSTRING(call) \
+ void call (int v,char *c, const char *cb, const char *cc) \
+ { \
+ FM_ENG_HANDLE(FM_##call, (Engine[FM_##call].at(i),(cell)v,c,cb,cc)); \
+ RETURN_META(mswi(lastFmRes)); \
+ } \
+ void call##_post (int v, char *c, const char *cb, const char *cc) \
+ { \
+ FM_ENG_HANDLE_POST(FM_##call, (EnginePost[FM_##call].at(i),(cell)v,c,cb,cc)); \
+ RETURN_META(MRES_IGNORED); \
+ }
+
+
#define SIMPLE_VOID_HOOK_STRING_STRING_STRING(call) \
void call (char *c, char *cb, char *cc) \
{ \
FM_ENG_HANDLE(FM_##call, (Engine[FM_##call].at(i),c,cb,cc)); \
RETURN_META(mswi(lastFmRes)); \
} \
void call##_post (char *c, char *cb, char *cc) \
{ \
FM_ENG_HANDLE_POST(FM_##call, (EnginePost[FM_##call].at(i),c,cb,cc)); \
RETURN_META(MRES_IGNORED); \
}
+#define SIMPLE_VOID_HOOK_STRING_CONSTSTRING_CONSTSTRING(call) \
+ void call (char *c, const char *cb, const char *cc) \
+ { \
+ FM_ENG_HANDLE(FM_##call, (Engine[FM_##call].at(i),c,cb,cc)); \
+ RETURN_META(mswi(lastFmRes)); \
+ } \
+ void call##_post (char *c, const char *cb, const char *cc) \
+ { \
+ FM_ENG_HANDLE_POST(FM_##call, (EnginePost[FM_##call].at(i),c,cb,cc)); \
+ RETURN_META(MRES_IGNORED); \
+ }
+
#define SIMPLE_STRING_HOOK_STRING_STRING(call) \
char* call (char *c, char *cb) \
{ \
FM_ENG_HANDLE(FM_##call, (Engine[FM_##call].at(i),c,cb)); \
RETURN_META_VALUE(mswi(lastFmRes), (char*)mlStringResult); \
} \
char* call##_post (char *c, char *cb) \
{ \
origStringRet = META_RESULT_ORIG_RET(char *); \
FM_ENG_HANDLE_POST(FM_##call, (EnginePost[FM_##call].at(i),c,cb)); \
RETURN_META_VALUE(MRES_IGNORED, (char*)mlStringResult); \
}
+#define SIMPLE_STRING_HOOK_STRING_CONSTSTRING(call) \
+ char* call (char *c, const char *cb) \
+ { \
+ FM_ENG_HANDLE(FM_##call, (Engine[FM_##call].at(i),c,cb)); \
+ RETURN_META_VALUE(mswi(lastFmRes), (char*)mlStringResult); \
+ } \
+ char* call##_post (char *c, const char *cb) \
+ { \
+ origStringRet = META_RESULT_ORIG_RET(char *); \
+ FM_ENG_HANDLE_POST(FM_##call, (EnginePost[FM_##call].at(i),c,cb)); \
+ RETURN_META_VALUE(MRES_IGNORED, (char*)mlStringResult); \
+ }
#define SIMPLE_CONSTSTRING_HOOK_EDICT(call) \
const char* call (edict_t *e) \
{ \
FM_ENG_HANDLE(FM_##call, (Engine[FM_##call].at(i),(cell)ENTINDEX(e))); \
RETURN_META_VALUE(mswi(lastFmRes), mlStringResult); \
} \
const char* call##_post (edict_t *e) \
{ \
@@ -170,16 +207,29 @@
RETURN_META_VALUE(mswi(lastFmRes), (char)mlCellResult); \
} \
char call##_post (char *s) \
{ \
origCellRet = META_RESULT_ORIG_RET(char); \
FM_ENG_HANDLE_POST(FM_##call, (EnginePost[FM_##call].at(i), s)); \
RETURN_META_VALUE(MRES_IGNORED, (char)mlCellResult); \
}
+#define SIMPLE_CHAR_HOOK_CONSTSTRING(call) \
+ char call (const char *s) \
+ { \
+ FM_ENG_HANDLE(FM_##call, (Engine[FM_##call].at(i), s)); \
+ RETURN_META_VALUE(mswi(lastFmRes), (char)mlCellResult); \
+ } \
+ char call##_post (const char *s) \
+ { \
+ origCellRet = META_RESULT_ORIG_RET(char); \
+ FM_ENG_HANDLE_POST(FM_##call, (EnginePost[FM_##call].at(i), s)); \
+ RETURN_META_VALUE(MRES_IGNORED, (char)mlCellResult); \
+ }
+
#define SIMPLE_VOID_HOOK_CONSTSTRING(call) \
void call (const char *s) \
{ \
FM_ENG_HANDLE(FM_##call, (Engine[FM_##call].at(i), s)); \
RETURN_META(mswi(lastFmRes)); \
} \
void call##_post (const char *s) \
{ \
diff --git a/dlls/fakemeta/pdata.cpp b/dlls/fakemeta/pdata.cpp
--- a/dlls/fakemeta/pdata.cpp
+++ b/dlls/fakemeta/pdata.cpp
@@ -1,10 +1,22 @@
#include "fakemeta_amxx.h"
+#if defined PAWN_CELL_SIZE
+# if PAWN_CELL_SIZE == 16
+# define CELL_MIN SHRT_MIN
+# elif PAWN_CELL_SIZE == 32
+# define CELL_MIN INT_MIN
+# elif PAWN_CELL_SIZE == 64
+# define CELL_MIN _I64_MIN
+# endif
+#else
+# define CELL_MIN _I32_MIN
+#endif
+
#if defined WIN32
#define WINDOWS_LEAN_AND_MEAN
#include <windows.h>
#else
//implement these with setjmp later.
bool IsBadReadPtr(void *l, size_t size)
{
return false;
@@ -19,71 +31,104 @@ static cell AMX_NATIVE_CALL set_pdata_in
{
int index=params[1];
CHECK_ENTITY(index);
int iOffset=params[2];
if (iOffset <0)
return 1;
#ifdef __linux__
iOffset += params[4];
+#elif defined __APPLE__
+ // Use Linux offset in older plugins
+ if (params[0] / sizeof(cell) == 4)
+ iOffset += params[4];
+ else
+ iOffset += params[5];
#endif
int iValue=params[3];
*((int *)INDEXENT2(index)->pvPrivateData + iOffset) = iValue;
return 1;
}
static cell AMX_NATIVE_CALL get_pdata_int(AMX *amx, cell *params)
{
int index=params[1];
CHECK_ENTITY(index);
int iOffset=params[2];
if (iOffset <0)
return 0;
#ifdef __linux__
iOffset += params[3];
+#elif defined __APPLE__
+ // Use Linux offset in older plugins
+ if (params[0] / sizeof(cell) == 3)
+ iOffset += params[3];
+ else
+ iOffset += params[4];
#endif
+
return *((int *)INDEXENT2(index)->pvPrivateData + iOffset);
}
// Float
static cell AMX_NATIVE_CALL set_pdata_float(AMX *amx, cell *params)
{
int index=params[1];
CHECK_ENTITY(index);
int iOffset=params[2];
if (iOffset <0)
return 1;
#ifdef __linux__
iOffset += params[4];
+#elif defined __APPLE__
+ // Use Linux offset in older plugins
+ if (params[0] / sizeof(cell) == 4)
+ iOffset += params[4];
+ else
+ iOffset += params[5];
#endif
+
float fValue=amx_ctof(params[3]);
*((float *)INDEXENT2(index)->pvPrivateData + iOffset) = fValue;
return 1;
}
static cell AMX_NATIVE_CALL get_pdata_float(AMX *amx, cell *params)
{
int index=params[1];
CHECK_ENTITY(index);
int iOffset=params[2];
if (iOffset <0)
return 1;
#ifdef __linux__
iOffset += params[3];
+#elif defined __APPLE__
+ // Use Linux offset in older plugins
+ if (params[0] / sizeof(cell) == 3)
+ iOffset += params[3];
+ else
+ iOffset += params[4];
#endif
+
return amx_ftoc(*((float *)INDEXENT2(index)->pvPrivateData + iOffset));
}
static cell AMX_NATIVE_CALL get_pdata_string(AMX *amx, cell *params)
{
int index=params[1];
CHECK_ENTITY(index);
int iOffset=params[2];
if (iOffset <0)
return 1;
#ifdef __linux__
iOffset += params[6];
+#elif defined __APPLE__
+ // Use Linux offset in older plugins
+ if (params[0] / sizeof(cell) == 6 || params[7] == CELL_MIN)
+ iOffset += params[6];
+ else
+ iOffset += params[7];
#endif
edict_t *pEdict = INDEXENT2(index);
char *szData;
if (params[5])
{
szData = *((char **)pEdict->pvPrivateData + iOffset);
@@ -106,16 +151,22 @@ static cell AMX_NATIVE_CALL set_pdata_st
int index=params[1];
CHECK_ENTITY(index);
int iOffset=params[2];
if (iOffset <0)
return 1;
#ifdef __linux__
iOffset += params[5];
+#elif defined __APPLE__
+ // Use Linux offset in older plugins
+ if (params[0] / sizeof(cell) == 5 || params[6] == CELL_MIN)
+ iOffset += params[5];
+ else
+ iOffset += params[6];
#endif
edict_t *pEdict = INDEXENT2(index);
char *szData;
int len;
char *data = MF_GetAmxString(amx, params[3], 0, &len);
if (params[4] == -1)
@@ -147,16 +198,22 @@ static cell AMX_NATIVE_CALL get_pdata_en
{
int index=params[1];
int iOffset=params[2];
CHECK_ENTITY(index);
#ifdef __linux__
iOffset += params[3];
+#elif defined __APPLE__
+ // Use Linux offset in older plugins
+ if (params[0] / sizeof(cell) == 3)
+ iOffset += params[3];
+ else
+ iOffset += params[4];
#endif
edict_t *pEdict = *(edict_t **)((char *)(INDEXENT2(index)->pvPrivateData) + iOffset);
if (pEdict == NULL)
{
return -1;
}
diff --git a/dlls/fakemeta/sdk/CString.h b/dlls/fakemeta/sdk/CString.h
--- a/dlls/fakemeta/sdk/CString.h
+++ b/dlls/fakemeta/sdk/CString.h
@@ -239,17 +239,17 @@ public:
if (len < 1)
{
return;
}
if (is_space(v[len-1]))
{
- for (i=len-1; i>=0; i--)
+ for (i=len-1; i<len; i--)
{
if (!is_space(v[i])
|| (is_space(v[i]) && i==0))
{
erase(i+1, j);
break;
}
j++;
diff --git a/dlls/fakemeta/sdk/amxxmodule.cpp b/dlls/fakemeta/sdk/amxxmodule.cpp
--- a/dlls/fakemeta/sdk/amxxmodule.cpp
+++ b/dlls/fakemeta/sdk/amxxmodule.cpp
@@ -2235,17 +2235,17 @@ static META_FUNCTIONS g_MetaFunctions_Ta
GetEntityAPI2,
GetEntityAPI2_Post,
GetNewDLLFunctions,
GetNewDLLFunctions_Post,
GetEngineFunctions,
GetEngineFunctions_Post
};
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
if ((int) CVAR_GET_FLOAT("developer") != 0)
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
Plugin_info.logtag, ifvers, Plugin_info.ifvers);
// Check for valid pMetaUtilFuncs before we continue.
if(!pMetaUtilFuncs) {
UTIL_LogPrintf("[%s] ERROR: Meta_Query called with null pMetaUtilFuncs\n", Plugin_info.logtag);
@@ -2329,17 +2329,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
#ifdef FN_META_DETACH
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
@@ -3045,17 +3045,17 @@ char* UTIL_VarArgs( char *format, ... )
return string;
}
//=========================================================
// UTIL_LogPrintf - Prints a logged message to console.
// Preceded by LOG: ( timestamp ) < message >
//=========================================================
-void UTIL_LogPrintf( char *fmt, ... )
+void UTIL_LogPrintf( const char *fmt, ... )
{
va_list argptr;
static char string[1024];
va_start ( argptr, fmt );
vsnprintf ( string, sizeof(string), fmt, argptr );
va_end ( argptr );
diff --git a/dlls/fakemeta/sdk/amxxmodule.h b/dlls/fakemeta/sdk/amxxmodule.h
--- a/dlls/fakemeta/sdk/amxxmodule.h
+++ b/dlls/fakemeta/sdk/amxxmodule.h
@@ -15,21 +15,26 @@
#ifdef USE_METAMOD
#include <extdll.h>
#include <meta_api.h>
#include "osdep.h"
#endif // #ifdef USE_METAMOD
// DLL Export
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
+#endif
+
+#if defined(__linux__) && !defined(LINUX)
#define LINUX
+#elif defined(__APPLE__) && !defined(OSX)
+#define OSX
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
// ***** AMXX stuff *****
// module interface version was 1
@@ -61,17 +66,17 @@ struct amxx_module_info_s
// *** Small stuff ***
// The next section is copied from the amx.h file
// Copyright (c) ITB CompuPhase, 1997-2005
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -303,17 +308,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -390,28 +395,28 @@ enum {
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
AMX_ERR_PARAMS, /* parameter error */
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
};
#if !defined AMX_NO_ALIGN
- #if defined __linux__
+ #if defined(__linux__) || defined(__APPLE__)
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions *****
#ifdef USE_METAMOD
-void UTIL_LogPrintf( char *fmt, ... );
+void UTIL_LogPrintf( const char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY
void FN_META_QUERY(void);
#endif // FN_META_QUERY
@@ -828,21 +833,21 @@ int FN_InconsistentFile_Post(const edict
#ifdef FN_AllowLagCompensation_Post
int FN_AllowLagCompensation_Post(void);
#endif // FN_AllowLagCompensation_Post
#ifdef FN_PrecacheModel
-int FN_PrecacheModel(char *s);
+int FN_PrecacheModel(const char *s);
#endif // FN_PrecacheModel
#ifdef FN_PrecacheSound
-int FN_PrecacheSound(char *s);
+int FN_PrecacheSound(const char *s);
#endif // FN_PrecacheSound
#ifdef FN_SetModel
void FN_SetModel(edict_t *e, const char *m);
#endif // FN_SetModel
#ifdef FN_ModelIndex
int FN_ModelIndex(const char *m);
@@ -852,17 +857,17 @@ int FN_ModelIndex(const char *m);
int FN_ModelFrames(int modelIndex);
#endif // FN_ModelFrames
#ifdef FN_SetSize
void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize
#ifdef FN_ChangeLevel
-void FN_ChangeLevel(char *s1, char *s2);
+void FN_ChangeLevel(const char *s1, const char *s2);
#endif // FN_ChangeLevel
#ifdef FN_GetSpawnParms
void FN_GetSpawnParms(edict_t *ent);
#endif // FN_GetSpawnParms
#ifdef FN_SaveSpawnParms
void FN_SaveSpawnParms(edict_t *ent);
@@ -1256,37 +1261,37 @@ void FN_RunPlayerMove(edict_t *fakeclien
int FN_NumberOfEntities(void);
#endif // FN_NumberOfEntities
#ifdef FN_GetInfoKeyBuffer
char *FN_GetInfoKeyBuffer(edict_t *e);
#endif // FN_GetInfoKeyBuffer
#ifdef FN_InfoKeyValue
-char *FN_InfoKeyValue(char *infobuffer, char *key);
+char *FN_InfoKeyValue(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue
#ifdef FN_SetKeyValue
-void FN_SetKeyValue(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue
#ifdef FN_SetClientKeyValue
-void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue
#ifdef FN_IsMapValid
-int FN_IsMapValid(char *filename);
+int FN_IsMapValid(const char *filename);
#endif // FN_IsMapValid
#ifdef FN_StaticDecal
void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal
#ifdef FN_PrecacheGeneric
-int FN_PrecacheGeneric(char *s);
+int FN_PrecacheGeneric(const char *s);
#endif // FN_PrecacheGeneric
#ifdef FN_GetPlayerUserId
int FN_GetPlayerUserId(edict_t *e );
#endif // FN_GetPlayerUserId
#ifdef FN_BuildSoundMsg
void FN_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -1409,21 +1414,21 @@ const char *FN_GetPlayerAuthId(edict_t *
#endif // FN_GetPlayerAuthId
#ifdef FN_PrecacheModel_Post
-int FN_PrecacheModel_Post(char *s);
+int FN_PrecacheModel_Post(const char *s);
#endif // FN_PrecacheModel_Post
#ifdef FN_PrecacheSound_Post
-int FN_PrecacheSound_Post(char *s);
+int FN_PrecacheSound_Post(const char *s);
#endif // FN_PrecacheSound_Post
#ifdef FN_SetModel_Post
void FN_SetModel_Post(edict_t *e, const char *m);
#endif // FN_SetModel_Post
#ifdef FN_ModelIndex_Post
int FN_ModelIndex_Post(const char *m);
@@ -1433,17 +1438,17 @@ int FN_ModelIndex_Post(const char *m);
int FN_ModelFrames_Post(int modelIndex);
#endif // FN_ModelFrames_Post
#ifdef FN_SetSize_Post
void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize_Post
#ifdef FN_ChangeLevel_Post
-void FN_ChangeLevel_Post(char *s1, char *s2);
+void FN_ChangeLevel_Post(const char *s1, const char *s2);
#endif // FN_ChangeLevel_Post
#ifdef FN_GetSpawnParms_Post
void FN_GetSpawnParms_Post(edict_t *ent);
#endif // FN_GetSpawnParms_Post
#ifdef FN_SaveSpawnParms_Post
void FN_SaveSpawnParms_Post(edict_t *ent);
@@ -1837,37 +1842,37 @@ void FN_RunPlayerMove_Post(edict_t *fake
int FN_NumberOfEntities_Post(void);
#endif // FN_NumberOfEntities_Post
#ifdef FN_GetInfoKeyBuffer_Post
char *FN_GetInfoKeyBuffer_Post(edict_t *e);
#endif // FN_GetInfoKeyBuffer_Post
#ifdef FN_InfoKeyValue_Post
-char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
+char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue_Post
#ifdef FN_SetKeyValue_Post
-void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue_Post
#ifdef FN_SetClientKeyValue_Post
-void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue_Post
#ifdef FN_IsMapValid_Post
-int FN_IsMapValid_Post(char *filename);
+int FN_IsMapValid_Post(const char *filename);
#endif // FN_IsMapValid_Post
#ifdef FN_StaticDecal_Post
void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal_Post
#ifdef FN_PrecacheGeneric_Post
-int FN_PrecacheGeneric_Post(char *s);
+int FN_PrecacheGeneric_Post(const char *s);
#endif // FN_PrecacheGeneric_Post
#ifdef FN_GetPlayerUserId_Post
int FN_GetPlayerUserId_Post(edict_t *e );
#endif // FN_GetPlayerUserId_Post
#ifdef FN_BuildSoundMsg_Post
void FN_BuildSoundMsg_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -2111,17 +2116,17 @@ enum LibType
typedef void (*AUTHORIZEFUNC)(int player, const char *authstring);
typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
-typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
+typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
typedef const char * (*PFN_GET_MODNAME) (void);
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/);
typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */);
typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/);
typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr);
@@ -2170,18 +2175,18 @@ typedef void * (*PFN_ALLOCATOR) (co
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ );
typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const void* /*addr*/ );
#endif
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
-typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
-typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
diff --git a/dlls/fun/Makefile b/dlls/fun/Makefile
--- a/dlls/fun/Makefile
+++ b/dlls/fun/Makefile
@@ -1,78 +1,123 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
-HLSDK = ../../../hlsdk
+###########################################
+### EDIT THESE PATHS FOR YOUR OWN SETUP ###
+###########################################
+
+HLSDK = ../../../hlsdk/multiplayer
MM_ROOT = ../../../metamod/metamod
+#####################################
### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
-OPT_FLAGS = -O2 -funroll-loops -s -pipe -fomit-frame-pointer -fno-strict-aliasing
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-NAME = fun
-
-BIN_SUFFIX_32 = amxx_i386.so
-BIN_SUFFIX_64 = amxx_amd64.so
+PROJECT = fun
OBJECTS = sdk/amxxmodule.cpp fun.cpp
-LINK =
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
-INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
- -I$(MM_ROOT) -I$(HLSDK)/common -Isdk
+C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
-GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+LINK =
-ifeq "$(GCC_VERSION)" "4"
- OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
+INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
+ -I$(MM_ROOT) -Isdk
+
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
+
+OS := $(shell uname -s)
+
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ LIB_SUFFIX = _amxx
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
+else
+ LIB_EXT = so
+ LIB_SUFFIX = _amxx_i386
+ CFLAGS += -DLINUX
+ LINK += -shared
endif
+LINK += -m32 -lm -ldl
+
+CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror
+CPPFLAGS += -fno-exceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
+
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS = $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
BIN_DIR = Release
- CFLAGS = $(OPT_FLAGS)
+ CFLAGS += $(C_OPT_FLAGS)
+ LINK += -s
endif
-CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -fno-rtti -static-libgcc -m32
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-ifeq "$(AMD64)" "true"
- BINARY = $(NAME)_$(BIN_SUFFIX_64)
- CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
else
- BINARY = $(NAME)_$(BIN_SUFFIX_32)
- CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
- OPT_FLAGS += -march=i586
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
endif
-OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
all:
mkdir -p $(BIN_DIR)
mkdir -p $(BIN_DIR)/sdk
- $(MAKE) fun
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-amd64:
- $(MAKE) all AMD64=true
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
-fun: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
-
-debug:
- $(MAKE) all DEBUG=true
+debug:
+ $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
default: all
clean:
- rm -rf Release/sdk/*.o
- rm -rf Release/*.o
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_64)
- rm -rf Debug/sdk/*.o
- rm -rf Debug/*.o
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64)
+ rm -rf $(BIN_DIR)/*.o
+ rm -rf $(BIN_DIR)/sdk/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
+
diff --git a/dlls/fun/sdk/amxxmodule.cpp b/dlls/fun/sdk/amxxmodule.cpp
--- a/dlls/fun/sdk/amxxmodule.cpp
+++ b/dlls/fun/sdk/amxxmodule.cpp
@@ -2235,17 +2235,17 @@ static META_FUNCTIONS g_MetaFunctions_Ta
GetEntityAPI2,
GetEntityAPI2_Post,
GetNewDLLFunctions,
GetNewDLLFunctions_Post,
GetEngineFunctions,
GetEngineFunctions_Post
};
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
if ((int) CVAR_GET_FLOAT("developer") != 0)
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
Plugin_info.logtag, ifvers, Plugin_info.ifvers);
// Check for valid pMetaUtilFuncs before we continue.
if(!pMetaUtilFuncs) {
UTIL_LogPrintf("[%s] ERROR: Meta_Query called with null pMetaUtilFuncs\n", Plugin_info.logtag);
@@ -2329,17 +2329,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
#ifdef FN_META_DETACH
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
@@ -3045,17 +3045,17 @@ char* UTIL_VarArgs( char *format, ... )
return string;
}
//=========================================================
// UTIL_LogPrintf - Prints a logged message to console.
// Preceded by LOG: ( timestamp ) < message >
//=========================================================
-void UTIL_LogPrintf( char *fmt, ... )
+void UTIL_LogPrintf( const char *fmt, ... )
{
va_list argptr;
static char string[1024];
va_start ( argptr, fmt );
vsnprintf ( string, sizeof(string), fmt, argptr );
va_end ( argptr );
diff --git a/dlls/fun/sdk/amxxmodule.h b/dlls/fun/sdk/amxxmodule.h
--- a/dlls/fun/sdk/amxxmodule.h
+++ b/dlls/fun/sdk/amxxmodule.h
@@ -15,21 +15,26 @@
#ifdef USE_METAMOD
#include <extdll.h>
#include <meta_api.h>
#include "osdep.h"
#endif // #ifdef USE_METAMOD
// DLL Export
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
+#endif
+
+#if defined(__linux__) && !defined(LINUX)
#define LINUX
+#elif defined(__APPLE__) && !defined(OSX)
+#define OSX
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
// ***** AMXX stuff *****
// module interface version was 1
@@ -61,17 +66,17 @@ struct amxx_module_info_s
// *** Small stuff ***
// The next section is copied from the amx.h file
// Copyright (c) ITB CompuPhase, 1997-2005
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -303,17 +308,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -390,28 +395,28 @@ enum {
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
AMX_ERR_PARAMS, /* parameter error */
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
};
#if !defined AMX_NO_ALIGN
- #if defined __linux__
+ #if defined(__linux__) || defined(__APPLE__)
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions *****
#ifdef USE_METAMOD
-void UTIL_LogPrintf( char *fmt, ... );
+void UTIL_LogPrintf( const char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY
void FN_META_QUERY(void);
#endif // FN_META_QUERY
@@ -828,21 +833,21 @@ int FN_InconsistentFile_Post(const edict
#ifdef FN_AllowLagCompensation_Post
int FN_AllowLagCompensation_Post(void);
#endif // FN_AllowLagCompensation_Post
#ifdef FN_PrecacheModel
-int FN_PrecacheModel(char *s);
+int FN_PrecacheModel(const char *s);
#endif // FN_PrecacheModel
#ifdef FN_PrecacheSound
-int FN_PrecacheSound(char *s);
+int FN_PrecacheSound(const char *s);
#endif // FN_PrecacheSound
#ifdef FN_SetModel
void FN_SetModel(edict_t *e, const char *m);
#endif // FN_SetModel
#ifdef FN_ModelIndex
int FN_ModelIndex(const char *m);
@@ -852,17 +857,17 @@ int FN_ModelIndex(const char *m);
int FN_ModelFrames(int modelIndex);
#endif // FN_ModelFrames
#ifdef FN_SetSize
void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize
#ifdef FN_ChangeLevel
-void FN_ChangeLevel(char *s1, char *s2);
+void FN_ChangeLevel(const char *s1, const char *s2);
#endif // FN_ChangeLevel
#ifdef FN_GetSpawnParms
void FN_GetSpawnParms(edict_t *ent);
#endif // FN_GetSpawnParms
#ifdef FN_SaveSpawnParms
void FN_SaveSpawnParms(edict_t *ent);
@@ -1256,37 +1261,37 @@ void FN_RunPlayerMove(edict_t *fakeclien
int FN_NumberOfEntities(void);
#endif // FN_NumberOfEntities
#ifdef FN_GetInfoKeyBuffer
char *FN_GetInfoKeyBuffer(edict_t *e);
#endif // FN_GetInfoKeyBuffer
#ifdef FN_InfoKeyValue
-char *FN_InfoKeyValue(char *infobuffer, char *key);
+char *FN_InfoKeyValue(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue
#ifdef FN_SetKeyValue
-void FN_SetKeyValue(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue
#ifdef FN_SetClientKeyValue
-void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue
#ifdef FN_IsMapValid
-int FN_IsMapValid(char *filename);
+int FN_IsMapValid(const char *filename);
#endif // FN_IsMapValid
#ifdef FN_StaticDecal
void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal
#ifdef FN_PrecacheGeneric
-int FN_PrecacheGeneric(char *s);
+int FN_PrecacheGeneric(const char *s);
#endif // FN_PrecacheGeneric
#ifdef FN_GetPlayerUserId
int FN_GetPlayerUserId(edict_t *e );
#endif // FN_GetPlayerUserId
#ifdef FN_BuildSoundMsg
void FN_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -1409,21 +1414,21 @@ const char *FN_GetPlayerAuthId(edict_t *
#endif // FN_GetPlayerAuthId
#ifdef FN_PrecacheModel_Post
-int FN_PrecacheModel_Post(char *s);
+int FN_PrecacheModel_Post(const char *s);
#endif // FN_PrecacheModel_Post
#ifdef FN_PrecacheSound_Post
-int FN_PrecacheSound_Post(char *s);
+int FN_PrecacheSound_Post(const char *s);
#endif // FN_PrecacheSound_Post
#ifdef FN_SetModel_Post
void FN_SetModel_Post(edict_t *e, const char *m);
#endif // FN_SetModel_Post
#ifdef FN_ModelIndex_Post
int FN_ModelIndex_Post(const char *m);
@@ -1433,17 +1438,17 @@ int FN_ModelIndex_Post(const char *m);
int FN_ModelFrames_Post(int modelIndex);
#endif // FN_ModelFrames_Post
#ifdef FN_SetSize_Post
void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize_Post
#ifdef FN_ChangeLevel_Post
-void FN_ChangeLevel_Post(char *s1, char *s2);
+void FN_ChangeLevel_Post(const char *s1, const char *s2);
#endif // FN_ChangeLevel_Post
#ifdef FN_GetSpawnParms_Post
void FN_GetSpawnParms_Post(edict_t *ent);
#endif // FN_GetSpawnParms_Post
#ifdef FN_SaveSpawnParms_Post
void FN_SaveSpawnParms_Post(edict_t *ent);
@@ -1837,37 +1842,37 @@ void FN_RunPlayerMove_Post(edict_t *fake
int FN_NumberOfEntities_Post(void);
#endif // FN_NumberOfEntities_Post
#ifdef FN_GetInfoKeyBuffer_Post
char *FN_GetInfoKeyBuffer_Post(edict_t *e);
#endif // FN_GetInfoKeyBuffer_Post
#ifdef FN_InfoKeyValue_Post
-char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
+char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue_Post
#ifdef FN_SetKeyValue_Post
-void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue_Post
#ifdef FN_SetClientKeyValue_Post
-void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue_Post
#ifdef FN_IsMapValid_Post
-int FN_IsMapValid_Post(char *filename);
+int FN_IsMapValid_Post(const char *filename);
#endif // FN_IsMapValid_Post
#ifdef FN_StaticDecal_Post
void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal_Post
#ifdef FN_PrecacheGeneric_Post
-int FN_PrecacheGeneric_Post(char *s);
+int FN_PrecacheGeneric_Post(const char *s);
#endif // FN_PrecacheGeneric_Post
#ifdef FN_GetPlayerUserId_Post
int FN_GetPlayerUserId_Post(edict_t *e );
#endif // FN_GetPlayerUserId_Post
#ifdef FN_BuildSoundMsg_Post
void FN_BuildSoundMsg_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -2111,17 +2116,17 @@ enum LibType
typedef void (*AUTHORIZEFUNC)(int player, const char *authstring);
typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
-typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
+typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
typedef const char * (*PFN_GET_MODNAME) (void);
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/);
typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */);
typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/);
typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr);
@@ -2170,18 +2175,18 @@ typedef void * (*PFN_ALLOCATOR) (co
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ );
typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const void* /*addr*/ );
#endif
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
-typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
-typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
diff --git a/dlls/geoip/Makefile b/dlls/geoip/Makefile
--- a/dlls/geoip/Makefile
+++ b/dlls/geoip/Makefile
@@ -1,86 +1,127 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
-HLSDK = ../../../hlsdk
+###########################################
+### EDIT THESE PATHS FOR YOUR OWN SETUP ###
+###########################################
+
+HLSDK = ../../../hlsdk/multiplayer
MM_ROOT = ../../../metamod/metamod
+#####################################
### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
-OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -fomit-frame-pointer
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-NAME = geoip
-
-BIN_SUFFIX_32 = amxx_i386.so
-BIN_SUFFIX_64 = amxx_amd64.so
+PROJECT = geoip
OBJECTS = sdk/amxxmodule.cpp GeoIP.c geoip_amxx.cpp
-LINK =
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
-INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
- -I$(MM_ROOT) -I$(HLSDK)/common -Isdk
+C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
-GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+LINK =
-ifeq "$(GCC_VERSION)" "4"
- OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
+INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
+ -I$(MM_ROOT) -Isdk
+
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
+
+OS := $(shell uname -s)
+
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ LIB_SUFFIX = _amxx
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
+else
+ LIB_EXT = so
+ LIB_SUFFIX = _amxx_i386
+ CFLAGS += -DLINUX
+ LINK += -shared
endif
+LINK += -m32 -lm -ldl
+
+CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror
+CPPFLAGS += -fno-exceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
+
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS = $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
BIN_DIR = Release
- CFLAGS = $(OPT_FLAGS)
+ CFLAGS += $(C_OPT_FLAGS)
+ LINK += -s
endif
-CFLAGS += -DNDEBUG -Wall -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -m32
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-# Strip C++ options for compiling *.c files
-C_CFLAGS := $(shell echo $(CFLAGS) | sed -e 's/-fvisibility-inlines-hidden//' | sed -e 's/-fno-rtti//')
-
-ifeq "$(AMD64)" "true"
- BINARY = $(NAME)_$(BIN_SUFFIX_64)
- CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
else
- BINARY = $(NAME)_$(BIN_SUFFIX_32)
- CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
- OPT_FLAGS += -march=i586
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
endif
-OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
-OBJ_LINUX := $(OBJ_LINUX:%.c=$(BIN_DIR)/%.o)
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+OBJ_BIN := $(OBJ_BIN:%.c=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
$(BIN_DIR)/%.o: %.c
- $(CPP) $(INCLUDE) $(C_CFLAGS) -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
all:
mkdir -p $(BIN_DIR)
mkdir -p $(BIN_DIR)/sdk
- $(MAKE) geoip
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-amd64:
- $(MAKE) all AMD64=true
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
-geoip: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
-
-debug:
- $(MAKE) all DEBUG=true
+debug:
+ $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
default: all
clean:
- rm -rf Release/sdk/*.o
- rm -rf Release/*.o
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_64)
- rm -rf Debug/sdk/*.o
- rm -rf Debug/*.o
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64)
+ rm -rf $(BIN_DIR)/*.o
+ rm -rf $(BIN_DIR)/sdk/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
diff --git a/dlls/geoip/sdk/amxxmodule.cpp b/dlls/geoip/sdk/amxxmodule.cpp
--- a/dlls/geoip/sdk/amxxmodule.cpp
+++ b/dlls/geoip/sdk/amxxmodule.cpp
@@ -2235,17 +2235,17 @@ static META_FUNCTIONS g_MetaFunctions_Ta
GetEntityAPI2,
GetEntityAPI2_Post,
GetNewDLLFunctions,
GetNewDLLFunctions_Post,
GetEngineFunctions,
GetEngineFunctions_Post
};
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
if ((int) CVAR_GET_FLOAT("developer") != 0)
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
Plugin_info.logtag, ifvers, Plugin_info.ifvers);
// Check for valid pMetaUtilFuncs before we continue.
if(!pMetaUtilFuncs) {
UTIL_LogPrintf("[%s] ERROR: Meta_Query called with null pMetaUtilFuncs\n", Plugin_info.logtag);
@@ -2329,17 +2329,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
#ifdef FN_META_DETACH
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
@@ -3045,17 +3045,17 @@ char* UTIL_VarArgs( char *format, ... )
return string;
}
//=========================================================
// UTIL_LogPrintf - Prints a logged message to console.
// Preceded by LOG: ( timestamp ) < message >
//=========================================================
-void UTIL_LogPrintf( char *fmt, ... )
+void UTIL_LogPrintf( const char *fmt, ... )
{
va_list argptr;
static char string[1024];
va_start ( argptr, fmt );
vsnprintf ( string, sizeof(string), fmt, argptr );
va_end ( argptr );
diff --git a/dlls/geoip/sdk/amxxmodule.h b/dlls/geoip/sdk/amxxmodule.h
--- a/dlls/geoip/sdk/amxxmodule.h
+++ b/dlls/geoip/sdk/amxxmodule.h
@@ -15,21 +15,26 @@
#ifdef USE_METAMOD
#include <extdll.h>
#include <meta_api.h>
#include "osdep.h"
#endif // #ifdef USE_METAMOD
// DLL Export
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
+#endif
+
+#if defined(__linux__) && !defined(LINUX)
#define LINUX
+#elif defined(__APPLE__) && !defined(OSX)
+#define OSX
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
// ***** AMXX stuff *****
// module interface version was 1
@@ -61,17 +66,17 @@ struct amxx_module_info_s
// *** Small stuff ***
// The next section is copied from the amx.h file
// Copyright (c) ITB CompuPhase, 1997-2005
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -303,17 +308,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -390,28 +395,28 @@ enum {
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
AMX_ERR_PARAMS, /* parameter error */
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
};
#if !defined AMX_NO_ALIGN
- #if defined __linux__
+ #if defined(__linux__) || defined(__APPLE__)
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions *****
#ifdef USE_METAMOD
-void UTIL_LogPrintf( char *fmt, ... );
+void UTIL_LogPrintf( const char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY
void FN_META_QUERY(void);
#endif // FN_META_QUERY
@@ -828,21 +833,21 @@ int FN_InconsistentFile_Post(const edict
#ifdef FN_AllowLagCompensation_Post
int FN_AllowLagCompensation_Post(void);
#endif // FN_AllowLagCompensation_Post
#ifdef FN_PrecacheModel
-int FN_PrecacheModel(char *s);
+int FN_PrecacheModel(const char *s);
#endif // FN_PrecacheModel
#ifdef FN_PrecacheSound
-int FN_PrecacheSound(char *s);
+int FN_PrecacheSound(const char *s);
#endif // FN_PrecacheSound
#ifdef FN_SetModel
void FN_SetModel(edict_t *e, const char *m);
#endif // FN_SetModel
#ifdef FN_ModelIndex
int FN_ModelIndex(const char *m);
@@ -852,17 +857,17 @@ int FN_ModelIndex(const char *m);
int FN_ModelFrames(int modelIndex);
#endif // FN_ModelFrames
#ifdef FN_SetSize
void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize
#ifdef FN_ChangeLevel
-void FN_ChangeLevel(char *s1, char *s2);
+void FN_ChangeLevel(const char *s1, const char *s2);
#endif // FN_ChangeLevel
#ifdef FN_GetSpawnParms
void FN_GetSpawnParms(edict_t *ent);
#endif // FN_GetSpawnParms
#ifdef FN_SaveSpawnParms
void FN_SaveSpawnParms(edict_t *ent);
@@ -1256,37 +1261,37 @@ void FN_RunPlayerMove(edict_t *fakeclien
int FN_NumberOfEntities(void);
#endif // FN_NumberOfEntities
#ifdef FN_GetInfoKeyBuffer
char *FN_GetInfoKeyBuffer(edict_t *e);
#endif // FN_GetInfoKeyBuffer
#ifdef FN_InfoKeyValue
-char *FN_InfoKeyValue(char *infobuffer, char *key);
+char *FN_InfoKeyValue(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue
#ifdef FN_SetKeyValue
-void FN_SetKeyValue(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue
#ifdef FN_SetClientKeyValue
-void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue
#ifdef FN_IsMapValid
-int FN_IsMapValid(char *filename);
+int FN_IsMapValid(const char *filename);
#endif // FN_IsMapValid
#ifdef FN_StaticDecal
void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal
#ifdef FN_PrecacheGeneric
-int FN_PrecacheGeneric(char *s);
+int FN_PrecacheGeneric(const char *s);
#endif // FN_PrecacheGeneric
#ifdef FN_GetPlayerUserId
int FN_GetPlayerUserId(edict_t *e );
#endif // FN_GetPlayerUserId
#ifdef FN_BuildSoundMsg
void FN_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -1409,21 +1414,21 @@ const char *FN_GetPlayerAuthId(edict_t *
#endif // FN_GetPlayerAuthId
#ifdef FN_PrecacheModel_Post
-int FN_PrecacheModel_Post(char *s);
+int FN_PrecacheModel_Post(const char *s);
#endif // FN_PrecacheModel_Post
#ifdef FN_PrecacheSound_Post
-int FN_PrecacheSound_Post(char *s);
+int FN_PrecacheSound_Post(const char *s);
#endif // FN_PrecacheSound_Post
#ifdef FN_SetModel_Post
void FN_SetModel_Post(edict_t *e, const char *m);
#endif // FN_SetModel_Post
#ifdef FN_ModelIndex_Post
int FN_ModelIndex_Post(const char *m);
@@ -1433,17 +1438,17 @@ int FN_ModelIndex_Post(const char *m);
int FN_ModelFrames_Post(int modelIndex);
#endif // FN_ModelFrames_Post
#ifdef FN_SetSize_Post
void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize_Post
#ifdef FN_ChangeLevel_Post
-void FN_ChangeLevel_Post(char *s1, char *s2);
+void FN_ChangeLevel_Post(const char *s1, const char *s2);
#endif // FN_ChangeLevel_Post
#ifdef FN_GetSpawnParms_Post
void FN_GetSpawnParms_Post(edict_t *ent);
#endif // FN_GetSpawnParms_Post
#ifdef FN_SaveSpawnParms_Post
void FN_SaveSpawnParms_Post(edict_t *ent);
@@ -1837,37 +1842,37 @@ void FN_RunPlayerMove_Post(edict_t *fake
int FN_NumberOfEntities_Post(void);
#endif // FN_NumberOfEntities_Post
#ifdef FN_GetInfoKeyBuffer_Post
char *FN_GetInfoKeyBuffer_Post(edict_t *e);
#endif // FN_GetInfoKeyBuffer_Post
#ifdef FN_InfoKeyValue_Post
-char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
+char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue_Post
#ifdef FN_SetKeyValue_Post
-void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue_Post
#ifdef FN_SetClientKeyValue_Post
-void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue_Post
#ifdef FN_IsMapValid_Post
-int FN_IsMapValid_Post(char *filename);
+int FN_IsMapValid_Post(const char *filename);
#endif // FN_IsMapValid_Post
#ifdef FN_StaticDecal_Post
void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal_Post
#ifdef FN_PrecacheGeneric_Post
-int FN_PrecacheGeneric_Post(char *s);
+int FN_PrecacheGeneric_Post(const char *s);
#endif // FN_PrecacheGeneric_Post
#ifdef FN_GetPlayerUserId_Post
int FN_GetPlayerUserId_Post(edict_t *e );
#endif // FN_GetPlayerUserId_Post
#ifdef FN_BuildSoundMsg_Post
void FN_BuildSoundMsg_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -2111,17 +2116,17 @@ enum LibType
typedef void (*AUTHORIZEFUNC)(int player, const char *authstring);
typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
-typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
+typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
typedef const char * (*PFN_GET_MODNAME) (void);
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/);
typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */);
typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/);
typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr);
@@ -2170,18 +2175,18 @@ typedef void * (*PFN_ALLOCATOR) (co
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ );
typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const void* /*addr*/ );
#endif
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
-typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
-typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
diff --git a/dlls/hamsandwich/Makefile b/dlls/hamsandwich/Makefile
--- a/dlls/hamsandwich/Makefile
+++ b/dlls/hamsandwich/Makefile
@@ -1,74 +1,124 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
-HLSDK = ../../../hlsdk
+###########################################
+### EDIT THESE PATHS FOR YOUR OWN SETUP ###
+###########################################
+
+HLSDK = ../../../hlsdk/multiplayer
MM_ROOT = ../../../metamod/metamod
+#####################################
### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
+PROJECT = hamsandwich
-OPT_FLAGS = -O3 -funroll-loops -s -pipe -fomit-frame-pointer -fno-strict-aliasing -DNDEBUG
+OBJECTS = sdk/amxxmodule.cpp amxx_api.cpp config_parser.cpp hook_callbacks.cpp hook_native.cpp \
+ srvcmd.cpp call_funcs.cpp hook_create.cpp DataHandler.cpp pdata.cpp
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-#CPP = gcc-2.95
-NAME = hamsandwich
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
-BIN_SUFFIX = amxx_i386.so
+C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
-OBJECTS = sdk/amxxmodule.cpp amxx_api.cpp config_parser.cpp \
-hook_callbacks.cpp hook_native.cpp srvcmd.cpp \
-call_funcs.cpp hook_create.cpp DataHandler.cpp pdata.cpp
+LINK =
+INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
+ -I$(HLSDK)/pm_shared -I$(MM_ROOT) -Isdk
-LINK =
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
-INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
- -I$(MM_ROOT) -I$(HLSDK)/common -I$(HLSDK)/pm_shared -I./tableentries -Isdk
+OS := $(shell uname -s)
-GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ LIB_SUFFIX = _amxx
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
+else
+ LIB_EXT = so
+ LIB_SUFFIX = _amxx_i386
+ CFLAGS += -DLINUX
+ LINK += -shared
+endif
+
+LINK += -m32 -lm -ldl
+
+CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror
+CPPFLAGS += -fno-exceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS = $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
BIN_DIR = Release
-
- ifeq "$(GCC_VERSION)" "4"
- OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
- endif
- CFLAGS = $(OPT_FLAGS)
+ CFLAGS += $(C_OPT_FLAGS)
+ LINK += -s
endif
-CFLAGS += -Wall -Wno-non-virtual-dtor -fno-exceptions -DHAVE_STDINT_H -fno-rtti -Werror -m32
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-BINARY = $(NAME)_$(BIN_SUFFIX)
-CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
-OPT_FLAGS += -march=i586
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
+else
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
+endif
-OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
all:
mkdir -p $(BIN_DIR)
mkdir -p $(BIN_DIR)/sdk
- $(MAKE) hamsandwich
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-hamsandwich: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
-debug:
- $(MAKE) all DEBUG=true
+debug:
+ $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
default: all
clean:
- rm -rf Release/*.o
- rm -rf Release/sdk/*.o
- rm -rf Release/$(NAME)_$(BIN_SUFFIX)
- rm -rf Debug/*.o
- rm -rf Debug/sdk/*.o
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX)
-
+ rm -rf $(BIN_DIR)/*.o
+ rm -rf $(BIN_DIR)/sdk/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
+
diff --git a/dlls/hamsandwich/Trampolines.h b/dlls/hamsandwich/Trampolines.h
--- a/dlls/hamsandwich/Trampolines.h
+++ b/dlls/hamsandwich/Trampolines.h
@@ -41,20 +41,22 @@
#define WIN32_LEAN_AND_MEAN
#endif // WIN32_LEAN_AND_MEAN
#if _MSC_VER >= 1400
#ifdef offsetof
#undef offsetof
#endif // offsetof
#endif // _MSC_VER >= 1400
#include <windows.h>
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
#include <sys/mman.h>
+#if defined (__linux__)
#include <malloc.h>
#endif
+#endif
#include <stddef.h> // size_t
#include <string.h> // memcpy
#include <stdlib.h> // memalign
#include <stdio.h>
namespace Trampolines
{
@@ -108,24 +110,24 @@ namespace Trampolines
const unsigned int codePushParamReplace = 2;
/**
* Takes the "this" pointer from the trampoline and
* pushes it onto the target's stack.
*/
const unsigned char codePushThis[] = {
- #if defined _WIN32
+ #if defined(_WIN32)
0x51 // push ecx
- #elif defined __linux__
+ #elif defined(__linux__) || defined(__APPLE__)
0xFF, 0x75, 0x04 // pushl [ebp+0x08h]
#endif
};
-#if defined __linux__
+#if defined(__linux__) || defined(__APPLE__)
const int codePushThisReplace = 2;
#endif
/**
* Pushes a raw number onto the target's stack
*/
const unsigned char codePushID[] = {
0x68, 0xDE, 0xFA, 0xAD, 0xDE // push DEADFADEh
@@ -405,34 +407,34 @@ namespace Trampolines
return;
}
unsigned char code[sizeof(::Trampolines::Bytecode::codePushThis)];
memcpy(&code[0],&::Trampolines::Bytecode::codePushThis[0],sizeof(::Trampolines::Bytecode::codePushThis));
-#if defined __linux__
+#if defined(__linux__) || defined(__APPLE__)
unsigned char *c=&code[0];
union
{
int i;
unsigned char b[4];
} bi;
bi.i=m_paramstart+8;
c+=::Trampolines::Bytecode::codePushThisReplace;
*c++=bi.b[0];
#endif
Append(&code[0],sizeof(::Trampolines::Bytecode::codePushThis));
-#if defined __linux__
+#if defined(__linux__) || defined(__APPLE__)
m_mystack+=4;
#endif
m_calledstack+=4;
};
/**
* Frees what is estimated as the stack usage of the trampoline.
*/
@@ -526,17 +528,17 @@ namespace Trampolines
/**
* Takes a parameter passed on the trampoline's stack and inserts it into the callee's stack.
*
* @param which The parameter number to push. 1-based. "thiscall" trampolines automatically compensate for the off-number on GCC.
*/
void PushParam(int which)
{
-#if defined __linux__
+#if defined(__linux__) || defined(__APPLE__)
if (m_thiscall)
{
which++;
}
#endif
which=which*4;
which+=m_paramstart+4;
@@ -603,20 +605,24 @@ namespace Trampolines
//void *ret=(void *)m_buffer;
if (size)
{
*size=m_size;
}
// Reallocate with proper flags
-#if defined _WIN32
+#if defined(_WIN32)
void *ret=VirtualAlloc(NULL, m_size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
-#elif defined __linux__
+#elif defined(__GNUC__)
+# if defined(__APPLE__)
+ void *ret = valloc(m_size);
+# else
void *ret=memalign(sysconf(_SC_PAGESIZE), m_size);
+# endif
mprotect(ret,m_size,PROT_READ|PROT_WRITE|PROT_EXEC);
#endif
memcpy(ret, m_buffer, m_size);
m_size=0;
free(m_buffer);
@@ -670,27 +676,27 @@ inline void *CreateGenericTrampoline(boo
{
tramp.PushThis();
}
tramp.PushNum(reinterpret_cast<int>(extraptr));
tramp.Call(callee);
tramp.FreeTargetStack();
if (voidcall)
{
-#if defined _WIN32
+#if defined(_WIN32)
tramp.VoidEpilogueAndFree();
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
tramp.VoidEpilogue();
#endif
}
else
{
-#if defined _WIN32
+#if defined(_WIN32)
tramp.ReturnEpilogueAndFree();
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
tramp.ReturnEpilogue();
#endif
}
return tramp.Finish(NULL);
};
diff --git a/dlls/hamsandwich/amxx_api.cpp b/dlls/hamsandwich/amxx_api.cpp
--- a/dlls/hamsandwich/amxx_api.cpp
+++ b/dlls/hamsandwich/amxx_api.cpp
@@ -74,18 +74,20 @@ void OnAmxxAttach(void)
MF_AddNatives(RegisterNatives);
MF_AddNatives(ReturnNatives);
MF_AddNatives(pdata_natives);
}
else
{
#ifdef _WIN32
MF_Log("Error: pev and base not set for section \"%s windows\", cannot register natives.", MF_GetModname());
-#elif defined __linux__
+#elif defined(__linux__)
MF_Log("Error: pev and base not set for section \"%s linux\", cannot register natives.", MF_GetModname());
+#elif defined(__APPLE__)
+ MF_Log("Error: pev and base not set for section \"%s mac\", cannot register natives.", MF_GetModname());
#endif
}
}
else
{
MF_Log("Error: Cannot read config file, natives not registered!");
}
}
diff --git a/dlls/hamsandwich/call_funcs.cpp b/dlls/hamsandwich/call_funcs.cpp
--- a/dlls/hamsandwich/call_funcs.cpp
+++ b/dlls/hamsandwich/call_funcs.cpp
@@ -109,181 +109,181 @@ inline void *_GetFunction(void *pthis, i
gDoForwards=true; \
}
cell Call_Void_Void(AMX *amx, cell *params)
{
SETUP(0);
-#ifdef _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall *)(void*, int)>(__func)(pv, 0);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void *)>(__func)(pv);
#endif
return 1;
}
cell Call_Int_Void(AMX *amx, cell *params)
{
SETUP(0);
-#ifdef _WIN32
+#if defined(_WIN32)
return reinterpret_cast<int (__fastcall *)(void*, int)>(__func)(pv, 0);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
return reinterpret_cast<int (*)(void *)>(__func)(pv);
#endif
}
cell Call_Void_Entvar(AMX *amx, cell *params)
{
SETUP(1);
int id3=*MF_GetAmxAddr(amx, params[3]);
CHECK_ENTITY(id3);
entvars_t *ev1=&(INDEXENT_NEW(id3)->v);
-#ifdef _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall *)(void*, int, entvars_t *)>(__func)(pv, 0, ev1);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void *, entvars_t *)>(__func)(pv, ev1);
#endif
return 1;
}
cell Call_Void_Cbase(AMX *amx, cell *params)
{
SETUP(1);
int id3=*MF_GetAmxAddr(amx, params[3]);
CHECK_ENTITY(id3);
void *pv1=(INDEXENT_NEW(id3)->pvPrivateData);
-#ifdef _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall *)(void*, int, void *)>(__func)(pv, 0, pv1);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void *, void *)>(__func)(pv, pv1);
#endif
return 1;
}
cell Call_Int_Float_Int(AMX *amx, cell *params)
{
SETUP(2);
float f3=amx_ftoc2(*MF_GetAmxAddr(amx, params[3]));
int i4=*MF_GetAmxAddr(amx, params[4]);
-#ifdef _WIN32
+#if defined(_WIN32)
return reinterpret_cast<int (__fastcall *)(void*, int, float, int)>(__func)(pv, 0, f3, i4);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
return reinterpret_cast<int (*)(void *, float, int)>(__func)(pv, f3, i4);
#endif
}
cell Call_Void_Entvar_Int(AMX *amx, cell *params)
{
SETUP(2);
int id3=*MF_GetAmxAddr(amx, params[3]);
int i4=*MF_GetAmxAddr(amx, params[4]);
CHECK_ENTITY(id3);
entvars_t *ev3=&(INDEXENT_NEW(id3)->v);
-#ifdef _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall *)(void*, int, entvars_t *, int)>(__func)(pv, 0, ev3, i4);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void *, entvars_t *, int)>(__func)(pv, ev3, i4);
#endif
return 1;
}
cell Call_Int_Cbase(AMX *amx, cell *params)
{
SETUP(1);
int id3=*MF_GetAmxAddr(amx, params[3]);
CHECK_ENTITY(id3);
void *pv1=(INDEXENT_NEW(id3)->pvPrivateData);
-#ifdef _WIN32
+#if defined(_WIN32)
return reinterpret_cast<int (__fastcall *)(void*, int, void *)>(__func)(pv, 0, pv1);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
return reinterpret_cast<int (*)(void *, void *)>(__func)(pv, pv1);
#endif
}
cell Call_Void_Int_Int(AMX *amx, cell *params)
{
SETUP(2);
int i3=*MF_GetAmxAddr(amx, params[3]);
int i4=*MF_GetAmxAddr(amx, params[4]);
-#ifdef _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall *)(void*, int, int, int)>(__func)(pv, 0, i3, i4);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void *, int, int)>(__func)(pv, i3, i4);
#endif
return 1;
}
cell Call_Int_Int_Str_Int(AMX *amx, cell *params)
{
SETUP(3);
int i3=*MF_GetAmxAddr(amx, params[3]);
char *sz4=MF_GetAmxString(amx, params[4], 0, NULL);
int i5=*MF_GetAmxAddr(amx, params[5]);
-#ifdef _WIN32
+#if defined(_WIN32)
return reinterpret_cast<int (__fastcall *)(void*, int, int, const char *, int)>(__func)(pv, 0, i3, sz4, i5);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
return reinterpret_cast<int (*)(void *, int, const char *, int)>(__func)(pv, i3, sz4, i5);
#endif
}
cell Call_Int_Int(AMX *amx, cell *params)
{
SETUP(1);
int i3=*MF_GetAmxAddr(amx, params[3]);
-#ifdef _WIN32
+#if defined(_WIN32)
return reinterpret_cast<int (__fastcall *)(void*, int, int)>(__func)(pv, 0, i3);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
return reinterpret_cast<int (*)(void *, int)>(__func)(pv, i3);
#endif
}
cell Call_Int_Entvar(AMX *amx, cell *params)
{
SETUP(1);
int id3=*MF_GetAmxAddr(amx, params[3]);
CHECK_ENTITY(id3);
entvars_t *ev3=&(INDEXENT_NEW(id3)->v);
-#ifdef _WIN32
+#if defined(_WIN32)
return reinterpret_cast<int (__fastcall *)(void *, int, entvars_t *)>(__func)(pv, 0, ev3);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
return reinterpret_cast<int (*)(void *, entvars_t *)>(__func)(pv, ev3);
#endif
}
cell Call_Int_Entvar_Entvar_Float_Int(AMX *amx, cell *params)
{
SETUP(4);
@@ -293,19 +293,19 @@ cell Call_Int_Entvar_Entvar_Float_Int(AM
int i6=*MF_GetAmxAddr(amx, params[6]);
CHECK_ENTITY(id3);
CHECK_ENTITY(id4);
entvars_t *ev3=&(INDEXENT_NEW(id3)->v);
entvars_t *ev4=&(INDEXENT_NEW(id4)->v);
-#ifdef _WIN32
+#if defined(_WIN32)
return reinterpret_cast<int (__fastcall *)(void *, int, entvars_t *, entvars_t *, float, int)>(__func)(pv, 0, ev3, ev4, f5, i6);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
return reinterpret_cast<int (*)(void *, entvars_t *, entvars_t *, float, int)>(__func)(pv, ev3, ev4, f5, i6);
#endif
}
cell Call_Int_Entvar_Entvar_Float_Float_Int(AMX *amx, cell *params)
{
SETUP(5);
@@ -316,32 +316,32 @@ cell Call_Int_Entvar_Entvar_Float_Float_
int i7=*MF_GetAmxAddr(amx, params[7]);
CHECK_ENTITY(id3);
CHECK_ENTITY(id4);
entvars_t *ev3=&(INDEXENT_NEW(id3)->v);
entvars_t *ev4=&(INDEXENT_NEW(id4)->v);
-#ifdef _WIN32
+#if defined(_WIN32)
return reinterpret_cast<int (__fastcall *)(void *, int, entvars_t *, entvars_t *, float, float, int)>(__func)(pv, 0, ev3, ev4, f5, f6, i7);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
return reinterpret_cast<int (*)(void *, entvars_t *, entvars_t *, float, float, int)>(__func)(pv, ev3, ev4, f5, f6, i7);
#endif
}
cell Call_Void_Int(AMX *amx, cell *params)
{
SETUP(1);
int i3=*MF_GetAmxAddr(amx, params[3]);
-#ifdef _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall *)(void *, int, int)>(__func)(pv, 0, i3);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void *, int)>(__func)(pv, i3);
#endif
return 1;
}
cell Call_Void_Cbase_Cbase_Int_Float(AMX *amx, cell *params)
{
@@ -353,19 +353,19 @@ cell Call_Void_Cbase_Cbase_Int_Float(AMX
float f6=amx_ctof(*MF_GetAmxAddr(amx, params[6]));
CHECK_ENTITY(id3);
CHECK_ENTITY(id4);
void *p3=IndexToPrivate(id3);
void *p4=IndexToPrivate(id4);
-#ifdef _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall *)(void *, int, void *, void *, int, float)>(__func)(pv, 0, p3, p4, i5, f6);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void *, void *, void *, int, float)>(__func)(pv, p3, p4, i5, f6);
#endif
return 1;
}
cell Call_Void_Entvar_Float_Vector_Trace_Int(AMX *amx, cell *params)
{
@@ -387,19 +387,19 @@ cell Call_Void_Entvar_Float_Vector_Trace
MF_LogError(amx, AMX_ERR_NATIVE, "Null traceresult provided.");
return 0;
}
CHECK_ENTITY(id3);
entvars_t *ev3=&(INDEXENT_NEW(id3)->v);
-#ifdef _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall *)(void *, int, entvars_t *, float, Vector, TraceResult *, int)>(__func)(pv, 0, ev3, f4, v5, tr6, i7);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void *, entvars_t *, float, Vector, TraceResult *, int)>(__func)(pv, ev3, f4, v5, tr6, i7);
#endif
return 1;
}
cell Call_Void_Float_Vector_Trace_Int(AMX *amx, cell *params)
{
@@ -417,55 +417,55 @@ cell Call_Void_Float_Vector_Trace_Int(AM
if (tr5==NULL)
{
MF_LogError(amx, AMX_ERR_NATIVE, "Null traceresult provided.");
return 0;
}
-#ifdef _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall *)(void *, int, float, Vector, TraceResult *, int)>(__func)(pv, 0, f3, v4, tr5, i6);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void *, float, Vector, TraceResult *, int)>(__func)(pv, f3, v4, tr5, i6);
#endif
return 1;
}
cell Call_Str_Void(AMX *amx, cell *params)
{
SETUP(2);
-#ifdef _WIN32
+#if defined(_WIN32)
char *v=reinterpret_cast<char *(__fastcall *)(void *, int)>(__func)(pv, 0);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
char *v=reinterpret_cast<char *(*)(void *)>(__func)(pv);
#endif
return MF_SetAmxString(amx, params[3], v == NULL ? "" : v, *MF_GetAmxAddr(amx, params[4]));
}
cell Call_Cbase_Void(AMX *amx, cell *params)
{
SETUP(0);
-#ifdef _WIN32
+#if defined(_WIN32)
void *ret=reinterpret_cast<void *(__fastcall *)(void *, int)>(__func)(pv, 0);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
void *ret=reinterpret_cast<void *(*)(void *)>(__func)(pv);
#endif
return PrivateToIndex(ret);
}
cell Call_Vector_Void(AMX *amx, cell *params)
{
SETUP(1);
-#ifdef _WIN32
+#if defined(_WIN32)
Vector ret=reinterpret_cast<Vector (__fastcall *)(void *, int)>(__func)(pv, 0);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
Vector ret=reinterpret_cast<Vector (*)(void *)>(__func)(pv);
#endif
float *out=(float *)MF_GetAmxAddr(amx, params[3]);
out[0]=ret.x;
out[1]=ret.y;
out[2]=ret.z;
return 1;
@@ -476,19 +476,19 @@ cell Call_Vector_pVector(AMX *amx, cell
SETUP(2);
Vector v3;
float *fl3=(float *)MF_GetAmxAddr(amx, params[3]);
v3.x=fl3[0];
v3.y=fl3[1];
v3.z=fl3[2];
-#ifdef _WIN32
+#if defined(_WIN32)
Vector ret=reinterpret_cast<Vector (__fastcall *)(void *, int, Vector*)>(__func)(pv, 0, &v3);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
Vector ret=reinterpret_cast<Vector (*)(void *, Vector*)>(__func)(pv, &v3);
#endif
float *out=(float *)MF_GetAmxAddr(amx, params[4]);
out[0]=ret.x;
out[1]=ret.y;
out[2]=ret.z;
fl3[0]=v3.x;
@@ -503,19 +503,19 @@ cell Call_Int_pVector(AMX *amx, cell *pa
SETUP(1);
Vector v3;
float *fl3=(float *)MF_GetAmxAddr(amx, params[3]);
v3.x=fl3[0];
v3.y=fl3[1];
v3.z=fl3[2];
-#ifdef _WIN32
+#if defined(_WIN32)
int ret=reinterpret_cast<int (__fastcall *)(void *, int, Vector*)>(__func)(pv, 0, &v3);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
int ret=reinterpret_cast<int (*)(void *, Vector*)>(__func)(pv, &v3);
#endif
fl3[0]=v3.x;
fl3[1]=v3.y;
fl3[2]=v3.z;
return ret;
@@ -528,114 +528,114 @@ cell Call_Void_Entvar_Float_Float(AMX *a
int id3=*MF_GetAmxAddr(amx, params[3]);
float f4=amx_ctof2(*MF_GetAmxAddr(amx, params[4]));
float f5=amx_ctof2(*MF_GetAmxAddr(amx, params[5]));
CHECK_ENTITY(id3);
entvars_t *ev3=&(INDEXENT_NEW(id3)->v);
-#ifdef _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall *)(void *, int, entvars_t *, float, float)>(__func)(pv, 0, ev3, f4, f5);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void *, entvars_t *, float, float)>(__func)(pv, ev3, f4, f5);
#endif
return 1;
}
cell Call_Int_pFloat_pFloat(AMX *amx, cell *params)
{
SETUP(2);
float f3=amx_ctof2(*MF_GetAmxAddr(amx, params[3]));
float f4=amx_ctof2(*MF_GetAmxAddr(amx, params[4]));
-#ifdef _WIN32
+#if defined(_WIN32)
return reinterpret_cast<int (__fastcall *)(void *, int, float*, float*)>(__func)(pv, 0, &f3, &f4);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
return reinterpret_cast<int (*)(void *, float*, float*)>(__func)(pv, &f3, &f4);
#endif
}
cell Call_Void_Entvar_Float(AMX *amx, cell *params)
{
SETUP(2);
int id3=*MF_GetAmxAddr(amx, params[3]);
float f4=amx_ctof2(*MF_GetAmxAddr(amx, params[4]));
CHECK_ENTITY(id3);
entvars_t *ev3=&(INDEXENT_NEW(id3)->v);
-#ifdef _WIN32
+#if defined(_WIN32)
return reinterpret_cast<int (__fastcall *)(void *, int, entvars_t*, float)>(__func)(pv, 0, ev3, f4);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
return reinterpret_cast<int (*)(void *, entvars_t*, float)>(__func)(pv, ev3, f4);
#endif
}
cell Call_Void_Int_Int_Int(AMX *amx, cell *params)
{
SETUP(2);
int i3=*MF_GetAmxAddr(amx, params[3]);
int i4=*MF_GetAmxAddr(amx, params[4]);
int i5=*MF_GetAmxAddr(amx, params[5]);
-#ifdef _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall *)(void*, int, int, int, int)>(__func)(pv, 0, i3, i4, i5);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void *, int, int, int)>(__func)(pv, i3, i4, i5);
#endif
return 1;
}
cell Call_Void_ItemInfo(AMX *amx, cell *params)
{
SETUP(1);
void *ptr=reinterpret_cast<void *>(*MF_GetAmxAddr(amx, params[3]));
if (ptr==0)
{
MF_LogError(amx, AMX_ERR_NATIVE, "Null ItemInfo handle!");
return 0;
}
-#ifdef _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall *)(void*, int, void *)>(__func)(pv, 0, ptr);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void *, void *)>(__func)(pv, ptr);
#endif
return 1;
}
cell Call_Float_Void(AMX *amx, cell *params)
{
SETUP(1);
-#ifdef _WIN32
+#if defined(_WIN32)
float ret=reinterpret_cast<float (__fastcall *)(void*, int)>(__func)(pv, 0);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
float ret=reinterpret_cast<float (*)(void *)>(__func)(pv);
#endif
*MF_GetAmxAddr(amx, params[3])=amx_ftoc2(ret);
return 1;
}
cell Call_Void_Float_Int(AMX* amx, cell* params)
{
SETUP(2);
-#ifdef _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall *)(void*, int, float, char)>(__func)(pv, 0, amx_ctof2(params[3]), static_cast<char>(params[4]));
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void*, float, char)>(__func)(pv, amx_ctof2(params[3]), static_cast<char>(params[4]));
#endif
return 1;
}
cell Call_Deprecated(AMX *amx, cell *params)
{
MF_LogError(amx, AMX_ERR_NATIVE, "Ham function is deprecated.");
diff --git a/dlls/hamsandwich/config/hamdata.ini b/dlls/hamsandwich/config/hamdata.ini
--- a/dlls/hamsandwich/config/hamdata.ini
+++ b/dlls/hamsandwich/config/hamdata.ini
@@ -32,17 +32,17 @@
; eg: If they work on non-Steam CS 1.6 this is coincidental, if they do
; not work on non-Steam CS 1.6 this will not be officially fixed.
;
; Mirrors: These take the name of one mod, and copy all of its data to another
; name. An example of a use for this would be cstrike and czero: they
; use the same binary so all of its vtable offsets are guaranteed to
; be identical. Mirrors should always come first in the file!
;
-; Version: $Id$
+; Version: $Id: hamdata.ini 3687 2008-03-04 18:51:35Z sawce $
@mirror cstrike czero
@mirror ns nsp
; TODO: check these - all are estimates
@section cstrike linux
pev 4
@@ -256,16 +256,126 @@
weapon_shouldweaponidle 92
weapon_usedecrement 93
cstrike_restart 2
cstrike_roundrespawn 84
cstrike_item_candrop 63
cstrike_item_getmaxspeed 78
@end
+
+@section cstrike mac
+ pev 4
+ base 0x0
+
+ spawn 0
+ precache 1
+ keyvalue 3
+ objectcaps 6
+ activate 7
+ setobjectcollisionbox 8
+ classify 9
+ deathnotice 10
+ traceattack 11
+ takedamage 12
+ takehealth 13
+ killed 14
+ bloodcolor 15
+ tracebleed 16
+ istriggered 17
+ mymonsterpointer 18
+ mysquadmonsterpointer 19
+ gettogglestate 20
+ addpoints 21
+ addpointstoteam 22
+ addplayeritem 23
+ removeplayeritem 24
+ giveammo 25
+ getdelay 26
+ ismoving 27
+ overridereset 28
+ damagedecal 29
+ settogglestate 30
+ startsneaking 31
+ stopsneaking 32
+ oncontrols 33
+ issneaking 34
+ isalive 35
+ isbspmodel 36
+ reflectgauss 37
+ hastarget 38
+ isinworld 39
+ isplayer 40
+ isnetclient 41
+ teamid 42
+ getnexttarget 43
+ think 44
+ touch 45
+ use 46
+ blocked 47
+ respawn 48
+ updateowner 49
+ fbecomeprone 50
+ center 51
+ eyeposition 52
+ earposition 53
+ bodytarget 54
+ illumination 55
+ fvisible 56
+ fvecvisible 57
+
+ player_jump 76
+ player_duck 77
+ player_prethink 78
+ player_postthink 79
+ player_getgunposition 80
+ player_shouldfadeondeath 66
+ player_impulsecommands 83
+ player_updateclientdata 82
+
+ item_addtoplayer 59
+ item_addduplicate 60
+ item_getiteminfo 61
+ item_candeploy 62
+ item_deploy 64
+ item_canholster 66
+ item_holster 67
+ item_updateiteminfo 68
+ item_preframe 69
+ item_postframe 70
+ item_drop 71
+ item_kill 72
+ item_attachtoplayer 73
+ item_primaryammoindex 74
+ item_secondaryammoindex 75
+ item_updateclientdata 76
+ item_getweaponptr 77
+ item_itemslot 79
+
+ weapon_extractammo 80
+ weapon_extractclipammo 81
+ weapon_addweapon 82
+ weapon_playemptysound 83
+ weapon_resetemptysound 84
+ weapon_sendweaponanim 85
+ weapon_isusable 86
+ weapon_primaryattack 87
+ weapon_secondaryattack 88
+ weapon_reload 89
+ weapon_weaponidle 90
+ weapon_retireweapon 91
+ weapon_shouldweaponidle 92
+ weapon_usedecrement 93
+
+ cstrike_restart 2
+ cstrike_roundrespawn 84
+ cstrike_item_candrop 63
+ cstrike_item_getmaxspeed 78
+@end
+
@section dod linux
pev 0
base 0x154
spawn 5
precache 6
keyvalue 7
objectcaps 10
@@ -1742,18 +1852,122 @@
weapon_isusable 82
weapon_primaryattack 83
weapon_secondaryattack 84
weapon_reload 85
weapon_weaponidle 86
weapon_retireweapon 87
weapon_shouldweaponidle 88
weapon_usedecrement 89
+@end
+
+@section valve mac
+ pev 4
+ base 0x0
+ spawn 0
+ precache 1
+ keyvalue 2
+ objectcaps 5
+ activate 6
+ setobjectcollisionbox 7
+ classify 8
+ deathnotice 9
+ traceattack 10
+ takedamage 11
+ takehealth 12
+ killed 13
+ bloodcolor 14
+ tracebleed 15
+ istriggered 16
+ mymonsterpointer 17
+ mysquadmonsterpointer 18
+ gettogglestate 19
+ addpoints 20
+ addpointstoteam 21
+ addplayeritem 22
+ removeplayeritem 23
+ giveammo 24
+ getdelay 25
+ ismoving 26
+ overridereset 27
+ damagedecal 28
+ settogglestate 29
+ startsneaking 30
+ stopsneaking 31
+ oncontrols 32
+ issneaking 33
+ isalive 34
+ isbspmodel 35
+ reflectgauss 36
+ hastarget 37
+ isinworld 38
+ isplayer 39
+ isnetclient 40
+ teamid 41
+ getnexttarget 42
+ think 43
+ touch 44
+ use 45
+ blocked 46
+ respawn 47
+ updateowner 48
+ fbecomeprone 49
+ center 50
+ eyeposition 51
+ earposition 52
+ bodytarget 53
+ illumination 54
+ fvisible 55
+ fvecvisible 56
+
+ player_jump 125
+ player_duck 126
+ player_prethink 127
+ player_postthink 128
+ player_getgunposition 119
+ player_shouldfadeondeath 60
+ player_impulsecommands 130
+ player_updateclientdata 129
+
+ item_addtoplayer 58
+ item_addduplicate 59
+ item_getiteminfo 60
+ item_candeploy 61
+ item_deploy 62
+ item_canholster 63
+ item_holster 64
+ item_updateiteminfo 65
+ item_preframe 66
+ item_postframe 67
+ item_drop 68
+ item_kill 69
+ item_attachtoplayer 70
+ item_primaryammoindex 71
+ item_secondaryammoindex 72
+ item_updateclientdata 73
+ item_getweaponptr 74
+ item_itemslot 75
+
+ weapon_extractammo 76
+ weapon_extractclipammo 77
+ weapon_addweapon 78
+ weapon_playemptysound 79
+ weapon_resetemptysound 80
+ weapon_sendweaponanim 81
+ weapon_isusable 82
+ weapon_primaryattack 83
+ weapon_secondaryattack 84
+ weapon_reload 85
+ weapon_weaponidle 86
+ weapon_retireweapon 87
+ weapon_shouldweaponidle 88
+ weapon_usedecrement 89
@end
+
; Sven-Coop has no linux binaries. This makes disassembly much harder.
; These offsets were contributed by ts2do
@section SvenCoop windows
pev 4
base 0x0
spawn 0
precache 1
diff --git a/dlls/hamsandwich/config_parser.cpp b/dlls/hamsandwich/config_parser.cpp
--- a/dlls/hamsandwich/config_parser.cpp
+++ b/dlls/hamsandwich/config_parser.cpp
@@ -235,18 +235,20 @@ int read_start_section(char *data)
{
if (strncmp(data, CurrentModName, strlen(CurrentModName))==0)
{
data+=strlen(CurrentModName)+1;
trim_line(data);
#ifdef _WIN32
if (strcmp(data, "windows")==0)
-#elif defined __linux__
+#elif defined(__linux__)
if (strcmp(data, "linux")==0)
+#elif defined(__APPLE__)
+ if (strcmp(data, "mac")==0)
#endif
{
return 1;
}
}
return 0;
}
int read_number(char *input)
diff --git a/dlls/hamsandwich/hook.h b/dlls/hamsandwich/hook.h
--- a/dlls/hamsandwich/hook.h
+++ b/dlls/hamsandwich/hook.h
@@ -59,48 +59,48 @@ public:
int **ivtable=(int **)vtable;
func=(void *)ivtable[entry];
// now install a trampoline
// (int thiscall, int voidcall, int paramcount, void *extraptr)
tramp=CreateGenericTrampoline(true, voidcall, paramcount, (void*)this, target);
// Insert into vtable
-#if defined _WIN32
+#if defined(_WIN32)
DWORD OldFlags;
VirtualProtect(&ivtable[entry],sizeof(int*),PAGE_READWRITE,&OldFlags);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
void *addr = (void *)ALIGN(&ivtable[entry]);
mprotect(addr,sysconf(_SC_PAGESIZE),PROT_READ|PROT_WRITE);
#endif
ivtable[entry]=(int*)tramp;
size_t len=strlen(name);
ent=new char[len+1];
snprintf(ent,len+1,"%s",name);
};
~Hook()
{
// Insert the original function back into the vtable
int **ivtable=(int **)vtable;
-#if defined _WIN32
+#if defined(_WIN32)
DWORD OldFlags;
VirtualProtect(&ivtable[entry],sizeof(int*),PAGE_READWRITE,&OldFlags);
-#elif defined __linux_
+#elif defined(__linux_) || defined(__APPLE__)
void *addr = (void *)ALIGN(&ivtable[entry]);
mprotect(addr,sysconf(_SC_PAGESIZE),PROT_READ|PROT_WRITE);
#endif
ivtable[entry]=(int *)func;
-#if defined _WIN32
+#if defined(_WIN32)
VirtualFree(tramp, 0, MEM_RELEASE);
-#elif __linux__
+#elif defined(__linux__) || defined(__APPLE__)
free(tramp);
#endif
delete[] ent;
CVector<Forward *>::iterator end=pre.end();
for (CVector<Forward *>::iterator i=pre.begin();
diff --git a/dlls/hamsandwich/hook_callbacks.cpp b/dlls/hamsandwich/hook_callbacks.cpp
--- a/dlls/hamsandwich/hook_callbacks.cpp
+++ b/dlls/hamsandwich/hook_callbacks.cpp
@@ -161,19 +161,19 @@ void Hook_Void_Void(Hook *hook, void *pt
{
PUSH_VOID()
MAKE_VECTOR()
PRE_START()
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall*)(void*,int)>(hook->func)(pthis,0);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void*)>(hook->func)(pthis);
#endif
POST_START()
POST_END()
KILL_VECTOR()
POP()
@@ -187,19 +187,19 @@ int Hook_Int_Void(Hook *hook, void *pthi
MAKE_VECTOR()
PRE_START()
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
origret=reinterpret_cast<int (__fastcall*)(void*,int)>(hook->func)(pthis,0);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
origret=reinterpret_cast<int (*)(void*)>(hook->func)(pthis);
#endif
POST_START()
POST_END()
KILL_VECTOR()
POP()
@@ -217,19 +217,19 @@ void Hook_Void_Entvar(Hook *hook, void *
MAKE_VECTOR()
P_ENTVAR(entvar, iOther)
PRE_START()
, iOther
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall*)(void*, int, entvars_t *)>(hook->func)(pthis, 0, entvar);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void*, entvars_t *)>(hook->func)(pthis, entvar);
#endif
POST_START()
, iOther
POST_END()
KILL_VECTOR()
@@ -245,19 +245,19 @@ void Hook_Void_Cbase(Hook *hook, void *p
MAKE_VECTOR()
P_CBASE(other, iOther)
PRE_START()
, iOther
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall*)(void*, int, void *)>(hook->func)(pthis, 0, other);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void*, void *)>(hook->func)(pthis, other);
#endif
POST_START()
, iOther
POST_END()
KILL_VECTOR()
@@ -274,19 +274,19 @@ int Hook_Int_Float_Int(Hook *hook, void
P_FLOAT(f1)
P_INT(i1)
PRE_START()
, f1, i1
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
origret=reinterpret_cast<int (__fastcall*)(void*, int, float, int)>(hook->func)(pthis, 0, f1, i1);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
origret=reinterpret_cast<int (*)(void*, float, int)>(hook->func)(pthis, f1, i1);
#endif
POST_START()
, f1, i1
POST_END()
KILL_VECTOR()
@@ -304,19 +304,19 @@ void Hook_Void_Entvar_Int(Hook *hook, vo
P_ENTVAR(ev1, iOther)
P_INT(i1)
PRE_START()
, iOther, i1
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall*)(void*, int, entvars_t *, int)>(hook->func)(pthis, 0, ev1, i1);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void*, entvars_t *, int)>(hook->func)(pthis, ev1, i1);
#endif
POST_START()
, iOther, i1
POST_END()
KILL_VECTOR()
@@ -334,19 +334,19 @@ int Hook_Int_Cbase(Hook *hook, void *pth
MAKE_VECTOR()
P_CBASE(cb1, iOther)
PRE_START()
, iOther
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
origret=reinterpret_cast<int (__fastcall*)(void*, int, void *)>(hook->func)(pthis, 0, cb1);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
origret=reinterpret_cast<int (*)(void*, void *)>(hook->func)(pthis, cb1);
#endif
POST_START()
, iOther
POST_END()
KILL_VECTOR()
@@ -362,19 +362,19 @@ void Hook_Void_Int_Int(Hook *hook, void
MAKE_VECTOR()
P_INT(i1)
P_INT(i2)
PRE_START()
,i1, i2
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall*)(void*, int, int, int)>(hook->func)(pthis, 0, i1, i2);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void*, int, int)>(hook->func)(pthis, i1, i2);
#endif
POST_START()
,i1, i2
POST_END()
KILL_VECTOR()
@@ -393,19 +393,19 @@ int Hook_Int_Int_Str_Int(Hook *hook, voi
P_INT(i1)
P_STR(a)
P_INT(i2)
PRE_START()
,i1, a.c_str(), i2
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
origret=reinterpret_cast<int (__fastcall*)(void*, int, int, const char *, int)>(hook->func)(pthis, 0, i1, a.c_str(), i2);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
origret=reinterpret_cast<int (*)(void*, int, const char *, int)>(hook->func)(pthis, i1, a.c_str(), i2);
#endif
POST_START()
,i1, a.c_str(), i2
POST_END()
KILL_VECTOR()
@@ -424,19 +424,19 @@ int Hook_Int_Int(Hook *hook, void *pthis
MAKE_VECTOR()
P_INT(i1)
PRE_START()
,i1
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
origret=reinterpret_cast<int (__fastcall*)(void*, int, int)>(hook->func)(pthis, 0, i1);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
origret=reinterpret_cast<int (*)(void*, int)>(hook->func)(pthis, i1);
#endif
POST_START()
,i1
POST_END()
KILL_VECTOR()
@@ -455,19 +455,19 @@ int Hook_Int_Entvar(Hook *hook, void *pt
MAKE_VECTOR()
P_ENTVAR(ev1, iOther)
PRE_START()
,iOther
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
origret=reinterpret_cast<int (__fastcall*)(void*, int, entvars_t *)>(hook->func)(pthis, 0, ev1);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
origret=reinterpret_cast<int (*)(void*, entvars_t *)>(hook->func)(pthis, ev1);
#endif
POST_START()
, iOther
POST_END()
KILL_VECTOR()
@@ -492,19 +492,19 @@ int Hook_Int_Entvar_Entvar_Float_Int(Hoo
P_FLOAT(damage)
P_INT(damagebits)
PRE_START()
,iInflictor, iAttacker, damage, damagebits
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
origret=reinterpret_cast<int (__fastcall*)(void*, int, entvars_t *, entvars_t *, float, int)>(hook->func)(pthis, 0, inflictor, attacker, damage, damagebits);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
origret=reinterpret_cast<int (*)(void*, entvars_t *, entvars_t *, float, int)>(hook->func)(pthis, inflictor, attacker, damage, damagebits);
#endif
POST_START()
,iInflictor, iAttacker, damage, damagebits
POST_END()
KILL_VECTOR()
@@ -527,19 +527,19 @@ int Hook_Int_Entvar_Entvar_Float_Float_I
P_FLOAT(unknown)
P_INT(damagebits)
PRE_START()
,iInflictor, iAttacker, damage, unknown, damagebits
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
origret=reinterpret_cast<int (__fastcall*)(void*, int, entvars_t *, entvars_t *, float, float, int)>(hook->func)(pthis, 0, inflictor, attacker, damage, unknown, damagebits);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
origret=reinterpret_cast<int (*)(void*, entvars_t *, entvars_t *, float, float, int)>(hook->func)(pthis, inflictor, attacker, damage, unknown, damagebits);
#endif
POST_START()
,iInflictor, iAttacker, damage, unknown, damagebits
POST_END()
KILL_VECTOR()
@@ -554,19 +554,19 @@ void Hook_Void_Int(Hook *hook, void *pth
MAKE_VECTOR()
P_INT(i1)
PRE_START()
, i1
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall*)(void*, int, int)>(hook->func)(pthis, 0, i1);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void*, int)>(hook->func)(pthis, i1);
#endif
POST_START()
,i1
POST_END()
KILL_VECTOR()
@@ -585,19 +585,19 @@ void Hook_Void_Cbase_Cbase_Int_Float(Hoo
P_INT(i1)
P_FLOAT(f1)
PRE_START()
,iCaller, iActivator, i1, f1
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall*)(void*, int, void *, void *, int, float)>(hook->func)(pthis, 0, cb1, cb2, i1, f1);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void*, void *, void *, int, float)>(hook->func)(pthis, cb1, cb2, i1, f1);
#endif
POST_START()
,iCaller, iActivator, i1, f1
POST_END()
KILL_VECTOR()
@@ -615,19 +615,19 @@ void Hook_Void_Entvar_Float_Vector_Trace
P_VECTOR(v1)
P_TRACE(tr1)
P_INT(i1)
PRE_START()
,iev1, f1, MF_PrepareCellArrayA(reinterpret_cast<cell *>(&v1), 3, false), tr1, i1
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall*)(void*, int, entvars_t *, float, Vector, TraceResult *, int)>(hook->func)(pthis, 0, ev1, f1, v1, tr1, i1);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void*, entvars_t *, float, Vector, TraceResult *, int)>(hook->func)(pthis, ev1, f1, v1, tr1, i1);
#endif
POST_START()
, iev1, f1, MF_PrepareCellArrayA(reinterpret_cast<cell *>(&v1), 3, false), tr1, i1
POST_END()
KILL_VECTOR()
@@ -643,19 +643,19 @@ void Hook_Void_Float_Vector_Trace_Int(Ho
P_VECTOR(v1)
P_TRACE(tr1)
P_INT(i1)
PRE_START()
, f1, MF_PrepareCellArrayA(reinterpret_cast<cell *>(&v1), 3, false), tr1, i1
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall*)(void*, int, float, Vector, TraceResult *, int)>(hook->func)(pthis, 0, f1, v1, tr1, i1);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void*, float, Vector, TraceResult *, int)>(hook->func)(pthis, f1, v1, tr1, i1);
#endif
POST_START()
, f1, MF_PrepareCellArrayA(reinterpret_cast<cell *>(&v1), 3, false), tr1, i1
POST_END()
KILL_VECTOR()
@@ -667,19 +667,19 @@ const char *Hook_Str_Void(Hook *hook, vo
String origret;
MAKE_VECTOR()
PUSH_STRING()
PRE_START()
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
origret.assign(reinterpret_cast<const char *(__fastcall*)(void*, int)>(hook->func)(pthis, 0));
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
origret.assign(reinterpret_cast<const char *(*)(void*)>(hook->func)(pthis));
#endif
POST_START()
POST_END()
KILL_VECTOR()
POP()
@@ -694,69 +694,69 @@ void *Hook_Cbase_Void(Hook *hook, void *
void *origret=NULL;
PUSH_CBASE()
MAKE_VECTOR()
PRE_START()
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
origret=reinterpret_cast<void *(__fastcall*)(void*, int)>(hook->func)(pthis, 0);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
origret=reinterpret_cast<void *(*)(void*)>(hook->func)(pthis);
#endif
POST_START()
POST_END()
KILL_VECTOR()
POP()
CHECK_RETURN()
return ret;
}
#ifdef _WIN32
void Hook_Vector_Void(Hook *hook, void *pthis, Vector *out)
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
void Hook_Vector_Void(Hook *hook, Vector *out, void *pthis)
#endif
{
Vector ret;
Vector origret;
PUSH_VECTOR()
MAKE_VECTOR()
memset(&ret, 0x0, sizeof(Vector));
memset(&origret, 0x0, sizeof(Vector));
PRE_START()
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall*)(void*, int, Vector *)>(hook->func)(pthis, 0, &origret);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
origret=reinterpret_cast<Vector (*)(void *)>(hook->func)(pthis);
#endif
POST_START()
POST_END()
KILL_VECTOR()
POP()
CHECK_RETURN_VEC()
memcpy(out, &ret, sizeof(Vector));
}
#ifdef _WIN32
void Hook_Vector_pVector(Hook *hook, void *pthis, Vector *out, Vector *v1)
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
void Hook_Vector_pVector(Hook *hook, Vector *out, void *pthis, Vector *v1)
#endif
{
Vector ret;
Vector origret;
PUSH_VECTOR()
@@ -765,19 +765,19 @@ void Hook_Vector_pVector(Hook *hook, Vec
memset(&ret, 0x0, sizeof(Vector));
memset(&origret, 0x0, sizeof(Vector));
PRE_START()
, MF_PrepareCellArrayA(reinterpret_cast<cell *>(v1), 3, false)
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall*)(void*, int, Vector *, Vector *)>(hook->func)(pthis, 0, &origret, v1);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
origret=reinterpret_cast<Vector (*)(void*, Vector *)>(hook->func)(pthis, v1);
#endif
POST_START()
, MF_PrepareCellArrayA(reinterpret_cast<cell *>(v1), 3, false)
POST_END()
KILL_VECTOR()
@@ -795,19 +795,19 @@ int Hook_Int_pVector(Hook *hook, void *p
MAKE_VECTOR()
P_PTRVECTOR(v1)
PRE_START()
, MF_PrepareCellArrayA(reinterpret_cast<cell *>(v1), 3, false)
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
origret=reinterpret_cast<int (__fastcall*)(void*, int, Vector *)>(hook->func)(pthis, 0, v1);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
origret=reinterpret_cast<int (*)(void*, Vector *)>(hook->func)(pthis, v1);
#endif
POST_START()
, MF_PrepareCellArrayA(reinterpret_cast<cell *>(v1), 3, false)
POST_END()
KILL_VECTOR()
@@ -826,19 +826,19 @@ void Hook_Void_Entvar_Float_Float(Hook *
P_ENTVAR(ev1, cev1)
P_FLOAT(f1)
P_FLOAT(f2)
PRE_START()
, cev1, f1, f2
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall*)(void *, int, entvars_t *, float, float)>(hook->func)(pthis, 0, ev1, f1, f2);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void *, entvars_t *, float, float)>(hook->func)(pthis, ev1, f1, f2);
#endif
POST_START()
, cev1, f1, f2
POST_END()
KILL_VECTOR()
@@ -855,19 +855,19 @@ int Hook_Int_pFloat_pFloat(Hook *hook, v
MAKE_VECTOR()
P_PTRFLOAT(f1)
P_PTRFLOAT(f2)
PRE_START()
, f1 != NULL ? *f1 : 0, f2 != NULL ? *f2 : 0
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
origret=reinterpret_cast<int (__fastcall*)(void *, int, float *, float *)>(hook->func)(pthis, 0, f1, f2);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
origret=reinterpret_cast<int (*)(void *, float *, float *)>(hook->func)(pthis, f1, f2);
#endif
POST_START()
, f1 != NULL ? *f1 : 0, f2 != NULL ? *f2 : 0
POST_END()
KILL_VECTOR()
@@ -884,19 +884,19 @@ void Hook_Void_Entvar_Float(Hook *hook,
MAKE_VECTOR()
P_ENTVAR(ev1, cev1)
P_FLOAT(f1)
PRE_START()
, cev1, f1
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall*)(void *, int, entvars_t *, float)>(hook->func)(pthis, 0, ev1, f1);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void *, entvars_t *, float)>(hook->func)(pthis, ev1, f1);
#endif
POST_START()
, cev1, f1
POST_END()
KILL_VECTOR()
@@ -911,19 +911,19 @@ void Hook_Void_Int_Int_Int(Hook *hook, v
P_INT(i1)
P_INT(i2)
P_INT(i3)
PRE_START()
,i1, i2, i3
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall*)(void*, int, int, int, int)>(hook->func)(pthis, 0, i1, i2, i3);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void*, int, int, int)>(hook->func)(pthis, i1, i2, i3);
#endif
POST_START()
,i1, i2, i3
POST_END()
KILL_VECTOR()
@@ -935,19 +935,19 @@ void Hook_Void_ItemInfo(Hook *hook, void
MAKE_VECTOR()
P_ITEMINFO(iteminfo)
PRE_START()
,iteminfo
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall*)(void*, int, void *)>(hook->func)(pthis, 0, iteminfo);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void*, void *)>(hook->func)(pthis, iteminfo);
#endif
POST_START()
,iteminfo
POST_END()
KILL_VECTOR()
@@ -959,19 +959,19 @@ float Hook_Float_Void(Hook *hook, void *
float ret=0.0;
float origret=0.0;
PUSH_FLOAT()
MAKE_VECTOR()
PRE_START()
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
origret=reinterpret_cast<float (__fastcall*)(void*, int)>(hook->func)(pthis, 0);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
origret=reinterpret_cast<float (*)(void*)>(hook->func)(pthis);
#endif
POST_START()
POST_END()
KILL_VECTOR()
POP()
@@ -985,19 +985,19 @@ void Hook_Void_Float_Int(Hook* hook, voi
MAKE_VECTOR()
P_FLOAT(f1)
P_INT(i1)
PRE_START()
, f1, i1
PRE_END()
-#if defined _WIN32
+#if defined(_WIN32)
reinterpret_cast<void (__fastcall*)(void*, int, float, int)>(hook->func)(pthis, 0, f1, i1);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
reinterpret_cast<void (*)(void*, float, int)>(hook->func)(pthis, f1, i1);
#endif
POST_START()
, f1, i1
POST_END()
KILL_VECTOR()
diff --git a/dlls/hamsandwich/hook_callbacks.h b/dlls/hamsandwich/hook_callbacks.h
--- a/dlls/hamsandwich/hook_callbacks.h
+++ b/dlls/hamsandwich/hook_callbacks.h
@@ -125,25 +125,25 @@ const int PC_Cbase_Void = 0;
void *Hook_Cbase_Void(Hook *hook, void *pthis);
// HACK: I'm too lazy to fix up trampoline generator to deal with
// special return values. this is so much easier.
const bool RT_Vector_Void = true;
const int PC_Vector_Void = 1;
#ifdef _WIN32
void Hook_Vector_Void(Hook *hook, void *pthis, Vector *out);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
void Hook_Vector_Void(Hook *hook, Vector *out, void *pthis);
#endif
const bool RT_Vector_pVector = true;
const int PC_Vector_pVector = 2;
#ifdef _WIN32
void Hook_Vector_pVector(Hook *hook, void *pthis, Vector *out, Vector *v1);
-#elif defined __linux__
+#elif defined(__linux__) || defined(__APPLE__)
void Hook_Vector_pVector(Hook *hook, Vector *out, void *pthis, Vector *v1);
#endif
const bool RT_Int_pVector = false;
const int PC_Int_pVector = 1;
int Hook_Int_pVector(Hook *hook, void *pthis, Vector *v1);
const bool RT_Void_Entvar_Float_Float = true;
diff --git a/dlls/hamsandwich/pdata.cpp b/dlls/hamsandwich/pdata.cpp
--- a/dlls/hamsandwich/pdata.cpp
+++ b/dlls/hamsandwich/pdata.cpp
@@ -52,16 +52,22 @@
// Return -1 on null, -2 on invalid, and the the index of any other.
static cell AMX_NATIVE_CALL get_pdata_cbase_safe(AMX *amx, cell *params)
{
int index=params[1];
FM_CHECK_ENTITY(index);
int iOffset=params[2];
#ifdef __linux__
iOffset += params[3];
+#elif defined __APPLE__
+ // Use Linux offset in older plugins
+ if (params[0] / sizeof(cell) == 3)
+ iOffset += params[3];
+ else
+ iOffset += params[4];
#endif
if (iOffset <0)
{
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid offset provided. (got: %d)", iOffset);
return 0;
}
void *ptr=*((void **)((int *)INDEXENT_NEW(index)->pvPrivateData + iOffset));
@@ -82,17 +88,24 @@ static cell AMX_NATIVE_CALL get_pdata_cb
}
static cell AMX_NATIVE_CALL get_pdata_cbase(AMX *amx, cell *params)
{
int index=params[1];
FM_CHECK_ENTITY(index);
int iOffset=params[2];
#ifdef __linux__
iOffset += params[3];
+#elif defined __APPLE__
+ // Use Linux offset in older plugins
+ if (params[0] / sizeof(cell) == 3)
+ iOffset += params[3];
+ else
+ iOffset += params[4];
#endif
+
if (iOffset <0)
{
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid offset provided. (got: %d)", iOffset);
return 0;
}
void *ptr=*((void **)((int *)INDEXENT_NEW(index)->pvPrivateData + iOffset));
return PrivateToIndex(ptr);
@@ -105,16 +118,22 @@ static cell AMX_NATIVE_CALL set_pdata_cb
if (target != -1)
{
FM_CHECK_ENTITY(target);
}
int iOffset=params[2];
#ifdef __linux__
iOffset += params[4];
+#elif defined __APPLE__
+ // Use Linux offset in older plugins
+ if (params[0] / sizeof(cell) == 4)
+ iOffset += params[4];
+ else
+ iOffset += params[5];
#endif
if (iOffset <0)
{
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid offset provided. (got: %d)", iOffset);
return 0;
}
if (target == -1)
diff --git a/dlls/hamsandwich/sdk/CString.h b/dlls/hamsandwich/sdk/CString.h
--- a/dlls/hamsandwich/sdk/CString.h
+++ b/dlls/hamsandwich/sdk/CString.h
@@ -239,17 +239,17 @@ public:
if (len < 1)
{
return;
}
if (is_space(v[len-1]))
{
- for (i=len-1; i>=0; i--)
+ for (i=len-1; i<len; i--)
{
if (!is_space(v[i])
|| (is_space(v[i]) && i==0))
{
erase(i+1, j);
break;
}
j++;
diff --git a/dlls/hamsandwich/sdk/amxxmodule.cpp b/dlls/hamsandwich/sdk/amxxmodule.cpp
--- a/dlls/hamsandwich/sdk/amxxmodule.cpp
+++ b/dlls/hamsandwich/sdk/amxxmodule.cpp
@@ -2235,17 +2235,17 @@ static META_FUNCTIONS g_MetaFunctions_Ta
GetEntityAPI2,
GetEntityAPI2_Post,
GetNewDLLFunctions,
GetNewDLLFunctions_Post,
GetEngineFunctions,
GetEngineFunctions_Post
};
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
if ((int) CVAR_GET_FLOAT("developer") != 0)
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
Plugin_info.logtag, ifvers, Plugin_info.ifvers);
// Check for valid pMetaUtilFuncs before we continue.
if(!pMetaUtilFuncs) {
UTIL_LogPrintf("[%s] ERROR: Meta_Query called with null pMetaUtilFuncs\n", Plugin_info.logtag);
@@ -2329,17 +2329,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
#ifdef FN_META_DETACH
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
@@ -3045,17 +3045,17 @@ char* UTIL_VarArgs( char *format, ... )
return string;
}
//=========================================================
// UTIL_LogPrintf - Prints a logged message to console.
// Preceded by LOG: ( timestamp ) < message >
//=========================================================
-void UTIL_LogPrintf( char *fmt, ... )
+void UTIL_LogPrintf( const char *fmt, ... )
{
va_list argptr;
static char string[1024];
va_start ( argptr, fmt );
vsnprintf ( string, sizeof(string), fmt, argptr );
va_end ( argptr );
diff --git a/dlls/hamsandwich/sdk/amxxmodule.h b/dlls/hamsandwich/sdk/amxxmodule.h
--- a/dlls/hamsandwich/sdk/amxxmodule.h
+++ b/dlls/hamsandwich/sdk/amxxmodule.h
@@ -15,21 +15,26 @@
#ifdef USE_METAMOD
#include <extdll.h>
#include <meta_api.h>
#include "osdep.h"
#endif // #ifdef USE_METAMOD
// DLL Export
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
+#endif
+
+#if defined(__linux__) && !defined(LINUX)
#define LINUX
+#elif defined(__APPLE__) && !defined(OSX)
+#define OSX
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
// ***** AMXX stuff *****
// module interface version was 1
@@ -61,17 +66,17 @@ struct amxx_module_info_s
// *** Small stuff ***
// The next section is copied from the amx.h file
// Copyright (c) ITB CompuPhase, 1997-2005
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -303,17 +308,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -390,28 +395,28 @@ enum {
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
AMX_ERR_PARAMS, /* parameter error */
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
};
#if !defined AMX_NO_ALIGN
- #if defined __linux__
+ #if defined(__linux__) || defined(__APPLE__)
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions *****
#ifdef USE_METAMOD
-void UTIL_LogPrintf( char *fmt, ... );
+void UTIL_LogPrintf( const char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY
void FN_META_QUERY(void);
#endif // FN_META_QUERY
@@ -828,21 +833,21 @@ int FN_InconsistentFile_Post(const edict
#ifdef FN_AllowLagCompensation_Post
int FN_AllowLagCompensation_Post(void);
#endif // FN_AllowLagCompensation_Post
#ifdef FN_PrecacheModel
-int FN_PrecacheModel(char *s);
+int FN_PrecacheModel(const char *s);
#endif // FN_PrecacheModel
#ifdef FN_PrecacheSound
-int FN_PrecacheSound(char *s);
+int FN_PrecacheSound(const char *s);
#endif // FN_PrecacheSound
#ifdef FN_SetModel
void FN_SetModel(edict_t *e, const char *m);
#endif // FN_SetModel
#ifdef FN_ModelIndex
int FN_ModelIndex(const char *m);
@@ -852,17 +857,17 @@ int FN_ModelIndex(const char *m);
int FN_ModelFrames(int modelIndex);
#endif // FN_ModelFrames
#ifdef FN_SetSize
void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize
#ifdef FN_ChangeLevel
-void FN_ChangeLevel(char *s1, char *s2);
+void FN_ChangeLevel(const char *s1, const char *s2);
#endif // FN_ChangeLevel
#ifdef FN_GetSpawnParms
void FN_GetSpawnParms(edict_t *ent);
#endif // FN_GetSpawnParms
#ifdef FN_SaveSpawnParms
void FN_SaveSpawnParms(edict_t *ent);
@@ -1256,37 +1261,37 @@ void FN_RunPlayerMove(edict_t *fakeclien
int FN_NumberOfEntities(void);
#endif // FN_NumberOfEntities
#ifdef FN_GetInfoKeyBuffer
char *FN_GetInfoKeyBuffer(edict_t *e);
#endif // FN_GetInfoKeyBuffer
#ifdef FN_InfoKeyValue
-char *FN_InfoKeyValue(char *infobuffer, char *key);
+char *FN_InfoKeyValue(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue
#ifdef FN_SetKeyValue
-void FN_SetKeyValue(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue
#ifdef FN_SetClientKeyValue
-void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue
#ifdef FN_IsMapValid
-int FN_IsMapValid(char *filename);
+int FN_IsMapValid(const char *filename);
#endif // FN_IsMapValid
#ifdef FN_StaticDecal
void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal
#ifdef FN_PrecacheGeneric
-int FN_PrecacheGeneric(char *s);
+int FN_PrecacheGeneric(const char *s);
#endif // FN_PrecacheGeneric
#ifdef FN_GetPlayerUserId
int FN_GetPlayerUserId(edict_t *e );
#endif // FN_GetPlayerUserId
#ifdef FN_BuildSoundMsg
void FN_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -1409,21 +1414,21 @@ const char *FN_GetPlayerAuthId(edict_t *
#endif // FN_GetPlayerAuthId
#ifdef FN_PrecacheModel_Post
-int FN_PrecacheModel_Post(char *s);
+int FN_PrecacheModel_Post(const char *s);
#endif // FN_PrecacheModel_Post
#ifdef FN_PrecacheSound_Post
-int FN_PrecacheSound_Post(char *s);
+int FN_PrecacheSound_Post(const char *s);
#endif // FN_PrecacheSound_Post
#ifdef FN_SetModel_Post
void FN_SetModel_Post(edict_t *e, const char *m);
#endif // FN_SetModel_Post
#ifdef FN_ModelIndex_Post
int FN_ModelIndex_Post(const char *m);
@@ -1433,17 +1438,17 @@ int FN_ModelIndex_Post(const char *m);
int FN_ModelFrames_Post(int modelIndex);
#endif // FN_ModelFrames_Post
#ifdef FN_SetSize_Post
void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize_Post
#ifdef FN_ChangeLevel_Post
-void FN_ChangeLevel_Post(char *s1, char *s2);
+void FN_ChangeLevel_Post(const char *s1, const char *s2);
#endif // FN_ChangeLevel_Post
#ifdef FN_GetSpawnParms_Post
void FN_GetSpawnParms_Post(edict_t *ent);
#endif // FN_GetSpawnParms_Post
#ifdef FN_SaveSpawnParms_Post
void FN_SaveSpawnParms_Post(edict_t *ent);
@@ -1837,37 +1842,37 @@ void FN_RunPlayerMove_Post(edict_t *fake
int FN_NumberOfEntities_Post(void);
#endif // FN_NumberOfEntities_Post
#ifdef FN_GetInfoKeyBuffer_Post
char *FN_GetInfoKeyBuffer_Post(edict_t *e);
#endif // FN_GetInfoKeyBuffer_Post
#ifdef FN_InfoKeyValue_Post
-char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
+char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue_Post
#ifdef FN_SetKeyValue_Post
-void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue_Post
#ifdef FN_SetClientKeyValue_Post
-void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue_Post
#ifdef FN_IsMapValid_Post
-int FN_IsMapValid_Post(char *filename);
+int FN_IsMapValid_Post(const char *filename);
#endif // FN_IsMapValid_Post
#ifdef FN_StaticDecal_Post
void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal_Post
#ifdef FN_PrecacheGeneric_Post
-int FN_PrecacheGeneric_Post(char *s);
+int FN_PrecacheGeneric_Post(const char *s);
#endif // FN_PrecacheGeneric_Post
#ifdef FN_GetPlayerUserId_Post
int FN_GetPlayerUserId_Post(edict_t *e );
#endif // FN_GetPlayerUserId_Post
#ifdef FN_BuildSoundMsg_Post
void FN_BuildSoundMsg_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -2111,17 +2116,17 @@ enum LibType
typedef void (*AUTHORIZEFUNC)(int player, const char *authstring);
typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
-typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
+typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
typedef const char * (*PFN_GET_MODNAME) (void);
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/);
typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */);
typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/);
typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr);
@@ -2170,18 +2175,18 @@ typedef void * (*PFN_ALLOCATOR) (co
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ );
typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const void* /*addr*/ );
#endif
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
-typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
-typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
diff --git a/dlls/hamsandwich/srvcmd.cpp b/dlls/hamsandwich/srvcmd.cpp
--- a/dlls/hamsandwich/srvcmd.cpp
+++ b/dlls/hamsandwich/srvcmd.cpp
@@ -38,17 +38,17 @@
#include "offsets.h"
#include "forward.h"
#include "hook.h"
extern hook_t hooklist[];
extern CVector<Hook *> hooks[HAM_LAST_ENTRY_DONT_USE_ME_LOL];
-void print_srvconsole(char *fmt, ...)
+void print_srvconsole(const char *fmt, ...)
{
va_list argptr;
static char string[384];
va_start(argptr, fmt);
vsnprintf(string, sizeof(string) - 1, fmt, argptr);
string[sizeof(string) - 1] = '\0';
va_end(argptr);
diff --git a/dlls/mysqlx/Makefile b/dlls/mysqlx/Makefile
--- a/dlls/mysqlx/Makefile
+++ b/dlls/mysqlx/Makefile
@@ -1,92 +1,131 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
-HLSDK = ../../../hlsdk
+###########################################
+### EDIT THESE PATHS FOR YOUR OWN SETUP ###
+###########################################
+
+HLSDK = ../../../hlsdk/multiplayer
MM_ROOT = ../../../metamod/metamod
-
-### EDIT BELOW FOR OTHER PROJECTS ###
-
-OPT_FLAGS = -O2 -funroll-loops -s -pipe -fomit-frame-pointer -fno-strict-aliasing
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-NAME = mysql
-#MYSQL_DIR = ../../../mysql-5.0.22
MYSQL_DIR = ../../../mysql-5.0
-BIN_SUFFIX_32 = amxx_i386.so
-BIN_SUFFIX_64 = amxx_amd64.so
+#####################################
+### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
-OBJECTS = basic_sql.cpp handles.cpp module.cpp threading.cpp sdk/amxxmodule.cpp oldcompat_sql.cpp
-OBJECTS += thread/BaseWorker.cpp thread/ThreadWorker.cpp thread/PosixThreads.cpp
-OBJECTS += mysql/MysqlQuery.cpp mysql/MysqlResultSet.cpp mysql/MysqlDatabase.cpp mysql/MysqlDriver.cpp
+PROJECT = mysql
-LINK = -lgcc -static-libgcc $(MYSQL_DIR)/lib/libmysqlclient_r.a -lz -lpthread
+OBJECTS = basic_sql.cpp handles.cpp module.cpp threading.cpp sdk/amxxmodule.cpp oldcompat_sql.cpp \
+ thread/BaseWorker.cpp thread/ThreadWorker.cpp thread/PosixThreads.cpp \
+ mysql/MysqlQuery.cpp mysql/MysqlResultSet.cpp mysql/MysqlDatabase.cpp mysql/MysqlDriver.cpp
-INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
- -I$(MM_ROOT) -I$(HLSDK)/common -I$(MYSQL_DIR)/include -L$(MYSQL_DIR)/lib -Ithread \
- -Imysql -Isdk
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
-GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
-ifeq "$(GCC_VERSION)" "4"
- OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
+LINK = $(MYSQL_DIR)/lib/libmysqlclient_r.a -lz -lpthread -L$(MYSQL_DIR)/lib
+
+INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
+ -I$(MM_ROOT) -I$(MYSQL_DIR)/include -Ithread -Imysql -Isdk
+
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
+
+OS := $(shell uname -s)
+
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ LIB_SUFFIX = _amxx
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
+else
+ LIB_EXT = so
+ LIB_SUFFIX = _amxx_i386
+ CFLAGS += -DLINUX
+ LINK += -shared
endif
+LINK += -m32 -lm -ldl
+
+CFLAGS += -DSM_DEFAULT_THREADER -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H \
+ -Dstricmp=strcasecmp -fno-strict-aliasing -m32 -Wall -Werror
+CPPFLAGS += -fno-exceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
+
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS = $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
BIN_DIR = Release
- CFLAGS = $(OPT_FLAGS)
+ CFLAGS += $(C_OPT_FLAGS)
+ LINK += -s
endif
-CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -Dstricmp=strcasecmp -fno-rtti -static-libgcc
-CFLAGS += -DSM_DEFAULT_THREADER -m32
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-ifeq "$(AMD64)" "true"
- BINARY = $(NAME)_$(BIN_SUFFIX_64)
- CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64
- INCLUDE += -Lextra/lib_linux64
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
else
- BINARY = $(NAME)_$(BIN_SUFFIX_32)
- CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
- OPT_FLAGS += -march=i686
- INCLUDE += -Lextra/lib_linux
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
endif
-OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
all:
+ mkdir -p $(BIN_DIR)
+ mkdir -p $(BIN_DIR)/mysql
mkdir -p $(BIN_DIR)/thread
- mkdir -p $(BIN_DIR)/mysql
mkdir -p $(BIN_DIR)/sdk
- mkdir -p $(BIN_DIR)
- $(MAKE) mysql
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-amd64:
- $(MAKE) all AMD64=true
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
-mysql: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
-
-debug:
- $(MAKE) all DEBUG=true
+debug:
+ $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
default: all
clean:
- rm -rf Release/thread/*.o
- rm -rf Release/mysql/*.o
- rm -rf Release/sdk/*.o
- rm -rf Release/*.o
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_64)
- rm -rf Debug/thread/*.o
- rm -rf Debug/mysql/*.o
- rm -rf Debug/sdk/*.o
- rm -rf Debug/*.o
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64)
+ rm -rf $(BIN_DIR)/*.o
+ rm -rf $(BIN_DIR)/mysql/*.o
+ rm -rf $(BIN_DIR)/thread/*.o
+ rm -rf $(BIN_DIR)/sdk/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
+
diff --git a/dlls/mysqlx/mysql/MysqlDriver.cpp b/dlls/mysqlx/mysql/MysqlDriver.cpp
--- a/dlls/mysqlx/mysql/MysqlDriver.cpp
+++ b/dlls/mysqlx/mysql/MysqlDriver.cpp
@@ -37,17 +37,17 @@ IDatabase *MysqlDriver::_Connect(Databas
if (!mysql)
{
if (errcode)
*errcode = -1;
if (error && maxlength)
{
snprintf(error, maxlength, "Initialization failed");
}
- return false;
+ return NULL;
}
if (do_timeout && info->max_timeout)
{
mysql_options(mysql, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&(info->max_timeout));
}
if (mysql_real_connect(mysql,
@@ -62,17 +62,17 @@ IDatabase *MysqlDriver::_Connect(Databas
if (errcode)
{
*errcode = mysql_errno(mysql);
}
if (error && maxlength)
{
snprintf(error, maxlength, "%s", mysql_error(mysql));
}
- return false;
+ return NULL;
}
MysqlDatabase *pMysql = new MysqlDatabase(mysql, this);
return static_cast<IDatabase *>(pMysql);
}
int MysqlDriver::QuoteString(const char *str, char buffer[], size_t maxlen, size_t *newsize)
diff --git a/dlls/mysqlx/sdk/amxxmodule.cpp b/dlls/mysqlx/sdk/amxxmodule.cpp
--- a/dlls/mysqlx/sdk/amxxmodule.cpp
+++ b/dlls/mysqlx/sdk/amxxmodule.cpp
@@ -2235,17 +2235,17 @@ static META_FUNCTIONS g_MetaFunctions_Ta
GetEntityAPI2,
GetEntityAPI2_Post,
GetNewDLLFunctions,
GetNewDLLFunctions_Post,
GetEngineFunctions,
GetEngineFunctions_Post
};
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
if ((int) CVAR_GET_FLOAT("developer") != 0)
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
Plugin_info.logtag, ifvers, Plugin_info.ifvers);
// Check for valid pMetaUtilFuncs before we continue.
if(!pMetaUtilFuncs) {
UTIL_LogPrintf("[%s] ERROR: Meta_Query called with null pMetaUtilFuncs\n", Plugin_info.logtag);
@@ -2329,17 +2329,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
#ifdef FN_META_DETACH
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
@@ -3045,17 +3045,17 @@ char* UTIL_VarArgs( char *format, ... )
return string;
}
//=========================================================
// UTIL_LogPrintf - Prints a logged message to console.
// Preceded by LOG: ( timestamp ) < message >
//=========================================================
-void UTIL_LogPrintf( char *fmt, ... )
+void UTIL_LogPrintf( const char *fmt, ... )
{
va_list argptr;
static char string[1024];
va_start ( argptr, fmt );
vsnprintf ( string, sizeof(string), fmt, argptr );
va_end ( argptr );
diff --git a/dlls/mysqlx/sdk/amxxmodule.h b/dlls/mysqlx/sdk/amxxmodule.h
--- a/dlls/mysqlx/sdk/amxxmodule.h
+++ b/dlls/mysqlx/sdk/amxxmodule.h
@@ -15,21 +15,26 @@
#ifdef USE_METAMOD
#include <extdll.h>
#include <meta_api.h>
#include "osdep.h"
#endif // #ifdef USE_METAMOD
// DLL Export
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
+#endif
+
+#if defined(__linux__) && !defined(LINUX)
#define LINUX
+#elif defined(__APPLE__) && !defined(OSX)
+#define OSX
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
// ***** AMXX stuff *****
// module interface version was 1
@@ -61,17 +66,17 @@ struct amxx_module_info_s
// *** Small stuff ***
// The next section is copied from the amx.h file
// Copyright (c) ITB CompuPhase, 1997-2005
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -303,17 +308,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -390,28 +395,28 @@ enum {
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
AMX_ERR_PARAMS, /* parameter error */
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
};
#if !defined AMX_NO_ALIGN
- #if defined __linux__
+ #if defined(__linux__) || defined(__APPLE__)
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions *****
#ifdef USE_METAMOD
-void UTIL_LogPrintf( char *fmt, ... );
+void UTIL_LogPrintf( const char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY
void FN_META_QUERY(void);
#endif // FN_META_QUERY
@@ -828,21 +833,21 @@ int FN_InconsistentFile_Post(const edict
#ifdef FN_AllowLagCompensation_Post
int FN_AllowLagCompensation_Post(void);
#endif // FN_AllowLagCompensation_Post
#ifdef FN_PrecacheModel
-int FN_PrecacheModel(char *s);
+int FN_PrecacheModel(const char *s);
#endif // FN_PrecacheModel
#ifdef FN_PrecacheSound
-int FN_PrecacheSound(char *s);
+int FN_PrecacheSound(const char *s);
#endif // FN_PrecacheSound
#ifdef FN_SetModel
void FN_SetModel(edict_t *e, const char *m);
#endif // FN_SetModel
#ifdef FN_ModelIndex
int FN_ModelIndex(const char *m);
@@ -852,17 +857,17 @@ int FN_ModelIndex(const char *m);
int FN_ModelFrames(int modelIndex);
#endif // FN_ModelFrames
#ifdef FN_SetSize
void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize
#ifdef FN_ChangeLevel
-void FN_ChangeLevel(char *s1, char *s2);
+void FN_ChangeLevel(const char *s1, const char *s2);
#endif // FN_ChangeLevel
#ifdef FN_GetSpawnParms
void FN_GetSpawnParms(edict_t *ent);
#endif // FN_GetSpawnParms
#ifdef FN_SaveSpawnParms
void FN_SaveSpawnParms(edict_t *ent);
@@ -1256,37 +1261,37 @@ void FN_RunPlayerMove(edict_t *fakeclien
int FN_NumberOfEntities(void);
#endif // FN_NumberOfEntities
#ifdef FN_GetInfoKeyBuffer
char *FN_GetInfoKeyBuffer(edict_t *e);
#endif // FN_GetInfoKeyBuffer
#ifdef FN_InfoKeyValue
-char *FN_InfoKeyValue(char *infobuffer, char *key);
+char *FN_InfoKeyValue(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue
#ifdef FN_SetKeyValue
-void FN_SetKeyValue(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue
#ifdef FN_SetClientKeyValue
-void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue
#ifdef FN_IsMapValid
-int FN_IsMapValid(char *filename);
+int FN_IsMapValid(const char *filename);
#endif // FN_IsMapValid
#ifdef FN_StaticDecal
void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal
#ifdef FN_PrecacheGeneric
-int FN_PrecacheGeneric(char *s);
+int FN_PrecacheGeneric(const char *s);
#endif // FN_PrecacheGeneric
#ifdef FN_GetPlayerUserId
int FN_GetPlayerUserId(edict_t *e );
#endif // FN_GetPlayerUserId
#ifdef FN_BuildSoundMsg
void FN_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -1409,21 +1414,21 @@ const char *FN_GetPlayerAuthId(edict_t *
#endif // FN_GetPlayerAuthId
#ifdef FN_PrecacheModel_Post
-int FN_PrecacheModel_Post(char *s);
+int FN_PrecacheModel_Post(const char *s);
#endif // FN_PrecacheModel_Post
#ifdef FN_PrecacheSound_Post
-int FN_PrecacheSound_Post(char *s);
+int FN_PrecacheSound_Post(const char *s);
#endif // FN_PrecacheSound_Post
#ifdef FN_SetModel_Post
void FN_SetModel_Post(edict_t *e, const char *m);
#endif // FN_SetModel_Post
#ifdef FN_ModelIndex_Post
int FN_ModelIndex_Post(const char *m);
@@ -1433,17 +1438,17 @@ int FN_ModelIndex_Post(const char *m);
int FN_ModelFrames_Post(int modelIndex);
#endif // FN_ModelFrames_Post
#ifdef FN_SetSize_Post
void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize_Post
#ifdef FN_ChangeLevel_Post
-void FN_ChangeLevel_Post(char *s1, char *s2);
+void FN_ChangeLevel_Post(const char *s1, const char *s2);
#endif // FN_ChangeLevel_Post
#ifdef FN_GetSpawnParms_Post
void FN_GetSpawnParms_Post(edict_t *ent);
#endif // FN_GetSpawnParms_Post
#ifdef FN_SaveSpawnParms_Post
void FN_SaveSpawnParms_Post(edict_t *ent);
@@ -1837,37 +1842,37 @@ void FN_RunPlayerMove_Post(edict_t *fake
int FN_NumberOfEntities_Post(void);
#endif // FN_NumberOfEntities_Post
#ifdef FN_GetInfoKeyBuffer_Post
char *FN_GetInfoKeyBuffer_Post(edict_t *e);
#endif // FN_GetInfoKeyBuffer_Post
#ifdef FN_InfoKeyValue_Post
-char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
+char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue_Post
#ifdef FN_SetKeyValue_Post
-void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue_Post
#ifdef FN_SetClientKeyValue_Post
-void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue_Post
#ifdef FN_IsMapValid_Post
-int FN_IsMapValid_Post(char *filename);
+int FN_IsMapValid_Post(const char *filename);
#endif // FN_IsMapValid_Post
#ifdef FN_StaticDecal_Post
void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal_Post
#ifdef FN_PrecacheGeneric_Post
-int FN_PrecacheGeneric_Post(char *s);
+int FN_PrecacheGeneric_Post(const char *s);
#endif // FN_PrecacheGeneric_Post
#ifdef FN_GetPlayerUserId_Post
int FN_GetPlayerUserId_Post(edict_t *e );
#endif // FN_GetPlayerUserId_Post
#ifdef FN_BuildSoundMsg_Post
void FN_BuildSoundMsg_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -2111,17 +2116,17 @@ enum LibType
typedef void (*AUTHORIZEFUNC)(int player, const char *authstring);
typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
-typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
+typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
typedef const char * (*PFN_GET_MODNAME) (void);
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/);
typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */);
typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/);
typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr);
@@ -2170,18 +2175,18 @@ typedef void * (*PFN_ALLOCATOR) (co
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ );
typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const void* /*addr*/ );
#endif
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
-typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
-typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
diff --git a/dlls/mysqlx/sdk/sh_list.h b/dlls/mysqlx/sdk/sh_list.h
--- a/dlls/mysqlx/sdk/sh_list.h
+++ b/dlls/mysqlx/sdk/sh_list.h
@@ -14,17 +14,17 @@
// MSVC8 fix for offsetof macro redefition warnings
#ifdef _MSC_VER
#if _MSC_VER >= 1400
#undef offsetof
#endif
#endif
#include <new>
-#include <malloc.h>
+#include <stdlib.h>
namespace SourceHook
{
//This class is from CSDM for AMX Mod X
/*
A circular, doubly-linked list with one sentinel node
diff --git a/dlls/mysqlx/sdk/sh_string.h b/dlls/mysqlx/sdk/sh_string.h
--- a/dlls/mysqlx/sdk/sh_string.h
+++ b/dlls/mysqlx/sdk/sh_string.h
@@ -191,17 +191,17 @@ public:
if (len < 1)
{
return;
}
if (is_space(v[len-1]))
{
- for (i=len-1; i>=0; i--)
+ for (i=len-1; i<len; i--)
{
if (!is_space(v[i])
|| (is_space(v[i]) && i==0))
{
erase(i+1, j);
break;
}
j++;
diff --git a/dlls/mysqlx/thread/ThreadSupport.h b/dlls/mysqlx/thread/ThreadSupport.h
--- a/dlls/mysqlx/thread/ThreadSupport.h
+++ b/dlls/mysqlx/thread/ThreadSupport.h
@@ -1,10 +1,10 @@
#ifndef _INCLUDE_SOURCEMOD_THREAD_SUPPORT_H
#define _INCLUDE_SOURCEMOD_THREAD_SUPPORT_H
-#if defined __linux__
+#if defined __linux__ || defined __APPLE__
#include "PosixThreads.h"
#elif defined WIN32
#include "WinThreads.h"
#endif
#endif //_INCLUDE_SOURCEMOD_THREAD_SUPPORT_H
diff --git a/dlls/mysqlx/threading.cpp b/dlls/mysqlx/threading.cpp
--- a/dlls/mysqlx/threading.cpp
+++ b/dlls/mysqlx/threading.cpp
@@ -129,17 +129,17 @@ void MysqlThread::SetForward(int forward
}
void MysqlThread::SetInfo(const char *host, const char *user, const char *pass, const char *db, int port, unsigned int max_timeout)
{
m_host.assign(host);
m_user.assign(user);
m_pass.assign(pass);
m_db.assign(db);
- m_max_timeout = m_max_timeout;
+ m_max_timeout = max_timeout;
m_port = port;
m_qrInfo.queue_time = gpGlobals->time;
}
void MysqlThread::SetQuery(const char *query)
{
m_query.assign(query);
}
diff --git a/dlls/ns/CString.h b/dlls/ns/CString.h
--- a/dlls/ns/CString.h
+++ b/dlls/ns/CString.h
@@ -240,17 +240,17 @@ public:
if (len < 1)
{
return;
}
if (is_space(v[len-1]))
{
- for (i=len-1; i>=0; i--)
+ for (i=len-1; i<len; i--)
{
if (!is_space(v[i])
|| (is_space(v[i]) && i==0))
{
erase(i+1, j);
break;
}
j++;
diff --git a/dlls/ns/CVector.h b/dlls/ns/CVector.h
--- a/dlls/ns/CVector.h
+++ b/dlls/ns/CVector.h
@@ -348,19 +348,18 @@ public:
m_Data[m_CurrentUsedSize++] = elem;
return true;
}
void pop_back()
{
- --m_CurrentUsedSize;
- if (m_CurrentUsedSize < 0)
- m_CurrentUsedSize = 0;
+ if (m_CurrentUsedSize > 0)
+ --m_CurrentUsedSize;
FreeMemIfPossible();
}
bool resize(size_t newSize)
{
if (!ChangeSize(newSize))
return false;
diff --git a/dlls/ns/Makefile b/dlls/ns/Makefile
--- a/dlls/ns/Makefile
+++ b/dlls/ns/Makefile
@@ -1,98 +1,128 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
-HLSDK = ../../../hlsdk
+###########################################
+### EDIT THESE PATHS FOR YOUR OWN SETUP ###
+###########################################
+
+HLSDK = ../../../hlsdk/multiplayer
MM_ROOT = ../../../metamod/metamod
+#####################################
### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
+PROJECT = ns
-CRAZY_OPT_FLAGS = -DCRAZY_OPTS -O3 -funroll-loops -ffast-math -s -pipe -fomit-frame-pointer -fno-strict-aliasing -DNDEBUG -fmerge-all-constants -fmodulo-sched -fgcse-sm -fgcse-las -fgcse-after-reload -floop-optimize2 -funsafe-loop-optimizations -ftree-loop-linear -ftree-loop-im -ftree-loop-ivcanon -fivopts -ftree-vectorize -fvariable-expansion-in-unroller -funsafe-math-optimizations -ffinite-math-only -fpeel-loops -funswitch-loops -fvisibility=hidden -fvisibility-inlines-hidden -Wall -Wno-unknown-pragmas -Wno-deprecated -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -Wpointer-arith -Wcast-qual -Wcast-align -Wconversion -Wsign-compare -Wmissing-noreturn -Winline -Wlong-long -Wunsafe-loop-optimizations -Wctor-dtor-privacy -Wno-non-virtual-dtor -Wreorder -Woverloaded-virtual -Wsign-promo -Wsynth -shared
+OBJECTS = sdk/amxxmodule.cpp dllapi.cpp utils.cpp amxxapi.cpp engineapi.cpp TitleManager.cpp \
+ ParticleManager.cpp MessageHandler.cpp GameManager.cpp natives/general.cpp \
+ natives/player.cpp natives/player_memory.cpp natives/structure.cpp natives/weapons.cpp \
+ natives/particles.cpp natives/memberfuncs.cpp
-CRAZY_LINK_FLAGS =
-#-fwhole-program
-#-fwhole-program -combine
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
-SANE_OPT_FLAGS = -O3 -funroll-loops -s -pipe -fomit-frame-pointer -fno-strict-aliasing -DNDEBUG
+C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
-OPT_FLAGS =
+LINK =
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-NAME = ns
+INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
+ -I$(HLSDK)/pm_shared -I$(MM_ROOT) -Isdk
-BIN_SUFFIX = amxx_i386.so
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
-OBJECTS = sdk/amxxmodule.cpp dllapi.cpp utils.cpp amxxapi.cpp engineapi.cpp \
-TitleManager.cpp ParticleManager.cpp MessageHandler.cpp GameManager.cpp \
-natives/general.cpp natives/player.cpp natives/player_memory.cpp \
-natives/structure.cpp natives/weapons.cpp natives/particles.cpp \
-natives/memberfuncs.cpp
+OS := $(shell uname -s)
-LINK =
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ LIB_SUFFIX = _amxx
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
+else
+ LIB_EXT = so
+ LIB_SUFFIX = _amxx_i386
+ CFLAGS += -DLINUX
+ LINK += -shared
+endif
-INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
- -I$(MM_ROOT) -I$(HLSDK)/common -I$(HLSDK)/pm_shared
+LINK += -m32 -lm -ldl
-GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror
+CPPFLAGS += -fno-exceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS = $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
- ifeq "$(CRAZY)" "true"
- BIN_DIR = Optimized
- OPT_FLAGS = $(CRAZY_OPT_FLAGS)
- LINK = $(CRAZY_LINK_FLAGS)
- else
- BIN_DIR = Release
- OPT_FLAGS = $(SANE_OPT_FLAGS)
- endif
- ifeq "$(GCC_VERSION)" "4"
- OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
- endif
- CFLAGS = $(OPT_FLAGS)
+ BIN_DIR = Release
+ CFLAGS += $(C_OPT_FLAGS)
+ LINK += -s
endif
-CFLAGS += -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -m32
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-BINARY = $(NAME)_$(BIN_SUFFIX)
-CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
-OPT_FLAGS += -march=i586
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
+else
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
+endif
-OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
all:
mkdir -p $(BIN_DIR)
mkdir -p $(BIN_DIR)/sdk
mkdir -p $(BIN_DIR)/natives
- $(MAKE) ns
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-ns: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
-debug:
- $(MAKE) all DEBUG=true
+debug:
+ $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
default: all
-crazy:
- $(MAKE) all CRAZY=true
+clean:
+ rm -rf $(BIN_DIR)/*.o
+ rm -rf $(BIN_DIR)/sdk/*.o
+ rm -rf $(BIN_DIR)/natives/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
-clean:
- rm -rf Release/*.o
- rm -rf Release/sdk/*.o
- rm -rf Release/natives/*.o
- rm -rf Release/$(NAME)_$(BIN_SUFFIX)
- rm -rf Debug/*.o
- rm -rf Debug/sdk/*.o
- rm -rf Debug/natives/*.o
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX)
- rm -rf Optimized/*.o
- rm -rf Optimized/sdk/*.o
- rm -rf Optimized/natives/*.o
- rm -rf Optimized/$(NAME)_$(BIN_SUFFIX)
-
diff --git a/dlls/ns/engineapi.cpp b/dlls/ns/engineapi.cpp
--- a/dlls/ns/engineapi.cpp
+++ b/dlls/ns/engineapi.cpp
@@ -44,17 +44,17 @@
#include "GameManager.h"
#include "ParticleManager.h"
#include "CPlayer.h"
// Parse log messages here for any desired information (structure_built, etc.)
// The following logs are needed:
// "sawce<1><STEAM_0:1:4560311><alien1team>" triggered "structure_built" (type "defensechamber")`
-void AlertMessage_Post(ALERT_TYPE atype, char *szFmt, ...)
+void AlertMessage_Post(ALERT_TYPE atype, const char *szFmt, ...)
{
if (atype != at_logged)
{
RETURN_META(MRES_IGNORED);
}
char *MessageStart; // original pointer to start of the message
char *TypePointer; // pointer to the structure type
diff --git a/dlls/ns/natives/particles.cpp b/dlls/ns/natives/particles.cpp
--- a/dlls/ns/natives/particles.cpp
+++ b/dlls/ns/natives/particles.cpp
@@ -53,17 +53,17 @@ typedef enum partsystype_e
PSYS_TYPE_STRING
}partsystype;
typedef struct partsyskey_s
{
const char *Name;
partsystype type;
}partsyskey;
-cell PSKeyValueI(char *name, AMX *amx, cell *params)
+cell PSKeyValueI(const char *name, AMX *amx, cell *params)
{
if (params[1]==0)
{
MF_LogError(amx,AMX_ERR_NATIVE,"Invalid particle system handle provided!");
return 0;
}
KeyValueData kvd;
@@ -76,17 +76,17 @@ cell PSKeyValueI(char *name, AMX *amx, c
kvd.szValue=&StrData[0];
kvd.fHandled=0;
//printf("\"%s\" \"%s\"\n",kvd.szKeyName,kvd.szValue);
MDLL_KeyValue(reinterpret_cast<edict_t *>(params[1]),&kvd);
return 1;
}
-cell PSKeyValueF(char *name, AMX *amx, cell *params)
+cell PSKeyValueF(const char *name, AMX *amx, cell *params)
{
if (params[1]==0)
{
MF_LogError(amx,AMX_ERR_NATIVE,"Invalid particle system handle provided!");
return 0;
}
KeyValueData kvd;
@@ -101,17 +101,17 @@ cell PSKeyValueF(char *name, AMX *amx, c
//printf("\"%s\" \"%s\"\n",kvd.szKeyName,kvd.szValue);
MDLL_KeyValue(reinterpret_cast<edict_t *>(params[1]),&kvd);
return 1;
}
-cell PSKeyValueS(char *name, AMX *amx, cell *params)
+cell PSKeyValueS(const char *name, AMX *amx, cell *params)
{
if (params[1]==0)
{
MF_LogError(amx,AMX_ERR_NATIVE,"Invalid particle system handle provided!");
return 0;
}
KeyValueData kvd;
diff --git a/dlls/ns/ns.h b/dlls/ns/ns.h
--- a/dlls/ns/ns.h
+++ b/dlls/ns/ns.h
@@ -58,17 +58,17 @@ extern edict_t *player_edicts[33]; // St
void PlayerPreThink(edict_t *pEntity);
void PlayerPreThink_Post(edict_t *pEntity);
void PlayerPostThink_Post(edict_t *pEntity);
void UpdateClientData( const struct edict_s *ent, int sendweapons, struct clientdata_s *cd );
void StartFrame(void);
edict_t* CreateNamedEntity_Post(int className);
-void AlertMessage_Post(ALERT_TYPE atype, char *szFmt, ...);
+void AlertMessage_Post(ALERT_TYPE atype, const char *szFmt, ...);
typedef struct tagAMX_HEADER {
int32_t size PACKED; /* size of the "file" */
uint16_t magic PACKED; /* signature */
char file_version; /* file format version */
char amx_version; /* required version of the AMX */
int16_t flags PACKED;
diff --git a/dlls/ns/sdk/amxxmodule.cpp b/dlls/ns/sdk/amxxmodule.cpp
--- a/dlls/ns/sdk/amxxmodule.cpp
+++ b/dlls/ns/sdk/amxxmodule.cpp
@@ -2235,17 +2235,17 @@ static META_FUNCTIONS g_MetaFunctions_Ta
GetEntityAPI2,
GetEntityAPI2_Post,
GetNewDLLFunctions,
GetNewDLLFunctions_Post,
GetEngineFunctions,
GetEngineFunctions_Post
};
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
if ((int) CVAR_GET_FLOAT("developer") != 0)
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
Plugin_info.logtag, ifvers, Plugin_info.ifvers);
// Check for valid pMetaUtilFuncs before we continue.
if(!pMetaUtilFuncs) {
UTIL_LogPrintf("[%s] ERROR: Meta_Query called with null pMetaUtilFuncs\n", Plugin_info.logtag);
@@ -2329,17 +2329,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
#ifdef FN_META_DETACH
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
@@ -3045,17 +3045,17 @@ char* UTIL_VarArgs( char *format, ... )
return string;
}
//=========================================================
// UTIL_LogPrintf - Prints a logged message to console.
// Preceded by LOG: ( timestamp ) < message >
//=========================================================
-void UTIL_LogPrintf( char *fmt, ... )
+void UTIL_LogPrintf( const char *fmt, ... )
{
va_list argptr;
static char string[1024];
va_start ( argptr, fmt );
vsnprintf ( string, sizeof(string), fmt, argptr );
va_end ( argptr );
diff --git a/dlls/ns/sdk/amxxmodule.h b/dlls/ns/sdk/amxxmodule.h
--- a/dlls/ns/sdk/amxxmodule.h
+++ b/dlls/ns/sdk/amxxmodule.h
@@ -15,21 +15,26 @@
#ifdef USE_METAMOD
#include <extdll.h>
#include <meta_api.h>
#include "osdep.h"
#endif // #ifdef USE_METAMOD
// DLL Export
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
+#endif
+
+#if defined(__linux__) && !defined(LINUX)
#define LINUX
+#elif defined(__APPLE__) && !defined(OSX)
+#define OSX
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
// ***** AMXX stuff *****
// module interface version was 1
@@ -61,17 +66,17 @@ struct amxx_module_info_s
// *** Small stuff ***
// The next section is copied from the amx.h file
// Copyright (c) ITB CompuPhase, 1997-2005
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -303,17 +308,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -390,28 +395,28 @@ enum {
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
AMX_ERR_PARAMS, /* parameter error */
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
};
#if !defined AMX_NO_ALIGN
- #if defined __linux__
+ #if defined(__linux__) || defined(__APPLE__)
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions *****
#ifdef USE_METAMOD
-void UTIL_LogPrintf( char *fmt, ... );
+void UTIL_LogPrintf( const char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY
void FN_META_QUERY(void);
#endif // FN_META_QUERY
@@ -828,21 +833,21 @@ int FN_InconsistentFile_Post(const edict
#ifdef FN_AllowLagCompensation_Post
int FN_AllowLagCompensation_Post(void);
#endif // FN_AllowLagCompensation_Post
#ifdef FN_PrecacheModel
-int FN_PrecacheModel(char *s);
+int FN_PrecacheModel(const char *s);
#endif // FN_PrecacheModel
#ifdef FN_PrecacheSound
-int FN_PrecacheSound(char *s);
+int FN_PrecacheSound(const char *s);
#endif // FN_PrecacheSound
#ifdef FN_SetModel
void FN_SetModel(edict_t *e, const char *m);
#endif // FN_SetModel
#ifdef FN_ModelIndex
int FN_ModelIndex(const char *m);
@@ -852,17 +857,17 @@ int FN_ModelIndex(const char *m);
int FN_ModelFrames(int modelIndex);
#endif // FN_ModelFrames
#ifdef FN_SetSize
void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize
#ifdef FN_ChangeLevel
-void FN_ChangeLevel(char *s1, char *s2);
+void FN_ChangeLevel(const char *s1, const char *s2);
#endif // FN_ChangeLevel
#ifdef FN_GetSpawnParms
void FN_GetSpawnParms(edict_t *ent);
#endif // FN_GetSpawnParms
#ifdef FN_SaveSpawnParms
void FN_SaveSpawnParms(edict_t *ent);
@@ -1256,37 +1261,37 @@ void FN_RunPlayerMove(edict_t *fakeclien
int FN_NumberOfEntities(void);
#endif // FN_NumberOfEntities
#ifdef FN_GetInfoKeyBuffer
char *FN_GetInfoKeyBuffer(edict_t *e);
#endif // FN_GetInfoKeyBuffer
#ifdef FN_InfoKeyValue
-char *FN_InfoKeyValue(char *infobuffer, char *key);
+char *FN_InfoKeyValue(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue
#ifdef FN_SetKeyValue
-void FN_SetKeyValue(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue
#ifdef FN_SetClientKeyValue
-void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue
#ifdef FN_IsMapValid
-int FN_IsMapValid(char *filename);
+int FN_IsMapValid(const char *filename);
#endif // FN_IsMapValid
#ifdef FN_StaticDecal
void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal
#ifdef FN_PrecacheGeneric
-int FN_PrecacheGeneric(char *s);
+int FN_PrecacheGeneric(const char *s);
#endif // FN_PrecacheGeneric
#ifdef FN_GetPlayerUserId
int FN_GetPlayerUserId(edict_t *e );
#endif // FN_GetPlayerUserId
#ifdef FN_BuildSoundMsg
void FN_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -1409,21 +1414,21 @@ const char *FN_GetPlayerAuthId(edict_t *
#endif // FN_GetPlayerAuthId
#ifdef FN_PrecacheModel_Post
-int FN_PrecacheModel_Post(char *s);
+int FN_PrecacheModel_Post(const char *s);
#endif // FN_PrecacheModel_Post
#ifdef FN_PrecacheSound_Post
-int FN_PrecacheSound_Post(char *s);
+int FN_PrecacheSound_Post(const char *s);
#endif // FN_PrecacheSound_Post
#ifdef FN_SetModel_Post
void FN_SetModel_Post(edict_t *e, const char *m);
#endif // FN_SetModel_Post
#ifdef FN_ModelIndex_Post
int FN_ModelIndex_Post(const char *m);
@@ -1433,17 +1438,17 @@ int FN_ModelIndex_Post(const char *m);
int FN_ModelFrames_Post(int modelIndex);
#endif // FN_ModelFrames_Post
#ifdef FN_SetSize_Post
void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize_Post
#ifdef FN_ChangeLevel_Post
-void FN_ChangeLevel_Post(char *s1, char *s2);
+void FN_ChangeLevel_Post(const char *s1, const char *s2);
#endif // FN_ChangeLevel_Post
#ifdef FN_GetSpawnParms_Post
void FN_GetSpawnParms_Post(edict_t *ent);
#endif // FN_GetSpawnParms_Post
#ifdef FN_SaveSpawnParms_Post
void FN_SaveSpawnParms_Post(edict_t *ent);
@@ -1837,37 +1842,37 @@ void FN_RunPlayerMove_Post(edict_t *fake
int FN_NumberOfEntities_Post(void);
#endif // FN_NumberOfEntities_Post
#ifdef FN_GetInfoKeyBuffer_Post
char *FN_GetInfoKeyBuffer_Post(edict_t *e);
#endif // FN_GetInfoKeyBuffer_Post
#ifdef FN_InfoKeyValue_Post
-char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
+char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue_Post
#ifdef FN_SetKeyValue_Post
-void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue_Post
#ifdef FN_SetClientKeyValue_Post
-void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue_Post
#ifdef FN_IsMapValid_Post
-int FN_IsMapValid_Post(char *filename);
+int FN_IsMapValid_Post(const char *filename);
#endif // FN_IsMapValid_Post
#ifdef FN_StaticDecal_Post
void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal_Post
#ifdef FN_PrecacheGeneric_Post
-int FN_PrecacheGeneric_Post(char *s);
+int FN_PrecacheGeneric_Post(const char *s);
#endif // FN_PrecacheGeneric_Post
#ifdef FN_GetPlayerUserId_Post
int FN_GetPlayerUserId_Post(edict_t *e );
#endif // FN_GetPlayerUserId_Post
#ifdef FN_BuildSoundMsg_Post
void FN_BuildSoundMsg_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -2111,17 +2116,17 @@ enum LibType
typedef void (*AUTHORIZEFUNC)(int player, const char *authstring);
typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
-typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
+typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
typedef const char * (*PFN_GET_MODNAME) (void);
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/);
typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */);
typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/);
typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr);
@@ -2170,18 +2175,18 @@ typedef void * (*PFN_ALLOCATOR) (co
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ );
typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const void* /*addr*/ );
#endif
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
-typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
-typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
diff --git a/dlls/ns/sh_list.h b/dlls/ns/sh_list.h
--- a/dlls/ns/sh_list.h
+++ b/dlls/ns/sh_list.h
@@ -14,17 +14,17 @@
// MSVC8 fix for offsetof macro redefition warnings
#ifdef _MSC_VER
#if _MSC_VER >= 1400
#undef offsetof
#endif
#endif
#include <new>
-#include <malloc.h>
+#include <stdlib.h>
//namespace SourceHook
//{
//This class is from CSDM for AMX Mod X
/*
A circular, doubly-linked list with one sentinel node
Empty:
diff --git a/dlls/ns/utilfunctions.h b/dlls/ns/utilfunctions.h
--- a/dlls/ns/utilfunctions.h
+++ b/dlls/ns/utilfunctions.h
@@ -119,17 +119,17 @@ int UTIL_FindBuildingHive(void);
BOOL UTIL_CheckForPublic(const char *publicname);
BOOL UTIL_CheckForNative(const char *NativeName);
class CPlayer;
CPlayer *UTIL_PlayerByCID(int CID);
// Converts something such as RESOURCES into OFFSET_WIN_RESOURCES or OFFSET_LIN_RESOURCES
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
#define MAKE_OFFSET(Offset) OFFSET_LIN_##Offset
#define MAKE_MEMBER_OFFSET(Offs) (Offs - OFFSET_LIN_MEMBERFUNCSTART)
#else
#define MAKE_OFFSET(Offset) OFFSET_WIN_##Offset
#define MAKE_MEMBER_OFFSET(Offs) (Offs - OFFSET_WIN_MEMBERFUNCSTART)
#endif // __linux__
template <typename Output>
diff --git a/dlls/nvault/Journal.cpp b/dlls/nvault/Journal.cpp
--- a/dlls/nvault/Journal.cpp
+++ b/dlls/nvault/Journal.cpp
@@ -1,11 +1,11 @@
#include <stdio.h>
#include <stdarg.h>
-#if defined __linux__
+#if defined(__linux__) || defined(__APPLE__)
#include <unistd.h>
#endif
#include "Journal.h"
Journal::Journal(const char *file)
{
m_File.assign(file);
}
diff --git a/dlls/nvault/Makefile b/dlls/nvault/Makefile
--- a/dlls/nvault/Makefile
+++ b/dlls/nvault/Makefile
@@ -1,79 +1,123 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
-HLSDK = ../../../hlsdk
+###########################################
+### EDIT THESE PATHS FOR YOUR OWN SETUP ###
+###########################################
+
+HLSDK = ../../../hlsdk/multiplayer
MM_ROOT = ../../../metamod/metamod
+#####################################
### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
-OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -fomit-frame-pointer
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-NAME = nvault
-
-BIN_SUFFIX_32 = amxx_i386.so
-BIN_SUFFIX_64 = amxx_amd64.so
+PROJECT = nvault
OBJECTS = sdk/amxxmodule.cpp amxxapi.cpp Binary.cpp Journal.cpp NVault.cpp
-#LINK = /lib/libgcc_eh.a /lib/libstdc++-3.4.a
-LINK =
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
-INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
- -I$(MM_ROOT) -I$(HLSDK)/common -Isdk
+C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
-GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+LINK =
-ifeq "$(GCC_VERSION)" "4"
- OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
+INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
+ -I$(MM_ROOT) -Isdk
+
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
+
+OS := $(shell uname -s)
+
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ LIB_SUFFIX = _amxx
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
+else
+ LIB_EXT = so
+ LIB_SUFFIX = _amxx_i386
+ CFLAGS += -DLINUX
+ LINK += -shared
endif
+LINK += -m32 -lm -ldl
+
+CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror
+CPPFLAGS += -fno-exceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
+
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS = $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
BIN_DIR = Release
- CFLAGS = $(OPT_FLAGS)
+ CFLAGS += $(C_OPT_FLAGS)
+ LINK += -s
endif
-CFLAGS += -DNDEBUG -Wall -Werror -DHAVE_STDINT_H -fno-rtti -static-libgcc -fno-exceptions -m32
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-ifeq "$(AMD64)" "true"
- BINARY = $(NAME)_$(BIN_SUFFIX_64)
- CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
else
- BINARY = $(NAME)_$(BIN_SUFFIX_32)
- CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
- OPT_FLAGS += -march=i586
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
endif
-OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
all:
mkdir -p $(BIN_DIR)
mkdir -p $(BIN_DIR)/sdk
- $(MAKE) nvault
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-amd64:
- $(MAKE) all AMD64=true
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
-nvault: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
-
-debug:
- $(MAKE) all DEBUG=true
+debug:
+ $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
default: all
clean:
- rm -rf Release/sdk/*.o
- rm -rf Release/*.o
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_64)
- rm -rf Debug/sdk/*.o
- rm -rf Debug/*.o
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64)
+ rm -rf $(BIN_DIR)/*.o
+ rm -rf $(BIN_DIR)/sdk/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
+
diff --git a/dlls/nvault/NVault.cpp b/dlls/nvault/NVault.cpp
--- a/dlls/nvault/NVault.cpp
+++ b/dlls/nvault/NVault.cpp
@@ -1,15 +1,15 @@
#include <stdio.h>
#include "amxxmodule.h"
#include "NVault.h"
#include "Binary.h"
#include "CString.h"
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
#define _snprintf snprintf
#endif
/**
* :TODO: This beast calls strcpy()/new() way too much by creating new strings on the stack.
* That's easily remedied and it should be fixed?
* ---bail
*/
diff --git a/dlls/nvault/amxxapi.cpp b/dlls/nvault/amxxapi.cpp
--- a/dlls/nvault/amxxapi.cpp
+++ b/dlls/nvault/amxxapi.cpp
@@ -4,17 +4,17 @@
#include "CQueue.h"
#ifdef WIN32
#define MKDIR(p) mkdir(p)
#else
#define MKDIR(p) mkdir(p, 0755)
#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#else
#include <direct.h>
#endif
CVector<NVault *> g_Vaults;
diff --git a/dlls/nvault/sdk/CString.h b/dlls/nvault/sdk/CString.h
--- a/dlls/nvault/sdk/CString.h
+++ b/dlls/nvault/sdk/CString.h
@@ -215,17 +215,17 @@ public:
if (len < 1)
{
return;
}
if (is_space(v[len-1]))
{
- for (i=len-1; i>=0; i--)
+ for (i=len-1; i<len; i--)
{
if (!is_space(v[i])
|| (is_space(v[i]) && i==0))
{
erase(i+1, j);
break;
}
j++;
diff --git a/dlls/nvault/sdk/amxxmodule.cpp b/dlls/nvault/sdk/amxxmodule.cpp
--- a/dlls/nvault/sdk/amxxmodule.cpp
+++ b/dlls/nvault/sdk/amxxmodule.cpp
@@ -2235,17 +2235,17 @@ static META_FUNCTIONS g_MetaFunctions_Ta
GetEntityAPI2,
GetEntityAPI2_Post,
GetNewDLLFunctions,
GetNewDLLFunctions_Post,
GetEngineFunctions,
GetEngineFunctions_Post
};
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
if ((int) CVAR_GET_FLOAT("developer") != 0)
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
Plugin_info.logtag, ifvers, Plugin_info.ifvers);
// Check for valid pMetaUtilFuncs before we continue.
if(!pMetaUtilFuncs) {
UTIL_LogPrintf("[%s] ERROR: Meta_Query called with null pMetaUtilFuncs\n", Plugin_info.logtag);
@@ -2329,17 +2329,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
#ifdef FN_META_DETACH
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
@@ -3045,17 +3045,17 @@ char* UTIL_VarArgs( char *format, ... )
return string;
}
//=========================================================
// UTIL_LogPrintf - Prints a logged message to console.
// Preceded by LOG: ( timestamp ) < message >
//=========================================================
-void UTIL_LogPrintf( char *fmt, ... )
+void UTIL_LogPrintf( const char *fmt, ... )
{
va_list argptr;
static char string[1024];
va_start ( argptr, fmt );
vsnprintf ( string, sizeof(string), fmt, argptr );
va_end ( argptr );
diff --git a/dlls/nvault/sdk/amxxmodule.h b/dlls/nvault/sdk/amxxmodule.h
--- a/dlls/nvault/sdk/amxxmodule.h
+++ b/dlls/nvault/sdk/amxxmodule.h
@@ -15,21 +15,26 @@
#ifdef USE_METAMOD
#include <extdll.h>
#include <meta_api.h>
#include "osdep.h"
#endif // #ifdef USE_METAMOD
// DLL Export
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
+#endif
+
+#if defined(__linux__) && !defined(LINUX)
#define LINUX
+#elif defined(__APPLE__) && !defined(OSX)
+#define OSX
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
// ***** AMXX stuff *****
// module interface version was 1
@@ -61,17 +66,17 @@ struct amxx_module_info_s
// *** Small stuff ***
// The next section is copied from the amx.h file
// Copyright (c) ITB CompuPhase, 1997-2005
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -303,17 +308,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -390,28 +395,28 @@ enum {
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
AMX_ERR_PARAMS, /* parameter error */
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
};
#if !defined AMX_NO_ALIGN
- #if defined __linux__
+ #if defined(__linux__) || defined(__APPLE__)
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions *****
#ifdef USE_METAMOD
-void UTIL_LogPrintf( char *fmt, ... );
+void UTIL_LogPrintf( const char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY
void FN_META_QUERY(void);
#endif // FN_META_QUERY
@@ -828,21 +833,21 @@ int FN_InconsistentFile_Post(const edict
#ifdef FN_AllowLagCompensation_Post
int FN_AllowLagCompensation_Post(void);
#endif // FN_AllowLagCompensation_Post
#ifdef FN_PrecacheModel
-int FN_PrecacheModel(char *s);
+int FN_PrecacheModel(const char *s);
#endif // FN_PrecacheModel
#ifdef FN_PrecacheSound
-int FN_PrecacheSound(char *s);
+int FN_PrecacheSound(const char *s);
#endif // FN_PrecacheSound
#ifdef FN_SetModel
void FN_SetModel(edict_t *e, const char *m);
#endif // FN_SetModel
#ifdef FN_ModelIndex
int FN_ModelIndex(const char *m);
@@ -852,17 +857,17 @@ int FN_ModelIndex(const char *m);
int FN_ModelFrames(int modelIndex);
#endif // FN_ModelFrames
#ifdef FN_SetSize
void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize
#ifdef FN_ChangeLevel
-void FN_ChangeLevel(char *s1, char *s2);
+void FN_ChangeLevel(const char *s1, const char *s2);
#endif // FN_ChangeLevel
#ifdef FN_GetSpawnParms
void FN_GetSpawnParms(edict_t *ent);
#endif // FN_GetSpawnParms
#ifdef FN_SaveSpawnParms
void FN_SaveSpawnParms(edict_t *ent);
@@ -1256,37 +1261,37 @@ void FN_RunPlayerMove(edict_t *fakeclien
int FN_NumberOfEntities(void);
#endif // FN_NumberOfEntities
#ifdef FN_GetInfoKeyBuffer
char *FN_GetInfoKeyBuffer(edict_t *e);
#endif // FN_GetInfoKeyBuffer
#ifdef FN_InfoKeyValue
-char *FN_InfoKeyValue(char *infobuffer, char *key);
+char *FN_InfoKeyValue(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue
#ifdef FN_SetKeyValue
-void FN_SetKeyValue(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue
#ifdef FN_SetClientKeyValue
-void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue
#ifdef FN_IsMapValid
-int FN_IsMapValid(char *filename);
+int FN_IsMapValid(const char *filename);
#endif // FN_IsMapValid
#ifdef FN_StaticDecal
void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal
#ifdef FN_PrecacheGeneric
-int FN_PrecacheGeneric(char *s);
+int FN_PrecacheGeneric(const char *s);
#endif // FN_PrecacheGeneric
#ifdef FN_GetPlayerUserId
int FN_GetPlayerUserId(edict_t *e );
#endif // FN_GetPlayerUserId
#ifdef FN_BuildSoundMsg
void FN_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -1409,21 +1414,21 @@ const char *FN_GetPlayerAuthId(edict_t *
#endif // FN_GetPlayerAuthId
#ifdef FN_PrecacheModel_Post
-int FN_PrecacheModel_Post(char *s);
+int FN_PrecacheModel_Post(const char *s);
#endif // FN_PrecacheModel_Post
#ifdef FN_PrecacheSound_Post
-int FN_PrecacheSound_Post(char *s);
+int FN_PrecacheSound_Post(const char *s);
#endif // FN_PrecacheSound_Post
#ifdef FN_SetModel_Post
void FN_SetModel_Post(edict_t *e, const char *m);
#endif // FN_SetModel_Post
#ifdef FN_ModelIndex_Post
int FN_ModelIndex_Post(const char *m);
@@ -1433,17 +1438,17 @@ int FN_ModelIndex_Post(const char *m);
int FN_ModelFrames_Post(int modelIndex);
#endif // FN_ModelFrames_Post
#ifdef FN_SetSize_Post
void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize_Post
#ifdef FN_ChangeLevel_Post
-void FN_ChangeLevel_Post(char *s1, char *s2);
+void FN_ChangeLevel_Post(const char *s1, const char *s2);
#endif // FN_ChangeLevel_Post
#ifdef FN_GetSpawnParms_Post
void FN_GetSpawnParms_Post(edict_t *ent);
#endif // FN_GetSpawnParms_Post
#ifdef FN_SaveSpawnParms_Post
void FN_SaveSpawnParms_Post(edict_t *ent);
@@ -1837,37 +1842,37 @@ void FN_RunPlayerMove_Post(edict_t *fake
int FN_NumberOfEntities_Post(void);
#endif // FN_NumberOfEntities_Post
#ifdef FN_GetInfoKeyBuffer_Post
char *FN_GetInfoKeyBuffer_Post(edict_t *e);
#endif // FN_GetInfoKeyBuffer_Post
#ifdef FN_InfoKeyValue_Post
-char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
+char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue_Post
#ifdef FN_SetKeyValue_Post
-void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue_Post
#ifdef FN_SetClientKeyValue_Post
-void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue_Post
#ifdef FN_IsMapValid_Post
-int FN_IsMapValid_Post(char *filename);
+int FN_IsMapValid_Post(const char *filename);
#endif // FN_IsMapValid_Post
#ifdef FN_StaticDecal_Post
void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal_Post
#ifdef FN_PrecacheGeneric_Post
-int FN_PrecacheGeneric_Post(char *s);
+int FN_PrecacheGeneric_Post(const char *s);
#endif // FN_PrecacheGeneric_Post
#ifdef FN_GetPlayerUserId_Post
int FN_GetPlayerUserId_Post(edict_t *e );
#endif // FN_GetPlayerUserId_Post
#ifdef FN_BuildSoundMsg_Post
void FN_BuildSoundMsg_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -2111,17 +2116,17 @@ enum LibType
typedef void (*AUTHORIZEFUNC)(int player, const char *authstring);
typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
-typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
+typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
typedef const char * (*PFN_GET_MODNAME) (void);
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/);
typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */);
typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/);
typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr);
@@ -2170,18 +2175,18 @@ typedef void * (*PFN_ALLOCATOR) (co
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ );
typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const void* /*addr*/ );
#endif
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
-typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
-typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
diff --git a/dlls/nvault/sdk/sh_list.h b/dlls/nvault/sdk/sh_list.h
--- a/dlls/nvault/sdk/sh_list.h
+++ b/dlls/nvault/sdk/sh_list.h
@@ -14,17 +14,17 @@
// MSVC8 fix for offsetof macro redefition warnings
#ifdef _MSC_VER
#if _MSC_VER >= 1400
#undef offsetof
#endif
#endif
#include <new>
-#include <malloc.h>
+#include <stdlib.h>
//namespace SourceHook
//{
//This class is from CSDM for AMX Mod X
/*
A circular, doubly-linked list with one sentinel node
Empty:
diff --git a/dlls/nvault/sdk/sh_tinyhash.h b/dlls/nvault/sdk/sh_tinyhash.h
--- a/dlls/nvault/sdk/sh_tinyhash.h
+++ b/dlls/nvault/sdk/sh_tinyhash.h
@@ -427,17 +427,17 @@ public:
{
iterator old(*this);
_Inc();
return old;
}
void erase()
{
if (end || !hash || curbucket < 0 || curbucket >= static_cast<int>(hash->m_numBuckets))
- return true;
+ return;
iterator tmp = *this;
++tmp;
delete (*iter);
hash->m_Items--;
hash->m_Buckets[curbucket]->erase(iter);
*this = tmp;
}
diff --git a/dlls/regex/Makefile b/dlls/regex/Makefile
--- a/dlls/regex/Makefile
+++ b/dlls/regex/Makefile
@@ -1,80 +1,124 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
-HLSDK = ../../../hlsdk
+###########################################
+### EDIT THESE PATHS FOR YOUR OWN SETUP ###
+###########################################
+
+HLSDK = ../../../hlsdk/multiplayer
MM_ROOT = ../../../metamod/metamod
+#####################################
### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
-OPT_FLAGS = -O3 -funroll-loops -s -pipe -fomit-frame-pointer -fno-strict-aliasing
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-NAME = regex
-
-BIN_SUFFIX_32 = amxx_i386.so
-BIN_SUFFIX_64 = amxx_amd64.so
+PROJECT = regex
OBJECTS = sdk/amxxmodule.cpp module.cpp CRegEx.cpp
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
+
+C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
+
LINK = -lpcre
-INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
- -I$(MM_ROOT) -I$(HLSDK)/common -Isdk
+INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
+ -I$(MM_ROOT) -Isdk
-GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
-ifeq "$(GCC_VERSION)" "4"
- OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
+OS := $(shell uname -s)
+
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ LIB_SUFFIX = _amxx
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 -Llib_darwin
+else
+ LIB_EXT = so
+ LIB_SUFFIX = _amxx_i386
+ CFLAGS += -DLINUX
+ LINK += -shared -Llib_linux
endif
+LINK += -m32 -lm -ldl
+
+CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror
+CPPFLAGS += -fno-exceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
+
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS = $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
BIN_DIR = Release
- CFLAGS = $(OPT_FLAGS)
+ CFLAGS += $(C_OPT_FLAGS)
+ LINK += -s
endif
-CFLAGS += -DNDEBUG -Wall -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -m32
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-ifeq "$(AMD64)" "true"
- BINARY = $(NAME)_$(BIN_SUFFIX_64)
- CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64
- INCLUDE += -Llib_linux64
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
else
- BINARY = $(NAME)_$(BIN_SUFFIX_32)
- CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
- OPT_FLAGS += -march=i586
- INCLUDE += -Llib_linux
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
endif
-OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
+
all:
mkdir -p $(BIN_DIR)
mkdir -p $(BIN_DIR)/sdk
- $(MAKE) regex
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-amd64:
- $(MAKE) all AMD64=true
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
-regex: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
-
-debug:
- $(MAKE) all DEBUG=true
+debug:
+ $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
default: all
clean:
- rm -rf Release/sdk/*.o
- rm -rf Release/*.o
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_64)
- rm -rf Debug/sdk/*.o
- rm -rf Debug/*.o
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64)
+ rm -rf $(BIN_DIR)/*.o
+ rm -rf $(BIN_DIR)/sdk/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
+
diff --git a/dlls/regex/sdk/amxxmodule.cpp b/dlls/regex/sdk/amxxmodule.cpp
--- a/dlls/regex/sdk/amxxmodule.cpp
+++ b/dlls/regex/sdk/amxxmodule.cpp
@@ -2235,17 +2235,17 @@ static META_FUNCTIONS g_MetaFunctions_Ta
GetEntityAPI2,
GetEntityAPI2_Post,
GetNewDLLFunctions,
GetNewDLLFunctions_Post,
GetEngineFunctions,
GetEngineFunctions_Post
};
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
if ((int) CVAR_GET_FLOAT("developer") != 0)
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
Plugin_info.logtag, ifvers, Plugin_info.ifvers);
// Check for valid pMetaUtilFuncs before we continue.
if(!pMetaUtilFuncs) {
UTIL_LogPrintf("[%s] ERROR: Meta_Query called with null pMetaUtilFuncs\n", Plugin_info.logtag);
@@ -2329,17 +2329,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
#ifdef FN_META_DETACH
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
@@ -3045,17 +3045,17 @@ char* UTIL_VarArgs( char *format, ... )
return string;
}
//=========================================================
// UTIL_LogPrintf - Prints a logged message to console.
// Preceded by LOG: ( timestamp ) < message >
//=========================================================
-void UTIL_LogPrintf( char *fmt, ... )
+void UTIL_LogPrintf( const char *fmt, ... )
{
va_list argptr;
static char string[1024];
va_start ( argptr, fmt );
vsnprintf ( string, sizeof(string), fmt, argptr );
va_end ( argptr );
diff --git a/dlls/regex/sdk/amxxmodule.h b/dlls/regex/sdk/amxxmodule.h
--- a/dlls/regex/sdk/amxxmodule.h
+++ b/dlls/regex/sdk/amxxmodule.h
@@ -15,21 +15,26 @@
#ifdef USE_METAMOD
#include <extdll.h>
#include <meta_api.h>
#include "osdep.h"
#endif // #ifdef USE_METAMOD
// DLL Export
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
+#endif
+
+#if defined(__linux__) && !defined(LINUX)
#define LINUX
+#elif defined(__APPLE__) && !defined(OSX)
+#define OSX
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
// ***** AMXX stuff *****
// module interface version was 1
@@ -61,17 +66,17 @@ struct amxx_module_info_s
// *** Small stuff ***
// The next section is copied from the amx.h file
// Copyright (c) ITB CompuPhase, 1997-2005
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -303,17 +308,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -390,28 +395,28 @@ enum {
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
AMX_ERR_PARAMS, /* parameter error */
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
};
#if !defined AMX_NO_ALIGN
- #if defined __linux__
+ #if defined(__linux__) || defined(__APPLE__)
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions *****
#ifdef USE_METAMOD
-void UTIL_LogPrintf( char *fmt, ... );
+void UTIL_LogPrintf( const char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY
void FN_META_QUERY(void);
#endif // FN_META_QUERY
@@ -828,21 +833,21 @@ int FN_InconsistentFile_Post(const edict
#ifdef FN_AllowLagCompensation_Post
int FN_AllowLagCompensation_Post(void);
#endif // FN_AllowLagCompensation_Post
#ifdef FN_PrecacheModel
-int FN_PrecacheModel(char *s);
+int FN_PrecacheModel(const char *s);
#endif // FN_PrecacheModel
#ifdef FN_PrecacheSound
-int FN_PrecacheSound(char *s);
+int FN_PrecacheSound(const char *s);
#endif // FN_PrecacheSound
#ifdef FN_SetModel
void FN_SetModel(edict_t *e, const char *m);
#endif // FN_SetModel
#ifdef FN_ModelIndex
int FN_ModelIndex(const char *m);
@@ -852,17 +857,17 @@ int FN_ModelIndex(const char *m);
int FN_ModelFrames(int modelIndex);
#endif // FN_ModelFrames
#ifdef FN_SetSize
void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize
#ifdef FN_ChangeLevel
-void FN_ChangeLevel(char *s1, char *s2);
+void FN_ChangeLevel(const char *s1, const char *s2);
#endif // FN_ChangeLevel
#ifdef FN_GetSpawnParms
void FN_GetSpawnParms(edict_t *ent);
#endif // FN_GetSpawnParms
#ifdef FN_SaveSpawnParms
void FN_SaveSpawnParms(edict_t *ent);
@@ -1256,37 +1261,37 @@ void FN_RunPlayerMove(edict_t *fakeclien
int FN_NumberOfEntities(void);
#endif // FN_NumberOfEntities
#ifdef FN_GetInfoKeyBuffer
char *FN_GetInfoKeyBuffer(edict_t *e);
#endif // FN_GetInfoKeyBuffer
#ifdef FN_InfoKeyValue
-char *FN_InfoKeyValue(char *infobuffer, char *key);
+char *FN_InfoKeyValue(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue
#ifdef FN_SetKeyValue
-void FN_SetKeyValue(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue
#ifdef FN_SetClientKeyValue
-void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue
#ifdef FN_IsMapValid
-int FN_IsMapValid(char *filename);
+int FN_IsMapValid(const char *filename);
#endif // FN_IsMapValid
#ifdef FN_StaticDecal
void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal
#ifdef FN_PrecacheGeneric
-int FN_PrecacheGeneric(char *s);
+int FN_PrecacheGeneric(const char *s);
#endif // FN_PrecacheGeneric
#ifdef FN_GetPlayerUserId
int FN_GetPlayerUserId(edict_t *e );
#endif // FN_GetPlayerUserId
#ifdef FN_BuildSoundMsg
void FN_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -1409,21 +1414,21 @@ const char *FN_GetPlayerAuthId(edict_t *
#endif // FN_GetPlayerAuthId
#ifdef FN_PrecacheModel_Post
-int FN_PrecacheModel_Post(char *s);
+int FN_PrecacheModel_Post(const char *s);
#endif // FN_PrecacheModel_Post
#ifdef FN_PrecacheSound_Post
-int FN_PrecacheSound_Post(char *s);
+int FN_PrecacheSound_Post(const char *s);
#endif // FN_PrecacheSound_Post
#ifdef FN_SetModel_Post
void FN_SetModel_Post(edict_t *e, const char *m);
#endif // FN_SetModel_Post
#ifdef FN_ModelIndex_Post
int FN_ModelIndex_Post(const char *m);
@@ -1433,17 +1438,17 @@ int FN_ModelIndex_Post(const char *m);
int FN_ModelFrames_Post(int modelIndex);
#endif // FN_ModelFrames_Post
#ifdef FN_SetSize_Post
void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize_Post
#ifdef FN_ChangeLevel_Post
-void FN_ChangeLevel_Post(char *s1, char *s2);
+void FN_ChangeLevel_Post(const char *s1, const char *s2);
#endif // FN_ChangeLevel_Post
#ifdef FN_GetSpawnParms_Post
void FN_GetSpawnParms_Post(edict_t *ent);
#endif // FN_GetSpawnParms_Post
#ifdef FN_SaveSpawnParms_Post
void FN_SaveSpawnParms_Post(edict_t *ent);
@@ -1837,37 +1842,37 @@ void FN_RunPlayerMove_Post(edict_t *fake
int FN_NumberOfEntities_Post(void);
#endif // FN_NumberOfEntities_Post
#ifdef FN_GetInfoKeyBuffer_Post
char *FN_GetInfoKeyBuffer_Post(edict_t *e);
#endif // FN_GetInfoKeyBuffer_Post
#ifdef FN_InfoKeyValue_Post
-char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
+char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue_Post
#ifdef FN_SetKeyValue_Post
-void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue_Post
#ifdef FN_SetClientKeyValue_Post
-void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue_Post
#ifdef FN_IsMapValid_Post
-int FN_IsMapValid_Post(char *filename);
+int FN_IsMapValid_Post(const char *filename);
#endif // FN_IsMapValid_Post
#ifdef FN_StaticDecal_Post
void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal_Post
#ifdef FN_PrecacheGeneric_Post
-int FN_PrecacheGeneric_Post(char *s);
+int FN_PrecacheGeneric_Post(const char *s);
#endif // FN_PrecacheGeneric_Post
#ifdef FN_GetPlayerUserId_Post
int FN_GetPlayerUserId_Post(edict_t *e );
#endif // FN_GetPlayerUserId_Post
#ifdef FN_BuildSoundMsg_Post
void FN_BuildSoundMsg_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -2111,17 +2116,17 @@ enum LibType
typedef void (*AUTHORIZEFUNC)(int player, const char *authstring);
typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
-typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
+typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
typedef const char * (*PFN_GET_MODNAME) (void);
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/);
typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */);
typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/);
typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr);
@@ -2170,18 +2175,18 @@ typedef void * (*PFN_ALLOCATOR) (co
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ );
typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const void* /*addr*/ );
#endif
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
-typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
-typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
diff --git a/dlls/sockets/Makefile b/dlls/sockets/Makefile
--- a/dlls/sockets/Makefile
+++ b/dlls/sockets/Makefile
@@ -1,78 +1,124 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
-HLSDK = ../../../hlsdk
+###########################################
+### EDIT THESE PATHS FOR YOUR OWN SETUP ###
+###########################################
+
+HLSDK = ../../../hlsdk/multiplayer
MM_ROOT = ../../../metamod/metamod
+#####################################
### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
-OPT_FLAGS = -O2 -funroll-loops -s -pipe -fno-strict-aliasing -fomit-frame-pointer
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-NAME = sockets
-
-BIN_SUFFIX_32 = amxx_i386.so
-BIN_SUFFIX_64 = amxx_amd64.so
+PROJECT = sockets
OBJECTS = sdk/amxxmodule.cpp sockets.cpp
-LINK =
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
-INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
- -I$(MM_ROOT) -I$(HLSDK)/common -Isdk
+C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
-GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+LINK =
-ifeq "$(GCC_VERSION)" "4"
- OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
+INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
+ -I$(MM_ROOT) -Isdk
+
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
+
+OS := $(shell uname -s)
+
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ LIB_SUFFIX = _amxx
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
+else
+ LIB_EXT = so
+ LIB_SUFFIX = _amxx_i386
+ CFLAGS += -DLINUX
+ LINK += -shared
endif
+LINK += -m32 -lm -ldl
+
+CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror
+CPPFLAGS += -fno-exceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
+
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS = $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
BIN_DIR = Release
- CFLAGS = $(OPT_FLAGS)
+ CFLAGS += $(C_OPT_FLAGS)
+ LINK += -s
endif
-CFLAGS += -DNDEBUG -Wall -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -m32
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-ifeq "$(AMD64)" "true"
- BINARY = $(NAME)_$(BIN_SUFFIX_64)
- CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
else
- BINARY = $(NAME)_$(BIN_SUFFIX_32)
- CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
- OPT_FLAGS += -march=i586
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
endif
-OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
+
all:
mkdir -p $(BIN_DIR)
mkdir -p $(BIN_DIR)/sdk
- $(MAKE) sockets
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-amd64:
- $(MAKE) all AMD64=true
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
-sockets: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
-
-debug:
- $(MAKE) all DEBUG=true
+debug:
+ $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
default: all
clean:
- rm -rf Release/sdk/*.o
- rm -rf Release/*.o
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_64)
- rm -rf Debug/sdk/*.o
- rm -rf Debug/*.o
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64)
+ rm -rf $(BIN_DIR)/*.o
+ rm -rf $(BIN_DIR)/sdk/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
+
diff --git a/dlls/sockets/sdk/amxxmodule.cpp b/dlls/sockets/sdk/amxxmodule.cpp
--- a/dlls/sockets/sdk/amxxmodule.cpp
+++ b/dlls/sockets/sdk/amxxmodule.cpp
@@ -2235,17 +2235,17 @@ static META_FUNCTIONS g_MetaFunctions_Ta
GetEntityAPI2,
GetEntityAPI2_Post,
GetNewDLLFunctions,
GetNewDLLFunctions_Post,
GetEngineFunctions,
GetEngineFunctions_Post
};
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
if ((int) CVAR_GET_FLOAT("developer") != 0)
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
Plugin_info.logtag, ifvers, Plugin_info.ifvers);
// Check for valid pMetaUtilFuncs before we continue.
if(!pMetaUtilFuncs) {
UTIL_LogPrintf("[%s] ERROR: Meta_Query called with null pMetaUtilFuncs\n", Plugin_info.logtag);
@@ -2329,17 +2329,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
#ifdef FN_META_DETACH
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
@@ -3045,17 +3045,17 @@ char* UTIL_VarArgs( char *format, ... )
return string;
}
//=========================================================
// UTIL_LogPrintf - Prints a logged message to console.
// Preceded by LOG: ( timestamp ) < message >
//=========================================================
-void UTIL_LogPrintf( char *fmt, ... )
+void UTIL_LogPrintf( const char *fmt, ... )
{
va_list argptr;
static char string[1024];
va_start ( argptr, fmt );
vsnprintf ( string, sizeof(string), fmt, argptr );
va_end ( argptr );
diff --git a/dlls/sockets/sdk/amxxmodule.h b/dlls/sockets/sdk/amxxmodule.h
--- a/dlls/sockets/sdk/amxxmodule.h
+++ b/dlls/sockets/sdk/amxxmodule.h
@@ -15,21 +15,26 @@
#ifdef USE_METAMOD
#include <extdll.h>
#include <meta_api.h>
#include "osdep.h"
#endif // #ifdef USE_METAMOD
// DLL Export
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
+#endif
+
+#if defined(__linux__) && !defined(LINUX)
#define LINUX
+#elif defined(__APPLE__) && !defined(OSX)
+#define OSX
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
// ***** AMXX stuff *****
// module interface version was 1
@@ -61,17 +66,17 @@ struct amxx_module_info_s
// *** Small stuff ***
// The next section is copied from the amx.h file
// Copyright (c) ITB CompuPhase, 1997-2005
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -303,17 +308,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -390,28 +395,28 @@ enum {
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
AMX_ERR_PARAMS, /* parameter error */
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
};
#if !defined AMX_NO_ALIGN
- #if defined __linux__
+ #if defined(__linux__) || defined(__APPLE__)
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions *****
#ifdef USE_METAMOD
-void UTIL_LogPrintf( char *fmt, ... );
+void UTIL_LogPrintf( const char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY
void FN_META_QUERY(void);
#endif // FN_META_QUERY
@@ -828,21 +833,21 @@ int FN_InconsistentFile_Post(const edict
#ifdef FN_AllowLagCompensation_Post
int FN_AllowLagCompensation_Post(void);
#endif // FN_AllowLagCompensation_Post
#ifdef FN_PrecacheModel
-int FN_PrecacheModel(char *s);
+int FN_PrecacheModel(const char *s);
#endif // FN_PrecacheModel
#ifdef FN_PrecacheSound
-int FN_PrecacheSound(char *s);
+int FN_PrecacheSound(const char *s);
#endif // FN_PrecacheSound
#ifdef FN_SetModel
void FN_SetModel(edict_t *e, const char *m);
#endif // FN_SetModel
#ifdef FN_ModelIndex
int FN_ModelIndex(const char *m);
@@ -852,17 +857,17 @@ int FN_ModelIndex(const char *m);
int FN_ModelFrames(int modelIndex);
#endif // FN_ModelFrames
#ifdef FN_SetSize
void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize
#ifdef FN_ChangeLevel
-void FN_ChangeLevel(char *s1, char *s2);
+void FN_ChangeLevel(const char *s1, const char *s2);
#endif // FN_ChangeLevel
#ifdef FN_GetSpawnParms
void FN_GetSpawnParms(edict_t *ent);
#endif // FN_GetSpawnParms
#ifdef FN_SaveSpawnParms
void FN_SaveSpawnParms(edict_t *ent);
@@ -1256,37 +1261,37 @@ void FN_RunPlayerMove(edict_t *fakeclien
int FN_NumberOfEntities(void);
#endif // FN_NumberOfEntities
#ifdef FN_GetInfoKeyBuffer
char *FN_GetInfoKeyBuffer(edict_t *e);
#endif // FN_GetInfoKeyBuffer
#ifdef FN_InfoKeyValue
-char *FN_InfoKeyValue(char *infobuffer, char *key);
+char *FN_InfoKeyValue(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue
#ifdef FN_SetKeyValue
-void FN_SetKeyValue(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue
#ifdef FN_SetClientKeyValue
-void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue
#ifdef FN_IsMapValid
-int FN_IsMapValid(char *filename);
+int FN_IsMapValid(const char *filename);
#endif // FN_IsMapValid
#ifdef FN_StaticDecal
void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal
#ifdef FN_PrecacheGeneric
-int FN_PrecacheGeneric(char *s);
+int FN_PrecacheGeneric(const char *s);
#endif // FN_PrecacheGeneric
#ifdef FN_GetPlayerUserId
int FN_GetPlayerUserId(edict_t *e );
#endif // FN_GetPlayerUserId
#ifdef FN_BuildSoundMsg
void FN_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -1409,21 +1414,21 @@ const char *FN_GetPlayerAuthId(edict_t *
#endif // FN_GetPlayerAuthId
#ifdef FN_PrecacheModel_Post
-int FN_PrecacheModel_Post(char *s);
+int FN_PrecacheModel_Post(const char *s);
#endif // FN_PrecacheModel_Post
#ifdef FN_PrecacheSound_Post
-int FN_PrecacheSound_Post(char *s);
+int FN_PrecacheSound_Post(const char *s);
#endif // FN_PrecacheSound_Post
#ifdef FN_SetModel_Post
void FN_SetModel_Post(edict_t *e, const char *m);
#endif // FN_SetModel_Post
#ifdef FN_ModelIndex_Post
int FN_ModelIndex_Post(const char *m);
@@ -1433,17 +1438,17 @@ int FN_ModelIndex_Post(const char *m);
int FN_ModelFrames_Post(int modelIndex);
#endif // FN_ModelFrames_Post
#ifdef FN_SetSize_Post
void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize_Post
#ifdef FN_ChangeLevel_Post
-void FN_ChangeLevel_Post(char *s1, char *s2);
+void FN_ChangeLevel_Post(const char *s1, const char *s2);
#endif // FN_ChangeLevel_Post
#ifdef FN_GetSpawnParms_Post
void FN_GetSpawnParms_Post(edict_t *ent);
#endif // FN_GetSpawnParms_Post
#ifdef FN_SaveSpawnParms_Post
void FN_SaveSpawnParms_Post(edict_t *ent);
@@ -1837,37 +1842,37 @@ void FN_RunPlayerMove_Post(edict_t *fake
int FN_NumberOfEntities_Post(void);
#endif // FN_NumberOfEntities_Post
#ifdef FN_GetInfoKeyBuffer_Post
char *FN_GetInfoKeyBuffer_Post(edict_t *e);
#endif // FN_GetInfoKeyBuffer_Post
#ifdef FN_InfoKeyValue_Post
-char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
+char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue_Post
#ifdef FN_SetKeyValue_Post
-void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue_Post
#ifdef FN_SetClientKeyValue_Post
-void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue_Post
#ifdef FN_IsMapValid_Post
-int FN_IsMapValid_Post(char *filename);
+int FN_IsMapValid_Post(const char *filename);
#endif // FN_IsMapValid_Post
#ifdef FN_StaticDecal_Post
void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal_Post
#ifdef FN_PrecacheGeneric_Post
-int FN_PrecacheGeneric_Post(char *s);
+int FN_PrecacheGeneric_Post(const char *s);
#endif // FN_PrecacheGeneric_Post
#ifdef FN_GetPlayerUserId_Post
int FN_GetPlayerUserId_Post(edict_t *e );
#endif // FN_GetPlayerUserId_Post
#ifdef FN_BuildSoundMsg_Post
void FN_BuildSoundMsg_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -2111,17 +2116,17 @@ enum LibType
typedef void (*AUTHORIZEFUNC)(int player, const char *authstring);
typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
-typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
+typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
typedef const char * (*PFN_GET_MODNAME) (void);
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/);
typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */);
typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/);
typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr);
@@ -2170,18 +2175,18 @@ typedef void * (*PFN_ALLOCATOR) (co
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ );
typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const void* /*addr*/ );
#endif
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
-typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
-typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
diff --git a/dlls/sockets/sockets.cpp b/dlls/sockets/sockets.cpp
--- a/dlls/sockets/sockets.cpp
+++ b/dlls/sockets/sockets.cpp
@@ -13,17 +13,17 @@
* - code structure renewed
* v0.2
* - added socket_send2 to send data containing null bytes (FALUCO)(AMXX v1.65)
*/
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
-#include <string>
+#include <string.h>
#ifdef _WIN32
/* Windows */
#include <winsock.h>
#include <io.h>
#define socklen_t int
#else
/* Unix/Linux */
diff --git a/dlls/sqlite/Makefile b/dlls/sqlite/Makefile
--- a/dlls/sqlite/Makefile
+++ b/dlls/sqlite/Makefile
@@ -1,112 +1,146 @@
-#(C)2004-2006 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
-HLSDK = ../../../hlsdk
+###########################################
+### EDIT THESE PATHS FOR YOUR OWN SETUP ###
+###########################################
+
+HLSDK = ../../../hlsdk/multiplayer
MM_ROOT = ../../../metamod/metamod
-
-### EDIT BELOW FOR OTHER PROJECTS ###
-
-OPT_FLAGS = -O3 -funroll-loops -s -pipe -fomit-frame-pointer -fno-strict-aliasing
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-CC = gcc-4.1
-NAME = sqlite
SQL = sqlite-source
-BIN_SUFFIX_32 = amxx_i386.so
-BIN_SUFFIX_64 = amxx_amd64.so
+#####################################
+### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
-CPP_OBJECTS = basic_sql.cpp handles.cpp module.cpp threading.cpp sdk/amxxmodule.cpp oldcompat_sql.cpp
-CPP_OBJECTS += thread/BaseWorker.cpp thread/ThreadWorker.cpp thread/PosixThreads.cpp
-CPP_OBJECTS += sqlitepp/SqliteQuery.cpp sqlitepp/SqliteResultSet.cpp sqlitepp/SqliteDatabase.cpp sqlitepp/SqliteDriver.cpp
+PROJECT = sqlite
-C_OBJECTS = $(SQL)/alter.c $(SQL)/analyze.c $(SQL)/attach.c $(SQL)/auth.c $(SQL)/btree.c $(SQL)/build.c \
- $(SQL)/callback.c $(SQL)/complete.c $(SQL)/date.c $(SQL)/delete.c $(SQL)/expr.c $(SQL)/func.c \
- $(SQL)/hash.c $(SQL)/insert.c $(SQL)/legacy.c $(SQL)/loadext.c $(SQL)/main.c $(SQL)/opcodes.c \
- $(SQL)/os.c $(SQL)/os_unix.c $(SQL)/pager.c $(SQL)/parse.c $(SQL)/pragma.c $(SQL)/prepare.c \
- $(SQL)/printf.c $(SQL)/random.c $(SQL)/select.c $(SQL)/table.c $(SQL)/tokenize.c $(SQL)/trigger.c \
- $(SQL)/update.c $(SQL)/utf.c $(SQL)/util.c $(SQL)/vacuum.c $(SQL)/vdbe.c $(SQL)/vdbeapi.c \
- $(SQL)/vdbeaux.c $(SQL)/vdbefifo.c $(SQL)/vdbemem.c $(SQL)/vtab.c $(SQL)/where.c \
+OBJECTS = basic_sql.cpp handles.cpp module.cpp threading.cpp sdk/amxxmodule.cpp oldcompat_sql.cpp \
+ thread/BaseWorker.cpp thread/ThreadWorker.cpp thread/PosixThreads.cpp \
+ sqlitepp/SqliteQuery.cpp sqlitepp/SqliteResultSet.cpp sqlitepp/SqliteDatabase.cpp \
+ sqlitepp/SqliteDriver.cpp
+OBJECTS += $(SQL)/alter.c $(SQL)/analyze.c $(SQL)/attach.c $(SQL)/auth.c $(SQL)/btree.c \
+ $(SQL)/build.c $(SQL)/callback.c $(SQL)/complete.c $(SQL)/date.c $(SQL)/delete.c \
+ $(SQL)/expr.c $(SQL)/func.c $(SQL)/hash.c $(SQL)/insert.c $(SQL)/legacy.c \
+ $(SQL)/loadext.c $(SQL)/main.c $(SQL)/opcodes.c $(SQL)/os.c $(SQL)/os_unix.c \
+ $(SQL)/pager.c $(SQL)/parse.c $(SQL)/pragma.c $(SQL)/prepare.c $(SQL)/printf.c \
+ $(SQL)/random.c $(SQL)/select.c $(SQL)/table.c $(SQL)/tokenize.c $(SQL)/trigger.c \
+ $(SQL)/update.c $(SQL)/utf.c $(SQL)/util.c $(SQL)/vacuum.c $(SQL)/vdbe.c $(SQL)/vdbeapi.c \
+ $(SQL)/vdbeaux.c $(SQL)/vdbefifo.c $(SQL)/vdbemem.c $(SQL)/vtab.c $(SQL)/where.c
-CFLAGS = -Wall -Werror -m32
-CPPFLAGS = -Wall -Wno-non-virtual-dtor -Werror -m32
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
-LINK = -lgcc -static-libgcc -lpthread
+C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
-INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
- -I$(MM_ROOT) -I$(HLSDK)/common -I$(SQL) -I./sqlitepp -I./sdk -I./thread
+LINK =
+
+INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
+ -I$(MM_ROOT) -I$(SQL) -Isqlitepp -Ithread -Isdk
+
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
+
+OS := $(shell uname -s)
+
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ LIB_SUFFIX = _amxx
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
+else
+ LIB_EXT = so
+ LIB_SUFFIX = _amxx_i386
+ CFLAGS += -DLINUX
+ LINK += -shared
+endif
+
+LINK += -m32 -lm -ldl -lpthread
+
+CFLAGS += -DSM_DEFAULT_THREADER -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H \
+ -Dstricmp=strcasecmp -fno-strict-aliasing -m32 -Wall -Werror
+CPPFLAGS += -fno-exceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS += $(DEBUG_FLAGS)
- CPPFLAGS += $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
BIN_DIR = Release
- CFLAGS += $(OPT_FLAGS)
- CPPFLAGS += $(OPT_FLAGS)
+ CFLAGS += $(C_OPT_FLAGS)
+ LINK += -s
endif
-GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-ifeq "$(GCC_VERSION)" "4"
- CFLAGS += -fvisibility=hidden
- CPPFLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
+else
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
endif
-CPPFLAGS += -DNDEBUG -Wno-deprecated -fno-exceptions -DHAVE_STDINT_H -fno-rtti
-CPPFLAGS += -DSM_DEFAULT_THREADER -Dstricmp=strcasecmp
-CFLAGS += -DNDEBUG -DHAVE_STDINT_H -DSM_DEFAULT_THREADER -Dstricmp=strcasecmp
-
-ifeq "$(AMD64)" "true"
- BINARY = $(NAME)_$(BIN_SUFFIX_64)
- CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64
- CPPFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64
-else
- BINARY = $(NAME)_$(BIN_SUFFIX_32)
- CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
- CPPFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
- OPT_FLAGS += -march=i586
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
endif
-OBJ_LINUX_CPP := $(CPP_OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+OBJ_BIN := $(OBJ_BIN:%.c=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CPPFLAGS) -o $@ -c $<
-
-OBJ_LINUX_C := $(C_OBJECTS:%.c=$(BIN_DIR)/%.o)
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
$(BIN_DIR)/%.o: %.c
- $(CC) $(INCLUDE) $(CFLAGS) -c -o $@ $<
+ $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
all:
+ mkdir -p $(BIN_DIR)
+ mkdir -p $(BIN_DIR)/sdk
mkdir -p $(BIN_DIR)/thread
mkdir -p $(BIN_DIR)/sqlitepp
- mkdir -p $(BIN_DIR)/sdk
- mkdir -p $(BIN_DIR)
mkdir -p $(BIN_DIR)/$(SQL)
- $(MAKE) sqlite
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-amd64:
- $(MAKE) all AMD64=true
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
-sqlite: $(OBJ_LINUX_C) $(OBJ_LINUX_CPP)
- $(CPP) $(INCLUDE) $(CPPFLAGS) $(OBJ_LINUX_C) $(OBJ_LINUX_CPP) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
-
-debug:
- $(MAKE) all DEBUG=true
+debug:
+ $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
default: all
clean:
- rm -rf Release/$(SQL)/*.o
- rm -rf Release/sdk/*.o
- rm -rf Release/sqlitepp/*.o
- rm -rf Release/*.o
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Release/$(NAME)_$(BIN_SUFFIX_64)
- rm -rf Debug/$(SQL)/*.o
- rm -rf Debug/sdk/*.o
- rm -rf Debug/sqlitepp/*.o
- rm -rf Debug/*.o
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32)
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64)
+ rm -rf $(BIN_DIR)/*.o
+ rm -rf $(BIN_DIR)/sdk/*.o
+ rm -rf $(BIN_DIR)/thread/*.o
+ rm -rf $(BIN_DIR)/sqlitepp/*.o
+ rm -rf $(BIN_DIR)/$(SQL)/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
+
diff --git a/dlls/sqlite/module.cpp b/dlls/sqlite/module.cpp
--- a/dlls/sqlite/module.cpp
+++ b/dlls/sqlite/module.cpp
@@ -55,17 +55,17 @@ void OnAmxxAttach()
MF_AddNatives(g_OldCompatNatives);
MF_OverrideNatives(g_OldCompatNatives, MODULE_NAME);
char path[255];
MF_BuildPathnameR(path, sizeof(path)-1, "%s/sqlite3", MF_GetLocalInfo("amxx_datadir", "addons/amxmodx/data"));
if (!DirExists(path))
{
mkdir(path
-#if defined __linux__
+#if defined(__linux__) || defined(__APPLE__)
, 0775
#endif
);
}
}
void OnAmxxDetach()
{
diff --git a/dlls/sqlite/sdk/amxxmodule.cpp b/dlls/sqlite/sdk/amxxmodule.cpp
--- a/dlls/sqlite/sdk/amxxmodule.cpp
+++ b/dlls/sqlite/sdk/amxxmodule.cpp
@@ -2235,17 +2235,17 @@ static META_FUNCTIONS g_MetaFunctions_Ta
GetEntityAPI2,
GetEntityAPI2_Post,
GetNewDLLFunctions,
GetNewDLLFunctions_Post,
GetEngineFunctions,
GetEngineFunctions_Post
};
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
if ((int) CVAR_GET_FLOAT("developer") != 0)
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
Plugin_info.logtag, ifvers, Plugin_info.ifvers);
// Check for valid pMetaUtilFuncs before we continue.
if(!pMetaUtilFuncs) {
UTIL_LogPrintf("[%s] ERROR: Meta_Query called with null pMetaUtilFuncs\n", Plugin_info.logtag);
@@ -2329,17 +2329,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
#ifdef FN_META_DETACH
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
@@ -3045,17 +3045,17 @@ char* UTIL_VarArgs( char *format, ... )
return string;
}
//=========================================================
// UTIL_LogPrintf - Prints a logged message to console.
// Preceded by LOG: ( timestamp ) < message >
//=========================================================
-void UTIL_LogPrintf( char *fmt, ... )
+void UTIL_LogPrintf( const char *fmt, ... )
{
va_list argptr;
static char string[1024];
va_start ( argptr, fmt );
vsnprintf ( string, sizeof(string), fmt, argptr );
va_end ( argptr );
diff --git a/dlls/sqlite/sdk/amxxmodule.h b/dlls/sqlite/sdk/amxxmodule.h
--- a/dlls/sqlite/sdk/amxxmodule.h
+++ b/dlls/sqlite/sdk/amxxmodule.h
@@ -15,21 +15,26 @@
#ifdef USE_METAMOD
#include <extdll.h>
#include <meta_api.h>
#include "osdep.h"
#endif // #ifdef USE_METAMOD
// DLL Export
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
+#endif
+
+#if defined(__linux__) && !defined(LINUX)
#define LINUX
+#elif defined(__APPLE__) && !defined(OSX)
+#define OSX
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
// ***** AMXX stuff *****
// module interface version was 1
@@ -61,17 +66,17 @@ struct amxx_module_info_s
// *** Small stuff ***
// The next section is copied from the amx.h file
// Copyright (c) ITB CompuPhase, 1997-2005
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -303,17 +308,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -390,28 +395,28 @@ enum {
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
AMX_ERR_PARAMS, /* parameter error */
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
};
#if !defined AMX_NO_ALIGN
- #if defined __linux__
+ #if defined(__linux__) || defined(__APPLE__)
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions *****
#ifdef USE_METAMOD
-void UTIL_LogPrintf( char *fmt, ... );
+void UTIL_LogPrintf( const char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY
void FN_META_QUERY(void);
#endif // FN_META_QUERY
@@ -828,21 +833,21 @@ int FN_InconsistentFile_Post(const edict
#ifdef FN_AllowLagCompensation_Post
int FN_AllowLagCompensation_Post(void);
#endif // FN_AllowLagCompensation_Post
#ifdef FN_PrecacheModel
-int FN_PrecacheModel(char *s);
+int FN_PrecacheModel(const char *s);
#endif // FN_PrecacheModel
#ifdef FN_PrecacheSound
-int FN_PrecacheSound(char *s);
+int FN_PrecacheSound(const char *s);
#endif // FN_PrecacheSound
#ifdef FN_SetModel
void FN_SetModel(edict_t *e, const char *m);
#endif // FN_SetModel
#ifdef FN_ModelIndex
int FN_ModelIndex(const char *m);
@@ -852,17 +857,17 @@ int FN_ModelIndex(const char *m);
int FN_ModelFrames(int modelIndex);
#endif // FN_ModelFrames
#ifdef FN_SetSize
void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize
#ifdef FN_ChangeLevel
-void FN_ChangeLevel(char *s1, char *s2);
+void FN_ChangeLevel(const char *s1, const char *s2);
#endif // FN_ChangeLevel
#ifdef FN_GetSpawnParms
void FN_GetSpawnParms(edict_t *ent);
#endif // FN_GetSpawnParms
#ifdef FN_SaveSpawnParms
void FN_SaveSpawnParms(edict_t *ent);
@@ -1256,37 +1261,37 @@ void FN_RunPlayerMove(edict_t *fakeclien
int FN_NumberOfEntities(void);
#endif // FN_NumberOfEntities
#ifdef FN_GetInfoKeyBuffer
char *FN_GetInfoKeyBuffer(edict_t *e);
#endif // FN_GetInfoKeyBuffer
#ifdef FN_InfoKeyValue
-char *FN_InfoKeyValue(char *infobuffer, char *key);
+char *FN_InfoKeyValue(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue
#ifdef FN_SetKeyValue
-void FN_SetKeyValue(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue
#ifdef FN_SetClientKeyValue
-void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue
#ifdef FN_IsMapValid
-int FN_IsMapValid(char *filename);
+int FN_IsMapValid(const char *filename);
#endif // FN_IsMapValid
#ifdef FN_StaticDecal
void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal
#ifdef FN_PrecacheGeneric
-int FN_PrecacheGeneric(char *s);
+int FN_PrecacheGeneric(const char *s);
#endif // FN_PrecacheGeneric
#ifdef FN_GetPlayerUserId
int FN_GetPlayerUserId(edict_t *e );
#endif // FN_GetPlayerUserId
#ifdef FN_BuildSoundMsg
void FN_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -1409,21 +1414,21 @@ const char *FN_GetPlayerAuthId(edict_t *
#endif // FN_GetPlayerAuthId
#ifdef FN_PrecacheModel_Post
-int FN_PrecacheModel_Post(char *s);
+int FN_PrecacheModel_Post(const char *s);
#endif // FN_PrecacheModel_Post
#ifdef FN_PrecacheSound_Post
-int FN_PrecacheSound_Post(char *s);
+int FN_PrecacheSound_Post(const char *s);
#endif // FN_PrecacheSound_Post
#ifdef FN_SetModel_Post
void FN_SetModel_Post(edict_t *e, const char *m);
#endif // FN_SetModel_Post
#ifdef FN_ModelIndex_Post
int FN_ModelIndex_Post(const char *m);
@@ -1433,17 +1438,17 @@ int FN_ModelIndex_Post(const char *m);
int FN_ModelFrames_Post(int modelIndex);
#endif // FN_ModelFrames_Post
#ifdef FN_SetSize_Post
void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize_Post
#ifdef FN_ChangeLevel_Post
-void FN_ChangeLevel_Post(char *s1, char *s2);
+void FN_ChangeLevel_Post(const char *s1, const char *s2);
#endif // FN_ChangeLevel_Post
#ifdef FN_GetSpawnParms_Post
void FN_GetSpawnParms_Post(edict_t *ent);
#endif // FN_GetSpawnParms_Post
#ifdef FN_SaveSpawnParms_Post
void FN_SaveSpawnParms_Post(edict_t *ent);
@@ -1837,37 +1842,37 @@ void FN_RunPlayerMove_Post(edict_t *fake
int FN_NumberOfEntities_Post(void);
#endif // FN_NumberOfEntities_Post
#ifdef FN_GetInfoKeyBuffer_Post
char *FN_GetInfoKeyBuffer_Post(edict_t *e);
#endif // FN_GetInfoKeyBuffer_Post
#ifdef FN_InfoKeyValue_Post
-char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
+char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue_Post
#ifdef FN_SetKeyValue_Post
-void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue_Post
#ifdef FN_SetClientKeyValue_Post
-void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue_Post
#ifdef FN_IsMapValid_Post
-int FN_IsMapValid_Post(char *filename);
+int FN_IsMapValid_Post(const char *filename);
#endif // FN_IsMapValid_Post
#ifdef FN_StaticDecal_Post
void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal_Post
#ifdef FN_PrecacheGeneric_Post
-int FN_PrecacheGeneric_Post(char *s);
+int FN_PrecacheGeneric_Post(const char *s);
#endif // FN_PrecacheGeneric_Post
#ifdef FN_GetPlayerUserId_Post
int FN_GetPlayerUserId_Post(edict_t *e );
#endif // FN_GetPlayerUserId_Post
#ifdef FN_BuildSoundMsg_Post
void FN_BuildSoundMsg_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -2111,17 +2116,17 @@ enum LibType
typedef void (*AUTHORIZEFUNC)(int player, const char *authstring);
typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
-typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
+typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
typedef const char * (*PFN_GET_MODNAME) (void);
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/);
typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */);
typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/);
typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr);
@@ -2170,18 +2175,18 @@ typedef void * (*PFN_ALLOCATOR) (co
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ );
typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const void* /*addr*/ );
#endif
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
-typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
-typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
diff --git a/dlls/sqlite/sdk/sh_list.h b/dlls/sqlite/sdk/sh_list.h
--- a/dlls/sqlite/sdk/sh_list.h
+++ b/dlls/sqlite/sdk/sh_list.h
@@ -14,17 +14,17 @@
// MSVC8 fix for offsetof macro redefition warnings
#ifdef _MSC_VER
#if _MSC_VER >= 1400
#undef offsetof
#endif
#endif
#include <new>
-#include <malloc.h>
+#include <stdlib.h>
namespace SourceHook
{
//This class is from CSDM for AMX Mod X
/*
A circular, doubly-linked list with one sentinel node
diff --git a/dlls/sqlite/sdk/sh_string.h b/dlls/sqlite/sdk/sh_string.h
--- a/dlls/sqlite/sdk/sh_string.h
+++ b/dlls/sqlite/sdk/sh_string.h
@@ -191,17 +191,17 @@ public:
if (len < 1)
{
return;
}
if (is_space(v[len-1]))
{
- for (i=len-1; i>=0; i--)
+ for (i=len-1; i<len; i--)
{
if (!is_space(v[i])
|| (is_space(v[i]) && i==0))
{
erase(i+1, j);
break;
}
j++;
diff --git a/dlls/sqlite/sqlite-source/expr.c b/dlls/sqlite/sqlite-source/expr.c
--- a/dlls/sqlite/sqlite-source/expr.c
+++ b/dlls/sqlite/sqlite-source/expr.c
@@ -232,22 +232,22 @@ Expr *sqlite3Expr(int op, Expr *pLeft, E
pNew->pRight = pRight;
pNew->iAgg = -1;
if( pToken ){
assert( pToken->dyn==0 );
pNew->span = pNew->token = *pToken;
}else if( pLeft ){
if( pRight ){
sqlite3ExprSpan(pNew, &pLeft->span, &pRight->span);
- if( pRight->flags && EP_ExpCollate ){
+ if( pRight->flags & EP_ExpCollate ){
pNew->flags |= EP_ExpCollate;
pNew->pColl = pRight->pColl;
}
}
- if( pLeft->flags && EP_ExpCollate ){
+ if( pLeft->flags & EP_ExpCollate ){
pNew->flags |= EP_ExpCollate;
pNew->pColl = pLeft->pColl;
}
}
return pNew;
}
/*
diff --git a/dlls/sqlite/sqlitepp/SqliteDriver.cpp b/dlls/sqlite/sqlitepp/SqliteDriver.cpp
--- a/dlls/sqlite/sqlitepp/SqliteDriver.cpp
+++ b/dlls/sqlite/sqlitepp/SqliteDriver.cpp
@@ -22,17 +22,17 @@ bool SqliteDriver::IsCompatDriver(const
const char *SqliteDriver::NameString()
{
return "sqlite";
}
int busy_handler(void *unused1, int unused2)
{
-#if defined __linux__
+#if defined __linux__ || defined __APPLE__
usleep(100000);
#else
Sleep(100);
#endif
return 1;
}
IDatabase *SqliteDriver::Connect2(DatabaseInfo *info, int *errcode, char *error, size_t maxlength)
diff --git a/dlls/sqlite/thread/ThreadSupport.h b/dlls/sqlite/thread/ThreadSupport.h
--- a/dlls/sqlite/thread/ThreadSupport.h
+++ b/dlls/sqlite/thread/ThreadSupport.h
@@ -1,10 +1,10 @@
#ifndef _INCLUDE_SOURCEMOD_THREAD_SUPPORT_H
#define _INCLUDE_SOURCEMOD_THREAD_SUPPORT_H
-#if defined __linux__
+#if defined __linux__ || defined __APPLE__
#include "PosixThreads.h"
#elif defined WIN32
#include "WinThreads.h"
#endif
#endif //_INCLUDE_SOURCEMOD_THREAD_SUPPORT_H
diff --git a/dlls/tfcx/CMisc.h b/dlls/tfcx/CMisc.h
--- a/dlls/tfcx/CMisc.h
+++ b/dlls/tfcx/CMisc.h
@@ -1,17 +1,17 @@
#ifndef CMISC_H
#define CMISC_H
#include "amxxmodule.h"
#include "CRank.h"
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define LINUXOFFSET 0
#define CLIP_LINUXOFFSET 0
#else
#define LINUXOFFSET 3
#define CLIP_LINUXOFFSET 4
#endif
#define TFCMAX_CUSTOMWPNS 5
@@ -100,24 +100,24 @@ enum {
TFC_PC_HWGUY,
TFC_PC_PYRO,
TFC_PC_SPY,
TFC_PC_ENGENEER,
TFC_PC_CIVILIAN,
};
struct weaponsVault {
- char* name;
- char* logName;
+ char name[32];
+ char logName[32];
short int ammoSlot;
bool melee;
};
struct traceVault {
- char * szName;
+ const char* szName;
char szTag[6];
int iId;
int iAction;
float fDel;
int start;
int stop;
};
diff --git a/dlls/tfcx/Makefile b/dlls/tfcx/Makefile
--- a/dlls/tfcx/Makefile
+++ b/dlls/tfcx/Makefile
@@ -1,67 +1,124 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
-HLSDK = ../../../hlsdk
+###########################################
+### EDIT THESE PATHS FOR YOUR OWN SETUP ###
+###########################################
+
+HLSDK = ../../../hlsdk/multiplayer
MM_ROOT = ../../../metamod/metamod
+#####################################
### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
-OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -fomit-frame-pointer
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-NAME = tfcx
+PROJECT = tfcx
-BIN_SUFFIX = amxx_i386.so
+OBJECTS = sdk/amxxmodule.cpp CRank.cpp CMisc.cpp NBase.cpp NRank.cpp usermsg.cpp Utils.cpp \
+ moduleconfig.cpp
-OBJECTS = sdk/amxxmodule.cpp CRank.cpp CMisc.cpp NBase.cpp NRank.cpp usermsg.cpp Utils.cpp moduleconfig.cpp
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
-LINK =
+C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
-INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
- -I$(MM_ROOT) -I$(HLSDK)/common -Isdk
+LINK =
-GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
+ -I$(MM_ROOT) -Isdk
-ifeq "$(GCC_VERSION)" "4"
- OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
+
+OS := $(shell uname -s)
+
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ LIB_SUFFIX = _amxx
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
+else
+ LIB_EXT = so
+ LIB_SUFFIX = _amxx_i386
+ CFLAGS += -DLINUX
+ LINK += -shared
endif
+LINK += -m32 -lm -ldl
+
+CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror
+CPPFLAGS += -fno-exceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
+
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS = $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
BIN_DIR = Release
- CFLAGS = $(OPT_FLAGS)
+ CFLAGS += $(C_OPT_FLAGS)
+ LINK += -s
endif
-CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -m32
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-BINARY = $(NAME)_$(BIN_SUFFIX)
-CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
-OPT_FLAGS += -march=i586
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
+else
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
+endif
-OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
all:
mkdir -p $(BIN_DIR)
mkdir -p $(BIN_DIR)/sdk
- $(MAKE) tfcx
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-tfcx: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
-debug:
- $(MAKE) all DEBUG=true
+debug:
+ $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
default: all
clean:
- rm -rf Release/sdk/*.o
- rm -rf Release/*.o
- rm -rf Release/$(NAME)_$(BIN_SUFFIX)
- rm -rf Debug/sdk/*.o
- rm -rf Debug/*.o
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX)
+ rm -rf $(BIN_DIR)/*.o
+ rm -rf $(BIN_DIR)/sdk/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
+
diff --git a/dlls/tfcx/sdk/amxxmodule.cpp b/dlls/tfcx/sdk/amxxmodule.cpp
--- a/dlls/tfcx/sdk/amxxmodule.cpp
+++ b/dlls/tfcx/sdk/amxxmodule.cpp
@@ -2235,17 +2235,17 @@ static META_FUNCTIONS g_MetaFunctions_Ta
GetEntityAPI2,
GetEntityAPI2_Post,
GetNewDLLFunctions,
GetNewDLLFunctions_Post,
GetEngineFunctions,
GetEngineFunctions_Post
};
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
if ((int) CVAR_GET_FLOAT("developer") != 0)
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
Plugin_info.logtag, ifvers, Plugin_info.ifvers);
// Check for valid pMetaUtilFuncs before we continue.
if(!pMetaUtilFuncs) {
UTIL_LogPrintf("[%s] ERROR: Meta_Query called with null pMetaUtilFuncs\n", Plugin_info.logtag);
@@ -2329,17 +2329,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
#ifdef FN_META_DETACH
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
@@ -3045,17 +3045,17 @@ char* UTIL_VarArgs( char *format, ... )
return string;
}
//=========================================================
// UTIL_LogPrintf - Prints a logged message to console.
// Preceded by LOG: ( timestamp ) < message >
//=========================================================
-void UTIL_LogPrintf( char *fmt, ... )
+void UTIL_LogPrintf( const char *fmt, ... )
{
va_list argptr;
static char string[1024];
va_start ( argptr, fmt );
vsnprintf ( string, sizeof(string), fmt, argptr );
va_end ( argptr );
diff --git a/dlls/tfcx/sdk/amxxmodule.h b/dlls/tfcx/sdk/amxxmodule.h
--- a/dlls/tfcx/sdk/amxxmodule.h
+++ b/dlls/tfcx/sdk/amxxmodule.h
@@ -15,21 +15,26 @@
#ifdef USE_METAMOD
#include <extdll.h>
#include <meta_api.h>
#include "osdep.h"
#endif // #ifdef USE_METAMOD
// DLL Export
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
+#endif
+
+#if defined(__linux__) && !defined(LINUX)
#define LINUX
+#elif defined(__APPLE__) && !defined(OSX)
+#define OSX
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
// ***** AMXX stuff *****
// module interface version was 1
@@ -61,17 +66,17 @@ struct amxx_module_info_s
// *** Small stuff ***
// The next section is copied from the amx.h file
// Copyright (c) ITB CompuPhase, 1997-2005
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -303,17 +308,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -390,28 +395,28 @@ enum {
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
AMX_ERR_PARAMS, /* parameter error */
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
};
#if !defined AMX_NO_ALIGN
- #if defined __linux__
+ #if defined(__linux__) || defined(__APPLE__)
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions *****
#ifdef USE_METAMOD
-void UTIL_LogPrintf( char *fmt, ... );
+void UTIL_LogPrintf( const char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY
void FN_META_QUERY(void);
#endif // FN_META_QUERY
@@ -828,21 +833,21 @@ int FN_InconsistentFile_Post(const edict
#ifdef FN_AllowLagCompensation_Post
int FN_AllowLagCompensation_Post(void);
#endif // FN_AllowLagCompensation_Post
#ifdef FN_PrecacheModel
-int FN_PrecacheModel(char *s);
+int FN_PrecacheModel(const char *s);
#endif // FN_PrecacheModel
#ifdef FN_PrecacheSound
-int FN_PrecacheSound(char *s);
+int FN_PrecacheSound(const char *s);
#endif // FN_PrecacheSound
#ifdef FN_SetModel
void FN_SetModel(edict_t *e, const char *m);
#endif // FN_SetModel
#ifdef FN_ModelIndex
int FN_ModelIndex(const char *m);
@@ -852,17 +857,17 @@ int FN_ModelIndex(const char *m);
int FN_ModelFrames(int modelIndex);
#endif // FN_ModelFrames
#ifdef FN_SetSize
void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize
#ifdef FN_ChangeLevel
-void FN_ChangeLevel(char *s1, char *s2);
+void FN_ChangeLevel(const char *s1, const char *s2);
#endif // FN_ChangeLevel
#ifdef FN_GetSpawnParms
void FN_GetSpawnParms(edict_t *ent);
#endif // FN_GetSpawnParms
#ifdef FN_SaveSpawnParms
void FN_SaveSpawnParms(edict_t *ent);
@@ -1256,37 +1261,37 @@ void FN_RunPlayerMove(edict_t *fakeclien
int FN_NumberOfEntities(void);
#endif // FN_NumberOfEntities
#ifdef FN_GetInfoKeyBuffer
char *FN_GetInfoKeyBuffer(edict_t *e);
#endif // FN_GetInfoKeyBuffer
#ifdef FN_InfoKeyValue
-char *FN_InfoKeyValue(char *infobuffer, char *key);
+char *FN_InfoKeyValue(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue
#ifdef FN_SetKeyValue
-void FN_SetKeyValue(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue
#ifdef FN_SetClientKeyValue
-void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue
#ifdef FN_IsMapValid
-int FN_IsMapValid(char *filename);
+int FN_IsMapValid(const char *filename);
#endif // FN_IsMapValid
#ifdef FN_StaticDecal
void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal
#ifdef FN_PrecacheGeneric
-int FN_PrecacheGeneric(char *s);
+int FN_PrecacheGeneric(const char *s);
#endif // FN_PrecacheGeneric
#ifdef FN_GetPlayerUserId
int FN_GetPlayerUserId(edict_t *e );
#endif // FN_GetPlayerUserId
#ifdef FN_BuildSoundMsg
void FN_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -1409,21 +1414,21 @@ const char *FN_GetPlayerAuthId(edict_t *
#endif // FN_GetPlayerAuthId
#ifdef FN_PrecacheModel_Post
-int FN_PrecacheModel_Post(char *s);
+int FN_PrecacheModel_Post(const char *s);
#endif // FN_PrecacheModel_Post
#ifdef FN_PrecacheSound_Post
-int FN_PrecacheSound_Post(char *s);
+int FN_PrecacheSound_Post(const char *s);
#endif // FN_PrecacheSound_Post
#ifdef FN_SetModel_Post
void FN_SetModel_Post(edict_t *e, const char *m);
#endif // FN_SetModel_Post
#ifdef FN_ModelIndex_Post
int FN_ModelIndex_Post(const char *m);
@@ -1433,17 +1438,17 @@ int FN_ModelIndex_Post(const char *m);
int FN_ModelFrames_Post(int modelIndex);
#endif // FN_ModelFrames_Post
#ifdef FN_SetSize_Post
void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize_Post
#ifdef FN_ChangeLevel_Post
-void FN_ChangeLevel_Post(char *s1, char *s2);
+void FN_ChangeLevel_Post(const char *s1, const char *s2);
#endif // FN_ChangeLevel_Post
#ifdef FN_GetSpawnParms_Post
void FN_GetSpawnParms_Post(edict_t *ent);
#endif // FN_GetSpawnParms_Post
#ifdef FN_SaveSpawnParms_Post
void FN_SaveSpawnParms_Post(edict_t *ent);
@@ -1837,37 +1842,37 @@ void FN_RunPlayerMove_Post(edict_t *fake
int FN_NumberOfEntities_Post(void);
#endif // FN_NumberOfEntities_Post
#ifdef FN_GetInfoKeyBuffer_Post
char *FN_GetInfoKeyBuffer_Post(edict_t *e);
#endif // FN_GetInfoKeyBuffer_Post
#ifdef FN_InfoKeyValue_Post
-char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
+char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue_Post
#ifdef FN_SetKeyValue_Post
-void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue_Post
#ifdef FN_SetClientKeyValue_Post
-void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue_Post
#ifdef FN_IsMapValid_Post
-int FN_IsMapValid_Post(char *filename);
+int FN_IsMapValid_Post(const char *filename);
#endif // FN_IsMapValid_Post
#ifdef FN_StaticDecal_Post
void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal_Post
#ifdef FN_PrecacheGeneric_Post
-int FN_PrecacheGeneric_Post(char *s);
+int FN_PrecacheGeneric_Post(const char *s);
#endif // FN_PrecacheGeneric_Post
#ifdef FN_GetPlayerUserId_Post
int FN_GetPlayerUserId_Post(edict_t *e );
#endif // FN_GetPlayerUserId_Post
#ifdef FN_BuildSoundMsg_Post
void FN_BuildSoundMsg_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -2111,17 +2116,17 @@ enum LibType
typedef void (*AUTHORIZEFUNC)(int player, const char *authstring);
typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
-typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
+typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
typedef const char * (*PFN_GET_MODNAME) (void);
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/);
typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */);
typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/);
typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr);
@@ -2170,18 +2175,18 @@ typedef void * (*PFN_ALLOCATOR) (co
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ );
typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const void* /*addr*/ );
#endif
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
-typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
-typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
diff --git a/dlls/tfcx/tfcx.h b/dlls/tfcx/tfcx.h
--- a/dlls/tfcx/tfcx.h
+++ b/dlls/tfcx/tfcx.h
@@ -44,17 +44,17 @@
#ifndef GETPLAYERAUTHID
#define GETPLAYERAUTHID (*g_engfuncs.pfnGetPlayerAuthId)
#endif
extern AMX_NATIVE_INFO stats_Natives[];
extern AMX_NATIVE_INFO base_Natives[];
-extern weaponsVault weaponData[MAX_WEAPONS];
+extern weaponsVault weaponData[TFCMAX_WEAPONS];
extern traceVault traceData[MAX_TRACE];
typedef void (*funEventCall)(void*);
extern funEventCall modMsgsEnd[MAX_REG_MSGS];
extern funEventCall modMsgs[MAX_REG_MSGS];
extern void (*function)(void*);
extern void (*endfunction)(void*);
diff --git a/dlls/ts/tsfun/Makefile b/dlls/ts/tsfun/Makefile
--- a/dlls/ts/tsfun/Makefile
+++ b/dlls/ts/tsfun/Makefile
@@ -1,67 +1,123 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
-HLSDK = ../../../../hlsdk
+###########################################
+### EDIT THESE PATHS FOR YOUR OWN SETUP ###
+###########################################
+
+HLSDK = ../../../../hlsdk/multiplayer
MM_ROOT = ../../../../metamod/metamod
+#####################################
### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
-OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing -fomit-frame-pointer
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-NAME = tsfun
-
-BIN_SUFFIX = amxx_i386.so
+PROJECT = tsfun
OBJECTS = sdk/amxxmodule.cpp
-LINK =
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
-INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
- -I$(MM_ROOT) -I$(HLSDK)/common -Isdk
+C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
-GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+LINK =
-ifeq "$(GCC_VERSION)" "4"
- OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
+INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
+ -I$(MM_ROOT) -Isdk
+
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
+
+OS := $(shell uname -s)
+
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ LIB_SUFFIX = _amxx
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
+else
+ LIB_EXT = so
+ LIB_SUFFIX = _amxx_i386
+ CFLAGS += -DLINUX
+ LINK += -shared
endif
+LINK += -m32 -lm -ldl
+
+CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror
+CPPFLAGS += -fno-exceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
+
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS = $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
BIN_DIR = Release
- CFLAGS = $(OPT_FLAGS)
+ CFLAGS += $(C_OPT_FLAGS)
+ LINK += -s
endif
-CFLAGS += -DNDEBUG -Wall -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -m32
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-BINARY = $(NAME)_$(BIN_SUFFIX)
-CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
-OPT_FLAGS += -march=i586
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
+else
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
+endif
-OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
all:
mkdir -p $(BIN_DIR)
mkdir -p $(BIN_DIR)/sdk
- $(MAKE) tsfun
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-tsfun: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
-debug:
- $(MAKE) all DEBUG=true
+debug:
+ $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
default: all
clean:
- rm -rf Release/sdk/*.o
- rm -rf Release/*.o
- rm -rf Release/$(NAME)_$(BIN_SUFFIX)
- rm -rf Debug/sdk/*.o
- rm -rf Debug/*.o
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX)
+ rm -rf $(BIN_DIR)/*.o
+ rm -rf $(BIN_DIR)/sdk/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
+
diff --git a/dlls/ts/tsfun/sdk/amxxmodule.cpp b/dlls/ts/tsfun/sdk/amxxmodule.cpp
--- a/dlls/ts/tsfun/sdk/amxxmodule.cpp
+++ b/dlls/ts/tsfun/sdk/amxxmodule.cpp
@@ -2235,17 +2235,17 @@ static META_FUNCTIONS g_MetaFunctions_Ta
GetEntityAPI2,
GetEntityAPI2_Post,
GetNewDLLFunctions,
GetNewDLLFunctions_Post,
GetEngineFunctions,
GetEngineFunctions_Post
};
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
if ((int) CVAR_GET_FLOAT("developer") != 0)
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
Plugin_info.logtag, ifvers, Plugin_info.ifvers);
// Check for valid pMetaUtilFuncs before we continue.
if(!pMetaUtilFuncs) {
UTIL_LogPrintf("[%s] ERROR: Meta_Query called with null pMetaUtilFuncs\n", Plugin_info.logtag);
@@ -2329,17 +2329,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
#ifdef FN_META_DETACH
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
@@ -2543,16 +2543,24 @@ C_DLLEXPORT int AMXX_Query(int *interfac
return AMXX_OK;
}
// request function
#define REQFUNC(name, fptr, type) if ((fptr = (type)reqFnptrFunc(name)) == 0) return AMXX_FUNC_NOT_PRESENT
// request optional function
#define REQFUNC_OPT(name, fptr, type) fptr = (type)reqFnptrFunc(name)
+C_DLLEXPORT int AMXX_CheckGame(const char *game)
+{
+#ifdef FN_AMXX_CHECKGAME
+ return FN_AMXX_CHECKGAME(game);
+#else
+ return AMXX_GAME_OK;
+#endif
+}
C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
{
// Check pointer
if (!reqFnptrFunc)
return AMXX_PARAM;
g_fn_RequestFunction = reqFnptrFunc;
@@ -3037,17 +3045,17 @@ char* UTIL_VarArgs( char *format, ... )
return string;
}
//=========================================================
// UTIL_LogPrintf - Prints a logged message to console.
// Preceded by LOG: ( timestamp ) < message >
//=========================================================
-void UTIL_LogPrintf( char *fmt, ... )
+void UTIL_LogPrintf( const char *fmt, ... )
{
va_list argptr;
static char string[1024];
va_start ( argptr, fmt );
vsnprintf ( string, sizeof(string), fmt, argptr );
va_end ( argptr );
diff --git a/dlls/ts/tsfun/sdk/amxxmodule.h b/dlls/ts/tsfun/sdk/amxxmodule.h
--- a/dlls/ts/tsfun/sdk/amxxmodule.h
+++ b/dlls/ts/tsfun/sdk/amxxmodule.h
@@ -5,30 +5,36 @@
// prevent double include
#ifndef __AMXXMODULE_H__
#define __AMXXMODULE_H__
// config
#include "moduleconfig.h"
+#include <stddef.h> // size_t
// metamod include files
#ifdef USE_METAMOD
#include <extdll.h>
#include <meta_api.h>
#include "osdep.h"
#endif // #ifdef USE_METAMOD
// DLL Export
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
+#endif
+
+#if defined(__linux__) && !defined(LINUX)
#define LINUX
+#elif defined(__APPLE__) && !defined(OSX)
+#define OSX
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
// ***** AMXX stuff *****
// module interface version was 1
@@ -50,24 +56,27 @@ struct amxx_module_info_s
};
// return values from functions called by amxx
#define AMXX_OK 0 /* no error */
#define AMXX_IFVERS 1 /* interface version */
#define AMXX_PARAM 2 /* Invalid parameter */
#define AMXX_FUNC_NOT_PRESENT 3 /* Function not present */
+#define AMXX_GAME_OK 0 /* This module can load on the current game mod. */
+#define AMXX_GAME_BAD 1 /* This module can not load on the current game mod. */
+
// *** Small stuff ***
// The next section is copied from the amx.h file
// Copyright (c) ITB CompuPhase, 1997-2005
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -299,17 +308,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -386,28 +395,28 @@ enum {
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
AMX_ERR_PARAMS, /* parameter error */
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
};
#if !defined AMX_NO_ALIGN
- #if defined __linux__
+ #if defined(__linux__) || defined(__APPLE__)
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions *****
#ifdef USE_METAMOD
-void UTIL_LogPrintf( char *fmt, ... );
+void UTIL_LogPrintf( const char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY
void FN_META_QUERY(void);
#endif // FN_META_QUERY
@@ -824,21 +833,21 @@ int FN_InconsistentFile_Post(const edict
#ifdef FN_AllowLagCompensation_Post
int FN_AllowLagCompensation_Post(void);
#endif // FN_AllowLagCompensation_Post
#ifdef FN_PrecacheModel
-int FN_PrecacheModel(char *s);
+int FN_PrecacheModel(const char *s);
#endif // FN_PrecacheModel
#ifdef FN_PrecacheSound
-int FN_PrecacheSound(char *s);
+int FN_PrecacheSound(const char *s);
#endif // FN_PrecacheSound
#ifdef FN_SetModel
void FN_SetModel(edict_t *e, const char *m);
#endif // FN_SetModel
#ifdef FN_ModelIndex
int FN_ModelIndex(const char *m);
@@ -848,17 +857,17 @@ int FN_ModelIndex(const char *m);
int FN_ModelFrames(int modelIndex);
#endif // FN_ModelFrames
#ifdef FN_SetSize
void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize
#ifdef FN_ChangeLevel
-void FN_ChangeLevel(char *s1, char *s2);
+void FN_ChangeLevel(const char *s1, const char *s2);
#endif // FN_ChangeLevel
#ifdef FN_GetSpawnParms
void FN_GetSpawnParms(edict_t *ent);
#endif // FN_GetSpawnParms
#ifdef FN_SaveSpawnParms
void FN_SaveSpawnParms(edict_t *ent);
@@ -1252,37 +1261,37 @@ void FN_RunPlayerMove(edict_t *fakeclien
int FN_NumberOfEntities(void);
#endif // FN_NumberOfEntities
#ifdef FN_GetInfoKeyBuffer
char *FN_GetInfoKeyBuffer(edict_t *e);
#endif // FN_GetInfoKeyBuffer
#ifdef FN_InfoKeyValue
-char *FN_InfoKeyValue(char *infobuffer, char *key);
+char *FN_InfoKeyValue(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue
#ifdef FN_SetKeyValue
-void FN_SetKeyValue(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue
#ifdef FN_SetClientKeyValue
-void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue
#ifdef FN_IsMapValid
-int FN_IsMapValid(char *filename);
+int FN_IsMapValid(const char *filename);
#endif // FN_IsMapValid
#ifdef FN_StaticDecal
void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal
#ifdef FN_PrecacheGeneric
-int FN_PrecacheGeneric(char *s);
+int FN_PrecacheGeneric(const char *s);
#endif // FN_PrecacheGeneric
#ifdef FN_GetPlayerUserId
int FN_GetPlayerUserId(edict_t *e );
#endif // FN_GetPlayerUserId
#ifdef FN_BuildSoundMsg
void FN_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -1405,21 +1414,21 @@ const char *FN_GetPlayerAuthId(edict_t *
#endif // FN_GetPlayerAuthId
#ifdef FN_PrecacheModel_Post
-int FN_PrecacheModel_Post(char *s);
+int FN_PrecacheModel_Post(const char *s);
#endif // FN_PrecacheModel_Post
#ifdef FN_PrecacheSound_Post
-int FN_PrecacheSound_Post(char *s);
+int FN_PrecacheSound_Post(const char *s);
#endif // FN_PrecacheSound_Post
#ifdef FN_SetModel_Post
void FN_SetModel_Post(edict_t *e, const char *m);
#endif // FN_SetModel_Post
#ifdef FN_ModelIndex_Post
int FN_ModelIndex_Post(const char *m);
@@ -1429,17 +1438,17 @@ int FN_ModelIndex_Post(const char *m);
int FN_ModelFrames_Post(int modelIndex);
#endif // FN_ModelFrames_Post
#ifdef FN_SetSize_Post
void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize_Post
#ifdef FN_ChangeLevel_Post
-void FN_ChangeLevel_Post(char *s1, char *s2);
+void FN_ChangeLevel_Post(const char *s1, const char *s2);
#endif // FN_ChangeLevel_Post
#ifdef FN_GetSpawnParms_Post
void FN_GetSpawnParms_Post(edict_t *ent);
#endif // FN_GetSpawnParms_Post
#ifdef FN_SaveSpawnParms_Post
void FN_SaveSpawnParms_Post(edict_t *ent);
@@ -1833,37 +1842,37 @@ void FN_RunPlayerMove_Post(edict_t *fake
int FN_NumberOfEntities_Post(void);
#endif // FN_NumberOfEntities_Post
#ifdef FN_GetInfoKeyBuffer_Post
char *FN_GetInfoKeyBuffer_Post(edict_t *e);
#endif // FN_GetInfoKeyBuffer_Post
#ifdef FN_InfoKeyValue_Post
-char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
+char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue_Post
#ifdef FN_SetKeyValue_Post
-void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue_Post
#ifdef FN_SetClientKeyValue_Post
-void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue_Post
#ifdef FN_IsMapValid_Post
-int FN_IsMapValid_Post(char *filename);
+int FN_IsMapValid_Post(const char *filename);
#endif // FN_IsMapValid_Post
#ifdef FN_StaticDecal_Post
void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal_Post
#ifdef FN_PrecacheGeneric_Post
-int FN_PrecacheGeneric_Post(char *s);
+int FN_PrecacheGeneric_Post(const char *s);
#endif // FN_PrecacheGeneric_Post
#ifdef FN_GetPlayerUserId_Post
int FN_GetPlayerUserId_Post(edict_t *e );
#endif // FN_GetPlayerUserId_Post
#ifdef FN_BuildSoundMsg_Post
void FN_BuildSoundMsg_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -2018,16 +2027,20 @@ int FN_ShouldCollide_Post(edict_t *pentT
#endif // USE_METAMOD
#ifdef FN_AMXX_QUERY
void FN_AMXX_QUERY(void);
#endif // FN_AMXX_QUERY
+#ifdef FN_AMXX_CHECKGAME
+int FN_AMXX_CHECKGAME(const char *);
+#endif // FN_AMXX_CHECKGAME
+
#ifdef FN_AMXX_ATTACH
void FN_AMXX_ATTACH(void);
#endif // FN_AMXX_ATTACH
#ifdef FN_AMXX_DETACH
void FN_AMXX_DETACH(void);
#endif // FN_AMXX_DETACH
@@ -2103,17 +2116,17 @@ enum LibType
typedef void (*AUTHORIZEFUNC)(int player, const char *authstring);
typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
-typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
+typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
typedef const char * (*PFN_GET_MODNAME) (void);
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/);
typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */);
typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/);
typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr);
@@ -2162,18 +2175,18 @@ typedef void * (*PFN_ALLOCATOR) (co
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ );
typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const void* /*addr*/ );
#endif
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
-typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
-typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
diff --git a/dlls/ts/tsx/CMisc.h b/dlls/ts/tsx/CMisc.h
--- a/dlls/ts/tsx/CMisc.h
+++ b/dlls/ts/tsx/CMisc.h
@@ -34,30 +34,30 @@
#include "amxxmodule.h"
#include "CRank.h"
#define TSMAX_CUSTOMWPNS 5
#define TSMAX_WEAPONS 39 + TSMAX_CUSTOMWPNS
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define TSKNIFE_OFFSET 31 // owner offset in knife entity
#else
#define TSKNIFE_OFFSET 35
#endif
#define TSPWUP_SLOWMO 1
#define TSPWUP_INFAMMO 2
#define TSPWUP_KUNGFU 4
#define TSPWUP_SLOWPAUSE 8
#define TSPWUP_DFIRERATE 16
#define TSPWUP_SJUMP 256
-#if defined __linux__
+#if defined(__linux__) || defined(__APPLE__)
#define EXTRAOFFSET 5
#else
#define EXTRAOFFSET 0
#endif
#define TSX_SDUCK_OFFSET (27+EXTRAOFFSET)
#define TSX_SPEED1_OFFSET (85+EXTRAOFFSET)
#define TSX_PHYSICS_OFFSET (86+EXTRAOFFSET)
diff --git a/dlls/ts/tsx/Makefile b/dlls/ts/tsx/Makefile
--- a/dlls/ts/tsx/Makefile
+++ b/dlls/ts/tsx/Makefile
@@ -1,68 +1,124 @@
-#(C)2004-2005 AMX Mod X Development Team
+# (C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
-HLSDK = ../../../../hlsdk
+###########################################
+### EDIT THESE PATHS FOR YOUR OWN SETUP ###
+###########################################
+
+HLSDK = ../../../../hlsdk/multiplayer
MM_ROOT = ../../../../metamod/metamod
+#####################################
### EDIT BELOW FOR OTHER PROJECTS ###
+#####################################
-OPT_FLAGS = -O2 -funroll-loops -s -pipe -fno-strict-aliasing -fomit-frame-pointer
-DEBUG_FLAGS = -g -ggdb3
-CPP = gcc-4.1
-NAME = tsx
+PROJECT = tsx
-BIN_SUFFIX = amxx_i386.so
+OBJECTS = sdk/amxxmodule.cpp CMisc.cpp CRank.cpp NBase.cpp NRank.cpp Utils.cpp moduleconfig.cpp \
+ usermsg.cpp
-OBJECTS = sdk/amxxmodule.cpp CMisc.cpp CRank.cpp NBase.cpp \
- NRank.cpp Utils.cpp moduleconfig.cpp usermsg.cpp \
+##############################################
+### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
+##############################################
-LINK =
+C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe
+C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
+C_GCC4_FLAGS = -fvisibility=hidden
+CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
+CPP = gcc
+CPP_OSX = clang
-INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
- -I$(MM_ROOT) -I$(HLSDK)/common -Isdk
+LINK =
-GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
+ -I$(MM_ROOT) -Isdk
-ifeq "$(GCC_VERSION)" "4"
- OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
+################################################
+### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
+################################################
+
+OS := $(shell uname -s)
+
+ifeq "$(OS)" "Darwin"
+ CPP = $(CPP_OSX)
+ LIB_EXT = dylib
+ LIB_SUFFIX = _amxx
+ CFLAGS += -DOSX
+ LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5
+else
+ LIB_EXT = so
+ LIB_SUFFIX = _amxx_i386
+ CFLAGS += -DLINUX
+ LINK += -shared
endif
+LINK += -m32 -lm -ldl
+
+CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing -m32 -Wall -Werror
+CPPFLAGS += -fno-exceptions -fno-rtti
+
+BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
+
ifeq "$(DEBUG)" "true"
BIN_DIR = Debug
- CFLAGS = $(DEBUG_FLAGS)
+ CFLAGS += $(C_DEBUG_FLAGS)
else
BIN_DIR = Release
- CFLAGS = $(OPT_FLAGS)
+ CFLAGS += $(C_OPT_FLAGS)
+ LINK += -s
endif
-CFLAGS += -DNDEBUG -Wall -Wno-non-virtual-dtor -Werror -fno-exceptions -DHAVE_STDINT_H -static-libgcc -fno-rtti -m32
+IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
-BINARY = $(NAME)_$(BIN_SUFFIX)
-CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
-OPT_FLAGS += -march=i586
+ifeq "$(IS_CLANG)" "1"
+ CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
+ CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
+else
+ CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
+ CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
+endif
-OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+# Clang || GCC >= 4
+ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
+ CFLAGS += $(C_GCC4_FLAGS)
+ CPPFLAGS += $(CPP_GCC4_FLAGS)
+endif
+
+# Clang >= 3 || GCC >= 4.7
+ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
+ CFLAGS += -Wno-delete-non-virtual-dtor
+endif
+
+# OS is Linux and not using clang
+ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
+ LINK += -static-libgcc
+endif
+
+OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
+
+# This will break if we include other Makefiles, but is fine for now. It allows
+# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
+# or other changes without mucking up the original.
+MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
$(BIN_DIR)/%.o: %.cpp
- $(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
+ $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
all:
mkdir -p $(BIN_DIR)
mkdir -p $(BIN_DIR)/sdk
- $(MAKE) tsx
+ $(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
-tsx: $(OBJ_LINUX)
- $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
+$(PROJECT): $(OBJ_BIN)
+ $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
-debug:
- $(MAKE) all DEBUG=true
+debug:
+ $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
default: all
clean:
- rm -rf Release/sdk/*.o
- rm -rf Release/*.o
- rm -rf Release/$(NAME)_$(BIN_SUFFIX)
- rm -rf Debug/sdk/*.o
- rm -rf Debug/*.o
- rm -rf Debug/$(NAME)_$(BIN_SUFFIX)
+ rm -rf $(BIN_DIR)/*.o
+ rm -rf $(BIN_DIR)/sdk/*.o
+ rm -f $(BIN_DIR)/$(BINARY)
+
diff --git a/dlls/ts/tsx/sdk/amxxmodule.cpp b/dlls/ts/tsx/sdk/amxxmodule.cpp
--- a/dlls/ts/tsx/sdk/amxxmodule.cpp
+++ b/dlls/ts/tsx/sdk/amxxmodule.cpp
@@ -2235,17 +2235,17 @@ static META_FUNCTIONS g_MetaFunctions_Ta
GetEntityAPI2,
GetEntityAPI2_Post,
GetNewDLLFunctions,
GetNewDLLFunctions_Post,
GetEngineFunctions,
GetEngineFunctions_Post
};
-C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
+C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
{
if ((int) CVAR_GET_FLOAT("developer") != 0)
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
Plugin_info.logtag, ifvers, Plugin_info.ifvers);
// Check for valid pMetaUtilFuncs before we continue.
if(!pMetaUtilFuncs) {
UTIL_LogPrintf("[%s] ERROR: Meta_Query called with null pMetaUtilFuncs\n", Plugin_info.logtag);
@@ -2329,17 +2329,17 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIM
#ifdef FN_META_DETACH
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
@@ -3045,17 +3045,17 @@ char* UTIL_VarArgs( char *format, ... )
return string;
}
//=========================================================
// UTIL_LogPrintf - Prints a logged message to console.
// Preceded by LOG: ( timestamp ) < message >
//=========================================================
-void UTIL_LogPrintf( char *fmt, ... )
+void UTIL_LogPrintf( const char *fmt, ... )
{
va_list argptr;
static char string[1024];
va_start ( argptr, fmt );
vsnprintf ( string, sizeof(string), fmt, argptr );
va_end ( argptr );
diff --git a/dlls/ts/tsx/sdk/amxxmodule.h b/dlls/ts/tsx/sdk/amxxmodule.h
--- a/dlls/ts/tsx/sdk/amxxmodule.h
+++ b/dlls/ts/tsx/sdk/amxxmodule.h
@@ -15,21 +15,26 @@
#ifdef USE_METAMOD
#include <extdll.h>
#include <meta_api.h>
#include "osdep.h"
#endif // #ifdef USE_METAMOD
// DLL Export
#undef DLLEXPORT
-#ifndef __linux__
+#if defined(WIN32) || defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __attribute__((visibility("default")))
+#endif
+
+#if defined(__linux__) && !defined(LINUX)
#define LINUX
+#elif defined(__APPLE__) && !defined(OSX)
+#define OSX
#endif
#undef C_DLLEXPORT
#define C_DLLEXPORT extern "C" DLLEXPORT
// ***** AMXX stuff *****
// module interface version was 1
@@ -61,17 +66,17 @@ struct amxx_module_info_s
// *** Small stuff ***
// The next section is copied from the amx.h file
// Copyright (c) ITB CompuPhase, 1997-2005
#if defined HAVE_STDINT_H
#include <stdint.h>
#else
- #if defined __LCC__ || defined __DMC__ || defined LINUX
+ #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
#if defined HAVE_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
* here, these types are probably undefined.
@@ -303,17 +308,17 @@ typedef int (AMXAPI *AMX_DEBUG)(struct t
#if defined __GNUC__
#define PACKED __attribute__((packed))
#else
#define PACKED
#endif
#if !defined AMX_NO_ALIGN
- #if defined LINUX || defined __FreeBSD__
+ #if defined LINUX || defined __FreeBSD__ || defined __APPLE__
#pragma pack(1) /* structures must be packed (byte-aligned) */
#elif defined MACOS && defined __MWERKS__
#pragma options align=mac68k
#else
#pragma pack(push)
#pragma pack(1) /* structures must be packed (byte-aligned) */
#if defined __TURBOC__
#pragma option -a- /* "pack" pragma for older Borland compilers */
@@ -390,28 +395,28 @@ enum {
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
AMX_ERR_PARAMS, /* parameter error */
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
};
#if !defined AMX_NO_ALIGN
- #if defined __linux__
+ #if defined(__linux__) || defined(__APPLE__)
#pragma pack() /* reset default packing */
#else
#pragma pack(pop) /* reset previous packing */
#endif
#endif
// ***** declare functions *****
#ifdef USE_METAMOD
-void UTIL_LogPrintf( char *fmt, ... );
+void UTIL_LogPrintf( const char *fmt, ... );
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
short FixedSigned16( float value, float scale );
unsigned short FixedUnsigned16( float value, float scale );
#ifdef FN_META_QUERY
void FN_META_QUERY(void);
#endif // FN_META_QUERY
@@ -828,21 +833,21 @@ int FN_InconsistentFile_Post(const edict
#ifdef FN_AllowLagCompensation_Post
int FN_AllowLagCompensation_Post(void);
#endif // FN_AllowLagCompensation_Post
#ifdef FN_PrecacheModel
-int FN_PrecacheModel(char *s);
+int FN_PrecacheModel(const char *s);
#endif // FN_PrecacheModel
#ifdef FN_PrecacheSound
-int FN_PrecacheSound(char *s);
+int FN_PrecacheSound(const char *s);
#endif // FN_PrecacheSound
#ifdef FN_SetModel
void FN_SetModel(edict_t *e, const char *m);
#endif // FN_SetModel
#ifdef FN_ModelIndex
int FN_ModelIndex(const char *m);
@@ -852,17 +857,17 @@ int FN_ModelIndex(const char *m);
int FN_ModelFrames(int modelIndex);
#endif // FN_ModelFrames
#ifdef FN_SetSize
void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize
#ifdef FN_ChangeLevel
-void FN_ChangeLevel(char *s1, char *s2);
+void FN_ChangeLevel(const char *s1, const char *s2);
#endif // FN_ChangeLevel
#ifdef FN_GetSpawnParms
void FN_GetSpawnParms(edict_t *ent);
#endif // FN_GetSpawnParms
#ifdef FN_SaveSpawnParms
void FN_SaveSpawnParms(edict_t *ent);
@@ -1256,37 +1261,37 @@ void FN_RunPlayerMove(edict_t *fakeclien
int FN_NumberOfEntities(void);
#endif // FN_NumberOfEntities
#ifdef FN_GetInfoKeyBuffer
char *FN_GetInfoKeyBuffer(edict_t *e);
#endif // FN_GetInfoKeyBuffer
#ifdef FN_InfoKeyValue
-char *FN_InfoKeyValue(char *infobuffer, char *key);
+char *FN_InfoKeyValue(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue
#ifdef FN_SetKeyValue
-void FN_SetKeyValue(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue
#ifdef FN_SetClientKeyValue
-void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue
#ifdef FN_IsMapValid
-int FN_IsMapValid(char *filename);
+int FN_IsMapValid(const char *filename);
#endif // FN_IsMapValid
#ifdef FN_StaticDecal
void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal
#ifdef FN_PrecacheGeneric
-int FN_PrecacheGeneric(char *s);
+int FN_PrecacheGeneric(const char *s);
#endif // FN_PrecacheGeneric
#ifdef FN_GetPlayerUserId
int FN_GetPlayerUserId(edict_t *e );
#endif // FN_GetPlayerUserId
#ifdef FN_BuildSoundMsg
void FN_BuildSoundMsg(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -1409,21 +1414,21 @@ const char *FN_GetPlayerAuthId(edict_t *
#endif // FN_GetPlayerAuthId
#ifdef FN_PrecacheModel_Post
-int FN_PrecacheModel_Post(char *s);
+int FN_PrecacheModel_Post(const char *s);
#endif // FN_PrecacheModel_Post
#ifdef FN_PrecacheSound_Post
-int FN_PrecacheSound_Post(char *s);
+int FN_PrecacheSound_Post(const char *s);
#endif // FN_PrecacheSound_Post
#ifdef FN_SetModel_Post
void FN_SetModel_Post(edict_t *e, const char *m);
#endif // FN_SetModel_Post
#ifdef FN_ModelIndex_Post
int FN_ModelIndex_Post(const char *m);
@@ -1433,17 +1438,17 @@ int FN_ModelIndex_Post(const char *m);
int FN_ModelFrames_Post(int modelIndex);
#endif // FN_ModelFrames_Post
#ifdef FN_SetSize_Post
void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
#endif // FN_SetSize_Post
#ifdef FN_ChangeLevel_Post
-void FN_ChangeLevel_Post(char *s1, char *s2);
+void FN_ChangeLevel_Post(const char *s1, const char *s2);
#endif // FN_ChangeLevel_Post
#ifdef FN_GetSpawnParms_Post
void FN_GetSpawnParms_Post(edict_t *ent);
#endif // FN_GetSpawnParms_Post
#ifdef FN_SaveSpawnParms_Post
void FN_SaveSpawnParms_Post(edict_t *ent);
@@ -1837,37 +1842,37 @@ void FN_RunPlayerMove_Post(edict_t *fake
int FN_NumberOfEntities_Post(void);
#endif // FN_NumberOfEntities_Post
#ifdef FN_GetInfoKeyBuffer_Post
char *FN_GetInfoKeyBuffer_Post(edict_t *e);
#endif // FN_GetInfoKeyBuffer_Post
#ifdef FN_InfoKeyValue_Post
-char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
+char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
#endif // FN_InfoKeyValue_Post
#ifdef FN_SetKeyValue_Post
-void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
+void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
#endif // FN_SetKeyValue_Post
#ifdef FN_SetClientKeyValue_Post
-void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
+void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
#endif // FN_SetClientKeyValue_Post
#ifdef FN_IsMapValid_Post
-int FN_IsMapValid_Post(char *filename);
+int FN_IsMapValid_Post(const char *filename);
#endif // FN_IsMapValid_Post
#ifdef FN_StaticDecal_Post
void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, int modelIndex);
#endif // FN_StaticDecal_Post
#ifdef FN_PrecacheGeneric_Post
-int FN_PrecacheGeneric_Post(char *s);
+int FN_PrecacheGeneric_Post(const char *s);
#endif // FN_PrecacheGeneric_Post
#ifdef FN_GetPlayerUserId_Post
int FN_GetPlayerUserId_Post(edict_t *e );
#endif // FN_GetPlayerUserId_Post
#ifdef FN_BuildSoundMsg_Post
void FN_BuildSoundMsg_Post(edict_t *entity, int channel, const char *sample, /*int*/float volume, float attenuation, int fFlags, int pitch, int msg_dest, int msg_type, const float *pOrigin, edict_t *ed);
@@ -2111,17 +2116,17 @@ enum LibType
typedef void (*AUTHORIZEFUNC)(int player, const char *authstring);
typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
-typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
+typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
typedef const char * (*PFN_GET_MODNAME) (void);
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/);
typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/);
typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */);
typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/);
typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr);
@@ -2170,18 +2175,18 @@ typedef void * (*PFN_ALLOCATOR) (co
typedef void * (*PFN_REALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const size_t /*size*/, void* /*addr*/ );
typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned int /*line*/, const char* /*func*/,
const unsigned int /*type*/, const void* /*addr*/ );
#endif
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
-typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
-typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
+typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
typedef REAL (*PFN_CELL_TO_REAL) (cell /*x*/);
typedef int (*PFN_REGISTER_SPFORWARD) (AMX * /*amx*/, int /*func*/, ... /*params*/);
typedef int (*PFN_REGISTER_SPFORWARD_BYNAME) (AMX * /*amx*/, const char * /*funcName*/, ... /*params*/);
typedef void (*PFN_UNREGISTER_SPFORWARD) (int /*id*/);
typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/);
diff --git a/installer/amxmodx-installer.nsi b/installer/amxmodx-installer.nsi
--- a/installer/amxmodx-installer.nsi
+++ b/installer/amxmodx-installer.nsi
@@ -1,13 +1,13 @@
;(C)2004 AMX Mod X Development Team
; Licensed under the GNU General Public License
; Originally written by -=HaXoMaTiC=-
!define PRODUCT_NAME "AMX Mod X Installer"
-!define PRODUCT_VERSION "1.8.1"
+!define PRODUCT_VERSION "1.8.2"
!define PRODUCT_PUBLISHER "AMX Mod X Dev Team"
!define PRODUCT_WEB_SITE "http://www.amxmodx.org/"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Installer.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define PRODUCT_STARTMENU_REGVAL "NSIS:StartMenuDir"
!include "MUI.nsh"
@@ -144,39 +144,51 @@ Section "MainSection" SEC01
File "installer\files\base\addons\amxmodx\data\lang\statscfg.txt"
File "installer\files\base\addons\amxmodx\data\lang\statsx.txt"
File "installer\files\base\addons\amxmodx\data\lang\stats_dod.txt"
File "installer\files\base\addons\amxmodx\data\lang\telemenu.txt"
File "installer\files\base\addons\amxmodx\data\lang\time.txt"
File "installer\files\base\addons\amxmodx\data\lang\timeleft.txt"
SetOutPath "$INSTDIR\files\base\dlls"
File "installer\files\base\addons\amxmodx\dlls\amxmodx_mm.dll"
+ File "installer\files\base\addons\amxmodx\dlls\amxmodx_mm.dylib"
File "installer\files\base\addons\amxmodx\dlls\amxmodx_mm_i386.so"
File "installer\files\base\addons\amxmodx\dlls\metamod.dll"
+ File "installer\files\base\addons\amxmodx\dlls\metamod.dylib"
File "installer\files\base\addons\amxmodx\dlls\metamod_i386.so"
SetOutPath "$INSTDIR\files\base\modules"
File "installer\files\base\addons\amxmodx\modules\nvault_amxx.dll"
+ File "installer\files\base\addons\amxmodx\modules\nvault_amxx.dylib"
File "installer\files\base\addons\amxmodx\modules\nvault_amxx_i386.so"
File "installer\files\base\addons\amxmodx\modules\engine_amxx.dll"
+ File "installer\files\base\addons\amxmodx\modules\engine_amxx.dylib"
File "installer\files\base\addons\amxmodx\modules\engine_amxx_i386.so"
File "installer\files\base\addons\amxmodx\modules\fakemeta_amxx.dll"
+ File "installer\files\base\addons\amxmodx\modules\fakemeta_amxx.dylib"
File "installer\files\base\addons\amxmodx\modules\fakemeta_amxx_i386.so"
File "installer\files\base\addons\amxmodx\modules\fun_amxx.dll"
+ File "installer\files\base\addons\amxmodx\modules\fun_amxx.dylib"
File "installer\files\base\addons\amxmodx\modules\fun_amxx_i386.so"
File "installer\files\base\addons\amxmodx\modules\geoip_amxx.dll"
+ File "installer\files\base\addons\amxmodx\modules\geoip_amxx.dylib"
File "installer\files\base\addons\amxmodx\modules\geoip_amxx_i386.so"
File "installer\files\base\addons\amxmodx\modules\sqlite_amxx.dll"
+ File "installer\files\base\addons\amxmodx\modules\sqlite_amxx.dylib"
File "installer\files\base\addons\amxmodx\modules\sqlite_amxx_i386.so"
File "installer\files\base\addons\amxmodx\modules\mysql_amxx.dll"
+ File "installer\files\base\addons\amxmodx\modules\mysql_amxx.dylib"
File "installer\files\base\addons\amxmodx\modules\mysql_amxx_i386.so"
File "installer\files\base\addons\amxmodx\modules\regex_amxx.dll"
+ File "installer\files\base\addons\amxmodx\modules\regex_amxx.dylib"
File "installer\files\base\addons\amxmodx\modules\regex_amxx_i386.so"
File "installer\files\base\addons\amxmodx\modules\sockets_amxx.dll"
+ File "installer\files\base\addons\amxmodx\modules\sockets_amxx.dylib"
File "installer\files\base\addons\amxmodx\modules\sockets_amxx_i386.so"
File "installer\files\base\addons\amxmodx\modules\hamsandwich_amxx.dll"
+ File "installer\files\base\addons\amxmodx\modules\hamsandwich_amxx.dylib"
File "installer\files\base\addons\amxmodx\modules\hamsandwich_amxx_i386.so"
SetOutPath "$INSTDIR\files\base\plugins"
File "installer\files\base\addons\amxmodx\plugins\admin.amxx"
File "installer\files\base\addons\amxmodx\plugins\adminchat.amxx"
File "installer\files\base\addons\amxmodx\plugins\admincmd.amxx"
File "installer\files\base\addons\amxmodx\plugins\adminhelp.amxx"
File "installer\files\base\addons\amxmodx\plugins\adminslots.amxx"
File "installer\files\base\addons\amxmodx\plugins\adminvote.amxx"
@@ -202,17 +214,19 @@ Section "MainSection" SEC01
File "installer\files\base\addons\amxmodx\scripting\adminchat.sma"
File "installer\files\base\addons\amxmodx\scripting\admincmd.sma"
File "installer\files\base\addons\amxmodx\scripting\adminhelp.sma"
File "installer\files\base\addons\amxmodx\scripting\adminslots.sma"
File "installer\files\base\addons\amxmodx\scripting\adminvote.sma"
File "installer\files\base\addons\amxmodx\scripting\amxxpc"
File "installer\files\base\addons\amxmodx\scripting\amxxpc.exe"
File "installer\files\base\addons\amxmodx\scripting\amxxpc32.dll"
+ File "installer\files\base\addons\amxmodx\scripting\amxxpc32.dylib"
File "installer\files\base\addons\amxmodx\scripting\amxxpc32.so"
+ File "installer\files\base\addons\amxmodx\scripting\amxxpc_osx"
File "installer\files\base\addons\amxmodx\scripting\antiflood.sma"
File "installer\files\base\addons\amxmodx\scripting\cmdmenu.sma"
File "installer\files\base\addons\amxmodx\scripting\compile.exe"
File "installer\files\base\addons\amxmodx\scripting\compile.sh"
File "installer\files\base\addons\amxmodx\scripting\dlsym"
File "installer\files\base\addons\amxmodx\scripting\dlsym64"
File "installer\files\base\addons\amxmodx\scripting\imessage.sma"
SetOutPath "$INSTDIR\files\base\scripting\include"
@@ -327,18 +341,20 @@ Section "MainSection" SEC01
File "installer\files\cstrike\addons\amxmodx\configs\modules.ini"
File "installer\files\cstrike\addons\amxmodx\configs\plugins.ini"
File "installer\files\cstrike\addons\amxmodx\configs\stats.ini"
SetOutPath "$INSTDIR\files\cstrike\data"
File "installer\files\cstrike\addons\amxmodx\data\csstats.amxx"
File "installer\files\cstrike\addons\amxmodx\data\WinCSX.exe"
SetOutPath "$INSTDIR\files\cstrike\modules"
File "installer\files\cstrike\addons\amxmodx\modules\cstrike_amxx.dll"
+ File "installer\files\cstrike\addons\amxmodx\modules\cstrike_amxx.dylib"
File "installer\files\cstrike\addons\amxmodx\modules\cstrike_amxx_i386.so"
File "installer\files\cstrike\addons\amxmodx\modules\csx_amxx.dll"
+ File "installer\files\cstrike\addons\amxmodx\modules\csx_amxx.dylib"
File "installer\files\cstrike\addons\amxmodx\modules\csx_amxx_i386.so"
SetOutPath "$INSTDIR\files\cstrike\plugins"
File "installer\files\cstrike\addons\amxmodx\plugins\miscstats.amxx"
File "installer\files\cstrike\addons\amxmodx\plugins\restmenu.amxx"
File "installer\files\cstrike\addons\amxmodx\plugins\statsx.amxx"
File "installer\files\cstrike\addons\amxmodx\plugins\stats_logging.amxx"
SetOutPath "$INSTDIR\files\cstrike\scripting"
File "installer\files\cstrike\addons\amxmodx\scripting\csstats.sma"
@@ -351,18 +367,20 @@ Section "MainSection" SEC01
File "installer\files\dod\addons\amxmodx\configs\cvars.ini"
File "installer\files\dod\addons\amxmodx\configs\maps.ini"
File "installer\files\dod\addons\amxmodx\configs\modules.ini"
File "installer\files\dod\addons\amxmodx\configs\plugins.ini"
SetOutPath "$INSTDIR\files\dod\data"
File "installer\files\dod\addons\amxmodx\data\dodstats.amxx"
SetOutPath "$INSTDIR\files\dod\modules"
File "installer\files\dod\addons\amxmodx\modules\dodfun_amxx.dll"
+ File "installer\files\dod\addons\amxmodx\modules\dodfun_amxx.dylib"
File "installer\files\dod\addons\amxmodx\modules\dodfun_amxx_i386.so"
File "installer\files\dod\addons\amxmodx\modules\dodx_amxx.dll"
+ File "installer\files\dod\addons\amxmodx\modules\dodx_amxx.dylib"
File "installer\files\dod\addons\amxmodx\modules\dodx_amxx_i386.so"
SetOutPath "$INSTDIR\files\dod\plugins"
File "installer\files\dod\addons\amxmodx\plugins\plmenu.amxx"
File "installer\files\dod\addons\amxmodx\plugins\stats.amxx"
File "installer\files\dod\addons\amxmodx\plugins\statssounds.amxx"
File "installer\files\dod\addons\amxmodx\plugins\stats_logging.amxx"
SetOutPath "$INSTDIR\files\dod\scripting"
File "installer\files\dod\addons\amxmodx\scripting\dodstats.sma"
@@ -410,16 +428,17 @@ Section "MainSection" SEC01
File "installer\files\tfc\addons\amxmodx\configs\cvars.ini"
File "installer\files\tfc\addons\amxmodx\configs\maps.ini"
File "installer\files\tfc\addons\amxmodx\configs\modules.ini"
File "installer\files\tfc\addons\amxmodx\configs\plugins.ini"
SetOutPath "$INSTDIR\files\tfc\data"
File "installer\files\tfc\addons\amxmodx\data\tfcstats.amxx"
SetOutPath "$INSTDIR\files\tfc\modules"
File "installer\files\tfc\addons\amxmodx\modules\tfcx_amxx.dll"
+ File "installer\files\tfc\addons\amxmodx\modules\tfcx_amxx.dylib"
File "installer\files\tfc\addons\amxmodx\modules\tfcx_amxx_i386.so"
SetOutPath "$INSTDIR\files\tfc\plugins"
File "installer\files\tfc\addons\amxmodx\plugins\plmenu.amxx"
File "installer\files\tfc\addons\amxmodx\plugins\stats.amxx"
File "installer\files\tfc\addons\amxmodx\plugins\statssounds.amxx"
File "installer\files\tfc\addons\amxmodx\plugins\stats_logging.amxx"
SetOutPath "$INSTDIR\files\tfc\scripting"
File "installer\files\tfc\addons\amxmodx\scripting\plmenu.sma"
@@ -522,16 +541,17 @@ Section Uninstall
Delete "$INSTDIR\files\tfc\scripting\statssounds.sma"
Delete "$INSTDIR\files\tfc\scripting\stats.sma"
Delete "$INSTDIR\files\tfc\scripting\plmenu.sma"
Delete "$INSTDIR\files\tfc\plugins\stats_logging.amxx"
Delete "$INSTDIR\files\tfc\plugins\statssounds.amxx"
Delete "$INSTDIR\files\tfc\plugins\stats.amxx"
Delete "$INSTDIR\files\tfc\plugins\plmenu.amxx"
Delete "$INSTDIR\files\tfc\modules\tfcx_amxx_i386.so"
+ Delete "$INSTDIR\files\tfc\modules\tfcx_amxx.dylib"
Delete "$INSTDIR\files\tfc\modules\tfcx_amxx.dll"
Delete "$INSTDIR\files\tfc\data\tfcstats.amxx"
Delete "$INSTDIR\files\tfc\configs\plugins.ini"
Delete "$INSTDIR\files\tfc\configs\modules.ini"
Delete "$INSTDIR\files\tfc\configs\maps.ini"
Delete "$INSTDIR\files\tfc\configs\cvars.ini"
Delete "$INSTDIR\files\tfc\configs\core.ini"
Delete "$INSTDIR\files\ns\scripting\unstuck.sma"
@@ -562,18 +582,20 @@ Section Uninstall
Delete "$INSTDIR\files\dod\scripting\stats.sma"
Delete "$INSTDIR\files\dod\scripting\plmenu.sma"
Delete "$INSTDIR\files\dod\scripting\dodstats.sma"
Delete "$INSTDIR\files\dod\plugins\stats_logging.amxx"
Delete "$INSTDIR\files\dod\plugins\statssounds.amxx"
Delete "$INSTDIR\files\dod\plugins\stats.amxx"
Delete "$INSTDIR\files\dod\plugins\plmenu.amxx"
Delete "$INSTDIR\files\dod\modules\dodx_amxx_i386.so"
+ Delete "$INSTDIR\files\dod\modules\dodx_amxx.dylib"
Delete "$INSTDIR\files\dod\modules\dodx_amxx.dll"
Delete "$INSTDIR\files\dod\modules\dodfun_amxx_i386.so"
+ Delete "$INSTDIR\files\dod\modules\dodfun_amxx.dylib"
Delete "$INSTDIR\files\dod\modules\dodfun_amxx.dll"
Delete "$INSTDIR\files\dod\data\dodstats.amxx"
Delete "$INSTDIR\files\dod\configs\plugins.ini"
Delete "$INSTDIR\files\dod\configs\modules.ini"
Delete "$INSTDIR\files\dod\configs\maps.ini"
Delete "$INSTDIR\files\dod\configs\cvars.ini"
Delete "$INSTDIR\files\dod\configs\core.ini"
Delete "$INSTDIR\files\cstrike\scripting\stats_logging.sma"
@@ -581,21 +603,23 @@ Section Uninstall
Delete "$INSTDIR\files\cstrike\scripting\restmenu.sma"
Delete "$INSTDIR\files\cstrike\scripting\miscstats.sma"
Delete "$INSTDIR\files\cstrike\scripting\csstats.sma"
Delete "$INSTDIR\files\cstrike\plugins\stats_logging.amxx"
Delete "$INSTDIR\files\cstrike\plugins\statsx.amxx"
Delete "$INSTDIR\files\cstrike\plugins\restmenu.amxx"
Delete "$INSTDIR\files\cstrike\plugins\miscstats.amxx"
Delete "$INSTDIR\files\cstrike\modules\csx_amxx_i386.so"
+ Delete "$INSTDIR\files\cstrike\modules\csx_amxx.dylib"
Delete "$INSTDIR\files\cstrike\modules\csx_amxx.dll"
Delete "$INSTDIR\files\cstrike\modules\cstrike_amxx_i386.so"
+ Delete "$INSTDIR\files\cstrike\modules\cstrike_amxx.dylib"
Delete "$INSTDIR\files\cstrike\modules\cstrike_amxx.dll"
Delete "$INSTDIR\files\cstrike\data\csstats.amxx"
- Delete "$INSTDIR\files\cstrike\data\WinCSX.amxx"
+ Delete "$INSTDIR\files\cstrike\data\WinCSX.exe"
Delete "$INSTDIR\files\cstrike\configs\stats.ini"
Delete "$INSTDIR\files\cstrike\configs\plugins.ini"
Delete "$INSTDIR\files\cstrike\configs\modules.ini"
Delete "$INSTDIR\files\cstrike\configs\maps.ini"
Delete "$INSTDIR\files\cstrike\configs\cvars.ini"
Delete "$INSTDIR\files\cstrike\configs\core.ini"
Delete "$INSTDIR\files\cstrike\configs\cmds.ini"
Delete "$INSTDIR\files\cstrike\configs\amxx.cfg"
@@ -734,38 +758,50 @@ Section Uninstall
Delete "$INSTDIR\files\base\plugins\admin_sql.amxx"
Delete "$INSTDIR\files\base\plugins\adminvote.amxx"
Delete "$INSTDIR\files\base\plugins\adminslots.amxx"
Delete "$INSTDIR\files\base\plugins\adminhelp.amxx"
Delete "$INSTDIR\files\base\plugins\admincmd.amxx"
Delete "$INSTDIR\files\base\plugins\adminchat.amxx"
Delete "$INSTDIR\files\base\plugins\admin.amxx"
Delete "$INSTDIR\files\base\modules\nvault_amxx_i386.so"
+ Delete "$INSTDIR\files\base\modules\nvault_amxx.dylib"
Delete "$INSTDIR\files\base\modules\nvault_amxx.dll"
Delete "$INSTDIR\files\base\modules\sockets_amxx_i386.so"
+ Delete "$INSTDIR\files\base\modules\sockets_amxx.dylib"
Delete "$INSTDIR\files\base\modules\sockets_amxx.dll"
Delete "$INSTDIR\files\base\modules\regex_amxx_i386.so"
+ Delete "$INSTDIR\files\base\modules\regex_amxx.dylib"
Delete "$INSTDIR\files\base\modules\regex_amxx.dll"
Delete "$INSTDIR\files\base\modules\sqlite_amxx_i386.so"
+ Delete "$INSTDIR\files\base\modules\sqlite_amxx.dylib"
Delete "$INSTDIR\files\base\modules\sqlite_amxx.dll"
Delete "$INSTDIR\files\base\modules\mysql_amxx_i386.so"
+ Delete "$INSTDIR\files\base\modules\mysql_amxx.dylib"
Delete "$INSTDIR\files\base\modules\mysql_amxx.dll"
Delete "$INSTDIR\files\base\modules\geoip_amxx_i386.so"
+ Delete "$INSTDIR\files\base\modules\geoip_amxx.dylib"
Delete "$INSTDIR\files\base\modules\geoip_amxx.dll"
Delete "$INSTDIR\files\base\modules\fun_amxx_i386.so"
+ Delete "$INSTDIR\files\base\modules\fun_amxx.dylib"
Delete "$INSTDIR\files\base\modules\fun_amxx.dll"
Delete "$INSTDIR\files\base\modules\fakemeta_amxx_i386.so"
+ Delete "$INSTDIR\files\base\modules\fakemeta_amxx.dylib"
Delete "$INSTDIR\files\base\modules\fakemeta_amxx.dll"
Delete "$INSTDIR\files\base\modules\engine_amxx_i386.so"
+ Delete "$INSTDIR\files\base\modules\engine_amxx.dylib"
Delete "$INSTDIR\files\base\modules\engine_amxx.dll"
Delete "$INSTDIR\files\base\modules\hamsandwich_amxx_i386.so"
+ Delete "$INSTDIR\files\base\modules\hamsandwich_amxx.dylib"
Delete "$INSTDIR\files\base\modules\hamsandwich_amxx.dll"
Delete "$INSTDIR\files\base\dlls\metamod_i386.so"
+ Delete "$INSTDIR\files\base\dlls\metamod.dylib"
Delete "$INSTDIR\files\base\dlls\metamod.dll"
Delete "$INSTDIR\files\base\dlls\amxmodx_mm_i386.so"
+ Delete "$INSTDIR\files\base\dlls\amxmodx_mm.dylib"
Delete "$INSTDIR\files\base\dlls\amxmodx_mm.dll"
Delete "$INSTDIR\files\base\data\lang\timeleft.txt"
Delete "$INSTDIR\files\base\data\lang\time.txt"
Delete "$INSTDIR\files\base\data\lang\telemenu.txt"
Delete "$INSTDIR\files\base\data\lang\stats_dod.txt"
Delete "$INSTDIR\files\base\data\lang\statsx.txt"
Delete "$INSTDIR\files\base\data\lang\statscfg.txt"
Delete "$INSTDIR\files\base\data\lang\scrollmsg.txt"
diff --git a/installer/builder/Build.cs b/installer/builder/Build.cs
--- a/installer/builder/Build.cs
+++ b/installer/builder/Build.cs
@@ -12,31 +12,35 @@ namespace AMXXRelease
public Build(Config cfg)
{
m_Mods = new ArrayList();
m_Cfg = cfg;
CoreMod core = new CoreMod();
ModCstrike cstrike = new ModCstrike();
+ ModDoD dod = new ModDoD();
+ ModTFC tfc = new ModTFC();
m_Mods.Add(core);
m_Mods.Add(cstrike);
+ m_Mods.Add(dod);
+ m_Mods.Add(tfc);
- ModDoD dod = new ModDoD();
- ModEsf esf = new ModEsf();
- ModNs ns = new ModNs();
- ModTFC tfc = new ModTFC();
- ModTs ts = new ModTs();
+ // These mods don't have OS X builds
+ if (!Releaser.IsOSX)
+ {
+ ModEsf esf = new ModEsf();
+ ModNs ns = new ModNs();
+ ModTs ts = new ModTs();
- m_Mods.Add(dod);
- m_Mods.Add(esf);
- m_Mods.Add(ns);
- m_Mods.Add(tfc);
- m_Mods.Add(ts);
+ m_Mods.Add(esf);
+ m_Mods.Add(ns);
+ m_Mods.Add(ts);
+ }
}
public virtual int GetMods()
{
return m_Mods.Count;
}
public virtual AMod GetMod(int i)
diff --git a/installer/builder/CoreMod.cs b/installer/builder/CoreMod.cs
--- a/installer/builder/CoreMod.cs
+++ b/installer/builder/CoreMod.cs
@@ -26,24 +26,27 @@ namespace AMXXRelease
{
return null;
}
//annoyingly complicated file exclusion filter
public override sealed bool ExcludeCopy(string file)
{
if ( ((file.IndexOf(".so")!=-1) || (ABuilder.GetFileName(file).CompareTo("amxxpc")==0))
- && (Releaser.IsWindows) )
+ && (Releaser.IsWindows || Releaser.IsOSX) )
+ return true;
+ if ( ((file.IndexOf(".dylib")!=-1) || (ABuilder.GetFileName(file).CompareTo("amxxpc_osx")==0))
+ && (!Releaser.IsOSX) )
return true;
if ( (file.IndexOf(".sh")!=-1) && Releaser.IsWindows )
return true;
if ( ((file.IndexOf(".exe")!=-1) || (file.IndexOf(".dll")!=-1))
&& (!Releaser.IsWindows) )
return true;
- if ( (file.IndexOf("dlsym")!=-1) && Releaser.IsWindows )
+ if ( (file.IndexOf("dlsym")!=-1) && (Releaser.IsWindows || Releaser.IsOSX) )
return true;
if (ABuilder.GetFileName(file).CompareTo("svn_version.tpl") == 0)
{
return true;
}
return base.ExcludeCopy(file);
}
diff --git a/installer/builder/LinuxBuilder.cs b/installer/builder/LinuxBuilder.cs
--- a/installer/builder/LinuxBuilder.cs
+++ b/installer/builder/LinuxBuilder.cs
@@ -34,17 +34,17 @@ namespace AMXXRelease
chmod.WorkingDirectory = dir;
chmod.Arguments = "-R 755 " + file_list;
chmod.UseShellExecute = false;
Process c = Process.Start(chmod);
c.WaitForExit();
c.Close();
- info.Arguments = "zcvf \"" + target + ".tar.gz\" " + file_list;
+ info.Arguments = "zcvf \"" + target + "-linux.tar.gz\" " + file_list;
info.UseShellExecute = false;
Process p = Process.Start(info);
p.WaitForExit();
p.Close();
}
public override void AmxxPc(string inpath, string args)
diff --git a/installer/builder/MacBuilder.cs b/installer/builder/MacBuilder.cs
new file mode 100644
--- /dev/null
+++ b/installer/builder/MacBuilder.cs
@@ -0,0 +1,111 @@
+using System;
+using System.Diagnostics;
+using System.IO;
+
+namespace AMXXRelease
+{
+ //Build process for Mac OS X
+ public class MacBuilder : ABuilder
+ {
+ private string m_AmxxPc;
+
+ public override void OnBuild()
+ {
+ m_AmxxPc = PropSlashes(m_Cfg.GetSourceTree() + "/plugins/amxxpc_osx");
+ }
+
+ public override void CompressDir(string target, string dir)
+ {
+ ProcessStartInfo info = new ProcessStartInfo();
+
+ info.FileName = m_Cfg.CompressPath();
+ info.WorkingDirectory = dir;
+
+ string [] files = Directory.GetFiles(dir);
+ string file_list = "";
+ for (int i=0; i<files.Length; i++)
+ file_list += GetFileName(files[i]) + " ";
+ files = Directory.GetDirectories(dir);
+ for (int i=0; i<files.Length; i++)
+ file_list += GetFileName(files[i]) + " ";
+
+ ProcessStartInfo chmod = new ProcessStartInfo();
+ chmod.FileName = "/bin/chmod";
+ chmod.WorkingDirectory = dir;
+ chmod.Arguments = "-R 755 " + file_list;
+ chmod.UseShellExecute = false;
+ Process c = Process.Start(chmod);
+ c.WaitForExit();
+ c.Close();
+
+ info.Arguments = "-r \"" + target + "-mac.zip\" " + ".";
+ info.UseShellExecute = false;
+
+ Process p = Process.Start(info);
+ p.WaitForExit();
+ p.Close();
+ }
+
+ public override void AmxxPc(string inpath, string args)
+ {
+ ProcessStartInfo info = new ProcessStartInfo();
+
+ info.WorkingDirectory = PropSlashes(m_Cfg.GetSourceTree() + "\\plugins");
+ info.FileName = (string)m_AmxxPc.Clone();
+ info.Arguments = inpath + ".sma";
+ if (args != null)
+ info.Arguments += " " + args;
+ info.UseShellExecute = false;
+
+ Process p = Process.Start(info);
+ p.WaitForExit();
+ p.Close();
+ }
+
+ public override string GetLibExt()
+ {
+ return ".dylib";
+ }
+
+ public override string BuildModule(Module module)
+ {
+ ProcessStartInfo info = new ProcessStartInfo();
+
+ string dir = m_Cfg.GetSourceTree() + "\\" + module.sourcedir;
+ string file = dir;
+ file += "\\" + "Release" + "\\" + module.projname + GetLibExt();
+ file = PropSlashes(file);
+
+ if (File.Exists(file))
+ File.Delete(file);
+
+ Console.WriteLine(PropSlashes(dir));
+ info.WorkingDirectory = PropSlashes(dir);
+ info.FileName = m_Cfg.DevenvPath();
+ info.Arguments = "clean";
+ info.UseShellExecute = false;
+
+ Process p = Process.Start(info);
+ p.WaitForExit();
+ p.Close();
+
+ info.WorkingDirectory = PropSlashes(dir);
+ info.FileName = m_Cfg.DevenvPath();
+ info.Arguments = m_Cfg.MakeOpts();
+ info.UseShellExecute = false;
+
+ p = Process.Start(info);
+ p.WaitForExit();
+ p.Close();
+
+ if (!File.Exists(file))
+ {
+ Console.WriteLine("Output file failed: " + file);
+ return null;
+ }
+
+ return file;
+ }
+ }
+}
+
diff --git a/installer/builder/Main.cs b/installer/builder/Main.cs
--- a/installer/builder/Main.cs
+++ b/installer/builder/Main.cs
@@ -1,23 +1,25 @@
using System;
using System.Diagnostics;
using System.IO;
+using System.Runtime.InteropServices;
namespace AMXXRelease
{
//Entry point for application.
//1. Reads config file
//2. Instantiates correct build process (ABuilder)
//3. Instantiates the build (Build)
//4. Passes configuration and build to the Builder
public class Releaser
{
private Config m_Cfg;
public static bool IsWindows;
+ public static bool IsOSX;
[STAThread]
static void Main(string[] args)
{
string file;
if (args.GetLength(0) < 1)
file = "release.info";
else
@@ -42,23 +44,31 @@ namespace AMXXRelease
if (!ValidateConfigPaths())
{
Console.WriteLine("Build failed!");
return;
}
ABuilder builder = null;
- if (System.Environment.OSVersion.Platform == System.PlatformID.Unix)
+ if (IsMacOSX())
+ {
+ builder = new MacBuilder();
+ Releaser.IsWindows = false;
+ Releaser.IsOSX = true;
+ }
+ else if (System.Environment.OSVersion.Platform == System.PlatformID.Unix)
{
builder = new LinuxBuilder();
Releaser.IsWindows = false;
+ Releaser.IsOSX = false;
} else {
builder = new Win32Builder();
Releaser.IsWindows = true;
+ Releaser.IsOSX = false;
}
Build build = new Build(m_Cfg);
if (!builder.Build(m_Cfg, build))
{
throw new Exception("Build failed!");
}
@@ -91,11 +101,45 @@ namespace AMXXRelease
if ( !File.Exists( ABuilder.PropSlashes(m_Cfg.DevenvPath()) ) )
{
Console.WriteLine("Failed to find compilation program! Check 'devenv' option in config.");
return false;
}
return true;
}
+
+ [DllImport("libc")]
+ static extern int uname(IntPtr buf);
+
+ // Environment.OSVersion.Platform returns PlatformID.Unix under Mono on OS X
+ // Code adapted from Mono: mcs/class/Managed.Windows.Forms/System.Windows.Forms/XplatUI.cs
+ private bool IsMacOSX()
+ {
+ IntPtr buf = IntPtr.Zero;
+
+ try
+ {
+ // The size of the utsname struct varies from system to system, but this _seems_ more than enough
+ buf = Marshal.AllocHGlobal(4096);
+
+ if (uname(buf) == 0)
+ {
+ string sys = Marshal.PtrToStringAnsi(buf);
+ if (sys == "Darwin")
+ return true;
+ }
+ }
+ catch
+ {
+ // Do nothing
+ }
+ finally
+ {
+ if (buf != IntPtr.Zero)
+ Marshal.FreeHGlobal(buf);
+ }
+
+ return false;
+ }
}
}
diff --git a/installer/builder/Makefile b/installer/builder/Makefile
--- a/installer/builder/Makefile
+++ b/installer/builder/Makefile
@@ -1,20 +1,20 @@
-#(C)2004-2008 AMX Mod X Development Team
+#(C)2004-2013 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson
### EDIT BELOW FOR OTHER PROJECTS ###
CS = gmcs
NAME = builder
BINARY = $(NAME).exe
OBJECTS = Main.cs Config.cs ABuilder.cs AMod.cs Build.cs Win32Builder.cs LinuxBuilder.cs \
CoreMod.cs ModDoD.cs ModEsf.cs ModCstrike.cs ModTFC.cs \
- ModTs.cs ModNs.cs
+ ModTs.cs ModNs.cs MacBuilder.cs
default: all
all: $(OBJECTS)
$(CS) $(OBJECTS) -out:$(BINARY)
clean:
rm -rf $(BINARY)
diff --git a/installer/builder/Win32Builder.cs b/installer/builder/Win32Builder.cs
--- a/installer/builder/Win32Builder.cs
+++ b/installer/builder/Win32Builder.cs
@@ -15,17 +15,17 @@ namespace AMXXRelease
}
public override void CompressDir(string target, string dir)
{
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = m_Cfg.CompressPath();
info.WorkingDirectory = dir;
- info.Arguments = "-r \"" + target + ".zip\" " + "*.*";
+ info.Arguments = "-r \"" + target + "-windows.zip\" " + "*.*";
info.UseShellExecute = false;
Process p = Process.Start(info);
p.WaitForExit();
}
public override void AmxxPc(string inpath, string args)
{
diff --git a/installer/builder/builder.csproj b/installer/builder/builder.csproj
--- a/installer/builder/builder.csproj
+++ b/installer/builder/builder.csproj
@@ -43,26 +43,28 @@
<ItemGroup>
<Compile Include="ABuilder.cs" />
<Compile Include="AMod.cs" />
<Compile Include="Build.cs" />
<Compile Include="Config.cs" />
<Compile Include="CoreMod.cs" />
<Compile Include="LinuxBuilder.cs" />
<Compile Include="Main.cs" />
+ <Compile Include="MacBuilder.cs" />
<Compile Include="ModCstrike.cs" />
<Compile Include="ModDoD.cs" />
<Compile Include="ModEsf.cs" />
<Compile Include="ModNs.cs" />
<Compile Include="ModTFC.cs" />
<Compile Include="ModTs.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Win32Builder.cs" />
+ <Compile Include="Util.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
-</Project>
\ No newline at end of file
+</Project>
diff --git a/installer/builder/builder.exe b/installer/builder/builder.exe
index 1dc67f9a7586e5ebd936faf88868984f37439f25..f9a44acd1c8e5fe1a5da4fc8feae9f05af6a1193
GIT binary patch
literal 19968
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
FzX7h9Y19A!
diff --git a/installer/builder/mac.info b/installer/builder/mac.info
new file mode 100644
--- /dev/null
+++ b/installer/builder/mac.info
@@ -0,0 +1,6 @@
+compress = /usr/bin/zip
+source = /Users/Scott/Code/hl/amxmodx-central
+makeopts =
+output = /Users/Scott/Code/hl/amxmodx-bin
+devenv = /usr/bin/make
+release = amxmodx-1.8.2
diff --git a/plugins/amxxpc b/plugins/amxxpc
index 58ac0e05fb44e4d53a5f48da59912dda2021e3ac..5f060f06c09d685b7bbbb49046e556191cfa3d1c
GIT binary patch
literal 150762
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
Ee>7`PtpET3
diff --git a/plugins/amxxpc.exe b/plugins/amxxpc.exe
index 51f9ed04ed81aa3f988f6af481b3b7d2eec65ab3..760fe2d0e31c39b979c33bdebd6cbc89ac31e17e
GIT binary patch
literal 101376
zc%1CLeOwgRxd1%7JHP-dv+AO#L`g$Z4JI)`Q*qTSkp)Zu7m-~l0=7{?sYwjZsA&bk
zVGYB{8hdMO+MBkqHn-_*?u~7&k|wb%Yd|y~sHrj4+mOU22iHW5gbzjLeV#MBun?2>
z_TKxx|GfHR&c{6Goaa2}`8pqSHusx5ITOcmJp5@I$2D>KKRfsL|8>J(+>AfQar>j+
zxUtEQ^Tv%UD!#KJX?@ir4_1Bap`-`C_3*=wNJ-ybn^Yw~ob;WClQNbSBt7)Vnzgr&
z8yAxttm8+mSAKQ!SG#&be@7O?^!Qk~xaTDZ|MFf`PX~MVRL?dDd%iW$^Jn({o}SNH
z7}s-xh0!cr{+$OZu%0i&+3Dc8976<G^U;+2P+lizG{hQWIIb5G|DxwvD)E7T2Avuh
zH*#DAXJGF`A=hbO#Cs#!2z0d9F+dB)jfBGi`}e|k4cttO>@#roi0dHOY~Wsq<+#=3
z4P4?^&_3w_!{{*rJd+Gx4u89}cC!RwWls<x>?=Q}PH6V_sx{w|z6Gzo9qjuW2(OHW
zgLdt=>tNiG+u%`a(CaKUjD>5yy=p_%0~n9c`^-f``0y9t?6+5~UH1q8uAi*afJ=Z-
z`U2d&U*5z2|KC6JuaI0I4xz;Vdhj2lT|_pE2O{01T5yuL=&jKlNAiSxi2huFsEc0?
z(OnqLG$VkD(L4(R)IhYXbfmUWeFDi8+)jE2$e6dr>{O%Zvin%A#AV4}?slq~R{9yX
z(@!!jPI`JN$0>&s+cKHtcr<B}yJE}ubWV$}eKH;12$dYo0hqFVhEa{_?I{;l?8&Z8
z=Tcu&9fJj=M8FQYU6lr}<8bACC;fIFV3B(^pMt{EyoHCC)4m~1BaXAA`ml01q1W-c
zQ8h_7RB~<?U4K8vVaePVDktUBnRyH^Q}qjO_4@)PfPzb1VxdOtOo7Gat~4yCCIBM2
zgHTghY3durbQ16^`CAB0hM$FDrM#&Tzgv|D+Z_GaPp{KJv_`>R-!2cNv;Zj_X2=@O
zP#xXgEKQYrJk6Uk4xwat%?T-&8^_mPxm^~O>OoD8^d`osC4*3T?Ug&Eh}tWw<VdC3
z!by=!vmZMZh*OSg-fTlkhoNv#&FulIkk;@PyczS2PWp#z!1qn%Fz<a7@fn|9e*#{<
zX&N9<q+1!#<jLe%%4P2_nF?<l-(ZbHklsL?=~&98ku=g^K&!di_Ez=Ry;dOzPvq`2
zxxYG|$o-_m+?Y7MA@Q!vbXD%Ry|v}TveH&w;EIu2-pyLT<Xy@&E;D2ScKzjK+<xGI
za#bX`W^%l7N_zbnK<g-Z7a&7G<e0C^NItv#966@EZ@T=;veM!a%7@Y4%;@h{-qO5T
zM%!s|hsS`JnV~&m-i{Q#O^&I3%<zb`alr}6Nc!zI|CYabG;zl&1YCG1^$clia|pmc
z8qgbP+Gw#eGWlRoz1f=T=z%VI+QkMh^tp)*mNhM<4d^+w_9`1LL6f7sb1f>!hTLC!
z^$uxe?bTIM!F@{~I~!Qpm~T{k#@Z`M(zN;$(&S1*MH6&BpB}oVY06=9uwVDv{9^r4
zBx=TXzS5vH8yT3B{%8~!jC#s(L!p4<3C!W>QJPI483692M>3J4d1XkGCy;LPR!U#k
zfR6W?7nAPMV=Ca7-fGJote(ooN4aXMwlw|_+ikE4=}X|vmcZz7{NfOX4_Q1GRVN2=
z1(9hUHD(nv<I_3%ItW+=wL+`~V}~);gs~?u_MaHb#@H`0mV~jNuo4p?wi9E|V{ALd
z)?;i7#%5xy3S&JJAXb5~eHbgnSOdmZU~DDE?!(v|jM*_JVC?Suka+frX6ON(1&Ja*
z@>iu+k;JESYxW?&JCzIe0+&0ekepse&zilMudeN`STPw@8gEJGNVh6ePp>>xi#J2k
zSuqD*(Njzf3NE@j1IBm}2X88p;e|_kry>DDa@wVqT+rUxi(1ihMyx*u4vME)toK7$
zVFrkbbCaNnj*90eg_I{SK5&L|)mVLVMZ<7z#p+36+Lcbq0Y`zOT}z<ZYBSlyzqAV8
zgR%g5v@94ePX(r&(C9QQ$T!Gwz(>HVz#ZpOn*$Nknw8TU;&3zI@X`ua>>n<32?WJm
zpcP(l7tn%1(8=A(VUUncpp3O*P8f>3i{>oBA%r{^oo{D!@-$2F6+$=^^x<X%;~7}u
z{b*niP?O_b6&>+mU3Sw!P}5$=ey~z64QQIX)zQS$Kca%C3zwq3*q=}5zzfo<9JYol
zO%Nt0twTzkCMTgy(wcIrQD`t5@qKT_k$7x+_dP)j<*!#Xvz+?joOti|wZ<%vhGrCz
z_*ddlL?%}>L0G_;lHsgYpF^|@DxMyVwgb>^bTpCNW>WY{gX4AL*stck?e^wgPzyU$
z$LTi5AhH{Mn?p`snVSx8=sTD|w;vNRKy<Wl7pUEUIj`q?3ok5hbDTvFj9%zN)7VUM
zk3e(Id;}}PQG$9=`_Ug|BZ;QKvts8kW~7h;lP%Zc1z=eiglE&C7mjmI`W>__xt;lx
zW}zrTfxsJd3e;4wBCK0HeF{h(XblO&TvP$=Oj8MgeXozT_rwQkNfk<3c#fs>iNT2-
z5-Rz8N|?#EDE$Utj)t}AoVRdrc?fx$$4oOTI8xt8d1F4k|EtPB|98q8@@ec>m9MyN
zd30Aiy;2G>K);+WtmU;_R*S85xDqo|VrG@x1eKJQv<P|~%7ytPCpnv}NM1-Xk~0d(
zs^pBy`D#wG8M0SYtO2E<u1HQ$Ga$p1?_H5>Sq|~!wv6Pt$R`la4~7dF-<YScmVr-~
zy1W_5KvO3b&<KKP3d)c{n(oa>7V_!a0y89@-lnU7lr)XBmKH0A=lcPXL@ei2C(?a7
zjQ%3nUqI4A5W5vnx8{VTIe)p6&ePC>S^fB)Cr3z!uPe@X-fTMJ&4`H&H|Q?1UT~Am
zR&v~TUTCl`CYuH38yVJHiPPF(UI3A@QhykHH_1!{cNGiS1~wYW0Qi^lh}}Z+%x-5s
z{r-G(Y!eMNX2WKSp~gC^#sbM%(89(<)SNX|PL3olL3LTMUYDC}Nj8IPP=6!}3T{gD
z^osSbVl*e&q73lj<NF|?Y&COY{m(FV4=2YcTX|0OJc&@5{Gy+Lrj(-**0Y7dS~%IV
zXYgJasjP%DM$b~e(tj&)%`7NX7sK#b)x4Q6V=qO|FQ9M}{BdcS38H5RWtsh_1>XQ8
zlQoCrS;6-Pb3DUP3Nb5S-pX4@Fp-CE1eQo74_l#spoTpvx)d&<fxk5zj0>-T`|3B_
z>!AvzKN?z>BfLutfyv6D2FNm2M=SltEj()dCO*{6`0&bNA<>q}KMF6qUPDH6CX?*h
zeSevHLixbb_wLko<$a^^ILS`b;{wKm`MmMCG9PCZ;#1AWjt1+j5MGJmf#p2pgNK4y
zd5~Tjp<~=&wqO<miPVt@hl&~n72d5VM)iN7V|j^CN8?iSNHv*>%4Q4TX_anlv|Ga=
z8<)n9YA_EmQ@%HwlW-LC$+9`Xp^wc&F*3v8wq+(UVa?<nNUq)3Zr&WFOYpsKuJdsq
zZfV;QyXqO_KM{2s-4d@{i>&5}KM<FC0;1wmEvA-$F}2y(85w&-saeNKCZ#>8$z!=!
z=zBlq=<zPoQC}BtI!1iH_ajn{kk;VXPz6*NgP$NCTy__gAPJE<^t%uVvLF{9LR6{Y
z9irz5$3zP|FV^oz_C08~re!8UH#a;Snjd6ZZJB2I?ohuIZN7~ODLyB3-{cGSe{QH+
z(ne>ao50GDBhoA=MV4DgX;PzgDtQ=2awhY=4VhL0G?SSq9&}pMTuD_wW@te5Gq5bQ
z03^povgVkMgZ7y`(gKX0E6J8`mE%T;y%f2ihF|)sE`q-bbt@6N^+PuH*5PjCB`S}x
zZnQun%jTrCu%5I)H-48I){V7Shr7`s-AMA1NNFM|1`bS&HNBxi64)|PFg$GaoRRki
zjO4#YbpY$m6QFL>QR1GHznr>;>jwB3wKNH^F4nOw7Cp~}5Kab!fA9|@YzRkq|CKO=
zzZOC`84*@|hA|lb;_qYp%e%rbjskQa)X{xVE)EsEANT~kMq8eFV-#R;myUtgX|%b_
zo92lJ+;f7$`>+)fck057jHu@UL*8@Oh~zLXMr{tZs*U~)Tsx+C=e1?dM6+5_T$b7l
zY8Ny$n9v0IM%$`n>(*(?RbHCJbaP2@n07{xVO2f_3rSPRxFFcF5hV^U;B}3}$rI6E
z|2d$*%82#5a2S|=@mlSKe`+5X>H?S6fmXKPC`Bm!CPtQ@1YP_E2Gm4GvHnho*j|&}
zw*Qi2UG&vknTZX2Ll;38HQ%cHA6HHCO(ZXexH8JyGVU8f2Ec?jha1YT<d#!wHX{v?
z;xGL=DZm{cg4k6sOBZo{Bs0O&yfuov29!Z_WE4Hyko_6iQ9F&L{BZiNG3nGXX<<w{
zdQ3WIOgc6^9k8PMA+7XsUr+&^M~}6QPV5ijTociETFp!-No`Kcv=*0%yV$To|2zpp
zY@CB5j>EmDJ7jf-*npwGASDZE(+}xFgS7uWM8SRF7424OmZCYNWJOyl%}}&rX{w?<
zD8(z<qmrdg!?BWtP+i21Gn8>8FBv3irc*l(LyP+A-i+&K+pnKJ|GL?kGa+lao=$Cs
z_Q3=~$Jh#TsX`4(=QaOupThqE*Sbl6$PtpkfR*`E+SE)QJpy|I_^q-?;)rXG8-(-@
z5iH&W7<+jli3Cf7{!-v}@G~;!An!~9XH9T}{`|%rpmP@+Y6QknW&Tm^&DPn_ZE99C
z7p7|E>X!S4!kE#$oHjUyWr4Swn#F@paQ_bC00nl`GOMxkd30lUKfw|WFJNNFPW{b)
zLV{Ull=GT(YRxLOMpA1k)S7J7wMEU`tY)qbM@YF~CCj!D_qu{Y^2lZvIf(UuyKEuL
z=BrY&m28^r{n-_uoaw0T<i@y^Q*|woAaUqJ2L$kvagxN@USy~oSTRd$Sdknj9<a{x
z{?-U!kP@pReCv`eM&g#zz;oNkqyI+S^BY$si>8kGiMNWLHe5$rl^i#J)vcQ7c?nZf
z7fca7FJkPQ2BpQYpvWM4p2c4IjF4<BGJulB{HbzTcw%{Y!V#XBAD&1FPfQO_j1N!n
zwl}MGk>l8B?2PTt-W@|giJGZ4bV0M$lk?TH8&}0>jn<e3Kp#6x+;ea0AX#?tAn&vR
zbvDK-(0M>U26&HTNjAF4NM0)~DQ3<+@<ZNylDV#stV<Ret+Px%(;EvcZf_H|CwhL2
z1jsima6$#RkftviG&&7RGh(@5JoG*+u{=EC2v5upPo#t=riUlShbMSjTh*?Vwg@BB
zw5Ba0$&+k8_2Km!W6FrH#Lu{_Y|QfW>jk82cA<+rvM}WliDa!K%Vv9b#UlTtP+Ln?
z8OfSo;58@YJL$yPz~t^6l9e&5Z2hdVb-=H)%2s*JPVr#+kkVze`K$O8Ke}ehc|*Bs
zkUu8N?Bt}^T=b;?rU3Z{m`qM80A@3}*O50&?)l5v{MwKuK_0I3T`^T9F~sJ3=L+J1
zNV06Dnw5RBQ#_DoNcG*6wE|LgSCGdyn8{@2dpJ|M4HZX8F?Lm-?~p9>A>1ugny=bg
zHyB|~l_i0y*kqxDLu{N;P5ul$FKlTQh*w*d#MZd^J0;%MQI(d`;b~XhlA5({OB6_h
z={R)cL?s7K*m5`h_-3F@);cw76^R1lMYBGGN=4-{3nyji)sd{(DaUU^ETOV(o_44t
zYre^c)BtPdbkkpA70cGK^6Iixl*cNdJE-@UL3fyS2i<Ognf7I<b5s@J8V~W}u9oG{
zQp$0xu5b)Sf4GDgfk{cX$RYxRy4Cfp(a*|4(wo5<`~`)s)K8FRR&R*`*O#-TMU1#N
z(c{+`saO&)N!Y;b%+{cRuQ4*Vt6EC3vSEy{&zt6+?1XU>59EwDvY{f&GGMgI37>w`
zXT)tUSNSUF^G(a<LP9(^`#x4Qqa4bXtJZYSC(^w-OQyV5*Trb(+cbwfi8BOcz$nEj
z112esyhbT_Rsk!d<Ow#v99KyCXd!z0hj}$?wX$`!N!&IcO0#-X-0K^&R+EFjoP_H4
zDEZN|5Ghy9F7l(NAw~{jdbX*7zsvA*jEV=E#REInC#7@chG%~CG)$Ge^(?6KAw!kd
z4RD4HX7Qj;JW#uSdO8;vCmw9~bw!B>>ekO-g&uFfjiMht1C^yVr<_b<Eds%j30Kbo
z74tY639?MuR0&<ETB|f`fOa6#`>)7=hO%`?N~B^&jFCKov_1JZpi=5<NYF>--gF*_
z7o;i>wDKzms${L!<p1n?Jjmy|P+0}2u`O#g$1H*oYJ!=i;bdoOi!NJ%QXR077j$Bg
zCy{pLZG1k)Sq>vz10NG2SqIVzJw%`ta}*zEy>CzPr#-Is-lt?q8o30$LmtBQ|FJv`
zID>dGW^VY}XlACLhQv$stb(FtrQj?T`~SXF+%u-4pMN?c72`uv0lI#)T$B_u$<Xy>
zJ_rbkM*`SVw%f-hRbf){n=7NFBvF@=;-HiWCS6K$|E`pPMY^t(@b{5r*~FcpLi^&u
zEErhGajz%KR;%tcWCbXQ6ECBtSC?&8%T`N|5}(ds8y*bGQp>O`73#8NI~Ee97W&h^
z5m9<gj$00*6f+PKCE!=3KVsALv=_0MG!cFL@km_v`noH)p}x@sO_Hq5@Iu_S9vVr@
zS}i{Q;E3$4VK_+S=g2}{Nx0USwYfay&*6et5ER6phXiq|;l;6n_`*LUh%bZ*BH)<v
z=hQR0ERr|GUH+6KhGmk{JfvoAHavnNXFIiNS#XdZ`HB%bua8jW-x(psB}&$2P2L05
zd(HqI+OjIx{5)$l4wqQpghJq6<v9T?yllSdD6nulNC3=a-E{km(bnOkz=(CI9hQJ1
zm?u<(=4QIkW(eAKq*kXelU<bB7l)<xg)d5N%4@pJ%6EK)gnl%Av|wc-ej@Y~#T*5-
zYX#V_U|M~oqU#vyXFyiEj~Pcm)To7&Nf1%oNeH5@tC#V^jDUlwBg%pxCI12WAA{!4
z&yUFegt78pG)4gwF%3|_q~DTy#&%VDjBHA@U6!iS%95mq(#n#h3bo9tmI-QELR;2s
zBb$H;YNiFIbvD0RYOU61c90}T`re(^uDt(Jf#Q1<<|hSe9$z3w(L7L4fe7$9L-T%@
zS~`=?pUfu7bp2%<X;gJ(rEGFk%+{L|Q`>F6LVa<k-Uvl&=ie!M2G9-MlAJtW^n8jN
zAm|3!2IR;xuj5*YKW$kO%=6`#wyY#)fgO~^%(P|6Fk#P1UJpqqXVGMwE?DsR3ognh
z+TN{>O#P(qOkkXHRjd(SWpkE*1=>#ni>34n;^WnNlL><8slu(9`}>uFDDm-fJ=+>B
zK3*I|iWeVuV)UvYN4y-3gmTX$SxK&n=1I7@vs~-I^?EaE&gnRN*_5b0oIsATKA!xW
zS~>?XO4hfjb2T+@uJ`_^lbvdw6TEG8v6`8KHZ*fZ({KL$-~YYu{p06@6HE2s*{W-$
z-c+Tr5L?Nct!B;-<>a%R95vG(o}*@Fc<+y7jh*bQ<kjs=fh?Oz+)2)S?F89@Y31-7
zrDi_owR%}YFzha~l&93#IVoGI$>5}WVH&)c96x^EYjt}0Y?F`VBqyl5k=H?K&vdKX
zk;&B^IEz$wqke78Octn@?TquK#o)LHS5x-%!<^p@lYVOH4!vx`{h1Pfu|9VPU;hdV
z#_U(%ZiSFv$yExKVx<7{-aoP0lSa*VbCP)+Z;P7@_%2%N-e+#}RfBvd)+8RVn2y#B
zT!Or+$hs~JO#^jWFntk2(&p>5l*Rgr{kRli_4LY7-b_PjS+QTaYT0m)=ZrKSym-?Q
zC16lm4W<Fl8TsPq8k-)ijjHYY*mqteExt}ZrNz`%8mhDI>b`hj^KE|x0yVw(>xWDG
zJ}e~XeV@dJ{H3}80yH6`vHgDWz$DXA@qi0jVxch@nt~x83?qVJWH5{hhC(om4u&zo
zFg6&PgW<Sf7#9ph3{3+{s|B=)=#gPO^nSe${rb)ck;57KNKb<~SCmfxcs>puuD6{+
z8M|r`w=s3>_fdZ5|EK){c^~Og6<~SY(fmjHNk)cr^nBFiWu1Kq#Xhx{Xyxi0rI}Z{
z4D#pRZD_z>0v*nc%H0wJxf4+rtVs@kqyFv%6sg}m&z}3(lQ|h}+jfE9VBm0VDWB|g
zS~;!|nbksG*taSc&new)JF3DAUwrauRDacT$^M4b@PfS1fbYeF)`Q}~#23qLC#xpN
z6B~C$u7oNU?3#(eCKF7@$vTj@{UP8N0r(&S-zHlcb*Ke;nT;s~mnQb_L`WSIH7D6>
zYPTJ&Q9%@~#igp=W=RolO|taPU|Q9&EiEY;wLX+Y@<D>9kfj1H`aq(P%z{`l$roJY
zQA=vO+OQCcsSS4a%wW%K_RL{VCws17&y}%k?I@Y-TmiU|U94?)xtjAsBWc1crOi;M
zEdsTqg0Bm>Cy3q#)csF1AtZL@C48ImmT3SINh(;D0FQn#_J&Ll4?<1wAV#2??ai7f
zB_lb(K;E=Lo2-?s*<iS4mMityh_oTK*Y?hqSn^p)A7sxab7347{!l!qncfs%e9O>)
zLk-hLaJyDKWi*`<Uwp@~6PW-_Hq>n8m37HUz`Nha)tz<837${H`gb|D`I+d=*Py4f
zz57{9A$<aGW|u3kusqJYi-odTId23OD_0h9QcroEj+>?-mWv@~EU$|M#rlcS^U2mf
z;fAv3gtQUplZ5){;N6~Hq?NSX`vRj8o;$-eC*>2~mXn+ed^daR?c%{L#Av(Xm55PF
z5D%IOIiGS-e6h>$Ja!RKpIxp_f?|mVq$McXm#~WvPg2esluwPG6WE^o1Ln?zYj`|N
zhO1WzF1L7avoZCAM<efop||3aviH6yZxt^KFEwIkt4y9V<!u>HLtn%ve#VxwA{D<u
zUB$NJEo?(~Cuzfm#e?^lPTG!F^R_mr!gi`Urrfa0gK`;|19oq+4eFN!m=v<Sa>Gww
z!B_Fhm6)y3kZQ(M6hsa~1Tli@t#V8Vi@+pX8>G+^@jiMjAiNZ%$6!D${4Bsm^la3a
z4-8#3kI^T}g@l4a@nEIVmD=n1#LfDe$j-s7OSXFRqP#W3{jG-nich==szGUC9mR78
ztCEwL*D=fw*xtcu$i1e|ZI@6s0LBW`wp0tYlVbf=C~xZ%y}!UJalBvISp(f74X?n!
zy^K@Fl=p1MYKp~!`*$KW$f=VbkZhqmdS?@JZlA^gj{+o)H&j?jwiU8oVp#%Yk)2o#
zy!fr<)}!SoKlSD;=q5~7_OWt+M!;H5o?%s&pZu^qn$>4|E9G;QVStE=o^l{S*RNnM
z>Nz3SKZmnH;8L;v8MY>UU4%h!6T^@mI{7g}x+xs#&46?o;1<F-TVPotd3prtV}LZ1
zww&1RaHJE;$tyvmKMqz4jFmVB@q<l=z67;ziU;?-@_&Na<Z{yV%5@M^TCXVsaXNA}
z1^-yPn_)nO>$I!*KT}y&u;H#)(3vMcDvxF<@M^ny&|Myi3G2G}WDgszrk0p7bZGuR
zqeJtT(P7;G79B2+rh~~aiVmi(3wobh$M*T~|5=|8U$@VnD+AHNK0E)XeeN68=fH%p
z4oB&2peq3Ss~yx$Vn{L8pkh28QjCucE5^rAF(&Y{z|x7H+^ZqQn4l}he4T@ofmrnN
zt%WW(Q*Sk;xT0Ivs^M}t(@55_8cEPK(l8mVV>A*}mlV`WO3UZ!&hRdwwNI#P!P-xL
z5Ug17MFcw+!l<SUjhWIK!T=Pj<)6U9@?}^|L0hb}d<6>Tnqu#U!T+u1dqy`O?=2V%
zYns=aP6a1g+<|^3o3Dg087Ch2(K89@T+J%fxi!Ov;(s<Qmq%kXtsFeM8phuvc$sv(
zOxJ8z#U~y@M+v+-#ix09qGL{f)6a4efvZ?1`sBb~eAmCg3*En9jFsA+)_~qN_!;$S
zcyu#(US_Ah@;>`Mvh!)ykGbQ)_49m!zN6lG(No8Se9P~Re`GrT9q@*M40C@Uw3XKz
z7_^s)-D<c#9q>)q(4f@}X_&{2xH@V5{Rjz6Z*^7S8HWSAakUZb;SVGE(dNbiS|ADc
zMQa{_*FWOnHF@Vt%{XiPx^^7j=qO#p<9FT_G2QwAp?guTGIbJ|4wjKMF-i$pOm78Q
zci~erflt7VgMpU5mooRM^*5#m*=U4(`Cs8?{9UpoeUWT|*kL6VLIkF+b=UAKvklSW
zfmhiQteO1TcRory@JC#Mg&rn@U;dI&$L$cq?K9h(Ivvr8fg%3m{|26@Ek|e>!gwku
zm*jFX_fYu=>PLe#ocroNq+zdEU&Dp8LCWk`DNs_U;VGbDA^CHN{k|ZD{}6sbr|lDO
z&Rsyq=Yw?oTX{5#n%*4N^$9j6I^woB*(tS`jXd{-5#1mj{5^gUHzE^BL8JhiMut|1
z_t1?L8h0|p0Ib0}Yb^V*p)J$f57J9K_(N>Av_##xe-aaMv%j4DkmJL(h3TzeA@Lvy
zLN^RUGkcTT>}^E7QLdzMaxB}d=9T{FEf?V-deEhAibJc_*rEH&<;r7&oPJb?6`2Pa
zJSX1+fxyX2Auw}tK{>7|%OyA=@g*qzNn4JP390Q65qJ62`)2!D3fdZzVH}%b8k@n7
zWGKxMqbm*e$3-qF9~oj>VWM@s%hc>SvGvpAboiJ`NPk-j<g^j)V3z;741#$$CD$q6
zfbhkBWkA?63muiPkt`PvG`tiXG^G~7`-kDf*YEU^y&@F2Y8H(}U_=ECpE=HE6OHxO
z)b`R~bviD^{?vBc@tTPQ&m{{XEbhYA#{!N%PvC+%7Ws@ycpw_o6xUXZ3?V>sf5JAU
z1;br8phv{w3t8ML6auR@9_u~cV7?VIDlm^6>pR{s8`CA8GtzXuM9O<;0~)8Jgh2#e
zn)*Cv<PXY9$F3)VUg7m6C3RZ@uI;epB6ZuGSlo{FHlq1z+m-|=b8R}OHYUendNw?h
zAl<fYKE&qM;wKK<Sf96HpWC*D`qY*430l4I`DU{I?aX1A#3s4CQgUQ!J6k+XIfd&}
z-nsXd6KO7AZn{)%>J<;ZS+3?}@Qhc*nh(IoJF{gLXvu>xgO{d=2Qyai;=v>Ex?F`Q
zt+}RY<tl$rX*Jj`*Sv!&wKVm0`ale>KqvcI`vRUxFDP`A`NS@eY%`gedO|s-r8e7+
z;yEE8oLSwCD@|?NaRCQcXKKDto@RYqx=GoN`3ACsEkxDtU`seqTf?q7xLQR{2O`SV
z6^|PMADGfxwzMmU5Ykw^96!*Bf;ltM4|rUsp7J*SaRb+&uX`!maT!CiotI*vj~?T!
z?YK%4tZmEh5J$E?Uc?ht)sItJ2t9sHxn|fhv5>UV%nP`_V!-nu*9_I4AP<E63kFYi
zZD&g>|B0)1xEa85D-EPo-Hll^0xBTe+1sO<VK-ac+JR5?1%~aYtY8O-`SEg-`9)~7
zTs8l^@d?(G#$C6w^}OR%5#oWP0h4&3z1C-Fcw#!{iU*Iu@IG#Y$BRbwXV@I#0Cb}D
z0k(D@?6T<1KzU&U0(h~u8KR5|!OpbO8HhE|#=9FAoaj#6`9t4c82!D#jznbi?a1^l
z8jE|}J7%&RWOf%F0G9P`M*(osH}o&>nkI0=>*WpTc9tuz>_EqmlfNq-*!iz|&Tc(t
zKEV8B6wEw;`SB>2yA%ql)KtCCn`0ku*ny*6>Q|^?bkaCFX$nt<<QKoE2>HY{-zmU#
z+Jvug5`ro&=yP4)*<udDurrK%=0TfRT3l(M3t-B`7F#VRKN$9gaSJ76Uh&Hh1D(jg
z!tnbe?uecI02E-zl^z(!)NIXtWA!lT+b{9g*E1jCPgoT=g<%f6?h8hbAf!(oPK-G2
z1JN~E|J{aCHP%Ys7g`C<JLzrs37Os?a|2S2D=o3gm1xoX0XN*`k^cU_*VUE(?XLE+
z8BpISr;z6M<NR2+Q8;@B+dJI%JHPObo&P{bj_npGhj6owbGLzp#7K?Xb7rGRB9+av
zjdBz@MY%o@v>j-5^68o@5Z{f~WjS4W1%*xkfzHFP0d}(`-5pE=w!|pD7~gr5uge7L
z8Y<ot1!8%B1Uc?q!rNLl-2nWSfFBOx48&dFbkQ^Hq?4tq5EqEpw;jBG_}6w+tUrJn
zaYs;ku!z^q*DNP3Cp$?Vh|hLie166VnF-=!P%_a)`57aleo8vgKz_z5$YkPkto-D8
zT&4M$PQ~596$==e-J$6tYY&Z(u6D@oM5crdPMGKAD=miQ&~f=9>LAodPVWv>RQZtE
ze2INT)z$a~th0=Obq5GNV!b;YYZvppM`P_`gTFfrYY=*h9JX7>dV3J-&L9bfv99R9
zA)Tw(JO#f3rFUM^hv^i3@Nb&t(aI#V{*@TtwYyi-N{frwdF#(Sy?q_htf2kr^_ip_
z!~^3~JL*2rAnl_<D*x2#ucdQ%O!ZTP{8wctslY96dk@bC4f!rcq@qhqI(+9X;(@bz
zA!2=M^)28-Sbw_uR{U)CW>!-m0W(-le5%#6`gT2*-;d>6eAL3g2=BqN;(@=W@_O;V
z1Tlf~{BU`|DOf(e`@hwAu;tYJp8r;x!3I;)`~SJt2EVekk#_W2L#_Q!Nc(BhKiR5s
z(I9$m!EX_U_^NDj%6HzVBhrr>>L0Vp7QU)ib~bfk5D~0wA*+lvm%1>B1rPHK(k8#^
z=`AakrtkbJ*7~roW9)Hx+|L(0?XoGg8BLlQ%~e<SwGp2cj|7M>g0MQNO+RKbx(0mj
zr28l1$Ktke=-JA~%l@waf(-V)kX&%%2cRU^LaGJgBgajxwxNxJtzX>sEU<XpKrNtJ
zm8dNG<$t8(p)t2h`B+pw5^Y1JWpYH<PZBt;uMKbXk*&Tiqw;|XCO=iPE<dLwKgAW=
zInwq=e5rKtRc58rWICcHd#o$$oR;jh!0Vk5?t<jbWOz8?PlCUjjyFa&L^Wm_8nO(H
znMSC#A<L+=nv^zH`Rl`#gTFHj%b*NOt5In)BGkVPL+#XIz~@E;+YI=&A-s-0X!9KW
zorS-*;qP_$I}CrXz~6rOBN;o+sToh6gOEZ<A-n+L1qiz#?1r!h!X60wA?$~65W+z(
z&rXw=x=sBdYG~N$1o%sazxkNs5K7D1{W}rE@VMUlU=Dr<A5IY<M+nv{-8typk~SC|
zgXEDh7<cXRbA!<CGcIhm?_HpDj*Im-G$sT3n55vCJX^@d1c7(%gZSI<Hwb@?nWmeL
zH)NTBKe6hIjC#Kds~T|&!i<d7rvS-Dp&<-%XBZp+jf~l+CgmccEN*jw7d^UeCj=|u
zZ#Dc?z~6fK+YEoT@b^O(8=FL+bs~fb5GFuqh0qG21wspiW(YxWb_fu{<Z1^GAwPO-
zbQ-+?&;9Us82(PX!p0`k1XzcS1xt?}hw!{nV|N{Sb{DuB$Kx7c{R!!j#zzhHy;33R
zL#MV8xpYB`G`YT68rK-9Ct~WG<;$h`eVAX*YL&aZHCp4hjP>WFnV4l<a9BRnm~Mhn
z3615N;)4w7y})l$o1s`^OV@2+8ogOy@yh(9jXgDx`-+4m_zk?plFsQ@89>sh#dCT(
zLX!opqeKUVI6VSmQ-qoER)BcDQlLTtY88mw!qf}VT=chzpd7nhv?>v2DkrAm^HuhI
zo;`n>fY0p-sHqZ4^~&+Sp48@m=xLTMB+k<=8MWg|D{qs{RToNw2q=r1nfjShfg#;~
z6Ep}&#xQ&^tBAh*HL(Bo@nHXF;{6zV5M6+gSGe32m%nG{=r;hMDGA;kN`^-f>9@6R
z5J?nNW7Im7Hr_T=bxB!t7~3f;m8Ml-j3x$KGFNhy#!4U;=B756_$!ktn%4rr%K!i*
z7z7d*DQgGeojomL|C3-G>Q4iM?cE2_Mu+7WFW^-J)n-oru11^J1oe=42|!Bi6gjPy
zba>84723T0|G_f))#|s^lCx^{Y2_jhaog3Z`{{~l9G4a)eFBNa+BdKmO@}NsN;|37
zhgqR2(n`+C5owOoQXJM(f_F2pT1iPq;5TiKa~VK`y6SUI2sVr-j&p<y62ftg4}8?-
z=v=`7I#&h(I!6FH832BHq0uB%B-Iv9p4G;BjT0syhczC^fn4({PEhemAOUiRtjH(y
z4HyW0Sn-=dgnDs^O=C-ja}AjL<4|s;fqmbr>S;_u2K`<z$;!~an>kjM9o)F03be2E
zML_U%_O_(!cNUIoGt31R?>c`A@Tkssm)asRi@pO{y$-=3MY-rPWE^l5@tOo345}rU
z=-&WF2M>R#T(AVjVY^RG(HTX=#6D3^eAMpmjW~>C`BM`-4`FF}wla=o;RR8HPVyFz
zav>t|F!Z3p#iw)XJOrkX&wxtY-rR0l2~Ag=#d{bW-A+~Rray-X3rJwaoN|CmyAhYd
zP>9ahE{jh!+x+q*`qvu(TW%7P;S@+4Edn6FDhn=}a2s^L-$loN9jY%<O9nw&Q;>Pf
z&2K4qm4c!TNt4K1zJUnRrgYBmbw-+aZ|yVbTp*&U+XIY!D4VZ+|5`&fPcqH*&5uPY
zor7woxuC#JEi>7{SEXN*c_q)B6yg%RjIC=k9@_xo#C~1Z7Q<I{nV(l=3!OcTv2sKU
zJg9VD1impq#d4gBs<UAt=rAj5EnJa{w%m&I9di*hF6fO1COvPECOj`lalghDZv1pL
z0k6-~WQ!)7UGyd>U*x3gzmA_V=opGm`Ml{GD40rfg%jy`X$I0U&4Hiu<2@<#CyB!}
z{Fli(TK5nczu<|%n<yfbA*1{k>{08@LE#5hF=NIIcAbP-b({-PfE|)`oTJB~5kG=N
z+%ilB;31ML6p#|L%T1~+YHmM_ibs>CD%Dm_vV!|JnZ}La5;+<1EGsQ;_Y*k*urUK>
zsVDmS(j3-}H!4>($y`tgQ`X;_*<b*GZv<e|AH)}{t$mqhGoH(>?k4X^FaimxqbCs6
z=IFt%0Pu2&zd%DlASr`n^1#cB#D>qX6IX4gtBjyLs|Ur$U&i^fcDE)EYH~l#n#*ys
zYIwt9Lv?@3doZb;RXs?mySqF%n=R?7TBTI?aMFyIfF4^@PuSkw7)^YAau4wZqKF?O
z{*;zLY!kk=o!(?5ew$-(Q?V1OcF}L&$_DUL{flZq=ld{((i(%KKjri+$6z4YMF$uc
zL+)~=dXSU8MsoW#M}LC>x_7^pI|yC$oB_ukcSIf5u2)cdRGT#k8AR7YwXv*n`irSZ
z>#rftK8aAk$fPaB4-}LwUG;j7C2#@wW<B!FOE=(AM^!$TCR?OC(qyZ2Ynq%O-^OYe
zk^Qjpn}U@)rVbC}qIeugdgunm5(#uG+8PyUnV`v5oprJ3J8Y598pcf#IyVJaF|<HM
zAv+x`R>>sooBFLLjKy~%s&R;Fb82szj7)B81t$N)lwo}S!>TiR8J!NDuS_a7`JI&p
zI_oB;DC9vJ1=)~CPr@jG{q#D_PS&@JH|qJn0tNsq>3e$GO*7di{0U=);B{bTKYi&&
zTvkZJCg!px{A}f2Ibuj{Pm4H$CUlpN_=Y_YEk2RCCK$tudT^y0EwhtOM%@dTm-x{#
z2Q~g{IM5*_gLkjttxmKxVYs`8CURVCTOgx1)2vAIU348tq>J>^rRnIST>3h$uRdlE
zUPtp-1k@0iz`n?qVx9EcxMW|R$kZk{)MdIJ*@r~_HP~b&_ngLbvZptsO>#zB&X}kZ
zdK@%um&UOwfGmH2f_@j>d}BzP(1mD=#*BO5ZGvk2wHul9Wv=MJHs?Xn)H7<yIcT(6
zuwB*7fR(;8dAQNHCg9iy9z(RuK|>+^HMM#EbUk{KCM?0>6QJNY`ZHD#zcvmW1#L8c
zhMYtjhbyZbLQ7PE!$qfNFvbq-1wpmA+|;I%>^i#d&r^fCFZ#w|j;*u@nfxv-Xzb~p
z8A$nf2f}oH8XCp?0s{KK8FcF48gc{MDlq9+n}MSZs*^l4NFEr}I*Z#|1a4)~<9xE#
zsTa&IaJkozc?hase)#ma?ac3hcKfmEEqkyMGqLkZ=QWaRR@3=4WD%>nWKgxOQCV}S
zaG`3ZuLY<Q6v|*~v(xEh+AmC8)ANx4NvfkCFPU@n<MnbnBM#z3J5NY`lRnywx0blH
zjaF?V(>@k$BYv_$dA;zk-+N(xL0z?Q6X;=iLerlgfJq79X8<R&Yad$5wWql@$63P~
zJI7?ln|nIdr-HBM0F8bQ`lLE2aU`ma3&a5kbt`LopiDo9+@-GVQ6K8pZ;b=z(Cav@
zle5in#Gq4E#p}IbAUkLy@D8c1Wsq-s9j`m#tu{w1e7gu3^$5rG?d0KMAtk3(Q;=$b
zXcDTJIF6vn(g$-837##a=9=l+i>Q$WM*eaMTupPEJsDAeUIx|$Dl1_sW!Bawu&0$h
zb&|0tquQIx7}bzNHYam(ENTncOb4%p?uNnt=xtRXCFvgKIVKXvATrJaiR8OUS|_wN
zf*u-Tfn-_8CS*AB*FXwhSr|cgu>-%BJkt8zW~<3Dn3l~~N7%B3nh1O!t>v0Yi2!aE
zdivEsJ!_^q2L~g;R%YJB+b(a6p!sYsNH4A%agAMyYDPV!M$+lyk=A&iNX_J_1ybrh
zOrh5q^mVUVLLh+{BG_^TDF&zqTIMr*m<n{!lL#jZHdbC9PyLwA<JAUCLv8eTBNauH
zY~FTB5{XaQ%yaUk(vq%U#pvMKeBeZo8xwRDy_N#2(NuO3nxmWXSr2s9-sZT_2f~FO
z42WrvwW!xYbq)Y)l@H@aqhPqm5faKKzV;Ben;GTJ;QZXcW(|{xjGv%@|1)vK|A`y%
ze{uzwFMcrW-dHxB0{6xea&N%sSN9BiIQ{71^oKm0KVidp=DPRsb}{J=-N%_JHoO?-
z<G4|@@200OXd3ftKtH9tXQ&<wEVGsLS1p64V_kG!67%)tYNfg#N=nhGC(xVePq~7{
zVd8ru^IV!;A=g;?7J19o2L8<vL+)V8ySBC}C#miU%mQ{44{<IhotuZ&5Fux2z<l7o
z0P=Vl3ZRd2fo@DXb7L%BpO0}+%v~Rba=@hvfPLsj`w)+=2AF-bbR&8xiQwnTR^0_i
zpuZbGOxu4qGnXVKo@r_;y)ZT8l7uNZClepbb^MW5ER!-V%(DeF1ed!~C_0n_a~yAV
z=jG?1Gr%!rz#*k*zI!=AVy>tC$1ox40d?A~$>%h=Q;SaqD~~#tX!&i1^*Be$bA`<v
zF3}I6@zA_&;%8&#ZP2pfi_TY?qn-3ADA#woXj*fTePrsk=xy*Zj8X)Bd9prt<Z%mu
zO&udI;_3m|bZdp>L1_2S6B+&Hy#RA-Io9Q>G`O_**??YC?l(EEJS_rmi<Tn52@Kr5
zXCcJvnlJ}%|CZ0c6pLTbrZpr$j(k>Wk|2!RcoMvveH5ZF5m9r`(X+)Ib8adVX$hKr
zS{fJ3u+SWq;T_K`7_FIxFCG&rr%~<_F3QBu1WfimkLwj0ptJXNoIWo2W)MoCf9b~J
zzjp^SqG>y3fZz2jnAaj(s}$v=2QX{TE-1P8=_hd^Xx<YLX!9DduHC;0&SyH)<a2VQ
zlP(5mx)vUR+X)yKfkdmhXPx;p!o?gpvKGwFSpZk6&v6K!jPM!o2yzT@bkf!d=mnaf
z+g(o$g;uoLB6m(Q?>QlTC$+gTBUz|#mM7I+VXM$_p;hRJt_O?po5%s>3SV_+-@D5D
zCdr&~ydesgce@O7FFE4t#0$J2ut0EB`M~7sGD?w`e*+cA=y2x|4jL%)<EpyORCrOZ
za<y~QBQCeHsN-LuEs&3AKpHBi(~l;GxPx9`YfEP&yx7bHhQkT=XdZ%V@pJHc)qamA
z-%@EVO^bLNGNo|^bbYk0C4L=<qW8kUs&lA~1?W2ltOax#0?@C=p(vV}@hcAb0M!B~
z-3I(Q(#Txh5l(Q?-f_6#7QDHV{@XYd*T|5esJk%J1nkhcGo4e%oyBMTX?))BHa_Qd
z;B(RI@GO5KzMlo-F0kN+BP@tG%z~SnS#aAc5Ipl_L^lM)!R<ZALVhpZi3=0L-X2VQ
zItO8pBj)VHr62>h2Vd?z2RzgkaT=b{JlEV7aW=S6#EgmRISobj<gn;j{17re8`*g#
zlmr%?4{Th73vU^C9j(NcEbS0g79jv9<6gcMVJfh0Eq<Yetzync)!}!OR;5$KI|hBI
zp^hu>Z}pvzlGcX41}PUGiG;sA3p`v&@F<;AE^dv2zh#iM)eTu&%OLBKayvX8cEV%h
zYIxMFhZhe*-quGTZ|f$=+q!kV_W*LK_fPn|Pu>gWVJTh{iM%{HyuGba-i;RTR?B_z
zMdf`_N+v$!&2eOsI@!CC_ip8v%9qIz<mqT!_Rq{(D)+4{Ei3Wsrw2Pyj^>k=5Wu8{
z$qc|pM^%w6UoPs31!7jlXz@8n&tI~I%dzXx-g~uTe{k;;&o}8ZS3pjK{NPE6z82gn
zkm4I-@Q$8i(p&ZIQof!k2VzgViQo63#T9#+#QaGc8mb{a(wBP7)NLA2E@?`)miks|
ztJ1>Pz0Vm8b#mg(7)U2EFvvpPM^H<xe7Ll%7`M0X9bDj-?yhf^E-v^``g;92>0=+Y
zKvq0torSDO$a*`lyR=Nl`Q9P?DAjxKH9Z)_fM_mvYVV)89|C_Y{Cq#KltI41%YVKP
znQMN<vm)sEIZ9iC7Vp$oxy_l%Q1X_OAi{XbSTX~|S<)q<6_6WN0Fdht=DEpY@JS{r
z-~~wI+}cSu{TA-q-vSf0R-taFqb{A>a+X1skw~aF8X;wqQ#(2G{-e_3kgq3bb6-PX
zEq*05!KRLL(9AqM4iA)PsnzFF&!pXevJUF!hVe}OJSc|L&vz)QA8_ova~Z;E(?Jon
z1s<wQpcC9|W^TJGi}XzNh%N~@D`V(N4z)wcVA^y!h0($tqJuoyO?Tpf82WF+g<vun
zh*cK{qTE!*S7T>$QGlx-YMrIA^ESbbxx9MMl*ODp(MfN@m&}Nbrz_5*t-4!_Uj=RA
zd|9Y)Vy7R2*67SgsMWq1NH+;5Ct61!3I+uYNvPdPZd`{mqs_P)fxuhz_2{ns$mK%C
zdaUa<Gp?;WcOhvL^dbJT`l@ktxFUAF9Y9y3fMBWNe(YTVsl6-lu?ionci}jN-jZ>%
zmjP>}IeBoHFMYSyYyy|R*=%dAy71k0vnf|7wfQzg;A<ng<J!Dc!x-Vl!A?YV8=hd)
zV5rsV)6D9`ZoOZMC;m!fQHoFc8vF_H2XT1`{Q({n?gv1yD^~D!yH<euJcKCj!AGD_
z+q8<D)cpqUdVxd+@`+!eqI8!+Bc&U&r3v(ns9`7XH6!@@FC9Xh_TVEh=@52w4?Y4h
zhp?-A@X_Wthg#aHBM#O)wOOg|H0a+or#U+1s7e#P5128{aSmOGewc0*r8eVT?^j_;
z0zHx<l&icv4KFvzeH$<Hxhlwu$+9(SZbw_z8oa~|b7qrqNkC5UAjr66h?rP1E%$8o
z6q0)u2uj?m)Qs_h<~SSpFPeuRt44-KF+Nzw3~kez0<EyKC@=+xNvcny=ON(_H>iWi
zpX}Xev|y$g!YPtCI@GK+;Q8Je!-X+H#i&u=yKZ!H{YX-`w4;9p!i`I@Q3Z5k0j}pf
zhlY`>%<+28u^UUBbUYp}V)jxufnLuX{WPC$231cdBvtQOd_Hv=pFe#YpMU7U=c}*d
zS<)w->SuxX0t<e6gaw|%EO@S&1^@911kXI_>Bb969K1J|SG_$DZ)5GDl~z3z-z^<f
zz2`8JYgWC87tC}ahv9Nz*f3WDC+gPN%g}b}_852XfIH2>PS-6*MU*>OhCfN6yr*e6
z#RIqb&}6XEu1X_)P2at7jk4Im9YJm0`fv$0m1vz~*F@Rg4qJY4I%!+*_U7S{kw!*F
zn<s_WC9-Wz+?$C2eW1^lD}x%quf<nDz~%=oZQk2;SZ*D=E+6Kg)3kY8hHE0-!vO0o
zY)8ny2bDZd+9rYTTt5t{btvQTjkf3Q;QKh}tb`uSI95T|4+fb2+J{QvA&}CFEyMe=
zpyS&zSMAIL;BtXkh8n9{v%YmZUTwRib^HAwpG(>@EB2`{F5~E?E5PbZ-EFMU;x}7R
zgmp1ljEi<=>Ougu8W&&G%yp=j_dE|pA+Bv)N274e!Uc=o1nBsoS-=CTzh?j?397k!
zKv(%Lx9)g?TUv)+FFlM!I~ck0Dy&94E=vzP(L)7yxmQ}?(jm2ZwPEyuu}HwHL;Hu&
ztZDJJNSi!fQzHY>E;`VIN~ITC+G0WL+FHssnz!O40^7mq(UlMNsUMn@(@4f!BH6+R
zeh`8`bwV<ep%KtfFJNUPbGDxPnVy=fr*`V8g?eh6p0evHNl#_ysd7D)t*2J%sa1<`
zm@p#?Gk{!O{lU>7H5Is<16`=s1x2jWaKt1qty6o#OsiWTrG5Q+9$SX1SqEira?=4I
zW07qU4wq!D(>fX;G~?~wP|3#puz|z-6<oCCGFtNoz)&JPv*D}lW1|LfGnMqX<_>2z
zoV7&Lx!3S+(lWn`%wxX*(F6c)?Nr4J81CJS19z(8S(ezMC!S^rHl(MNMF_!>c_<cp
zQ4GKUFG4_=1}TebSp=7=lJ}rwu`2eUG_*xv!JkTYn3y2cUR{JxAom6(N38d;t#d5n
z)K1}jT(}6z)QdI`i<5b)*@n6f6GT?$wji>)Xa<pGZP2#QH4TRH0kR1Bv7&S%cm%9A
z?H#RSZ%C>$Lj2s5JIv2>M)UJKjF+b&FXJ`Qqj?z@Go$D`SJ}m{Wy7i}wcW<QaT@B7
zCZ;O`w^d#8W`Cj#jNcSjIc_CrF#e6Rb*RcB@O*h?T#@a_wC0<9O0!Vnr&|UQZ#lBb
zu7K`>JU{(TC@VwHGKW?IKR|KG74lVqZe#n~-Sidwh<;9Js+eEk(oZ9}Lq`epg9Laq
zVNg3ox^0)mZTMXu8A`e8&El1QzDh2jm)!VS0i=s;r#ECb;Wrf!F%rMYZ}V4)xHeA3
zTwD_Xv?h6%SRi*X%N@wkbEP|cn$hW<+Z6P|SmUxl7O|0hM~zfkd6)LiUWSZAz)hdv
zs;R4zuS}wASv{zaN6Ir`&<zol2`j;^zlFog7s1EoDqy%{U>ND*{{oAFiV{o-icQgV
zwkvKiqOW-aK#m-OIS2rKr>8adoi55o%DI}7)~0iZ@ZrAhfs!(&u9{{d)XcvF<xbVK
zgV{=Y&>X3cV;mq9ZD!R+!5<aS`6gEgt~(hdo~`$$FEsh;=CkFdi>W7q3r^Vy;;t6b
zGV03EVGlNYq3MWtFx^_<5)VEanR>$Q%@A-ic^du#OSaiIP!&y93Z{2$SF2*~Rhnno
zPE}Dx`q4L#>YF%26-hwaita7;k)NRvLO(-ur=y?!5>0pLmuP74M?xxaiHzRLj5n^n
zt^mAlW6Ngx8z*~%w-_%V_GBNO(bu7L8bT{bx!r5jaac`J@V9)}LR9LBI$VrvW<3vc
z_fwm{SOD?Yan{)G5Z;iau1mIf;V-3g1pPrkAF$Tse&QGm)~7o9hkN7?uUfA=-ycpN
zyu<=`_sIq!bzU}`PDZvmG_cM+><+B&Ta^AGyk(g;y_IU7PYX^#|MJXu5jsmRImLEJ
zdhL9<=$T?*TM*ttsum2AV%*|Ub1x`Yhomy^QqId4lbr2VZ^m{DuFP||a@;Oi$vbq-
zERKUl4W8!B_N`gCFLfGPmEWwb);KAdM2<$G<Ig$@E{4Ja+Kg#OPmprBT#K6q?ZAn3
zX%B38s8gP$ELxX`$~~z9L;B&h(6EZ6P{2FE;xQi&WapY8hw`)7u3OqlvoxVXC(223
zghuMwB)4D9Hjl+>!5FM=Wmt9Nr*`kqpUmXAKjPS=6_~|(ymU2K?J@dWc-1u}w3Udw
zAlS^WW#@p}jj=2Jld3*tQpCTOlN09BqX7<c>DfNAi{kMG(w};!NPU%u)@)bB`gQm-
z7$*9Tiyc6K2~w1v(dyC{{lM@&i)#^L{ii^+x*_C#vHorVs;JKexv|3B;ZF@<LfmwY
zD|o;`^x#ipR`58{`y;$^6_oF7*^RnkC+LQkud)j%<rx(#a`EDJ+Fuwt7-0^1#ZQ21
z;i8A(g&nY3xbapOJy?iW;yN<WR31rrv(j{Ypdtq<NO`xwN#9t3Ral|cS1U3g^AMut
za#Q<?VAb+-+8?mXkT-ic?*|o@Bm-B`pM%){dbz$ATv~wtx*kKL)uY8f!8~T$Whqk`
z(xmj%=0<Z?!xIq#)K#9Am?a7JMJNbWw7~1Z2Ap0GzH>H|T&2g*w+Ur{l5fDeU|zv~
z>+aT*II#dquPW3@FU3P*S)oq$89}nklPZwn^k%3+UqPA1T+N^n#$Bv7?iJ`UiB_}u
zR=dFA&)bl6bW<Xl4(EoJ1#ltOO$Maf*rA8J05R`+gNypRurf6Zd3`**aXG13AC1;5
z!BASJZ#cNfrP>;SlcKeaJWa->5T%^wS~G>vqz4yI$R*5di$rAbl{SZ&>rtoCkPFFx
zZAiL-{u{hwm71Ya@)pJ8vw=vG$pbR%Oac^YGhk(1-yb;*aY?VAR)lSyoH~8oLvN$8
zq2C|DrD;8S7<--tL+h%vmI9@sn()9?Akx-a9YtFA;v4+&p4T$aKJTslDf4`%SMn}(
z9=@Y5jCv7KITcJbm@ce05U~fdRkKm?CE@bn0G>PBa=vn?6d-C96zUdVe+1z@crJ}x
zQ9hpG`#6&DQRt}&wpQk08r3_Y_`P)lols!Qo9qT=Iv!>QwTtjDCMQKue*yZF*cSZ(
z9bU#l60`o<x~slcH`D=bZ<<QpOgZ8kh){f%d@6pTX?1yKt`>R_h*4UTT*Hf6!#hv?
z*6K-0v&Bh2z>oeM=DKVh9_^GFkG<$cMoO@r+k90s7O@5s>Q<XInB}DSprfp!<^W(=
z;@8Wr3@e)}V3h;b>WRTJ49OpS3Al?LA6d6TKP)9%=<mV*ZR61E!80kjZpdS&BcRwW
zHZ4#z?Tcq__I{2m3<ai<){&u5KAPeCDAJoThp$b#7CaVXsj#Eph4)Lab*>?K8eI;h
zl_ZXSBfRadU2Jo6vtYYnHPlr#m8Jy2EW=<_z)hzU#1CzH7wW@*S#Om@iHD$Ja1o@|
z0@_m$JVisIdLh>!1s4wrXzx(ya9&_CJ<u~;^PwKr7#`gTxq{}PD>$tmoxl>IfG%7S
zwz-+(@;dednV!XE5qo7)DF{+Jay8!QDGS&o5oE%<6aC`7h^smeduD6daJSMNp=4jx
z%G>N37o%pIATooCX|>-7iPVPdJIFjn&t|*Vd9|*UIo7AD-Y9UFr{#Vm*2kd};Gj02
zSdUlikOZZf2ODMbA3{hl`nJDrF_OQgF+x^<_fPfD=or$w(}Qkzz7m1&lDrM9M3l|9
z;m#mV%4!o=yLv{gvO1O1@q=el3?O$0M?^r$^d=x>J6?4HoKwAtEx!Q0!(w<JN=+5I
z7i`+J3Jtg$6n0~Dug@Um_WA@l7D)Dtz8tfN^ugefHW*D9LDO7)K(VkI3C>m{*O1Ax
zrD|^`@}s_5E!Mw+^T13&arE<9nq$y*b<2*_GvqQ>!N`VwgC@md+mW?-d~M*-)=a+6
za|YB*@5(@ocL{UimFCZ#LF0rxF5L?=?Zxh4+)~+xJnCZn{Ryna9*D*plX-{=U%*M4
z4fq6N5Uec{d1r}o)g(TFI#y$2uEjrX!3~(Q;?j0M%1y7n;TSvuOODjOZ%RE=J7ARU
zzh*}g((pHI$>J24mDkL6J6*KQzzz~@x|`V+TbnHE=Wj)&^BNw3jlx}j<(O6m1yOOU
zk)_06947TJBZ_uWbajgYcev;leQjQfKx}68Wt#B^k0q;%_M!t%C!heaJ#!TLQnnYq
z8U?u><RrLoeHP}!MyjtV;StDA8`JHgSHayq)T>^8U)p@BlyJRvvm&{m8-KwysG`&p
z_o{`1421CeV8YSsQ=~i63I%z*lir7z;RsIGKuD*gRSUAU*JqSOC%q&1N;XA1&O)mc
zzv9mf)Te4h?qt<zbN9LEhpZ8QNRILIXt3S}kY&k49B1i$&<8&tzwRTpq-9_yc1LzG
z*nz!&#qDZ+#r%i(wKtwGBzDX2$t-gL9umTvgyjVK@Cb0Z4&1fYz}%<j*-BNBD)*<A
z@zo}^jIT6+!}hl;K`k_B^NUYhMMdK__qE{A%R)*P-*q#}bre}9kkcveswF+WEhcFp
zIpw<&L99=W=-S?lyZBmZ5;<<`*kB>uwF_co!;*VJS9}g-@L-lajrhCpQ-t~xn=jJV
ziy=JOJ@UO-W`q9QSj5eHPRPQIg*{#D_nJ!jiQJ#!Gqw1xMnFs6#Gf+#1v5tzYZWxS
z^cedjLhh#tdS`5oK{<(Jfrl@cjs&7>=f}t<%^}#qs$K5OGIL4bAK0-3J1+boyO`X}
z&Q<~k&S(BZnnT!RA<KXr1WD-g;bCqVv8)8vFt*A|SS5_nEC>F!tjU2Jf9<1~Jf3!b
zIy@Su!8_}^!WIF|&nsg6MTkCc7d;<iXapT`BngCv5lA_L$IX9@M~6^Q&f|((AOi1z
zj?^|LXdA(7p1~~+Cw(wdzu*}U4T<#x%i{7B-g?rTY2GI1yXbGP1$lUmi$15vhooef
zKRgWyP<O7N^`Z?pQR<vggy-y|ipqkA>>KTT^0tNB<S6trfNpg)>^!?1kKGu3%pK2g
z#c6rGc)*aZ#s#cQwRKv+XNb-;qapz6j+`e<B!w2FQ{~V~)p0>BJZI|$d))GgZfJk?
zNw__(hM9B$epRqVurVc8HG@745NZOg83v>qsm||txGRUgfE)QGXq%&eSsHWZ@Syx<
zD=pRwrw<nnRMg>B$6Gh$0k`7yi;)rd4X#o2T!a3lm6)Y@jTv*2jm;hX4UQr4P;+)A
zUnEV*mg7iEU&r$XX_E56kXmSg*|l2I9r&J}D^H=9F0hu~xiHKKZ+#4o!`-CiI82u<
zz>y}^VL|ujy)<0HDuUu*AEwjiSP3-z^gmcs2omFA9+&?@U#v{RBW$9Y5jPW0Lam6K
zO+?e1z3F^5@k`%pTpCe35F=HwBW&xmTuW{B5Z4e(MDG$qaL(VF5f>37If>Yq6L&KL
zI~edi4FVDEdI<zI>Yz8r$Tu_4TM%?A1GR=g0nDU>-4auY=koB3os&dqb0f9*=Ytk=
zvk6xXDE>tBLlCv)TExfKU|y6Vx5t|i$@g-#Vm<EnLCZ$59v3@3?NUswEk=&075IRu
zHt8xU=|++Bt0flI(PKL;D#tmt7}020I9062qjL+#N#+LAl60VP7yGF<M^Cox$c6-O
zx&hTeEZ*>)YiTvb1Z1Fp;33Un!IPO3f5FtDjmBDz(Vb3+0d*))2YtCnK3lTZR%<cR
zORc7HB&so2YsiU=2;6Kd=>|KEFP?>Q()1(n59_~V%CdQYUjhiFIV|F~Oq?sllPJCK
zcI>1v5YcD=<cUAU(TxKDofJKIu@O=bw_NUTjID3q9J!=xJKI&aiwD{RqSDWAod}Ir
z#oaF+h_%<gG-o@`E@<OK@xW2>kcvr9yF8BGcOLoaR%H9{rQ43kyy<knPQ>1fJE2QA
zFKJkDX9WJJV|3$0A~vjuyLkz^8==%KOHxh;CiI>Daiw9o6MMERhxH6hT1rXxaq2|h
zR+GCcxr(l9;2p*PlI_{{0P*IAjt5=DnW~a|0oP1y4l{06{NxNy{2UiRJBc2`yvm*~
zMGwhj@MHbrQ$ABO{=j(7q&b0BJo8wtd^J-TSaFMZP*4V@>KF7X1LLIe<!Y?rH!96W
z82PS0FwW^wd_&-QPWNUT%aybkc^va&EtN4{JJ9z6CSpH<>981sTw?S(`oEM*iW!#_
zhPY&Axl-L9BmJ&&+{$v*gq+fkoPv=7h}=w~S~DVVi3!|_oD-!3dl>5sA%RoxX9U*s
zqxDJv{}2OBMFyGzGA+gNy^+X3amGM&IpK6L7!*)xUH^jq2g9#2qSV$ZPo^1kSaar3
zT!Qba#0g3NL!#%K7+HIP>smF$_F&Legy~ZQdR+y9u<6r8s;le%kHgjVfw9x43m@xX
z$A`ga`v?EX^hy5)$6=Y)YzJ%lT(FwPk3-5daIk>>F!ReMSpPB*Ho+<!X}jd(FP&ih
z@qB24btW_X>o7e0i$8MuEnIt%C(<aWqH<EHI)`!};95i=o9V(yX|lO$yo(_q(3w8g
zexPmm%btIGhvhKXmjQM|9DNl$zsj!_sRFqa_+90sm8GMm$CqKk>7>uz7o03@p=R)#
zU@8s9644Rq;HQ|jLwYsn0WD(RPtrplOv!l#ZlLXc$WiX$UPk*YCl%05sd)M(3fOd_
zH`7{a#2*=mT&ZRzfEN)MNA6K;1a+}mnxK~QVDpXR*&%0panSi5ISKf6{9GTsbqjtE
z>!N?StZ8-SW(^T4PvDeW*j{l_*jj{(Txtb)X!!x!3}l0rN%lH5j$~J;c|3`;jbpot
z6UexZ9Uw>9>*Xl=^4)mKf@Jcxh|^x&!~-{I<h?+@k;cxaLvF8qy-~I*+3Stahyf3z
zL(O&`U+POmz3FDV6p8o0Ny*w$ese4t-(b`X;(_LX87z9flP<Y2c;Fel`bfVP8QhZU
zU1GN5eMnK@BunFz?*j)!5r^3j8Ca}*oqbGOGY7iY$l<a3V{{kJwH$)7Sd-(Fdv1m4
z(XoB^&>D?>=f!RPGj5hfz@$=*Ds2xf@zxs0oZ2w!Un7HOkL>LA{xa;u1)hyiJ^R_S
zn>~-PCuPsq+4B|l#Pb)l8aSM~&S82Nq=A!DXx6!5f8?I`G_Cg4eei~pVu<GjbOTqf
zzlMVRjacSK+T~Ig{SI#A{t;b5bS9^v7dZ*f{>>oWzM%-;`;jK|AK1s4Msl<_J$bAA
zuLw5<;j94HIm0&)5%vkEk+k&MlWRrKqqr&3ZhKd(e-L7g6N3j$yzHQf7k|vA;i-%8
ztUn>v@A!Y%d-u4gs_t=kZomKoXH-;Fv`Nu4)KI*DBMRvNmgFEZNQ#OAA|eu;BU*Cn
zFvf72?)SUd^{J<)H1DZg3Pi2EWh!Q5JhrFtNlXG%<owp!=gcr#eZSxL{l1^i`~LBc
zF4jK#e&1{Fz1G@(3dJng-@T3uB~jbaBlGwMu(aRXGJRn&!|bnP_Lm<`ggmw|*kPId
zm9=f~nd?*ArAf0{ABPaeTIMkWgb_on1#iVDcso`b)NK{5VOnq7X?<>|HMyPE@OG?8
zhXbY$NP{N^_CB7d*(p5HvLh1`*#7XvSPy|SZ%6-H$9}h2<JjspD;>z!Rzc0ko#}Yd
z?WA%DU@pIYH#e4V)JTmily%$oVP1?qj6JV6#!kv#<9HC?A);-+y2g*$f5<*tdsONR
zj+x+O+m0o3Op>D=b!)Ulj<!FImezs8mqti#i;%|hn-*i4!={v9&tYemU(aKM%dZzR
z)>B$nd5}PLG@>_S9yef?YzdQt)Lf2_wXXc@9dEhK2FG(?u2xT<!VN2bL^+8IhBZqL
zTkZ~90Dh)NP#+T|AMc_MJY$r7Jb*qjnaViCtC-3eh}SZeQxJ1Z<#@#FnaWX!7c!N@
z@UUq+_J=!Z+uE%-!pzK$Iy1QzN6+o6t=R9<*x`a5$DN(_H?rdf^iuUKDcMTA`bP#O
zPan^L566BVsjGBlGEeTnM;$8{(ueJmnJ4!kBkNqA#IkzmI-vmCgapR=5$rh1>kN(7
zD#{I|P)PmWVS#X+bexB4QK>Cz(D$hECl#K~oL{e#KwFi+CURa>)D_xa@~FqM_x1#2
z?_w%@G$@b4`EQ=|7&1Vkr9l5S(pdyE<T!#l?FrQ0aG=;B-(_L7OeK~M^Y297KpN{`
zB*ca@JL9{}Ik<PUTaoL_Y`5YNH<NsmEZWH4(MYE)swTf*b$oY~Rbmf2En7+frMx*d
zVsbw2J`KT*LV^a!!bwuvSOd%fh0Tt>*`Sxh>W+1J6lE#|ms;L27L1$2-K92@mZ{MG
zj{aEKt^(%CX!=m`NZNc^%;Rcmzmj=kC*5wZVmI<#`RsVUYb|W%p<X&@^5s%hNSVj2
z8=EJ$3|>ww<E`kb5hxN0x{2*8ECW-y9JZlS3<g%0Em*NfW!t=+TFGeh?yV!o3@>+$
z)2L&l)KGDrKrK3JaSSn)Ez%KAs)ldWI&`YrLfK!(YNe+hw$~}IpY<&|zhd_((KXTu
z0F{F~bGbg{*H>~YBrDoZsZrEi>MhL^6?9&~+vw70fksf#kdEh1L=gtVoc3s#hj&RW
zrk8mOw_|$3X{VnQF$Rb1QZ^9Cv5h`WCd7B!td+eZRiqO(3^9==BlQBXeT#a*5Xok7
z@-m*XkQ^2EVNv-nLn?m3d6yl^(~K&(AUV2ZadMvQH!ZDvALer<7mRGKy&iIUJs8Jv
zedP8;);Fo%k{z|Q$%)+LHao7-&bxV1#8l?PGy%h;av{>zxLV-57p_i%{_aw^`;OF(
zR5^d;MDSltJ!p~|tjKs7US<7`hQjp;H|CDO9@^G=oF0OD=m6}fHL$@_rF7H+*~1)&
z?{;c%5Wei}2X%>->X-5H(Oyr3t;fp-Y}8n5iu9eQ`<?1M+gn0;Og#lzzAl{RR1vpz
z584+7^K@43ln&5t=@&x1e<SC8CtXtQ+*N6j5$ObFtts<HXLg)Gi~aI^b80d<5{v58
z!fmfhT|>CeUyCaBR?`}-3Vgu1&u+RJ)(|J>3%f22Y}-zU`*LK76TT^r3TIPAIs*vw
zZ-X*C#yN9NHrV^X{ttG;SHox*Jl5qLO=rLG+h#wf&z$l|1?v?9e*cjCN-6RCa2!H~
zqf%CBxM3YmhIYVHb6=^g#yJP$b%XpB=G5WwaUbc+AhjUnuA{4V7>zhgrr_S9G3vOH
zLYH%>=K}MoVIB#`3#onhC9)c;SoWhxt5(>D6rS)p^-L3iX_hWZ6aR3{E84U)cD!WN
zK;-){9p@k^YM@lZ=aCcbw?_UmzYix$h15PQXRRrHNZ2k_1)d@@JH16a8qB%gC^=`h
zqDE0O-=HE-&y**3Zb}rjWyg!#pSnG#Gz`tAK$FI}fDq^2bB^FCIVd^@O95bjx6rat
z-|5J-m?mXav2mhYD0Ylos6W-(^{cnl8ov)`A_dz|+>QnkbQnCmOYPDGy24kht0);z
zS;O`d?2pr&<9Mk)>L~o<F9~O9qIR<eFx!wd;3>bCVidkF#3-TwUIh3V;5UFtFUBY`
zUyAX#Q@4<XQ)LAb=FRkcy+_IUc9i1*gp%_|Wgj6OF|(EIfLs+BH<hY_?INKVCe7H$
zhFC~2n$2SWk8e4bfNliC)<W1R^6}^`SEXqUuy+OmfYqfE^J)1?mGZdJo6`?)>%Xws
zW9uJ$TH1`?{N8ixUwQl1|H}80w^MF!<eTIFvzyaBQ*PVX!<PO#nMV$GzLmWR|HVfB
z%30S&zVFmOt9fCEeV}Cri|e#xcoW^Vc2a)GG@Cc>hT}B7$JF}GI>=yhL^JMoVQXef
zZ?~m);Tf+ou6%}py<Y7-J%b%Py^tL~y_g+HemmvfSY14ZaXR8)a@wm@qmFhyv0Lf%
z-Rp}gHWRy55lyji)!wN{MAqS3R~yRq;MJG4iKz@ml5u|xr5B&Y1*;4;9ZV(Oi1Eaq
zou9zY;z=+&jwgQXojlPn)@mhQT68hiBMOwArvkeCVZEasu>X$^ys7M{k72C;r1mk6
zkEpjcN=Up+9aW6=DO!8o{LejnOE-U5<=+TJc9hdwt1bn{y5luC^Les>eUK-CtSNyF
z$4tQ{$eXd^v*DffiW;CrP5x({@u+KsGgf4Eiw98Zk{&ucCs5mwzA4=<n>*w%eJTzk
z&EjNsQ32`GtR|w#sq#M!6$SNVZK2vy+F)J8th(ADS8d6ei_BjCjCZjEmGTX0mvi}y
zXf9v&>6K#!j}|gC&gIjeZ}5Ud6&i(eX0A48A$9ICc{pp)S*36qa(!|#sq>F+=K*|!
z4>~Iqy{ReKzU1ObcRx7)E%f)0oN^^q17tVh@u=2Jif74ePRKgx94;N*2&N#IIcy2K
zh$dTt#-_C;!2b{wgh<d+c2gLO2XQPOf!-g{Os_w4mBjln4vX|#?>-NC-hBqMiv)!b
zgDQ>^KExX4V(oD^`7V8NUwfS1OjL*HC9L%5Yw!K#_8)MDbzP6ryHlOnLUiZRI?nkt
z3Inw|SL8+#1D>4-0hC`x^O>=peSqFgyMjvWAJQE)wd49h0%XfqDD6uFg?#E9;`WFv
zDN@kspW+SgQl0SzJD_4E<z2BY)!^%>ci5JO@bmQUp^q=C35}%l6pnmaEd!dUZe{$T
zJpY1Fd}cHVbz!H>Hzy_Kl)vZZx$IT8uFbTKL>urLE-cjI!)+0RgaRGk(*s+K1)-Dp
z>piT-`1`u?_DSpPi?`_oe`qiM5siX7l0%Q2XKBfD=w7?&$_^had^kVNd=jP8Q4I}h
zmq*#+&R7kS)l{oH8-XIgsEOhrIrp&$lTS{tSU~kk6a<kOvQiT22Z~`+?ZT^;`V>^-
zCyWsv3K1U)79Sc-`pX{cG>Q~UYO?TaL=E(k;}IPZK;taJ$z1qVxFXa-<s2|k9X!nu
zP2ety7bz1!YOZ2_&Zzfe6iMW_#Z=cwdObe#rk$T8vY|m_yQ~VWPOHe(<q+(N_kJf|
z!&5yo#!i&xZ{&hW>oNBTICn(4nfq9QI{`zpbWu-FmeyJb^OJl-DIY2w#j9mJS)zwZ
z&r2G=cH_wtJy#mzd9H+<P=BEs43C!BAd=CWg*40ptP@cst=u5-0nK_pAyB@k^s$h*
z3%9afyH=5pPGVoegV^(Du`4wySs4G0@H3uFY-mM>p6O*`>$CNCCN@cn2Qucx+s)eY
zX?TT%Dp)keS~iHU)h5j+j|`B{cyTre?eJEyUL8JK_IJUg7Ze{T@k`0Jen72NY%`S<
z^$-M92#V<Wvu3rhcSI-70~8!hxnb`nsb53E-@@5a;pp24Ws5_LUDTq~pG3l!SoIXW
zMxradb`{Eho`3?D=wbb=DAVBdU*^s1FVZ^ILXp<SwGtJED#uW`J{!3pb~)c8mU<bB
zH5<K1X9FIIBgep`T9}Vy2@-x|twzE2w-sq~kX0xd+(oulL*)-K7Uy7*yF|hy{)a3=
z7k-)rfonm11~0oBXAne&NqUhdAR&m4Xii9ry#QHTdBn4L*z8jA>IFqbB(0N3e!X7J
zO%xJ>Dy|v4o*l&ME3Vy%SX*&zIACrdzdi)jl!P3?qsdrX72Pt|)<@K!U{5$!P~vea
z$6#$@@0R(FhYPW&l4%H4fC7yQ**C+WB-eJjl?{-^5DH?6H0fZFU?EBQS1#3n$c?N-
z0!7_`FO_W63rQMb4piYpK^Le#q^@<fc0>(-NoVZh{K%7Ep+pt@sWOQ+Q+t$8>AYl{
zsmnr@*o44jF9h2QG)@C#6lMs)+YDV$ZR#?Ul{aOM2hQ()zCmMcE<5McAWyc4>QmZz
zQ<vW8vvJpwMb#!`Yt`&BYM{)Y#v<DrQpme-kwCu1fUhL+1#;y}9A4cb`4<?-&xdI3
z;2pKCioW)=?h7bq?%13Uu=4aUEQK@3-_L1n>8*U$5e4q<P3OdQ!FJP^W>UDDa<ZCE
zlb123a@0m{Go2&?{d$~!9VI33W&0G}NZ}z#NU-X0xl6+Eu%XJJZjlQSxnNjvgHlP&
zZkPTt+TYd+rc31FP3$_*689X!aiXKIZF518xr$PE&!2}qAG-4rJ)hMA6GMwJPFEDX
zx+X|i5UepCDvdSH4c3+!@oHl3QEieXSCL9Slk}<cS*<ifC_yLnf<_Z=>=h(Po@3&V
zLJmYzi}QV{Mo?izJmmW{*}n^Ar(S5nvYoV5(UMltucJ~)D`wEHcQ0QG9eTPD7ZgqV
zb6_;>&OXt!H;3{iM-<#JDu)^jHB4f5N&Hs+s3(iueUox1p#m>#8y1L_h~u`DR-AVd
zG^qT2A&l0@BrQ`p4;Qxtt?>}2>%=0IGnLcP3JM2(X}!kIPSDv>x+9urB?EaK3v-@W
z98CT-Q<~VAN>tmIY$0#BEq=l(h!3`T3yE|VG?Ob-UdiU|IE+puK`5eL5L|f&n?P2&
zgZ)E_$Ktj?`c*8JJzI!*rljJgEJ!2007OOMH}Z|zROf3^sli+%87zloGa#Y>*T({g
z1bs;nkxZHyAa}$W5<7VmxiCZaItIdh=lTf2ayHJ86>oO<XmS+`VT8xvM#YPeS`T$2
zt<FGM{+m?R;{Jfde}gPw+MG75{y)B^>U5;)Wxa%SozoAc3Q~0T#eH;AM+&mw9Xr%+
zDv6Uc;3TkjByf{*mG(HT8ME@y4VrOi>}0Y5_MgsRm&?;0E=#xd&P;V*)0s)in6t(;
zDe)!23RFxOoJ?8GEuz$?OAL6M$*C<)wa6LBP>4vJDv8Bf$S!>9AzqWCp!9A?4A{e_
z3UhqFq=E2{8yL%IJfg9f$@^RJg>e@v8%}@~Gt{(i;S-Ii<i!S@aLVa~6HjdLWv5@{
z8<=ULe1LB9mR7vGrS)%w$b~|tJmqvPByt-){6lGm=V`|Z=F4;n&Wp^2q6%CHJ%KQF
zqZUC!Dk=Y*?%!dmFebJat)$A{x{~ed+l^B<#v2Q|%I+1kwLfXp2^t}(-Flq$E`M07
z;Kte0+B(!R+(^iPfWpBByz_PELQDS9L(>vWU62)2s02yW1R;-XVte6cAkN&{rzXK-
zkSwGJ3$rwqR20yOcFja{a3-3gwIz1(*Tjt)<3U(%s}5ki+5<QjM9pBV1W&4AM%as!
z0b?D5Lo_Z3DDuA2yx>pg1;(n!ZD?tTg0Xs|GP3bFm+!(!26k6Jqi|XX*a&ojwL$g+
zzj95!xk?L6uH=+amZ$R~UXX>T8Qds35gDY^Zk>hvF(vTXydQd7{g>`VgsHS)V}1rU
z0<|IUeM!}`!dB)}`t5^4zLhoH;)v#`J4%N_*AnKcH90Yl!EkwP2cFDu0dai29vbIo
z5)RQzN_*#{@M@afq&3?Uk2IRJ8<9#I0<&9=E*JI095FYVj!@F=?Dkvh?_H%-e~k6j
zzpJ`OmF`Z&Y&wTm6Q&lFEHhJ0e$a)Yw^GS4+J#yeem8nquLmMoNbIu5x53gDrDdMP
z2P%y7+L<S*K%);TFT-_^SZhiPg*aTn?F%(1J9P<cMu_V|1U0144l5;j=MUEsK3Gh=
z#Mf)0Oqa@j5EBV+YS$zCN!fnqc<hNKry)Z^db`M-qbt0tN8)(~8Q4vW4!b4VCEEm3
z8{ZfN*)*D3m`73W4N6&F5~5)JpwUTB2i7SHYBAPNXqHEUmpf?PFpuJ^zd~6EDm8nW
z68edqwB@8Zn0!+QE#HKHzN~XE+`H>=KOd@aFWwf;3q~x?E1~48PcV1ExuS(;Sx3@o
zq4iJ^WMwCwMFsPZ=oITlVGbFqi069p;O|QI82xY33CBR@)_Kw{NnhZzEN+%fNx5<r
z%!3j|?@7PIzKAe1utXo2f`PiB{bfIve=qIf2BDAfdv<We^-(x=_Z9RbP8m-W`gO$M
zL*aOa(-Eu5W=Eh_JEoGSM=CHPN^(WBT)MJ$S~_PgzaHi$8bQT%tlGkbNRYDgqoTNp
z{06<caBNgs(7L;Xq!3}g7UrL!%nmNpLdzXuc9%OzJPw6+-XYmT#dtW8XQe8ky9g>t
zN#`9+a*|uQC9HudsM|16FRbY%wyDTNEFN9DMED^c>{0}0#WkGaIj`MVB}ruERD4W+
zQB$2xs<R~QU=}j*1j;DtP)qU$k8%UaH}&pQJLD3FP2oLCWQ1h{$TsSP>TaDsCr30R
zQ>AT*<^w%bi5$Yh16sbN#};Ud!^lu8^FbAu!G|rqTjG@+OMW{nbH}hca^bLxGbR9Q
zckx}4Fc$33UPd*^opCzkaZY6_ac)J@ZH7HTX$uq{2oCF-V}q^Pjnbj1xY824kHlqb
z>UJhdY`S<jx&bC>n1o^1dJT82wXhErj=|QIZbqNKWizTVutB-1<m4oB36dUBhifQo
zVn;%%)rs0Ft#d$x7@vxB6(%>#om^B&H|s0clM{K3sU!ep$D(z-t93App;)6Q?})6x
zF%`Dt)=B@yi?K-hHyr*(mFPL2h#JQy-Z1Ypa(9qq9Ep)6s?NPnp0H2astew(Q{tXv
zdx&&OtCqx@s^><As+x{ov%MY)aaP%9!r$_1urV#arsVE|&e3@cxon4$KWe43-?O#u
z=#Rsoa}0&JJ7z~htuV;AjdJSqLg_t$g=`;5n+a$-+;gcrX8UM>6nGq$BRdQ>Ato=P
zDJmhzZZ$xv%yYG7K`l=55w3{+ccEBA6H1~i1K-9gtS*vfjj1%F0`C5w;~Dttv`T2;
zh#H%9ELMt1&ukjug*Qks|HivE41}}RO6VTd{=)W9>bd-yAM+dp34t%cTiwX7k3@A;
z=1Em4?Ny0?@XI0<$Q0OacHYnIuQiiPqa<>0nqbE?!w#zx^)TFw2boQ{z<^)t?0@4W
zC3!H)rIC@Td`6>C%o1rvoI`Sz$&x2Cnd0FG8Guo?GS|zV*q#JbpB?=qnZ@l`EIG8;
z|5I6E2vZr29K#AbEv?ytc@(TzC_w>LCrL75jr-w^It?t?vA3veZC30%QQI*f^LPi4
zW&A!YKTKd>D?H-NReDC+U}_JzCF0L$K=i3(9{&_RL@UNG(%2n16;4;On&~R;PG)CB
zL=)cwHC>Awnlv*i+jcCU&5kL{9_NeHjx^#GLAH@r5@Vf%>Ci}3az5EHxd98!HtJ4Z
zxy5q`%||572j&K-?kJib^XN5LNE}*ZN)D{<C;6#bz)TVXZL^t3$7L1jZpW?}iCuFu
ze3tLSKBKVNrKmr^35E8ws6^;nH?b!lj_3%Z9l>r*fWO8>ebK1uezRh2uVbT?U-#qu
zrF=9f0%GE-^f7T2Jz_tFqVPMRO$rj$hV?yKYC~%C*UdN!lcWBWH0#C&=5Zt1)rZju
z!H7(wdC2ZF(w%h`WBvNpOeY`_`7YK6<Xy@+c3Dhz31)s4v$LQ2y!sm{|2*V>uyQ-*
zKQ~}ewk=qo*6If3c8o&$n{Csp8!Gmpu?I`G>;G!WRw@5nvJB;IC5y+B-A{c=V|}cv
zNF2SW#ZS3l9>uyQ7t1I-Pdoe0zDnBb)!$&z0;NLzZE-$;39YauqQhdzNeKW-&)(*Q
z0cp2mv|+WB^~5aHnk_O%G##0zjpv!l7v)hz%MQh8Fxx99W8lB409L2ojvkHY%MLqr
z(xsl%wZUewKnofs7dp~a9jJQGITP}NA(0_p+>SoPNs;bo`%87ozdM_DVjA|=_<6d9
zD7ZX+AN9kI%k^3kMTa04L~iVLU+t;CKt^KcOnG?vz-O9sf~zbzna8k<)G+0dgDDGZ
zDA`NHhhX^ny%J|GEO$DAW+aRbibawJrzNEJc`9hF&q>HdjVb#*E+ik5!jinbo)?mT
z66IVbdo%UsI(o<d>_T$P;J@QE&hPTzG<NQB$9#3q-*Ot8_q#4A9~vxcP|v|KUEPNY
zR>-8!TuOU@E`0#`n(o<L^Gd8@&lj&CJAEt4ct@eivILFoJ`F4)AEQ#cbsCcNu`JT<
zN)XwB$c25F+EM3M5Vhh{_pOMB{)`2o8oW%9RVq#wRMV8)c)uEU)U*sGH`1?_9g12I
zV^!QBu<SD}L(S>&3FbPDUn_T9fCaMtsUbDTTKF1eeP<oL(Fm?qp{_<H_X}UEgh1yy
z>yT7r-^muh0ptG$Y#T8CuOR+?e67k^)q9{VpVr<@PisSk82NCkzqAtzq&qR#U81^P
z*jG;d6c=fv*mGVw5F@MUL~V|e-kH<eB{fY<<wTqX9#|}-XocF;C_Nhh<gR@;o)8-w
z3olpHQd4b_2Am`rV;{i`L^h?H{=iOk-HX%l%d~jJ=xC)DO6iFmx@ljs%=W-CXcT-#
z%8HEexuI!7>0&-JN~_>&brshz{*C_;6hdic^b-n24d>e!mx*hjvo!iC*EjA5o%zvE
zyT0*S-MJ+CS=TqdWZ`@u+V1+s4VH68^pmb{6bo^VkABAWjT=qpu;}e7`5WJyat20!
zj^94;jY1CMy3Aaycs$Kkn(6ex0w&?dl4Xlv7~xd|AN>XDyoI{X*5d;OlTo`bkeSvF
zE*M7|?)j!iv&wkbaDj(3JL|2)OIz;OTupo`F(I>BS6Z4a8g=_xMfR{1L$Wi%Lh>O%
z`Hbi^`$8o<9LOFr(2KtHfZAzhT7X8H738{bjprLR>Z|256x>0PMnIN+2!m`S8WsFq
zibk(b|0!v8ji^amv~)?mI2jWpQPkIS)E7)ItuE~pzkTL9>`DUCH94ZjV)GGx7gBVM
zc$bHAfUGahF($3X)(`0G@)^T9JwDIUy=^!UgmJhlm@fLjHcVUXU8TC$mZGa3#_Xs!
z$B|Lt5((H(^g+&V)(?6}wYO-}RVm{j0Z6X0nVm>wBR?#^VE_X9hA;Of#H4AsSEQ%L
zP)w%M0okbbo^Alj$CvYtb6$PG`7?DmN;i?H%K-)bF@t(h8PPloZ_MLj%V#WRuVHRS
zAvJyn)s3&S$0^GrhjSXC%^84~e^3mhYE9k895BW7okJ5>Exs2D)WluEvOo*6DKw8-
z$in^8ec5<xGaJq9uQ7w?5hV5=sgMEH-cUTLaH3CdNu2>?nCwLj4&aoci*w*fA_Vto
zP${s+Fo50>NKZ($OBSJDm^MYFhd%a*W=m?+Q0#)x16u=JDoGB$f+|U>h905%h`+#V
zW7I!woBR&6w6UH=p8d#RPHp45g_Ld-+DT5fm$VZ<JdDGWI9)WPI<x3LlmWUX7Tqg!
z)&8QgYZzl~;S@8uPeqk%8LzTq<lyR_R0~GXbkh|<!WPs`ZKHasVL?;V@v_KMmAu&h
zOS<GobQsUmMXxwJDuUJXHLC2WaIQ<nZK*;uk_HxwC9K|ZtSiQxY_Zr(?c(=%M%chc
znhEj@rlF{A1ADgxcKls<90b0^?_p%<P@UEM_wXi@>rNK?*I=5^JAGxdtgtFqk%O!i
zsBG{c-7*1b^?dCXRPyS2<OJDXB>no*6Aj6!2OhW>vv)5{5~8t@4Y1a;zMV(6psHkN
zmIZ4??0=f73G9yGy2Sn`G2S*w>losr6w~vu{zqu8+9OPD5pBj!&S(ETh}o&PUgdN`
zLqMN+g`&1a@84#l`iVME*(PHuRJ1mmxm=T!j2mryqODA*<1due5+8P|tTs5CDN_Q(
zqQ>M{)R-KLN|a+!J8~>)M~+49$gu@>8*ca$xTDbjrsBJt8kV6?R%3Yk9DM@U!Czq5
z5TP!jx%O8TtF;ZX&(Yim&D5f1y{iVrCUDmmEvy$#cQ*6&`mhrbHS>iN`~`GV#@@$W
zuXSP=h)Hul*Y%(y1<%Y!E(W4P*4~1ef$@Mc=pEGGlV%mUyP~{KL+!7-13Jn%)MvSg
zplGCIiQP$PLz$FAk{%0pB=XZCT5>83r&gRE|HpCF-xik~Q{Y%>l7@)JMwxW%|1h>%
zDK_%jhm@^Xn>&EK0mifruVs&+X8S(5%AEcRMNF=mSR@VZV0!r(_thr~y0d+GqOFMh
z;Rh5aHk0ZtRBMP!H^F37B8j)?sp2W&G1Rt)bA%Z`c6ok$?)g#E`(a;dZZv6;+oIx;
zu1v@j%$aK0jen#Y=jK@&*LS^MOw@7^!AbD%g;9bnJtw2t!EE3mCr_`TgvpguTiyRl
z*;=v)>b|$0fLPpwtX>h#sWADijqZ8^;>-~?Vb;K6NmMZRps;C|^feH^`kBccZ$lT|
z@dZ7e8BdkiZTkEc4?UaR9ulYraR=3Rc(K>Mc{5c7y{SeDI2!`S2%ElyuW>z?QL+a-
z2%C^MjjAONYc!Mhsnt>W>tz}lh9^&KrU#+ICM;-l4pz&MsFyHLn41UghG}RAI*}}z
zs=d@*iDgnH_7Qv_6aJ71=t(i?DQamq+gFI!^jeQWYrc`zX`_V<#?M>Y7$5&IN?mi3
zMF=-`vZGUNkt7%IOHn_ah5Uxs=ra^)98=Ll^<er~ND(q93XMxB?<7^IU4>Nr(5*m;
zANdH0(9KkMEv|qa&X?vX*buTEtqby~4p9Ty@g!v)A>mu`T2M#A-gW6xos80Pd_$gv
zq>0k~xSL-E>1yYG@E!UNhUQx9$Grms6_SA2Z6HqqSX}~(Z};xfXkZ@N)tCO&Xz_0!
z4V{@RsX`lNUy2azaUrQ@a{UdYsF|Gyg<4yw2BiW^b+td~{cG)|`j0;PXg6vOg^>)N
z!@fCy0jq<QRr;8DT&I20P+Xc7)J_X_4{)7Jm$*dTLcDGfbxXBd$#rDxU8fQIx4=+3
zfZ=ev-%V+_s!A^`V+>H|?bX)bz-xmQEet@Hgxg=g3>M6egUk-K@nG?Qu-X{2{kZ^i
z&o#^^Q{SMIP4z4#U#|j6^b|~)>vVQ&H_H02)0iP`^lGNhIFfsC*d&8J*h0&ux}8%Y
zP%?RSJd&WZWe?q+9;jFg^|X$93dMSR+=R&>_jh3VT<@X!>c_n>T4x_*0q>7i2DE~R
zsvh^o3Um5Yy+#dK)&tJ@QZ+VOTOpb^sg&FpY8IZyzxK*NbXFg=KWN}@3@Y|3pBp$-
zZ%;Bf1NiHMigoyDuqU-t>7D8Zg(BAYZDE5;5Aq|M=q_59^8xnFihn^53jYvSBdKr3
z7qCP5vOIkCrZ`9LmUq~tZu#=Ruv-R@=iYYhPm6PGT&r<1mCl?317onoL%(c~q+ixT
z_Pmaae(1>-pCeG;5X^F`c3}Ff*b~rwA%O=syA`1TIRfNgGQL3h*;k@y8+z_l<cjX$
zhBbPj5$SZXKY@rM)4N%dkl4j%6x?)9=X-8)eLcOjqUNY(zNee(i`x2PG`)__FEOkS
zQgq0}-Ox+F8U8GnnMyJx<$E2r60Na^3l!?fo^HzRyIG01rLen*+SOvm$5(M%B$`_J
zn(*j0Fc$t&A(EST@5zGC3eiE$Imqt2vk}OnOY&Kl1sQ@(1o|Ew6lgUS_4MIDv(E~#
zz>fb_<kYwqj~yP-*ot&fDTLXCW2U_1H;D2CUO94?s{<>Wn92scY26VABc;jlq2iWk
z`n`%bm8}rX>ZWiT*JA&yO==rwSaqBd2H6;9#|)H_g(_>QE<Xp3+S$gT5SudI*tPCg
zSPc0F74FB5Lc@us7QR8tm$YaghC+wX2zhIqg%>Rfvg!tmN^jdNoqd+xZfk{z9?TXd
zWZS}F;}0b8ecTn{DpgGD_#Ape`CRo-O^mU2T?a;AidT-|C^9l@*lt`=%C*{<Iovf^
z9!Vbv0<qeXwNACINGs1-(p2>bPF2qLqb6fJGu8z?^mfC|oL|V(fe@5)5C_8gkCBO~
zMI<BM!`8KxoFk}MTv(a|ZB8CSc?Xl$I7`D+reaeV@KRz7UWp2)t<6kj99ZtgTTK`e
z!i}r%@*@<;=}SJpDb3a`$bNtgByi`bVr+So^bz86qNQ<SCeOTr^!t*WWFdMzRXp1f
zSD<37zvBI&7miLPWBmb-6#__~H(f(;mS)Q(B;RLgx3p2L+tU6j68y;O)a6y8&lcv+
z(r4RrrWUY{aT4khjh&z*pn7g_NLAHQ0UaEY1CEFin6QFzhN-GL{W!W^6zQmSXS*LA
z&F+k!c^NZ46z!75?{8U{!XdK)j{kb+NF)~x6*r_%$z%(LBD>#r3-oJb4l5E4tD^hN
zp>OU@V!@TQ(d!HM?!H$Ro$F85xuYQYZ_7%OZh5MvO?u!$MN+Eh#De^{we(Gq&}t=L
zi#`1T$%4B~8FgKckw{2T?!k9O)JO3#kvhIs^C5jggb1<S5OQK=D;o*}3q?tAe2J{e
z`L#V(#8kp+>+P{UZqrS-sarP5^GvAc9iBFszMiMEq~bf4KW~=wG4Rn{_!N-MM7WZi
z*7;bhOuDhe?uYCgLNryCeR@7^1e`Re#v!VW8i>W5gXpjYBN4yH@6YLXxBL4g`mK0P
z{@$W}jh+zebIPR{(M|()oAHm3NF*6OV=WsW6@Y%(nPybjj7FggUx5Z1YOJ-H9gUe`
z2iX(PCFSa19#6_un#B`f<=tWGQgXf(iLfIzD4Y?SF)v0FVaHI#+U#)gDCK@&2W`e&
zp$j9qXhrT4brdJl@}Qlbp2yNRyU-D7F!xY@tW47V?-H|tmCA<_dC+;H-gRknnD`d5
zuF|bhqTbqsr+z4X`GasOo1dm&z4<!TJgyx|^-I_>W~VaSrtyQ>D;r7ldE9RiH4t4L
z1R%e>)2r3tAJQf#1z*+;vZPv@Ilc8br;kd}aeZY?#&{GWWu_nb_#Ibf-hGp*miPfe
z(0r(zM?G?-a-M`O@C}g*7Jd)AB4s8}&dgnq8Ru}}O4#qrPMvqQO^Zhi)+W|_9;?2e
zbD{#eh$gUxZH#pT)k=&J>4ijHt~uK_`@Wuq4qV|N5i+#5B#vB{@=oZW*@7G?_eYpX
zd#o!V{ckGw+!j}PzI(%6xh50|^TMkAQ8*QLl-a4xMlG9CF5Ojm607pHExlFwg-g+-
zwQ2n@{+g;($6r%(L7VXbwe)(5Yyr{-$=u?e5f;DUQky2X1hj%jjZbsuFoNdL86o9Q
zQ>AiVfXZ#F)>i4fV=8IRu0oJL4JrlEc;u_WEht5BA-U&06wa`vqYT38mnG4RT=i00
zNsBQWWiv_^2%S{AAu8lkpjTwU3dT%gt7TSrHIfWs(8kfX%1<nCiAA97#LDM9WGCXC
zn{U?}{@c5fZaMu+w>*rKYOPtHW~53Ni;^e@J#6ApQ5I#O7ns_M-u(1Hk((@Qtwo}T
z8^#j_t4B$7u3vI)yHlH-`-fAVoZBJxZ^s$P#}?upQM1T7fc$5(`}X6H&92*=URL!)
zEj`II9^Saf7(nxoETCpl;mU2wx}+PHDg5+skqvh#&>b3fnAOi=wR8R^7rf3J`m(b>
zS=pP5wVP1`mvkuSsTZ|}3ns}@4oT!@k2@n6jy3DGQVkUjCilpGf_kIWy#{prcT(Ny
zXthZ~2pzMvkms)jjh62Gw5y>njKE`_5-n9NNtI0Y>X($?wTWnsTB7A9=lYSEFG_s{
zzX$zEwIip79wo-P_=rh39#5yYvO{UyF4eO%X8Y_&oh(IzJ)w0Aa(6aEHXsq@3!dG<
zrJ6%72Nc3STd8wvYRwJK8I7e#-y(@mprFUOTz_)ndHFphJo(2vSg@;jL6YmRm7M0q
z7{+eI1!>Ygj216mkOvOvOF=_zyr?G8HimxzDVsQrl3T==!b%<qIgG@JBARDGO;Ecb
zf36BITlzVt8dYy1_xWgg5PnX<4YV)OB}?VTIN2e|QbG8J7$+~3oEEqih+o8kQ%?h2
zYyfY3pcp3Qv$n?@Dzn8)-3H_<Uji%1hIq$V)E<pGOCP=DCgj)*yN-siDP{eoLZ6B{
zTBf?9fekSl1+NtwV!ZtDB85jz;1=f(wZC{F2O#YU-%9c=a(gvk$4MmzZ%VbQ@w_l}
z4QD*2sfTKgrMZWx#*7W~<!1L4Xg~7M8=hC6n{U1P>`UgmoymPLD>={p?UkoDz4H7f
znM}FqqA{s1D<wN2ne0ZkXlRNqsVV&Bn_^Qd5^t>v%4j}_biGdZ6*ette*M1^)J)jy
zx(8i#)7>#8VK{nDO&U>0H9qhfi$^g5{2ZOOF_vl@boPM{jXgF9oWP2*=EZ9H3=Oo3
z>p6)e*MqkB*rz_#0@M}hLgu$`#WZ6h*M~&Ab0;(k-#hO^iT}jzBzm?^^$z3Vdn4D+
zrQD14HIsXgn00>p_X>w0v6OCP=!LCC0XEZ6pey*pBJ^5YdW$^$gpiZ3NmI-2*W7ui
z7fwhG=Q#y^Ec<)f?T^@Cs&F2oQ;=)sZj&33VfN3Rpy7W~vJGbG$u!S9>yTTYbay?W
zdd`;8;v7Wo=}lp(l&F;DTU+g%kkUe)d=upsAdb&&cupu-GKT!}sw*B8EAl8zUvk9l
zM81T9?mYkJDF}L?5_(`vuM{pGZR#SLQ-u<}@haEHcw=3FfG>ozDqAp2_>V{*Y8Z4C
zsC}tyT|bifs%uqGe}S&*79f@I3}MZ7s;ob1VUQ&7nk|@ub|Yh5HtaU17_YJnMDL%P
zY$2TjJwGCYUUezVBZ0VGR!C<B(m4aYRDn>Vj5mr6<hNIlD!^2KfhiLGS>-bYs)fGF
zTgs_-Bi+P+J5xDblx~vH58dJ>>XMREExAg2Vo*}DEnO!TXe6c)2pANVu4AmZ(laW?
z!|Xnr(z#pen|#;9j1_ryjaQk<B9T4`uxT}5EXr7^D2_!g5)N+<JUYU&v?B!d);QQ>
zWyO4s=WDP|B(@1QR6WS-)WnWNDa>-bP;^y-Oj%1>&UVw|$y?v&u%P6ne+@SpHa#eX
zsf#$?c||yl0*!#%g!;}*us<j?AXXo9#)Ek=*x)m);OCg*So5)8kDc~!;@Uf}3T@yk
z2z<;A)puT0A1e$rg1=&IA!7u;>wF&w1BW3CLW3fj!K4L~uJdf?Y5uH2I3%19&R{xA
z>h$vSyO+X&B<V2e%Pm41^!BRs9$R`>qv@#h_~1#_*Oq>|!6fRPevPKnR54GwXg8fR
zla<3HUPbE<-U`JotP`tA&-Lvz=@l_P3eGFabdJ@OCyM1T^YAU|uzFkqYf$}9IXf$X
z9i6}$$g!6wbrL9&&tG!&*MB~X{nc?E(@$)74uQOBSznA+0nuKP9=(Whs%<Iw*mbTR
z-|3qQa5unE06kA)xObyc+UeEqCFih4(<R*4I{Slx?#Ojupr>9yQox|q?}3OFBkFde
zGS^gk0Bfu*i(p4XhYK|}vIC>>fRkMit$=8_ag8QvU%vnh8Z_Jw2AaUV(Xg;9*h$d}
zZ`@cL>)0{m@{6t#9)HnQ!o$x<I{_Fu5R@MK`GA26%$oF#rZ&7Iur{&-gn&w*<~xs#
zNDQuQTJIwZtbY*0_N_?7<1|f0Vmk_7^NE*WM~<54)V?Kc9~f9)$zAL8|3J_BNFRDK
zu2Y(Zy^ZzUoh0Q&X@(m{B45M-9*hHg+>1EC9m}M<Xd$|rJ~bzDZPJJpIbt^*HRJx0
zYsazkJuK}ITY-?+j@K$RBMur5a$(S9N_J#LRy$5cG&qEUuzwCXRhaU3>qw7FU*-WM
zh{&@zjp1_S$kJd&T3i~!x!M11973CgY`|D(Fsc}$gZn3mc>&9fFUC0ElGKYQif;Ad
ziJ}&LPa(Bek>yo5iqo`P>oe*JPOFB_-K4CVtJ3_*ol=sj&~ih0RpQO^teXi{i6U3p
zQCrSbz7M?zDoDky%~d5s{QtpyF5X`nZ*YUi0hl){BJpyKod=FTBge3a2l`5s&=IFJ
zn1JHj`Myj1VGztigSmb}<ID5Gkt`3Ew364e^;AXf6uM4HHlKBvL`Z%#B!2)$=x(ZQ
zp+wIyu%wM><h*<n^-i^~Ne_K+M5D2mogIyRiyafKhygS_8npn>FO~GAQBVdXje;B2
zVCqpigJFBV3spVPPT&W2DwM12QOIMLsr;B;us}XyfD&Y^uS*I}>AWzaHX4Vu^p;pO
zog^MI*24Z=DXG|RWH#laWJ;H6T_E43Sr^84c`?>SR8fSfCqhhMDu<yeF2)*<*9N9m
zu?N|V9epXcacU}5g`<P6_WpJ3kyL7N8Z0O~y0M<Ad=e{JZ8x=IJzCzAYmKQarfNY|
zY%X*Q#)>lB6(y~g_a0Di3$fHxWwo3^WFiHx%%)X%>)oYc9!o{ySxSAiD|Mz46{|}*
zut=68>L4X6vLQLNlry7sqzFrLbPxRD27|wIdvFLm^{hOD*tjkS>Y<OuLUKb=b5-Ey
z-PhfDu194*Sp73-DuU$Vd<CinbDpbSB-DpBn(ecrX=y)_^>QM6HL8_TcNu>y`vGPO
z=+=MQ<-rCiv|2kcv8Vi}vT*I+`9N*N`dWv+<|m)>3uS(X%1dr4s<hmlbTS`;q5fjy
zr771MZkb3*=|r;LJ!)N3NiGTk!OY!`0yt$THX!!zrW8W2mR;L3blCoNIxsOzA*=AM
zb;sL4zrh6ZjYlcy1Y*+!0$Jj~w;Jg)I;8$_6ygoac?v1o`=9p^`ww=B{r4mPdD=C}
zUwoXBU1>1&N7O`>XsHkOd{jvY3j;1_WLb~&hFJ`I2zHI0)Cl%Lp@F1#$@01_o{vGI
z_-!MQda$7Ap2vMH$_Pc3w6de4N?N3vb!!EX%hOw8uPbg^m5PaZiV2cCsd!_sn+Bp{
z!}df%j3427PE@*{>lc~cj<-Z@NUcTGI1bRkc`0h4mK)VeOr;N`lMwi2D(MhUY(pZ+
z@igjaNe8c_@hSJ=)ByqM#NJq`&Ra(|%BBb<I3<oEFZcR>`Y(Os)sO`ULS~1rn5Y*`
zU^vz>TQyW;OYCB^Fyn)m9Zbh;CD^2QG1e|h_Fi@11G++rwz}`M6S$@BaxSR-3Bn%F
z_CJJ?>}<*wu0Ryo#sYnz4*vEn_Rdxp1UV;wc|c(p{0%N12{wbBcQ89sy6ietN9<5N
z>&xu0(Hl*ba0r77To)t{d5V`a)y>9ZrXa~~=fdiNkmqS9*x%i0L&EXkDchJplTDz>
zCeUOPXtD`3*#s%s?!Qj9J6pggzTxi72I|}w(qpV=dTy;fd;$?@5Y$tzN<fD;xv8AL
zxanC}qy9pL=6j!A(4!V#<mPIsPo@2&jr7Ay)RK0-OsnAT>J7QMKkW`kFiR}oGSTcn
zh5h(KueF&QK|X)N-N+x?q^*PNI+8ZBb1CkDVA&2OwqCCl;8mu?J^fB(cKAcBGCOK#
zb<B<&s$rvPZVk*1?}#SJCheABP!o%mHq}?FD{DAZxf4JeqbA$`AT-7-2*&I<8rLy<
z8U!@B3ho?GJpdA^JkDONZIPO;j@elg2m2_l4<6*cjy@S{0rH?fEmbm2^f}iRt?;K>
zezQle<=gm^B`LfVT+?$7I%DWQV=k=q>8?ljZr7(Wk*a!0=#Dr@9$!iIsptjs==p*<
zbUqcm=fBkcNu3HRiGiI%iaEC@=cw~`-7v6PgleRh_Q2O@)D44LVMKNszcF;I$a)*u
z(6Q^r*(a?NblYrmLv^SYX5%)X4hBkkVP<dBk~s?5uoQ`|otSO;$v#;zOhiqlK))+C
zXfO|)UP#gj^L0^4TF#3Wtv)$vZ_5+03a7tp5HPL#wYFIr+iG1(l6hfTdfK8ojY2$H
zZ<dPyS=WVShU%b%w$TESubRxZtTvIurv!1+Y&W&L-Vv1aOvKQ;HTrTm)_*GYKa>Y7
z(F(P~F?EBnXPwsA#XR~J-eg}xlD#m5kA4Sl?AU&(7XBB8zsMMSmMrDG9M?->vTvl<
zYeBUR6@Nj^U(*(jx%#dc`utnJ#VCZvJ?O|gG=)0YE2$5Pq1Mm;1MM7Y{}h~`0z3)v
zmtfZh5Ck71j#YbC`BcX#tKyZ_aVm(mDqh7msQE@3`4M;I_Bp+NsV^nppyC@<=<7YV
zucstGd;|L78<pr<<r&9|fGPnt0<Zvi0GR-b0Ty5xW<SwtoBd=fU;>x`z6AIZ;5NW*
zfZGAL1MULc1-Kh<w_St$*a~%<y317?A{KfVz?T50(Z-}*0^{>3%%P`QD!pt2dAy}Y
zpgLTB?d*hZ`^KnlxeY>l+aTcP)pxrg-RW(ZZs!@O=}VVsd0lOCO=^=cY?GMFv`x_S
zQ)V!;0Iva5$EimgtBP0iztP&eOlxneN7R@%*-vj<{RTd1D^z*-e9FTgc<ODl-_-nN
z%rf&RvJc-HcN^rP3qS#%S^zyjFn|FdqK&pq2-I~5;9$VPfP(-B0oDW71J(i70oDT6
z0@eW5+}bu$9nFQm3ji_!*0*`IO`IBX?a>zW`_^{ww7aG4q~l6HdI9WrdpIvL7IqAq
z@dIzneRd%=jJ&&eHi;)g+9b2sU(tu2NM6W>IGS!hD}zO^KP-BzK5`hcyWpvlbm@mv
zeN(->WG#E!br{AClaHpD9f9D>bN#_LgAXJ7F02D)a`r!XyaVZ$AQMg1$Fz$mOGic}
z>Ngr9jst<iJYP2-Cg>zft}i{idWUXP!8esBHqs!4hR7vKAlJ%2cAbM|(?cz3Wqc5+
zy|*889lLpE29LIl^v;r|RD+LDK-9U)TT^4K({S0@^QRT&yT4pvlI(aHe{e`m=g|=d
zg)c`cfHXE9Ec6p<)1HG(w<ffH992lCa5{QV$h264!#2|sGME|Lt5bq17bu6KvK2k*
zvG+VP8)4GRkJhQ7I{)(UOhb>)auwti(Ua7W^b8HjZHYL(u=9%1q$^^`W1C#B!{F@9
z{3}ss5v~Ajpp1*C;d@$&`&n|eF3yK=>5yO|AAJ(J2T(&~ZiRHwaGYLr;%TH5l{0`|
zFoT5>Ej;!8bN)yoFD<5QxiTdZfc4peRuD8X)frB6V7Z0wLeocn(R)dh7pBj~SctP+
z(m*p5vbyfDg*4+g*=Fr66J;lU+lu^>uI<cxD_$>oJ1>yxTkNMv_Cllc&~5Fh4LivH
z#HeeBH2K%2IR^KjOrC7(<FdtPK0V%SVk%dlT<AIt@hwIkK`l{ItRvUfA=Z;C6bBIp
z#lhq!#8b#w`e`7?DGnuvC>~AfC>~4pP#jLSQap+LgW?eKHpP+T6^f^mXVziU$B64<
z$Ya!MHYuYxffQ3bm#n4OOjc67fGnkWAxWipF_}m4G7?X5CYecb4w*`E9=V6&0&*9{
zEV+Z?^<*H$8wn$4VF#}0M2WULPymT^aA>4@8=TaL3L8iZHR3@!`HmW?){aBe_!8aV
zP$O!GAfHp?TWI`{8s9<V8`OwWv*cOM%~D*&xfy~>s1dn|Ng*}jpdu@&5m}1KVouI7
zaubsWr~_`I$t-Hb6ABVZjpyhYA2qh1aX2-i92Xf#jRcK4YP>|tPmPq_xPwJw8!bOI
zw$t)cV;3zyHPSa;4^bl?8Il9kh|((Lb819(IPxJYXBkx&kXNY#vha|ns4)nQR%%3D
zpyXj{3_;^sYBZoRlNv+Om`07G(f9y0jz!}vY79qXBsES#<2Y)JMB{L3L^V!iAT`FI
zQAdrl(Ws=x1T=OO$yuI@Uj(lhc9_xl12rx{<8f+4l~JUT8W*GS3u;`3#?NRZ!Aov=
z50Fh0yp3LzS>4A>o+!c_KYa3|TejIK*=UVkiYFzTT*)Tf=rvllSx9ZxO)^d%`=rEk
z8izKwCd5=CC!G+dGkR&{a0V$Rz0pf6+XPBBK}Ii~Y|~vxZGw$ndfDbz$tJ|;6(rl7
zmTU}0uVC4xL9z)odWFa~pG!88Mz3($=55Jly3uQrZ1a?46Jzv>lx<2So7qOM>9S3p
zWRqa@iji#|q&Dm38Yj<|OP^5aQF@m|kHlV<5-c%coG85m6^<U76B*2EV~mHn4!%hg
z>cVOhjCCc-7@H~BmfjVW9?JPkDh6XTHdClD`5h`u6qP<YIa%a_VF^ZBLh}{wP0Xl(
z<rMNxwi$0wnaTNJT{=rzygK<VRpC_o?3vnVylE)zM^ccV`AeWWLK+oEj^LH9ncRT=
zVj5WaHY!jWgs;)sOzn76(H;dm^p8{N`8gij;0aDBGJY|YIF^OUT3Bn6lO+#yxj%)M
zxAjbAEjZK54QryF9V3_wXo-XeYRr9di<I#Y&w%vZC!wUvc%$@QkIYZO%o}Tq2as1$
z%~iMY2Ak99gE{9Lwa&q2GUHE~m-H@!$C)D61xd7dq=Fo7$;naa22PWl?DTf2YUxT%
z#*)!HKPW*e`R)ikx^E{(j?lZpG<#MnZhRBFBfcj8T<GR(>!nJnUV;(FjRvC4r4lE^
z^Q_BE{!NcFLjQ^oNlNlydB%=HdqIe2F9_-F1qSQ|L9`d>dwW3$_5$bvcuY`MI=w<{
z!`JmDdA5C8*Pq*7%>PsMowhc!d+eH-=3GTG$;zh(wW+dtAM61kv>N+B>CDOW98}kb
z)><-o^RTP3F1ahKJoPUsYtf5XS)sJDZmT9Ir4~c}s+#bC(2^R_oU6nd(AwxjTg3V!
zvI!G<s%}fUgv?xNsQU#;rB&c292{{7^}k#b*;w39m*~UVhFoW=kVU&pYrM)(`5pRN
zQ!>zS{e$`->n0`QpgDkM8%U}*x}OFt+lY5U^dc<>FCa0M{z@u4YXYKcqhFcEc(qU?
z)H_u|gPA^fsg?C0;%PTK<z-BLy?5COAl<$duyb~y7kp1I4SHNRiV4bDn1l`9OrM-1
zgCSi$(u?yaHy?3bA@SdcHm=>d&v>Kkp^cDi(dy)0syqL@eA7VB*k|K;1KOUISV{Dd
z0v-i-o=$k#W@;NzXG>|vea{&3hC6!l-XpzaAJBVT+X$|m?}6CxA?0Lxu|_ab^({%A
zp--4O&ba727Y{$ZFtZ0qyf1z-U)DF(v7xG(RA$Ep4YR*SdMn~sSH%tbBCQ!PSg`j3
z#%rNbh*b)97-Efri!Ps|DHr_gb0>sW_bI<nQGQ5S)yH|)t+tPrA5u9<d4{IU8PMxe
zerLHA`P1<6a!4Y*9xG!cD#Z4}q<h)c=!3A;54(^59_8?~eIa-VScu$6THFqJ9#BFL
zmDvB~{a(RylwZi&%-u!q?Tu#|_gBY=^l=$V>a)iWphZ-Pe%+nKuQ#0P_HaOkr{m%3
z`XB`kCA}q?JfwCXe?pg+PyQmq&NDkS5y%T{CgV}cwhK0w(&rs2sthPjgvnZK6<Lk3
zi#;CJ1yS#nWmx3{swl4oP-reZ%A|#1QMAFGt<^xZ&=REAqZngrMTs82iks6NsM*fk
z+b@sycy6_lsI;q)u9sMD9j`!S7XF5&kh2$cLoMW^mR6ItTF=*L_*zZnad!T+q;4*;
z+I$nt)2Aif<fc}ed%!$uT2c>pXSG=bvwm8V$occ8ZcP-|U0CNF&+LeSE#n-~83(2w
zF!ea6gXt!iZsO5xOgEUiouj4H1g_f|P>si|eWvx{0%GD~VMt$=cJa&(1+&99tk(HE
z)d-}9|2cSznDf+f+<XPYxY~k;2=%U`1XhQdlYQjZ0X%Oy^mx;e^bGAD_E}0Q1W?Qf
zCL)x}d)S3e&X%sNEzxRGGR38i%1oMmkPig<R-3fBswz`gRr<9C({+55KBB2Ay{o}=
zO%V$*!E{{^1bcM6$W21AVLRHH$r}1>uK_x@KGNiQI`0f(cAC0Jn4t5t)A^Sk&M)$u
zfGM8}Aul~mGfsuhjOU9M2#JK>jVrveG)Q{ZGnp{-fPvseV1Q8JDiq(MM6I1d1@0uE
zPX;@X9*`51G9uJFUXw04`CU?+6aKOyYR=tO5#3ekH}U>A&Do!vT<1E?z&hz}Fx_<5
ziN>DNm8+hggois8s3MG&gwfltP^50w(%V!ev%}PdmmG=LYFo7awYSs>c81%|%Tq1M
zu$%X9ViT!~Ki$sQZ4d4+;JMT&zt(CW_Ab8~b_Cy`<QtXKekt^x_H(gHb#YoFnCijQ
zFs%jptV78ii)fnG!uldpk65VcJR{UD!t<&>pU+!ll?w1feWj3&3R3Xp>y*q#no#Ez
z$OVv>V9(botG%gHgOb^z2`&0fsD<WV;u-1xEIvV`5$RkJU9rcBQcUz{e{QJW{~(@@
zbH4Dc>HMh<CdAI4WVWNs&>*#B`bm9a5jcq>4KOC$`cSm?dv(HnpGF)c_s@grBr_{k
z;n=hUx{%B15;%pUQ~4@zS`AK(Ub|qJO_~*}*o_8<PYIse{r|uJ@BP~IlnU=PO2q(x
zP=I>@EC87REWo1xPXN3Huod7Sz)64>fOY_FK7<3f7r+8g2=EHPR)9kQ7XW?-P_0!e
z0s%q*?gp3yFc)AkKp{XizzYEH0ek`Q4L}RPZvct{$REIPfN+2~01H44Kq<gW09yfS
z0L}vZ3ZQsMsTd3}9AG>^B*1I{3&3)KLV!&G&jGvxuoa*V;3PmRK*vMMKh@PkYho00
z9*$9bQxT(h?^ulD?131!Tbm+QQTAxepTgj;^x~i-#K<hR93W=}<ULWTSe4Ia73OE;
z8L|os*A^Pa8CI-aQ&5;yRJ3Ysz9BnfRbE!60Zpq4i&#TJMp4l;!^liOg<?F!k+Ehy
zjoWuz;iCMEHCgF~;=)yImSIKV+M*&uVODllVOIW%EHD+UEo2SsT8KQqXl-7W0aAjm
zqJpdytFl)?3fYj3AH-8I9pjl{D9U0DXfmwLHVlXCWUpF3T=qoMTkGL(c}7u|+w)qE
zE#O#pe0c`xx1umB12UGksz`D(jD|=H3fHcHf<p1~HjMG3@vf5NEy!SV4B3#&RrxFO
zxXdgXsK`&QOW$z`({qaRGiMlzSLJ7}EjHw2<Yz*pSfs4{Ohbkte=Q3ITam$HEv|t?
zGFE0u)tJAkC`U>w>o3YGHG-7GhqzVXg3SS+a{e+Sr1E5Qd3lD+tmWKF$RXr&4NYmR
zA#(%7v}%Q6MNZa=)vNMXj)j~U))ug<)~tG%dXeidbK-v$j{%DFr>OjBxCv6YMVVRI
z8C)KlZYbpP$3gU2lD{IFV9|y(%h%>XSdTd6{D({7|HcyyeOrt)-PyE342Fyq?5cHH
zhRjukSu5DJg&Sx?xtaz1t&r<<#oElQ0<3eXVhauV+?wTCg+@cx_?6=g6DCfcNLx3R
zHeZopE~K76Zi1A@S&PE%8JBLLH4o_-pbM|fgbJV`Jo=Ymv|I_%<HlfL%aHq;>;;BO
z)|%ycS%ow+a=ph+hm6dCa^$UAnZG70pM}yJmTzFQim>(B94J}_n*m*7C3VDhK+7UF
zW5sGe#k>Nnq@rmUncOc5U1JpbUf!zw)i^rGqq`Z$FhsDyusUmlJoKQDTo$;Ru$PVX
z2q_KQ<*V{D3h@Qk*=zIBo8-^H7H+`OyS>q}k1PTY#W0cJ3@|=6ap6M5Fd^XgthHQT
zCXN9^-r5y7?mTO4WRYRCoOwA1V=%2kh%44zWpaQbZpDhMtjsK_NDzO~8pU75k9Fjc
z2KpX1E+;Fm0PswOA_XRhaWk<SNVd{I&60ZmTB%a~{LmkCnQ4aUG>)P*88ZxvWY=^*
zDcyn%g{xNPuuy_Ah6zzoQ^!pVpAcb~v*2FCEGQCZ&VjjTtO2USkhnI}u+Xp|D`Slx
z4V#*k2c@QS1m?Ea3)IIfxh*l@6UIl5pD->W90iIBRxB+jgb6yErcM1sO#JJ%UzHDi
z1R5A>Lz<wmDGF9ZOdOw?mxt+37(a1*ggj1Q#AoMWy-`a;Z?T|Alc7lAlMVM}W#o^`
zTgw#~;vtQ^4F=D(Bz$xX?6EZpEx@udX!cU*;Y%`mD-7^YGHbwIuP7fI1Fm{%?=qL;
zKWaAME?bFaG^vydjbv6S!K_EKXWsv-pYk?P-3IF0Kyw>--3Iv6_vx$9`uKYLdHHK}
z>Ht-slKI<oZ%^m;c)extkwGhiuMB=N_{*S^AwY)z?a!4rANgAcsXq=d7vKoMSb&cK
z@&GOYgaEt-uo&PRz;u8w05$@21E>HV1-KUg<*kMTybZ7%-~s^DoZ=aP`2fcOCIV~)
zC<OQ&zz?7r;68vu0CxlY10WaRSAf9)uK+v<a28-1z#f2y0j>jh18f3_184vk1@Im~
zHo!%I0RS%mSO87|Oaa&dunwRDAQ0dQfCm7+0T>VP2|zx;Zvevp-T+tva2{X=z<z*I
zfF1y#JQWoHu>iFIcLHn%$N=~Wpbx;)07(GH044x@2JjHT6#!oV8^9cZCV(*j9|Eib
zZ~zPfco`rK;0!<%z;1vI0M`IeZqEu}0{9AGB*41>SpfeA=nwEbKnlQj0Fwc>18@L;
z00aQo0TKbe1{eqMPk=Q5{{a{Z@H#*`zz+b?0Q&$+0B!>GgA(*p`YN6U{4C&Pz{!A5
z06qaY0&oQ2ZGg7{E&^Nx_$uJ5fc*jc0~P=afbR!<Kj6cF4+9PZ90vF!z#jo#4R|$R
zCtxSwA%KSfeiiVmfENK?1h^S+GhicNBjCM&_X2(d@FRe40KNg(2e1#|#{fSDI3933
zV3dez1bi3Zy8yor_<g`D0j~u73*cV>4+K0A@QZ+71e^*u74Y|fzXv=O@KnG%0q+D{
z47eC@C*V%N3}6QElYpNDJP+_Zz~2J?7VtfQ?*aTT!2bfg7VuiYmjPb}d<Wn=0KW<N
zO~6Y5F9rM~;2#0c1UwV)0l)_UmjNyVECLplzH}yt0Wbh81JDDQ0m1<a0JH!J0HXnN
z0D=J)0z?9=2hae_1_%Yn1PB6H05A!F1yDl_Jish~dVmoCTL4x7{H)N@Sy4}Wu@}Vc
zMc0ua03ARGfC`{5fFHnM0B?W+0D%C*0F(fI0DJ)k0pP#>0096)0n`Bf0Q>=l0Qdk5
z#F<#BQfo9`Uf%HYfuC0X`N}`P+kXDH{dE7$FW|rV1^zF8%>VL7SGB(V`USzSKl}#B
zzk%{E__p7m+kS)po8OTC<`?q6{0;qI{%HGqdHZ0CW9z!w%vHB~`PWDO^_749<X_Nj
zzy7!V2Hf@=c-!yx`u*?f`~Ttk4{^~fE_%R4qqt}jtxSg??GcDH5CF32qD&SBHUOZQ
zH`1t)05Je&fMozcaw9#bcnhEgpyf6i<o0yE<@9uNI>B=M;c~po<oIgjz~%pUB7olu
z;XcJ<GXj6xljQsIpfA_>JlURGF!|jTjxEn;zA>??Iq;ob=Qa#;eAiNS=J<<Yb9eae
z+xS_j&$wN`JU#TlQ<?gmLw`4Xnw#*@?yKix_g9vjJUiIg`oo%}?I+tCttWWPOL_fj
zK3JXk@U`VPFEwRV&s(evI+N$UVnsA_{f_{x{h%S=xJ18dZfoqa?+PDU`S!6^_4N3Y
zn)`2B1CFoW?)UEX54KOvdui*vr<(RQ$6Wj3<Dc_RPvjQ=X!<tb)VZ|iV;_ASerD7(
z#rdT2r0)+7$T)gnd;8~ij`(t$<>lx1e9OGMZ`T{URHL<3UQ4&0(KUoR{6Bka<Jx=r
z%*|Q&(a?<A=yBOQo{BxU&ikQe<rjwIFWs&G?y}AL*+X}1-{Jjk>wz~TPVORaH~Fle
zbWOoL@qzCP!7l~=v^OBPY+Upj?TdMtPb(L%xY(YwdiC;*ypYr3S=I*>%YXmR^WJ%n
zysI2i+pc{y^-JcDhBKdLnH@X({<>?wu(4`)_m4w=SUzXm+5T5Io_IWK?#UYqGqxsv
zleB#rtN3Eeh48&6W8eMpzVDwu9lhquWAEH(KXoG4v1(TLnfys{RV)8_bl0-8MdLKH
z|2<S4v2?EAKbkfM{4o6?FY`ZQRd?z2{`)r>bWJ0-=cI14t~L0c%-;QGYsNQ$*Um3_
zsp-s^;V&Ki^z#qCZyXrCEv+Kp^YO;T`*!{_Z%>VZ-}Rpz+YY><yRbw3%JI+GsQB-G
z{a5kv*ZYrZ*6;()74`LB@pGjy^SK$hYXUxaF!y2qZv$Ij7k!_->l20FXK(nF%zl<>
zJHAExSkCXtVLf%;tI|`KcOG7uRsPVFyg|Qsug+gL<YZ4v*a_Q%51-W^x$lRSYk%B*
z?b_x2Pt4lCbKrMRe7cNmId!V^*<+i(tUDb!|Mwr~U0J#J*vix|-uuCO`^@{NY)v>D
z7I1p*5WjzQ+^3$h>|sr8{pDppru?|_gUe6kPuQ@3Rovs-G7b;sv%h%j_}Y<EF67LA
zzF2oe9q+$)_W;%Kdq#Ps>^JWDYPA2pt<OC8d6*`5+v4}d@9QRfdvv?-#+k80KRLhX
z)4I%8NBzFy(ra6CIlpJus6O=eeQoBHK&N%3Phr1Qh1a9^9e6(I;awL#3H$7k$RRs)
zuRd}7nSlM@{d?!-a~tpcvDyFR@e`Zwy>RkM*R~&W^7*rOd_7=)#iCKWJANwubZv3`
z&ftp=YO4xz8S#+OJA1LevXA&i)|0C~S>AO*T%BS1HgCZC3x03?c0Azw1-#~gx^3#H
zj8QA!?;Nn~Xkz@TInBlSGw#bh_Q|;iPo2s3|1qY`czSB`CtrN{)f;=ymwmf6-XU%e
z5BYuHzUsO?hr*xTmi*q9&qKYY9NqJ*_xE3qNj<;dz{)ct#y_0BZP$GnU#f=Wq(2w7
z_U@_s{XgIQgsy(bk6sVjFRRAk_>Y}1WYD9_r%bF*9v7zhDlgO2UR<*2{Rb_LFT~E%
zR-ZXIXK&rHYI6Dd;WO<&>*j6$II;AT?N5y3-}pA<rN@%`*4?KcaVGghLHqh=VlQW;
zeE-S#po`n5e!u;tkQXX>ue6tjJR1C=;??Hs<34@m@RSeJ(~B>L<mHJ!&Wt_zM&N^A
zza3in{LlU0eB2PX_5F<E5BI<K6S?xs(W@ksKVP4<^{cc0_#{2u`DWbg(MMLVU3Ify
z-6yLjL|uOHZo^n#AOAIxA$_k-iTiP@PkO^c3kv=dp0&EY^XlDuchpUIn|nIMHt8*&
zr*3@l=D<Dn%D@fhKO7l(dFym>!_}hw2_&~<$XBt`?>@iKYu<*o*`>=JkBysG*ATLx
zSy|oxxtP6ycAkuQukK9bfq<{xik#cN_s%EZf5GpY7wr9f6-O2)O!(d;EWe(ADEX)2
z1?hYD^v`>1%c+_6suu%ac-s8Z_vib3c%<?8^`9<1d-(bvi@#r9IP~I%)#tY_h<USe
zUfROGfddAO=+B%jhzxx-c0~01t8ZpqeDLDNk-mphGb4{au;r7dl^5Qu4!-lq`w`1-
zesTA|ehU5PZ%1c-K92AEX5LocO&^6OH2vB?`RJIq(i=I&Sr<As%)Do3Lg*BBi0{zJ
zclXu&{zdZr+w2MR3(jY4m~gptS<lsrzZ|H$*|YKgwD%@}P<8+R_$65?(xMdA6iG^E
zpF4{glO>7}MWPHd7>1d~*vcbCr9CauN~O>uYblbXQWQ~HD$yfprKnV@|G9St)A~H$
z&v*HJfB)}uu9vgC&v~Esd7t+=_uRSX-Wy+a$27UT;v;!|Oo2-Lo^a>FEGjQGZBAkg
zeNcMhq-!7Z)Z)rBH0?dwmuLvOtZuOC12<}vNX&=3bt>wypIsCQE=IG%>SooFcPY0T
zZ@!!d9f^(ADIB|=y>wB5n_psEn0bA@z-_#}vDT6(@{oPTI#V9#Ld@Y%;#ntLO!8K*
zj19M(^0tk--1WevtG#qbYDxQ@g!*?+3so}GHtC)TXvFO^YByT_G9uvm32RY}P{*Tt
zhLKfsGr7?xS>^HyZ|64WNxV+G$DP@VDJAJTzVWeGgXE;C`5Bj6J|s1Mrd4#_UH-YP
zvM?Y$`m<a1Zl+pN_6j)mc&5JY^w(M{B)pZ;_~0;{N^Y~r`fXK!BRR%uSy;A*_uSf#
z<wIMWt1I#<K5UAuZJIqi;nZNgO{dF5$@|x_3u3K2^aiL1;IXAFE!=7i4a1p<_Pzts
zoui6BM$BJX?qxgSGQ4temtNxjRE?bb30lW=Am_(!IQyR6US73zP7yap+c(=Ri2CTT
z)3|o|ZQTm55$iV@&nrkE#<vwrsH#s^e$g4V_+$xhR#3dPz$Dozq>VhBmad|v=kKhq
zI*rE~))JALaKyTBi;qrx$`qsZ=bH-4-yGaj_1vrRbFp4~YyJ7=!jU~ysp_nl^#)Pd
z@vO7@RibXKaz5Rvb>_0L&x`T`c=x;9qApX^oL+^(*6*`2)bcx$h94wUu-1z|>m%R$
zf++qa3PHDH2P`bIQoNt0rt-X`Tsb>(lhW!@_5<@BM`&!J-x_*%^)B`1_W47&AI7RV
zZLd=uWPD(d=`8obqQeHdv#zy_8y|LP!qjn|<4+7W(b>y+Ikx2CaqYKx{4r&3NW;G-
zz8`VaAZu8>ZLsD@H-?rT_RGj+oAXE6wJaOmWMv1}PTxY^yzLtOZ1-Rq<CO(#aO@i9
zJX$e>=b&inI(ji#_{Tm9`BDQ(Azhmod%*>lb7v>^SwIc`fx<At*2e+*saw(~f5Ej+
zxwgpIz}C)7Z~2tuNt1TBVzfH-CmQC48%=0DH_ghkXX?^HOv5hSrN);+bEfYpdpqOg
zA&N=yrahwfPh6K~EF2%an{Z#OJ9&H9G<(NT@$1nN%e{9(!tbw(vOhg%#VA$vKPGxr
zMy5!jBesv98Gb!kY1!xNSC(haC={%<hze}{2n(NX{TL)zlNYe)MVP<hJe(g1?&Pbk
zIOWCC3iS3lK8@pe@u}zS+M~Qb&vUuw22AqV#BcJ&l-F91KB#3gcY@QLh>-Z%J>HG>
z<!ZWfx1DjbJ@O#YE^$w()u|5US?}hWSzgp%WnqE8!47sEYG%}GGjrU=4dxDhubq7r
z3G<nSAuein&n(zj-0f6wj5hDl$Vi7fQALhz)JJX)oiK~my!2U^wKm0-82{X3z^AG1
zZkEEufhH%HMC*{6&n$i4^r|xJQT>tNKizW}tpW94p5T4+9}iSt)&kEqXdjAcd9~oc
zp%<Jk&zCKaOxkMVUOrt<KK}f?JO5cn{)o?4t8euj5bXMrt~~$ibj`6Jb(YnAnpt|_
zLr8{uxAjw~b45(a8w1nWj$tlVuXnK3x(-h(fBSLgruR3#+Q0Mk2(NdcoU7AV*V91#
zlX<W3?b5~#NjVRzC%%2~cn;-$-H?FVcAxaSr|a5pugo^Sqm<%RMYx%K%U{%5<1tph
zTJy`|%TspjD~&R0xME|beYIkNOUWn3&P#_@)m+@!Hmo@9lwEn!<t?D6u9dwWHu#!E
z#iGJIaLtXeHN}<2XBBUnC7g;6>j~UCW9GDNV+@~e-^V<faNL=@>&>%CJ1<8!?dZN*
zm{fT(>OjH>c;CT@kNfq7d5I$ihV7nRfZO}Wt<F7I(z;D5OXh4`+^oKtzoBx=i~Z5-
z@4cV7VU>;2x;(uradF%|F&8vkSG8u2kG|D#f2DK9_E_(uj;m?fqt~j7@2p9#dX&EF
z9476ilFzXZK`F;0!=Go&89w#Y@Dsw5ldqgSp}q2Ts>yT0(a`xJDQwo6Bc)TjlRM36
z2akP@JiLEb(V?o~(!3{Qlyi$x%}%eovFgl_dpEM_SwnNYhT3G!=WWRJn^aq{#9Hf|
z@;j$|+`jm;x$7GXW14i&H!OC$@RFEVgp7ZlZ(;t1GPPr`PUQ`E+2yqb-_c09za(Jt
zS-5t8yJ7C-_4cZNaGTBx71k=$=3lrw`$3)m8$#H_rUjbbu1PLq96n-?w2e&C{J6CH
z#LTkd<quD$UiCFs6^9rIZ{85CIJr|xdzkU3GbyYCRoZK(v{jCsxh43}3CxwuYqOTA
zGEd=?7nN<+&hw=Ys)E*L^I->*AxmEDdepIS_1ayJO>eDT!^>@=J#e$%QpqwTgsstR
zdG=?R>pb<kmu7w!9J>#8PwOa6+GTBoo#bZka^TTBq0Nfzs&B9Uk!p5FySOKCZdDR#
z+8Mn~m$eg;l2;f_88hqixkwCKaod(I&G&8AX{N3t_qwvu^iFRbhpTyiaGif;=*XdI
z*H1L7tSE~0yrf($N?v?sv~KId{PZryLoM6YPfBhzMMv>9Ov;xBSchFYG*rF(s$W*{
z)T>Gy+vNQEw~0cFtzT<;q8xl)=};OL*iAXBVQ4n+^p*C^l*4gDbjN1iTe+gvml_{l
zJ*{g((DniE4d^~w_r%1pOyXa<ZlCJxX_1Rl=^pYh&2Id;%GXC<JlytWUH%L!-_d)W
z6-85C6j*mGZ8WjHhK>GkZ~hZY?|sRvfDcz=YDW8!FN%k*k0_^jv}8CmyPJJ=o;x|Q
z?Okx(hKy0|lu_MgtCaRnVHWC7csh|CK7aSA+NKTHGu;XF(+giNzV&#1W|YIMJ7Zpa
z6-=aisadUUc=8lqwrcZc(d`2-4YNKtZe6mVWfcwQN{dn3lG++Xn4o%bje6iwT3$-C
z+4+lWdIp+IwHZBo?%PwHp_A|l!w#$uFPfG(u6`G0&b6-a85!2a#R{LRkNB|tbr&bR
zkDwaa?@CDWc=KBC@xU<wcAinSZ#Uoadh+~q<C1xs)k-K&^On_HL4Ji33#*>t9>#51
z;Em;cxI0Pdfd8KJN6)L&T~xS04$3|0q^7F1XRdhM*Qqy;3|q7OjHLPM&>Qud+tP|o
z7+DP)1M7tzi4O6(Qm3h~%=1e|rFieP;OmoKr?|{Y&~8tsp8Q;~c$lT~E4xtdb+2!3
zGO)Pc#_r}iMwomcj^EC1$TD!caCgu1r&m7YY&>W=*h`~hj0)fOV3Ffq#y#?sSkmro
z2@YRo%-DU_*`TMf?ZEJ*9vj0(H4|^nAg3R<SwGCOl{EmfGNvFjzUj{q@7x!CUij1|
zkvaeMMCDZi3l8)4v6~yNRHjp+VD^f;9tM|!a@K`L-hFkwRCssX!a-RFn_I?@>|7a<
zHm8<fJ|bHq?6~{ElC#t+Q3}yt()T^yt))MhoJ<aK)ZLsq%4bc<(gx=AM&Wduvo$+9
zRw}9OY|YPFZliv9{ERFeYi6~%@xq`_m)_lbdNkhGaYA}##j=}2Bs(}~eO@aMMBd#4
zg{fc@UTJWq?^bg>rxI8?M&#eM<*D}((gE(y!y5PE@Dca(Q=0BP9lxu(K2Ghl?X;+@
z$n#I~ja9Z@7#Bb8j3(DV6Z59?>{9F4B6j20hTDGxK4^K~bvw^7re^ik5rV`8+<>&=
z&t4yvt>;~PF;c<Z-dkBv|8c0P_a;^KxAY)PnJr&)@f}Zg%OT&TV#a`$TXU3d&#G2m
z{rSkCyZ};O+Q*sMiGq6t*Y2Ju{9uN!6Z~oU&^_e-UG>W2w@eor)MHOLHbS(rTF2-M
zRh&^1bGz~u<do`Fp4+)Q|NN1mhKl(ImJEzjy)vXeJ8SS$eG_5iT30{YVHY{$j-U21
zHVwVc-l}kKsd8d9rm+2vrqR-@)$5c`=S@hu&~l_L|2839<=Ua4&<A3ITH5AjjYRDg
z{^|v)fu_dsT*0nZZ+C@&0LLy}0mo}K4_o)f3z{oX-uY5T;mGn;s$Cb~4lQ-zW!7IA
ze&(sehNApuJ!j)0y&jBvsMTO>v#}<!^V4lxo?SM_m6qpt^Kc;~xm|#LH2dKZwrSnY
z+LT+Rfi-u#KAH2M`V)iddrtbsSv7d(S6L_-2NMR2dwgt=?UD!Tk=GmsE@eznWFIRU
ztf_fz2xg6oU*2SlaCOdEpWA9TIW0+x8$W1Ft-qF-S(P~HYHeEX!W`4lGji2eo;mMM
zFFq$Y`7%ESv*$w2=>ex74UuG3?|F7-7IlAh*eRuZ23o=QN5%Z<J$U#IE<IK~(4V=?
z-z}|0qjK<ewXgdJK^as2P&ts*F?74dTGhkV;}zcc@s&%yy!UePi01j0j}efU1_dZT
z`Epw)bY0D~Ce4OrZoUs@SA018P`J6M{ln-pMdqHFoA2Dcd${f3t?f~8T}i3^!#DG8
z75KhBTIk}-%2R$|olTxor#`LW)F2&O@_^az*h<ShA9}W5O7nd<9~ZQ_-HKlnQO?QP
zSm+ZocCxTKd7j@Ra>bCaodttu4Va`j>g@c11}2x!(TlRr4>p{Z>$c53$6u+W_G@Zh
zRV8kE{ecaO8Z*Z2<(6c=@P1<u;(vIbV&L{c`_z=vpKFj=Vin)j10k0YJ1@*$^(cSY
z$mLnnGKQSifwxs}-uw7Yk$U9)_A`U;J)F3vruz2l+mB}YJ;>>v&=3=}vS`$ecV`V2
z2{Xf*wa?57i&J%L{W{cN<fBZ#K1^Y-`xf4Tuiai5d``gEno)vE%j7|i!fVy5U(HpD
zai$K)DM|G;;8b~zdT+y@WycH(yO(jxe|G&{xBF%f2m4U!=pE^W8BUD_2QJUbu3Ul5
z`}*|!`8T@P&y}oq%Gr+9&pmwfTorlXjaudH&W$cp_3C{u<oGO`QOcQ}@8PGTXe6Ar
zBX@8S<<gMN2i*of)G=0UM;{s<ql07P$zH3b89QC#3N9=C5!Pk7z%6x+Jv-rQS^av|
zTO|cHAKTm3|JhYvej?9)NM1&i-GLb6&1(~ND`%GscXX=P(+uwt)o|L`+h%0c&Zp$H
zj?_)es~s2<o3KhJap7JlT|3kG<Gplp`JUD=509?`f$nWK>){PIjRQMl^$%@K()u$s
z+X_>Z9>#gy)_k<Bv+BvE#u)vE%h@~+kBnm$R!Pr=0TqU!qR)IPE+7MA<kmh|MQ!?U
zT{!Te6}j_@hf4NKk@M2703No$sPp|HT*>Kmy73`fRg#ILlL|j+#BMq_IlVE0k=+gl
zcSd~mZ?i69U)K4<wb6*t5n(^@saKRmiM{dKd(OI7c4)0v*rZWlc2ut|<^o(_0w-Tq
zpIFdkJ18M_%ZN=0H{B~BHOpF@b<jtz4Pnhr*UuGrI3G?HXvJ+}-HlJs*wt8@=y0_n
zeb|fUkJWEKmTwn()w%~nw2m`#&TCv~ADc8vW4P;3Exj@Nu&BXQkG+@oIUqH%)veW~
zTy65)DwwMfpK(}webOUBYQ;pO!q1*3^_x%SvZ`Js4UaKiqn0hWX03m`%1P_lrzoqb
zk9c8zCaj2eWPR&1<J5E{O2dsvbDRp_%(LE<6Txc~c}BJ4p0sv;`SQ8s!kw!4$cpl0
z)0p+-k9*=(3bG2F!_!iERC-L}oJoo4gVgdqUenAdk6Y62VQ<wX&<Lz&-H?=MZ0vL!
zZvKp|r+85yx>y&+j^0JCoweDxRrv^%cezj}Hg+j{{a8P@f<@+GZHaDz`g$#6`|(4_
zQA?)i81G|3x)07KLc^0|a84UCytZ!3bGr4Q>+-15_AZz9lGGjV>J#o{s1!auqq`|>
zAFeTAwNbm#^?-<%H6rU1-5xr^W-Fr^K8@t&6_-_#!R5cVT_<mnVs__ao%E6vY;3&m
z)TCsCmdhFWpBs}t-0iHORknRz9-SUgxI5eJb9Ry%^LQ-0V!Ez=CP_u>^>`yIyb3NX
z*jm(_>lje=c9~TS+1n#Kto&o`-0J4mp&u&pDw=9zH=RltKKt}0y}|pFMP;!C>~#b5
zJgmmT0u`JVtJF|KW3{h+;>;-L^a1lDJ{H@0m9Jb0U!IVt*R?oDBX$2Vt%UoJogtkb
zdz@RXm)Gu_5l(eB&Gw@mK1MBAUTeJ5t3vm-@uu}7hzSMrCKR;AD<{`iEspAZF^gAn
zQeYh)6ylU@LK{wQ(^FGPSJij+AI9QMOGu4q*-~hIBqd(Q=lpu3DR0UPo1Rx~I#~R<
z(W}0-U2kMz^Lh2usvd*&F)UVmc9f_}|17^;t9xdv6@Ag?ux0mo0eP3B+`3*lsZrir
z!=d?V8CeI1Cv~i6RS>r8e-@*+4odtf17dFnDOwdRR8dR2uUua8TxnBe_CWhlt2IVA
z<`2C^-=e;2_1z)!+nd$Ke&DLsZFd@Uz<AJL_gSX828TuCTCUBSa42m2c+YWDbxa1I
z82gg5SNr(Gk}>?ex5G(q%0|3T{5mYl;HYM>ZM+u4ZRE%=SiMpCo0pAV)?x?SSv66&
zOs}P1+qRiDxce;2;uV9rCU!8Rm^RN;(Sb)^Jld7A?++oV;S!msovwg$xe$xpc_#;7
z6Yz{MOyPlkz~ilx)3>BfX~%srFkW;`&&$qsQu37LnAY8sChB);8HMK>PCM5)VQP=3
zl_7J`Qsbq%UDI<yFU@#cw#S5W=%i@RrsAcpPu>TQUzj1jPuLx{eX?$-qy03==-1+q
zJ9{mo*4+<ZG3T`XAL^>3A}hTnMnp?e!e@@(zDz0k`tmE+KMM+HWCliAtQEo^8-qS>
zeHxIrM&KXzVv!$io+7^!CV8D&q3Ru|#o|mm?&JCNq9gBU?QJgi{GUFP2AuP4;%~C9
zEyvhs9UMK!X~Nvu@gWiRjov+Tb=Ask-Og;YOMGy|s&r4{Eai?<mS%I`S*+5($i9KM
zFdOO`JkzGt$b7@ban7&(9Oe@geO*EdnG4R`Rdebt-Z+nTtiU01<RizTs5@?tsBMcd
zP7fFQyj<g&vNp@(c|6g5>ZbvVg_dqhPMQQZlXRk+-Y-4#D68_-pTS4!TNyd-PrlR#
zJkIyUw=7d1*lsWze$|2*`r^=m1us3jIBh16TAsd)t9gE$y#5*A{ru+<`5isCs;_?8
zB{=YPzH<7<v6|CA)h*NcaG-Q%w|hoNC-l_%O-am(j#yKJ*H$jWy42V^-j+{0{C?BU
zkMHci-lz}v@T@yWacSsTr*V(@C$(|u+ro!ANgE!#omhRJGUst^z>vDT=|1hZ+v`r>
zG0t9D<&~mzEBPj&rd8x$tv}Y|^5QR=rTcbFxzb=1byeHUro?4I#igB$PZw)e9V#By
zwzJ&sRND0|my^n_Ex&SY@UYhv7Ale(YXZ$Hi)+T-R6J`Oe=5OjYhX{<wrMkGY=3Gv
zCgCV^-!886@tu>Nz1h(eeL1P{YWIPtla>465efT0MjTAc6YB2{8#rPwu3+|_&Rc(M
zT1UceoU=q_vwHL5EtMPi>!bI-*f8_`y>&`9tKzQc<;Cpb#;tPIxDY))vvuYDhFh`Q
zE1Xw59`#;3TAQ}!j#xeYQB`sp=G?AhK1w%_rv!b-cpe^kYU=PgCxs`5pE!ACa_Z}q
z+D8e`O;SSUhaNe@VkdV`Ej>sx?>rp&`PiYNUHkJ&gR63t$2>W0mRfXX)s1!8H|`C|
z8Jb1UvKi`?xq&yopmvhqIW6lY`A+YY&&Kb=6*jKVJ+IpobHQzKLs25}B{Kf=3w?RV
z)XFvt&pY*Mi`Om}N@E9pa=?=N`)lE|mvar<|4_AGFFfDGtyNg7F#GO>{5Sq}51Jl^
z5nR1B7dVV@NoqTS{rFKcY2?fk-Af-XFD~=FntC!stZIJarqE#L$rU2wVcJ@(lrx{!
zYF8Z?TiG_{Q1F(SnO86;RF}=VmW)5e)ZSdSXb{~uFMBOiW#RzycfD9LWc9+1N2ZT=
zt>vv*d+PzMDYtTqy;~T;koBxZbIm;0us_XS)~R<pUhwOf)_u@=S5m3lB&^Y+11|O}
zY=rNwzE$0R$1L@az@B1lQc~62O?qdhB_(KIo?^5j`P}DOV-(q#NX@P-+tRGt-tQgh
zYO0sUa>b3?dV1Z#_cbF!EB#MgPa9gaLZw;xl4tDVWKngi?&vdJ>G=z7wH`8Vl{{I^
zkBV+uUT&gsDa<;cTz%-F;4HtZ9HpyM>+_RsErf}0duqOJedXg2wV;8bqj7eM-RXg5
zhAEltS9FKO9bS1ab1c=jcEz;n@c8XP6T0XI?+3)}+3FK-!it-^-SuUzg{Sk7ZWY{k
zyR?T#Uss;{vhCpus~P$0ocE6QeKAF(xU|E%;F_&T<Gl~jSZ~WG^8;AP`)XpYez-{X
z8y&HJsJO+0QtsaDkTKW!tJ%A@#K{>O;(|v}+D9p^GV3m6PT4>4=>+}V^TXL2nrcrG
z+%vDgTzHy3|M9KGvmBx_zrGlA$BRBu(6H7@tqlM4iD>iYRfaDQ+}`T=A!}93f+aLp
z94&Q=TFeAOP^<cyi>i6Fqk-qmno|b$thqSaW~#}lw{vIXCxv#dKQJsIaavJ0W>@{V
z@UClfimfwdRDV_|_GkMXd7rRY*WQR4;gOWE>#^SJH+BJI2EMJ0@_gcTYx9!E)6YxP
zHqTp@_mtuXS=Cn+PArUjh<k?hUa)1--4C2S{s)v)&L2I0LE&QE$=o2ama3Z5IPu&)
zM{Z92dS>~WVMDJrOSWm&-!M8+lm?F(W)*!TRIl!ePl)F-1x;~f#+U2C*Y>)kyq?sq
zoiOY3Nou;~u*DUjcCVCgzFy~j-@;%Mx0~Je!6d?wy?s2<$snuY`JTHMaz0#nI@t2y
z#xWflUI%UYDvZ63MX^)J_Y$`4Ce4`f#lgV&?Ct|?jXfJZmJTO2j|xjC&$u~kz0L6f
ztX9i{n3b46o8m(kxxX7>^K{|o*YlZ)f>p{BZ!<X-S2o-{7DY*~yt{%82VFAohzwnq
zQ+oZ?-G$@s3Y!mR4eA^@zGY5Y#L5xn{MzGT8rf${4!SEuU7_wv{}QdQwfix+{2#no
z*D+{~&!|*p!_t!J!p7-4YR=lIDXr|t%5U9ySlwp1PS%X^=G9E=PeBWfpWb_S$<a6d
zXhmlF1j&$_%Y4pqb~FxDe$5X;_i{`4UIHE_lqW`>Z9wJ(uMi&}o>;o+9*OgVf<X%3
zn~&_h4&((2#Ssv?A6u3qSR&?e0{io$`<cI^1#uxLh{xk%xO{J9>o5oKsG7-!N&zkb
z<O8Gu>;s4c2nX<#(aeQn%W%HLLHb+*1O-CDkT)cR#1Ic0GaxP`fRN3+72a%Ut(zHi
zEZPk6;&3q>0lE(wZ58sJX8ET^kZlskx0-w7wp=!3>1PJjZDB*$t!!uxWC_iK=7RsW
z5COu2S}Z`w7R_rV2(}XQc!=-BlPur}LeTImxiA~48p$h$LZBc>0`Y;=JO~3I1_vTL
z2IZv=Nw?`c1K#$K6FB7aNU2Vc4UlBkPbd(O${w<V*l3QQ(GfQfB12fv3IdvH4Dzvo
zL=uoY5E20&10V$dLx5fp8ST&-Z9xdpG8awrLHP!vdHq0Zf<cG_{s*I6yny~AKnfS|
z5Cduu<O^a!AP3U&P?SSIFNDrVDI8Fa4=t1B6N2<XKoh<Ek$hb6-y5a#WOZUdZ6PRs
zgpL9A3ej2-ng|?%z7kT7GXTW~ZKafJAV>{H<4Dc`z*j0e(k?_gF<MgyNJa7pLCY~H
zKLMIw+A<DWbFZF^(Y7JF<bymsATtIsgiJuH0C1a%Y7emj?>?F2^~w3Erh-rz5$o|r
zdq<4QBL1eN1uByrD9cCN+1uy6{f+PI?;ub@g4#zAsx4p8Rt%^?1j>5L`d7+b0DNg{
zdwWVs36#_5_x0fZ!mfVoZ=RgK%>f^0S-*(;C{hgzQLQ0k{J+C4zHbM%uN}QI_3G_s
zE#Q7v9uL8N<wMXO^^$4vcUnMnfXMgbc*R4Mf3g3<&=&rFoc*jm^1o0YVx`=Fu|85?
zeIm4{5Wb-xzZjGXL3#Xa<n)fkevZBTi2s88OHi&nC>)jCL}pRa7}9gSz4)X2IEeb&
z{uYATcruBl<5?)9BeP&AYK=eV`>h=z(jc6?QOUS+HuL-W9w%o%Kj#xDo8|cEh!dk+
zxqWj$z+dwJSM256nz*RGIWq3OeEY{CqEjJi4~FPG>W7|lkde;o)2-ARejJZjx&Hb4
z@*z2-Hi-0DAR3o^BOg|-fBrsS4*2g2a`bWx{=t5+a`Uwh+6U6nBR%7YK%9@3#Gq#<
z5t<@K<GoTy%W%KZ1>%rxp>1>6=yuSpz(;nt!@x&!bj)U>+d~t9KMY9+{%|DSh7FBC
z(t(d`9W?|#vRJCKW<z6v?+1Jx;CIhrqkCV|fIl8d2mS=$CtI=66%GviiNLqEV585(
z=>tCk_^QBP2K*Q1YzTQ7Sqt!y$IwfGZ-<TzF?yax&c8_87NB!~@2p@BO#=r8Xztt9
zl`RN)fs%-}Bha=FlIdXvdO#2Z=ndiQi{=WHoqMIF5nchPHp9SwrmSzit--QyL`+0^
zJAA{9hPHVJSW8B(l&(YP2L%KP!-6opaBrSSx)cSr9E6TM0kCPr83u(21XIy1yUNI3
zUQK9#GNi1isbpzsIS_FqEV_>vGQ_|Rt}3b!1&eiYPyq{A4AP~Ls;8ePa1azO3I|RV
z<UpQMP*p{C0INbs6!P{ChUPn486*3W5g$jkwM5F!pKD`oZ(#{hj+sGeKyG$g|N2>8
zX2cDIpyI)@@Hh}wl7$oG!ka)?RTkbX7v3Tl-YOT4mkV!`3vZVT=PLGx^W?(F8eUDx
z58dW$4GtRU1*9L4l_}!5vST{BUXvb}zLW^r0io$8Xu63k1=+i8hx%-pZ-LI9()BJf
zGa_y-=>5>|((Gkxw%!yc;EQDIqTVz%I$MOG=TF4VMlB+uFO1CB(z-?Hidulmh}g9^
zguFe)3edgK^<lrQ&qh~G{V7s;du8mEt5=?08G7sPtyfx4L|@&#_4d};TMxpAgPy6y
z=sYf!!3veOKaQ;0kQ~8sX)fpt6@;$bdQ+W2F8R0}I{)^UaYAL2k8{wrNbBpZr<Zpx
zzg|AQ<$;Y@(*gr&!KiU?ft!x80}g`(B7lSJ>`b^^lL)jD2hi<o01KWs4|z-)?Qdad
zU)bJTB1D2tV3hPGvO|1Bf`MSOLj)*~*&#t_N3um?KH7&Iu{YX(JTGwwauJN=;RK;U
zP!GZ%;fwG@cp-cc9-v$V!UHLflts!wP8>;yn9D(VSc&;)$k{JM94t$7;c<g_vWRnt
zG-M|XLKB=qWIjiNlts!R`H_4`9)u2o3tHJVxAcK<CyDf88l=w;=85gS{CVCIoBqet
zT|hm6X3Ghdu+az79fYC~5t=5AOW8nn(g*)%3d3EX`JiWzEA8*Eu@R>n9la)cWi*%&
z2ds%+vnqPzz=2>!T)lcVn2500Xou)HFuNH}fgN0;!F&fMMF$7u#h)0%=(uQ53Ifxj
zpP!$qs!F&>6ebdVGasT47Yle29!A;>j4kq0flxdJr3pB}!5C{kPmJ_d1jd3F>@DVt
zWMl|46M40QG!t7a=0r^SHmyH9h9kikLKx==5$`)Dp2$xV0^|vH3Evwd@e}jFgzF2;
zfI9{94CDj>{ctg%=+pcdZ=omxeMN*s9D*kBB|tJMBTreLQ1o>VzsuR5_qY6d-*3Q?
z@WS~L442oJ3wh38%BMFEKZq~ka|HZlygsTY&kyr=MUu<=Tfx8Ahn!5`w(keM{equJ
zzyTu~`8A8nLu_D?2gX|<3=R?Vq<p@o%TYarfkAu>=sH0#-**c7%(#>TVi!TYFeD)B
z+fW|~2l-`9UW`6Q-{t}FdCtzrd-pvpts&14t^_0Ifx#Wb4+52V{-7N>d4AOQ&-=AM
z-%r)|O<(-de)wWZ2#}h~5AIh{AV>5QJN#*X|5g9}RlfxTm2t#Ul_T$7=w~FeOX-Uz
zexWM4`hQVgD*QL8o*;~N!VhCsHdv8#2^il(9~lqCHjuV@$$Az^^XUsOHie)_00RI9
z!xUmNO`*vkYyw~mFb%*6$rB0k7yutB0}usZ2-b+xfe(tHt5XKT1Nf5xOaP3TMi3|h
zR>mNV0Q{Q<B1R|;f`lTeE)h8qJDmv1n*t!~a|U3<WJ*8kB(rJMo{_vumV^YMZ{`5!
zhb2qIh<f<o6a~T}iI_|TK9A$YN8;WBG17drj1M>sNFz&@Nc{N0z2RU9w=a)~gCtAq
z@aFQo1;9u8fQvjv2X(o!p%(y60Jj0k015#z0nz}H0d@eyxk`U0js|`>fCNAUAOP?K
z-~xC8xC1x<*aBDsSOAy-FaTfxA^;X(I)EX7J^%(l7eE_eB!DKs5CByGB>)JZ$At}b
z19Sm&0K5Qb184zg0=N%Q2XGsp44@Do7a$E_D?luO2*3dV3!sVcS-^&>08RjG1rPw(
z0_X#%0(8#@^#Qy9xDSvIkO`0iumd0*z!d-spbF6B4C(|(1dsqY0O$jBJAv{}QvH<y
z{{%oHKsbOqz&{RoZ1VfVu<!Vh_TyoVzU|}JN9<3IZ*#1aI~4xrAzyx#+@bh4kKVGF
zf4BPo7q}n$)bD@V0u=g>zw5rS0EPZT@oyge7Vw`v{;K`RF%lf|F?rhGZnCW1-^TxL
zd;8n{eG2kvBnXOLxhf`h^_sPD>(+1BxM}m2t?}Eo@7S5JD{=Rpz5DhbNJ>6<=y1xB
zqp4}>$Bv&knQ<yJD?2AQ@AR4cv*!v5&lg=NzF2ap^zxOfW!J8kSKPQ+S#_(r=JuVt
zwRQCk_wGMveAv|d=+BnNtxwvXK70P+<*W9N*Kazz-oAU^{o&)Mp3h&t_C24kHfZn=
zb&a8#!-kI-sWob}_L#9cy5q)Az)YN^r$5<Xis4kFY155om|$^u0+B?fz*HKYVajBg
zalF7u*2mY6?;jut3=)c#ii0H~p<&?>%NDtNEMDUIYx?rYKcZIryW9WouKz!+fA&ms
z3rnk6);6=}*xJptcW|8N<UD_Yi|ax+ss4XW|6iehbI2Z=3osvYhV&umzg-=FVUA!{
z`PUut@_2~HM&Ii&&&k5+Xi<FeJHPkrbS15Xr>qlOkO6N_b4PyX2zGb!7D^=U=0Yyd
z-A~}o2@DSua>I?i!PSqLBXIA1?U=jt-D2+Z!0H*SVP(-7BCgkWbvuB%o4otiR><%3
z9U$HVpv`6X<x!B)k+<3+z8L^gP7vK+R-Q)W_NOCdEx7&s<Xs#n@A+L`5r~J&(&B!>
z-}5_Oh#bW4(#+O^^)2_?wpD<5ot!L4o}aa?@H<}bf#MXnKsVqbDEcS_RXqo1VkHHL
zuA~6{%$doB`PycEynB85_9DQ7{+~2(`xrz<GoDl?2i~_bd|y+dEMKzBhh)0ytwTvJ
z?-yBGvCQv{cP*4k8tEqWUjSZ+4BfyV>C@l;@_dosw=-n<1wWx3UTN0HzwW#GzAiHR
zMxNW>(Fc0`o^HS7_w+%Yzo%Ppeot5M`aS)j@3-^{IeInU3~J^7zI>(dTe`e{risiT
z6Vb2f%K>f0cl7W3(_8%O@`#@k(%&~FA;0dYkg$H*O1bd&?a5sB>-rW&nn6L4-_onT
zD_;=%YkeaA#yBY*ajtP@zvQF4?f3OOKKOh3!y~`%w`pm=FJGN5rSAa#f%Kp2b=fg9
zC<dUvMG)kE{IBN*TYmrC;Lewhbpik9b3<>vx!=jR<Ak(UCE%-{_<4UW&j9w7@ohWh
z<sW&<4AMR&rITg)(Dj$j7l!`*^93@e%C`rZ69(u0UVm$fey{)Tzo6f~{(Jh~8{g8u
zx3j=ozn8D=?(g}(sr!~*_8t99gBjH8I_rOJ$D8l{Ud~w$eow#t#0<I}(0`^N27<8W
z&(Bf+ywm&l@AS4*l-+e=bGc%4w<lwOt&qdD<$H-a;s{{mUJA(OOIaLJRFvIuvXt&O
zontv~uBC17`(3pWs-2J<BH&r0@1k~rpfL*an@O)Dciq6k&OwO2@f)fEapcEOE3l#i
zD;A}B62bf+<aO3i)_{2&elX9n|EBmF1;E{07#Ijx+wy}z{u)JV9!KQFlfNqlLFH(w
zbW3O@8b-H|Ld8nXJaHgDh$G?k?QJbad4`C^U~$=-SfeyQNct*mZeQ&{K15vTh!Uvn
z*W>{<!4}ACtbKW6<ju!`DWn9_WSoU!D;{zWk=IN6Q_-gHmX5g?guFQdCmy<CmmS1)
z67hq~g&`o{Et!_S%L7pd*z!1`KO{r1AWKBMKcqhc>GIlV$@ewrtIJBxeS2xIBH_M0
zwq;1HZ};sLB!()r9kc*&0wn@?T$><oF?y2%f`Sn}$=S(eIXye0ci(Kd$XB`LN&~~_
zEj@Xl3-XR<#3&#xVpC2MuGF9)Xk@>QA@sSNK*Y*?kou5#Z_^+lk|Hf6RU*`h$bjTQ
z?hiuVQobCqBt(Rmj|=2Gz%E1};m?ea@SKG%d@j%2k0XYP2h0P~qM|_aAaj8*SZ3SM
zuz|gqoP~WQp*>P7MPD#)?f^k2<l;bVz-7dbEdb+;gN`%HpisV8h`y8C3B3~%>;g3)
z9DYWCZlKm}j=ohMf>H-KhVaA@4m>eB7=pZ|4F}5Dj@0PP_YRP0;^L2154s}))ks9J
zgcs<{2Qmetx&k36Tggel<B1?KTFwDc7vzV8*+>g1NI82;J0v^^SUa#0J{P%qbKv;$
zpxe?h3M?Fg)*^i(*Ox8|R)UaVKct?S=q7kDBI6)wd!#dhzSI(A`g4J*QEu~iQX@4U
zU~6s%n4<~-`ru3Z6p0~y3{sqs8ZCpk_CC@coUPb@mmT4R?3C%R&*i7*kbm6&4JR^}
zuIXl2Ls0k_He{#`)}i1uIUWFc+jjRjHk7F?&4cW{>wN>a;TUNevVRZxePeE`SwYsA
z3l@F+SnLH}9PSeI`3SRM3D?XFlBf0U`}zqDxz)J@`7{AY|Je#h;XD67n*J;Le>DHE
z=>JalRpt<xkWYZgzZV_xk>3uGy_U#3N0IlMBd_q3zKvMAp6`8~r<%+kB%=+Mqm7c4
zMf{;MzM8T$WPj&y8IbgevUHLx&X&c^WpM{tnR&8wCz<ae<G)Z=w?LMTe1rf4N#Avf
z><JaiWL1{skCw^2Qs%Fc(PL!vSQ(#q0Ay$60a^T@Or8{3eW|kaGcx&Z%ILK+y0%LH
zJK_<&ya(4Ae+S9?rFM?^3i5`d`D0%q_5IGadi(Yt_mBI#4w)OG2mN)v|G&Dwy054B
zof{x?z2)2N*ifBa|8F$kpYOguuOZ_Tnd>6wv7vAP34jPd0N@9}1#ky&2CxM%10VuS
z2fzU60%!w_1keN+0-y?@1ONf_II^K`fG&UzfHr{p0Ji}u9Hse7fnNxa3y=no46p+r
z4j>jF8bAWz3E&K%rqn<0*n+qP00V#sFdaZ2Ko{W+(Br^{UI5eqlmg@eBm*P@Yz2q|
zhz1A;5CQlBcmlWrH~?4!m;qn`bOAI0lw|q4?E!Cq`v7GC`2Z;ZTLIz#q5%W|764d#
zX+QjTor}3^+5e^S-roS_9rE4pUKh6r=)x1Ul>>AJ%2vhwc#q}3-f8~QN$Hqhy8i*;
z{s-Kz?*>ZgzrLIJ@0I(%(*0kz0h#-M+!Qj`f%T=Ll4=S#b9t_cST#|We)OT#KX^py
zuS{w}9*u&`qM}hh4dlOgxZyD77kpQKk@{vbKkskmXUqK4Ab;hdmP2Eq$A{VuE&4V8
zsDo(85nQM^HY{$yKua3@8}L8ouc>Qn`T#+=C~3*w-^+WQ{PXvSn;}C7m}_nK{WVs|
zTo=giu<zGE=5A!pUhlz1W!UJ^e?FQ4{qMR){F#&9Qyzd`CmMpwDCFA{X23_T6<wv5
zRdV?hr1$fGkskMp^yHtUBWsQPALNjxm;EBW4usk=6`(e-xN4Ez46n*jK);jG8*c$|
zH--K<ve_3SZ4=-kOO(5K(uCwM!J?&-Mn_9M<Uo?ZzvALzkn$D%1B+>?ha6wgwKZh%
zU*LSW$bT!TXJKJmaRu=zDthB_NXWKqV_$qD$WRg27cT=Dkbk}W0O<-qX<r3^CPzjy
z$deHc@?^9Mu6(=#t@7La+;7P88EmEXaplORavV@mZTmCWqO!=f2bD#xy%nWWeOUZW
zCskyxI)P@r3!uR{K5`id1Oi#Ufj&My^3nf*gZ`)7faqTkkg<lrXrfk*j1UEgA^RR?
z1SULC5EN`WDMTDZ3-<Qo1#*Io1Nq1&V}(8vV{c&~jT0O=BNR6Y6UYhT`|yG#3#4ys
zF`a~)ft|!uAB4d$B;t@@^xo6o<VKK|10{ob-XUVXBtjMkDPrEz5Ks$`>mcTb@&!C!
zUT_~#o@^NoiXvB4w!BcD03$&Dn@-{c+XRIQ19;*|m=HeO8~J(LbdnE85X_szWSIP-
zaDU|{zpkBO@{OzvlfFiSIK!k@pG*g~1KYyFX6`IkS6SfywKy{AA>VXQ$DYF0Vvpm~
z2$h6c#314-;z8nZVjl4V@fxv)_<;C?_?q~MIFK}yG=`){GA2<-7Ni9vKT;%V6)B#y
zi*%fnNy;Z(CN+>Al3GbGNIfJ)vI<$9JcYcNe2kn)E+SWv?~)&rKawGeCq+z&r|hO=
zQO;22z>e@@I1-M7H^T?u6!;}<Obw)FQ`@P#>BxkQ>;WX<+;NGxp@dZ8Y2qbf6)}{y
zk9M5))pRnG$V9$1gv{IXa2(tK<U^Ha(z*TxHV{9Ophrj}oF=#u1Bq_1KP&<Kz3CzJ
zwRFJS0fMx_`C$o`i#?5P!?t4~+#sAjZU)W_Hyg*p32=YlVnMBkaJjewTn(-P_Z;^I
zr;OLc>*A;4&GEDGi|{;rBz_Hk8$Jnt4PS$Qh<}bBMu;MuBfKCe5eE}T5VeWAL=4e}
zC?swo?jR--_YsqcDa17531TMkBM~AgkyJ@TNMh0-q(o8@DTS0qIzhTYdQX~4#*&F-
zn9LxXkuAv9WLt6qc^^5MoI*|`Z=`Ia?4=x{lv1cL8+L}5z+5;Kj)qsm2jS!JMYsZP
zg<r!TU^VJcDu%j{>P=lo-AX-1&7$6?M$zJF#k5Y^2ig~!GJO;sLpPw)=yU1$^b7O^
z#!Y4f3qrryR1CcF*r`}k>?~{}b{_5qE*5V}m``vcTqHG<#FUQ|W0(eSg0tZZpuRe|
z1%3wiz)GOT1=K}U9yN)YLOl*@G^3rM-J><rI%sBeE4nLPLSIIYrmvxIq;CT~kW5dd
zXVCNLh4f4Ga(WH@9{mZugZ`HOi9V2_!5G7s%rIim7%YY*V-ADE@MDCSE;HpZ1<X)p
z95ab|l9|K2%Y49m#~j4cWQ}1>XF0I8vRYWkqQo8as}fcN>xSiF1F&1M3D~{ZbZiDT
z2b+&A!@kFU#ty{U;v8`sa9eS^aQkqFacQ{IxY2kF-T<G0Kaa1#H{y#3WrRC~5yY{?
zDMVwU4>6b+0eUbAjEOAbd0>SV#A@O_Fe+XW--2<WLQ*G<CFzrlNJKCy0>Fs4MXDt!
zpd&z!Oeb^5_sCz!suVMdHL(0$l#`Tf$~j6g<tpU{<u;{(@`&=3@{00~@|7|e)`YcS
z9e4sf88(8kFbTGR-C$4H4-SMw;AQYCcr6$y`{6@y8k_~+f@|S+Sc{6II#YeA`+?q1
zP<3e&X+|_E&7H=f`OyBL-J;#4y{GliCeo+Sjp=pt2lRHjI%6VZ3L~D8!B8~4Z`xwo
zV>+4{#M}t<n#Js9YO=<%NGwy9Im?l?nzfCU%Bo|%MQj6{auR{Z#tN~!vDsJyTrh48
z7$4VgmAI$4ZrnipF#JTkA)W%phXY;$#>NhOIz9(qj~_zNA?OpV31Nf`LIL3(;Voeb
z(Vln*XikANjU*z4kv5WQNDoM=WDJ=}_9AZswq8wsOa4SIqBK)pP=<mzVivW4s!rFZ
zpQAsgi%boeSY`{elj+Y2V<8XcBhRSWVi#cFVTm{&+-6)I{uw@jaDb3QC?f12Qb_Yj
z%Src0&qxEwW2u_76kuy37(|9P6IqlZ_ZCE02{s%XiH*j_V&kwIv8mV=>?^D?&IHUW
z>u^T+TZE5<F+`ZSomc>7!#3i0(hQO-iBAdzqjwWJdIyq+k##ASlw)9Cs{wrq!*k#<
zR2pptJ&ZoWbQ|(8T_*CpJh)!My~ce4bICZOC)pRwizbw6${WffcrcYqt)`uzM>0+_
zE-{o$^-POR-<XbN?qKFJ&ob|^nvp&LgEI|yM4UNpIc_!X3hox}9_|J1J?;#!*eb$Z
zpxtJI9nlHQI=hH}65GL?J&ZIF%+`)14-$_QNQxjGA{`?M$y>;YK+E^YE#waJR0^KL
zr1(-YDLr6D-VQ&3k5TKW4m5w-a#}8JCVd4xfv#*i+SJi>v8kVFsObvRb*AS{%S@|H
zpPRllRb@_RdNUK5$C)}Tn6;ACfyh|}K^4Fo3iP=Zdl;LCt-{t}o51MP#7)PMaCDpn
z&Iad-TLH%2SunT0#_hnL!I$96@OAhH_*eLM_#V76VF+OqL6=}aFd@(gEMPzL2p)t)
zLN=j-aFcWg^rtI1g1m~HPCiX8AYUUZP)1TFQ)W|EQxZW-swjG(2e@EvJP9|zkKqy2
ziBu!1KQ)q?PklgrMjcMGpxM&a(=O3o($wkZbUQF3888S8TZTX5DB~t0*fha3i&=^E
zTN4EBK+ci4slcLB@mGM1&+(tZoajNok)6mJ$vNa2@&j@gc?^XCMsgv2BEy(*gmHmU
z#`wx`Gu>#KVtU*($28xx5cKF%)1gdbaOQ%U45k^=f@#gPWjZkTFq4@n%rxc+=5W?H
zphXtTf@RIJWd*W!v97VIShv9#yw7R^Gh7?%1)|>$={+zqmVq_HT41fgh&+nDj12_V
z@EAz<7Vk~q6G8|l2&IG_l%te<%5}<piXuD`Hh^JxHtY@u0nKa!XT;NR8PHEB%%I+(
z9-&R3&jd4ZIwO-Y-IQRu*|fk^jakjS%0kwW7(^A=R_t@^Ypfz}6cJCfBf1jZi5wz?
z?nOhM8=a2B;)pmH$G};GIX070NGSs|ToV|>-4rD-x9OrEEmT0?pU{MF!MEXG;5+bL
z_-@eO5J8E6B@hWPK|l}@B!qB+EyJ1N&fqcx3<)EW5zE-f*umJxNMW2{<T45wrHl&3
zZN_~@3*!Z&iy_snfGJ{1nBh#wK>@Wth^j<Yr4FHLQb$s?sk-2ts82PdPN!n2L@G>W
zP|c_oRBNg&)d9?)u2grbCm4f%Q~^~)l~BWhtwd8}sd3be;2gSxnn>M8O$Kvp8kl7>
zsky+83aQ1^Qfe8sf?7qr4Mxm;Y7@1E+D3gr?Vxs1yQw`?h^9nSr46BJ(niv>X}UBF
zO`m2+n@+>hh%}hSpqT+Hv<7zQKy#+Kf;roh#-;hu1T+y%LJOxw(xPd|IavYymZLkt
zlTb&v57rkQgf2o4VI){#V2Nf#3$zymL=iEZxD{Pv<P!6VW#AlDMXV!s5E&#-l7J*3
z?I7&~^Hd$FiPT2wAa#K?nkHGBJRPhs{K#=&ZBa&U1Lr7xiXk{laVdV3SV|lv4eh@U
zFfVAsL|{3ta5x+bC&R^X6AS@uBDzF0=n8Zd2eed-Y6H;$(r!)AW~9Z_K|4J`Tav;0
zqlpHAm4_MKmhMN7qo>g!^uv;d=w|sLSWPSjtB-}T4p;%0hph>=1P6jM!IgltolEdT
zEhC(Or4Yfn)Q=*dh$s?DI3<!2jY_+bvX!y}jQ)L;WJ(H<{REf?a)Ip^f^%&tXh{W_
z6>d}Nz({DKv{2fBRd!IifMxbjAXo`jg@*tO#lZToAv_(Ndy)1sU^8$AwuWtC2e8_5
z1>?pO%qf1b02YDuWH?y4Mgx7s!5iVN@D4Z;-UoD(0?y4R;7m9d&W8(urb@vGGX&O#
zXvq)QQokM5nRYXKm=H^erOFxt)-fYl+ALj`Ay~~|Swt`kFj!`?dBB0?%KFb=H2&lM
aasRk~+&}Ig_mBI>{p0>||G59l?*9Ws9lLD+
diff --git a/plugins/amxxpc32.dll b/plugins/amxxpc32.dll
index 7dd0a44f0b2aad822f896eac29031e2ede6e32a9..969e69d08011f50cd04b6ecc9993faee55283086
GIT binary patch
literal 261120
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
DdclS6
diff --git a/plugins/amxxpc32.dylib b/plugins/amxxpc32.dylib
new file mode 100644
index 0000000000000000000000000000000000000000..d8281c57cb9e478bef0651fa5ff8d7026df0c2a6
GIT binary patch
literal 173104
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
N!JW}}_GVDv^Pej-a(Dm$
diff --git a/plugins/amxxpc32.so b/plugins/amxxpc32.so
index 844212940d5cfac2ed2b59a1370261f8b4fe8046..c6aa6b74db6f865995b363f9675ec4e645d51d44
GIT binary patch
literal 207368
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
YcdIZ;jL^`l%}@F_&>#@OwYL2~0Z*v`tpET3
diff --git a/plugins/amxxpc_osx b/plugins/amxxpc_osx
new file mode 100644
index 0000000000000000000000000000000000000000..d0cd8f805779a3a8b07c4480cce87b226b331637
GIT binary patch
literal 66960
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
R!NUKDou3D~9X8xQ{~x^it0Vvb
diff --git a/plugins/compile.sh b/plugins/compile.sh
--- a/plugins/compile.sh
+++ b/plugins/compile.sh
@@ -7,18 +7,25 @@
#
# This file is part of AMX Mod X.
# new code contributed by \malex\
test -e compiled || mkdir compiled
rm -f temp.txt
+# Choose compiler binary
+if test `uname` = "Darwin"; then
+ pc=./amxxpc_osx
+else
+ pc=./amxxpc
+fi
+
for sourcefile in *.sma
do
amxxfile="`echo $sourcefile | sed -e 's/\.sma$/.amxx/'`"
echo -n "Compiling $sourcefile ..."
- ./amxxpc $sourcefile -ocompiled/$amxxfile >> temp.txt
+ $pc $sourcefile -ocompiled/$amxxfile >> temp.txt
echo "done"
done
less temp.txt
rm temp.txt
diff --git a/plugins/include/amxmodx.inc b/plugins/include/amxmodx.inc
--- a/plugins/include/amxmodx.inc
+++ b/plugins/include/amxmodx.inc
@@ -197,16 +197,19 @@ native is_user_connecting(index);
native is_user_alive(index);
/* Returns 1 or 0. */
native is_dedicated_server();
/* Returns 1 or 0. */
native is_linux_server();
+/* Returns 1 or 0 */
+native is_mac_server();
+
/* Returns 1 or 0. */
native is_jit_enabled();
/* Returns AMXX's version string of the current gameserver */
native get_amxx_verstring(buffer[], length);
/* If player is not attacked function returns 0, in other
* case returns index of attacking player. On second and third
diff --git a/plugins/include/fakemeta.inc b/plugins/include/fakemeta.inc
--- a/plugins/include/fakemeta.inc
+++ b/plugins/include/fakemeta.inc
@@ -94,41 +94,42 @@ native pev_serial(entindex);
* Example:
* new model[128]
* new ptr = pev(id, pev_viewmodel)
* global_get(glb_pStringBase, ptr, model, 127)
*/
native global_get(_value, any:...);
/* Returns an integer from private data. _linuxdiff is added into the _Offset if it's used on a linux server. */
-native get_pdata_int(_index,_Offset,_linuxdiff=5);
+native get_pdata_int(_index,_Offset,_linuxdiff=5,_macdiff=5);
/* Sets an integer from private data. _linuxdiff is added into the _Offset if it's used on a linux server. */
-native set_pdata_int(_index,_Offset,_Value,_linuxdiff=5);
+native set_pdata_int(_index,_Offset,_Value,_linuxdiff=5,_macdiff=5);
/* Returns a float from private data. _linuxdiff is added into the _Offset if it's used on a linux server. */
-native Float:get_pdata_float(_index,_Offset,_linuxdiff=5);
+native Float:get_pdata_float(_index,_Offset,_linuxdiff=5,_macdiff=5);
/* Sets a float from private data. _linuxdiff is added into the _Offset if it's used on a linux server. */
-native set_pdata_float(_index,_Offset,Float:_Value,_linuxdiff=5);
+native set_pdata_float(_index,_Offset,Float:_Value,_linuxdiff=5,_macdiff=5);
/**
* Tries to retrieve an edict (entity encapsulation) pointer from an entity's private data.
*
* This function is byte-addressable. Unlike get_pdata_int() which searches in byte increments of 4,
* get_pdata_end searches in increments of 1.
*
* @param _index Entity index.
* @param _offset Offset to search.
- * @param _linuxdiff Linux difference.
+ * @param _linuxdiff Linux difference.
+ * @param _macdiff Mac OS X difference.
* @return -2 if an invalid entity was found.
* -1 if an empty entity was found.
* Otherwise, an entity index is returned.
*/
-native get_pdata_ent(_index, _offset, _linuxdiff=20);
+native get_pdata_ent(_index, _offset, _linuxdiff=20, _macdiff=20);
/* Registers a forward.
* Returns an id you can pass to unregister_forward
*/
native register_forward(_forwardType,const _function[],_post=0);
/* Unregisters a forward.
* The registerId must be from register_forward, and
@@ -212,27 +213,29 @@ native set_es(es_handle, EntityState:mem
// Use 0 for uc_handle to specify the global usercmd handle
native get_uc(uc_handle, UserCmd:member, {Float,_}:...);
native set_uc(uc_handle, UserCmd:member, {Float,_}:...);
//NOTE that for the string offsets below, on AMD64, a byref (char **) offset is NOT the same as an int offset
//In fact it's QWORD aligned rather than DWORD aligned, so the offset will be exactly half.
//Gets a string from a private offset. If byref is false, the string is treated as static rather than dynamic.
//linux value is what to add to the offset for linux servers.
+//mac value is what to add to the offset for os x servers.
//this cannot use a default value due to older version using an awkward default value.
-native get_pdata_string(entity, offset, dest[], maxlength, byref=1, linux);
+native get_pdata_string(entity, offset, dest[], maxlength, byref=1, linux, mac=cellmin);
//Sets a string in a private offset.
//realloc = -1 - nonbyref copy (static
//realloc = 0 - copy byref, no realloc *(char **)
//realloc = 1 - reallocate new string with free+malloc
//realloc = 2 - reallocate new string with delete[]+new[]
//linux value is what to add to the offset for linux servers.
+//mac value iswhat to add to the offset for os x servers.
//this cannot use a default value due to older version using an awkward default value.
-native set_pdata_string(entity, offset, const source[], realloc=2, linux);
+native set_pdata_string(entity, offset, const source[], realloc=2, linux, mac=cellmin);
// Copies the given infoBuffer pointer into out[]
// An infoBuffer pointer is returned by EngFunc_GetInfoKeyBuffer
native copy_infokey_buffer(infoBuffer, out[], maxlen);
/**
* Looks up the sequence for the entity.
diff --git a/plugins/include/hamsandwich.inc b/plugins/include/hamsandwich.inc
--- a/plugins/include/hamsandwich.inc
+++ b/plugins/include/hamsandwich.inc
@@ -310,46 +310,49 @@ native bool:IsHamValid(Ham:function);
* This requires the mod to have the pev and base fields set in hamdata.ini.
* Note this dereferences memory! Improper use of this will crash the server.
* This will return an index of the corresponding cbase field in private data.
* Returns -1 on a null entry.
*
* @param id The entity to examine the private data.
* @param offset The windows offset of the data.
* @param linuxdiff The linux difference of the data.
+ * @param macdiff The mac os x difference of the data.
* @return The index of the corresponding pdata field. -1 for none set.
*/
-native get_pdata_cbase(id, offset, linuxdiff=5);
+native get_pdata_cbase(id, offset, linuxdiff=5, macdiff=5);
/**
* This is used to compliment fakemeta's {get,set}_pdata_{int,float,string}.
* This requires the mod to have the pev and base fields set in hamdata.ini.
* This will set the corresponding cbase field in private data with the index.
* Pass -1 to null the entry.
*
* @param id The entity to examine the private data.
* @param offset The windows offset of the data.
* @param value The index to store, -1 for invalid
* @param linuxdiff The linux difference of the data.
+ * @param macdiff The mac os x difference of the data.
*/
-native set_pdata_cbase(id, offset, value, linuxdiff=5);
+native set_pdata_cbase(id, offset, value, linuxdiff=5, macdiff=5);
/**
* This is similar to the get_pdata_cbase, however it does not dereference memory.
* This is many times slower than get_pdata_cbase, and this should only be used
* for testing and finding of offsets, not actual release quality plugins.
* This will return an index of the corresponding cbase field in private data.
* Returns -1 on a null entry. -2 on an invalid entry.
*
* @param id Entry to examine the private data.
* @param offset The windows offset of the data.
* @param linuxdiff The linux difference of the data.
+ * @param macdiff The mac os x difference of the data.
* @return The index of the corresponding pdata field, -1 for null, -2 for invalid.
*/
-native get_pdata_cbase_safe(id, offset, linuxdiff=5);
+native get_pdata_cbase_safe(id, offset, linuxdiff=5, macdiff=5);
// This is the callback from the module, this handles any fatal errors.
// This will in turn call the "HamFilter(Ham:id, HamError:err, const reason[])" public, if it exists.
// Return PLUGIN_HANDLED from within the HamFilter to stop the plugin from failing.
// Any other return value will fail the plugin.