Annotation of previous_trunk/src/configuration.c, revision 1.1

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: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.