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)
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
19 #endif /* __cplusplus */
25 struct sset_val_name
{
26 const char *support
; /* Untranslated long support name, used
28 const char *pretty
; /* Translated, used to display to the
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
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")
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")
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 */
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
,
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 \
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);
228 #endif /* __cplusplus */
230 #endif /* FC__SETTINGS_H */