Subversion Repositories eduke32

Rev

Rev 8266 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5327 hendricks2 1
// Evil and Nasty Configuration File Reader for KenBuild
2
// by Jonathon Fowler
3
 
4
#include "compat.h"
5
#include "build.h"
6
#include "editor.h"
7
#include "osd.h"
8
 
7564 hendricks2 9
#include "game.h"
10
 
8482 hendricks2 11
#include "renderlayer.h"
5327 hendricks2 12
#include "baselayer.h"
13
 
7563 hendricks2 14
#if defined RENDERTYPESDL && defined SDL_TARGET && SDL_TARGET > 1
15
# include "sdl_inc.h"
16
#endif
17
 
18
static void Ken_SetDefaults()
19
{
20
#if defined RENDERTYPESDL && SDL_MAJOR_VERSION > 1
21
    uint32_t inited = SDL_WasInit(SDL_INIT_VIDEO);
22
    if (inited == 0)
23
        SDL_Init(SDL_INIT_VIDEO);
24
    else if (!(inited & SDL_INIT_VIDEO))
25
        SDL_InitSubSystem(SDL_INIT_VIDEO);
26
 
27
    SDL_DisplayMode dm;
28
    if (SDL_GetDesktopDisplayMode(0, &dm) == 0)
29
    {
30
        xdimgame = xdim2d = dm.w;
31
        ydimgame = ydim2d = dm.h;
32
    }
33
    else
34
#endif
35
    {
36
        xdimgame = xdim2d = 1024;
37
        ydimgame = ydim2d = 768;
38
    }
39
}
40
 
5327 hendricks2 41
static int vesares[13][2] = {{320,200},{360,200},{320,240},{360,240},{320,400},
42
                             {360,400},{640,350},{640,400},{640,480},{800,600},
43
                             {1024,768},{1280,1024},{1600,1200}};
44
 
45
static int readconfig(BFILE *fp, const char *key, char *value, unsigned len)
46
{
47
    char buf[1000], *k, *v, *eq;
48
    int x=0;
49
 
50
    if (len < 1) return 0;
51
 
52
    Brewind(fp);
53
 
54
    while (1)
55
    {
56
        if (!Bfgets(buf, 1000, fp)) return 0;
57
 
58
        if (buf[0] == ';') continue;
59
 
60
        eq = Bstrchr(buf, '=');
61
        if (!eq) continue;
62
 
63
        k = buf;
64
        v = eq+1;
65
 
66
        while (*k == ' ' || *k == '\t') k++;
67
        *(eq--) = 0;
68
        while ((*eq == ' ' || *eq == '\t') && eq>=k) *(eq--) = 0;
69
 
70
        if (Bstrcasecmp(k, key)) continue;
71
 
72
        while (*v == ' ' || *k == '\t') v++;
73
        eq = v + Bstrlen(v)-1;
74
 
75
        while ((*eq == ' ' || *eq == '\t' || *eq == '\r' || *eq == '\n') && eq>=v) *(eq--) = 0;
76
 
77
        value[--len] = 0;
78
        do value[x] = v[x]; while (v[x++] != 0 && len-- > 0);
79
 
80
        return x-1;
81
    }
82
}
83
 
5739 hendricks2 84
double msens;
5327 hendricks2 85
 
