]> Shamusworld >> Repos - apple2/blob - src/settings.cpp
Added support for the Apple High Speed SCSI card.
[apple2] / src / settings.cpp
1 //
2 // SETTINGS.CPP: Game configuration loading/saving support
3 //
4 // by James Hammons
5 // (C) 2005 Underground Software
6 //
7 // JLH = James 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 <SDL2/SDL.h>
19 #include "sdlemu_config.h"
20 #include "log.h"
21 #include "video.h"
22
23 using namespace std;
24
25
26 // Global variables
27
28 Settings settings;
29
30
31 // Private function prototypes
32
33 static void CheckForTrailingSlash(char * path);
34
35
36 //
37 // Load Apple2's settings
38 //
39 void LoadSettings(void)
40 {
41         if (sdlemu_init_config("./apple2.cfg") == 0                     // CWD
42                 && sdlemu_init_config("~/apple2.cfg") == 0              // Home
43                 && sdlemu_init_config("~/.apple2/apple2.cfg") == 0      // Home under .apple2 directory
44                 && sdlemu_init_config("apple2.cfg") == 0)               // Somewhere in the path
45                 WriteLog("Settings: Couldn't find configuration file. Using defaults...\n");
46
47         settings.useJoystick = sdlemu_getval_bool("useJoystick", false);
48         settings.joyport = sdlemu_getval_int("joyport", 0);
49         settings.hardwareTypeNTSC = sdlemu_getval_bool("hardwareTypeNTSC", true);
50         settings.frameSkip = sdlemu_getval_int("frameSkip", 0);
51         settings.fullscreen = sdlemu_getval_bool("fullscreen", false);
52         settings.useOpenGL = sdlemu_getval_bool("useOpenGL", true);
53         settings.glFilter = sdlemu_getval_int("glFilterType", 0);
54         settings.renderType = sdlemu_getval_int("renderType", 0);
55         settings.autoStateSaving = sdlemu_getval_bool("autoSaveState", true);
56
57         settings.winX = sdlemu_getval_int("windowX", 250);
58         settings.winY = sdlemu_getval_int("windowY", 100);
59
60         // Keybindings in order of U, D, L, R, C, B, A, Op, Pa, 0-9, #, *
61         settings.p1KeyBindings[0] = sdlemu_getval_int("p1k_up", SDL_SCANCODE_UP);
62         settings.p1KeyBindings[1] = sdlemu_getval_int("p1k_down", SDL_SCANCODE_DOWN);
63         settings.p1KeyBindings[2] = sdlemu_getval_int("p1k_left", SDL_SCANCODE_LEFT);
64         settings.p1KeyBindings[3] = sdlemu_getval_int("p1k_right", SDL_SCANCODE_RIGHT);
65         settings.p1KeyBindings[4] = sdlemu_getval_int("p1k_c", SDL_SCANCODE_Z);
66         settings.p1KeyBindings[5] = sdlemu_getval_int("p1k_b", SDL_SCANCODE_X);
67         settings.p1KeyBindings[6] = sdlemu_getval_int("p1k_a", SDL_SCANCODE_C);
68         settings.p1KeyBindings[7] = sdlemu_getval_int("p1k_option", SDL_SCANCODE_APOSTROPHE);
69         settings.p1KeyBindings[8] = sdlemu_getval_int("p1k_pause", SDL_SCANCODE_RETURN);
70         settings.p1KeyBindings[9] = sdlemu_getval_int("p1k_0", SDL_SCANCODE_KP_0);
71         settings.p1KeyBindings[10] = sdlemu_getval_int("p1k_1", SDL_SCANCODE_KP_1);
72         settings.p1KeyBindings[11] = sdlemu_getval_int("p1k_2", SDL_SCANCODE_KP_2);
73         settings.p1KeyBindings[12] = sdlemu_getval_int("p1k_3", SDL_SCANCODE_KP_3);
74         settings.p1KeyBindings[13] = sdlemu_getval_int("p1k_4", SDL_SCANCODE_KP_4);
75         settings.p1KeyBindings[14] = sdlemu_getval_int("p1k_5", SDL_SCANCODE_KP_5);
76         settings.p1KeyBindings[15] = sdlemu_getval_int("p1k_6", SDL_SCANCODE_KP_6);
77         settings.p1KeyBindings[16] = sdlemu_getval_int("p1k_7", SDL_SCANCODE_KP_7);
78         settings.p1KeyBindings[17] = sdlemu_getval_int("p1k_8", SDL_SCANCODE_KP_8);
79         settings.p1KeyBindings[18] = sdlemu_getval_int("p1k_9", SDL_SCANCODE_KP_9);
80         settings.p1KeyBindings[19] = sdlemu_getval_int("p1k_pound", SDL_SCANCODE_KP_DIVIDE);
81         settings.p1KeyBindings[20] = sdlemu_getval_int("p1k_star", SDL_SCANCODE_KP_MULTIPLY);
82
83         settings.p2KeyBindings[0] = sdlemu_getval_int("p2k_up", SDL_SCANCODE_UP);
84         settings.p2KeyBindings[1] = sdlemu_getval_int("p2k_down", SDL_SCANCODE_DOWN);
85         settings.p2KeyBindings[2] = sdlemu_getval_int("p2k_left", SDL_SCANCODE_LEFT);
86         settings.p2KeyBindings[3] = sdlemu_getval_int("p2k_right", SDL_SCANCODE_RIGHT);
87         settings.p2KeyBindings[4] = sdlemu_getval_int("p2k_c", SDL_SCANCODE_Z);
88         settings.p2KeyBindings[5] = sdlemu_getval_int("p2k_b", SDL_SCANCODE_X);
89         settings.p2KeyBindings[6] = sdlemu_getval_int("p2k_a", SDL_SCANCODE_C);
90         settings.p2KeyBindings[7] = sdlemu_getval_int("p2k_option", SDL_SCANCODE_APOSTROPHE);
91         settings.p2KeyBindings[8] = sdlemu_getval_int("p2k_pause", SDL_SCANCODE_RETURN);
92         settings.p2KeyBindings[9] = sdlemu_getval_int("p2k_0", SDL_SCANCODE_KP_0);
93         settings.p2KeyBindings[10] = sdlemu_getval_int("p2k_1", SDL_SCANCODE_KP_1);
94         settings.p2KeyBindings[11] = sdlemu_getval_int("p2k_2", SDL_SCANCODE_KP_2);
95         settings.p2KeyBindings[12] = sdlemu_getval_int("p2k_3", SDL_SCANCODE_KP_3);
96         settings.p2KeyBindings[13] = sdlemu_getval_int("p2k_4", SDL_SCANCODE_KP_4);
97         settings.p2KeyBindings[14] = sdlemu_getval_int("p2k_5", SDL_SCANCODE_KP_5);
98         settings.p2KeyBindings[15] = sdlemu_getval_int("p2k_6", SDL_SCANCODE_KP_6);
99         settings.p2KeyBindings[16] = sdlemu_getval_int("p2k_7", SDL_SCANCODE_KP_7);
100         settings.p2KeyBindings[17] = sdlemu_getval_int("p2k_8", SDL_SCANCODE_KP_8);
101         settings.p2KeyBindings[18] = sdlemu_getval_int("p2k_9", SDL_SCANCODE_KP_9);
102         settings.p2KeyBindings[19] = sdlemu_getval_int("p2k_pound", SDL_SCANCODE_KP_DIVIDE);
103         settings.p2KeyBindings[20] = sdlemu_getval_int("p2k_star", SDL_SCANCODE_KP_MULTIPLY);
104
105         strcpy(settings.BIOSPath, sdlemu_getval_string("BIOSROM", "./ROMs/apple2e-enhanced.rom"));
106         strcpy(settings.disksPath, sdlemu_getval_string("disks", "./disks"));
107         strcpy(settings.hdPath, sdlemu_getval_string("harddrive", "./disks/Pitch-Dark-20180731.2mg"));
108         strcpy(settings.autoStatePath, sdlemu_getval_string("autoStateFilename", "./apple2auto.state"));
109         CheckForTrailingSlash(settings.disksPath);
110 }
111
112
113 //
114 // Save Apple2's settings
115 //
116 void SaveSettings(void)
117 {
118         SDL_GetWindowPosition(sdlWindow, &settings.winX, &settings.winY);
119 }
120
121
122 //
123 // Check path for a trailing slash, and append if not present
124 //
125 static void CheckForTrailingSlash(char * path)
126 {
127         if (strlen(path) > 0)
128                 if (path[strlen(path) - 1] != '/')
129                         strcat(path, "/");      // NOTE: Possible buffer overflow
130 }
131