tools/gdc-psyfork/GameConfigs.h
author Nicholas Hastings <skamonkey@gmail.com>
Mon Jul 02 23:27:22 2012 -0400 (2012-07-02)
changeset 3572 a3b3cb039d7a
parent 3513 50b5b98b3400
child 3574 b51285ca203f
permissions -rw-r--r--
Updated CS:S gamedata.
skamonkey@3513
     1
/**
skamonkey@3513
     2
 * vim: set ts=4 :
skamonkey@3513
     3
 * =============================================================================
skamonkey@3513
     4
 * SourceMod
skamonkey@3513
     5
 * Copyright (C) 2004-2008 AlliedModders LLC.  All rights reserved.
skamonkey@3513
     6
 * =============================================================================
skamonkey@3513
     7
 *
skamonkey@3513
     8
 * This program is free software; you can redistribute it and/or modify it under
skamonkey@3513
     9
 * the terms of the GNU General Public License, version 3.0, as published by the
skamonkey@3513
    10
 * Free Software Foundation.
skamonkey@3513
    11
 * 
skamonkey@3513
    12
 * This program is distributed in the hope that it will be useful, but WITHOUT
skamonkey@3513
    13
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
skamonkey@3513
    14
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
skamonkey@3513
    15
 * details.
skamonkey@3513
    16
 *
skamonkey@3513
    17
 * You should have received a copy of the GNU General Public License along with
skamonkey@3513
    18
 * this program.  If not, see <http://www.gnu.org/licenses/>.
skamonkey@3513
    19
 *
skamonkey@3513
    20
 * As a special exception, AlliedModders LLC gives you permission to link the
skamonkey@3513
    21
 * code of this program (as well as its derivative works) to "Half-Life 2," the
skamonkey@3513
    22
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
skamonkey@3513
    23
 * by the Valve Corporation.  You must obey the GNU General Public License in
skamonkey@3513
    24
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
skamonkey@3513
    25
 * this exception to all derivative works.  AlliedModders LLC defines further
skamonkey@3513
    26
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
skamonkey@3513
    27
 * or <http://www.sourcemod.net/license.php>.
skamonkey@3513
    28
 *
skamonkey@3513
    29
 * Version: $Id$
skamonkey@3513
    30
 */
skamonkey@3513
    31
skamonkey@3513
    32
#ifndef _INCLUDE_SOURCEMOD_CGAMECONFIGS_H_
skamonkey@3513
    33
#define _INCLUDE_SOURCEMOD_CGAMECONFIGS_H_
skamonkey@3513
    34
skamonkey@3513
    35
#include <IGameConfigs.h>
skamonkey@3513
    36
#include <ITextParsers.h>
skamonkey@3513
    37
//#include <sh_list.h>
skamonkey@3513
    38
#include "sm_trie.h"
skamonkey@3513
    39
//#include "sm_globals.h"
skamonkey@3513
    40
#include "sm_memtable.h"
skamonkey@3513
    41
#include "sm_trie_tpl.h"
skamonkey@3513
    42
//#include "ThreadSupport.h"
skamonkey@3513
    43
#include <list>
skamonkey@3513
    44
#include <map>
skamonkey@3513
    45
#include "gdc.h"
skamonkey@3513
    46
#include <limits.h>
skamonkey@3513
    47
#include <string>
skamonkey@3513
    48
#include <cstring>
skamonkey@3513
    49
#include <cstdio>
skamonkey@3513
    50
skamonkey@3513
    51
#define PLATFORM_MAX_PATH PATH_MAX
skamonkey@3513
    52
skamonkey@3513
    53
using std::map;
skamonkey@3513
    54
using std::list;
skamonkey@3513
    55
using namespace SourceMod;
skamonkey@3513
    56
//using namespace SourceHook;
skamonkey@3513
    57
skamonkey@3513
    58
extern char *game;
skamonkey@3513
    59
extern char *engine;
skamonkey@3513
    60
skamonkey@3513
    61
#define PARSE_ERROR -1
skamonkey@3513
    62
struct cmp_str 
skamonkey@3513
    63
{
skamonkey@3513
    64
	bool operator()(char const *a, char const *b) 
skamonkey@3513
    65
	{
skamonkey@3513
    66
		return std::strcmp(a, b) < 0;
skamonkey@3513
    67
	}
skamonkey@3513
    68
};
skamonkey@3513
    69
skamonkey@3513
    70