86
/*
87
 * SETUP.DAT
88
 * 0      = video mode (0:chained 1:vesa 2:screen buffered 3/4/5:tseng/paradise/s3 6:red-blue)
89
 * 1      = sound (0:none)
90
 * 2      = music (0:none)
91
 * 3      = input (0:keyboard 1:+mouse)
92
 * 4      = multiplayer (0:single 1-4:com 5-11:ipx)
93
 * 5&0xf0 = com speed
94
 * 5&0x0f = com irq
95
 * 6&0xf0 = chained y-res
96
 * 6&0x0f = chained x-res or vesa mode
97
 * 7&0xf0 = sound samplerate
98
 * 7&0x01 = sound quality
99
 * 7&0x02 = 8/16 bit
100
 * 7&0x04 = mono/stereo
101
 *
102
 * bytes 8 to 26 are key settings:
103
 * 0      = Forward (0xc8)
104
 * 1      = Backward (0xd0)
105
 * 2      = Turn left (0xcb)
106
 * 3      = Turn right (0xcd)
107
 * 4      = Run (0x2a)
108
 * 5      = Strafe (0x9d)
109
 * 6      = Fire (0x1d)
110
 * 7      = Use (0x39)
111
 * 8      = Stand high (0x1e)
112
 * 9      = Stand low (0x2c)
113
 * 10     = Look up (0xd1)
114
 * 11     = Look down (0xc9)
115
 * 12     = Strafe left (0x33)
116
 * 13     = Strafe right (0x34)
117
 * 14     = 2D/3D switch (0x9c)
118
 * 15     = View cycle (0x1c)
119
 * 16     = 2D Zoom in (0xd)
120
 * 17     = 2D Zoom out (0xc)
121
 * 18     = Chat (0xf)
122
 */
123
 
5739 hendricks2 124
int Ken_loadsetup(const char *fn)
5327 hendricks2 125
{
7563 hendricks2 126
    Ken_SetDefaults();
127
 
5327 hendricks2 128
    BFILE *fp;
129
#define VL 32
130
    char val[VL];
131
    int i;
132
 
133
    if ((fp = Bfopen(fn, "rt")) == NULL) return -1;
134
 
135
    if (readconfig(fp, "forcesetup", val, VL) > 0) { if (Batoi(val) != 0) forcesetup = 1; else forcesetup = 0; }
136
    if (readconfig(fp, "fullscreen", val, VL) > 0) { if (Batoi(val) != 0) fullscreen = 1; else fullscreen = 0; }
137
    if (readconfig(fp, "resolution", val, VL) > 0)
138
    {
139
        i = Batoi(val) & 0x0f;
140
        if ((unsigned)i<13) { xdimgame = xdim2d = vesares[i][0]; ydimgame = ydim2d = vesares[i][1]; }
141
    }
142
    if (readconfig(fp, "xdim", val, VL) > 0) xdimgame = xdim2d = Batoi(val);
143
    if (readconfig(fp, "ydim", val, VL) > 0) ydimgame = xdim2d = Batoi(val);
8266 hendricks2 144
    if (readconfig(fp, "samplerate", val, VL) > 0) option[7] = (option[7] & (~(0x0f<<4))) |(Batoi(val) & 0x0f) << 4;
5327 hendricks2 145
    if (readconfig(fp, "music", val, VL) > 0) { if (Batoi(val) != 0) option[2] = 1; else option[2] = 0; }
146
    if (readconfig(fp, "mouse", val, VL) > 0) { if (Batoi(val) != 0) option[3] = 1; else option[3] = 0; }
147
    if (readconfig(fp, "bpp", val, VL) > 0) bppgame = Batoi(val);
7540 hendricks2 148
    if (readconfig(fp, "renderer", val, VL) > 0) { i = Batoi(val); videoSetRenderMode(i); }
5327 hendricks2 149
    if (readconfig(fp, "brightness", val, VL) > 0) brightness = min(max(Batoi(val),0),15);
150
 
151
    if (readconfig(fp, "maxrefreshfreq", val, VL) > 0) maxrefreshfreq = Batoi(val);
152
 
153
    option[0] = 1;  // vesa all the way...
154
    option[1] = 1;  // sound all the way...
155
    option[4] = 0;  // no multiplayer
156
    option[5] = 0;
157
 
158
    if (readconfig(fp, "keyforward", val, VL) > 0) keys[0] = Bstrtol(val, NULL, 16);
159
    if (readconfig(fp, "keybackward", val, VL) > 0) keys[1] = Bstrtol(val, NULL, 16);
160
    if (readconfig(fp, "keyturnleft", val, VL) > 0) keys[2] = Bstrtol(val, NULL, 16);
161
    if (readconfig(fp, "keyturnright", val, VL) > 0) keys[3] = Bstrtol(val, NULL, 16);
162
    if (readconfig(fp, "keyrun", val, VL) > 0) keys[4] = Bstrtol(val, NULL, 16);
163
    if (readconfig(fp, "keystrafe", val, VL) > 0) keys[5] = Bstrtol(val, NULL, 16);
164
    if (readconfig(fp, "keyfire", val, VL) > 0) keys[6] = Bstrtol(val, NULL, 16);
165
    if (readconfig(fp, "keyuse", val, VL) > 0) keys[7] = Bstrtol(val, NULL, 16);
166
    if (readconfig(fp, "keystandhigh", val, VL) > 0) keys[8] = Bstrtol(val, NULL, 16);
167
    if (readconfig(fp, "keystandlow", val, VL) > 0) keys[9] = Bstrtol(val, NULL, 16);
168
    if (readconfig(fp, "keylookup", val, VL) > 0) keys[10] = Bstrtol(val, NULL, 16);
169
    if (readconfig(fp, "keylookdown", val, VL) > 0) keys[11] = Bstrtol(val, NULL, 16);
170
    if (readconfig(fp, "keystrafeleft", val, VL) > 0) keys[12] = Bstrtol(val, NULL, 16);
171
    if (readconfig(fp, "keystraferight", val, VL) > 0) keys[13] = Bstrtol(val, NULL, 16);
172
    if (readconfig(fp, "key2dmode", val, VL) > 0) keys[14] = Bstrtol(val, NULL, 16);
173
    if (readconfig(fp, "keyviewcycle", val, VL) > 0) keys[15] = Bstrtol(val, NULL, 16);
174
    if (readconfig(fp, "key2dzoomin", val, VL) > 0) keys[16] = Bstrtol(val, NULL, 16);
175
    if (readconfig(fp, "key2dzoomout", val, VL) > 0) keys[17] = Bstrtol(val, NULL, 16);
176
    if (readconfig(fp, "keychat", val, VL) > 0) keys[18] = Bstrtol(val, NULL, 16);
177
    if (readconfig(fp, "keyconsole", val, VL) > 0) { keys[19] = Bstrtol(val, NULL, 16); OSD_CaptureKey(keys[19]); }
178
 
179
    if (readconfig(fp, "mousesensitivity", val, VL) > 0) msens = Bstrtod(val, NULL);
180
 
181
    Bfclose(fp);
182
 
183
    return 0;
184
}
185
 
