--- /dev/null
+
+/*] Copyright (c) 2009-2010, Charles McGarvey [**************************
+**] All rights reserved.
+*
+* vi:ts=4 sw=4 tw=75
+*
+* Distributable under the terms and conditions of the 2-clause BSD license;
+* see the file COPYING for a complete text of the license.
+*
+**************************************************************************/
+
+#include <cstdlib> // getenv
+
+#include "log.hh"
+#include "settings.hh"
+
+
+namespace moof {
+
+
+settings::settings(int argc, char* argv[], const std::string& path)
+{
+ script_.import_base_library();
+ log::import(script_);
+
+ parse_args(argc, argv);
+ load_files(path);
+}
+
+settings::~settings()
+{
+ save();
+}
+
+
+void settings::parse_args(int argc, char* argv[])
+{
+ for (int i = 1; i < argc; ++i)
+ {
+ if (script_.do_string(argv[i]) != script::success)
+ {
+ std::string str;
+ script_[-1].get(str);
+ log_warning << "invalid option: " << argv[i]
+ << ": " << str << std::endl;
+ script_.clear_stack();
+ }
+ }
+}
+
+
+void settings::load_files(const std::string& path)
+{
+ std::vector<std::string> paths;
+ boost::split(paths, path, boost::is_any_of(":"));
+
+ load_files(paths);
+}
+
+void settings::load_files(const std::vector<std::string>& path)
+{
+ std::vector<std::string> copy(path);
+ std::vector<std::string>::iterator it;
+
+#if defined(_WIN32)
+ char* homeDrive = getenv("HOMEDRIVE");
+ char* homePath = getenv("HOMEPATH");
+ std::string home(homeDrive ? homeDrive : "");
+ if (homePath) home += homePath;
+#else
+ char *homePath = getenv("HOME");
+ std::string home(homePath ? homePath : "");
+#endif
+
+ for (it = copy.begin(); it != copy.end(); ++it)
+ {
+ if (!home.empty())
+ {
+ boost::replace_all(*it, "$HOME", home);
+
+ //logDebug("Copying global settings...");
+ //mUserFile = *it;
+ //mGlobals.push_copy();
+ //script_.set("globals", script::registry_index);
+ }
+
+ if (script_.do_file(*it) != script::success)
+ {
+ std::string str;
+ script_[-1].get(str);
+ log_warning(str);
+ script_.clear_stack();
+ }
+ }
+}
+
+
+void settings::clear()
+{
+ script_.reset();
+}
+
+
+void settings::save_as(const std::string& path)
+{
+ mUserFile = path;
+ save();
+}
+
+void settings::save() const
+{
+ // TODO saving settings not yet implemented
+}
+
+
+} // namepsace moof
+