From 28180e6b6763e4ce5d65c02e4df5380f11e6d10a Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Wed, 30 Jan 2008 17:29:25 +0000 Subject: filesystem subsystem --- src/filesystem/inifile.cc | 90 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/filesystem/inifile.cc (limited to 'src/filesystem/inifile.cc') 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 + -- cgit v1.2.3