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()