plugins/admin-flatfile/admin-overrides.sp
changeset 1314 812c281ec8f8
parent 1298 9cddbed74581
child 1330 ab94316bb52b
     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 +}