changeset 960:5711abf1ff39

Improve automatic re-configuration, trying to provide at least usable settings when migrating from another backend library etc.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 20 Nov 2012 22:39:27 +0200
parents 32435407eb9c
children be2a8436461a
files src/xs_config.c
diffstat 1 files changed, 79 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- 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 */