diff --git a/source/frontends/common2/configuration.cpp b/source/frontends/common2/configuration.cpp index bbb54d7d..848c8f1e 100644 --- a/source/frontends/common2/configuration.cpp +++ b/source/frontends/common2/configuration.cpp @@ -5,70 +5,78 @@ #include -class Configuration +namespace { - public: - Configuration(const std::string & filename); - ~Configuration(); - - static std::shared_ptr instance; - - template - T getValue(const std::string & section, const std::string & key) const; - - template - void putValue(const std::string & section, const std::string & key, const T & value); - - const boost::property_tree::ptree & getProperties() const; - - private: - const std::string myFilename; - - boost::property_tree::ptree myINI; -}; - -std::shared_ptr Configuration::instance; - -Configuration::Configuration(const std::string & filename) : myFilename(filename) -{ - if (GetFileAttributes(myFilename.c_str()) != INVALID_FILE_ATTRIBUTES) + class Configuration { - boost::property_tree::ini_parser::read_ini(myFilename, myINI); - } - else + public: + Configuration(const std::string & filename, const bool saveOnExit); + ~Configuration(); + + static std::shared_ptr instance; + + template + T getValue(const std::string & section, const std::string & key) const; + + template + void putValue(const std::string & section, const std::string & key, const T & value); + + const boost::property_tree::ptree & getProperties() const; + + private: + const std::string myFilename; + bool mySaveOnExit; + + boost::property_tree::ptree myINI; + }; + + std::shared_ptr Configuration::instance; + + Configuration::Configuration(const std::string & filename, const bool saveOnExit) : myFilename(filename), mySaveOnExit(saveOnExit) { - LogFileOutput("Registry: configuration file '%s' not found\n", filename.c_str()); + if (GetFileAttributes(myFilename.c_str()) != INVALID_FILE_ATTRIBUTES) + { + boost::property_tree::ini_parser::read_ini(myFilename, myINI); + } + else + { + LogFileOutput("Registry: configuration file '%s' not found\n", filename.c_str()); + } } + + Configuration::~Configuration() + { + if (mySaveOnExit) + { + boost::property_tree::ini_parser::write_ini(myFilename, myINI); + } + } + + const boost::property_tree::ptree & Configuration::getProperties() const + { + return myINI; + } + + template + T Configuration::getValue(const std::string & section, const std::string & key) const + { + const std::string path = section + "." + key; + const T value = myINI.get(path); + return value; + } + + template + void Configuration::putValue(const std::string & section, const std::string & key, const T & value) + { + const std::string path = section + "." + key; + myINI.put(path, value); + } + } -Configuration::~Configuration() +void InitializeRegistry(const std::string & filename, const bool saveOnExit) { - boost::property_tree::ini_parser::write_ini(myFilename, myINI); -} - -const boost::property_tree::ptree & Configuration::getProperties() const -{ - return myINI; -} - -template -T Configuration::getValue(const std::string & section, const std::string & key) const -{ - const std::string path = section + "." + key; - const T value = myINI.get(path); - return value; -} - -template -void Configuration::putValue(const std::string & section, const std::string & key, const T & value) -{ - const std::string path = section + "." + key; - myINI.put(path, value); -} - -void InitializeRegistry(const std::string & filename) -{ - Configuration::instance.reset(new Configuration(filename)); + Configuration::instance.reset(new Configuration(filename, saveOnExit)); } BOOL RegLoadString (LPCTSTR section, LPCTSTR key, BOOL peruser, diff --git a/source/frontends/common2/configuration.h b/source/frontends/common2/configuration.h index 7f7b012a..3326ad1b 100644 --- a/source/frontends/common2/configuration.h +++ b/source/frontends/common2/configuration.h @@ -4,7 +4,7 @@ #include #include -void InitializeRegistry(const std::string & filename); +void InitializeRegistry(const std::string & filename, const bool saveOnExit); const boost::property_tree::ptree & getProperties(); diff --git a/source/frontends/ncurses/main.cpp b/source/frontends/ncurses/main.cpp index af987d6b..b5a570d5 100644 --- a/source/frontends/ncurses/main.cpp +++ b/source/frontends/ncurses/main.cpp @@ -137,7 +137,7 @@ namespace LogInit(); } - InitializeRegistry("applen.conf"); + InitializeRegistry("applen.conf", options.saveConfigurationOnExit); g_nMemoryClearType = options.memclear; diff --git a/source/frontends/sa2/main.cpp b/source/frontends/sa2/main.cpp index 6734cad4..d36c7e07 100644 --- a/source/frontends/sa2/main.cpp +++ b/source/frontends/sa2/main.cpp @@ -32,8 +32,6 @@ namespace { void initialiseEmulator() { - InitializeRegistry("applen.conf"); - g_fh = fopen("/tmp/applewin.txt", "w"); setbuf(g_fh, nullptr); @@ -230,6 +228,8 @@ void run_sdl(int argc, const char * argv []) if (!run) return; + InitializeRegistry("applen.conf", options.saveConfigurationOnExit); + initialiseEmulator(); loadEmulator();