]> Shamusworld >> Repos - virtualjaguar/blob - src/settings.cpp
Sanity update for finding vj.cfg
[virtualjaguar] / src / settings.cpp
1 //
2 // SETTINGS.CPP: Virtual Jaguar configuration loading/saving support
3 //
4 // by James L. Hammons
5 //
6
7 #include <stdlib.h>
8 #include <string>
9 #include "SDL.h"
10 #include "sdlemu_config.h"
11 #include "log.h"
12 #include "settings.h"
13
14 using namespace std;
15
16 // Global variables
17
18 VJSettings vjs;
19
20 // Private function prototypes
21
22 void CheckForTrailingSlash(char * path);
23
24 //
25 // Load Virtual Jaguar's settings
26 //
27 void LoadVJSettings(void)
28 {
29         if (sdlemu_init_config("./vj.cfg") == 0                 // CWD
30                 && sdlemu_init_config("~/vj.cfg") == 0          // Home
31                 && sdlemu_init_config("~/.vj/vj.cfg") == 0      // Home under .vj directory
32                 && sdlemu_init_config("vj.cfg") == 0)           // Somewhere in the path
33                 WriteLog("Settings: Couldn't find VJ configuration file. Using defaults...\n");
34
35         vjs.useJoystick = sdlemu_getval_bool("useJoystick", false);
36         vjs.joyport = sdlemu_getval_int("joyport", 0);
37         vjs.hardwareTypeNTSC = sdlemu_getval_bool("hardwareTypeNTSC", true);
38         vjs.useJaguarBIOS = sdlemu_getval_bool("useJaguarBIOS", false);
39         vjs.DSPEnabled = sdlemu_getval_bool("DSPEnabled", false);
40         vjs.usePipelinedDSP = sdlemu_getval_bool("usePipelinedDSP", true);
41         vjs.fullscreen = sdlemu_getval_bool("fullscreen", false);
42         vjs.useOpenGL = sdlemu_getval_bool("useOpenGL", true);
43         vjs.glFilter = sdlemu_getval_int("glFilterType", 0);
44
45         // Keybindings in order of U, D, L, R, C, B, A, Op, Pa, 0-9, #, *
46         vjs.p1KeyBindings[0] = sdlemu_getval_int("p1k_up", SDLK_UP);
47         vjs.p1KeyBindings[1] = sdlemu_getval_int("p1k_down", SDLK_DOWN);
48         vjs.p1KeyBindings[2] = sdlemu_getval_int("p1k_left", SDLK_LEFT);
49         vjs.p1KeyBindings[3] = sdlemu_getval_int("p1k_right", SDLK_RIGHT);
50         vjs.p1KeyBindings[4] = sdlemu_getval_int("p1k_c", SDLK_z);
51         vjs.p1KeyBindings[5] = sdlemu_getval_int("p1k_b", SDLK_x);
52         vjs.p1KeyBindings[6] = sdlemu_getval_int("p1k_a", SDLK_c);
53         vjs.p1KeyBindings[7] = sdlemu_getval_int("p1k_option", SDLK_QUOTE);
54         vjs.p1KeyBindings[8] = sdlemu_getval_int("p1k_pause", SDLK_RETURN);
55         vjs.p1KeyBindings[9] = sdlemu_getval_int("p1k_0", SDLK_KP0);
56         vjs.p1KeyBindings[10] = sdlemu_getval_int("p1k_1", SDLK_KP1);
57         vjs.p1KeyBindings[11] = sdlemu_getval_int("p1k_2", SDLK_KP2);
58         vjs.p1KeyBindings[12] = sdlemu_getval_int("p1k_3", SDLK_KP3);
59         vjs.p1KeyBindings[13] = sdlemu_getval_int("p1k_4", SDLK_KP4);
60         vjs.p1KeyBindings[14] = sdlemu_getval_int("p1k_5", SDLK_KP5);
61         vjs.p1KeyBindings[15] = sdlemu_getval_int("p1k_6", SDLK_KP6);
62         vjs.p1KeyBindings[16] = sdlemu_getval_int("p1k_7", SDLK_KP7);
63         vjs.p1KeyBindings[17] = sdlemu_getval_int("p1k_8", SDLK_KP8);
64         vjs.p1KeyBindings[18] = sdlemu_getval_int("p1k_9", SDLK_KP9);
65         vjs.p1KeyBindings[19] = sdlemu_getval_int("p1k_pound", SDLK_KP_DIVIDE);
66         vjs.p1KeyBindings[20] = sdlemu_getval_int("p1k_star", SDLK_KP_MULTIPLY);
67
68         vjs.p2KeyBindings[0] = sdlemu_getval_int("p2k_up", SDLK_UP);
69         vjs.p2KeyBindings[1] = sdlemu_getval_int("p2k_down", SDLK_DOWN);
70         vjs.p2KeyBindings[2] = sdlemu_getval_int("p2k_left", SDLK_LEFT);
71         vjs.p2KeyBindings[3] = sdlemu_getval_int("p2k_right", SDLK_RIGHT);
72         vjs.p2KeyBindings[4] = sdlemu_getval_int("p2k_c", SDLK_z);
73         vjs.p2KeyBindings[5] = sdlemu_getval_int("p2k_b", SDLK_x);
74         vjs.p2KeyBindings[6] = sdlemu_getval_int("p2k_a", SDLK_c);
75         vjs.p2KeyBindings[7] = sdlemu_getval_int("p2k_option", SDLK_QUOTE);
76         vjs.p2KeyBindings[8] = sdlemu_getval_int("p2k_pause", SDLK_RETURN);
77         vjs.p2KeyBindings[9] = sdlemu_getval_int("p2k_0", SDLK_KP0);
78         vjs.p2KeyBindings[10] = sdlemu_getval_int("p2k_1", SDLK_KP1);
79         vjs.p2KeyBindings[11] = sdlemu_getval_int("p2k_2", SDLK_KP2);
80         vjs.p2KeyBindings[12] = sdlemu_getval_int("p2k_3", SDLK_KP3);
81         vjs.p2KeyBindings[13] = sdlemu_getval_int("p2k_4", SDLK_KP4);
82         vjs.p2KeyBindings[14] = sdlemu_getval_int("p2k_5", SDLK_KP5);
83         vjs.p2KeyBindings[15] = sdlemu_getval_int("p2k_6", SDLK_KP6);
84         vjs.p2KeyBindings[16] = sdlemu_getval_int("p2k_7", SDLK_KP7);
85         vjs.p2KeyBindings[17] = sdlemu_getval_int("p2k_8", SDLK_KP8);
86         vjs.p2KeyBindings[18] = sdlemu_getval_int("p2k_9", SDLK_KP9);
87         vjs.p2KeyBindings[19] = sdlemu_getval_int("p2k_pound", SDLK_KP_DIVIDE);
88         vjs.p2KeyBindings[20] = sdlemu_getval_int("p2k_star", SDLK_KP_MULTIPLY);
89
90         strcpy(vjs.jagBootPath, sdlemu_getval_string("JagBootROM", "./BIOS/jagboot.rom"));
91         strcpy(vjs.CDBootPath, sdlemu_getval_string("CDBootROM", "./BIOS/jagcd.rom"));
92         strcpy(vjs.EEPROMPath, sdlemu_getval_string("EEPROMs", "./EEPROMs"));
93         strcpy(vjs.ROMPath, sdlemu_getval_string("ROMs", "./ROMs"));
94         CheckForTrailingSlash(vjs.EEPROMPath);
95         CheckForTrailingSlash(vjs.ROMPath);
96
97         vjs.hardwareTypeAlpine = false; // No external setting for this yet...
98 }
99
100 //
101 // Save Virtual Jaguar's settings
102 //
103 void SaveVJSettings(void)
104 {
105 }
106
107 //
108 // Check path for a trailing slash, and append if not present
109 //
110 void CheckForTrailingSlash(char * path)
111 {
112         if (strlen(path) > 0)
113                 if (path[strlen(path) - 1] != '/')
114                         strcat(path, "/");      // NOTE: Possible buffer overflow
115 }