Browse Source

Finished implementing set command.

Only mouse is missing.
Thomas Buck 11 years ago
parent
commit
7443062c49
4 changed files with 134 additions and 9 deletions
  1. 7
    0
      include/OpenRaider.h
  2. 2
    0
      include/utils/strings.h
  3. 97
    9
      src/OpenRaider.cpp
  4. 28
    0
      src/utils/strings.cpp

+ 7
- 0
include/OpenRaider.h View File

39
 
39
 
40
     int command(const char *command, std::vector<char *> *args);
40
     int command(const char *command, std::vector<char *> *args);
41
 
41
 
42
+    char *expandDirectoryNames(const char *s);
43
+
42
     int set(const char *var, const char *value);
44
     int set(const char *var, const char *value);
43
 
45
 
44
     int bind(const char *action, const char *key);
46
     int bind(const char *action, const char *key);
53
     Window *mWindow;
55
     Window *mWindow;
54
 
56
 
55
     Sound *mSound;
57
     Sound *mSound;
58
+
59
+    char *mBaseDir;
60
+    char *mPakDir;
61
+    char *mAudioDir;
62
+    char *mDataDir;
56
 };
63
 };
57
 
64
 
58
 #endif
65
 #endif

+ 2
- 0
include/utils/strings.h View File

12
 #include <cstdarg>
12
 #include <cstdarg>
13
 #include <vector>
13
 #include <vector>
14
 
14
 
15
+char *stringReplace(const char *s, const char *search, const char *replace);
16
+
15
 void printStringVector(std::vector<char *> *args);
17
 void printStringVector(std::vector<char *> *args);
16
 
18
 
17
 int readBool(const char *value, bool *var);
19
 int readBool(const char *value, bool *var);

+ 97
- 9
src/OpenRaider.cpp View File

21
 OpenRaider::OpenRaider() {
21
 OpenRaider::OpenRaider() {
22
     mInit = false;
22
     mInit = false;
23
     mRunning = false;
23
     mRunning = false;
24
+    mBaseDir = NULL;
25
+    mPakDir = NULL;
26
+    mAudioDir = NULL;
27
+    mDataDir = NULL;
24
 
28
 
25
     mSound = new Sound();
29
     mSound = new Sound();
26
     mWindow = new WindowSDL();
30
     mWindow = new WindowSDL();
32
 
36
 
33
     if (mWindow)
37
     if (mWindow)
34
         delete mWindow;
38
         delete mWindow;
39
+
40
+    if (mBaseDir)
41
+        delete mBaseDir;
42
+
43
+    if (mPakDir)
44
+        delete mPakDir;
45
+
46
+    if (mAudioDir)
47
+        delete mAudioDir;
48
+
49
+    if (mDataDir)
50
+        delete mDataDir;
35
 }
51
 }
36
 
52
 
37
 int OpenRaider::loadConfig(const char *config) {
53
 int OpenRaider::loadConfig(const char *config) {
122
     }
138
     }
123
 }
139
 }
124
 
140
 
