|
|
1.1 root 1: /*
1.1.1.6 root 2: Hatari - configuration.c
3:
4: This file is distributed under the GNU Public License, version 2 or at
5: your option any later version. Read the file gpl.txt for details.
1.1 root 6:
7: Configuration File
8:
1.1.1.6 root 9: The configuration file is now stored in an ASCII format to allow the user
10: to edit the file manually.
1.1 root 11: */
1.1.1.14 root 12: const char Configuration_fileid[] = "Hatari configuration.c : " __DATE__ " " __TIME__;
1.1.1.10 root 13:
14: #include <SDL_keysym.h>
1.1 root 15:
16: #include "main.h"
17: #include "configuration.h"
1.1.1.9 root 18: #include "cfgopts.h"
1.1.1.8 root 19: #include "audio.h"
1.1.1.17 root 20: #include "sound.h"
1.1.1.5 root 21: #include "file.h"
1.1.1.9 root 22: #include "log.h"
23: #include "m68000.h"
1.1.1.12 root 24: #include "memorySnapShot.h"
25: #include "paths.h"
1.1.1.9 root 26: #include "screen.h"
27: #include "vdi.h"
28: #include "video.h"
1.1.1.17 root 29: #include "avi_record.h"
30: #include "clocks_timings.h"
1.1.1.6 root 31:
32:
33: CNF_PARAMS ConfigureParams; /* List of configuration for the emulator */
1.1.1.7 root 34: char sConfigFileName[FILENAME_MAX]; /* Stores the name of the configuration file */
1.1.1.6 root 35:
36:
1.1.1.9 root 37: /* Used to load/save logging options */
38: static const struct Config_Tag configs_Log[] =
39: {
40: { "sLogFileName", String_Tag, ConfigureParams.Log.sLogFileName },
1.1.1.13 root 41: { "sTraceFileName", String_Tag, ConfigureParams.Log.sTraceFileName },
1.1.1.9 root 42: { "nTextLogLevel", Int_Tag, &ConfigureParams.Log.nTextLogLevel },
43: { "nAlertDlgLogLevel", Int_Tag, &ConfigureParams.Log.nAlertDlgLogLevel },
1.1.1.12 root 44: { "bConfirmQuit", Bool_Tag, &ConfigureParams.Log.bConfirmQuit },
1.1.1.9 root 45: { NULL , Error_Tag, NULL }
46: };
47:
1.1.1.16 root 48: /* Used to load/save debugger options */
49: static const struct Config_Tag configs_Debugger[] =
50: {
51: { "nNumberBase", Int_Tag, &ConfigureParams.Debugger.nNumberBase },
52: { "nDisasmLines", Int_Tag, &ConfigureParams.Debugger.nDisasmLines },
53: { "nMemdumpLines", Int_Tag, &ConfigureParams.Debugger.nMemdumpLines },
54: { NULL , Error_Tag, NULL }
55: };
1.1.1.9 root 56:
1.1.1.6 root 57: /* Used to load/save screen options */
1.1.1.9 root 58: static const struct Config_Tag configs_Screen[] =
1.1.1.6 root 59: {
1.1.1.13 root 60: { "nMonitorType", Int_Tag, &ConfigureParams.Screen.nMonitorType },
61: { "nFrameSkips", Int_Tag, &ConfigureParams.Screen.nFrameSkips },
1.1.1.9 root 62: { "bFullScreen", Bool_Tag, &ConfigureParams.Screen.bFullScreen },
1.1.1.17 root 63: { "bKeepResolution", Bool_Tag, &ConfigureParams.Screen.bKeepResolution },
1.1.1.18 root 64: { "bKeepResolutionST", Bool_Tag, &ConfigureParams.Screen.bKeepResolutionST },
1.1.1.9 root 65: { "bAllowOverscan", Bool_Tag, &ConfigureParams.Screen.bAllowOverscan },
1.1.1.12 root 66: { "nSpec512Threshold", Int_Tag, &ConfigureParams.Screen.nSpec512Threshold },
67: { "nForceBpp", Int_Tag, &ConfigureParams.Screen.nForceBpp },
1.1.1.16 root 68: { "bAspectCorrect", Bool_Tag, &ConfigureParams.Screen.bAspectCorrect },
1.1.1.9 root 69: { "bUseExtVdiResolutions", Bool_Tag, &ConfigureParams.Screen.bUseExtVdiResolutions },
1.1.1.12 root 70: { "nVdiWidth", Int_Tag, &ConfigureParams.Screen.nVdiWidth },
71: { "nVdiHeight", Int_Tag, &ConfigureParams.Screen.nVdiHeight },
1.1.1.9 root 72: { "nVdiColors", Int_Tag, &ConfigureParams.Screen.nVdiColors },
1.1.1.13 root 73: { "bShowStatusbar", Bool_Tag, &ConfigureParams.Screen.bShowStatusbar },
74: { "bShowDriveLed", Bool_Tag, &ConfigureParams.Screen.bShowDriveLed },
1.1.1.17 root 75: { "bCrop", Bool_Tag, &ConfigureParams.Screen.bCrop },
1.1.1.18 root 76: { "bForceMax", Bool_Tag, &ConfigureParams.Screen.bForceMax },
1.1.1.16 root 77: { "nMaxWidth", Int_Tag, &ConfigureParams.Screen.nMaxWidth },
78: { "nMaxHeight", Int_Tag, &ConfigureParams.Screen.nMaxHeight },
1.1.1.9 root 79: { NULL , Error_Tag, NULL }
1.1.1.6 root 80: };
81:
1.1.1.10 root 82: /* Used to load/save joystick 0 options */
1.1.1.9 root 83: static const struct Config_Tag configs_Joystick0[] =
1.1.1.6 root 84: {
1.1.1.10 root 85: { "nJoystickMode", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nJoystickMode },
1.1.1.9 root 86: { "bEnableAutoFire", Bool_Tag, &ConfigureParams.Joysticks.Joy[0].bEnableAutoFire },
1.1.1.15 root 87: { "bEnableJumpOnFire2", Bool_Tag, &ConfigureParams.Joysticks.Joy[0].bEnableJumpOnFire2 },
1.1.1.10 root 88: { "nJoyId", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nJoyId },
89: { "nKeyCodeUp", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeyCodeUp },
90: { "nKeyCodeDown", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeyCodeDown },
91: { "nKeyCodeLeft", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeyCodeLeft },
92: { "nKeyCodeRight", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeyCodeRight },
93: { "nKeyCodeFire", Int_Tag, &ConfigureParams.Joysticks.Joy[0].nKeyCodeFire },
1.1.1.9 root 94: { NULL , Error_Tag, NULL }
1.1.1.6 root 95: };
1.1.1.10 root 96:
97: /* Used to load/save joystick 1 options */
1.1.1.9 root 98: static const struct Config_Tag configs_Joystick1[] =
1.1.1.6 root 99: {
1.1.1.10 root 100: { "nJoystickMode", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nJoystickMode },
1.1.1.9 root 101: { "bEnableAutoFire", Bool_Tag, &ConfigureParams.Joysticks.Joy[1].bEnableAutoFire },
1.1.1.15 root 102: { "bEnableJumpOnFire2", Bool_Tag, &ConfigureParams.Joysticks.Joy[1].bEnableJumpOnFire2 },
1.1.1.10 root 103: { "nJoyId", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nJoyId },
104: { "nKeyCodeUp", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeyCodeUp },
105: { "nKeyCodeDown", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeyCodeDown },
106: { "nKeyCodeLeft", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeyCodeLeft },
107: { "nKeyCodeRight", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeyCodeRight },
108: { "nKeyCodeFire", Int_Tag, &ConfigureParams.Joysticks.Joy[1].nKeyCodeFire },
109: { NULL , Error_Tag, NULL }
110: };
111:
112: /* Used to load/save joystick 2 options */
113: static const struct Config_Tag configs_Joystick2[] =
114: {
115: { "nJoystickMode", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nJoystickMode },
116: { "bEnableAutoFire", Bool_Tag, &ConfigureParams.Joysticks.Joy[2].bEnableAutoFire },
1.1.1.15 root 117: { "bEnableJumpOnFire2", Bool_Tag, &ConfigureParams.Joysticks.Joy[2].bEnableJumpOnFire2 },
1.1.1.10 root 118: { "nJoyId", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nJoyId },
119: { "nKeyCodeUp", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeyCodeUp },
120: { "nKeyCodeDown", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeyCodeDown },
121: { "nKeyCodeLeft", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeyCodeLeft },
122: { "nKeyCodeRight", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeyCodeRight },
123: { "nKeyCodeFire", Int_Tag, &ConfigureParams.Joysticks.Joy[2].nKeyCodeFire },
124: { NULL , Error_Tag, NULL }
125: };
126:
127: /* Used to load/save joystick 3 options */
128: static const struct Config_Tag configs_Joystick3[] =
129: {
130: { "nJoystickMode", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nJoystickMode },
131: { "bEnableAutoFire", Bool_Tag, &ConfigureParams.Joysticks.Joy[3].bEnableAutoFire },
1.1.1.15 root 132: { "bEnableJumpOnFire2", Bool_Tag, &ConfigureParams.Joysticks.Joy[3].bEnableJumpOnFire2 },
1.1.1.10 root 133: { "nJoyId", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nJoyId },
134: { "nKeyCodeUp", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeyCodeUp },
135: { "nKeyCodeDown", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeyCodeDown },
136: { "nKeyCodeLeft", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeyCodeLeft },
137: { "nKeyCodeRight", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeyCodeRight },
138: { "nKeyCodeFire", Int_Tag, &ConfigureParams.Joysticks.Joy[3].nKeyCodeFire },
139: { NULL , Error_Tag, NULL }
140: };
141:
142: /* Used to load/save joystick 4 options */
143: static const struct Config_Tag configs_Joystick4[] =
144: {
145: { "nJoystickMode", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nJoystickMode },
146: { "bEnableAutoFire", Bool_Tag, &ConfigureParams.Joysticks.Joy[4].bEnableAutoFire },
1.1.1.15 root 147: { "bEnableJumpOnFire2", Bool_Tag, &ConfigureParams.Joysticks.Joy[4].bEnableJumpOnFire2 },
1.1.1.10 root 148: { "nJoyId", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nJoyId },
149: { "nKeyCodeUp", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeyCodeUp },
150: { "nKeyCodeDown", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeyCodeDown },
151: { "nKeyCodeLeft", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeyCodeLeft },
152: { "nKeyCodeRight", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeyCodeRight },
153: { "nKeyCodeFire", Int_Tag, &ConfigureParams.Joysticks.Joy[4].nKeyCodeFire },
154: { NULL , Error_Tag, NULL }
155: };
156:
157: /* Used to load/save joystick 5 options */
158: static const struct Config_Tag configs_Joystick5[] =
159: {
160: { "nJoystickMode", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nJoystickMode },
161: { "bEnableAutoFire", Bool_Tag, &ConfigureParams.Joysticks.Joy[5].bEnableAutoFire },
1.1.1.15 root 162: { "bEnableJumpOnFire2", Bool_Tag, &ConfigureParams.Joysticks.Joy[5].bEnableJumpOnFire2 },
1.1.1.10 root 163: { "nJoyId", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nJoyId },
164: { "nKeyCodeUp", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeyCodeUp },
165: { "nKeyCodeDown", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeyCodeDown },
166: { "nKeyCodeLeft", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeyCodeLeft },
167: { "nKeyCodeRight", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeyCodeRight },
168: { "nKeyCodeFire", Int_Tag, &ConfigureParams.Joysticks.Joy[5].nKeyCodeFire },
1.1.1.9 root 169: { NULL , Error_Tag, NULL }
1.1.1.6 root 170: };
1.1.1.5 root 171:
1.1.1.6 root 172: /* Used to load/save keyboard options */
1.1.1.9 root 173: static const struct Config_Tag configs_Keyboard[] =
1.1.1.6 root 174: {
1.1.1.9 root 175: { "bDisableKeyRepeat", Bool_Tag, &ConfigureParams.Keyboard.bDisableKeyRepeat },
176: { "nKeymapType", Int_Tag, &ConfigureParams.Keyboard.nKeymapType },
177: { "szMappingFileName", String_Tag, ConfigureParams.Keyboard.szMappingFileName },
178: { NULL , Error_Tag, NULL }
1.1.1.6 root 179: };
1.1 root 180:
1.1.1.11 root 181: /* Used to load/save shortcut key bindings with modifiers options */
182: static const struct Config_Tag configs_ShortCutWithMod[] =
183: {
184: { "keyOptions", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_OPTIONS] },
185: { "keyFullScreen", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_FULLSCREEN] },
1.1.1.16 root 186: { "keyMouseMode", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_MOUSEGRAB] },
1.1.1.11 root 187: { "keyColdReset", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_COLDRESET] },
188: { "keyWarmReset", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_WARMRESET] },
189: { "keyScreenShot", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_SCREENSHOT] },
190: { "keyBossKey", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_BOSSKEY] },
191: { "keyCursorEmu", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_CURSOREMU] },
1.1.1.13 root 192: { "keyFastForward",Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_FASTFORWARD] },
1.1.1.11 root 193: { "keyRecAnim", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_RECANIM] },
194: { "keyRecSound", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_RECSOUND] },
195: { "keySound", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_SOUND] },
1.1.1.15 root 196: { "keyPause", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_PAUSE] },
197: { "keyDebugger", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_DEBUG] },
1.1.1.11 root 198: { "keyQuit", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_QUIT] },
1.1.1.12 root 199: { "keyLoadMem", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_LOADMEM] },
200: { "keySaveMem", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_SAVEMEM] },
1.1.1.13 root 201: { "keyInsertDiskA",Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_INSERTDISKA] },
1.1.1.11 root 202: { NULL , Error_Tag, NULL }
203: };
204:
205: /* Used to load/save shortcut key bindings without modifiers options */
206: static const struct Config_Tag configs_ShortCutWithoutMod[] =
207: {
208: { "keyOptions", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_OPTIONS] },
209: { "keyFullScreen", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_FULLSCREEN] },
1.1.1.16 root 210: { "keyMouseMode", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_MOUSEGRAB] },
1.1.1.11 root 211: { "keyColdReset", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_COLDRESET] },
212: { "keyWarmReset", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_WARMRESET] },
213: { "keyScreenShot", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_SCREENSHOT] },
214: { "keyBossKey", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_BOSSKEY] },
215: { "keyCursorEmu", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_CURSOREMU] },
1.1.1.13 root 216: { "keyFastForward",Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_FASTFORWARD] },
1.1.1.11 root 217: { "keyRecAnim", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_RECANIM] },
218: { "keyRecSound", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_RECSOUND] },
219: { "keySound", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_SOUND] },
1.1.1.15 root 220: { "keyPause", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_PAUSE] },
221: { "keyDebugger", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_DEBUG] },
1.1.1.11 root 222: { "keyQuit", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_QUIT] },
1.1.1.12 root 223: { "keyLoadMem", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_LOADMEM] },
224: { "keySaveMem", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_SAVEMEM] },
1.1.1.13 root 225: { "keyInsertDiskA",Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_INSERTDISKA] },
1.1.1.11 root 226: { NULL , Error_Tag, NULL }
227: };
228:
229:
1.1.1.6 root 230: /* Used to load/save sound options */
1.1.1.9 root 231: static const struct Config_Tag configs_Sound[] =
1.1.1.6 root 232: {
1.1.1.17 root 233: { "bEnableMicrophone", Bool_Tag, &ConfigureParams.Sound.bEnableMicrophone },
1.1.1.9 root 234: { "bEnableSound", Bool_Tag, &ConfigureParams.Sound.bEnableSound },
1.1.1.19! root 235: { "bEnableSoundSync", Bool_Tag, &ConfigureParams.Sound.bEnableSoundSync },
1.1.1.15 root 236: { "nPlaybackFreq", Int_Tag, &ConfigureParams.Sound.nPlaybackFreq },
1.1.1.16 root 237: { "nSdlAudioBufferSize", Int_Tag, &ConfigureParams.Sound.SdlAudioBufferSize },
1.1.1.17 root 238: { "szYMCaptureFileName", String_Tag, ConfigureParams.Sound.szYMCaptureFileName },
239: { "YmVolumeMixing", Int_Tag, &ConfigureParams.Sound.YmVolumeMixing },
1.1.1.9 root 240: { NULL , Error_Tag, NULL }
1.1.1.6 root 241: };
242:
243: /* Used to load/save memory options */
1.1.1.9 root 244: static const struct Config_Tag configs_Memory[] =
1.1.1.6 root 245: {
1.1.1.9 root 246: { "nMemorySize", Int_Tag, &ConfigureParams.Memory.nMemorySize },
1.1.1.12 root 247: { "bAutoSave", Bool_Tag, &ConfigureParams.Memory.bAutoSave },
1.1.1.9 root 248: { "szMemoryCaptureFileName", String_Tag, ConfigureParams.Memory.szMemoryCaptureFileName },
1.1.1.12 root 249: { "szAutoSaveFileName", String_Tag, ConfigureParams.Memory.szAutoSaveFileName },
1.1.1.9 root 250: { NULL , Error_Tag, NULL }
1.1.1.6 root 251: };
252:
253:
254: /* Used to load/save floppy options */
1.1.1.9 root 255: static const struct Config_Tag configs_Floppy[] =
1.1.1.6 root 256: {
1.1.1.10 root 257: { "bAutoInsertDiskB", Bool_Tag, &ConfigureParams.DiskImage.bAutoInsertDiskB },
1.1.1.18 root 258: { "FastFloppy", Bool_Tag, &ConfigureParams.DiskImage.FastFloppy },
1.1.1.10 root 259: { "nWriteProtection", Int_Tag, &ConfigureParams.DiskImage.nWriteProtection },
1.1.1.13 root 260: { "szDiskAZipPath", String_Tag, ConfigureParams.DiskImage.szDiskZipPath[0] },
261: { "szDiskAFileName", String_Tag, ConfigureParams.DiskImage.szDiskFileName[0] },
262: { "szDiskBZipPath", String_Tag, ConfigureParams.DiskImage.szDiskZipPath[1] },
263: { "szDiskBFileName", String_Tag, ConfigureParams.DiskImage.szDiskFileName[1] },
1.1.1.10 root 264: { "szDiskImageDirectory", String_Tag, ConfigureParams.DiskImage.szDiskImageDirectory },
265: { NULL , Error_Tag, NULL }
266: };
267:
1.1.1.6 root 268: /* Used to load/save HD options */
1.1.1.10 root 269: static const struct Config_Tag configs_HardDisk[] =
1.1.1.6 root 270: {
1.1.1.10 root 271: { "bBootFromHardDisk", Bool_Tag, &ConfigureParams.HardDisk.bBootFromHardDisk },
272: { "bUseHardDiskDirectory", Bool_Tag, &ConfigureParams.HardDisk.bUseHardDiskDirectories },
273: { "szHardDiskDirectory", String_Tag, ConfigureParams.HardDisk.szHardDiskDirectories[DRIVE_C] },
1.1.1.16 root 274: { "nWriteProtection", Int_Tag, &ConfigureParams.HardDisk.nWriteProtection },
1.1.1.10 root 275: { "bUseHardDiskImage", Bool_Tag, &ConfigureParams.HardDisk.bUseHardDiskImage },
276: { "szHardDiskImage", String_Tag, ConfigureParams.HardDisk.szHardDiskImage },
1.1.1.16 root 277: { "bUseIdeMasterHardDiskImage", Bool_Tag, &ConfigureParams.HardDisk.bUseIdeMasterHardDiskImage },
278: { "bUseIdeSlaveHardDiskImage", Bool_Tag, &ConfigureParams.HardDisk.bUseIdeSlaveHardDiskImage },
279: { "szIdeMasterHardDiskImage", String_Tag, ConfigureParams.HardDisk.szIdeMasterHardDiskImage },
280: { "szIdeSlaveHardDiskImage", String_Tag, ConfigureParams.HardDisk.szIdeSlaveHardDiskImage },
1.1.1.10 root 281: { NULL , Error_Tag, NULL }
282: };
283:
1.1.1.8 root 284: /* Used to load/save ROM options */
1.1.1.9 root 285: static const struct Config_Tag configs_Rom[] =
1.1.1.6 root 286: {
1.1.1.9 root 287: { "szTosImageFileName", String_Tag, ConfigureParams.Rom.szTosImageFileName },
1.1.1.18 root 288: { "bPatchTos", Bool_Tag, &ConfigureParams.Rom.bPatchTos },
1.1.1.9 root 289: { "szCartridgeImageFileName", String_Tag, ConfigureParams.Rom.szCartridgeImageFileName },
290: { NULL , Error_Tag, NULL }
1.1.1.6 root 291: };
292:
293: /* Used to load/save RS232 options */
1.1.1.9 root 294: static const struct Config_Tag configs_Rs232[] =
1.1.1.6 root 295: {
1.1.1.9 root 296: { "bEnableRS232", Bool_Tag, &ConfigureParams.RS232.bEnableRS232 },
297: { "szOutFileName", String_Tag, ConfigureParams.RS232.szOutFileName },
298: { "szInFileName", String_Tag, ConfigureParams.RS232.szInFileName },
299: { NULL , Error_Tag, NULL }
1.1.1.6 root 300: };
301:
302: /* Used to load/save printer options */
1.1.1.9 root 303: static const struct Config_Tag configs_Printer[] =
1.1.1.6 root 304: {
1.1.1.9 root 305: { "bEnablePrinting", Bool_Tag, &ConfigureParams.Printer.bEnablePrinting },
306: { "szPrintToFileName", String_Tag, ConfigureParams.Printer.szPrintToFileName },
307: { NULL , Error_Tag, NULL }
1.1.1.6 root 308: };
309:
1.1.1.7 root 310: /* Used to load/save MIDI options */
1.1.1.9 root 311: static const struct Config_Tag configs_Midi[] =
1.1.1.7 root 312: {
1.1.1.9 root 313: { "bEnableMidi", Bool_Tag, &ConfigureParams.Midi.bEnableMidi },
1.1.1.14 root 314: { "sMidiInFileName", String_Tag, ConfigureParams.Midi.sMidiInFileName },
315: { "sMidiOutFileName", String_Tag, ConfigureParams.Midi.sMidiOutFileName },
1.1.1.9 root 316: { NULL , Error_Tag, NULL }
1.1.1.7 root 317: };
318:
1.1.1.6 root 319: /* Used to load/save system options */
1.1.1.9 root 320: static const struct Config_Tag configs_System[] =
1.1.1.6 root 321: {
1.1.1.9 root 322: { "nCpuLevel", Int_Tag, &ConfigureParams.System.nCpuLevel },
323: { "nCpuFreq", Int_Tag, &ConfigureParams.System.nCpuFreq },
324: { "bCompatibleCpu", Bool_Tag, &ConfigureParams.System.bCompatibleCpu },
325: { "nMachineType", Int_Tag, &ConfigureParams.System.nMachineType },
326: { "bBlitter", Bool_Tag, &ConfigureParams.System.bBlitter },
1.1.1.12 root 327: { "nDSPType", Int_Tag, &ConfigureParams.System.nDSPType },
1.1.1.9 root 328: { "bRealTimeClock", Bool_Tag, &ConfigureParams.System.bRealTimeClock },
329: { "bPatchTimerD", Bool_Tag, &ConfigureParams.System.bPatchTimerD },
1.1.1.18 root 330: { "bFastBoot", Bool_Tag, &ConfigureParams.System.bFastBoot },
1.1.1.13 root 331: { "bFastForward", Bool_Tag, &ConfigureParams.System.bFastForward },
1.1.1.17 root 332:
333: #if ENABLE_WINUAE_CPU
334: { "bAddressSpace24", Bool_Tag, &ConfigureParams.System.bAddressSpace24 },
335: { "bCycleExactCpu", Bool_Tag, &ConfigureParams.System.bCycleExactCpu },
336: { "n_FPUType", Int_Tag, &ConfigureParams.System.n_FPUType },
337: { "bCompatibleFPU", Bool_Tag, &ConfigureParams.System.bCompatibleFPU },
338: { "bMMU", Bool_Tag, &ConfigureParams.System.bMMU },
339: #endif
340: { NULL , Error_Tag, NULL }
341: };
342:
343: /* Used to load/save video options */
344: static const struct Config_Tag configs_Video[] =
345: {
346: { "AviRecordVcodec", Int_Tag, &ConfigureParams.Video.AviRecordVcodec },
347: { "AviRecordFps", Int_Tag, &ConfigureParams.Video.AviRecordFps },
348: { "AviRecordFile", String_Tag, ConfigureParams.Video.AviRecordFile },
1.1.1.9 root 349: { NULL , Error_Tag, NULL }
1.1.1.6 root 350: };
1.1 root 351:
352:
353: /*-----------------------------------------------------------------------*/
1.1.1.12 root 354: /**
355: * Set default configuration values.
356: */
1.1.1.2 root 357: void Configuration_SetDefault(void)
358: {
1.1.1.9 root 359: int i;
1.1.1.12 root 360: const char *psHomeDir;
361: const char *psWorkingDir;
362:
363: psHomeDir = Paths_GetHatariHome();
364: psWorkingDir = Paths_GetWorkingDir();
1.1.1.4 root 365:
1.1.1.9 root 366: /* Clear parameters */
367: memset(&ConfigureParams, 0, sizeof(CNF_PARAMS));
368:
1.1.1.16 root 369: /* Set defaults for logging and tracing */
1.1.1.9 root 370: strcpy(ConfigureParams.Log.sLogFileName, "stderr");
1.1.1.13 root 371: strcpy(ConfigureParams.Log.sTraceFileName, "stderr");
372: ConfigureParams.Log.nTextLogLevel = LOG_TODO;
373: ConfigureParams.Log.nAlertDlgLogLevel = LOG_ERROR;
1.1.1.15 root 374: ConfigureParams.Log.bConfirmQuit = true;
1.1.1.9 root 375:
1.1.1.16 root 376: /* Set defaults for debugger */
377: ConfigureParams.Debugger.nNumberBase = 10;
378: ConfigureParams.Debugger.nDisasmLines = 8;
379: ConfigureParams.Debugger.nMemdumpLines = 8;
380:
1.1.1.10 root 381: /* Set defaults for floppy disk images */
1.1.1.15 root 382: ConfigureParams.DiskImage.bAutoInsertDiskB = true;
1.1.1.18 root 383: ConfigureParams.DiskImage.FastFloppy = false;
1.1.1.10 root 384: ConfigureParams.DiskImage.nWriteProtection = WRITEPROT_OFF;
1.1.1.13 root 385: for (i = 0; i < 2; i++)
386: {
387: ConfigureParams.DiskImage.szDiskZipPath[i][0] = '\0';
388: ConfigureParams.DiskImage.szDiskFileName[i][0] = '\0';
389: }
1.1.1.12 root 390: strcpy(ConfigureParams.DiskImage.szDiskImageDirectory, psWorkingDir);
1.1.1.10 root 391: File_AddSlashToEndFileName(ConfigureParams.DiskImage.szDiskImageDirectory);
392:
393: /* Set defaults for hard disks */
1.1.1.15 root 394: ConfigureParams.HardDisk.bBootFromHardDisk = false;
1.1.1.16 root 395: ConfigureParams.HardDisk.nWriteProtection = WRITEPROT_OFF;
1.1.1.10 root 396: ConfigureParams.HardDisk.nHardDiskDir = DRIVE_C;
1.1.1.15 root 397: ConfigureParams.HardDisk.bUseHardDiskDirectories = false;
1.1.1.13 root 398: for (i = 0; i < MAX_HARDDRIVES; i++)
1.1.1.9 root 399: {
1.1.1.12 root 400: strcpy(ConfigureParams.HardDisk.szHardDiskDirectories[i], psWorkingDir);
1.1.1.10 root 401: File_CleanFileName(ConfigureParams.HardDisk.szHardDiskDirectories[i]);
1.1.1.9 root 402: }
1.1.1.15 root 403: ConfigureParams.HardDisk.bUseHardDiskImage = false;
1.1.1.12 root 404: strcpy(ConfigureParams.HardDisk.szHardDiskImage, psWorkingDir);
1.1.1.16 root 405: ConfigureParams.HardDisk.bUseIdeMasterHardDiskImage = false;
406: strcpy(ConfigureParams.HardDisk.szIdeMasterHardDiskImage, psWorkingDir);
407: ConfigureParams.HardDisk.bUseIdeSlaveHardDiskImage = false;
408: strcpy(ConfigureParams.HardDisk.szIdeSlaveHardDiskImage, psWorkingDir);
1.1.1.9 root 409:
410: /* Set defaults for Joysticks */
1.1.1.11 root 411: for (i = 0; i < JOYSTICK_COUNT; i++)
1.1.1.9 root 412: {
1.1.1.10 root 413: ConfigureParams.Joysticks.Joy[i].nJoystickMode = JOYSTICK_DISABLED;
1.1.1.15 root 414: ConfigureParams.Joysticks.Joy[i].bEnableAutoFire = false;
415: ConfigureParams.Joysticks.Joy[i].bEnableJumpOnFire2 = false;
1.1.1.10 root 416: ConfigureParams.Joysticks.Joy[i].nJoyId = i;
417: ConfigureParams.Joysticks.Joy[i].nKeyCodeUp = SDLK_UP;
418: ConfigureParams.Joysticks.Joy[i].nKeyCodeDown = SDLK_DOWN;
419: ConfigureParams.Joysticks.Joy[i].nKeyCodeLeft = SDLK_LEFT;
420: ConfigureParams.Joysticks.Joy[i].nKeyCodeRight = SDLK_RIGHT;
421: ConfigureParams.Joysticks.Joy[i].nKeyCodeFire = SDLK_RCTRL;
1.1.1.9 root 422: }
1.1.1.10 root 423: ConfigureParams.Joysticks.Joy[1].nJoyId = 0; /* ST Joystick #1 is default joystick */
424: ConfigureParams.Joysticks.Joy[0].nJoyId = 1;
1.1.1.13 root 425: ConfigureParams.Joysticks.Joy[1].nJoystickMode = JOYSTICK_REALSTICK;
1.1.1.9 root 426:
427: /* Set defaults for Keyboard */
1.1.1.15 root 428: ConfigureParams.Keyboard.bDisableKeyRepeat = false;
1.1.1.9 root 429: ConfigureParams.Keyboard.nKeymapType = KEYMAP_SYMBOLIC;
430: strcpy(ConfigureParams.Keyboard.szMappingFileName, "");
1.1.1.11 root 431:
1.1.1.12 root 432: /* Set defaults for Shortcuts */
433: ConfigureParams.Shortcut.withoutModifier[SHORTCUT_OPTIONS] = SDLK_F12;
434: ConfigureParams.Shortcut.withoutModifier[SHORTCUT_FULLSCREEN] = SDLK_F11;
1.1.1.13 root 435: ConfigureParams.Shortcut.withoutModifier[SHORTCUT_PAUSE] = SDLK_PAUSE;
1.1.1.11 root 436:
1.1.1.15 root 437: ConfigureParams.Shortcut.withModifier[SHORTCUT_DEBUG] = SDLK_PAUSE;
1.1.1.12 root 438: ConfigureParams.Shortcut.withModifier[SHORTCUT_OPTIONS] = SDLK_o;
439: ConfigureParams.Shortcut.withModifier[SHORTCUT_FULLSCREEN] = SDLK_f;
1.1.1.16 root 440: ConfigureParams.Shortcut.withModifier[SHORTCUT_MOUSEGRAB] = SDLK_m;
1.1.1.12 root 441: ConfigureParams.Shortcut.withModifier[SHORTCUT_COLDRESET] = SDLK_c;
442: ConfigureParams.Shortcut.withModifier[SHORTCUT_WARMRESET] = SDLK_r;
443: ConfigureParams.Shortcut.withModifier[SHORTCUT_SCREENSHOT] = SDLK_g;
444: ConfigureParams.Shortcut.withModifier[SHORTCUT_BOSSKEY] = SDLK_i;
445: ConfigureParams.Shortcut.withModifier[SHORTCUT_CURSOREMU] = SDLK_j;
1.1.1.13 root 446: ConfigureParams.Shortcut.withModifier[SHORTCUT_FASTFORWARD] = SDLK_x;
1.1.1.12 root 447: ConfigureParams.Shortcut.withModifier[SHORTCUT_RECANIM] = SDLK_a;
448: ConfigureParams.Shortcut.withModifier[SHORTCUT_RECSOUND] = SDLK_y;
449: ConfigureParams.Shortcut.withModifier[SHORTCUT_SOUND] = SDLK_s;
450: ConfigureParams.Shortcut.withModifier[SHORTCUT_QUIT] = SDLK_q;
451: ConfigureParams.Shortcut.withModifier[SHORTCUT_LOADMEM] = SDLK_l;
452: ConfigureParams.Shortcut.withModifier[SHORTCUT_SAVEMEM] = SDLK_k;
1.1.1.13 root 453: ConfigureParams.Shortcut.withModifier[SHORTCUT_INSERTDISKA] = SDLK_d;
454:
1.1.1.9 root 455: /* Set defaults for Memory */
1.1.1.10 root 456: ConfigureParams.Memory.nMemorySize = 1; /* 1 MiB */
1.1.1.15 root 457: ConfigureParams.Memory.bAutoSave = false;
1.1.1.12 root 458: sprintf(ConfigureParams.Memory.szMemoryCaptureFileName, "%s%chatari.sav",
459: psHomeDir, PATHSEP);
460: sprintf(ConfigureParams.Memory.szAutoSaveFileName, "%s%cauto.sav",
461: psHomeDir, PATHSEP);
1.1.1.9 root 462:
463: /* Set defaults for Printer */
1.1.1.15 root 464: ConfigureParams.Printer.bEnablePrinting = false;
1.1.1.12 root 465: sprintf(ConfigureParams.Printer.szPrintToFileName, "%s%chatari.prn",
466: psHomeDir, PATHSEP);
1.1.1.9 root 467:
468: /* Set defaults for RS232 */
1.1.1.15 root 469: ConfigureParams.RS232.bEnableRS232 = false;
1.1.1.9 root 470: strcpy(ConfigureParams.RS232.szOutFileName, "/dev/modem");
471: strcpy(ConfigureParams.RS232.szInFileName, "/dev/modem");
472:
473: /* Set defaults for MIDI */
1.1.1.15 root 474: ConfigureParams.Midi.bEnableMidi = false;
1.1.1.14 root 475: strcpy(ConfigureParams.Midi.sMidiInFileName, "/dev/snd/midiC1D0");
476: strcpy(ConfigureParams.Midi.sMidiOutFileName, "/dev/snd/midiC1D0");
1.1.1.9 root 477:
478: /* Set defaults for Screen */
1.1.1.15 root 479: ConfigureParams.Screen.bFullScreen = false;
1.1.1.17 root 480: ConfigureParams.Screen.bKeepResolution = true;
1.1.1.18 root 481: ConfigureParams.Screen.bKeepResolutionST = false;
1.1.1.13 root 482: ConfigureParams.Screen.nFrameSkips = AUTO_FRAMESKIP_LIMIT;
1.1.1.15 root 483: ConfigureParams.Screen.bAllowOverscan = true;
1.1.1.12 root 484: ConfigureParams.Screen.nSpec512Threshold = 16;
485: ConfigureParams.Screen.nForceBpp = 0;
1.1.1.16 root 486: ConfigureParams.Screen.bAspectCorrect = true;
1.1.1.13 root 487: ConfigureParams.Screen.nMonitorType = MONITOR_TYPE_RGB;
1.1.1.15 root 488: ConfigureParams.Screen.bUseExtVdiResolutions = false;
1.1.1.12 root 489: ConfigureParams.Screen.nVdiWidth = 640;
490: ConfigureParams.Screen.nVdiHeight = 480;
491: ConfigureParams.Screen.nVdiColors = GEMCOLOR_16;
1.1.1.15 root 492: ConfigureParams.Screen.bShowStatusbar = true;
493: ConfigureParams.Screen.bShowDriveLed = true;
1.1.1.17 root 494: ConfigureParams.Screen.bCrop = false;
1.1.1.19! root 495: /* gives zoomed Falcon/TT windows about same size as ST/STE windows */
! 496: ConfigureParams.Screen.nMaxWidth = 2*(48+320+48);
! 497: ConfigureParams.Screen.nMaxHeight = 2*NUM_VISIBLE_LINES+24;
1.1.1.18 root 498: ConfigureParams.Screen.bForceMax = false;
1.1.1.9 root 499:
500: /* Set defaults for Sound */
1.1.1.17 root 501: ConfigureParams.Sound.bEnableMicrophone = true;
1.1.1.15 root 502: ConfigureParams.Sound.bEnableSound = true;
1.1.1.19! root 503: ConfigureParams.Sound.bEnableSoundSync = false;
1.1.1.15 root 504: ConfigureParams.Sound.nPlaybackFreq = 44100;
1.1.1.12 root 505: sprintf(ConfigureParams.Sound.szYMCaptureFileName, "%s%chatari.wav",
506: psWorkingDir, PATHSEP);
1.1.1.16 root 507: ConfigureParams.Sound.SdlAudioBufferSize = 0;
1.1.1.17 root 508: ConfigureParams.Sound.YmVolumeMixing = YM_TABLE_MIXING;
1.1.1.9 root 509:
510: /* Set defaults for Rom */
1.1.1.12 root 511: sprintf(ConfigureParams.Rom.szTosImageFileName, "%s%ctos.img",
512: Paths_GetDataDir(), PATHSEP);
1.1.1.18 root 513: ConfigureParams.Rom.bPatchTos = true;
1.1.1.9 root 514: strcpy(ConfigureParams.Rom.szCartridgeImageFileName, "");
515:
516: /* Set defaults for System */
1.1.1.19! root 517: #if ENABLE_WINUAE_CPU
! 518: /* Default to Falcon with WinUAE CPU core... */
! 519: ConfigureParams.System.nMachineType = MACHINE_FALCON;
! 520: ConfigureParams.System.nCpuLevel = 3;
! 521: ConfigureParams.System.nCpuFreq = 16;
! 522: ConfigureParams.System.nDSPType = DSP_TYPE_EMU;
! 523: ConfigureParams.System.bAddressSpace24 = true;
! 524: ConfigureParams.System.n_FPUType = FPU_NONE;
! 525: ConfigureParams.System.bCompatibleFPU = true;
! 526: ConfigureParams.System.bMMU = false;
! 527: ConfigureParams.System.bCycleExactCpu = true;
! 528: #else
! 529: /* ...and to ST with old UAE CPU core */
1.1.1.9 root 530: ConfigureParams.System.nMachineType = MACHINE_ST;
1.1.1.19! root 531: ConfigureParams.System.nCpuLevel = 0;
! 532: ConfigureParams.System.nCpuFreq = 8;
1.1.1.12 root 533: ConfigureParams.System.nDSPType = DSP_TYPE_NONE;
1.1.1.19! root 534: #endif
! 535: ConfigureParams.System.bCompatibleCpu = true;
! 536: ConfigureParams.System.bBlitter = false;
1.1.1.15 root 537: ConfigureParams.System.bPatchTimerD = true;
1.1.1.18 root 538: ConfigureParams.System.bFastBoot = true;
1.1.1.15 root 539: ConfigureParams.System.bRealTimeClock = true;
540: ConfigureParams.System.bFastForward = false;
1.1.1.17 root 541:
542: /* Set defaults for Video */
543: #if HAVE_LIBPNG
544: ConfigureParams.Video.AviRecordVcodec = AVI_RECORD_VIDEO_CODEC_PNG;
545: #else
546: ConfigureParams.Video.AviRecordVcodec = AVI_RECORD_VIDEO_CODEC_BMP;
547: #endif
548: ConfigureParams.Video.AviRecordFps = 0; /* automatic FPS */
549: sprintf(ConfigureParams.Video.AviRecordFile, "%s%chatari.avi", psWorkingDir, PATHSEP);
1.1.1.9 root 550:
551: /* Initialize the configuration file name */
1.1.1.12 root 552: if (strlen(psHomeDir) < sizeof(sConfigFileName)-13)
553: sprintf(sConfigFileName, "%s%chatari.cfg", psHomeDir, PATHSEP);
1.1.1.9 root 554: else
555: strcpy(sConfigFileName, "hatari.cfg");
1.1.1.12 root 556:
557: #if defined(__AMIGAOS4__)
558: /* Fix default path names on Amiga OS */
559: sprintf(ConfigureParams.Rom.szTosImageFileName, "%stos.img", Paths_GetDataDir());
560: #endif
1.1.1.2 root 561: }
562:
563:
564: /*-----------------------------------------------------------------------*/
1.1.1.12 root 565: /**
566: * Copy details from configuration structure into global variables for system,
567: * clean file names, etc... Called from main.c and dialog.c files.
568: */
1.1.1.13 root 569: void Configuration_Apply(bool bReset)
1.1.1.8 root 570: {
1.1.1.9 root 571: if (bReset)
572: {
1.1.1.12 root 573: /* Set resolution change */
1.1.1.9 root 574: bUseVDIRes = ConfigureParams.Screen.bUseExtVdiResolutions;
1.1.1.13 root 575: bUseHighRes = ((!bUseVDIRes) && ConfigureParams.Screen.nMonitorType == MONITOR_TYPE_MONO)
1.1.1.12 root 576: || (bUseVDIRes && ConfigureParams.Screen.nVdiColors == GEMCOLOR_2);
577: if (bUseHighRes)
578: {
579: STRes = ST_HIGH_RES;
580: }
581: if (bUseVDIRes)
582: {
583: VDI_SetResolution(ConfigureParams.Screen.nVdiColors,
584: ConfigureParams.Screen.nVdiWidth,
585: ConfigureParams.Screen.nVdiHeight);
1.1.1.17 root 586: bVdiAesIntercept = true;
1.1.1.12 root 587: }
1.1.1.9 root 588: }
1.1.1.13 root 589: if (ConfigureParams.Screen.nFrameSkips < AUTO_FRAMESKIP_LIMIT)
590: {
591: nFrameSkips = ConfigureParams.Screen.nFrameSkips;
592: }
1.1.1.15 root 593:
1.1.1.17 root 594: /* Init clocks for this machine */
595: ClocksTimings_InitMachine ( ConfigureParams.System.nMachineType );
596:
1.1.1.16 root 597: /* Sound settings */
598: /* SDL sound buffer in ms */
599: SdlAudioBufferSize = ConfigureParams.Sound.SdlAudioBufferSize;
600: if ( SdlAudioBufferSize == 0 ) /* use default setting for SDL */
601: ;
602: else if ( SdlAudioBufferSize < 10 ) /* min of 10 ms */
603: SdlAudioBufferSize = 10;
604: else if ( SdlAudioBufferSize > 100 ) /* max of 100 ms */
605: SdlAudioBufferSize = 100;
606:
1.1.1.9 root 607: /* Set playback frequency */
1.1.1.15 root 608: Audio_SetOutputAudioFreq(ConfigureParams.Sound.nPlaybackFreq);
609:
1.1.1.17 root 610: /* YM Mixing */
611: if ( ( ConfigureParams.Sound.YmVolumeMixing != YM_LINEAR_MIXING )
1.1.1.18 root 612: && ( ConfigureParams.Sound.YmVolumeMixing != YM_TABLE_MIXING )
613: && ( ConfigureParams.Sound.YmVolumeMixing != YM_MODEL_MIXING ) )
1.1.1.17 root 614: ConfigureParams.Sound.YmVolumeMixing = YM_TABLE_MIXING;
615:
616: YmVolumeMixing = ConfigureParams.Sound.YmVolumeMixing;
617: Sound_SetYmVolumeMixing();
618:
619: /* Check/constrain CPU settings and change corresponding
620: * UAE cpu_level & cpu_compatible variables
621: */
622: M68000_CheckCpuSettings();
1.1.1.9 root 623:
624: /* Clean file and directory names */
625: File_MakeAbsoluteName(ConfigureParams.Rom.szTosImageFileName);
1.1.1.11 root 626: if (strlen(ConfigureParams.Rom.szCartridgeImageFileName) > 0)
627: File_MakeAbsoluteName(ConfigureParams.Rom.szCartridgeImageFileName);
1.1.1.10 root 628: File_MakeAbsoluteName(ConfigureParams.HardDisk.szHardDiskImage);
629: File_CleanFileName(ConfigureParams.HardDisk.szHardDiskDirectories[0]);
630: File_MakeAbsoluteName(ConfigureParams.HardDisk.szHardDiskDirectories[0]);
1.1.1.12 root 631: File_MakeAbsoluteName(ConfigureParams.Memory.szMemoryCaptureFileName);
632: File_MakeAbsoluteName(ConfigureParams.Sound.szYMCaptureFileName);
633: if (strlen(ConfigureParams.Keyboard.szMappingFileName) > 0)
634: File_MakeAbsoluteName(ConfigureParams.Keyboard.szMappingFileName);
1.1.1.17 root 635: File_MakeAbsoluteName(ConfigureParams.Video.AviRecordFile);
1.1.1.12 root 636:
637: /* make path names absolute, but handle special file names */
638: File_MakeAbsoluteSpecialName(ConfigureParams.Log.sLogFileName);
1.1.1.13 root 639: File_MakeAbsoluteSpecialName(ConfigureParams.Log.sTraceFileName);
1.1.1.14 root 640: File_MakeAbsoluteSpecialName(ConfigureParams.RS232.szInFileName);
641: File_MakeAbsoluteSpecialName(ConfigureParams.RS232.szOutFileName);
642: File_MakeAbsoluteSpecialName(ConfigureParams.Midi.sMidiInFileName);
643: File_MakeAbsoluteSpecialName(ConfigureParams.Midi.sMidiOutFileName);
1.1.1.12 root 644: File_MakeAbsoluteSpecialName(ConfigureParams.Printer.szPrintToFileName);
1.1.1.8 root 645: }
646:
647:
648: /*-----------------------------------------------------------------------*/
1.1.1.12 root 649: /**
650: * Load a settings section from the configuration file.
651: */
1.1.1.9 root 652: static int Configuration_LoadSection(const char *pFilename, const struct Config_Tag configs[], const char *pSection)
1.1 root 653: {
1.1.1.9 root 654: int ret;
1.1 root 655:
1.1.1.9 root 656: ret = input_config(pFilename, configs, pSection);
1.1 root 657:
1.1.1.9 root 658: if (ret < 0)
659: fprintf(stderr, "Can not load configuration file %s (section %s).\n",
1.1.1.16 root 660: pFilename, pSection);
1.1 root 661:
1.1.1.9 root 662: return ret;
1.1 root 663: }
664:
665:
666: /*-----------------------------------------------------------------------*/
1.1.1.12 root 667: /**
668: * Load program setting from configuration file. If psFileName is NULL, use
1.1.1.16 root 669: * the configuration file given in configuration / last selected by user.
1.1.1.12 root 670: */
1.1.1.9 root 671: void Configuration_Load(const char *psFileName)
1.1 root 672: {
1.1.1.9 root 673: if (psFileName == NULL)
674: psFileName = sConfigFileName;
675:
676: if (!File_Exists(psFileName))
677: {
1.1.1.17 root 678: Log_Printf(LOG_DEBUG, "Configuration file %s not found.\n", psFileName);
1.1.1.9 root 679: return;
680: }
681:
682: Configuration_LoadSection(psFileName, configs_Log, "[Log]");
1.1.1.16 root 683: Configuration_LoadSection(psFileName, configs_Debugger, "[Debugger]");
1.1.1.9 root 684: Configuration_LoadSection(psFileName, configs_Screen, "[Screen]");
685: Configuration_LoadSection(psFileName, configs_Joystick0, "[Joystick0]");
686: Configuration_LoadSection(psFileName, configs_Joystick1, "[Joystick1]");
1.1.1.10 root 687: Configuration_LoadSection(psFileName, configs_Joystick2, "[Joystick2]");
688: Configuration_LoadSection(psFileName, configs_Joystick3, "[Joystick3]");
689: Configuration_LoadSection(psFileName, configs_Joystick4, "[Joystick4]");
690: Configuration_LoadSection(psFileName, configs_Joystick5, "[Joystick5]");
1.1.1.9 root 691: Configuration_LoadSection(psFileName, configs_Keyboard, "[Keyboard]");
1.1.1.11 root 692: Configuration_LoadSection(psFileName, configs_ShortCutWithMod, "[ShortcutsWithModifiers]");
693: Configuration_LoadSection(psFileName, configs_ShortCutWithoutMod, "[ShortcutsWithoutModifiers]");
1.1.1.9 root 694: Configuration_LoadSection(psFileName, configs_Sound, "[Sound]");
695: Configuration_LoadSection(psFileName, configs_Memory, "[Memory]");
696: Configuration_LoadSection(psFileName, configs_Floppy, "[Floppy]");
1.1.1.10 root 697: Configuration_LoadSection(psFileName, configs_HardDisk, "[HardDisk]");
1.1.1.9 root 698: Configuration_LoadSection(psFileName, configs_Rom, "[ROM]");
699: Configuration_LoadSection(psFileName, configs_Rs232, "[RS232]");
700: Configuration_LoadSection(psFileName, configs_Printer, "[Printer]");
701: Configuration_LoadSection(psFileName, configs_Midi, "[Midi]");
702: Configuration_LoadSection(psFileName, configs_System, "[System]");
1.1.1.17 root 703: Configuration_LoadSection(psFileName, configs_Video, "[Video]");
1.1 root 704: }
705:
706:
707: /*-----------------------------------------------------------------------*/
1.1.1.12 root 708: /**
709: * Save a settings section to configuration file
710: */
1.1.1.9 root 711: static int Configuration_SaveSection(const char *pFilename, const struct Config_Tag configs[], const char *pSection)
1.1 root 712: {
1.1.1.9 root 713: int ret;
1.1 root 714:
1.1.1.9 root 715: ret = update_config(pFilename, configs, pSection);
1.1 root 716:
1.1.1.9 root 717: if (ret < 0)
1.1.1.16 root 718: fprintf(stderr, "Error while updating section %s in %s\n", pSection, pFilename);
1.1 root 719:
1.1.1.9 root 720: return ret;
1.1 root 721: }
722:
723:
724: /*-----------------------------------------------------------------------*/
1.1.1.12 root 725: /**
726: * Save program setting to configuration file
727: */
1.1.1.6 root 728: void Configuration_Save(void)
1.1 root 729: {
1.1.1.9 root 730: if (Configuration_SaveSection(sConfigFileName, configs_Log, "[Log]") < 0)
731: {
1.1.1.13 root 732: Log_AlertDlg(LOG_ERROR, "Error saving config file.");
1.1.1.9 root 733: return;
734: }
1.1.1.16 root 735: Configuration_SaveSection(sConfigFileName, configs_Debugger, "[Debugger]");
1.1.1.9 root 736: Configuration_SaveSection(sConfigFileName, configs_Screen, "[Screen]");
737: Configuration_SaveSection(sConfigFileName, configs_Joystick0, "[Joystick0]");
738: Configuration_SaveSection(sConfigFileName, configs_Joystick1, "[Joystick1]");
1.1.1.10 root 739: Configuration_SaveSection(sConfigFileName, configs_Joystick2, "[Joystick2]");
740: Configuration_SaveSection(sConfigFileName, configs_Joystick3, "[Joystick3]");
741: Configuration_SaveSection(sConfigFileName, configs_Joystick4, "[Joystick4]");
742: Configuration_SaveSection(sConfigFileName, configs_Joystick5, "[Joystick5]");
1.1.1.9 root 743: Configuration_SaveSection(sConfigFileName, configs_Keyboard, "[Keyboard]");
1.1.1.11 root 744: Configuration_SaveSection(sConfigFileName, configs_ShortCutWithMod, "[ShortcutsWithModifiers]");
745: Configuration_SaveSection(sConfigFileName, configs_ShortCutWithoutMod, "[ShortcutsWithoutModifiers]");
1.1.1.9 root 746: Configuration_SaveSection(sConfigFileName, configs_Sound, "[Sound]");
747: Configuration_SaveSection(sConfigFileName, configs_Memory, "[Memory]");
748: Configuration_SaveSection(sConfigFileName, configs_Floppy, "[Floppy]");
1.1.1.10 root 749: Configuration_SaveSection(sConfigFileName, configs_HardDisk, "[HardDisk]");
1.1.1.9 root 750: Configuration_SaveSection(sConfigFileName, configs_Rom, "[ROM]");
751: Configuration_SaveSection(sConfigFileName, configs_Rs232, "[RS232]");
752: Configuration_SaveSection(sConfigFileName, configs_Printer, "[Printer]");
753: Configuration_SaveSection(sConfigFileName, configs_Midi, "[Midi]");
754: Configuration_SaveSection(sConfigFileName, configs_System, "[System]");
1.1.1.17 root 755: Configuration_SaveSection(sConfigFileName, configs_Video, "[Video]");
1.1 root 756: }
1.1.1.6 root 757:
1.1.1.12 root 758:
759: /*-----------------------------------------------------------------------*/
760: /**
761: * Save/restore snapshot of configuration variables
762: * ('MemorySnapShot_Store' handles type)
763: */
1.1.1.13 root 764: void Configuration_MemorySnapShot_Capture(bool bSave)
1.1.1.12 root 765: {
766: MemorySnapShot_Store(ConfigureParams.Rom.szTosImageFileName, sizeof(ConfigureParams.Rom.szTosImageFileName));
767: MemorySnapShot_Store(ConfigureParams.Rom.szCartridgeImageFileName, sizeof(ConfigureParams.Rom.szCartridgeImageFileName));
768:
769: MemorySnapShot_Store(&ConfigureParams.Memory.nMemorySize, sizeof(ConfigureParams.Memory.nMemorySize));
770:
1.1.1.18 root 771: MemorySnapShot_Store(&ConfigureParams.DiskImage.szDiskFileName[0], sizeof(ConfigureParams.DiskImage.szDiskFileName[0]));
772: MemorySnapShot_Store(&ConfigureParams.DiskImage.szDiskZipPath[0], sizeof(ConfigureParams.DiskImage.szDiskZipPath[0]));
773: MemorySnapShot_Store(&ConfigureParams.DiskImage.szDiskFileName[1], sizeof(ConfigureParams.DiskImage.szDiskFileName[1]));
774: MemorySnapShot_Store(&ConfigureParams.DiskImage.szDiskZipPath[1], sizeof(ConfigureParams.DiskImage.szDiskZipPath[1]));
775:
1.1.1.12 root 776: MemorySnapShot_Store(&ConfigureParams.HardDisk.bUseHardDiskDirectories, sizeof(ConfigureParams.HardDisk.bUseHardDiskDirectories));
777: MemorySnapShot_Store(ConfigureParams.HardDisk.szHardDiskDirectories[DRIVE_C], sizeof(ConfigureParams.HardDisk.szHardDiskDirectories[DRIVE_C]));
778: MemorySnapShot_Store(&ConfigureParams.HardDisk.bUseHardDiskImage, sizeof(ConfigureParams.HardDisk.bUseHardDiskImage));
779: MemorySnapShot_Store(ConfigureParams.HardDisk.szHardDiskImage, sizeof(ConfigureParams.HardDisk.szHardDiskImage));
780:
1.1.1.13 root 781: MemorySnapShot_Store(&ConfigureParams.Screen.nMonitorType, sizeof(ConfigureParams.Screen.nMonitorType));
1.1.1.12 root 782: MemorySnapShot_Store(&ConfigureParams.Screen.bUseExtVdiResolutions, sizeof(ConfigureParams.Screen.bUseExtVdiResolutions));
783: MemorySnapShot_Store(&ConfigureParams.Screen.nVdiWidth, sizeof(ConfigureParams.Screen.nVdiWidth));
784: MemorySnapShot_Store(&ConfigureParams.Screen.nVdiHeight, sizeof(ConfigureParams.Screen.nVdiHeight));
785: MemorySnapShot_Store(&ConfigureParams.Screen.nVdiColors, sizeof(ConfigureParams.Screen.nVdiColors));
786:
787: MemorySnapShot_Store(&ConfigureParams.System.nCpuLevel, sizeof(ConfigureParams.System.nCpuLevel));
788: MemorySnapShot_Store(&ConfigureParams.System.nCpuFreq, sizeof(ConfigureParams.System.nCpuFreq));
789: MemorySnapShot_Store(&ConfigureParams.System.bCompatibleCpu, sizeof(ConfigureParams.System.bCompatibleCpu));
790: MemorySnapShot_Store(&ConfigureParams.System.nMachineType, sizeof(ConfigureParams.System.nMachineType));
791: MemorySnapShot_Store(&ConfigureParams.System.bBlitter, sizeof(ConfigureParams.System.bBlitter));
792: MemorySnapShot_Store(&ConfigureParams.System.nDSPType, sizeof(ConfigureParams.System.nDSPType));
793: MemorySnapShot_Store(&ConfigureParams.System.bRealTimeClock, sizeof(ConfigureParams.System.bRealTimeClock));
794: MemorySnapShot_Store(&ConfigureParams.System.bPatchTimerD, sizeof(ConfigureParams.System.bPatchTimerD));
1.1.1.17 root 795:
796: #if ENABLE_WINUAE_CPU
797: MemorySnapShot_Store(&ConfigureParams.System.bAddressSpace24, sizeof(ConfigureParams.System.bAddressSpace24));
798: MemorySnapShot_Store(&ConfigureParams.System.bCycleExactCpu, sizeof(ConfigureParams.System.bCycleExactCpu));
799: MemorySnapShot_Store(&ConfigureParams.System.n_FPUType, sizeof(ConfigureParams.System.n_FPUType));
800: MemorySnapShot_Store(&ConfigureParams.System.bCompatibleFPU, sizeof(ConfigureParams.System.bCompatibleFPU));
801: MemorySnapShot_Store(&ConfigureParams.System.bMMU, sizeof(ConfigureParams.System.bMMU));
802: #endif
803:
1.1.1.18 root 804: MemorySnapShot_Store(&ConfigureParams.DiskImage.FastFloppy, sizeof(ConfigureParams.DiskImage.FastFloppy));
1.1.1.12 root 805:
806: if (!bSave)
1.1.1.15 root 807: Configuration_Apply(true);
1.1.1.12 root 808: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.