diff options
Diffstat (limited to 'src/keytable.c')
| -rw-r--r-- | src/keytable.c | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/src/keytable.c b/src/keytable.c new file mode 100644 index 0000000..d0b76f2 --- /dev/null +++ b/src/keytable.c @@ -0,0 +1,121 @@ + +#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 "keytable.h" + +static textFile_t *keytableFile; +static textFile_t *keycontrolFile; +static int keytable[KEY_LENGTH]; + +static int getKeyCode(char *s) +{ + char str[STR_SIZE]; + char *find; + int i; + + for( i = 0 ; i < keytableFile->text->count ; i++ ) + { + char *line; + line = (char *) (keytableFile->text->list[i]); + + if( ( find = strstr(line, str) ) != NULL ) + { + int ret; + ret = atoi( strchr(line, '=')+1 ); + return ret; + } + } + + return -1; +} + +void initKeyTable() +{ + char path[STR_PATH_SIZE]; + char val[STR_SIZE]; + + sprintf(path, PATH_DATA "keytable.conf"); + keytableFile = loadTextFile(path); + + if( keytableFile == NULL ) + { + fprintf(stderr, "Don't load %s\n", path); + return; + } + + sprintf(path, "%s/keycontrol.conf", getHomeDirector()); + keycontrolFile = loadTextFile(path); + + if( keycontrolFile == NULL ) + { + fprintf(stderr, "Don't load %s\n", path); + fprintf(stderr, "I create %s\n", path); + + keycontrolFile = newTextFile(path); + } + + if( keycontrolFile == NULL ) + { + fprintf(stderr, "Don't create %s\n", path); + return; + } + + loadValueFromConfigFile(keycontrolFile, "TUX_RIGHT_MOVE_UP", val, STR_SIZE, "SDLK_UP"); + keytable[ KEY_TUX_RIGHT_MOVE_UP ] = getKeyCode(val); + + loadValueFromConfigFile(keycontrolFile, "TUX_RIGHT_MOVE_RIGHT", val, STR_SIZE, "SDLK_RIGHT"); + keytable[ KEY_TUX_RIGHT_MOVE_RIGHT ] = getKeyCode(val); + + loadValueFromConfigFile(keycontrolFile, "TUX_RIGHT_MOVE_LEFT", val, STR_SIZE, "SDLK_LEFT"); + keytable[ KEY_TUX_RIGHT_MOVE_LEFT ] = getKeyCode(val); + + loadValueFromConfigFile(keycontrolFile, "TUX_RIGHT_MOVE_DOWN", val, STR_SIZE, "SDLK_DOWN"); + keytable[ KEY_TUX_RIGHT_MOVE_DOWN ] = getKeyCode(val); + + loadValueFromConfigFile(keycontrolFile, "TUX_RIGHT_SHOOT", val, STR_SIZE, "SDLK_KP0"); + keytable[ KEY_TUX_RIGHT_SHOOT ] = getKeyCode(val); + + loadValueFromConfigFile(keycontrolFile, "TUX_RIGHT_SWITCH_WEAPON", val, STR_SIZE, "SDLK_KP1"); + keytable[ KEY_TUX_RIGHT_SWITCH_WEAPON] = getKeyCode(val); + + loadValueFromConfigFile(keycontrolFile, "TUX_LEFT_MOVE_UP", val, STR_SIZE, "SDLK_w"); + keytable[ KEY_TUX_LEFT_MOVE_UP ] = getKeyCode(val); + + loadValueFromConfigFile(keycontrolFile, "TUX_LEFT_MOVE_RIGHT", val, STR_SIZE, "SDLK_d"); + keytable[ KEY_TUX_LEFT_MOVE_RIGHT ] = getKeyCode(val); + + loadValueFromConfigFile(keycontrolFile, "TUX_LEFT_MOVE_LEFT", val, STR_SIZE, "SDLK_a"); + keytable[ KEY_TUX_LEFT_MOVE_LEFT ] = getKeyCode(val); + + loadValueFromConfigFile(keycontrolFile, "TUX_LEFT_MOVE_DOWN", val, STR_SIZE, "SDLK_s"); + keytable[ KEY_TUX_LEFT_MOVE_DOWN ] = getKeyCode(val); + + loadValueFromConfigFile(keycontrolFile, "TUX_LEFT_SHOOT", val, STR_SIZE, "SDLK_q"); + keytable[ KEY_TUX_LEFT_SHOOT ] = getKeyCode(val); + + loadValueFromConfigFile(keycontrolFile, "TUX_LEFT_SWITCH_WEAPON", val, STR_SIZE, "SDLK_TAB"); + keytable[ KEY_TUX_LEFT_SWITCH_WEAPON ] = getKeyCode(val); + + saveTextFile(keycontrolFile); +} + +int getKey(int n) +{ + assert( n >= 0 && n < KEY_LENGTH ); + return keytable[n]; +} + +void quitKeyTable() +{ + destroyTextFile(keycontrolFile); + destroyTextFile(keytableFile); +} + |