141
+char *OpenRaider::expandDirectoryNames(const char *s) {
142
+    const char *base = "$(basedir)";
143
+    const char *pak = "$(pakdir)";
144
+    const char *audio = "$(audiodir)";
145
+    const char *data = "$(datadir)";
146
+
147
+    if (mBaseDir != NULL) {
148
+        if (strstr(s, base) != NULL) {
149
+            return stringReplace(s, base, mBaseDir);
150
+        }
151
+    }
152
+
153
+    if (mPakDir != NULL) {
154
+        if (strstr(s, pak) != NULL) {
155
+            return stringReplace(s, pak, mPakDir);
156
+        }
157
+    }
158
+
159
+    if (mAudioDir != NULL) {
160
+        if (strstr(s, audio) != NULL) {
161
+            return stringReplace(s, audio, mAudioDir);
162
+        }
163
+    }
164
+
165
+    if (mDataDir != NULL) {
166
+        if (strstr(s, data) != NULL) {
167
+            return stringReplace(s, data, mDataDir);
168
+        }
169
+    }
170
+
171
+    return NULL;
172
+}
173
+
125
 int OpenRaider::set(const char *var, const char *value) {
174
 int OpenRaider::set(const char *var, const char *value) {
126
     if (strcmp(var, "size") == 0) {
175
     if (strcmp(var, "size") == 0) {
127
         // value has format like "\"1024x768\""
176
         // value has format like "\"1024x768\""
151
         float vol = 1.0f;
200
         float vol = 1.0f;
152
         if (sscanf(value, "%f", &vol) != 1) {
201
         if (sscanf(value, "%f", &vol) != 1) {
153
             printf("set-volume-Error: Invalid value (%s)\n", value);
202
             printf("set-volume-Error: Invalid value (%s)\n", value);
203
+            return -5;
154
         }
204
         }
155
         mSound->setVolume(vol);
205
         mSound->setVolume(vol);
156
     } else if (strcmp(var, "mouse_x") == 0) {
206
     } else if (strcmp(var, "mouse_x") == 0) {
157
-        // TODO set
207
+        // TODO mouse support
158
     } else if (strcmp(var, "mouse_y") == 0) {
208
     } else if (strcmp(var, "mouse_y") == 0) {
159
-        // TODO set
209
+        // TODO mouse support
160
     } else if (strcmp(var, "basedir") == 0) {
210
     } else if (strcmp(var, "basedir") == 0) {
161
-
211
+        char *quotes = stringReplace(value, "\"", "");
212
+        char *tmp = expandDirectoryNames(quotes);
213
+        if (tmp == NULL) {
214
+            mBaseDir = fullPath(quotes, 0);
215
+        } else {
216
+            mBaseDir = fullPath(tmp, 0);
217
+            delete [] tmp;
218
+        }
219
+        delete [] quotes;
162
     } else if (strcmp(var, "pakdir") == 0) {
220
     } else if (strcmp(var, "pakdir") == 0) {
163
-
221
+        char *quotes = stringReplace(value, "\"", "");
222
+        char *tmp = expandDirectoryNames(quotes);
223
+        if (tmp == NULL) {
224
+            mPakDir = fullPath(quotes, 0);
225
+        } else {
226
+            mPakDir = fullPath(tmp, 0);
227
+            delete [] tmp;
228
+        }
229
+        delete [] quotes;
164
     } else if (strcmp(var, "audiodir") == 0) {
230
     } else if (strcmp(var, "audiodir") == 0) {
165
-
231
+        char *quotes = stringReplace(value, "\"", "");
232
+        char *tmp = expandDirectoryNames(quotes);
233
+        if (tmp == NULL) {
234
+            mAudioDir = fullPath(quotes, 0);
235
+        } else {
236
+            mAudioDir = fullPath(tmp, 0);
237
+            delete [] tmp;
238
+        }
239
+        delete [] quotes;
166
     } else if (strcmp(var, "datadir") == 0) {
240
     } else if (strcmp(var, "datadir") == 0) {
167
-
241
+        char *quotes = stringReplace(value, "\"", "");
242
+        char *tmp = expandDirectoryNames(quotes);
243
+        if (tmp == NULL) {
244
+            mDataDir = fullPath(quotes, 0);
245
+        } else {
246
+            mDataDir = fullPath(tmp, 0);
247
+            delete [] tmp;
248
+        }
249
+        delete [] quotes;
168
     } else if (strcmp(var, "font") == 0) {
250
     } else if (strcmp(var, "font") == 0) {
169
-
251
+        char *quotes = stringReplace(value, "\"", "");
252
+        char *tmp = expandDirectoryNames(quotes);
253
+        if (tmp == NULL) {
254
+            mWindow->setFont(quotes);
255
+        } else {
256
+            mWindow->setFont(tmp);
257
+            delete [] tmp;
258
+        }
259
+        delete [] quotes;
170
     } else {
260
     } else {
171
         printf("set-Error: Unknown variable (%s = %s)\n", var, value);
261
         printf("set-Error: Unknown variable (%s = %s)\n", var, value);
172
         return -1;
262
         return -1;
209
     if (mWindow->initializeGL() != 0)
299
     if (mWindow->initializeGL() != 0)
210
         return -2;
300
         return -2;
211
 
301
 
212
-    mWindow->setFont("~/.OpenRaider/data/test.ttf");
213
-
214
     // Initialize window font
302
     // Initialize window font
215
     if (mWindow->initializeFont() != 0)
303
     if (mWindow->initializeFont() != 0)
216
         return -3;
304
         return -3;

+ 28
- 0
src/utils/strings.cpp View File

17
 
17
 
18
 #include "utils/strings.h"
18
 #include "utils/strings.h"
19
 
19
 
20
+char *stringReplace(const char *s, const char *search, const char *replace) {
21
+    char *tmp = strstr(s, search);
22
+    if (tmp == NULL)
23
+        return NULL;
24
+    size_t offset = tmp - s;
25
+
26
+    size_t length = strlen(s) - strlen(search) + strlen(replace);
27
+    char *buf = new char[length + 1];
28
+    buf[length] = '\0';
29
+
30
+    for (size_t i = 0; i < offset; i++)
31
+        buf[i] = s[i];
32
+
33
+    for (size_t i = 0; i < strlen(replace); i++)
34
+        buf[offset + i] = replace[i];
35
+
36
+    for (size_t i = (offset + strlen(search)); i < strlen(s); i++)
37
+        buf[i + strlen(replace) - strlen(search)] = s[i];
38
+
39
+    tmp = stringReplace(buf, search, replace);
40
+    if (tmp == NULL)
41
+        return buf;
42
+    else {
43
+        delete [] buf;
44
+        return tmp;
45
+    }
46
+}
47
+
20
 void printStringVector(std::vector<char *> *args) {
48
 void printStringVector(std::vector<char *> *args) {
21
     printf("(");
49
     printf("(");
22
     for (std::vector<char *>::size_type i = 0; i < args->size(); i++) {
50
     for (std::vector<char *>::size_type i = 0; i < args->size(); i++) {

Loading…
Cancel
Save