struct Offset
skamonkey@3513
    71
{
skamonkey@3513
    72
	char *name;
skamonkey@3513
    73
	char *symbol;
skamonkey@3513
    74
	int lin;
skamonkey@3513
    75
	int win;
skamonkey@3513
    76
skamonkey@3513
    77
	Offset()
skamonkey@3513
    78
	{
skamonkey@3513
    79
		name = symbol = NULL;
skamonkey@3513
    80
		lin = win = -1;
skamonkey@3513
    81
	}
skamonkey@3513
    82
skamonkey@3513
    83
	~Offset()
skamonkey@3513
    84
	{
skamonkey@3513
    85
		delete name;
skamonkey@3513
    86
		delete symbol;
skamonkey@3513
    87
	}
skamonkey@3513
    88
skamonkey@3513
    89
	void reset()
skamonkey@3513
    90
	{
skamonkey@3513
    91
		delete name;
skamonkey@3513
    92
		delete symbol;
skamonkey@3513
    93
		lin = win = -1;
skamonkey@3513
    94
	}
skamonkey@3513
    95
skamonkey@3513
    96
	void setName(const char *src)
skamonkey@3513
    97
	{
skamonkey@3513
    98
		delete name;
skamonkey@3513
    99
		name = new char[strlen(src)+1];
skamonkey@3513
   100
		strcpy(name, src);
skamonkey@3513
   101
	}
skamonkey@3513
   102
skamonkey@3513
   103
	void setSymbol(const char *src)
skamonkey@3513
   104
	{
skamonkey@3513
   105
		delete symbol;
skamonkey@3513
   106
		symbol = new char[strlen(src)+1];
skamonkey@3513
   107
		strcpy(symbol, src);
skamonkey@3513
   108
	}
skamonkey@3513
   109
skamonkey@3513
   110
	void setLin(int offs)
skamonkey@3513
   111
	{
skamonkey@3513
   112
		lin = offs;
skamonkey@3513
   113
	}
skamonkey@3513
   114
skamonkey@3513
   115
	void setWin(int offs)
skamonkey@3513
   116
	{
skamonkey@3513
   117
		win = offs;
skamonkey@3513
   118
	}
skamonkey@3513
   119
};
skamonkey@3513
   120
skamonkey@3513
   121
enum Library
skamonkey@3513
   122
{
skamonkey@3513
   123
	Engine,
skamonkey@3513
   124
	Server
skamonkey@3513
   125
};
skamonkey@3513
   126
skamonkey@3513
   127
struct Sig
skamonkey@3513
   128
{
skamonkey@3513
   129
	char *name;
skamonkey@3513
   130
	char *win;
skamonkey@3513
   131
	char *lin;
skamonkey@3513
   132
	Library lib;
skamonkey@3513
   133
skamonkey@3513
   134
	Sig()
skamonkey@3513
   135
	{
skamonkey@3513
   136
		name = win = lin = NULL;
skamonkey@3513
   137
		lib = (Library) -1;
skamonkey@3513
   138
	}
skamonkey@3513
   139
skamonkey@3513
   140
	~Sig()
skamonkey@3513
   141
	{
skamonkey@3513
   142
		delete name;
skamonkey@3513
   143
		delete win;
skamonkey@3513
   144
		delete lin;
skamonkey@3513
   145
	}
skamonkey@3513
   146
skamonkey@3513
   147
	void reset()
skamonkey@3513
   148
	{
skamonkey@3513
   149
		delete name;
skamonkey@3513
   150
		delete win;
skamonkey@3513
   151
		delete lin;
skamonkey@3513
   152
		lib = (Library) -1;
skamonkey@3513
   153
	}
skamonkey@3513
   154
skamonkey@3513
   155
	void setName(const char *src)
skamonkey@3513
   156
	{
skamonkey@3513
   157
		delete name;
skamonkey@3513
   158
		name = new char[strlen(src)+1];
skamonkey@3513
   159
		strcpy(name, src);
skamonkey@3513
   160
	}
skamonkey@3513
   161
skamonkey@3513
   162
	void setWin(const char *src)
skamonkey@3513
   163
	{
skamonkey@3513
   164
		delete win;
skamonkey@3513
   165
		win = new char[strlen(src)+1];
skamonkey@3513
   166
		strcpy(win, src);
skamonkey@3513
   167
	}
skamonkey@3513
   168
skamonkey@3513
   169
	void setLin(const char *src)
skamonkey@3513
   170
	{
skamonkey@3513
   171
		delete lin;
skamonkey@3513
   172
		lin = new char[strlen(src)+1];
skamonkey@3513
   173
		strcpy(lin, src);
skamonkey@3513
   174
	}
skamonkey@3513
   175
skamonkey@3513
   176
	void setLib(const char *src)
skamonkey@3513
   177
	{
skamonkey@3513
   178
		if (stricmp(src, "server") == 0) lib = Server;
skamonkey@3513
   179
		else if (stricmp(src, "engine") == 0) lib = Engine;
skamonkey@3513
   180
		else lib = (Library)-1;
skamonkey@3513
   181
	}
skamonkey@3513
   182
};
skamonkey@3513
   183
