Author: cazfi
Date: Thu Jan 29 22:32:05 2015
New Revision: 27902

URL: http://svn.gna.org/viewcvs/freeciv?rev=27902&view=rev
Log:
Save game.ruleset settings -section.

See bug #23124

Modified:
    branches/S2_6/server/settings.c
    branches/S2_6/server/settings.h
    branches/S2_6/tools/ruledit/rulesave.c

Modified: branches/S2_6/server/settings.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/server/settings.c?rev=27902&r1=27901&r2=27902&view=diff
==============================================================================
--- branches/S2_6/server/settings.c     (original)
+++ branches/S2_6/server/settings.c     Thu Jan 29 22:32:05 2015
@@ -184,7 +184,6 @@
   }
 
 static bool set_enum_value(struct setting *pset, int val);
-static int read_enum_value(const struct setting *pset);
 
 /****************************************************************************
   Enumerator name accessors.
@@ -2868,6 +2867,16 @@
 }
 
 /****************************************************************************
+  Get value of boolean setting
+****************************************************************************/
+bool setting_bool_get(struct setting *pset)
+{
+  fc_assert(setting_type(pset) == SSET_BOOL);
+
+  return *pset->boolean.pvalue;
+}
+
+/****************************************************************************
   Returns TRUE if 'val' is a valid value for this setting. If it's not,
   the reason of the failure is available in the optionnal parameter
   'reject_msg'.
@@ -2970,6 +2979,16 @@
 }
 
 /****************************************************************************
+  Get value of integer setting
+****************************************************************************/
+int setting_int_get(struct setting *pset)
+{
+  fc_assert(setting_type(pset) == SSET_INT);
+
+  return *pset->integer.pvalue;
+}
+
+/****************************************************************************
   Compute the string representation of the value for this string setting.
 ****************************************************************************/
 static const char *setting_str_to_str(const struct setting *pset,
@@ -3031,10 +3050,20 @@
 }
 
 /****************************************************************************
+  Get value of string setting
+****************************************************************************/
+char *setting_str_get(struct setting *pset)
+{
+  fc_assert(setting_type(pset) == SSET_STRING);
+
+  return pset->string.value;
+}             
+
+/****************************************************************************
   Convert the integer to the long support string representation of an
   enumerator. This function must match the secfile_enum_name_data_fn_t type.
 ****************************************************************************/
