|
|
1.1 ! root 1: /* ! 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. ! 6: ! 7: Configuration File ! 8: ! 9: The configuration file is now stored in an ASCII format to allow the user ! 10: to edit the file manually. ! 11: */ ! 12: const char Configuration_fileid[] = "Hatari configuration.c : " __DATE__ " " __TIME__; ! 13: ! 14: #include <SDL_keyboard.h> ! 15: ! 16: #include "main.h" ! 17: #include "configuration.h" ! 18: #include "cfgopts.h" ! 19: #include "file.h" ! 20: #include "log.h" ! 21: #include "m68000.h" ! 22: #include "paths.h" ! 23: #include "screen.h" ! 24: #include "video.h" ! 25: ! 26: CNF_PARAMS ConfigureParams; /* List of configuration for the emulator */ ! 27: char sConfigFileName[FILENAME_MAX]; /* Stores the name of the configuration file */ ! 28: ! 29: ! 30: /* Used to load/save logging options */ ! 31: static const struct Config_Tag configs_Log[] = ! 32: { ! 33: { "sLogFileName", String_Tag, ConfigureParams.Log.sLogFileName }, ! 34: { "sTraceFileName", String_Tag, ConfigureParams.Log.sTraceFileName }, ! 35: { "nTextLogLevel", Int_Tag, &ConfigureParams.Log.nTextLogLevel }, ! 36: { "nAlertDlgLogLevel", Int_Tag, &ConfigureParams.Log.nAlertDlgLogLevel }, ! 37: { "bConfirmQuit", Bool_Tag, &ConfigureParams.Log.bConfirmQuit }, ! 38: { NULL , Error_Tag, NULL } ! 39: }; ! 40: ! 41: /* Used to load/save configuration dialog options */ ! 42: static const struct Config_Tag configs_ConfigDialog[] = ! 43: { ! 44: { "bShowConfigDialogAtStartup", Bool_Tag, &ConfigureParams.ConfigDialog.bShowConfigDialogAtStartup }, ! 45: { NULL , Error_Tag, NULL } ! 46: }; ! 47: ! 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: }; ! 56: ! 57: /* Used to load/save screen options */ ! 58: static const struct Config_Tag configs_Screen[] = ! 59: { ! 60: { "nMonitorType", Int_Tag, &ConfigureParams.Screen.nMonitorType }, ! 61: { "nMonitorNum", Int_Tag, &ConfigureParams.Screen.nMonitorNum }, ! 62: { "bFullScreen", Bool_Tag, &ConfigureParams.Screen.bFullScreen }, ! 63: { "bShowStatusbar", Bool_Tag, &ConfigureParams.Screen.bShowStatusbar }, ! 64: { "bShowDriveLed", Bool_Tag, &ConfigureParams.Screen.bShowDriveLed }, ! 65: { NULL , Error_Tag, NULL } ! 66: }; ! 67: ! 68: /* Used to load/save keyboard options */ ! 69: static const struct Config_Tag configs_Keyboard[] = ! 70: { ! 71: { "bSwapCmdAlt", Bool_Tag, &ConfigureParams.Keyboard.bSwapCmdAlt }, ! 72: { "nKeymapType", Int_Tag, &ConfigureParams.Keyboard.nKeymapType }, ! 73: { "szMappingFileName", String_Tag, ConfigureParams.Keyboard.szMappingFileName }, ! 74: { NULL , Error_Tag, NULL } ! 75: }; ! 76: ! 77: /* Used to load/save mouse options */ ! 78: static const struct Config_Tag configs_Mouse[] = ! 79: { ! 80: { "bEnableAutoGrab", Bool_Tag, &ConfigureParams.Mouse.bEnableAutoGrab }, ! 81: { "fLinSpeedNormal", Float_Tag, &ConfigureParams.Mouse.fLinSpeedNormal }, ! 82: { "fLinSpeedLocked", Float_Tag, &ConfigureParams.Mouse.fLinSpeedLocked }, ! 83: { "fExpSpeedNormal", Float_Tag, &ConfigureParams.Mouse.fExpSpeedNormal }, ! 84: { "fExpSpeedLocked", Float_Tag, &ConfigureParams.Mouse.fExpSpeedLocked }, ! 85: { NULL , Error_Tag, NULL } ! 86: }; ! 87: ! 88: /* Used to load/save shortcut key bindings with modifiers options */ ! 89: static const struct Config_Tag configs_ShortCutWithMod[] = ! 90: { ! 91: { "keyOptions", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_OPTIONS] }, ! 92: { "keyFullScreen", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_FULLSCREEN] }, ! 93: { "keyMouseMode", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_MOUSEGRAB] }, ! 94: { "keyColdReset", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_COLDRESET] }, ! 95: { "keyWarmReset", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_WARMRESET] }, ! 96: { "keyCursorEmu", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_CURSOREMU] }, ! 97: { "keySound", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_SOUND] }, ! 98: { "keyPause", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_PAUSE] }, ! 99: { "keyDebuggerM68K",Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_DEBUG_M68K] }, ! 100: { "keyDebuggerI860",Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_DEBUG_I860] }, ! 101: { "keyQuit", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_QUIT] }, ! 102: { "keyDimension", Int_Tag, &ConfigureParams.Shortcut.withModifier[SHORTCUT_DIMENSION] }, ! 103: { NULL , Error_Tag, NULL } ! 104: }; ! 105: ! 106: /* Used to load/save shortcut key bindings without modifiers options */ ! 107: static const struct Config_Tag configs_ShortCutWithoutMod[] = ! 108: { ! 109: { "keyOptions", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_OPTIONS] }, ! 110: { "keyFullScreen", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_FULLSCREEN] }, ! 111: { "keyMouseMode", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_MOUSEGRAB] }, ! 112: { "keyColdReset", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_COLDRESET] }, ! 113: { "keyWarmReset", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_WARMRESET] }, ! 114: { "keyCursorEmu", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_CURSOREMU] }, ! 115: { "keySound", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_SOUND] }, ! 116: { "keyPause", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_PAUSE] }, ! 117: { "keyDebuggerM68K",Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_DEBUG_M68K] }, ! 118: { "keyDebuggerI860",Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_DEBUG_I860] }, ! 119: { "keyQuit", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_QUIT] }, ! 120: { "keyDimension", Int_Tag, &ConfigureParams.Shortcut.withoutModifier[SHORTCUT_DIMENSION] }, ! 121: { NULL , Error_Tag, NULL } ! 122: }; ! 123: ! 124: ! 125: /* Used to load/save sound options */ ! 126: static const struct Config_Tag configs_Sound[] = ! 127: { ! 128: { "bEnableMicrophone", Bool_Tag, &ConfigureParams.Sound.bEnableMicrophone }, ! 129: { "bEnableSound", Bool_Tag, &ConfigureParams.Sound.bEnableSound }, ! 130: { NULL , Error_Tag, NULL } ! 131: }; ! 132: ! 133: /* Used to load/save memory options */ ! 134: static const struct Config_Tag configs_Memory[] = ! 135: { ! 136: { "nMemoryBankSize0", Int_Tag, &ConfigureParams.Memory.nMemoryBankSize[0] }, ! 137: { "nMemoryBankSize1", Int_Tag, &ConfigureParams.Memory.nMemoryBankSize[1] }, ! 138: { "nMemoryBankSize2", Int_Tag, &ConfigureParams.Memory.nMemoryBankSize[2] }, ! 139: { "nMemoryBankSize3", Int_Tag, &ConfigureParams.Memory.nMemoryBankSize[3] }, ! 140: { "nMemorySpeed", Int_Tag, &ConfigureParams.Memory.nMemorySpeed }, ! 141: { NULL , Error_Tag, NULL } ! 142: }; ! 143: ! 144: /* Used to load/save boot options */ ! 145: static const struct Config_Tag configs_Boot[] = ! 146: { ! 147: { "nBootDevice", Int_Tag, &ConfigureParams.Boot.nBootDevice }, ! 148: { "bEnableDRAMTest", Bool_Tag, &ConfigureParams.Boot.bEnableDRAMTest }, ! 149: { "bEnablePot", Bool_Tag, &ConfigureParams.Boot.bEnablePot }, ! 150: { "bEnableSoundTest", Bool_Tag, &ConfigureParams.Boot.bEnableSoundTest }, ! 151: { "bEnableSCSITest", Bool_Tag, &ConfigureParams.Boot.bEnableSCSITest }, ! 152: { "bLoopPot", Bool_Tag, &ConfigureParams.Boot.bLoopPot }, ! 153: { "bVerbose", Bool_Tag, &ConfigureParams.Boot.bVerbose }, ! 154: { "bExtendedPot", Bool_Tag, &ConfigureParams.Boot.bExtendedPot }, ! 155: { NULL , Error_Tag, NULL } ! 156: }; ! 157: ! 158: /* Used to load/save SCSI options */ ! 159: static const struct Config_Tag configs_SCSI[] = ! 160: { ! 161: { "szImageName0", String_Tag, ConfigureParams.SCSI.target[0].szImageName }, ! 162: { "nDeviceType0", Int_Tag, &ConfigureParams.SCSI.target[0].nDeviceType }, ! 163: { "bDiskInserted0", Bool_Tag, &ConfigureParams.SCSI.target[0].bDiskInserted }, ! 164: { "bWriteProtected0", Bool_Tag, &ConfigureParams.SCSI.target[0].bWriteProtected }, ! 165: ! 166: { "szImageName1", String_Tag, ConfigureParams.SCSI.target[1].szImageName }, ! 167: { "nDeviceType1", Int_Tag, &ConfigureParams.SCSI.target[1].nDeviceType }, ! 168: { "bDiskInserted1", Bool_Tag, &ConfigureParams.SCSI.target[1].bDiskInserted }, ! 169: { "bWriteProtected1", Bool_Tag, &ConfigureParams.SCSI.target[1].bWriteProtected }, ! 170: ! 171: { "szImageName2", String_Tag, ConfigureParams.SCSI.target[2].szImageName }, ! 172: { "nDeviceType2", Int_Tag, &ConfigureParams.SCSI.target[2].nDeviceType }, ! 173: { "bDiskInserted2", Bool_Tag, &ConfigureParams.SCSI.target[2].bDiskInserted }, ! 174: { "bWriteProtected2", Bool_Tag, &ConfigureParams.SCSI.target[2].bWriteProtected }, ! 175: ! 176: { "szImageName3", String_Tag, ConfigureParams.SCSI.target[3].szImageName }, ! 177: { "nDeviceType3", Int_Tag, &ConfigureParams.SCSI.target[3].nDeviceType }, ! 178: { "bDiskInserted3", Bool_Tag, &ConfigureParams.SCSI.target[3].bDiskInserted }, ! 179: { "bWriteProtected3", Bool_Tag, &ConfigureParams.SCSI.target[3].bWriteProtected }, ! 180: ! 181: { "szImageName4", String_Tag, ConfigureParams.SCSI.target[4].szImageName }, ! 182: { "nDeviceType4", Int_Tag, &ConfigureParams.SCSI.target[4].nDeviceType }, ! 183: { "bDiskInserted4", Bool_Tag, &ConfigureParams.SCSI.target[4].bDiskInserted }, ! 184: { "bWriteProtected4", Bool_Tag, &ConfigureParams.SCSI.target[4].bWriteProtected }, ! 185: ! 186: { "szImageName5", String_Tag, ConfigureParams.SCSI.target[5].szImageName }, ! 187: { "nDeviceType5", Int_Tag, &ConfigureParams.SCSI.target[5].nDeviceType }, ! 188: { "bDiskInserted5", Bool_Tag, &ConfigureParams.SCSI.target[5].bDiskInserted }, ! 189: { "bWriteProtected5", Bool_Tag, &ConfigureParams.SCSI.target[5].bWriteProtected }, ! 190: ! 191: { "szImageName6", String_Tag, ConfigureParams.SCSI.target[6].szImageName }, ! 192: { "nDeviceType6", Int_Tag, &ConfigureParams.SCSI.target[6].nDeviceType }, ! 193: { "bDiskInserted6", Bool_Tag, &ConfigureParams.SCSI.target[6].bDiskInserted }, ! 194: { "bWriteProtected6", Bool_Tag, &ConfigureParams.SCSI.target[6].bWriteProtected }, ! 195: ! 196: { "nWriteProtection", Int_Tag, &ConfigureParams.SCSI.nWriteProtection }, ! 197: ! 198: { NULL , Error_Tag, NULL } ! 199: }; ! 200: ! 201: /* Used to load/save MO options */ ! 202: static const struct Config_Tag configs_MO[] = ! 203: { ! 204: { "szImageName0", String_Tag, ConfigureParams.MO.drive[0].szImageName }, ! 205: { "bDriveConnected0", Bool_Tag, &ConfigureParams.MO.drive[0].bDriveConnected }, ! 206: { "bDiskInserted0", Bool_Tag, &ConfigureParams.MO.drive[0].bDiskInserted }, ! 207: { "bWriteProtected0", Bool_Tag, &ConfigureParams.MO.drive[0].bWriteProtected }, ! 208: ! 209: { "szImageName1", String_Tag, ConfigureParams.MO.drive[1].szImageName }, ! 210: { "bDriveConnected1", Bool_Tag, &ConfigureParams.MO.drive[1].bDriveConnected }, ! 211: { "bDiskInserted1", Bool_Tag, &ConfigureParams.MO.drive[1].bDiskInserted }, ! 212: { "bWriteProtected1", Bool_Tag, &ConfigureParams.MO.drive[1].bWriteProtected }, ! 213: ! 214: { NULL , Error_Tag, NULL } ! 215: }; ! 216: ! 217: /* Used to load/save floppy options */ ! 218: static const struct Config_Tag configs_Floppy[] = ! 219: { ! 220: { "szImageName0", String_Tag, ConfigureParams.Floppy.drive[0].szImageName }, ! 221: { "bDriveConnected0", Bool_Tag, &ConfigureParams.Floppy.drive[0].bDriveConnected }, ! 222: { "bDiskInserted0", Bool_Tag, &ConfigureParams.Floppy.drive[0].bDiskInserted }, ! 223: { "bWriteProtected0", Bool_Tag, &ConfigureParams.Floppy.drive[0].bWriteProtected }, ! 224: ! 225: { "szImageName1", String_Tag, ConfigureParams.Floppy.drive[1].szImageName }, ! 226: { "bDriveConnected1", Bool_Tag, &ConfigureParams.Floppy.drive[1].bDriveConnected }, ! 227: { "bDiskInserted1", Bool_Tag, &ConfigureParams.Floppy.drive[1].bDiskInserted }, ! 228: { "bWriteProtected1", Bool_Tag, &ConfigureParams.Floppy.drive[1].bWriteProtected }, ! 229: ! 230: { NULL , Error_Tag, NULL } ! 231: }; ! 232: ! 233: /* Used to load/save Ethernet options */ ! 234: static const struct Config_Tag configs_Ethernet[] = ! 235: { ! 236: { "bEthernetConnected", Bool_Tag, &ConfigureParams.Ethernet.bEthernetConnected }, ! 237: { "bTwistedPair", Bool_Tag, &ConfigureParams.Ethernet.bTwistedPair }, ! 238: ! 239: { "nHostInterface", Int_Tag, &ConfigureParams.Ethernet.nHostInterface }, ! 240: { "szInterfaceName", String_Tag, ConfigureParams.Ethernet.szInterfaceName }, ! 241: ! 242: { NULL , Error_Tag, NULL } ! 243: }; ! 244: ! 245: /* Used to load/save ROM options */ ! 246: static const struct Config_Tag configs_Rom[] = ! 247: { ! 248: { "szRom030FileName", String_Tag, ConfigureParams.Rom.szRom030FileName }, ! 249: { "szRom040FileName", String_Tag, ConfigureParams.Rom.szRom040FileName }, ! 250: { "szRomTurboFileName", String_Tag, ConfigureParams.Rom.szRomTurboFileName }, ! 251: { NULL , Error_Tag, NULL } ! 252: }; ! 253: ! 254: /* Used to load/save printer options */ ! 255: static const struct Config_Tag configs_Printer[] = ! 256: { ! 257: { "bPrinterConnected", Bool_Tag, &ConfigureParams.Printer.bPrinterConnected }, ! 258: { "nPaperSize", Int_Tag, &ConfigureParams.Printer.nPaperSize }, ! 259: { "szPrintToFileName", String_Tag, ConfigureParams.Printer.szPrintToFileName }, ! 260: { NULL , Error_Tag, NULL } ! 261: }; ! 262: ! 263: /* Used to load/save system options */ ! 264: static const struct Config_Tag configs_System[] = ! 265: { ! 266: { "nMachineType", Int_Tag, &ConfigureParams.System.nMachineType }, ! 267: { "bColor", Bool_Tag, &ConfigureParams.System.bColor }, ! 268: { "bTurbo", Bool_Tag, &ConfigureParams.System.bTurbo }, ! 269: { "bNBIC", Bool_Tag, &ConfigureParams.System.bNBIC }, ! 270: { "nSCSI", Bool_Tag, &ConfigureParams.System.nSCSI }, ! 271: { "nRTC", Bool_Tag, &ConfigureParams.System.nRTC }, ! 272: ! 273: { "nCpuLevel", Int_Tag, &ConfigureParams.System.nCpuLevel }, ! 274: { "nCpuFreq", Int_Tag, &ConfigureParams.System.nCpuFreq }, ! 275: { "bCompatibleCpu", Bool_Tag, &ConfigureParams.System.bCompatibleCpu }, ! 276: { "bRealtime", Bool_Tag, &ConfigureParams.System.bRealtime }, ! 277: { "nDSPType", Int_Tag, &ConfigureParams.System.nDSPType }, ! 278: { "bDSPMemoryExpansion", Bool_Tag, &ConfigureParams.System.bDSPMemoryExpansion }, ! 279: { "bRealTimeClock", Bool_Tag, &ConfigureParams.System.bRealTimeClock }, ! 280: { "n_FPUType", Int_Tag, &ConfigureParams.System.n_FPUType }, ! 281: { "bCompatibleFPU", Bool_Tag, &ConfigureParams.System.bCompatibleFPU }, ! 282: { "bMMU", Bool_Tag, &ConfigureParams.System.bMMU }, ! 283: { NULL , Error_Tag, NULL } ! 284: }; ! 285: ! 286: /* Used to load/save nextdimension options */ ! 287: static const struct Config_Tag configs_Dimension[] = ! 288: { ! 289: { "bI860Thread", Bool_Tag, &ConfigureParams.Dimension.bI860Thread }, ! 290: { "bMainDisplay", Bool_Tag, &ConfigureParams.Dimension.bMainDisplay }, ! 291: { "nMainDisplay", Int_Tag, &ConfigureParams.Dimension.nMainDisplay }, ! 292: ! 293: { "bEnabled0", Bool_Tag, &ConfigureParams.Dimension.board[0].bEnabled }, ! 294: { "nMemoryBankSize00", Int_Tag, &ConfigureParams.Dimension.board[0].nMemoryBankSize[0] }, ! 295: { "nMemoryBankSize01", Int_Tag, &ConfigureParams.Dimension.board[0].nMemoryBankSize[1] }, ! 296: { "nMemoryBankSize02", Int_Tag, &ConfigureParams.Dimension.board[0].nMemoryBankSize[2] }, ! 297: { "nMemoryBankSize03", Int_Tag, &ConfigureParams.Dimension.board[0].nMemoryBankSize[3] }, ! 298: { "szRomFileName0", String_Tag, ConfigureParams.Dimension.board[0].szRomFileName }, ! 299: ! 300: { "bEnabled1", Bool_Tag, &ConfigureParams.Dimension.board[1].bEnabled }, ! 301: { "nMemoryBankSize10", Int_Tag, &ConfigureParams.Dimension.board[1].nMemoryBankSize[0] }, ! 302: { "nMemoryBankSize11", Int_Tag, &ConfigureParams.Dimension.board[1].nMemoryBankSize[1] }, ! 303: { "nMemoryBankSize12", Int_Tag, &ConfigureParams.Dimension.board[1].nMemoryBankSize[2] }, ! 304: { "nMemoryBankSize13", Int_Tag, &ConfigureParams.Dimension.board[1].nMemoryBankSize[3] }, ! 305: { "szRomFileName1", String_Tag, ConfigureParams.Dimension.board[1].szRomFileName }, ! 306: ! 307: { "bEnabled2", Bool_Tag, &ConfigureParams.Dimension.board[2].bEnabled }, ! 308: { "nMemoryBankSize20", Int_Tag, &ConfigureParams.Dimension.board[2].nMemoryBankSize[0] }, ! 309: { "nMemoryBankSize21", Int_Tag, &ConfigureParams.Dimension.board[2].nMemoryBankSize[1] }, ! 310: { "nMemoryBankSize22", Int_Tag, &ConfigureParams.Dimension.board[2].nMemoryBankSize[2] }, ! 311: { "nMemoryBankSize23", Int_Tag, &ConfigureParams.Dimension.board[2].nMemoryBankSize[3] }, ! 312: { "szRomFileName2", String_Tag, ConfigureParams.Dimension.board[2].szRomFileName }, ! 313: ! 314: { NULL , Error_Tag, NULL } ! 315: }; ! 316: ! 317: /*-----------------------------------------------------------------------*/ ! 318: /** ! 319: * Set default configuration values. ! 320: */ ! 321: void Configuration_SetDefault(void) ! 322: { ! 323: int i; ! 324: const char *psHomeDir; ! 325: const char *psWorkingDir; ! 326: ! 327: psHomeDir = Paths_GetHatariHome(); ! 328: psWorkingDir = Paths_GetWorkingDir(); ! 329: ! 330: /* Clear parameters */ ! 331: memset(&ConfigureParams, 0, sizeof(CNF_PARAMS)); ! 332: ! 333: ! 334: /* Set defaults for logging and tracing */ ! 335: strcpy(ConfigureParams.Log.sLogFileName, "stderr"); ! 336: strcpy(ConfigureParams.Log.sTraceFileName, "stderr"); ! 337: ConfigureParams.Log.nTextLogLevel = LOG_TODO; ! 338: ConfigureParams.Log.nAlertDlgLogLevel = LOG_ERROR; ! 339: ConfigureParams.Log.bConfirmQuit = true; ! 340: ! 341: /* Set defaults for config dialog */ ! 342: ConfigureParams.ConfigDialog.bShowConfigDialogAtStartup = true; ! 343: ! 344: /* Set defaults for debugger */ ! 345: ConfigureParams.Debugger.nNumberBase = 10; ! 346: ConfigureParams.Debugger.nDisasmLines = 8; ! 347: ConfigureParams.Debugger.nMemdumpLines = 8; ! 348: ! 349: /* Set defaults for Boot options */ ! 350: ConfigureParams.Boot.nBootDevice = BOOT_ROM; ! 351: ConfigureParams.Boot.bEnableDRAMTest = false; ! 352: ConfigureParams.Boot.bEnablePot = true; ! 353: ConfigureParams.Boot.bEnableSoundTest = true; ! 354: ConfigureParams.Boot.bEnableSCSITest = true; ! 355: ConfigureParams.Boot.bLoopPot = false; ! 356: ConfigureParams.Boot.bVerbose = true; ! 357: ConfigureParams.Boot.bExtendedPot = false; ! 358: ! 359: /* Set defaults for SCSI disks */ ! 360: for (i = 0; i < ESP_MAX_DEVS; i++) { ! 361: strcpy(ConfigureParams.SCSI.target[i].szImageName, psWorkingDir); ! 362: ConfigureParams.SCSI.target[i].nDeviceType = DEVTYPE_NONE; ! 363: ConfigureParams.SCSI.target[i].bDiskInserted = false; ! 364: ConfigureParams.SCSI.target[i].bWriteProtected = false; ! 365: } ! 366: ConfigureParams.SCSI.nWriteProtection = WRITEPROT_OFF; ! 367: ! 368: /* Set defaults for MO drives */ ! 369: for (i = 0; i < MO_MAX_DRIVES; i++) { ! 370: strcpy(ConfigureParams.MO.drive[i].szImageName, psWorkingDir); ! 371: ConfigureParams.MO.drive[i].bDriveConnected = false; ! 372: ConfigureParams.MO.drive[i].bDiskInserted = false; ! 373: ConfigureParams.MO.drive[i].bWriteProtected = false; ! 374: } ! 375: ! 376: /* Set defaults for floppy drives */ ! 377: for (i = 0; i < FLP_MAX_DRIVES; i++) { ! 378: strcpy(ConfigureParams.Floppy.drive[i].szImageName, psWorkingDir); ! 379: ConfigureParams.Floppy.drive[i].bDriveConnected = false; ! 380: ConfigureParams.Floppy.drive[i].bDiskInserted = false; ! 381: ConfigureParams.Floppy.drive[i].bWriteProtected = false; ! 382: } ! 383: ! 384: /* Set defaults for Ethernet */ ! 385: ConfigureParams.Ethernet.bEthernetConnected = false; ! 386: ConfigureParams.Ethernet.bTwistedPair = false; ! 387: ConfigureParams.Ethernet.nHostInterface = ENET_SLIRP; ! 388: strcpy(ConfigureParams.Ethernet.szInterfaceName, ""); ! 389: ! 390: /* Set defaults for Keyboard */ ! 391: ConfigureParams.Keyboard.bSwapCmdAlt = false; ! 392: ConfigureParams.Keyboard.nKeymapType = KEYMAP_SCANCODE; ! 393: strcpy(ConfigureParams.Keyboard.szMappingFileName, ""); ! 394: ! 395: /* Set defaults for Mouse */ ! 396: ConfigureParams.Mouse.fLinSpeedNormal = 1.0; ! 397: ConfigureParams.Mouse.fLinSpeedLocked = 1.0; ! 398: ConfigureParams.Mouse.fExpSpeedNormal = 1.0; ! 399: ConfigureParams.Mouse.fExpSpeedLocked = 1.0; ! 400: ConfigureParams.Mouse.bEnableAutoGrab = true; ! 401: ! 402: /* Set defaults for Shortcuts */ ! 403: ConfigureParams.Shortcut.withoutModifier[SHORTCUT_OPTIONS] = SDLK_F12; ! 404: ConfigureParams.Shortcut.withoutModifier[SHORTCUT_FULLSCREEN] = SDLK_F11; ! 405: ! 406: ConfigureParams.Shortcut.withModifier[SHORTCUT_PAUSE] = SDLK_p; ! 407: ConfigureParams.Shortcut.withModifier[SHORTCUT_DEBUG_M68K] = SDLK_d; ! 408: ConfigureParams.Shortcut.withModifier[SHORTCUT_DEBUG_I860] = SDLK_i; ! 409: ! 410: ConfigureParams.Shortcut.withModifier[SHORTCUT_OPTIONS] = SDLK_o; ! 411: ConfigureParams.Shortcut.withModifier[SHORTCUT_FULLSCREEN] = SDLK_f; ! 412: ConfigureParams.Shortcut.withModifier[SHORTCUT_MOUSEGRAB] = SDLK_m; ! 413: ConfigureParams.Shortcut.withModifier[SHORTCUT_COLDRESET] = SDLK_c; ! 414: ConfigureParams.Shortcut.withModifier[SHORTCUT_WARMRESET] = SDLK_r; ! 415: ConfigureParams.Shortcut.withModifier[SHORTCUT_CURSOREMU] = SDLK_j; ! 416: ConfigureParams.Shortcut.withModifier[SHORTCUT_SOUND] = SDLK_s; ! 417: ConfigureParams.Shortcut.withModifier[SHORTCUT_QUIT] = SDLK_q; ! 418: ConfigureParams.Shortcut.withModifier[SHORTCUT_DIMENSION] = SDLK_n; ! 419: ! 420: /* Set defaults for Memory */ ! 421: memset(ConfigureParams.Memory.nMemoryBankSize, 16, ! 422: sizeof(ConfigureParams.Memory.nMemoryBankSize)); /* 64 MiB */ ! 423: ConfigureParams.Memory.nMemorySpeed = MEMORY_100NS; ! 424: ! 425: /* Set defaults for Printer */ ! 426: ConfigureParams.Printer.bPrinterConnected = false; ! 427: ConfigureParams.Printer.nPaperSize = PAPER_A4; ! 428: sprintf(ConfigureParams.Printer.szPrintToFileName, "%s%c", ! 429: psHomeDir, PATHSEP); ! 430: ! 431: /* Set defaults for Screen */ ! 432: ConfigureParams.Screen.bFullScreen = false; ! 433: ConfigureParams.Screen.nMonitorType = MONITOR_TYPE_CPU; ! 434: ConfigureParams.Screen.nMonitorNum = 0; ! 435: ConfigureParams.Screen.bShowStatusbar = true; ! 436: ConfigureParams.Screen.bShowDriveLed = true; ! 437: ! 438: /* Set defaults for Sound */ ! 439: ConfigureParams.Sound.bEnableMicrophone = true; ! 440: ConfigureParams.Sound.bEnableSound = true; ! 441: ! 442: /* Set defaults for Rom */ ! 443: sprintf(ConfigureParams.Rom.szRom030FileName, "%s%cRev_1.0_v41.BIN", ! 444: Paths_GetWorkingDir(), PATHSEP); ! 445: sprintf(ConfigureParams.Rom.szRom040FileName, "%s%cRev_2.5_v66.BIN", ! 446: Paths_GetWorkingDir(), PATHSEP); ! 447: sprintf(ConfigureParams.Rom.szRomTurboFileName, "%s%cRev_3.3_v74.BIN", ! 448: Paths_GetWorkingDir(), PATHSEP); ! 449: ! 450: ! 451: /* Set defaults for System */ ! 452: ConfigureParams.System.nMachineType = NEXT_CUBE030; ! 453: ConfigureParams.System.bColor = false; ! 454: ConfigureParams.System.bTurbo = false; ! 455: ConfigureParams.System.bNBIC = true; ! 456: ConfigureParams.System.nSCSI = NCR53C90; ! 457: ConfigureParams.System.nRTC = MC68HC68T1; ! 458: ! 459: ConfigureParams.System.nCpuLevel = 3; ! 460: ConfigureParams.System.nCpuFreq = 25; ! 461: ConfigureParams.System.bCompatibleCpu = true; ! 462: ConfigureParams.System.bRealtime = false; ! 463: ConfigureParams.System.nDSPType = DSP_TYPE_EMU; ! 464: ConfigureParams.System.bDSPMemoryExpansion = false; ! 465: ConfigureParams.System.bRealTimeClock = true; ! 466: ConfigureParams.System.n_FPUType = FPU_68882; ! 467: ConfigureParams.System.bCompatibleFPU = true; ! 468: ConfigureParams.System.bMMU = true; ! 469: ! 470: /* Set defaults for Dimension */ ! 471: ConfigureParams.Dimension.bI860Thread = host_num_cpus() != 1; ! 472: ConfigureParams.Dimension.bMainDisplay = false; ! 473: ConfigureParams.Dimension.nMainDisplay = 0; ! 474: for (i = 0; i < ND_MAX_BOARDS; i++) { ! 475: ConfigureParams.Dimension.board[i].bEnabled = false; ! 476: ConfigureParams.Dimension.board[i].nMemoryBankSize[0] = 4; ! 477: ConfigureParams.Dimension.board[i].nMemoryBankSize[1] = 4; ! 478: ConfigureParams.Dimension.board[i].nMemoryBankSize[2] = 4; ! 479: ConfigureParams.Dimension.board[i].nMemoryBankSize[3] = 4; ! 480: sprintf(ConfigureParams.Dimension.board[i].szRomFileName, "%s%cdimension_eeprom.bin", ! 481: Paths_GetWorkingDir(), PATHSEP); ! 482: } ! 483: ! 484: /* Initialize the configuration file name */ ! 485: if (strlen(psHomeDir) < sizeof(sConfigFileName)-13) ! 486: sprintf(sConfigFileName, "%s%cprevious.cfg", psHomeDir, PATHSEP); ! 487: else ! 488: strcpy(sConfigFileName, "previous.cfg"); ! 489: ! 490: #if defined(__AMIGAOS4__) ! 491: /* Fix default path names on Amiga OS */ ! 492: sprintf(ConfigureParams.Rom.szRom030FileName, "%sRev_1.0_v41.BIN", Paths_GetWorkingDir()); ! 493: sprintf(ConfigureParams.Rom.szRom040FileName, "%sRev_2.5_v66.BIN", Paths_GetWorkingDir()); ! 494: sprintf(ConfigureParams.Rom.szRom040FileName, "%sRev_3.3_v74.BIN", Paths_GetWorkingDir()); ! 495: #endif ! 496: } ! 497: ! 498: ! 499: /*-----------------------------------------------------------------------*/ ! 500: /** ! 501: * Helper function for Configuration_Apply, check mouse speed settings ! 502: * to be in the valid range between minimum and maximum value. ! 503: */ ! 504: static void Configuration_CheckFloatMinMax(float *val, float min, float max) ! 505: { ! 506: if (*val<min) ! 507: *val=min; ! 508: if (*val>max) ! 509: *val=max; ! 510: } ! 511: ! 512: ! 513: /*-----------------------------------------------------------------------*/ ! 514: /** ! 515: * Copy details from configuration structure into global variables for system, ! 516: * clean file names, etc... Called from main.c and dialog.c files. ! 517: */ ! 518: void Configuration_Apply(bool bReset) { ! 519: int i; ! 520: ! 521: /* Mouse settings */ ! 522: Configuration_CheckFloatMinMax(&ConfigureParams.Mouse.fLinSpeedNormal,MOUSE_LIN_MIN,MOUSE_LIN_MAX); ! 523: Configuration_CheckFloatMinMax(&ConfigureParams.Mouse.fLinSpeedLocked,MOUSE_LIN_MIN,MOUSE_LIN_MAX); ! 524: Configuration_CheckFloatMinMax(&ConfigureParams.Mouse.fExpSpeedNormal,MOUSE_EXP_MIN,MOUSE_EXP_MAX); ! 525: Configuration_CheckFloatMinMax(&ConfigureParams.Mouse.fExpSpeedLocked,MOUSE_EXP_MIN,MOUSE_EXP_MAX); ! 526: ! 527: /* Check/constrain CPU settings and change corresponding ! 528: * UAE cpu_level & cpu_compatible variables */ ! 529: M68000_CheckCpuSettings(); ! 530: ! 531: /* Check memory size for each bank and change to supported values */ ! 532: Configuration_CheckMemory(ConfigureParams.Memory.nMemoryBankSize); ! 533: ! 534: /* Check nextdimension memory size and screen options */ ! 535: for (i = 0; i < ND_MAX_BOARDS; i++) { ! 536: Configuration_CheckDimensionMemory(ConfigureParams.Dimension.board[i].nMemoryBankSize); ! 537: } ! 538: Configuration_CheckDimensionSettings(); ! 539: ! 540: /* Make sure twisted pair ethernet is disabled on 68030 Cube */ ! 541: Configuration_CheckEthernetSettings(); ! 542: ! 543: /* Clean file and directory names */ ! 544: File_MakeAbsoluteName(ConfigureParams.Rom.szRom030FileName); ! 545: File_MakeAbsoluteName(ConfigureParams.Rom.szRom040FileName); ! 546: File_MakeAbsoluteName(ConfigureParams.Rom.szRomTurboFileName); ! 547: File_MakeAbsoluteName(ConfigureParams.Printer.szPrintToFileName); ! 548: ! 549: for (i = 0; i < ND_MAX_BOARDS; i++) { ! 550: File_MakeAbsoluteName(ConfigureParams.Dimension.board[i].szRomFileName); ! 551: } ! 552: ! 553: for (i = 0; i < ESP_MAX_DEVS; i++) { ! 554: File_MakeAbsoluteName(ConfigureParams.SCSI.target[i].szImageName); ! 555: } ! 556: ! 557: for (i = 0; i < MO_MAX_DRIVES; i++) { ! 558: File_MakeAbsoluteName(ConfigureParams.MO.drive[i].szImageName); ! 559: } ! 560: ! 561: for (i = 0; i < FLP_MAX_DRIVES; i++) { ! 562: File_MakeAbsoluteName(ConfigureParams.Floppy.drive[i].szImageName); ! 563: } ! 564: ! 565: /* make path names absolute, but handle special file names */ ! 566: File_MakeAbsoluteSpecialName(ConfigureParams.Log.sLogFileName); ! 567: File_MakeAbsoluteSpecialName(ConfigureParams.Log.sTraceFileName); ! 568: } ! 569: ! 570: ! 571: /*-----------------------------------------------------------------------*/ ! 572: /** ! 573: * Set defaults depending on selected machine type. ! 574: */ ! 575: void Configuration_SetSystemDefaults(void) { ! 576: for(int i = 0; i < MO_MAX_DRIVES; i++) ! 577: if(ConfigureParams.MO.drive[i].bDriveConnected) ! 578: ConfigureParams.System.bRealtime = false; ! 579: ! 580: switch (ConfigureParams.System.nMachineType) { ! 581: case NEXT_CUBE030: ! 582: ConfigureParams.System.bTurbo = false; ! 583: ConfigureParams.System.bColor = false; ! 584: ConfigureParams.System.nCpuLevel = 3; ! 585: ConfigureParams.System.nCpuFreq = 25; ! 586: ConfigureParams.System.n_FPUType = FPU_68882; ! 587: ConfigureParams.System.nDSPType = DSP_TYPE_EMU; ! 588: ConfigureParams.System.bDSPMemoryExpansion = false; ! 589: ConfigureParams.System.nSCSI = NCR53C90; ! 590: ConfigureParams.System.nRTC = MC68HC68T1; ! 591: ConfigureParams.System.bNBIC = true; ! 592: break; ! 593: ! 594: case NEXT_CUBE040: ! 595: ConfigureParams.System.bColor = false; ! 596: ConfigureParams.System.nCpuLevel = 4; ! 597: if (ConfigureParams.System.bTurbo) { ! 598: ConfigureParams.System.nCpuFreq = 33; ! 599: ConfigureParams.System.nRTC = MCCS1850; ! 600: } else { ! 601: ConfigureParams.System.nCpuFreq = 25; ! 602: ConfigureParams.System.nRTC = MC68HC68T1; ! 603: } ! 604: ConfigureParams.System.n_FPUType = FPU_CPU; ! 605: ConfigureParams.System.nDSPType = DSP_TYPE_EMU; ! 606: ConfigureParams.System.bDSPMemoryExpansion = true; ! 607: ConfigureParams.System.nSCSI = NCR53C90A; ! 608: ConfigureParams.System.bNBIC = true; ! 609: break; ! 610: ! 611: case NEXT_STATION: ! 612: ConfigureParams.System.nCpuLevel = 4; ! 613: if (ConfigureParams.System.bTurbo) { ! 614: ConfigureParams.System.nCpuFreq = 33; ! 615: ConfigureParams.System.nRTC = MCCS1850; ! 616: } else if (ConfigureParams.System.bColor) { ! 617: ConfigureParams.System.nCpuFreq = 25; ! 618: ConfigureParams.System.nRTC = MCCS1850; ! 619: } else { ! 620: ConfigureParams.System.nCpuFreq = 25; ! 621: ConfigureParams.System.nRTC = MC68HC68T1; ! 622: } ! 623: ConfigureParams.System.n_FPUType = FPU_CPU; ! 624: ConfigureParams.System.nDSPType = DSP_TYPE_EMU; ! 625: ConfigureParams.System.bDSPMemoryExpansion = true; ! 626: ConfigureParams.System.nSCSI = NCR53C90A; ! 627: ConfigureParams.System.bNBIC = false; ! 628: break; ! 629: default: ! 630: break; ! 631: } ! 632: ! 633: if (ConfigureParams.System.bTurbo) { ! 634: ConfigureParams.Memory.nMemoryBankSize[0] = 32; ! 635: ConfigureParams.Memory.nMemoryBankSize[1] = 32; ! 636: ConfigureParams.Memory.nMemoryBankSize[2] = 32; ! 637: ConfigureParams.Memory.nMemoryBankSize[3] = 32; ! 638: } else if (ConfigureParams.System.bColor) { ! 639: ConfigureParams.Memory.nMemoryBankSize[0] = 8; ! 640: ConfigureParams.Memory.nMemoryBankSize[1] = 8; ! 641: ConfigureParams.Memory.nMemoryBankSize[2] = 8; ! 642: ConfigureParams.Memory.nMemoryBankSize[3] = 8; ! 643: } else { ! 644: ConfigureParams.Memory.nMemoryBankSize[0] = 16; ! 645: ConfigureParams.Memory.nMemoryBankSize[1] = 16; ! 646: ConfigureParams.Memory.nMemoryBankSize[2] = 16; ! 647: ConfigureParams.Memory.nMemoryBankSize[3] = 16; ! 648: } ! 649: } ! 650: ! 651: ! 652: /*-----------------------------------------------------------------------*/ ! 653: /** ! 654: * Check memory bank sizes for compatibility with the selected system. ! 655: */ ! 656: int Configuration_CheckMemory(int *banksize) { ! 657: int i; ! 658: ! 659: #define RESTRICTIVE_MEMCHECK 0 ! 660: #if RESTRICTIVE_MEMCHECK ! 661: /* To boot we need at least 4 MB in bank0 */ ! 662: if (banksize[0]<4) { ! 663: banksize[0]=4; ! 664: } ! 665: ! 666: /* On monochrome non-Turbo NeXTstations only the first ! 667: * 2 banks are accessible via memory sockets */ ! 668: if (ConfigureParams.System.nMachineType == NEXT_STATION && ! 669: !ConfigureParams.System.bTurbo && !ConfigureParams.System.bColor) { ! 670: banksize[2]=0; ! 671: banksize[3]=0; ! 672: } ! 673: #endif ! 674: ! 675: if (ConfigureParams.System.bTurbo) { ! 676: for (i=0; i<4; i++) { ! 677: if (banksize[i]<=0) ! 678: banksize[i]=0; ! 679: else if (banksize[i]<=2) ! 680: banksize[i]=2; ! 681: else if (banksize[i]<=8) ! 682: banksize[i]=8; ! 683: else if (banksize[i]<=32) ! 684: banksize[i]=32; ! 685: else ! 686: banksize[i]=32; ! 687: } ! 688: } else if (ConfigureParams.System.bColor) { ! 689: for (i=0; i<4; i++) { ! 690: if (banksize[i]<=0) ! 691: banksize[i]=0; ! 692: else if (banksize[i]<=2) ! 693: banksize[i]=2; ! 694: else if (banksize[i]<=8) ! 695: banksize[i]=8; ! 696: else ! 697: banksize[i]=8; ! 698: } ! 699: } else { ! 700: for (i=0; i<4; i++) { ! 701: if (banksize[i]<=0) ! 702: banksize[i]=0; ! 703: else if (banksize[i]<=1) ! 704: banksize[i]=1; ! 705: else if (banksize[i]<=4) ! 706: banksize[i]=4; ! 707: else if (banksize[i]<=16) ! 708: banksize[i]=16; ! 709: else ! 710: banksize[i]=16; ! 711: } ! 712: } ! 713: return (banksize[0]+banksize[1]+banksize[2]+banksize[3]); ! 714: } ! 715: ! 716: int Configuration_CheckDimensionMemory(int *banksize) { ! 717: int i; ! 718: ! 719: #if RESTRICTIVE_MEMCHECK ! 720: /* To boot we need at least 4 MB in bank0 */ ! 721: if (banksize[0]<4) { ! 722: banksize[0]=4; ! 723: } ! 724: #endif ! 725: for (i=0; i<4; i++) { ! 726: if (banksize[i]<=0) ! 727: banksize[i]=0; ! 728: else if (banksize[i]<=4) ! 729: banksize[i]=4; ! 730: else if (banksize[i]<=16) ! 731: banksize[i]=16; ! 732: else ! 733: banksize[i]=16; ! 734: } ! 735: return (banksize[0]+banksize[1]+banksize[2]+banksize[3]); ! 736: } ! 737: ! 738: void Configuration_CheckDimensionSettings(void) { ! 739: int i; ! 740: bool enabled = false; ! 741: ! 742: for (i = 0; i < ND_MAX_BOARDS; i++) { ! 743: if (ConfigureParams.System.nMachineType==NEXT_STATION) { ! 744: ConfigureParams.Dimension.board[i].bEnabled = false; ! 745: } ! 746: if (ConfigureParams.Dimension.board[i].bEnabled) { ! 747: enabled = true; ! 748: } else if (ConfigureParams.Dimension.bMainDisplay) { ! 749: if (ConfigureParams.Dimension.nMainDisplay == i) { ! 750: ConfigureParams.Dimension.bMainDisplay = false; ! 751: ConfigureParams.Screen.nMonitorType = MONITOR_TYPE_CPU; ! 752: } ! 753: } ! 754: } ! 755: if (enabled) { ! 756: ConfigureParams.System.bNBIC = true; ! 757: } else { ! 758: ConfigureParams.Screen.nMonitorType = MONITOR_TYPE_CPU; ! 759: } ! 760: if ((ConfigureParams.Dimension.nMainDisplay >= ND_MAX_BOARDS) || ! 761: (ConfigureParams.Dimension.nMainDisplay < 0)) { ! 762: ConfigureParams.Dimension.nMainDisplay = 0; ! 763: } ! 764: if ((ConfigureParams.Screen.nMonitorNum >= ND_MAX_BOARDS) || ! 765: (ConfigureParams.Screen.nMonitorNum < 0)) { ! 766: ConfigureParams.Screen.nMonitorNum = 0; ! 767: } ! 768: ! 769: ConfigureParams.Dimension.bI860Thread = host_num_cpus() != 1; ! 770: } ! 771: ! 772: void Configuration_CheckEthernetSettings(void) { ! 773: if (ConfigureParams.System.nMachineType == NEXT_CUBE030) { ! 774: ConfigureParams.Ethernet.bTwistedPair = false; ! 775: } ! 776: } ! 777: ! 778: ! 779: /*-----------------------------------------------------------------------*/ ! 780: /** ! 781: * Load a settings section from the configuration file. ! 782: */ ! 783: static int Configuration_LoadSection(const char *pFilename, const struct Config_Tag configs[], const char *pSection) ! 784: { ! 785: int ret; ! 786: ! 787: ret = input_config(pFilename, configs, pSection); ! 788: ! 789: if (ret < 0) ! 790: fprintf(stderr, "Can not load configuration file %s (section %s).\n", ! 791: pFilename, pSection); ! 792: ! 793: return ret; ! 794: } ! 795: ! 796: ! 797: /*-----------------------------------------------------------------------*/ ! 798: /** ! 799: * Load program setting from configuration file. If psFileName is NULL, use ! 800: * the configuration file given in configuration / last selected by user. ! 801: */ ! 802: void Configuration_Load(const char *psFileName) ! 803: { ! 804: if (psFileName == NULL) ! 805: psFileName = sConfigFileName; ! 806: ! 807: if (!File_Exists(psFileName)) ! 808: { ! 809: Log_Printf(LOG_DEBUG, "Configuration file %s not found.\n", psFileName); ! 810: return; ! 811: } ! 812: ! 813: Configuration_LoadSection(psFileName, configs_Log, "[Log]"); ! 814: Configuration_LoadSection(psFileName, configs_ConfigDialog, "[ConfigDialog]"); ! 815: Configuration_LoadSection(psFileName, configs_Debugger, "[Debugger]"); ! 816: Configuration_LoadSection(psFileName, configs_Screen, "[Screen]"); ! 817: Configuration_LoadSection(psFileName, configs_Keyboard, "[Keyboard]"); ! 818: Configuration_LoadSection(psFileName, configs_ShortCutWithMod, "[ShortcutsWithModifiers]"); ! 819: Configuration_LoadSection(psFileName, configs_ShortCutWithoutMod, "[ShortcutsWithoutModifiers]"); ! 820: Configuration_LoadSection(psFileName, configs_Mouse, "[Mouse]"); ! 821: Configuration_LoadSection(psFileName, configs_Sound, "[Sound]"); ! 822: Configuration_LoadSection(psFileName, configs_Memory, "[Memory]"); ! 823: Configuration_LoadSection(psFileName, configs_Boot, "[Boot]"); ! 824: Configuration_LoadSection(psFileName, configs_SCSI, "[HardDisk]"); ! 825: Configuration_LoadSection(psFileName, configs_MO, "[MagnetoOptical]"); ! 826: Configuration_LoadSection(psFileName, configs_Floppy, "[Floppy]"); ! 827: Configuration_LoadSection(psFileName, configs_Ethernet, "[Ethernet]"); ! 828: Configuration_LoadSection(psFileName, configs_Rom, "[ROM]"); ! 829: Configuration_LoadSection(psFileName, configs_Printer, "[Printer]"); ! 830: Configuration_LoadSection(psFileName, configs_System, "[System]"); ! 831: Configuration_LoadSection(psFileName, configs_Dimension, "[Dimension]"); ! 832: } ! 833: ! 834: ! 835: /*-----------------------------------------------------------------------*/ ! 836: /** ! 837: * Save a settings section to configuration file ! 838: */ ! 839: static int Configuration_SaveSection(const char *pFilename, const struct Config_Tag configs[], const char *pSection) ! 840: { ! 841: int ret; ! 842: ! 843: ret = update_config(pFilename, configs, pSection); ! 844: ! 845: if (ret < 0) ! 846: fprintf(stderr, "Error while updating section %s in %s\n", pSection, pFilename); ! 847: ! 848: return ret; ! 849: } ! 850: ! 851: ! 852: /*-----------------------------------------------------------------------*/ ! 853: /** ! 854: * Save program setting to configuration file ! 855: */ ! 856: void Configuration_Save(void) ! 857: { ! 858: if (Configuration_SaveSection(sConfigFileName, configs_Log, "[Log]") < 0) ! 859: { ! 860: Log_AlertDlg(LOG_ERROR, "Error saving config file."); ! 861: return; ! 862: } ! 863: Configuration_SaveSection(sConfigFileName, configs_ConfigDialog, "[ConfigDialog]"); ! 864: Configuration_SaveSection(sConfigFileName, configs_Debugger, "[Debugger]"); ! 865: Configuration_SaveSection(sConfigFileName, configs_Screen, "[Screen]"); ! 866: Configuration_SaveSection(sConfigFileName, configs_Keyboard, "[Keyboard]"); ! 867: Configuration_SaveSection(sConfigFileName, configs_ShortCutWithMod, "[ShortcutsWithModifiers]"); ! 868: Configuration_SaveSection(sConfigFileName, configs_ShortCutWithoutMod, "[ShortcutsWithoutModifiers]"); ! 869: Configuration_SaveSection(sConfigFileName, configs_Mouse, "[Mouse]"); ! 870: Configuration_SaveSection(sConfigFileName, configs_Sound, "[Sound]"); ! 871: Configuration_SaveSection(sConfigFileName, configs_Memory, "[Memory]"); ! 872: Configuration_SaveSection(sConfigFileName, configs_Boot, "[Boot]"); ! 873: Configuration_SaveSection(sConfigFileName, configs_SCSI, "[HardDisk]"); ! 874: Configuration_SaveSection(sConfigFileName, configs_MO, "[MagnetoOptical]"); ! 875: Configuration_SaveSection(sConfigFileName, configs_Floppy, "[Floppy]"); ! 876: Configuration_SaveSection(sConfigFileName, configs_Ethernet, "[Ethernet]"); ! 877: Configuration_SaveSection(sConfigFileName, configs_Rom, "[ROM]"); ! 878: Configuration_SaveSection(sConfigFileName, configs_Printer, "[Printer]"); ! 879: Configuration_SaveSection(sConfigFileName, configs_System, "[System]"); ! 880: Configuration_SaveSection(sConfigFileName, configs_Dimension, "[Dimension]"); ! 881: } ! 882:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.