Update CS:GO team score gamedata.
2 * vim: set ts=4 sw=4 tw=99 et:
3 * =============================================================================
5 * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
6 * =============================================================================
8 * This program is free software; you can redistribute it and/or modify it under
9 * the terms of the GNU General Public License, version 3.0, as published by the
10 * Free Software Foundation.
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17 * You should have received a copy of the GNU General Public License along with
18 * this program. If not, see <http://www.gnu.org/licenses/>.
20 * As a special exception, AlliedModders LLC gives you permission to link the
21 * code of this program (as well as its derivative works) to "Half-Life 2," the
22 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
23 * by the Valve Corporation. You must obey the GNU General Public License in
24 * all respects for all other code used. Additionally, AlliedModders LLC grants
25 * this exception to all derivative works. AlliedModders LLC defines further
26 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
27 * or <http://www.sourcemod.net/license.php>.
35 #include "sp_vm_types.h"
36 #include <KeCodeAllocator.h>
37 #include "sp_file_headers.h"
38 #include "sp_vm_engine.h"
39 #include "zlib/zlib.h"
40 #include "sp_vm_basecontext.h"
46 SourcePawnEngine g_engine1;
49 #define WIN32_LEAN_AND_MEAN
51 #elif defined __GNUC__
59 using namespace SourcePawn;
61 #define ERROR_MESSAGE_MAX 30
62 static const char *g_ErrorMsgTable[] =
65 "Unrecognizable file format",
66 "Decompressor was not found",
67 "Not enough space on the heap",
68 "Invalid parameter or parameter type",
69 "Invalid plugin address",
70 "Object or index not found",
71 "Invalid index or index not found",
72 "Not enough space on the stack",
73 "Debug section not found or debug not enabled",
74 "Invalid instruction",
75 "Invalid memory access",
76 "Stack went below stack boundary",
77 "Heap went below heap boundary",
79 "Array index is out of bounds",
80 "Instruction contained invalid parameter",
81 "Stack memory leaked by native",
82 "Heap memory leaked by native",
83 "Dynamic array is too big",
84 "Tracker stack is out of bounds",
85 "Native is not bound",
86 "Maximum number of parameters reached",
87 "Native detected error",
88 "Plugin not runnable",
90 "Plugin format is too old",
91 "Plugin format is too new",
94 "Script execution timed out"
97 const char *SourcePawnEngine::GetErrorString(int error)
99 if (error < 1 || error > ERROR_MESSAGE_MAX)
104 return g_ErrorMsgTable[error];
107 SourcePawnEngine::SourcePawnEngine()
112 SourcePawnEngine::~SourcePawnEngine()
116 void *SourcePawnEngine::ExecAlloc(size_t size)
119 return VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
120 #elif defined __GNUC__
121 # if defined __APPLE__
122 void *base = valloc(size);
124 void *base = memalign(sysconf(_SC_PAGESIZE), size);
126 if (mprotect(base, size, PROT_READ|PROT_WRITE|PROT_EXEC) != 0)
135 void *SourcePawnEngine::AllocatePageMemory(size_t size)
137 return g_Jit.AllocCode(size);
140 void SourcePawnEngine::SetReadExecute(void *ptr)
145 void SourcePawnEngine::SetReadWrite(void *ptr)
150 void SourcePawnEngine::FreePageMemory(void *ptr)
155 void SourcePawnEngine::ExecFree(void *address)
158 VirtualFree(address, 0, MEM_RELEASE);
159 #elif defined __GNUC__
164 void SourcePawnEngine::SetReadWriteExecute(void *ptr)
166 //:TODO: g_ExeMemory.SetRWE(ptr);
170 void *SourcePawnEngine::BaseAlloc(size_t size)
175 void SourcePawnEngine::BaseFree(void *memory)
180 sp_plugin_t *SourcePawnEngine::LoadFromFilePointer(FILE *fp, int *err)
184 *err = SP_ERROR_ABORTED;
190 sp_plugin_t *SourcePawnEngine::LoadFromMemory(void *base, sp_plugin_t *plugin, int *err)
194 *err = SP_ERROR_ABORTED;
200 int SourcePawnEngine::FreeFromMemory(sp_plugin_t *plugin)
202 return SP_ERROR_ABORTED;
205 IDebugListener *SourcePawnEngine::SetDebugListener(IDebugListener *pListener)
207 IDebugListener *old = m_pDebugHook;
209 m_pDebugHook = pListener;
214 unsigned int SourcePawnEngine::GetEngineAPIVersion()
216 return SOURCEPAWN_ENGINE_API_VERSION;
219 unsigned int SourcePawnEngine::GetContextCallCount()
224 void SourcePawnEngine::ReportError(BaseRuntime *runtime, int err, const char *errstr, cell_t rp_start)
226 if (m_pDebugHook == NULL)
231 CContextTrace trace(runtime, err, errstr, rp_start);
233 m_pDebugHook->OnContextExecuteError(runtime->GetDefaultContext(), &trace);
236 CContextTrace::CContextTrace(BaseRuntime *pRuntime, int err, const char *errstr, cell_t start_rp)
237 : m_pRuntime(pRuntime), m_Error(err), m_pMsg(errstr), m_StartRp(start_rp), m_Level(0)
239 m_ctx = pRuntime->m_pCtx->GetCtx();
240 m_pDebug = m_pRuntime->GetDebugInfo();
243 bool CContextTrace::DebugInfoAvailable()
245 return (m_pDebug != NULL);
248 const char *CContextTrace::GetCustomErrorString()
253 int CContextTrace::GetErrorCode()
258 const char *CContextTrace::GetErrorString()
260 if (m_Error > ERROR_MESSAGE_MAX || m_Error < 1)
262 return "Invalid error code";
266 return g_ErrorMsgTable[m_Error];
270 void CContextTrace::ResetTrace()
275 bool CContextTrace::GetTraceInfo(CallStackInfo *trace)
283 else if (m_ctx->rp > 0)
285 /* Entries go from ctx.rp - 1 to m_StartRp */
286 cell_t offs, start, end;
289 start = m_ctx->rp - 1;
292 if (start - offs < end)
297 cip = m_ctx->rstk_cips[start - offs];
310 if (m_pDebug->LookupFile(cip, &(trace->filename)) != SP_ERROR_NONE)
312 trace->filename = NULL;
315 if (m_pDebug->LookupFunction(cip, &(trace->function)) != SP_ERROR_NONE)
317 trace->function = NULL;
320 if (m_pDebug->LookupLine(cip, &(trace->line)) != SP_ERROR_NONE)
330 const char *CContextTrace::GetLastNative(uint32_t *index)
332 if (m_ctx->n_err == SP_ERROR_NONE)
338 if (m_pRuntime->GetNativeByIndex(m_ctx->n_idx, &native) != SP_ERROR_NONE)
345 *index = m_ctx->n_idx;
351 IDebugListener *SourcePawnEngine::GetDebugHook()