-static const char *setting_enum_secfile_str(secfile_data_t data, int val)
+const char *setting_enum_secfile_str(secfile_data_t data, int val)
 {
   const struct sset_val_name *name =
       ((const struct setting *) data)->enumerator.name(val);
@@ -3149,7 +3178,7 @@
 /****************************************************************************
   Helper function to read value from enumerator setting 
 ****************************************************************************/
-static int read_enum_value(const struct setting *pset)
+int read_enum_value(const struct setting *pset)
 {
   int val;
 
@@ -3219,7 +3248,7 @@
   Convert the integer to the long support string representation of an
   enumerator. This function must match the secfile_enum_name_data_fn_t type.
 ****************************************************************************/
-static const char *setting_bitwise_secfile_str(secfile_data_t data, int bit)
+const char *setting_bitwise_secfile_str(secfile_data_t data, int bit)
 {
   const struct sset_val_name *name =
       ((const struct setting *) data)->bitwise.name(bit);
@@ -3395,6 +3424,16 @@
 
   return setting_bitwise_validate_base(pset, val, &int_val, caller,
                                        reject_msg, reject_msg_len);
+}
+
+/****************************************************************************
+  Get value of bitwise setting
+****************************************************************************/
+int setting_bitwise_get(struct setting *pset)
+{
+  fc_assert(setting_type(pset) == SSET_BITWISE);
+
+  return *pset->bitwise.pvalue;
 }
 
 /****************************************************************************

Modified: branches/S2_6/server/settings.h
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/server/settings.h?rev=27902&r1=27901&r2=27902&view=diff
==============================================================================
--- branches/S2_6/server/settings.h     (original)
+++ branches/S2_6/server/settings.h     Thu Jan 29 22:32:05 2015
@@ -113,6 +113,10 @@
 
 void setting_set_to_default(struct setting *pset);
 
+int read_enum_value(const struct setting *pset);
+const char *setting_enum_secfile_str(secfile_data_t data, int val);
+const char *setting_bitwise_secfile_str(secfile_data_t data, int bit);
+
 /* Type SSET_BOOL setting functions. */
 bool setting_bool_set(struct setting *pset, const char *val,
                       struct connection *caller, char *reject_msg,
@@ -120,6 +124,7 @@
 bool setting_bool_validate(const struct setting *pset, const char *val,
                            struct connection *caller, char *reject_msg,
                            size_t reject_msg_len);
+bool setting_bool_get(struct setting *pset);
 
 /* Type SSET_INT setting functions. */
 int setting_int_min(const struct setting *pset);
@@ -130,6 +135,7 @@
 bool setting_int_validate(const struct setting *pset, int val,
                           struct connection *caller, char *reject_msg,
                           size_t reject_msg_len);
+int setting_int_get(struct setting *pset);
 
 /* Type SSET_STRING setting functions. */
 bool setting_str_set(struct setting *pset, const char *val,
@@ -138,6 +144,7 @@
 bool setting_str_validate(const struct setting *pset, const char *val,
                           struct connection *caller, char *reject_msg,
                           size_t reject_msg_len);
+char *setting_str_get(struct setting *pset);
 
 /* Type SSET_ENUM setting functions. */
 const char *setting_enum_val(const struct setting *pset, int val,
@@ -158,6 +165,7 @@
 bool setting_bitwise_validate(const struct setting *pset, const char *val,
                               struct connection *caller, char *reject_msg,
                               size_t reject_msg_len);
+int setting_bitwise_get(struct setting *pset);
 
 void setting_action(const struct setting *pset);
 

Modified: branches/S2_6/tools/ruledit/rulesave.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/tools/ruledit/rulesave.c?rev=27902&r1=27901&r2=27902&view=diff
==============================================================================
--- branches/S2_6/tools/ruledit/rulesave.c      (original)
+++ branches/S2_6/tools/ruledit/rulesave.c      Thu Jan 29 22:32:05 2015
@@ -32,6 +32,7 @@
 
 /* server */
 #include "ruleset.h"
+#include "settings.h"
 
 #include "rulesave.h"
 
@@ -625,6 +626,7 @@
                                 * safety margin here. */
   enum trade_route_type trt;
   int i;
+  bool locks;
 
   if (sfile == NULL) {
     return FALSE;
@@ -984,7 +986,52 @@
     }
   }
 
-  /* TODO: Settings */
+  locks = FALSE;
+  settings_iterate(SSET_ALL, pset) {
+    if (setting_locked(pset)) {
+      locks = TRUE;
+      break;
+    }
+  } settings_iterate_end;
+
+  set_count = 0;
+  settings_iterate(SSET_ALL, pset) {
+    /* TODO: Save also those that should get the same value at loading time
+     * even if it's current default, and default is different at loading time. 
*/
+    if (setting_non_default(pset) || setting_locked(pset)) {
+      secfile_insert_str(sfile, setting_name(pset), "settings.name%d", 
set_count);
+      switch (setting_type(pset)) {
+      case SSET_BOOL:
+        secfile_insert_bool(sfile, setting_bool_get(pset),
+                            "settings.value%d", set_count);
+        break;
+      case SSET_INT:
+        secfile_insert_int(sfile, setting_int_get(pset),
+                           "settings.value%d", set_count);
+        break;
+      case SSET_STRING:
+        secfile_insert_str(sfile, setting_str_get(pset),
+                           "settings.value%d", set_count);
+        break;
+      case SSET_ENUM:
+        secfile_insert_enum_data(sfile, read_enum_value(pset), FALSE,
+                                 setting_enum_secfile_str, pset,
+                                 "settings.value%d", set_count);
+        break;
+      case SSET_BITWISE:
+        secfile_insert_enum_data(sfile, setting_bitwise_get(pset), FALSE,
+                                 setting_bitwise_secfile_str, pset,
+                                 "settings.value%d", set_count);
+        break;
+      }
+
+      if (locks) {
+        secfile_insert_bool(sfile, setting_locked(pset), "settings.lock%d", 
set_count);
+      }
+
+      set_count++;
+    }
+  } settings_iterate_end;
 
   return save_ruleset_file(sfile, filename);
 }


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

Reply via email to