# HG changeset patch # User Matti Hamalainen # Date 1353443967 -7200 # Node ID 5711abf1ff39a28787c61e30e4076c940e876cc5 # Parent 32435407eb9c266d236c7badb056eea8fb0b1476 Improve automatic re-configuration, trying to provide at least usable settings when migrating from another backend library etc. diff -r 32435407eb9c -r 5711abf1ff39 src/xs_config.c --- a/src/xs_config.c Tue Nov 20 22:34:47 2012 +0200 +++ b/src/xs_config.c Tue Nov 20 22:39:27 2012 +0200 @@ -213,8 +213,68 @@ /* Check configuration */ -gboolean xs_check_configuration(void) +gboolean xs_check_configuration(gboolean checkOnly) { + gboolean changed = FALSE; + + // Automatic adjustments + switch (xs_cfg.playerEngine) + { +#if !defined(HAVE_SIDPLAYFP) + case XS_ENG_SIDPLAYFP: + changed = TRUE; +#if defined(HAVE_SIDPLAY2) + xs_cfg.playerEngine = XS_ENG_SIDPLAY2; break; +#elif defined(HAVE_SIDPLAY1) + xs_cfg.playerEngine = XS_ENG_SIDPLAY1; break; +#endif +#endif + +#if !defined(HAVE_SIDPLAY2) + case XS_ENG_SIDPLAY2: + changed = TRUE; +#if defined(HAVE_SIDPLAYFP) + xs_cfg.playerEngine = XS_ENG_SIDPLAYFP; break; +#elif defined(HAVE_SIDPLAY1) + xs_cfg.playerEngine = XS_ENG_SIDPLAY1; break; +#endif +#endif + +#if !defined(HAVE_SIDPLAY1) + case XS_ENG_SIDPLAY1: + changed = TRUE; +#if defined(HAVE_SIDPLAYFP) + xs_cfg.playerEngine = XS_ENG_SIDPLAYFP; break; +#elif defined(HAVE_SIDPLAY2) + xs_cfg.playerEngine = XS_ENG_SIDPLAY2; break; +#endif +#endif + } + + switch (xs_cfg.sid2Builder) + { +#if !defined(HAVE_RESID_BUILDER) && defined(HAVE_RESID_FP_BUILDER) + case XS_BLD_RESID: + changed = TRUE; + xs_cfg.sid2Builder = XS_BLD_RESID_FP; break; +#endif +#if defined(HAVE_RESID_BUILDER) && !defined(HAVE_RESID_FP_BUILDER) + case XS_BLD_RESID_FP: + changed = TRUE; + xs_cfg.sid2Builder = XS_BLD_RESID; break; +#endif + +#if !defined(HAVE_HARDSID_BUILDER) + case XS_BLD_HARDSID: + changed = TRUE; +#if defined(HAVE_RESID_FP_BUILDER) + xs_cfg.sid2Builder = XS_BLD_RESID_FP; break; +#elif defined(HAVE_RESID_BUILDER) + xs_cfg.sid2Builder = XS_BLD_RESID; break; +#endif +#endif + } + // Check for plain errors switch (xs_cfg.playerEngine) { @@ -222,6 +282,7 @@ { if (xs_cfg.romPath == NULL || xs_cfg.romPath[0] == 0) { + if (checkOnly) return FALSE; xs_messagebox(_("Error"), _("You have selected libSIDPlayFP backend, but not set the C64 ROM images directory.\n")); return FALSE; @@ -229,6 +290,7 @@ if (!xs_is_dir_path(xs_cfg.romPath)) { + if (checkOnly) return FALSE; xs_messagebox(_("Error"), _("The C64 ROM images directory path '%s' is not a directory.\n"), xs_cfg.romPath); @@ -255,6 +317,7 @@ if (result != NULL) { + if (checkOnly) return FALSE; xs_messagebox(_("Error"), _("Could not load the required C64 ROM image files from '%s'.\n" "\n" @@ -267,26 +330,7 @@ break; } - // Automatic adjustments - switch (xs_cfg.sid2Builder) - { -#if !defined(HAVE_RESID_BUILDER) && defined(HAVE_RESID_FP_BUILDER) - case XS_BLD_RESID: xs_cfg.sid2Builder = XS_BLD_RESID_FP; break; -#endif -#if defined(HAVE_RESID_BUILDER) && !defined(HAVE_RESID_FP_BUILDER) - case XS_BLD_RESID_FP: xs_cfg.sid2Builder = XS_BLD_RESID; break; -#endif -#if !defined(HAVE_HARDSID_BUILDER) - case XS_BLD_HARDSID: -#if defined(HAVE_RESID_FP_BUILDER) - xs_cfg.sid2Builder = XS_BLD_RESID_FP; break; -#elif defined(HAVE_RESID_BUILDER) - xs_cfg.sid2Builder = XS_BLD_RESID; break; -#endif -#endif - } - - return TRUE; + return !changed; } @@ -314,14 +358,17 @@ xs_cfg.sid1Filter.fm = XS_SIDPLAY1_FM; xs_cfg.sid1Filter.ft = XS_SIDPLAY1_FT; -#if defined(HAVE_SIDPLAY2) +#if defined(HAVE_SIDPLAYFP) + xs_cfg.playerEngine = XS_ENG_SIDPLAYFP; + xs_cfg.memoryMode = XS_MPU_REAL; +#elif defined(HAVE_SIDPLAY2) xs_cfg.playerEngine = XS_ENG_SIDPLAY2; xs_cfg.memoryMode = XS_MPU_REAL; #elif defined(HAVE_SIDPLAY1) xs_cfg.playerEngine = XS_ENG_SIDPLAY1; xs_cfg.memoryMode = XS_MPU_BANK_SWITCHING; -#elif !defined(HAVE_SIDPLAYFP) -#error This should not happen! No emulator engines configured in! +#else +# error This should not happen! No emulator engines configured in! #endif xs_cfg.clockSpeed = XS_CLOCK_PAL; @@ -330,7 +377,9 @@ xs_cfg.sid2OptLevel = 0; xs_cfg.sid2NFilterPresets = 0; -#if defined(HAVE_RESID_BUILDER) || defined(HAVE_RESID_FP_BUILDER) +#if defined(HAVE_RESID_FP_BUILDER) + xs_cfg.sid2Builder = XS_BLD_RESID_FP; +#elif defined(HAVE_RESID_BUILDER) xs_cfg.sid2Builder = XS_BLD_RESID; #elif defined(HAVE_HARDSID_BUILDER) xs_cfg.sid2Builder = XS_BLD_HARDSID; @@ -874,6 +923,10 @@ } } + // Do a final check + if (!xs_check_configuration(TRUE)) + configOK = FALSE; + error: if (cfg != NULL) { @@ -1025,7 +1078,7 @@ } // Check the settings - if (!xs_check_configuration()) + if (!xs_check_configuration(FALSE)) goto error; /* Get filter settings */