1.1 --- a/plugins/admin-flatfile/admin-overrides.sp Sun Aug 12 20:02:07 2007 +0000
1.2 +++ b/plugins/admin-flatfile/admin-overrides.sp Mon Aug 13 00:19:46 2007 +0000
1.3 @@ -24,10 +24,11 @@
1.4 #define OVERRIDE_STATE_LEVELS 1
1.5 #define OVERRIDE_STATE_OVERRIDES 2
1.6
1.7 -static Handle:g_hOverrideParser = INVALID_HANDLE;
1.8 +static Handle:g_hOldOverrideParser = INVALID_HANDLE;
1.9 +static Handle:g_hNewOverrideParser = INVALID_HANDLE;
1.10 static g_OverrideState = OVERRIDE_STATE_NONE;
1.11
1.12 -public SMCResult:ReadOverrides_NewSection(Handle:smc, const String:name[], bool:opt_quotes)
1.13 +public SMCResult:ReadOldOverrides_NewSection(Handle:smc, const String:name[], bool:opt_quotes)
1.14 {
1.15 if (g_IgnoreLevel)
1.16 {
1.17 @@ -57,6 +58,29 @@
1.18 return SMCParse_Continue;
1.19 }
1.20
1.21 +public SMCResult:ReadNewOverrides_NewSection(Handle:smc, const String:name[], bool:opt_quotes)
1.22 +{
1.23 + if (g_IgnoreLevel)
1.24 + {
1.25 + g_IgnoreLevel++;
1.26 + return SMCParse_Continue;
1.27 + }
1.28 +
1.29 + if (g_OverrideState == OVERRIDE_STATE_NONE)
1.30 + {
1.31 + if (StrEqual(name, "Overrides"))
1.32 + {
1.33 + g_OverrideState = OVERRIDE_STATE_OVERRIDES;
1.34 + } else {
1.35 + g_IgnoreLevel++;
1.36 + }
1.37 + } else {
1.38 + g_IgnoreLevel++;
1.39 + }
1.40 +
1.41 + return SMCParse_Continue;
1.42 +}
1.43 +
1.44 public SMCResult:ReadOverrides_KeyValue(Handle:smc,
1.45 const String:key[],
1.46 const String:value[],
1.47 @@ -81,7 +105,7 @@
1.48 return SMCParse_Continue;
1.49 }
1.50
1.51 -public SMCResult:ReadOverrides_EndSection(Handle:smc)
1.52 +public SMCResult:ReadOldOverrides_EndSection(Handle:smc)
1.53 {
1.54 /* If we're ignoring, skip out */
1.55 if (g_IgnoreLevel)
1.56 @@ -102,29 +126,52 @@
1.57 return SMCParse_Continue;
1.58 }
1.59
1.60 -static InitializeOverrideParser()
1.61 +public SMCResult:ReadNewOverrides_EndSection(Handle:smc)
1.62 {
1.63 - if (g_hOverrideParser == INVALID_HANDLE)
1.64 + /* If we're ignoring, skip out */
1.65 + if (g_IgnoreLevel)
1.66 + {
1.67 + g_IgnoreLevel--;
1.68 + return SMCParse_Continue;
1.69 + }
1.70 +
1.71 + if (g_OverrideState == OVERRIDE_STATE_OVERRIDES)
1.72 {
1.73 - g_hOverrideParser = SMC_CreateParser();
1.74 - SMC_SetReaders(g_hOverrideParser,
1.75 - ReadOverrides_NewSection,
1.76 + g_OverrideState = OVERRIDE_STATE_NONE;
1.77 + }
1.78 +
1.79 + return SMCParse_Continue;
1.80 +}
1.81 +
1.82 +static InitializeOverrideParsers()
1.83 +{
1.84 + if (g_hOldOverrideParser == INVALID_HANDLE)
1.85 + {
1.86 + g_hOldOverrideParser = SMC_CreateParser();
1.87 + SMC_SetReaders(g_hOldOverrideParser,
1.88 + ReadOldOverrides_NewSection,
1.89 ReadOverrides_KeyValue,
1.90 - ReadOverrides_EndSection);
1.91 + ReadOldOverrides_EndSection);
1.92 + }
1.93 + if (g_hNewOverrideParser == INVALID_HANDLE)
1.94 + {
1.95 + g_hNewOverrideParser = SMC_CreateParser();
1.96 + SMC_SetReaders(g_hNewOverrideParser,
1.97 + ReadNewOverrides_NewSection,
1.98 + ReadOverrides_KeyValue,
1.99 + ReadNewOverrides_EndSection);
1.100 }
1.101 }
1.102
1.103 -ReadOverrides()
1.104 +InternalReadOverrides(Handle:parser, const String:file[])
1.105 {
1.106 - InitializeOverrideParser();
1.107 -
1.108 - BuildPath(Path_SM, g_Filename, sizeof(g_Filename), "configs/admin_levels.cfg");
1.109 + BuildPath(Path_SM, g_Filename, sizeof(g_Filename), file);
1.110
1.111 /* Set states */
1.112 InitGlobalStates();
1.113 g_OverrideState = OVERRIDE_STATE_NONE;
1.114
1.115 - new SMCError:err = SMC_ParseFile(g_hOverrideParser, g_Filename);
1.116 + new SMCError:err = SMC_ParseFile(parser, g_Filename);
1.117 if (err != SMCError_Okay)
1.118 {
1.119 decl String:buffer[64];
1.120 @@ -136,3 +183,10 @@
1.121 }
1.122 }
1.123 }
1.124 +
1.125 +ReadOverrides()
1.126 +{
1.127 + InitializeOverrideParsers();
1.128 + InternalReadOverrides(g_hOldOverrideParser, "configs/admin_levels.cfg");
1.129 + InternalReadOverrides(g_hNewOverrideParser, "configs/admin_overrides.cfg");
1.130 +}