Freeciv21
Develop your civilization from humble roots to a global empire
settings.h
Go to the documentation of this file.
1 /**************************************************************************
2  Copyright (c) 1996-2020 Freeciv21 and Freeciv contributors. This file is
3  __ __ part of Freeciv21. Freeciv21 is free software: you can
4 / \\..// \ redistribute it and/or modify it under the terms of the GNU
5  ( oo ) General Public License as published by the Free Software
6  \__/ Foundation, either version 3 of the License, or (at your
7  option) any later version. You should have received
8  a copy of the GNU General Public License along with Freeciv21. If not,
9  see https://www.gnu.org/licenses/.
10 **************************************************************************/
11 
12 #pragma once
13 
14 // common
15 #include "connection.h"
16 
17 // utility
18 #include "registry_ini.h"
19 
20 struct sset_val_name {
21  const char *support; /* Untranslated long support name, used
22  * for saving. */
23  const char *pretty; /* Translated, used to display to the
24  * users. */
25 };
26 
27 /* Categories allow options to be usefully organized when presented to the
28  * user */
29 #define SPECENUM_NAME sset_category
30 #define SPECENUM_VALUE0 SSET_GEOLOGY
31 #define SPECENUM_VALUE0NAME N_("Geological")
32 #define SPECENUM_VALUE1 SSET_SOCIOLOGY
33 #define SPECENUM_VALUE1NAME N_("Sociological")
34 #define SPECENUM_VALUE2 SSET_ECONOMICS
35 #define SPECENUM_VALUE2NAME N_("Economic")
36 #define SPECENUM_VALUE3 SSET_MILITARY
37 #define SPECENUM_VALUE3NAME N_("Military")
38 #define SPECENUM_VALUE4 SSET_SCIENCE
39 #define SPECENUM_VALUE4NAME N_("Scientific")
40 #define SPECENUM_VALUE5 SSET_INTERNAL
41 #define SPECENUM_VALUE5NAME N_("Internal")
42 #define SPECENUM_VALUE6 SSET_NETWORK
43 #define SPECENUM_VALUE6NAME N_("Networking")
44 // keep this last
45 #define SPECENUM_COUNT SSET_NUM_CATEGORIES
46 #include "specenum_gen.h"
47 
48 // Levels allow options to be subdivided and thus easier to navigate
49 #define SPECENUM_NAME sset_level
50 #define SPECENUM_VALUE0 SSET_NONE
51 #define SPECENUM_VALUE0NAME N_("?ssetlevel:None")
52 #define SPECENUM_VALUE1 SSET_ALL
53 #define SPECENUM_VALUE1NAME N_("All")
54 #define SPECENUM_VALUE2 SSET_VITAL
55 #define SPECENUM_VALUE2NAME N_("Vital")
56 #define SPECENUM_VALUE3 SSET_SITUATIONAL
57 #define SPECENUM_VALUE3NAME N_("Situational")
58 #define SPECENUM_VALUE4 SSET_RARE
59 #define SPECENUM_VALUE4NAME N_("Rare")
60 #define SPECENUM_VALUE5 SSET_CHANGED
61 #define SPECENUM_VALUE5NAME N_("Changed")
62 #define SPECENUM_VALUE6 SSET_LOCKED
63 #define SPECENUM_VALUE6NAME N_("Locked")
64 // keep this last
65 #define SPECENUM_COUNT OLEVELS_NUM
66 #include "specenum_gen.h"
67 
68 // forward declaration
69 struct setting;
70 
71 struct setting *setting_by_number(int id);
72 struct setting *setting_by_name(const char *name);
73 int setting_number(const struct setting *pset);
74 
75 const char *setting_name(const struct setting *pset);
76 const char *setting_short_help(const struct setting *pset);
77 const char *setting_extra_help(const struct setting *pset, bool constant);
78 enum sset_type setting_type(const struct setting *pset);
79 enum sset_level setting_level(const struct setting *pset);
80 enum sset_category setting_category(const struct setting *pset);
81 
82 bool setting_is_changeable(const struct setting *pset,
83  struct connection *caller, char *reject_msg,
84  size_t reject_msg_len);
85 bool setting_is_visible_at_level(const struct setting *pset,
86  enum cmdlevel plevel);
87 bool setting_is_visible(const struct setting *pset,
88  struct connection *caller);
89 
90 const char *setting_value_name(const struct setting *pset, bool pretty,
91  char *buf, size_t buf_len);
92 const char *setting_default_name(const struct setting *pset, bool pretty,
93  char *buf, size_t buf_len);
94 
95 void setting_set_to_default(struct setting *pset);
96 
97 int read_enum_value(const struct setting *pset);
98 const char *setting_enum_secfile_str(secfile_data_t data, int val);
99 const char *setting_bitwise_secfile_str(secfile_data_t data, int bit);
100 
101 // Type SST_BOOL setting functions.
102 bool setting_bool_set(struct setting *pset, const char *val,
103  struct connection *caller, char *reject_msg,
104  size_t reject_msg_len);
105 bool setting_bool_validate(const struct setting *pset, const char *val,
106  struct connection *caller, char *reject_msg,
107  size_t reject_msg_len);
108 bool setting_bool_get(struct setting *pset);
109 
110 // Type SST_INT setting functions.
111 int setting_int_min(const struct setting *pset);
112 int setting_int_max(const struct setting *pset);
113 bool setting_int_set(struct setting *pset, int val,
114  struct connection *caller, char *reject_msg,
115  size_t reject_msg_len);
116 bool setting_int_validate(const struct setting *pset, int val,
117  struct connection *caller, char *reject_msg,
118  size_t reject_msg_len);
119 int setting_int_get(struct setting *pset);
120 
121 // Type SST_STRING setting functions.
122 bool setting_str_set(struct setting *pset, const char *val,
123  struct connection *caller, char *reject_msg,
124  size_t reject_msg_len);
125 bool setting_str_validate(const struct setting *pset, const char *val,
126  struct connection *caller, char *reject_msg,
127  size_t reject_msg_len);
128 char *setting_str_get(struct setting *pset);
129 
130 // Type SST_ENUM setting functions.
131 const char *setting_enum_val(const struct setting *pset, int val,
132  bool pretty);
133 bool setting_enum_set(struct setting *pset, const char *val,
134  struct connection *caller, char *reject_msg,
135  size_t reject_msg_len);
136 bool setting_enum_validate(const struct setting *pset, const char *val,
137  struct connection *caller, char *reject_msg,
138  size_t reject_msg_len);
139 
140 // Type SST_BITWISE setting functions.
141 const char *setting_bitwise_bit(const struct setting *pset, int bit,
142  bool pretty);
143 bool setting_bitwise_set(struct setting *pset, const char *val,
144  struct connection *caller, char *reject_msg,
145  size_t reject_msg_len);
146 bool setting_bitwise_validate(const struct setting *pset, const char *val,
147  struct connection *caller, char *reject_msg,
148  size_t reject_msg_len);
149 int setting_bitwise_get(struct setting *pset);
150 
151 void setting_action(const struct setting *pset);
152 
153 bool setting_non_default(const struct setting *pset);
154 bool setting_locked(const struct setting *pset);
155 void setting_lock_set(struct setting *pset, bool lock);
156 
157 // get 'struct setting_list' and related functions:
158 #define SPECLIST_TAG setting
159 #define SPECLIST_TYPE struct setting
160 #include "speclist.h"
161 
162 #define setting_list_iterate(_setting_list, _setting) \
163  TYPED_LIST_ITERATE(struct setting, _setting_list, _setting)
164 #define setting_list_iterate_end LIST_ITERATE_END
165 
166 /* Iterate over all settings; this additionally checks if the list is
167  * created and valid. */
168 #define settings_iterate(_level, _pset) \
169  { \
170  struct setting_list *_setting_list = settings_list_get(_level); \
171  if (_setting_list != nullptr) { \
172  setting_list_iterate(_setting_list, _pset) \
173  {
174 
175 #define settings_iterate_end \
176  } \
177  setting_list_iterate_end; \
178  } \
179  }
180 
181 void settings_game_start();
182 void settings_game_save(struct section_file *file, const char *section);
183 void settings_game_load(struct section_file *file, const char *section);
184 bool settings_game_reset();
185 
186 void settings_init(bool act);
187 void settings_reset();
188 void settings_turn();
189 void settings_free();
190 int settings_number();
191 
192 void settings_list_update();
193 struct setting_list *settings_list_get(enum sset_level level);
194 
195 bool settings_ruleset(struct section_file *file, const char *section,
196  bool act);
197 
198 void send_server_setting(struct conn_list *dest, const struct setting *pset);
199 void send_server_settings(struct conn_list *dest);
200 void send_server_access_level_settings(struct conn_list *dest,
201  enum cmdlevel old_level,
202  enum cmdlevel new_level);
203 void send_server_setting_control(struct connection *pconn);
204 
205 void setting_changed(struct setting *pset);
206 enum setting_default_level setting_get_setdef(const struct setting *pset);
setting_default_level
Definition: fc_types.h:1147
const char * name
Definition: inputfile.cpp:118
const void * secfile_data_t
Definition: registry_ini.h:28
struct setting_list * level[OLEVELS_NUM]
Definition: settings.cpp:167
bool setting_int_validate(const struct setting *pset, int val, struct connection *caller, char *reject_msg, size_t reject_msg_len)
Returns TRUE if 'val' is a valid value for this setting.
Definition: settings.cpp:3477
void settings_init(bool act)
Initialize stuff related to this code module.
Definition: settings.cpp:4761
void setting_action(const struct setting *pset)
Execute the action callback if needed.
Definition: settings.cpp:4048
void settings_reset()
Reset all settings iff they are changeable.
Definition: settings.cpp:4782
int setting_int_get(struct setting *pset)
Get value of integer setting.
Definition: settings.cpp:3502
void settings_game_start()
Save setting values at the start of the game.
Definition: settings.cpp:4404
bool setting_enum_validate(const struct setting *pset, const char *val, struct connection *caller, char *reject_msg, size_t reject_msg_len)
Returns TRUE if 'val' is a valid value for this setting.
Definition: settings.cpp:3749
void setting_set_to_default(struct setting *pset)
Update the setting to the default value.
Definition: settings.cpp:4018
void settings_game_load(struct section_file *file, const char *section)
Restore all settings from a savegame.
Definition: settings.cpp:4487
void settings_free()
Deinitialize stuff related to this code module.
Definition: settings.cpp:4805
int setting_number(const struct setting *pset)
Returns the id to the given setting.
Definition: settings.cpp:3056
bool setting_int_set(struct setting *pset, int val, struct connection *caller, char *reject_msg, size_t reject_msg_len)
Set the setting to 'val'.
Definition: settings.cpp:3457
enum sset_category setting_category(const struct setting *pset)
Access function for the setting category.
Definition: settings.cpp:3108
bool setting_is_visible(const struct setting *pset, struct connection *caller)
Returns whether the specified server setting (option) can be seen by the caller.
Definition: settings.cpp:3227
bool setting_locked(const struct setting *pset)
Returns if the setting is locked by the ruleset.
Definition: settings.cpp:4283
bool setting_non_default(const struct setting *pset)
Returns whether the setting has non-default value.
Definition: settings.cpp:4257
enum sset_type setting_type(const struct setting *pset)
Access function for the setting type.
Definition: settings.cpp:3092
bool setting_str_set(struct setting *pset, const char *val, struct connection *caller, char *reject_msg, size_t reject_msg_len)
Set the setting to 'val'.
Definition: settings.cpp:3528
struct setting * setting_by_number(int id)
Returns the setting to the given id.
Definition: settings.cpp:3031
int setting_int_max(const struct setting *pset)
Returns the maximal integer value for this setting.
Definition: settings.cpp:3447
void setting_lock_set(struct setting *pset, bool lock)
Set the value for the lock of a setting.
Definition: settings.cpp:4288
bool settings_game_reset()
Reset all settings to the values at game start.
Definition: settings.cpp:4745
enum sset_level setting_level(const struct setting *pset)
Access function for the setting level (used by the /show command).
Definition: settings.cpp:3100
const char * setting_enum_val(const struct setting *pset, int val, bool pretty)
Convert the integer to the string representation of an enumerator.
Definition: settings.cpp:3595
struct setting_list * settings_list_get(enum sset_level level)
Get a settings list of a certain level.
Definition: settings.cpp:5126
bool setting_bitwise_set(struct setting *pset, const char *val, struct connection *caller, char *reject_msg, size_t reject_msg_len)
Set the setting to 'val'.
Definition: settings.cpp:3902
void settings_game_save(struct section_file *file, const char *section)
Save game settings.
Definition: settings.cpp:4416
bool setting_str_validate(const struct setting *pset, const char *val, struct connection *caller, char *reject_msg, size_t reject_msg_len)
Returns TRUE if 'val' is a valid value for this setting.
Definition: settings.cpp:3548
bool settings_ruleset(struct section_file *file, const char *section, bool act)
Load game settings from ruleset file 'game.ruleset'.
Definition: settings.cpp:4058
struct setting * setting_by_name(const char *name)
Returns the setting to the given name.
Definition: settings.cpp:3039
void setting_changed(struct setting *pset)
Mark setting changed.
Definition: settings.cpp:5155
const char * setting_name(const struct setting *pset)
Access function for the setting name.
Definition: settings.cpp:3065
enum setting_default_level setting_get_setdef(const struct setting *pset)
Is the setting in changed state, or the default.
Definition: settings.cpp:5160
const char * setting_value_name(const struct setting *pset, bool pretty, char *buf, size_t buf_len)
Compute the name of the current value of the setting.
Definition: settings.cpp:3946
void settings_turn()
Update stuff every turn that is related to this code module.
Definition: settings.cpp:4798
bool setting_enum_set(struct setting *pset, const char *val, struct connection *caller, char *reject_msg, size_t reject_msg_len)
Set the setting to 'val'.
Definition: settings.cpp:3720
void send_server_setting_control(struct connection *pconn)
Tell the client about all server settings.
Definition: settings.cpp:4986
const char * setting_bitwise_secfile_str(secfile_data_t data, int bit)
Convert the integer to the long support string representation of an enumerator.
Definition: settings.cpp:3763
int setting_int_min(const struct setting *pset)
Returns the minimal integer value for this setting.
Definition: settings.cpp:3438
bool setting_bitwise_validate(const struct setting *pset, const char *val, struct connection *caller, char *reject_msg, size_t reject_msg_len)
Returns TRUE if 'val' is a valid value for this setting.
Definition: settings.cpp:3923
const char * setting_short_help(const struct setting *pset)
Access function for the short help (not translated yet) of the setting.
Definition: settings.cpp:3070
const char * setting_extra_help(const struct setting *pset, bool constant)
Access function for the long (extra) help of the setting.
Definition: settings.cpp:3080
bool setting_bool_validate(const struct setting *pset, const char *val, struct connection *caller, char *reject_msg, size_t reject_msg_len)
Returns TRUE if 'val' is a valid value for this setting.
Definition: settings.cpp:3403
void settings_list_update()
Update sorted settings (changed and locked values).
Definition: settings.cpp:5084
bool setting_is_changeable(const struct setting *pset, struct connection *caller, char *reject_msg, size_t reject_msg_len)
Returns whether the specified server setting (option) can currently be changed by the caller.
Definition: settings.cpp:3191
char * setting_str_get(struct setting *pset)
Get value of string setting.
Definition: settings.cpp:3572
const char * setting_bitwise_bit(const struct setting *pset, int bit, bool pretty)
Convert the bit number to its string representation.
Definition: settings.cpp:3775
int setting_bitwise_get(struct setting *pset)
Get value of bitwise setting.
Definition: settings.cpp:3936
int settings_number()
Returns the total number of settings.
Definition: settings.cpp:4816
const char * setting_default_name(const struct setting *pset, bool pretty, char *buf, size_t buf_len)
Compute the name of the default value of the setting.
Definition: settings.cpp:3982
bool setting_bool_get(struct setting *pset)
Get value of boolean setting.
Definition: settings.cpp:3391
bool setting_is_visible_at_level(const struct setting *pset, enum cmdlevel plevel)
Returns whether the specified server setting (option) can be seen by a caller with the specified acce...
Definition: settings.cpp:3217
bool setting_bool_set(struct setting *pset, const char *val, struct connection *caller, char *reject_msg, size_t reject_msg_len)
Set the setting to 'val'.
Definition: settings.cpp:3372
void send_server_setting(struct conn_list *dest, const struct setting *pset)
Tell the client about just one server setting.
Definition: settings.cpp:4822
void send_server_settings(struct conn_list *dest)
Tell the client about all server settings.
Definition: settings.cpp:4941
void send_server_access_level_settings(struct conn_list *dest, enum cmdlevel old_level, enum cmdlevel new_level)
Send the server settings that got a different visibility or changability after a connection access le...
Definition: settings.cpp:4952
int read_enum_value(const struct setting *pset)
Helper function to read value from enumerator setting.
Definition: settings.cpp:3692
const char * setting_enum_secfile_str(secfile_data_t data, int val)
Convert the integer to the long support string representation of an enumerator.
Definition: settings.cpp:3583
const char * support
Definition: settings.h:21
const char * pretty
Definition: settings.h:23