core/AdminCache.cpp
changeset 1656 b0b86d57530c
parent 1477 b2d8f676a902
child 1839 1f3aaf8fbd12
     1.1 --- a/core/AdminCache.cpp	Tue Oct 30 20:43:59 2007 +0000
     1.2 +++ b/core/AdminCache.cpp	Wed Oct 31 05:04:07 2007 +0000
     1.3 @@ -82,22 +82,21 @@
     1.4  private:
     1.5  	bool Parse()
     1.6  	{
     1.7 -		unsigned int line = 0;
     1.8 -		SMCParseError error;
     1.9 +		SMCStates states;
    1.10 +		SMCError error;
    1.11  
    1.12 -		m_Line = 0;
    1.13  		m_bFileNameLogged = false;
    1.14  		g_SourceMod.BuildPath(Path_SM, m_File, sizeof(m_File), "configs/admin_levels.cfg");
    1.15  
    1.16 -		if ((error = textparsers->ParseFile_SMC(m_File, this, &line, NULL))
    1.17 -			!= SMCParse_Okay)
    1.18 +		if ((error = textparsers->ParseFile_SMC(m_File, this, &states))
    1.19 +			!= SMCError_Okay)
    1.20  		{
    1.21  			const char *err_string = textparsers->GetSMCErrorString(error);
    1.22  			if (!err_string)
    1.23  			{
    1.24  				err_string = "Unknown error";
    1.25  			}
    1.26 -			ParseError("Error %d (%s)", error, err_string);
    1.27 +			ParseError(NULL, "Error %d (%s)", error, err_string);
    1.28  			return false;
    1.29  		}
    1.30  
    1.31 @@ -109,12 +108,12 @@
    1.32  		m_IgnoreLevel = 0;
    1.33  		memset(g_FlagSet, 0, sizeof(g_FlagSet));
    1.34  	}
    1.35 -	SMCParseResult ReadSMC_NewSection(const char *name, bool opt_quotes)
    1.36 +	SMCResult ReadSMC_NewSection(const SMCStates *states, const char *name)
    1.37  	{
    1.38  		if (m_IgnoreLevel)
    1.39  		{
    1.40  			m_IgnoreLevel++;
    1.41 -			return SMCParse_Continue;
    1.42 +			return SMCResult_Continue;
    1.43  		}
    1.44  
    1.45  		if (m_LevelState == LEVEL_STATE_NONE)
    1.46 @@ -122,35 +121,41 @@
    1.47  			if (strcmp(name, "Levels") == 0)
    1.48  			{
    1.49  				m_LevelState = LEVEL_STATE_LEVELS;
    1.50 -			} else {
    1.51 +			} 
    1.52 +			else 
    1.53 +			{
    1.54  				m_IgnoreLevel++;
    1.55  			}
    1.56  		} else if (m_LevelState == LEVEL_STATE_LEVELS) {
    1.57  			if (strcmp(name, "Flags") == 0)
    1.58  			{
    1.59  				m_LevelState = LEVEL_STATE_FLAGS;
    1.60 -			} else {
    1.61 +			} 
    1.62 +			else 
    1.63 +			{
    1.64  				m_IgnoreLevel++;
    1.65  			}
    1.66 -		} else {
    1.67 +		} 
    1.68 +		else 
    1.69 +		{
    1.70  			m_IgnoreLevel++;
    1.71  		}
    1.72  
    1.73 -		return SMCParse_Continue;
    1.74 +		return SMCResult_Continue;
    1.75  	}
    1.76 -	SMCParseResult ReadSMC_KeyValue(const char *key, const char *value, bool key_quotes, bool value_quotes)
    1.77 +	SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value)
    1.78  	{
    1.79  		if (m_LevelState != LEVEL_STATE_FLAGS || m_IgnoreLevel)
    1.80  		{
    1.81 -			return SMCParse_Continue;
    1.82 +			return SMCResult_Continue;
    1.83  		}
    1.84  
    1.85  		unsigned char c = (unsigned)value[0];
    1.86  
    1.87  		if (c < (unsigned)'a' || c > (unsigned)'z')
    1.88  		{
    1.89 -			ParseError("Flag \"%c\" is not a lower-case ASCII letter", c);
    1.90 -			return SMCParse_Continue;
    1.91 +			ParseError(states, "Flag \"%c\" is not a lower-case ASCII letter", c);
    1.92 +			return SMCResult_Continue;
    1.93  		}
    1.94  
    1.95  		c -= (unsigned)'a';
    1.96 @@ -159,38 +164,35 @@
    1.97  
    1.98  		if (!g_Admins.FindFlag(key, &g_FlagLetters[c]))
    1.99  		{
   1.100 -			ParseError("Unrecognized admin level \"%s\"", key);
   1.101 -			return SMCParse_Continue;
   1.102 +			ParseError(states, "Unrecognized admin level \"%s\"", key);
   1.103 +			return SMCResult_Continue;
   1.104  		}
   1.105  
   1.106  		g_FlagSet[c] = true;
   1.107  
   1.108 -		return SMCParse_Continue;
   1.109 +		return SMCResult_Continue;
   1.110  	}
   1.111 -	SMCParseResult ReadSMC_LeavingSection()
   1.112 +	SMCResult ReadSMC_LeavingSection(const SMCStates *states)
   1.113  	{
   1.114  		if (m_IgnoreLevel)
   1.115  		{
   1.116  			m_IgnoreLevel--;
   1.117 -			return SMCParse_Continue;
   1.118 +			return SMCResult_Continue;
   1.119  		}
   1.120  
   1.121  		if (m_LevelState == LEVEL_STATE_FLAGS)
   1.122  		{
   1.123  			m_LevelState = LEVEL_STATE_LEVELS;
   1.124 -			return SMCParse_Halt;
   1.125 -		} else if (m_LevelState == LEVEL_STATE_LEVELS) {
   1.126 +			return SMCResult_Halt;
   1.127 +		} 
   1.128 +		else if (m_LevelState == LEVEL_STATE_LEVELS) 
   1.129 +		{
   1.130  			m_LevelState = LEVEL_STATE_NONE;
   1.131  		}
   1.132  
   1.133 -		return SMCParse_Continue;
   1.134 +		return SMCResult_Continue;
   1.135  	}
   1.136 -	SMCParseResult ReadSMC_RawLine(const char *line, unsigned int curline)
   1.137 -	{
   1.138 -		m_Line = curline;
   1.139 -		return SMCParse_Continue;
   1.140 -	}
   1.141 -	void ParseError(const char *message, ...)
   1.142 +	void ParseError(const SMCStates *states, const char *message, ...)
   1.143  	{
   1.144  		va_list ap;
   1.145  		char buffer[256];
   1.146 @@ -205,14 +207,13 @@
   1.147  			m_bFileNameLogged = true;
   1.148  		}
   1.149  
   1.150 -		g_Logger.LogError("[SM] (Line %d): %s", m_Line, buffer);
   1.151 +		g_Logger.LogError("[SM] (Line %d): %s", states ? states->line : 0, buffer);
   1.152  	}
   1.153  private:
   1.154  	bool m_bFileNameLogged;
   1.155  	char m_File[PLATFORM_MAX_PATH];
   1.156  	int m_LevelState;
   1.157  	int m_IgnoreLevel;
   1.158 -	unsigned int m_Line;
   1.159  } s_FlagReader;
   1.160  
   1.161  AdminCache::AdminCache()