]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Added ConfigReader::EnumValues() (requested by Craig)
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Thu, 8 Apr 2004 18:10:27 +0000 (18:10 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Thu, 8 Apr 2004 18:10:27 +0000 (18:10 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@456 e03df62e-2008-0410-955e-edbf42e46eb7

include/inspircd_io.h
include/modules.h
src/InspIRCd.layout
src/inspircd_io.cpp
src/modules.cpp

index df64228a4f46e97237f0adb5ebc92a346f9ce59d..a6403e7ec66d7ef043b3bb50afdba2e8fd1ba489 100644 (file)
@@ -28,4 +28,5 @@ int ConfValue(char* tag, char* var, int index, char *result, std::stringstream *
 int ReadConf(std::stringstream *config_f,const char* tag, const char* var, int index, char *result);
 int ConfValueEnum(char* tag,std::stringstream *config);
 int EnumConf(std::stringstream *config_f,const char* tag);
 int ReadConf(std::stringstream *config_f,const char* tag, const char* var, int index, char *result);
 int ConfValueEnum(char* tag,std::stringstream *config);
 int EnumConf(std::stringstream *config_f,const char* tag);
+int EnumValues(std::stringstream *config, const char* tag, int index);
 
 
index c93e565fb324822863a8d47585085e26021a3aea..691e6eda109b6930615261bd6a115d1899399198 100644 (file)
@@ -510,6 +510,13 @@ class ConfigReader : public classbase
         * file does not exist or could not be opened.
         */
        bool Verify();
         * file does not exist or could not be opened.
         */
        bool Verify();
+
+       /** Returns the number of items within a tag.
+        * For example if the tag was &lt;test tag="blah" data="foo"&gt; then this
+        * function would return 2. Spaces and newlines both qualify as valid seperators
+        * between values.
+        */
+       int EnumerateValues(std::string tag, int index);
 };
 
 
 };
 
 
index 3af24613bcc08d542545e248fbf33d11f6629198..5cb0f77808c43b067c7cc62beb99cb2f208b0c62 100644 (file)
@@ -1,9 +1,9 @@
 [Editors]
 [Editors]
-Focused=2
-Order=7,3,2,6,25,24,4,5,1,0,-1
+Focused=4
+Order=1,2,-1,4
 
 [Editor_0]
 
 [Editor_0]
-Open=1
+Open=0
 Top=0
 CursorCol=20
 CursorRow=57
 Top=0
 CursorCol=20
 CursorRow=57
@@ -14,20 +14,20 @@ LeftChar=1
 Open=1
 Top=0
 CursorCol=1
 Open=1
 Top=0
 CursorCol=1
-CursorRow=4808
-TopLine=4662
+CursorRow=5694
+TopLine=5640
 LeftChar=1
 
 [Editor_2]
 Open=1
 LeftChar=1
 
 [Editor_2]
 Open=1
-Top=1
-CursorCol=28
-CursorRow=306
-TopLine=281
+Top=0
+CursorCol=8
+CursorRow=278
+TopLine=221
 LeftChar=1
 
 [Editor_3]
 LeftChar=1
 
 [Editor_3]
-Open=1
+Open=0
 Top=0
 CursorCol=1
 CursorRow=1
 Top=0
 CursorCol=1
 CursorRow=1
@@ -36,14 +36,14 @@ LeftChar=1
 
 [Editor_4]
 Open=1
 
 [Editor_4]
 Open=1
-Top=0
-CursorCol=1
-CursorRow=119
-TopLine=113
+Top=1
+CursorCol=38
+CursorRow=354
+TopLine=324
 LeftChar=1
 
 [Editor_5]
 LeftChar=1
 
 [Editor_5]
-Open=1
+Open=0
 Top=0
 CursorCol=1
 CursorRow=1
 Top=0
 CursorCol=1
 CursorRow=1
@@ -51,7 +51,7 @@ TopLine=1
 LeftChar=1
 
 [Editor_6]
 LeftChar=1
 
 [Editor_6]
-Open=1
+Open=0
 Top=0
 CursorCol=1
 CursorRow=36
 Top=0
 CursorCol=1
 CursorRow=36
@@ -59,7 +59,7 @@ TopLine=1
 LeftChar=1
 
 [Editor_7]
 LeftChar=1
 
 [Editor_7]
-Open=1
+Open=0
 Top=0
 CursorCol=20
 CursorRow=15
 Top=0
 CursorCol=20
 CursorRow=15
@@ -67,7 +67,7 @@ TopLine=6
 LeftChar=1
 
 [Editor_8]
 LeftChar=1
 
 [Editor_8]
-Open=1
+Open=0
 Top=0
 CursorCol=1
 CursorRow=33
 Top=0
 CursorCol=1
 CursorRow=33
@@ -83,7 +83,7 @@ TopLine=1
 LeftChar=1
 
 [Editor_10]
 LeftChar=1
 
 [Editor_10]
-Open=1
+Open=0
 Top=0
 CursorCol=31
 CursorRow=75
 Top=0
 CursorCol=31
 CursorRow=75
@@ -147,10 +147,10 @@ TopLine=51
 LeftChar=1
 
 [Editor_18]
 LeftChar=1
 
 [Editor_18]
-Open=0
+Open=1
 Top=0
 Top=0
-CursorCol=5
-CursorRow=22
+CursorCol=69
+CursorRow=31
 TopLine=1
 LeftChar=1
 
 TopLine=1
 LeftChar=1
 
@@ -163,11 +163,11 @@ TopLine=1
 LeftChar=1
 
 [Editor_20]
 LeftChar=1
 
 [Editor_20]
-Open=0
+Open=1
 Top=0
 Top=0
-CursorCol=6
-CursorRow=553
-TopLine=514
+CursorCol=20
+CursorRow=517
+TopLine=472
 LeftChar=1
 
 [Editor_21]
 LeftChar=1
 
 [Editor_21]
@@ -179,7 +179,7 @@ TopLine=1
 LeftChar=1
 
 [Editor_22]
 LeftChar=1
 
 [Editor_22]
-Open=1
+Open=0
 Top=0
 CursorCol=25
 CursorRow=116
 Top=0
 CursorCol=25
 CursorRow=116
@@ -195,14 +195,14 @@ TopLine=1
 LeftChar=1
 
 [Editor_24]
 LeftChar=1
 
 [Editor_24]
-Open=1
+Open=0
 Top=0
 CursorCol=1
 CursorRow=1
 TopLine=1
 LeftChar=1
 [Editor_25]
 Top=0
 CursorCol=1
 CursorRow=1
 TopLine=1
 LeftChar=1
 [Editor_25]
-Open=1
+Open=0
 Top=0
 CursorCol=6
 CursorRow=10
 Top=0
 CursorCol=6
 CursorRow=10
@@ -223,14 +223,14 @@ CursorRow=34
 TopLine=1
 LeftChar=1
 [Editor_28]
 TopLine=1
 LeftChar=1
 [Editor_28]
-Open=0
+Open=1
 Top=0
 CursorCol=87
 CursorRow=20
 TopLine=5
 LeftChar=1
 [Editor_29]
 Top=0
 CursorCol=87
 CursorRow=20
 TopLine=5
 LeftChar=1
 [Editor_29]
-Open=0
+Open=1
 Top=0
 CursorCol=49
 CursorRow=9
 Top=0
 CursorCol=49
 CursorRow=9
@@ -261,11 +261,11 @@ LeftChar=1
 Open=0
 Top=0
 [Editor_34]
 Open=0
 Top=0
 [Editor_34]
-Open=0
+Open=1
 Top=0
 Top=0
-CursorCol=26
-CursorRow=155
-TopLine=113
+CursorCol=1
+CursorRow=86
+TopLine=32
 LeftChar=1
 [Editor_35]
 Open=0
 LeftChar=1
 [Editor_35]
 Open=0
index 18bee1f18bf68de58fd23b4dd11a3a6c0ec907ad..c69ba3b176936591e8e4759be85a2a8343bacacb 100644 (file)
@@ -220,6 +220,92 @@ int EnumConf(std::stringstream *config, const char* tag)
        return idx;
 }
 
        return idx;
 }
 