skamonkey@3513
   184
class SendProp;
skamonkey@3513
   185
skamonkey@3513
   186
class CGameConfig : 
skamonkey@3513
   187
	public ITextListener_SMC//,
skamonkey@3513
   188
//	public IGameConfig
skamonkey@3513
   189
{
skamonkey@3513
   190
public:
skamonkey@3513
   191
	CGameConfig();//const char *file);//, const char *game, const char *engine);
skamonkey@3513
   192
	~CGameConfig();
skamonkey@3513
   193
public:
skamonkey@3513
   194
	bool Reparse(char *error, size_t maxlength);
skamonkey@3513
   195
	bool EnterFile(const char *file, char *error, size_t maxlength);
skamonkey@3513
   196
	list<Offset> GetOffsets();
skamonkey@3513
   197
	list<Sig> GetSigs();
skamonkey@3513
   198
public: //ITextListener_SMC
skamonkey@3513
   199
	SMCResult ReadSMC_NewSection(const SMCStates *states, const char *name);
skamonkey@3513
   200
	SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value);
skamonkey@3513
   201
	SMCResult ReadSMC_LeavingSection(const SMCStates *states);
skamonkey@3513
   202
public: //IGameConfig
skamonkey@3513
   203
	const char *GetKeyValue(const char *key);
skamonkey@3513
   204
	bool GetOffset(const char *key, int *value);
skamonkey@3513
   205
	SendProp *GetSendProp(const char *key);
skamonkey@3513
   206
	bool GetMemSig(const char *key, void **addr);
skamonkey@3513
   207
public:
skamonkey@3513
   208
//	void IncRefCount();
skamonkey@3513
   209
//	unsigned int DecRefCount();
skamonkey@3513
   210
private:
skamonkey@3513
   211
//	bool DoesGameMatch(const char *value);
skamonkey@3513
   212
//	bool DoesEngineMatch(const char *value);
skamonkey@3513
   213
public:
skamonkey@3513
   214
	BaseStringTable *m_pStrings;
skamonkey@3513
   215
	char m_File[PLATFORM_MAX_PATH];
skamonkey@3513
   216
	char m_CurFile[PLATFORM_MAX_PATH];
skamonkey@3513
   217
	list<Offset> m_Offsets;
skamonkey@3513
   218
	list<Sig> m_Sigs;
skamonkey@3513
   219
//	map<const char*,const char*,cmp_str> m_Keys;
skamonkey@3513
   220
	KTrie<int> m_Keys;
skamonkey@3513
   221
	unsigned int m_RefCount;
skamonkey@3513
   222
	/* Parse states */
skamonkey@3513
   223
	int m_ParseState;
skamonkey@3513
   224
	unsigned int m_IgnoreLevel;
skamonkey@3513
   225
	char m_Class[64];
skamonkey@3513
   226
	char m_Prop[64];
skamonkey@3513
   227
	char m_offset[64];
skamonkey@3513
   228
	char m_Game[256];
skamonkey@3513
   229
	char m_gdcGame[256];
skamonkey@3513
   230
	char m_gdcEngine[256];
skamonkey@3513
   231
	bool bShouldBeReadingDefault;
skamonkey@3513
   232
	bool had_game;
skamonkey@3513
   233
	bool matched_game;
skamonkey@3513
   234
	bool had_engine;
skamonkey@3513
   235
	bool matched_engine;
skamonkey@3513
   236
skamonkey@3513
   237
	/* Custom Sections */
skamonkey@3513
   238
	unsigned int m_CustomLevel;
skamonkey@3513
   239
	ITextListener_SMC *m_CustomHandler;
skamonkey@3513
   240
};
skamonkey@3513
   241
skamonkey@3513
   242
#endif //_INCLUDE_SOURCEMOD_CGAMECONFIGS_H_