]> Shamusworld >> Repos - stargem2/blob - src/settings.cpp
Moving to trunk...
[stargem2] / src / settings.cpp
1 //
2 // SETTINGS.CPP: Game configuration loading/saving support
3 //
4 // by James L. Hammons
5 // (C) 2005 Underground Software
6 //
7 // JLH = James L. Hammons <jlhamm@acm.org>
8 //
9 // WHO  WHEN        WHAT
10 // ---  ----------  ------------------------------------------------------------
11 // JLH  01/04/2006  Added changelog ;-)
12 //
13
14 #include "settings.h"
15
16 #include <stdlib.h>
17 #include <string>
18 #include "SDL.h"
19 #include "sdlemu_config.h"
20 #include "log.h"
21
22 using namespace std;
23
24 // Global variables
25
26 Settings settings;
27
28 // Private function prototypes
29
30 static void CheckForTrailingSlash(char * path);
31
32 //
33 // Load StarGem2's settings
34 //
35 void LoadSettings(void)
36 {
37         if (sdlemu_init_config("./stargem2.cfg") == 0           // CWD
38                 && sdlemu_init_config("~/stargem2.cfg") == 0    // Home
39                 && sdlemu_init_config("~/.stargem2/stargem2.cfg") == 0  // Home under .stargem2 directory
40                 && sdlemu_init_config("stargem2.cfg") == 0)             // Somewhere in the path
41                 WriteLog("Settings: Couldn't find configuration file. Using defaults...\n");
42
43         settings.useJoystick = sdlemu_getval_bool("useJoystick", false);
44         settings.joyport = sdlemu_getval_int("joyport", 0);
45         settings.hardwareTypeNTSC = sdlemu_getval_bool("hardwareTypeNTSC", true);
46         settings.frameSkip = sdlemu_getval_int("frameSkip", 0);
47         settings.fullscreen = sdlemu_getval_bool("fullscreen", false);
48         settings.useOpenGL = sdlemu_getval_bool("useOpenGL", true);
49         settings.glFilter = sdlemu_getval_int("glFilterType", 0);
50         settings.renderType = sdlemu_getval_int("renderType", 0);
51         settings.autoStateSaving = sdlemu_getval_bool("autoSaveState", true);
52
53         // Keybindings in order of U, D, L, R, C, B, A, Op, Pa, 0-9, #, *
54         settings.p1KeyBindings[0] = sdlemu_getval_int("p1k_up", SDLK_UP);
55         settings.p1KeyBindings[1] = sdlemu_getval_int("p1k_down", SDLK_DOWN);
56         settings.p1KeyBindings[2] = sdlemu_getval_int("p1k_left", SDLK_LEFT);
57         settings.p1KeyBindings[3] = sdlemu_getval_int("p1k_right", SDLK_RIGHT);
58         settings.p1KeyBindings[4] = sdlemu_getval_int("p1k_c", SDLK_z);
59         settings.p1KeyBindings[5] = sdlemu_getval_int("p1k_b", SDLK_x);
60         settings.p1KeyBindings[6] = sdlemu_getval_int("p1k_a", SDLK_c);
61         settings.p1KeyBindings[7] = sdlemu_getval_int("p1k_option", SDLK_QUOTE);
62         settings.p1KeyBindings[8] = sdlemu_getval_int("p1k_pause", SDLK_RETURN);
63         settings.p1KeyBindings[9] = sdlemu_getval_int("p1k_0", SDLK_KP0);
64         settings.p1KeyBindings[10] = sdlemu_getval_int("p1k_1", SDLK_KP1);
65         settings.p1KeyBindings[11] = sdlemu_getval_int("p1k_2", SDLK_KP2);
66         settings.p1KeyBindings[12] = sdlemu_getval_int("p1k_3", SDLK_KP3);
67         settings.p1KeyBindings[13] = sdlemu_getval_int("p1k_4", SDLK_KP4);
68         settings.p1KeyBindings[14] = sdlemu_getval_int("p1k_5", SDLK_KP5);
69         settings.p1KeyBindings[15] = sdlemu_getval_int("p1k_6", SDLK_KP6);
70         settings.p1KeyBindings[16] = sdlemu_getval_int("p1k_7", SDLK_KP7);
71         settings.p1KeyBindings[17] = sdlemu_getval_int("p1k_8", SDLK_KP8);
72         settings.p1KeyBindings[18] = sdlemu_getval_int("p1k_9", SDLK_KP9);
73         settings.p1KeyBindings[19] = sdlemu_getval_int("p1k_pound", SDLK_KP_DIVIDE);
74         settings.p1KeyBindings[20] = sdlemu_getval_int("p1k_star", SDLK_KP_MULTIPLY);
75
76         settings.p2KeyBindings[0] = sdlemu_getval_int("p2k_up", SDLK_UP);
77         settings.p2KeyBindings[1] = sdlemu_getval_int("p2k_down", SDLK_DOWN);
78         settings.p2KeyBindings[2] = sdlemu_getval_int("p2k_left", SDLK_LEFT);
79         settings.p2KeyBindings[3] = sdlemu_getval_int("p2k_right", SDLK_RIGHT);
80         settings.p2KeyBindings[4] = sdlemu_getval_int("p2k_c", SDLK_z);
81         settings.p2KeyBindings[5] = sdlemu_getval_int("p2k_b", SDLK_x);
82         settings.p2KeyBindings[6] = sdlemu_getval_int("p2k_a", SDLK_c);
83         settings.p2KeyBindings[7] = sdlemu_getval_int("p2k_option", SDLK_QUOTE);
84         settings.p2KeyBindings[8] = sdlemu_getval_int("p2k_pause", SDLK_RETURN);
85         settings.p2KeyBindings[9] = sdlemu_getval_int("p2k_0", SDLK_KP0);
86         settings.p2KeyBindings[10] = sdlemu_getval_int("p2k_1", SDLK_KP1);
87         settings.p2KeyBindings[11] = sdlemu_getval_int("p2k_2", SDLK_KP2);
88         settings.p2KeyBindings[12] = sdlemu_getval_int("p2k_3", SDLK_KP3);
89         settings.p2KeyBindings[13] = sdlemu_getval_int("p2k_4", SDLK_KP4);
90         settings.p2KeyBindings[14] = sdlemu_getval_int("p2k_5", SDLK_KP5);
91         settings.p2KeyBindings[15] = sdlemu_getval_int("p2k_6", SDLK_KP6);
92         settings.p2KeyBindings[16] = sdlemu_getval_int("p2k_7", SDLK_KP7);
93         settings.p2KeyBindings[17] = sdlemu_getval_int("p2k_8", SDLK_KP8);
94         settings.p2KeyBindings[18] = sdlemu_getval_int("p2k_9", SDLK_KP9);
95         settings.p2KeyBindings[19] = sdlemu_getval_int("p2k_pound", SDLK_KP_DIVIDE);
96         settings.p2KeyBindings[20] = sdlemu_getval_int("p2k_star", SDLK_KP_MULTIPLY);
97
98         strcpy(settings.BIOSPath, sdlemu_getval_string("BIOSROM", "./ROMs/"));
99         strcpy(settings.disksPath, sdlemu_getval_string("disks", "./disks/"));
100         strcpy(settings.diskImagePath1, sdlemu_getval_string("floppyImage1", "./disks/bt1_boot.dsk"));
101         strcpy(settings.diskImagePath2, sdlemu_getval_string("floppyImage2", "./disks/bt1_char.dsk"));
102         strcpy(settings.autoStatePath, sdlemu_getval_string("autoStateFilename", "./apple2auto.state"));
103         CheckForTrailingSlash(settings.disksPath);
104         CheckForTrailingSlash(settings.BIOSPath);
105 }
106
107 //
108 // Save StarGem2's settings
109 //
110 void SaveSettings(void)
111 {
112 }
113
114 //
115 // Check path for a trailing slash, and append if not present
116 //
117 static void CheckForTrailingSlash(char * path)
118 {
119         if (strlen(path) > 0)
120                 if (path[strlen(path) - 1] != '/')
121                         strcat(path, "/");      // NOTE: Possible buffer overflow
122 }