dvander@592: /** dvander@592: * vim: set ts=4 : dvander@592: * =============================================================== dvander@592: * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. dvander@592: * =============================================================== dvander@592: * dvander@592: * This file is not open source and may not be copied without explicit dvander@592: * written permission of AlliedModders LLC. This file may not be redistributed dvander@592: * in whole or significant part. dvander@592: * For information, see LICENSE.txt or http://www.sourcemod.net/license.php dvander@592: * dvander@592: * Version: $Id$ dvander@592: */ dvander@592: dvander@592: #ifndef _INCLUDE_SOURCEMOD_CGAMECONFIGS_H_ dvander@592: #define _INCLUDE_SOURCEMOD_CGAMECONFIGS_H_ dvander@592: dvander@592: #include dvander@592: #include dvander@592: #include dvander@592: #include "sm_trie.h" dvander@592: #include "sm_globals.h" dvander@592: #include "sm_memtable.h" dvander@592: dvander@592: using namespace SourceMod; dvander@592: using namespace SourceHook; dvander@592: dvander@592: class SendProp; dvander@592: dvander@592: class CGameConfig : dvander@592: public ITextListener_SMC, dvander@592: public IGameConfig dvander@592: { dvander@971: friend class GameConfigManager; dvander@592: public: dvander@592: CGameConfig(const char *file); dvander@592: ~CGameConfig(); dvander@592: public: dvander@592: bool Reparse(char *error, size_t maxlength); dvander@592: public: //ITextListener_SMC dvander@592: SMCParseResult ReadSMC_NewSection(const char *name, bool opt_quotes); dvander@592: SMCParseResult ReadSMC_KeyValue(const char *key, const char *value, bool key_quotes, bool value_quotes); dvander@592: SMCParseResult ReadSMC_LeavingSection(); dvander@592: public: //IGameConfig dvander@592: const char *GetKeyValue(const char *key); dvander@592: bool GetOffset(const char *key, int *value); dvander@592: SendProp *GetSendProp(const char *key); dvander@947: bool GetMemSig(const char *key, void **addr); dvander@592: public: dvander@592: void IncRefCount(); dvander@592: unsigned int DecRefCount(); dvander@592: private: dvander@592: BaseStringTable *m_pStrings; dvander@592: char *m_pFile; dvander@592: Trie *m_pOffsets; dvander@592: Trie *m_pProps; dvander@592: Trie *m_pKeys; dvander@947: Trie *m_pSigs; dvander@592: unsigned int m_RefCount; dvander@592: /* Parse states */ dvander@592: int m_ParseState; dvander@592: unsigned int m_IgnoreLevel; ds@1064: char m_Class[64]; ds@1064: char m_Prop[64]; dvander@592: char m_offset[64]; ds@1064: char m_Game[256]; dvander@947: bool bShouldBeReadingDefault; dvander@592: }; dvander@592: dvander@616: class GameConfigManager : dvander@592: public IGameConfigManager, dvander@592: public SMGlobalClass dvander@592: { dvander@592: public: dvander@616: GameConfigManager(); dvander@616: ~GameConfigManager(); dvander@592: public: //IGameConfigManager dvander@592: bool LoadGameConfigFile(const char *file, IGameConfig **pConfig, char *error, size_t maxlength); dvander@592: void CloseGameConfigFile(IGameConfig *cfg); dvander@949: IGameConfig *ReadHandle(Handle_t hndl, dvander@949: IdentityToken_t *ident, dvander@949: HandleError *err); dvander@592: public: //SMGlobalClass dvander@592: void OnSourceModStartup(bool late); dvander@592: void OnSourceModAllInitialized(); dvander@592: void OnSourceModAllShutdown(); dvander@592: private: dvander@592: List m_cfgs; dvander@592: Trie *m_pLookup; dvander@592: }; dvander@592: dvander@616: extern GameConfigManager g_GameConfigs; dvander@592: extern IGameConfig *g_pGameConf; dvander@592: dvander@592: #endif //_INCLUDE_SOURCEMOD_CGAMECONFIGS_H_