]> Dogcows Code - chaz/yoink/blobdiff - src/moof/settings.cc
the massive refactoring effort
[chaz/yoink] / src / moof / settings.cc
diff --git a/src/moof/settings.cc b/src/moof/settings.cc
new file mode 100644 (file)
index 0000000..4e02692
--- /dev/null
@@ -0,0 +1,117 @@
+
+/*]  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
+
This page took 0.020322 seconds and 4 git commands to generate.