Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2007-11-11 12:35:08 +0000
committerStijn Buys <ingar@osirion.org>2007-11-11 12:35:08 +0000
commit7db1598f6b18b043b474d66677a6c1c49b318694 (patch)
tree556cdd944e6b70aa2ffe1f9d8183d90739ae461b /src/common/inifile.cc
parente4168305de096ed8b47308d35dbc16912a74230a (diff)
ini file reader
Diffstat (limited to 'src/common/inifile.cc')
-rw-r--r--src/common/inifile.cc93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/common/inifile.cc b/src/common/inifile.cc
new file mode 100644
index 0000000..c96b85b
--- /dev/null
+++ b/src/common/inifile.cc
@@ -0,0 +1,93 @@
+/*
+ common/inifile.cc
+ This file is part of the Osirion project and is distributed under
+ the terms of the GNU General Public License version 2
+*/
+
+// project headers
+#include "inifile.h"
+#include "console.h"
+
+namespace common {
+
+void IniFile::open(const char * filename, std::ios_base::openmode mode )
+{
+ last_read_was_section = false;
+ last_read_was_key = false;
+ key_current = "";
+ value_current = "";
+ section_current = "";
+ line_number = 0;
+
+ File::open(filename, mode);
+}
+
+
+bool IniFile::got_section() const {
+ return last_read_was_section;
+}
+
+bool IniFile::got_section(const char * sectionlabel) const {
+ return (last_read_was_section && section_current == sectionlabel);
+}
+
+IniFile & IniFile::getline()
+{
+ char line[1024];
+
+ last_read_was_section = false;
+ last_read_was_key = false;
+ key_current = "";
+ value_current = "";
+
+ while ((*this)) {
+ File::getline(line, 1024);
+ std::string s(line);
+ line_number++;
+
+ if (s.size() == 0) {
+ // empty line
+ } else
+ // comment
+ if (s[0] == '#' || s[0] == ';') {
+ // condebug << "IniFile got comment " << s << std::endl;
+ } else
+ // section header
+ if (s.size() > 2 && s[0] == '[' && s[s.size()-1] == ']' ) {
+ // condebug << "Inifile got section header " << s << std::endl;
+ section_current = s.substr(1, s.size()-2);
+ last_read_was_section = true;
+ break;
+ } else {
+ // key=value pair
+ size_t found = s.find('=');
+ if (found !=std::string::npos) {
+ // FIXME strip spaces, make lowercase
+ key_current = s.substr(0, found);
+
+ if (key_current.size() > 0 ) {
+ value_current = s.substr(found+1, s.size() - found - 1);
+ last_read_was_key = true;
+ break;
+ }
+
+ }
+ }
+ }
+
+ return (*this);
+}
+
+bool IniFile::got_key_string(char * const keylabel, std::string & valuestring) {
+ //condebug << "IniFile got_value_string " << keylabel << " " << last_read_was_key << std::endl;
+ if (last_read_was_key && key_current == keylabel) {
+ valuestring.assign(value_current);
+ return true;
+ } else {
+ return false;
+ }
+}
+
+
+} // namespace common
+