5739 hendricks2 186
int Ken_writesetup(const char *fn)
5327 hendricks2 187
{
188
    BFILE *fp;
189
 
190
    fp = Bfopen(fn,"wt");
191
    if (!fp) return -1;
192
 
193
    Bfprintf(fp,
194
             "; Always show configuration options on startup\n"
195
             ";   0 - No\n"
196
             ";   1 - Yes\n"
197
             "forcesetup = %d\n"
198
             "\n"
199
             "; Video mode selection\n"
200
             ";   0 - Windowed\n"
201
             ";   1 - Fullscreen\n"
202
             "fullscreen = %d\n"
203
             "\n"
204
             "; Video resolution\n"
205
             "xdim = %d\n"
206
             "ydim = %d\n"
207
             "\n"
208
             "; 3D-mode colour depth\n"
209
             "bpp = %d\n"
210
             "\n"
211
#ifdef USE_OPENGL
212
             "; OpenGL mode options\n"
213
             "glusetexcache = %d\n"
214
             "\n"
215
#endif
216
             "; Maximum OpenGL mode refresh rate (Windows only, in Hertz)\n"
217
             "maxrefreshfreq = %d\n"
218
             "\n"
219
             "; 3D mode brightness setting\n"
220
             ";   0  - lowest\n"
221
             ";   15 - highest\n"
222
             "brightness = %d\n"
223
             "\n"
224
             "; Sound sample frequency\n"
225
             ";   0 - 6 KHz\n"
226
             ";   1 - 8 KHz\n"
227
             ";   2 - 11.025 KHz\n"
228
             ";   3 - 16 KHz\n"
229
             ";   4 - 22.05 KHz\n"
230
             ";   5 - 32 KHz\n"
231
             ";   6 - 44.1 KHz\n"
232
             "samplerate = %d\n"
233
             "\n"
234
             "; Music playback\n"
235
             ";   0 - Off\n"
236
             ";   1 - On\n"
237
             "music = %d\n"
238
             "\n"
239
             "; Enable mouse\n"
240
             ";   0 - No\n"
241
             ";   1 - Yes\n"
242
             "mouse = %d\n"
243
             "\n"
244
             "; Mouse sensitivity\n"
245
             "mousesensitivity = %g\n"
246
             "\n"
247
             "; Key Settings\n"
248
             ";  Here's a map of all the keyboard scan codes: NOTE: values are listed in hex!\n"
249
             "; +---------------------------------------------------------------------------------------------+\n"
250
             "; | 01   3B  3C  3D  3E   3F  40  41  42   43  44  57  58          46                           |\n"
251
             "; |ESC   F1  F2  F3  F4   F5  F6  F7  F8   F9 F10 F11 F12        SCROLL                         |\n"
252
             "; |                                                                                             |\n"
253
             "; |29  02  03  04  05  06  07  08  09  0A  0B  0C  0D   0E     D2  C7  C9      45  B5  37  4A   |\n"
254
             "; | ` '1' '2' '3' '4' '5' '6' '7' '8' '9' '0'  -   =  BACK    INS HOME PGUP  NUMLK KP/ KP* KP-  |\n"
255
             "; |                                                                                             |\n"
256
             "; | 0F  10  11  12  13  14  15  16  17  18  19  1A  1B  2B     D3  CF  D1      47  48  49  4E   |\n"
257
             "; |TAB  Q   W   E   R   T   Y   U   I   O   P   [   ]    \\    DEL END PGDN    KP7 KP8 KP9 KP+   |\n"
258
             "; |                                                                                             |\n"
259
             "; | 3A   1E  1F  20  21  22  23  24  25  26  27  28     1C                     4B  4C  4D       |\n"
260
             "; |CAPS  A   S   D   F   G   H   J   K   L   ;   '   ENTER                    KP4 KP5 KP6    9C |\n"
261
             "; |                                                                                      KPENTER|\n"
262
             "; |  2A    2C  2D  2E  2F  30  31  32  33  34  35    36            C8          4F  50  51       |\n"
263
             "; |LSHIFT  Z   X   C   V   B   N   M   ,   .   /   RSHIFT          UP         KP1 KP2 KP3       |\n"
264
             "; |                                                                                             |\n"
265
             "; | 1D     38              39                  B8     9D       CB  D0   CD      52    53        |\n"
266
             "; |LCTRL  LALT           SPACE                RALT   RCTRL   LEFT DOWN RIGHT    KP0    KP.      |\n"
267
             "; +---------------------------------------------------------------------------------------------+\n"
268
             "\n"
269
             "keyforward = %X\n"
270
             "keybackward = %X\n"
271
             "keyturnleft = %X\n"
272
             "keyturnright = %X\n"
273
             "keyrun = %X\n"
274
             "keystrafe = %X\n"
275
             "keyfire = %X\n"
276
             "keyuse = %X\n"
277
             "keystandhigh = %X\n"
278
             "keystandlow = %X\n"
279
             "keylookup = %X\n"
280
             "keylookdown = %X\n"
281
             "keystrafeleft = %X\n"
282
             "keystraferight = %X\n"
283
             "key2dmode = %X\n"
284
             "keyviewcycle = %X\n"
285
             "key2dzoomin = %X\n"
286
             "key2dzoomout = %X\n"
287
             "keychat = %X\n"
288
             "keyconsole = %X\n"
289
             "\n",
290
 
291
             forcesetup, fullscreen, xdimgame, ydimgame, bppgame,
292
#ifdef USE_OPENGL
293
             glusetexcache,
294
#endif
295
             maxrefreshfreq,
296
             brightness, option[7]>>4, option[2],
297
             option[3], msens,
298
             keys[0], keys[1], keys[2], keys[3], keys[4], keys[5],
299
             keys[6], keys[7], keys[8], keys[9], keys[10], keys[11],
300
             keys[12], keys[13], keys[14], keys[15], keys[16], keys[17],
301
             keys[18], keys[19]
302
             );
303
 
304
    Bfclose(fp);
305
 
306
    return 0;
307
}