- SG_LOG(SG_INPUT, SG_INFO, "Program exit requested.");
- fgExit(arg->getIntValue("status", 0));
- return true;
+ SG_LOG(SG_INPUT, SG_INFO, "Program exit requested.");
+ fgSetBool("/sim/signals/exit", true);
+
+ if (fgGetBool("/sim/startup/save-on-exit")) {
+#ifdef _MSC_VER
+ char* envp = ::getenv( "APPDATA" );
+ if ( envp != NULL ) {
+ SGPath config( envp );
+ config.append( "flightgear.org" );
+#else
+ if ( homedir != NULL ) {
+ SGPath config( homedir );
+ config.append( ".fgfs" );
+#endif
+ config.append( "autosave.xml" );
+ config.create_dir( 0700 );
+ SG_LOG(SG_IO, SG_INFO, "Saving user settings to " << config.str());
+ try {
+ writeProperties(config.str(), globals->get_props(), false, SGPropertyNode::USERARCHIVE);
+ } catch (const sg_exception &e) {
+ guiErrorMessage("Error writing autosave.xml: ", e);
+ }
+
+ SG_LOG(SG_INPUT, SG_DEBUG, "Finished Saving user settings");
+ }
+ }
+ fgExit(arg->getIntValue("status", 0));
+ return true;