Author: cazfi
Date: Tue Jan 20 23:17:26 2015
New Revision: 27749

URL: http://svn.gna.org/viewcvs/freeciv?rev=27749&view=rev
Log:
Track which settings have not changed at all, and which are explicitly set even 
if the value happens
to be same as default.

See patch #5714

Modified:
    branches/S2_6/server/savegame.c
    branches/S2_6/server/settings.c
    branches/S2_6/server/settings.h
    branches/S2_6/server/stdinhand.c
    branches/S2_6/tools/civmanual.c

Modified: branches/S2_6/server/savegame.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/server/savegame.c?rev=27749&r1=27748&r2=27749&view=diff
==============================================================================
--- branches/S2_6/server/savegame.c     (original)
+++ branches/S2_6/server/savegame.c     Tue Jan 20 23:17:26 2015
@@ -3826,6 +3826,8 @@
                                sizeof(server.game_identifier));
   }
 
+  settings_consider_all_changed();
+
   map_load(file, tmp_server_state, savefile_options,
            special_order, num_special_types,
            base_order, num_base_types);

Modified: branches/S2_6/server/settings.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/server/settings.c?rev=27749&r1=27748&r2=27749&view=diff
==============================================================================
--- branches/S2_6/server/settings.c     (original)
+++ branches/S2_6/server/settings.c     Tue Jan 20 23:17:26 2015
@@ -157,6 +157,9 @@
 
   /* ruleset lock for game settings */
   bool locked;
+
+  /* It's not "default", even if value is the same as default */
+  bool changed;
 };
 
 static struct {
@@ -3481,6 +3484,8 @@
     (*pset->bitwise.pvalue) = pset->bitwise.default_value;
     break;
   }
+
+  pset->changed = FALSE;
 }
 
 /********************************************************************
@@ -3696,9 +3701,9 @@
 }
 
 /**************************************************************************
-  Returns whether the setting has been changed (is not default).
+  Returns whether the setting has non-default value.
 **************************************************************************/
-bool setting_changed(const struct setting *pset)
+bool setting_non_default(const struct setting *pset)
 {
   switch (setting_type(pset)) {
   case SSET_BOOL:
@@ -4097,6 +4102,8 @@
                   pset, "%s.set%d.gamestart", section, i);
           break;
         }
+
+        pset->changed = TRUE;
       }
     } settings_iterate_end;
   }
@@ -4443,7 +4450,7 @@
 
   /* Refill them. */
   for (i = 0; (pset = setting_by_number(i)); i++) {
-    if (setting_changed(pset)) {
+    if (setting_non_default(pset)) {
       setting_list_append(setting_sorted.level[SSET_CHANGED], pset);
     }
     if (setting_locked(pset)) {
@@ -4497,3 +4504,23 @@
 
   setting_sorted.init = FALSE;
 }
+
+/*****************************************************************************
+  Mark setting changed
+*****************************************************************************/
+void setting_changed(struct setting *pset)
+{
+  pset->changed = TRUE;
+}
+
+/*****************************************************************************
+  Compatibility function. In the very old times there was no concept of
+  'default' value outside setting initialization, all values were handled
+  like we now want to handle non-default ones.
+*****************************************************************************/
+void settings_consider_all_changed(void)
+{
+  settings_iterate(SSET_ALL, pset) {
+    pset->changed = TRUE;
+  } settings_iterate_end;
+}

Modified: branches/S2_6/server/settings.h
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/server/settings.h?rev=27749&r1=27748&r2=27749&view=diff
==============================================================================
--- branches/S2_6/server/settings.h     (original)
+++ branches/S2_6/server/settings.h     Tue Jan 20 23:17:26 2015
@@ -159,7 +159,7 @@
 
 void setting_action(const struct setting *pset);
 
-bool setting_changed(const struct setting *pset);
+bool setting_non_default(const struct setting *pset);
 bool setting_locked(const struct setting *pset);
 void setting_lock_set(struct setting *pset, bool lock);
 
@@ -207,6 +207,9 @@
 void send_server_hack_level_settings(struct conn_list *dest);
 void send_server_setting_control(struct connection *pconn);
 
+void setting_changed(struct setting *pset);
+void settings_consider_all_changed(void);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: branches/S2_6/server/stdinhand.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/server/stdinhand.c?rev=27749&r1=27748&r2=27749&view=diff
==============================================================================
--- branches/S2_6/server/stdinhand.c    (original)
+++ branches/S2_6/server/stdinhand.c    Tue Jan 20 23:17:26 2015
@@ -2204,7 +2204,7 @@
 
   fc_assert_ret(pset != NULL);
 
-  is_changed = setting_changed(pset);
+  is_changed = setting_non_default(pset);
   setting_value_name(pset, TRUE, value, sizeof(value));
 
   /* Wrap long option values, such as bitwise options */
@@ -2947,6 +2947,7 @@
     /* Notify the console. */
     con_write(C_OK, "%s", packet.message);
 
+    setting_changed(pset);
     setting_action(pset);
     send_server_setting(NULL, pset);
     /* 

Modified: branches/S2_6/tools/civmanual.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/tools/civmanual.c?rev=27749&r1=27748&r2=27749&view=diff
==============================================================================
--- branches/S2_6/tools/civmanual.c     (original)
+++ branches/S2_6/tools/civmanual.c     Tue Jan 20 23:17:26 2015
@@ -256,7 +256,7 @@
           fprintf(doc, "<p class=\"bounds\">%s %s</p>\n\n",
                   _("Default:"), buf);
         }
-        if (setting_changed(pset)) {
+        if (setting_non_default(pset)) {
           fprintf(doc, _("<p class=\"changed\">Value set to %s</p>\n\n"),
                   setting_value_name(pset, TRUE, buf, sizeof(buf)));
         }


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to