Moved make_escapes() and remove_escapes() to support.c.
[freeciv.git] / server / settings.h
blobf3cafd8836b1c956d6e233df8236555db500e522
1 /**********************************************************************
2 Freeciv - Copyright (C) 1996-2004 - The Freeciv Project
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; either version 2, or (at your option)
6 any later version.
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12 ***********************************************************************/
14 #ifndef FC__SETTINGS_H
15 #define FC__SETTINGS_H
17 #ifdef __cplusplus
18 extern "C" {
19 #endif /* __cplusplus */
21 #include "shared.h"
23 #include "game.h"
25 struct sset_val_name {
26 const char *support; /* Untranslated long support name, used
27 * for saving. */
28 const char *pretty; /* Translated, used to display to the
29 * users. */
32 /* Whether settings are sent to the client when the client lists
33 * server options; also determines whether clients can set them in principle.
34 * Eg, not sent: seeds, saveturns, etc.
36 #define SSET_TO_CLIENT TRUE
37 #define SSET_SERVER_ONLY FALSE
39 /* Categories allow options to be usefully organized when presented to the
40 * user */
41 #define SPECENUM_NAME sset_category
42 #define SPECENUM_VALUE0 SSET_GEOLOGY
43 #define SPECENUM_VALUE0NAME N_("Geological")
44 #define SPECENUM_VALUE1 SSET_SOCIOLOGY
45 #define SPECENUM_VALUE1NAME N_("Sociological")
46 #define SPECENUM_VALUE2 SSET_ECONOMICS
47 #define SPECENUM_VALUE2NAME N_("Economic")
48 #define SPECENUM_VALUE3 SSET_MILITARY
49 #define SPECENUM_VALUE3NAME N_("Military")
50 #define SPECENUM_VALUE4 SSET_SCIENCE
51 #define SPECENUM_VALUE4NAME N_("Scientific")
52 #define SPECENUM_VALUE5 SSET_INTERNAL
53 #define SPECENUM_VALUE5NAME N_("Internal")
54 #define SPECENUM_VALUE6 SSET_NETWORK
55 #define SPECENUM_VALUE6NAME N_("Networking")
56 /* keep this last */
57 #define SPECENUM_COUNT SSET_NUM_CATEGORIES
58 #include "specenum_gen.h"
60 /* Levels allow options to be subdivided and thus easier to navigate */
61 #define SPECENUM_NAME sset_level
62 #define SPECENUM_VALUE0 SSET_NONE
63 #define SPECENUM_VALUE0NAME N_("?ssetlevel:None")
64 #define SPECENUM_VALUE1 SSET_ALL
65 #define SPECENUM_VALUE1NAME N_("All")
66 #define SPECENUM_VALUE2 SSET_VITAL
67 #define SPECENUM_VALUE2NAME N_("Vital")
68 #define SPECENUM_VALUE3 SSET_SITUATIONAL
69 #define SPECENUM_VALUE3NAME N_("Situational")
70 #define SPECENUM_VALUE4 SSET_RARE
71 #define SPECENUM_VALUE4NAME N_("Rare")
72 #define SPECENUM_VALUE5 SSET_CHANGED
73 #define SPECENUM_VALUE5NAME N_("Changed")
74 #define SPECENUM_VALUE6 SSET_LOCKED
75 #define SPECENUM_VALUE6NAME N_("Locked")
76 /* keep this last */
77 #define SPECENUM_COUNT OLEVELS_NUM
78 #include "specenum_gen.h"
80 /* Server setting types. */
81 #define SPECENUM_NAME sset_type
82 #define SPECENUM_VALUE0 SSET_BOOL
83 #define SPECENUM_VALUE1 SSET_INT
84 #define SPECENUM_VALUE2 SSET_STRING
85 #define SPECENUM_VALUE3 SSET_ENUM
86 #define SPECENUM_VALUE4 SSET_BITWISE
87 #include "specenum_gen.h"
89 enum setting_default_level { SETDEF_INTERNAL, SETDEF_RULESET, SETDEF_CHANGED };
91 /* forward declaration */
92 struct setting;
94 struct setting *setting_by_number(int id);
95 struct setting *setting_by_name(const char *name);
96 int setting_number(const struct setting *pset);
98 const char *setting_name(const struct setting *pset);
99 const char *setting_short_help(const struct setting *pset);
100 const char *setting_extra_help(const struct setting *pset, bool constant);
101 enum sset_type setting_type(const struct setting *pset);
102 enum sset_level setting_level(const struct setting *pset);
103 enum sset_category setting_category(const struct setting *pset);
105 bool setting_is_changeable(const struct setting *pset,
106 struct connection *caller, char *reject_msg,
107 size_t reject_msg_len);
108 bool setting_is_visible(const struct setting *pset,
109 struct connection *caller);
111 const char *setting_value_name(const struct setting *pset, bool pretty,
112 char *buf, size_t buf_len);
113 const char *setting_default_name(const struct setting *pset, bool pretty,
114 char *buf, size_t buf_len);
116 void setting_set_to_default(struct setting *pset);
118 int read_enum_value(const struct setting *pset);
119 const char *setting_enum_secfile_str(secfile_data_t data, int val);
120 const char *setting_bitwise_secfile_str(secfile_data_t data, int bit);
122 /* Type SSET_BOOL setting functions. */
123 bool setting_bool_set(struct setting *pset, const char *val,
124 struct connection *caller, char *reject_msg,
125 size_t reject_msg_len);
126 bool setting_bool_validate(const struct setting *pset, const char *val,
127 struct connection *caller, char *reject_msg,
128 size_t reject_msg_len);
129 bool setting_bool_get(struct setting *pset);
131 /* Type SSET_INT setting functions. */
132 int setting_int_min(const struct setting *pset);
133 int setting_int_max(const struct setting *pset);
134 bool setting_int_set(struct setting *pset, int val,
135 struct connection *caller, char *reject_msg,
136 size_t reject_msg_len);
137 bool setting_int_validate(const struct setting *pset, int val,
138 struct connection *caller, char *reject_msg,
139 size_t reject_msg_len);
140 int setting_int_get(struct setting *pset);
142 /* Type SSET_STRING setting functions. */
143 bool setting_str_set(struct setting *pset, const char *val,
144 struct connection *caller, char *reject_msg,
145 size_t reject_msg_len);
146 bool setting_str_validate(const struct setting *pset, const char *val,
147 struct connection *caller, char *reject_msg,
148 size_t reject_msg_len);
149 char *setting_str_get(struct setting *pset);
151 /* Type SSET_ENUM setting functions. */
152 const char *setting_enum_val(const struct setting *pset, int val,
153 bool pretty);
154 bool setting_enum_set(struct setting *pset, const char *val,
155 struct connection *caller, char *reject_msg,
156 size_t reject_msg_len);
157 bool setting_enum_validate(const struct setting *pset, const char *val,
158 struct connection *caller, char *reject_msg,
159 size_t reject_msg_len);
161 /* Type SSET_BITWISE setting functions. */
162 const char *setting_bitwise_bit(const struct setting *pset,
163 int bit, bool pretty);
164 bool setting_bitwise_set(struct setting *pset, const char *val,
165 struct connection *caller, char *reject_msg,
166 size_t reject_msg_len);
167 bool setting_bitwise_validate(const struct setting *pset, const char *val,
168 struct connection *caller, char *reject_msg,
169 size_t reject_msg_len);
170 int setting_bitwise_get(struct setting *pset);
172 void setting_action(const struct setting *pset);
174 bool setting_non_default(const struct setting *pset);
175 bool setting_locked(const struct setting *pset);
176 void setting_lock_set(struct setting *pset, bool lock);
178 /* get 'struct setting_list' and related functions: */
179 #define SPECLIST_TAG setting
180 #define SPECLIST_TYPE struct setting
181 #include "speclist.h"
183 #define setting_list_iterate(_setting_list, _setting) \
184 TYPED_LIST_ITERATE(struct setting, _setting_list, _setting)
185 #define setting_list_iterate_end \
186 LIST_ITERATE_END
188 /* Iterate over all settings; this additionally checks if the list is
189 * created and valid. */
190 #define settings_iterate(_level, _pset) \
192 struct setting_list *_setting_list = settings_list_get(_level); \
193 if (_setting_list != NULL) { \
194 setting_list_iterate(_setting_list, _pset) {
196 #define settings_iterate_end \
197 } setting_list_iterate_end; \
201 void settings_game_start(void);
202 void settings_game_save(struct section_file *file, const char *section);
203 void settings_game_load(struct section_file *file, const char *section);
204 bool settings_game_reset(void);
206 void settings_init(bool act);
207 void settings_reset(void);
208 void settings_turn(void);
209 void settings_free(void);
210 int settings_number(void);
212 void settings_list_update(void);
213 struct setting_list *settings_list_get(enum sset_level level);
215 bool settings_ruleset(struct section_file *file, const char *section, bool act);
217 void send_server_setting(struct conn_list *dest, const struct setting *pset);
218 void send_server_settings(struct conn_list *dest);
219 void send_server_hack_level_settings(struct conn_list *dest);
220 void send_server_setting_control(struct connection *pconn);
222 void setting_changed(struct setting *pset);
223 enum setting_default_level setting_get_setdef(struct setting *pset);
224 void settings_consider_all_changed(void);
226 #ifdef __cplusplus
228 #endif /* __cplusplus */
230 #endif /* FC__SETTINGS_H */