+/* Counts the number of values within a certain tag */
+
+int EnumValues(std::stringstream *config, const char* tag, int index)
+{
+       int ptr = 0;
+       char buffer[MAXBUF], c_tag[MAXBUF], c, lastc;
+       int in_token, in_quotes, tptr, j, idx = 0;
+       char* key;
+       
+       bool correct_tag = false;
+       int num_items = 0;
+
+       const char* buf = config->str().c_str();
+       long bptr = 0;
+       long len = strlen(buf);
+       
+       ptr = 0;
+       in_token = 0;
+       in_quotes = 0;
+       lastc = '\0';
+       while (bptr<len)
+       {
+               lastc = c;
+               c = buf[bptr++];
+               if ((c == '#') && (lastc == '\n'))
+               {
+                       while ((c != '\n') && (bptr<len))
+                       {
+                               lastc = c;
+                               c = buf[bptr++];
+                       }
+               }
+               if ((c == '<') && (!in_quotes))
+               {
+                       tptr = 0;
+                       in_token = 1;
+                       do {
+                               c = buf[bptr++];
+                               if (c != ' ')
+                               {
+                                       c_tag[tptr++] = c;
+                                       c_tag[tptr] = '\0';
+                                       
+                                       if ((!strcmp(c_tag,tag)) && (idx == index))
+                                       {
+                                               correct_tag = true;
+                                       }
+                               }
+                       } while (c != ' ');
+               }
+               if (c == '"')
+               {
+                       in_quotes = (!in_quotes);
+               }
+               
+               if ( (correct_tag) && (!in_quotes) && ( (c == ' ') || (c == '\n') || (c == '\r') ) )
+               {
+                       num_items++;
+               }
+               if ((c == '>') && (!in_quotes))
+               {
+                       in_token = 0;
+                       if (correct_tag)
+                               correct_tag = false;
+                       if (!strcmp(c_tag,tag))
+                       {
+                               /* correct tag, but wrong index */
+                               idx++;
+                       }
+                       c_tag[0] = '\0';
+                       buffer[0] = '\0';
+                       ptr = 0;
+                       tptr = 0;
+               }
+               if (c != '>')
+               {
+                       if ((in_token) && (c != '\n') && (c != '\r'))
+                       {
+                               buffer[ptr++] = c;
+                               buffer[ptr] = '\0';
+                       }
+               }
+       }
+       return num_items+1;
+}
+
 
 
 int ConfValueEnum(char* tag, std::stringstream* config)
 
 
 int ConfValueEnum(char* tag, std::stringstream* config)
index bbea0d4124cb1f39eccac079e9d41a42876e4289..93e2d7850174cf54e8e50dd77dffb68a308f2412 100644 (file)
@@ -349,6 +349,10 @@ int ConfigReader::Enumerate(std::string tag)
        return EnumConf(cache,tag.c_str());
 }
 
        return EnumConf(cache,tag.c_str());
 }
 
+int ConfigReader::EnumerateValues(std::string tag, int index)
+{
+       return EnumValues(cache, tag.c_str(), index);
+}
 
 bool ConfigReader::Verify()
 {
 
 bool ConfigReader::Verify()
 {