Executable memory is now provided by MM:S's allocator, this should reduce virtual memory usage.
3 * =============================================================================
5 * Copyright (C) 2004-2007 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>.
32 #include "sourcemod.h"
33 #include "HandleSys.h"
34 #include "GameConfigs.h"
36 HandleType_t g_GameConfigsType;
38 class GameConfigsNatives :
39 public IHandleTypeDispatch,
43 void OnSourceModAllInitialized()
45 g_GameConfigsType = g_HandleSys.CreateType("GameConfigs", this, 0, NULL, NULL, g_pCoreIdent, NULL);
47 void OnSourceModShutdown()
49 g_HandleSys.RemoveType(g_GameConfigsType, g_pCoreIdent);
50 g_GameConfigsType = 0;
52 void OnHandleDestroy(HandleType_t type, void *object)
54 g_GameConfigs.CloseGameConfigFile(reinterpret_cast<IGameConfig *>(object));
58 static cell_t smn_LoadGameConfigFile(IPluginContext *pCtx, const cell_t *params)
64 pCtx->LocalToString(params[1], &filename);
65 if (!g_GameConfigs.LoadGameConfigFile(filename, &gc, error, sizeof(error)))
67 return pCtx->ThrowNativeError("Unable to open %s: %s", filename, error);
70 return g_HandleSys.CreateHandle(g_GameConfigsType, gc, pCtx->GetIdentity(), g_pCoreIdent, NULL);
73 static cell_t smn_GameConfGetOffset(IPluginContext *pCtx, const cell_t *params)
75 Handle_t hndl = static_cast<Handle_t>(params[1]);
81 sec.pIdentity = g_pCoreIdent;
83 if ((herr=g_HandleSys.ReadHandle(hndl, g_GameConfigsType, &sec, (void **)&gc))
86 return pCtx->ThrowNativeError("Invalid game config handle %x (error %d)", hndl, herr);
91 pCtx->LocalToString(params[2], &key);
93 if (!gc->GetOffset(key, &val))
101 static cell_t smn_GameConfGetKeyValue(IPluginContext *pCtx, const cell_t *params)
103 Handle_t hndl = static_cast<Handle_t>(params[1]);
109 sec.pIdentity = g_pCoreIdent;
111 if ((herr=g_HandleSys.ReadHandle(hndl, g_GameConfigsType, &sec, (void **)&gc))
114 return pCtx->ThrowNativeError("Invalid game config handle %x (error %d)", hndl, herr);
119 pCtx->LocalToString(params[2], &key);
121 if ((val=gc->GetKeyValue(key)) == NULL)
126 pCtx->StringToLocalUTF8(params[3], params[4], val, NULL);
131 static GameConfigsNatives s_GameConfigsNatives;
133 REGISTER_NATIVES(gameconfignatives)
135 {"LoadGameConfigFile", smn_LoadGameConfigFile},
136 {"GameConfGetOffset", smn_GameConfGetOffset},
137 {"GameConfGetKeyValue", smn_GameConfGetKeyValue},