summaryrefslogtreecommitdiff
path: root/src/client/keytable.c
blob: 67811a79b25b372ea80d399b655ae5856124d71f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

#include "base/main.h"
#include "base/list.h"
#include "base/homeDirector.h"
#include "base/textFile.h"

#include "client/keytable.h"
#include "client/configFile.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;

	sprintf(str, "keycode %s = ", s);

	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];
/*
	int i;
*/
	sprintf(path, PATH_CONFIG "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);

/*
	for( i = 0 ; i < KEY_LENGTH ; i++)
	{
		printf("keytable[%d] = %d\n", i, keytable[i]);
	}
*/

	saveTextFile(keycontrolFile);
}

int getKey(int n)
{
	assert( n >= 0 && n < KEY_LENGTH );
/*
	printf("keytable[n] = %d\n", keytable[n]);
*/
	return keytable[n];
}

void quitKeyTable()
{
	destroyTextFile(keycontrolFile);
	destroyTextFile(keytableFile);
}