core/GameConfigs.h
author Scott Ehlert <ds@alliedmods.net>
Sun Mar 30 07:00:22 2008 +0000 (2008-03-30)
changeset 1952 b7aa2b626807
child 2217 eca7057167a0
permissions -rw-r--r--
Spring Cleaning, Part Ichi (1)
Various minor things done to project files
Updated sample extension project file and updated makefile to the new unified version (more changes likely on the way)
Updated regex project file and makefile
ds@1952
     1
/**
ds@1952
     2
 * vim: set ts=4 :
ds@1952
     3
 * =============================================================================
ds@1952
     4
 * SourceMod
ds@1952
     5
 * Copyright (C) 2004-2008 AlliedModders LLC.  All rights reserved.
ds@1952
     6
 * =============================================================================
ds@1952
     7
 *
ds@1952
     8
 * This program is free software; you can redistribute it and/or modify it under
ds@1952
     9
 * the terms of the GNU General Public License, version 3.0, as published by the
ds@1952
    10
 * Free Software Foundation.
ds@1952
    11
 * 
ds@1952
    12
 * This program is distributed in the hope that it will be useful, but WITHOUT
ds@1952
    13
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
ds@1952
    14
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
ds@1952
    15
 * details.
ds@1952
    16
 *
ds@1952
    17
 * You should have received a copy of the GNU General Public License along with
ds@1952
    18
 * this program.  If not, see <http://www.gnu.org/licenses/>.
ds@1952
    19
 *
ds@1952
    20
 * As a special exception, AlliedModders LLC gives you permission to link the
ds@1952
    21
 * code of this program (as well as its derivative works) to "Half-Life 2," the
ds@1952
    22
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
ds@1952
    23
 * by the Valve Corporation.  You must obey the GNU General Public License in
ds@1952
    24
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
ds@1952
    25
 * this exception to all derivative works.  AlliedModders LLC defines further
ds@1952
    26
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
ds@1952
    27
 * or <http://www.sourcemod.net/license.php>.
ds@1952
    28
 *
ds@1952
    29
 * Version: $Id$
ds@1952
    30
 */
ds@1952
    31
ds@1952
    32
#ifndef _INCLUDE_SOURCEMOD_CGAMECONFIGS_H_
ds@1952
    33
#define _INCLUDE_SOURCEMOD_CGAMECONFIGS_H_
ds@1952
    34
ds@1952
    35
#include <IGameConfigs.h>
ds@1952
    36
#include <ITextParsers.h>
ds@1952
    37
#include <sh_list.h>
ds@1952
    38
#include "sm_trie.h"
ds@1952
    39
#include "sm_globals.h"
ds@1952
    40
#include "sm_memtable.h"
ds@1952
    41
ds@1952
    42
using namespace SourceMod;
ds@1952
    43
using namespace SourceHook;
ds@1952
    44
ds@1952
    45
class SendProp;
ds@1952
    46
ds@1952
    47
class CGameConfig : 
ds@1952
    48
	public ITextListener_SMC,
ds@1952
    49
	public IGameConfig
ds@1952
    50
{
ds@1952
    51
	friend class GameConfigManager;
ds@1952
    52
public:
ds@1952
    53
	CGameConfig(const char *file);
ds@1952
    54
	~CGameConfig();
ds@1952
    55
public:
ds@1952
    56
	bool Reparse(char *error, size_t maxlength);
ds@1952
    57
public: //ITextListener_SMC
ds@1952
    58
	SMCResult ReadSMC_NewSection(const SMCStates *states, const char *name);
ds@1952
    59
	SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value);
ds@1952
    60
	SMCResult ReadSMC_LeavingSection(const SMCStates *states);
ds@1952
    61
public: //IGameConfig
ds@1952
    62
	const char *GetKeyValue(const char *key);
ds@1952
    63
	bool GetOffset(const char *key, int *value);
ds@1952
    64
	SendProp *GetSendProp(const char *key);
ds@1952
    65
	bool GetMemSig(const char *key, void **addr);
ds@1952
    66
public:
ds@1952
    67
	void IncRefCount();
ds@1952
    68
	unsigned int DecRefCount();
ds@1952
    69
private:
ds@1952
    70
	BaseStringTable *m_pStrings;
ds@1952
    71
	char *m_pFile;
ds@1952
    72
	Trie *m_pOffsets;
ds@1952
    73
	Trie *m_pProps;
ds@1952
    74
	Trie *m_pKeys;
ds@1952
    75
	Trie *m_pSigs;
ds@1952
    76
	unsigned int m_RefCount;
ds@1952
    77
	/* Parse states */
ds@1952
    78
	int m_ParseState;
ds@1952
    79
	unsigned int m_IgnoreLevel;
ds@1952
    80
	char m_Class[64];
ds@1952
    81
	char m_Prop[64];
ds@1952
    82
	char m_offset[64];
ds@1952
    83
	char m_Game[256];
ds@1952
    84
	bool bShouldBeReadingDefault;
ds@1952
    85
};
ds@1952
    86
ds@1952
    87
class GameConfigManager : 
ds@1952
    88
	public IGameConfigManager,
ds@1952
    89
	public SMGlobalClass
ds@1952
    90
{
ds@1952
    91
public:
ds@1952
    92
	GameConfigManager();
ds@1952
    93
	~GameConfigManager();
ds@1952
    94
public: //IGameConfigManager
ds@1952
    95
	bool LoadGameConfigFile(const char *file, IGameConfig **pConfig, char *error, size_t maxlength);
ds@1952
    96
	void CloseGameConfigFile(IGameConfig *cfg);
ds@1952
    97
	IGameConfig *ReadHandle(Handle_t hndl,
ds@1952
    98
		IdentityToken_t *ident,
ds@1952
    99
		HandleError *err);
ds@1952
   100
public: //SMGlobalClass
ds@1952
   101
	void OnSourceModStartup(bool late);
ds@1952
   102
	void OnSourceModAllInitialized();
ds@1952
   103
	void OnSourceModAllShutdown();
ds@1952
   104
private:
ds@1952
   105
	List<CGameConfig *> m_cfgs;
ds@1952
   106
	Trie *m_pLookup;
ds@1952
   107
};
ds@1952
   108
ds@1952
   109
extern GameConfigManager g_GameConfigs;
ds@1952
   110
extern IGameConfig *g_pGameConf;
ds@1952
   111
ds@1952
   112
#endif //_INCLUDE_SOURCEMOD_CGAMECONFIGS_H_