diff options
| author | Dusan Durech <dusan.d@Centrum.sk> | 2009-08-17 19:05:04 +0200 |
|---|---|---|
| committer | Dusan Durech <dusan.d@Centrum.sk> | 2009-08-17 19:05:04 +0200 |
| commit | 7e4da11ff95f2867f8032ebb0279e5698053a7eb (patch) | |
| tree | 8420852d5941b7f17d5c00a68558db72510fc43e /src/client | |
| parent | fcafb3fc81d340f939bdde215b813d69c34ac9e0 (diff) | |
half work for new config API
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/config.c | 188 | ||||
| -rw-r--r-- | src/client/config.h | 39 | ||||
| -rw-r--r-- | src/client/game.c | 3 |
3 files changed, 230 insertions, 0 deletions
diff --git a/src/client/config.c b/src/client/config.c new file mode 100644 index 0000000..1be1f1a --- /dev/null +++ b/src/client/config.c @@ -0,0 +1,188 @@ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <assert.h> + +#include "main.h" +#include "list.h" +#include "homeDirector.h" +#include "textFile.h" +#include "configFile.h" +#include "config.h" + +typedef struct setting_int_struct +{ + int key; /* identifikacny kluc */ + char *param; /* parameter programu */ + char *var; /* premenna v config subore */ + int type; /* typ udaju - retazec/cislo */ + int value_int; /* hodnota cele cislo */ + char *value_str; /* hodnota retazec */ +} config_t; + +#define CONFIG_TYPE_INT 1 +#define CONFIG_TYPE_STR 2 + +static config_t config_list[] = +{ + { .key=CFG_NAME_RIGHT, .var="NAME_PLAYER_RIGHT", .param="--name-right", .type=CONFIG_TYPE_STR, .value_str="name1" }, + { .key=CFG_NAME_LEFT, .var="NAME_PLAYER_LEFT", .param="--name-left", .type=CONFIG_TYPE_STR, .value_str="name2" }, + { .key=CFG_COUNT_ROUND, .var="COUNT_ROUND", .param="--count", .type=CONFIG_TYPE_INT, .value_int=15 }, + { .key=CFG_AI, .var="AI", .param="--ai", .type=CONFIG_TYPE_INT, .value_int=0 }, + { .key=CFG_MUSIC, .var="MUSIC", .param="--music", .type=CONFIG_TYPE_INT, .value_int=1 }, + { .key=CFG_SOUND, .var="SOUND", .param="--sound", .type=CONFIG_TYPE_INT, .value_int=1 }, + { .key=CFG_ARENA, .var="ARENA", .param="--arena", .type=CONFIG_TYPE_STR, .value_str="FAGN" }, + + { .key=CFG_GUN_DUAL_SIMPLE, .var="GUN_DUAL_SIMPLE", .param="--gun-dual-simple", .type=CONFIG_TYPE_INT, .value_int=1 }, + { .key=CFG_GUN_SCATTER, .var="GUN_SCATTER", .param="--gun-scatter", .type=CONFIG_TYPE_INT, .value_int=1 }, + { .key=CFG_GUN_TOMMY, .var="GUN_TOMMY", .param="--gun-tommy", .type=CONFIG_TYPE_INT, .value_int=1 }, + { .key=CFG_GUN_LASSER, .var="GUN_LASSER", .param="--gun-lasser", .type=CONFIG_TYPE_INT, .value_int=1 }, + { .key=CFG_GUN_MINE, .var="GUN_MINE", .param="--gun-mine", .type=CONFIG_TYPE_INT, .value_int=1 }, + { .key=CFG_GUN_BOMBBALL, .var="GUN_BOMBBALL", .param="--gun-bombball", .type=CONFIG_TYPE_INT, .value_int=1 }, + + { .key=CFG_BONUS_SPEED, .var="BONUS_SPEED", .param="--bonus-speed", .type=CONFIG_TYPE_INT, .value_int=1 }, + { .key=CFG_BONUS_SHOT, .var="BONUS_SHOT", .param="--bonus-shot", .type=CONFIG_TYPE_INT, .value_int=1 }, + { .key=CFG_BONUS_TELEPORT, .var="BONUS_TELEPORT", .param="--bonus-teleport", .type=CONFIG_TYPE_INT, .value_int=1 }, + { .key=CFG_BONUS_GHOST, .var="BONUS_GHOST", .param="--bonus-ghost", .type=CONFIG_TYPE_INT, .value_int=1 }, + { .key=CFG_BONUS_4X, .var="BONUS_4X", .param="--bonus-4x", .type=CONFIG_TYPE_INT, .value_int=1 }, + { .key=CFG_BONUS_HIDDEN, .var="BONUS_HIDDEN", .param="--bonus-hidden", .type=CONFIG_TYPE_INT, .value_int=1 } +}; + +static config_t* find_config(int key) +{ + int i; + + for (i = 0; i < CONFIG_LIST_COUNT; i++) { + if (config_list[i].key == key) { + return &config_list[i]; + } + } + + return NULL; +} + +static textFile_t *config_file; + +int config_init() +{ + config_load(); + return 0; +} + +void config_load() +{ + char path[STR_PATH_SIZE]; + char val[STR_SIZE]; + int i; + + sprintf(path, "%s/tuxanci.conf", home_director_get()); + + config_file = text_file_load(path); + + if (config_file == NULL) { + fprintf(stderr, _("[Error] Unable to load config file [%s]\n"), path); + fprintf(stderr, _("[Debug] Creating config file [%s]\n"), path); + + config_file = text_file_new(path); + } + + if (config_file == NULL) { + fprintf(stderr, _("[Error] Unable to create config file [%s]\n"), path); + return; + } + + for (i = 0; i < CONFIG_LIST_COUNT; i++) { + if (config_list[i].type == CONFIG_TYPE_INT) { + char str[STR_SIZE]; + + sprintf(str, "%d", config_list[i].value_int); + loadValueFromConfigFile(config_file, config_list[i].var, val, STR_SIZE, str); + config_list[i].value_int = atoi(val); + } else { + loadValueFromConfigFile(config_file, config_list[i].var, val, STR_SIZE, config_list[i].value_str); + config_list[i].value_str = strdup(val); + } + } +} + +void config_save() +{ + int i; + + if (config_file == NULL) { + return; + } + + for (i = 0; i < CONFIG_LIST_COUNT; i++) { + if (config_list[i].type == CONFIG_TYPE_INT) { + char str[STR_SIZE]; + + sprintf(str, "%d", config_list[i].value_int); + setValueInConfigFile(config_file, config_list[i].var, str); + } else { + setValueInConfigFile(config_file, config_list[i].var, config_list[i].value_str); + } + } + + text_file_save(config_file); + text_file_destroy(config_file); +} + +int config_get_int_value(int key) +{ + config_t *tmp; + + tmp = find_config(key); + + assert(tmp != NULL); + assert(tmp->type == CONFIG_TYPE_INT); + + return tmp->value_int; +} + +char* config_get_str_value(int key) +{ + config_t *tmp; + + tmp = find_config(key); + + assert(tmp != NULL); + assert(tmp->type == CONFIG_TYPE_STR); + + return tmp->value_str; +} + +void config_set_int_value(int key, int n) +{ + config_t *tmp; + + tmp = find_config(key); + + assert(tmp != NULL); + assert(tmp->type == CONFIG_TYPE_INT); + + tmp->value_int = n; +} + +void config_set_str_value(int key, char *str) +{ + config_t *tmp; + + tmp = find_config(key); + + assert(tmp != NULL); + assert(tmp->type == CONFIG_TYPE_STR); + + if (tmp->value_str != NULL) { + free(tmp->value_str); // musi to byt alokovane + } + + tmp->value_str = strdup(str); +} + +int config_quit() +{ + config_save(); + return 0; +} diff --git a/src/client/config.h b/src/client/config.h new file mode 100644 index 0000000..c56c537 --- /dev/null +++ b/src/client/config.h @@ -0,0 +1,39 @@ +#ifndef CONFIG_H +#define CONFIG_H + +#define CFG_NAME_RIGHT 1 +#define CFG_NAME_LEFT 2 +#define CFG_COUNT_ROUND 3 +#define CFG_AI 4 +#define CFG_MUSIC 5 +#define CFG_SOUND 6 +#define CFG_ARENA 7 + +#define CFG_GUN_DUAL_SIMPLE 8 +#define CFG_GUN_SCATTER 9 +#define CFG_GUN_TOMMY 10 +#define CFG_GUN_LASSER 11 +#define CFG_GUN_MINE 12 +#define CFG_GUN_BOMBBALL 13 + + +#define CFG_BONUS_SPEED 14 +#define CFG_BONUS_SHOT 15 +#define CFG_BONUS_TELEPORT 16 +#define CFG_BONUS_GHOST 17 +#define CFG_BONUS_4X 18 +#define CFG_BONUS_HIDDEN 19 + +#define CONFIG_LIST_COUNT 19 + +extern int config_init(); +extern void config_load(); +extern void config_save(); +extern int config_get_int_value(int key); +extern char* config_get_str_value(int key); +extern void config_set_int_value(int key, int n); +extern void config_set_str_value(int key, char *str); +extern int config_quit(); + +#endif /* CONFIG_H */ + diff --git a/src/client/game.c b/src/client/game.c index 12dff3a..07079b6 100644 --- a/src/client/game.c +++ b/src/client/game.c @@ -13,6 +13,7 @@ #include "item.h" #include "shot.h" #include "arenaFile.h" +#include "config.h" #include "image.h" #include "layer.h" @@ -63,6 +64,7 @@ static void initGame() shot_init(); panel_init(); world_init(); + config_init(); main_menu_init(); analyze_init(); @@ -91,6 +93,7 @@ void game_quit() scredits_quit(); table_quit(); browser_quit(); + config_quit(); layer_quit(); font_quit(); |