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