8 #include "homeDirector.h"
10 #include "configFile.h"
13 typedef struct setting_int_struct
{
14 int key
; /* identification key */
15 char *param
; /* parameter of the program */
16 char *var
; /* variable in the config file */
17 int type
; /* type of the data - string/number */
18 int value_int
; /* numeric data */
19 char *value_str
; /* textual data */
22 #define CONFIG_TYPE_INT 1
23 #define CONFIG_TYPE_STR 2
25 static config_t config_list
[] =
27 { .key
=CFG_NAME_RIGHT
, .var
="NAME_PLAYER_RIGHT", .param
="--name-right", .type
=CONFIG_TYPE_STR
, .value_str
="name1" },
28 { .key
=CFG_NAME_LEFT
, .var
="NAME_PLAYER_LEFT", .param
="--name-left", .type
=CONFIG_TYPE_STR
, .value_str
="name2" },
29 { .key
=CFG_COUNT_ROUND
, .var
="COUNT_ROUND", .param
="--count", .type
=CONFIG_TYPE_INT
, .value_int
=15 },
30 { .key
=CFG_AI
, .var
="AI", .param
="--ai", .type
=CONFIG_TYPE_INT
, .value_int
=0 },
31 { .key
=CFG_MUSIC
, .var
="MUSIC", .param
="--music", .type
=CONFIG_TYPE_INT
, .value_int
=1 },
32 { .key
=CFG_SOUND
, .var
="SOUND", .param
="--sound", .type
=CONFIG_TYPE_INT
, .value_int
=1 },
33 { .key
=CFG_ARENA
, .var
="ARENA", .param
="--arena", .type
=CONFIG_TYPE_STR
, .value_str
="FAGN" },
35 { .key
=CFG_GUN_DUAL_SIMPLE
, .var
="GUN_DUAL_SIMPLE", .param
="--gun-dual-simple", .type
=CONFIG_TYPE_INT
, .value_int
=1 },
36 { .key
=CFG_GUN_SCATTER
, .var
="GUN_SCATTER", .param
="--gun-scatter", .type
=CONFIG_TYPE_INT
, .value_int
=1 },
37 { .key
=CFG_GUN_TOMMY
, .var
="GUN_TOMMY", .param
="--gun-tommy", .type
=CONFIG_TYPE_INT
, .value_int
=1 },
38 { .key
=CFG_GUN_LASSER
, .var
="GUN_LASSER", .param
="--gun-lasser", .type
=CONFIG_TYPE_INT
, .value_int
=1 },
39 { .key
=CFG_GUN_MINE
, .var
="GUN_MINE", .param
="--gun-mine", .type
=CONFIG_TYPE_INT
, .value_int
=1 },
40 { .key
=CFG_GUN_BOMBBALL
, .var
="GUN_BOMBBALL", .param
="--gun-bombball", .type
=CONFIG_TYPE_INT
, .value_int
=1 },
42 { .key
=CFG_BONUS_SPEED
, .var
="BONUS_SPEED", .param
="--bonus-speed", .type
=CONFIG_TYPE_INT
, .value_int
=1 },
43 { .key
=CFG_BONUS_SHOT
, .var
="BONUS_SHOT", .param
="--bonus-shot", .type
=CONFIG_TYPE_INT
, .value_int
=1 },
44 { .key
=CFG_BONUS_TELEPORT
, .var
="BONUS_TELEPORT", .param
="--bonus-teleport", .type
=CONFIG_TYPE_INT
, .value_int
=1 },
45 { .key
=CFG_BONUS_GHOST
, .var
="BONUS_GHOST", .param
="--bonus-ghost", .type
=CONFIG_TYPE_INT
, .value_int
=1 },
46 { .key
=CFG_BONUS_4X
, .var
="BONUS_4X", .param
="--bonus-4x", .type
=CONFIG_TYPE_INT
, .value_int
=1 },
47 { .key
=CFG_BONUS_HIDDEN
, .var
="BONUS_HIDDEN", .param
="--bonus-hidden", .type
=CONFIG_TYPE_INT
, .value_int
=1 },
49 { .key
=CFG_GAME_TYPE
, .var
="GAME_TYPE", .param
="--game-type", .type
=CONFIG_TYPE_STR
, .value_str
="none" },
50 { .key
=CFG_NET_IP
, .var
="NET_IP", .param
="--ip", .type
=CONFIG_TYPE_STR
, .value_str
="127.0.0.1" },
51 { .key
=CFG_NET_PORT
, .var
="NET_PORT", .param
="--port", .type
=CONFIG_TYPE_STR
, .value_str
="6800" }
54 static textFile_t
*config_file
;
56 static config_t
*find_config(int key
)
60 for (i
= 0; i
< CONFIG_LIST_COUNT
; i
++) {
61 if (config_list
[i
].key
== key
) {
62 return &config_list
[i
];
69 static void check_param()
73 for (i
= 0; i
< CONFIG_LIST_COUNT
; i
++) {
76 str
= getParam(config_list
[i
].param
);
79 if (config_list
[i
].type
== CONFIG_TYPE_INT
) {
80 config_list
[i
].value_int
= atoi(str
);
82 if (config_list
[i
].value_str
!= NULL
) {
83 free(config_list
[i
].value_str
);
86 config_list
[i
].value_str
= strdup(str
);
102 char path
[STR_PATH_SIZE
];
106 sprintf(path
, "%s%stuxanci.conf", home_director_get(), PATH_SEPARATOR
);
108 config_file
= text_file_load(path
);
110 if (config_file
== NULL
) {
111 error("Unable to load config file [%s]", path
);
112 debug("Creating config file [%s]", path
);
114 config_file
= text_file_new(path
);
117 if (config_file
== NULL
) {
118 error("Unable to create config file [%s]", path
);
122 for (i
= 0; i
< CONFIG_LIST_COUNT
; i
++) {
123 if (config_list
[i
].type
== CONFIG_TYPE_INT
) {
126 sprintf(str
, "%d", config_list
[i
].value_int
);
127 loadValueFromConfigFile(config_file
, config_list
[i
].var
, val
, STR_SIZE
, str
);
128 config_list
[i
].value_int
= atoi(val
);
130 loadValueFromConfigFile(config_file
, config_list
[i
].var
, val
, STR_SIZE
, config_list
[i
].value_str
);
131 config_list
[i
].value_str
= strdup(val
);
140 if (config_file
== NULL
) {
144 for (i
= 0; i
< CONFIG_LIST_COUNT
; i
++) {
145 if (config_list
[i
].type
== CONFIG_TYPE_INT
) {
148 sprintf(str
, "%d", config_list
[i
].value_int
);
149 setValueInConfigFile(config_file
, config_list
[i
].var
, str
);
151 setValueInConfigFile(config_file
, config_list
[i
].var
, config_list
[i
].value_str
);
155 text_file_save(config_file
);
158 int config_get_int_value(int key
)
162 tmp
= find_config(key
);
165 assert(tmp
->type
== CONFIG_TYPE_INT
);
167 return tmp
->value_int
;
170 char *config_get_str_value(int key
)
174 tmp
= find_config(key
);
177 assert(tmp
->type
== CONFIG_TYPE_STR
);
179 return tmp
->value_str
;
182 void config_set_int_value(int key
, int n
)
186 tmp
= find_config(key
);
189 assert(tmp
->type
== CONFIG_TYPE_INT
);
194 void config_set_str_value(int key
, char *str
)
198 tmp
= find_config(key
);
201 assert(tmp
->type
== CONFIG_TYPE_STR
);
203 if (tmp
->value_str
!= NULL
) {
204 free(tmp
->value_str
); /* has to be allocated */
207 tmp
->value_str
= strdup(str
);
216 if (config_file
!= NULL
) {
217 text_file_destroy(config_file
);
220 for (i
= 0; i
< CONFIG_LIST_COUNT
; i
++) {
221 if (config_list
[i
].type
== CONFIG_TYPE_STR
&& config_list
[i
].value_str
!= NULL
) {
222 free(config_list
[i
].value_str
);