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>2008-01-30 17:29:25 +0000
committerStijn Buys <ingar@osirion.org>2008-01-30 17:29:25 +0000
commit28180e6b6763e4ce5d65c02e4df5380f11e6d10a (patch)
tree2f3c9953e501543052ea440476fb671fa845376b /src/filesystem/inifile.cc
parente3c27429831245a151706c395991b42f2876b2e1 (diff)
filesystem subsystem
Diffstat (limited to 'src/filesystem/inifile.cc')
-rw-r--r--src/filesystem/inifile.cc90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/filesystem/inifile.cc b/src/filesystem/inifile.cc
new file mode 100644
index 0000000..308a87d
--- /dev/null
+++ b/src/filesystem/inifile.cc
@@ -0,0 +1,90 @@
+/*
+ filesystem/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 "filesystem/inifile.h"
+
+namespace filesystem {
+
+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 filesystem
+