1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/plugins/admin-flatfile/admin-overrides.sp Tue Feb 06 05:07:49 2007 +0000
1.3 @@ -0,0 +1,127 @@
1.4 +#define OVERRIDE_STATE_NONE 0
1.5 +#define OVERRIDE_STATE_LEVELS 1
1.6 +#define OVERRIDE_STATE_OVERRIDES 2
1.7 +
1.8 +static Handle:g_hOverrideParser = INVALID_HANDLE;
1.9 +static g_OverrideState = OVERRIDE_STATE_NONE;
1.10 +
1.11 +static LogOverrideError(const String:format[], {Handle,String,Float,_}:...)
1.12 +{
1.13 + decl String:buffer[512];
1.14 +
1.15 + if (!g_LoggedFileName)
1.16 + {
1.17 + LogError("Error(s) detected parsing admin_levels.cfg:");
1.18 + g_LoggedFileName = true;
1.19 + }
1.20 +
1.21 + VFormat(buffer, sizeof(buffer), format, 2);
1.22 +
1.23 + LogError(" (%d) %s", ++g_ErrorCount, buffer);
1.24 +}
1.25 +
1.26 +
1.27 +public SMCResult:ReadOverrides_NewSection(Handle:smc, const String:name[], bool:opt_quotes)
1.28 +{
1.29 + if (g_OverrideState == OVERRIDE_STATE_NONE)
1.30 + {
1.31 + if (StrEqual(name, "Levels"))
1.32 + {
1.33 + g_OverrideState = OVERRIDE_STATE_LEVELS;
1.34 + }
1.35 + } else if (g_OverrideState == OVERRIDE_STATE_LEVELS) {
1.36 + if (StrEqual(name, "Overrides"))
1.37 + {
1.38 + g_OverrideState = OVERRIDE_STATE_OVERRIDES;
1.39 + }
1.40 + }
1.41 +
1.42 + return SMCParse_Continue;
1.43 +}
1.44 +
1.45 +public SMCResult:ReadOverrides_KeyValue(Handle:smc,
1.46 + const String:key[],
1.47 + const String:value[],
1.48 + bool:key_quotes,
1.49 + bool:value_quotes)
1.50 +{
1.51 + if (g_OverrideState != OVERRIDE_STATE_OVERRIDES)
1.52 + {
1.53 + return SMCParse_Continue;
1.54 + }
1.55 +
1.56 + new AdminFlag:flag = Admin_None;
1.57 +
1.58 + if (strlen(value) > 1)
1.59 + {
1.60 + LogOverrideError("Unrecognized access level: %s", value);
1.61 + return SMCParse_Continue;
1.62 + }
1.63 +
1.64 + if (value[0] >= 'a' && value[0] <= 'z')
1.65 + {
1.66 + flag = g_FlagLetters[value[0] - 'a'];
1.67 + }
1.68 +
1.69 + if (key[0] == '@')
1.70 + {
1.71 + AddCommandOverride(key[1], Override_CommandGroup, flag);
1.72 + } else {
1.73 + AddCommandOverride(key, Override_Command, flag);
1.74 + }
1.75 +
1.76 + return SMCParse_Continue;
1.77 +}
1.78 +
1.79 +public SMCResult:ReadOverrides_EndSection(Handle:smc)
1.80 +{
1.81 + if (g_OverrideState == OVERRIDE_STATE_LEVELS)
1.82 + {
1.83 + g_OverrideState = OVERRIDE_STATE_NONE;
1.84 + } else if (g_OverrideState == OVERRIDE_STATE_OVERRIDES) {
1.85 + /* We're totally done parsing */
1.86 + g_OverrideState = OVERRIDE_STATE_LEVELS;
1.87 + return SMCParse_Halt;
1.88 + }
1.89 +
1.90 + return SMCParse_Continue;
1.91 +}
1.92 +
1.93 +static InitializeOverrideParser()
1.94 +{
1.95 + if (g_hOverrideParser == INVALID_HANDLE)
1.96 + {
1.97 + g_hOverrideParser = SMC_CreateParser();
1.98 + SMC_SetReaders(g_hOverrideParser,
1.99 + ReadOverrides_NewSection,
1.100 + ReadOverrides_KeyValue,
1.101 + ReadOverrides_EndSection);
1.102 + }
1.103 +}
1.104 +
1.105 +ReadOverrides()
1.106 +{
1.107 + new String:path[PLATFORM_MAX_PATH];
1.108 +
1.109 + InitializeOverrideParser();
1.110 +
1.111 + BuildPath(Path_SM, path, sizeof(path), "configs/admin_levels.cfg");
1.112 +
1.113 + /* Set states */
1.114 + g_OverrideState = OVERRIDE_STATE_NONE;
1.115 + g_LoggedFileName = false;
1.116 + g_ErrorCount = 0;
1.117 +
1.118 + new SMCError:err = SMC_ParseFile(g_hOverrideParser, path);
1.119 + if (err != SMCError_Okay)
1.120 + {
1.121 + decl String:buffer[64];
1.122 + if (SMC_GetErrorString(err, buffer, sizeof(buffer)))
1.123 + {
1.124 + LogOverrideError("%s", buffer);
1.125 + } else {
1.126 + LogOverrideError("Fatal parse error");
1.127 + }
1.128 + }
1.129 +}
1.130 +