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 "main.h"
#include "list.h"
#include "homeDirector.h"
#include "textFile.h"
#include "keytable.h"
#include "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);
}
|