Author: cazfi Date: Thu Jan 29 22:31:57 2015 New Revision: 27901 URL: http://svn.gna.org/viewcvs/freeciv?rev=27901&view=rev Log: Save game.ruleset settings -section.
See bug #23124 Modified: trunk/server/settings.c trunk/server/settings.h trunk/tools/ruledit/rulesave.c Modified: trunk/server/settings.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/server/settings.c?rev=27901&r1=27900&r2=27901&view=diff ============================================================================== --- trunk/server/settings.c (original) +++ trunk/server/settings.c Thu Jan 29 22:31:57 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: trunk/server/settings.h URL: http://svn.gna.org/viewcvs/freeciv/trunk/server/settings.h?rev=27901&r1=27900&r2=27901&view=diff ============================================================================== --- trunk/server/settings.h (original) +++ trunk/server/settings.h Thu Jan 29 22:31:57 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: trunk/tools/ruledit/rulesave.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/tools/ruledit/rulesave.c?rev=27901&r1=27900&r2=27901&view=diff ============================================================================== --- trunk/tools/ruledit/rulesave.c (original) +++ trunk/tools/ruledit/rulesave.c Thu Jan 29 22:31:57 2015 @@ -32,6 +32,7 @@ /* server */ #include "ruleset.h" +#include "settings.h" #include "rulesave.h" @@ -629,6 +630,7 @@ * safety margin here. */ enum trade_route_type trt; int i; + bool locks; if (sfile == NULL) { return FALSE; @@ -991,7 +993,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