diff options
author | Stijn Buys <ingar@osirion.org> | 2007-11-11 12:35:08 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2007-11-11 12:35:08 +0000 |
commit | 7db1598f6b18b043b474d66677a6c1c49b318694 (patch) | |
tree | 556cdd944e6b70aa2ffe1f9d8183d90739ae461b /src/common/inifile.cc | |
parent | e4168305de096ed8b47308d35dbc16912a74230a (diff) |
ini file reader
Diffstat (limited to 'src/common/inifile.cc')
-rw-r--r-- | src/common/inifile.cc | 93 |
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 + |