Implement save-on-exit configuration flag.

Signed-off-by: mariofutire@gmail.com <pi@raspberrypi>
This commit is contained in:
mariofutire@gmail.com 2020-10-11 08:26:42 +01:00 committed by Andrea Odetti
parent 65effc121d
commit bc74b5fbfb
4 changed files with 69 additions and 61 deletions

View file

@ -5,10 +5,12 @@
#include <boost/property_tree/ini_parser.hpp> #include <boost/property_tree/ini_parser.hpp>
class Configuration namespace
{ {
class Configuration
{
public: public:
Configuration(const std::string & filename); Configuration(const std::string & filename, const bool saveOnExit);
~Configuration(); ~Configuration();
static std::shared_ptr<Configuration> instance; static std::shared_ptr<Configuration> instance;
@ -23,14 +25,15 @@ class Configuration
private: private:
const std::string myFilename; const std::string myFilename;
bool mySaveOnExit;
boost::property_tree::ptree myINI; boost::property_tree::ptree myINI;
}; };
std::shared_ptr<Configuration> Configuration::instance; std::shared_ptr<Configuration> Configuration::instance;
Configuration::Configuration(const std::string & filename) : myFilename(filename) Configuration::Configuration(const std::string & filename, const bool saveOnExit) : myFilename(filename), mySaveOnExit(saveOnExit)
{ {
if (GetFileAttributes(myFilename.c_str()) != INVALID_FILE_ATTRIBUTES) if (GetFileAttributes(myFilename.c_str()) != INVALID_FILE_ATTRIBUTES)
{ {
boost::property_tree::ini_parser::read_ini(myFilename, myINI); boost::property_tree::ini_parser::read_ini(myFilename, myINI);
@ -39,36 +42,41 @@ Configuration::Configuration(const std::string & filename) : myFilename(filename
{ {
LogFileOutput("Registry: configuration file '%s' not found\n", filename.c_str()); LogFileOutput("Registry: configuration file '%s' not found\n", filename.c_str());
} }
} }
Configuration::~Configuration() Configuration::~Configuration()
{ {
if (mySaveOnExit)
{
boost::property_tree::ini_parser::write_ini(myFilename, myINI); boost::property_tree::ini_parser::write_ini(myFilename, myINI);
} }
}
const boost::property_tree::ptree & Configuration::getProperties() const const boost::property_tree::ptree & Configuration::getProperties() const
{ {
return myINI; return myINI;
} }
template <typename T> template <typename T>
T Configuration::getValue(const std::string & section, const std::string & key) const T Configuration::getValue(const std::string & section, const std::string & key) const
{ {
const std::string path = section + "." + key; const std::string path = section + "." + key;
const T value = myINI.get<T>(path); const T value = myINI.get<T>(path);
return value; return value;
} }
template <typename T> template <typename T>
void Configuration::putValue(const std::string & section, const std::string & key, const T & value) void Configuration::putValue(const std::string & section, const std::string & key, const T & value)
{ {
const std::string path = section + "." + key; const std::string path = section + "." + key;
myINI.put(path, value); myINI.put(path, value);
}
} }
void InitializeRegistry(const std::string & filename) void InitializeRegistry(const std::string & filename, const bool saveOnExit)
{ {
Configuration::instance.reset(new Configuration(filename)); Configuration::instance.reset(new Configuration(filename, saveOnExit));
} }
BOOL RegLoadString (LPCTSTR section, LPCTSTR key, BOOL peruser, BOOL RegLoadString (LPCTSTR section, LPCTSTR key, BOOL peruser,

View file

@ -4,7 +4,7 @@
#include <boost/property_tree/ptree.hpp> #include <boost/property_tree/ptree.hpp>
#include <string> #include <string>
void InitializeRegistry(const std::string & filename); void InitializeRegistry(const std::string & filename, const bool saveOnExit);
const boost::property_tree::ptree & getProperties(); const boost::property_tree::ptree & getProperties();

View file

@ -137,7 +137,7 @@ namespace
LogInit(); LogInit();
} }
InitializeRegistry("applen.conf"); InitializeRegistry("applen.conf", options.saveConfigurationOnExit);
g_nMemoryClearType = options.memclear; g_nMemoryClearType = options.memclear;

View file

@ -32,8 +32,6 @@ namespace
{ {
void initialiseEmulator() void initialiseEmulator()
{ {
InitializeRegistry("applen.conf");
g_fh = fopen("/tmp/applewin.txt", "w"); g_fh = fopen("/tmp/applewin.txt", "w");
setbuf(g_fh, nullptr); setbuf(g_fh, nullptr);
@ -230,6 +228,8 @@ void run_sdl(int argc, const char * argv [])
if (!run) if (!run)
return; return;
InitializeRegistry("applen.conf", options.saveConfigurationOnExit);
initialiseEmulator(); initialiseEmulator();
loadEmulator(); loadEmulator();