diff src/xs_config.c @ 40:1788f4ce6a44

Numerous changes towards 0.8
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 19 Jun 2003 22:38:01 +0000
parents 271be59be975
children 0f00ebab063d
line wrap: on
line diff
--- a/src/xs_config.c	Thu Jun 19 20:49:01 2003 +0000
+++ b/src/xs_config.c	Thu Jun 19 22:38:01 2003 +0000
@@ -19,10 +19,9 @@
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */
+#include "xs_config.h"
 #include <xmms/configfile.h>
 #include <stdio.h>
-#include "xmms-sid.h"
-#include "xs_config.h"
 #include "xs_glade.h"
 #include "xs_interface.h"
 
@@ -30,51 +29,48 @@
 /*
  * Global widgets
  */
-static GtkWidget	*xs_configwin = NULL;
+static GtkWidget	*xs_configwin = NULL,
+			*xs_sldb_fileselector = NULL,
+			*xs_stil_fileselector = NULL;
+
+#define LUW(x...)	lookup_widget(xs_configwin, ## x)
 
 
 /*
  * Configuration specific stuff
  */
-#define XS_CFGTABLE_MAX	25
-
-t_xs_cfg_item xs_cfgtable[XS_CFGTABLE_MAX] = {
-	{ATYPE_INT, &xs_cfg.fmtBitsPerSample, "bitsPerSample"},
-	{ATYPE_INT, &xs_cfg.fmtChannels, "channels"},
-	{ATYPE_INT, &xs_cfg.fmtFrequency, "frequency"},
-
-	{ATYPE_BOOL,&xs_cfg.muffledOutput, "muffledOutput"},
-	{ATYPE_BOOL,&xs_cfg.addStaticNoise, "addStaticNoise"},
+t_xs_cfg_item xs_cfgtable[] = {
+	{ATYPE_INT,	&xs_cfg.fmtBitsPerSample,"bitsPerSample"},
+	{ATYPE_INT,	&xs_cfg.fmtChannels,	"channels"},
+	{ATYPE_INT,	&xs_cfg.fmtFrequency,	"frequency"},
 
-
-	{ATYPE_BOOL,  &xs_cfg.mos8580, "mos8580"},
-	{ATYPE_BOOL,  &xs_cfg.emulateFilter, "emulateFilter"},
-	{ATYPE_FLOAT, &xs_cfg.filterFs, "filterFs"},
-	{ATYPE_FLOAT, &xs_cfg.filterFm, "filterFm"},
-	{ATYPE_FLOAT, &xs_cfg.filterFt, "filterFt"},
-	{ATYPE_INT,   &xs_cfg.memoryMode, "memoryMode"},
-	{ATYPE_INT,   &xs_cfg.clockSpeed, "clockSpeed"},
-	{ATYPE_BOOL,  &xs_cfg.forceSpeed, "forceSpeed"},
+	{ATYPE_BOOL,	&xs_cfg.mos8580,	"mos8580"},
+	{ATYPE_BOOL,	&xs_cfg.emulateFilters,	"emulateFilters"},
+	{ATYPE_FLOAT,	&xs_cfg.filterFs,	"filterFs"},
+	{ATYPE_FLOAT,	&xs_cfg.filterFm,	"filterFm"},
+	{ATYPE_FLOAT,	&xs_cfg.filterFt,	"filterFt"},
+	{ATYPE_INT,	&xs_cfg.memoryMode,	"memoryMode"},
+	{ATYPE_INT,	&xs_cfg.clockSpeed,	"clockSpeed"},
+	{ATYPE_BOOL,	&xs_cfg.forceSpeed,	"forceSpeed"},
 
+	{ATYPE_BOOL,	&xs_cfg.oversampleEnable,"oversampleEnable"},
+	{ATYPE_INT,	&xs_cfg.oversampleFactor,"oversampleFactor"},
 
-	{ATYPE_BOOL,&xs_cfg.playUseMaxTime, "playUseMaxTime"},
-	{ATYPE_INT, &xs_cfg.playMaxTime, "playMaxTime"},
-	{ATYPE_INT, &xs_cfg.playMethod, "playMethod"},
-	{ATYPE_INT, &xs_cfg.playMaxSilentTime, "playMaxSilentTime"},
-	{ATYPE_INT, &xs_cfg.playSilentPercent, "playSilentPercent"},
-	{ATYPE_STR, &xs_cfg.playDBPath, "playDBPath"},
+	{ATYPE_BOOL,	&xs_cfg.playMaxTimeEnable,"playMaxTimeEnable"},
+	{ATYPE_INT,	&xs_cfg.playMaxTime,	"playMaxTime"},
+	{ATYPE_BOOL,	&xs_cfg.songlenDBEnable,"songlenDBEnable"},
+	{ATYPE_STR,	&xs_cfg.songlenDBPath,	"songlenDBPath"},
 
-	
-	{ATYPE_BOOL,&xs_cfg.useSTIL, "useSTIL"},
-	{ATYPE_STR, &xs_cfg.STILpath, "STILpath"},
+	{ATYPE_BOOL,	&xs_cfg.stilDBEnable,	"useSTIL"},
+	{ATYPE_STR,	&xs_cfg.stilDBPath,	"STILpath"},
+
+	{ATYPE_BOOL,	&xs_cfg.detectMagic,	"detectMagic"},
 
-	{ATYPE_BOOL, &xs_cfg.finfoUseColors, "useColors"},
-	{ATYPE_BOOL,&xs_cfg.detectMagic, "detectMagic"},
-
+	{ATYPE_BOOL,	&xs_cfg.titleOverride,	"titleOverride"},
+	{ATYPE_STR,	&xs_cfg.titleFormat,	"fileInfo"}
+};
 
-	{ATYPE_BOOL, &xs_cfg.titleOverride, "titleOverride"},
-	{ATYPE_STR, &xs_cfg.titleFormat, "fileInfo"}
-};
+const gint XS_CFGTABLE_MAX = (sizeof(xs_cfgtable) / sizeof(t_xs_cfg_item));
 
 
 /*
@@ -82,12 +78,11 @@
  */
 void xs_reset_filters(void)
 {
-	/* Reset filter values */
-// FIXME FIX ME
+ /* Reset filter values */
 /*
-	xs_cfg.filterFs = XMMS_SID_DEFAULT_FILTERFS;
-	xs_cfg.filterFm = XMMS_SID_DEFAULT_FILTERFM;
-	xs_cfg.filterFt = XMMS_SID_DEFAULT_FILTERFT;
+ xs_cfg.filterFs = SIDEMU_DEFAULTFILTERFS;
+ xs_cfg.filterFm = SIDEMU_DEFAULTFILTERFM;
+ xs_cfg.filterFt = SIDEMU_DEFAULTFILTERFT;
 */
 }
 
@@ -95,316 +90,331 @@
 /*
  * Get the configuration (from file or default)
  */
-void xs_get_configure(void)
+void xs_read_configuration(void)
 {
-	gchar *cfg_fn, *tmpstr;
-	ConfigFile *cfg_file;
-	gint i;
-
-	XSDEBUG("initializing configuration ...\n");
+ gchar *cfgFilename, *tmpStr;
+ ConfigFile *cfgFile;
+ gint i;
 
-	/* Pre-initialize configuration structure */
-	xs_cfg.fmtBitsPerSample = 16;
-	xs_cfg.fmtChannels = XMMS_SID_CHN_MONO;
-	xs_cfg.fmtFrequency = 44100;
+ XSDEBUG("initializing configuration ...\n");
 
-	xs_cfg.muffledOutput = FALSE;
-	xs_cfg.addStaticNoise = FALSE;
-
+ /* Pre-initialize configuration structure */
+ xs_cfg.fmtBitsPerSample		= 16;
+ xs_cfg.fmtChannels		= XS_CHN_MONO;
+ xs_cfg.fmtFrequency		= 44100;
 
-	xs_cfg.mos8580 = FALSE;
-	xs_cfg.emulateFilter = TRUE;
-	xs_reset_filters();
-	xs_cfg.memoryMode = XMMS_SID_MPU_BANK_SWITCHING;
-	xs_cfg.clockSpeed = XMMS_SID_CLOCK_PAL;
-	xs_cfg.forceSpeed = FALSE;
+ xs_cfg.mos8580			= FALSE;
+ xs_cfg.emulateFilters		= TRUE;
+ xs_reset_filters();
+ xs_cfg.memoryMode		= XS_MPU_BANK_SWITCHING;
+ xs_cfg.clockSpeed		= XS_CLOCK_PAL;
+ xs_cfg.forceSpeed		= FALSE;
 
+ xs_cfg.oversampleEnable	= FALSE;
+ xs_cfg.oversampleFactor	= XS_MIN_OVERSAMPLE;
 
-	xs_cfg.playUseMaxTime = FALSE;
-	xs_cfg.playMaxTime = 150;
-	xs_cfg.playMethod = XMMS_SID_PMETHOD_NONE;
-	xs_cfg.playMaxSilentTime = 20;
-	xs_cfg.playSilentPercent = 3;
-	xs_strcalloc(&xs_cfg.playDBPath, "~/C64Music/Songlength.txt");
+ xs_cfg.playMaxTimeEnable	= FALSE;
+ xs_cfg.playMaxTime		= 150;
+ xs_cfg.songlenDBEnable		= FALSE;
+ xs_strcalloc(&xs_cfg.songlenDBPath, "~/C64Music/Songlengths.txt");
 
+ xs_cfg.stilDBEnable		= FALSE;
+ xs_strcalloc(&xs_cfg.stilDBPath, "~/C64Music/DOCUMENTS/STIL.txt");
 
-	xs_cfg.useSTIL = FALSE;
-	xs_strcalloc(&xs_cfg.STILpath, "~/C64Music/DOCUMENTS/STIL.txt");
+ xs_cfg.detectMagic		= FALSE;
 
-	xs_cfg.finfoUseColors = TRUE;
-	xs_cfg.detectMagic = FALSE;
+ xs_cfg.titleOverride		= FALSE;
+ xs_strcalloc(&xs_cfg.titleFormat, "%1 - %2");
 
 
-	xs_cfg.titleOverride = FALSE;
-	xs_strcalloc(&xs_cfg.titleFormat, "%1 - %2");
-
-
-	/* Try to open the XMMS configuration file */
-	XSDEBUG("loading from config-file ...\n");
-
-	cfg_fn = g_strconcat(g_get_home_dir(), "/.xmms/config", NULL);
-	cfg_file = xmms_cfg_open_file(cfg_fn);
-	g_free(cfg_fn);
-	if (cfg_file == NULL) return;
-
-
-	/* Read the new settings from XMMS configuration file */
-	for (i = 0; i < XS_CFGTABLE_MAX; i++) {
-
-		switch (xs_cfgtable[i].atype) {
-		case ATYPE_INT:
-			xmms_cfg_read_int(cfg_file, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gint *) xs_cfgtable[i].adata);
-			break;
+ /* Try to open the XMMS configuration file */
+ XSDEBUG("loading from config-file ...\n");
 
-		case ATYPE_BOOL:
-			xmms_cfg_read_boolean(cfg_file, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gboolean *) xs_cfgtable[i].adata);
-			break;
-
-		case ATYPE_FLOAT:
-			xmms_cfg_read_float(cfg_file, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gfloat *) xs_cfgtable[i].adata);
-			break;
-
-		case ATYPE_STR:
-			if (xmms_cfg_read_string(cfg_file, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gchar **) &tmpstr))
-				{
-				/* Read was successfull */
-				xs_strcalloc((gchar **) xs_cfgtable[i].adata, tmpstr);
-				g_free(tmpstr);
-				}
-			break;
-
-		default:
-			XSERR("Internal: Unsupported setting type found while reading configuration file. Please report to author!\n");
-			break;
-		}
+ cfgFilename = g_strconcat(g_get_home_dir(), XS_CONFIG_FILE, NULL);
+ cfgFile = xmms_cfg_open_file(cfgFilename);
+ g_free(cfgFilename);
+ if (cfgFile == NULL)
+	{
+	XSDEBUG("could not open configuration file, trying to write defaults...\n");
+	xs_write_configuration();
+	return;
 	}
 
 
-	/* Free the config file */
-	xmms_cfg_free(cfg_file);
+ /* Read the new settings from XMMS configuration file */
+ for (i = 0; i < XS_CFGTABLE_MAX; i++)
+ 	{
+	switch (xs_cfgtable[i].atype) {
+	case ATYPE_INT:
+		xmms_cfg_read_int(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gint *) xs_cfgtable[i].adata);
+		break;
+
+	case ATYPE_BOOL:
+		xmms_cfg_read_boolean(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gboolean *) xs_cfgtable[i].adata);
+		break;
+
+	case ATYPE_FLOAT:
+		xmms_cfg_read_float(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gfloat *) xs_cfgtable[i].adata);
+		break;
 
-	XSDEBUG("OK\n");
+	case ATYPE_STR:
+		if (xmms_cfg_read_string(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gchar **) &tmpStr))
+			{
+			/* Read was successfull */
+			xs_strcalloc((gchar **) xs_cfgtable[i].adata, tmpStr);
+			g_free(tmpStr);
+			}
+		break;
+
+	default:
+		XSERR("Internal: Unsupported setting type found while reading configuration file. Please report to author!\n");
+		break;
+	}
+	}
+
+
+ /* Free the config file */
+ xmms_cfg_free(cfgFile);
+
+ xs_write_configuration();
+ 
+ XSDEBUG("OK\n");
 }
 
-#if 0
+
+
+/*
+ * Write the current configuration
+ */
+gint xs_write_configuration(void)
+{
+ gchar *cfgFilename;
+ ConfigFile *cfgFile;
+ gint i;
+
+ XSDEBUG("writing configuration ...\n");
+
+ /*
+  * Try to open the XMMS configuration file
+  */
+ cfgFilename = g_strconcat(g_get_home_dir(), XS_CONFIG_FILE, NULL);
+ cfgFile = xmms_cfg_open_file(cfgFilename);
+
+ if (!cfgFile)
+	cfgFile = xmms_cfg_new();
+
+
+ /* Write the new settings to XMMS configuration file */
+ for (i = 0; i < XS_CFGTABLE_MAX; i++)
+ 	{
+	switch (xs_cfgtable[i].atype) {
+	case ATYPE_INT:
+		xmms_cfg_write_int(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gint *) xs_cfgtable[i].adata);
+		break;
+
+	case ATYPE_BOOL:
+		xmms_cfg_write_boolean(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gboolean *) xs_cfgtable[i].adata);
+		break;
+
+	case ATYPE_FLOAT:
+		xmms_cfg_write_float(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gfloat *) xs_cfgtable[i].adata);
+		break;
+
+	case ATYPE_STR:
+		xmms_cfg_write_string(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gchar **) xs_cfgtable[i].adata);
+		break;
+
+	default:
+		XSERR("Internal: Unsupported setting type found while writing configuration file. Please report to author!\n");
+		break;
+	}
+	}
+
+ /* Flush the file */
+ xmms_cfg_write_file(cfgFile, cfgFilename);
+
+ /* Free the memory areas */
+ xmms_cfg_free(cfgFile);
+ g_free(cfgFilename);
+
+ return 0;
+}
+
+
 /*
  * Configuration panel was canceled
  */
-void xs_configure_cancel(void)
+void xs_cfg_cancel(void)
 {
-	gtk_widget_destroy(xs_configwin);
-	xs_configwin = NULL;
+ gtk_widget_destroy(xs_configwin);
+ xs_configwin = NULL;
 }
 
 
 /*
  * Configuration was accepted (OK), save the settings
  */
-void xs_configure_ok(void)
+void xs_cfg_ok(void)
 {
-	ConfigFile *cfg_file;
-	gchar *cfg_fn;
-	gint i;
+ XSDEBUG("get data from widgets to config...\n");
 
-	XSDEBUG("get data from widgets to config...\n");
-
-	/* Check the resolution settings */
-	if (GTK_TOGGLE_BUTTON(cfg_res_16bit)->active)
-		xs_cfg.fmtBitsPerSample = 16;
-	else if (GTK_TOGGLE_BUTTON(cfg_res_8bit)->active)
-		xs_cfg.fmtBitsPerSample = 8;
+ /* Check the resolution settings */
+ if (GTK_TOGGLE_BUTTON(LUW("cfg_res_16bit"))->active)
+	xs_cfg.fmtBitsPerSample = XS_RES_16BIT;
+	else
+	xs_cfg.fmtBitsPerSample = XS_RES_8BIT;
 
 
-	/* Channel settings */
-	if (GTK_TOGGLE_BUTTON(cfg_chn_mono)->active)
-		xs_cfg.fmtChannels = XMMS_SID_CHN_MONO;
-	else if (GTK_TOGGLE_BUTTON(cfg_chn_stereo)->active)
-		xs_cfg.fmtChannels = XMMS_SID_CHN_STEREO;
-	else if (GTK_TOGGLE_BUTTON(cfg_chn_autopan)->active)
-		xs_cfg.fmtChannels = XMMS_SID_CHN_AUTOPAN;
-
-	/* Frequency setting */
-	xs_cfg.fmtFrequency = (gint) GTK_ADJUSTMENT(cfg_samplerate_adj)->value;
-
-	/* Experimental settings */
-	xs_cfg.muffledOutput = GTK_TOGGLE_BUTTON(cfg_muffledoutput)->active;
-	xs_cfg.addStaticNoise = GTK_TOGGLE_BUTTON(cfg_addstaticnoise)->active;
+ /* Channel settings */
+ if (GTK_TOGGLE_BUTTON(LUW("cfg_chn_mono"))->active)
+	xs_cfg.fmtChannels = XS_CHN_MONO;
+	else
+ if (GTK_TOGGLE_BUTTON(LUW("cfg_chn_stereo"))->active)
+	xs_cfg.fmtChannels = XS_CHN_STEREO;
+	else
+ if (GTK_TOGGLE_BUTTON(LUW("cfg_chn_autopan"))->active)
+	xs_cfg.fmtChannels = XS_CHN_AUTOPAN;
 
 
-	/* Filter and waveform settings */
-	xs_cfg.mos8580 = ((GTK_TOGGLE_BUTTON(cfg_wav_mos8580)->active) && (!GTK_TOGGLE_BUTTON(cfg_wav_mos6581)->active));
-
-	xs_cfg.emulateFilter = GTK_TOGGLE_BUTTON(cfg_emufilters)->active;
-
-	xs_cfg.filterFs = GTK_ADJUSTMENT(cfg_filt_fs_adj)->value;
-	xs_cfg.filterFm = GTK_ADJUSTMENT(cfg_filt_fm_adj)->value;
-	xs_cfg.filterFt = GTK_ADJUSTMENT(cfg_filt_ft_adj)->value;
+ /* Frequency setting */
+ xs_cfg.fmtFrequency = (gint) GTK_ADJUSTMENT(LUW("cfg_samplerate_adj"))->value;
 
 
-	/* Memorymode settings */
-	if (GTK_TOGGLE_BUTTON(cfg_mem_banksw)->active)
-		xs_cfg.memoryMode = XMMS_SID_MPU_BANK_SWITCHING;
-	else if (GTK_TOGGLE_BUTTON(cfg_mem_transrom)->active)
-		xs_cfg.memoryMode = XMMS_SID_MPU_TRANSPARENT_ROM;
-	else if (GTK_TOGGLE_BUTTON(cfg_mem_playsid)->active)
-		xs_cfg.memoryMode = XMMS_SID_MPU_PLAYSID_ENVIRONMENT;
+ /* Filter and waveform settings */
+ xs_cfg.mos8580 = GTK_TOGGLE_BUTTON(LUW("cfg_wav_mos8580"))->active;
 
+ xs_cfg.emulateFilters = GTK_TOGGLE_BUTTON(LUW("cfg_emufilters"))->active;
 
-	/* Clockspeed settings */
-	if (GTK_TOGGLE_BUTTON(cfg_clock_pal)->active)
-		xs_cfg.clockSpeed = XMMS_SID_CLOCK_PAL;
-	else if (GTK_TOGGLE_BUTTON(cfg_clock_ntsc)->active)
-		xs_cfg.clockSpeed = XMMS_SID_CLOCK_NTSC;
-
-	xs_cfg.forceSpeed = GTK_TOGGLE_BUTTON(cfg_clock_force)->active;
+ xs_cfg.filterFs = GTK_ADJUSTMENT(LUW("cfg_filt_fs_adj"))->value;
+ xs_cfg.filterFm = GTK_ADJUSTMENT(LUW("cfg_filt_fm_adj"))->value;
+ xs_cfg.filterFt = GTK_ADJUSTMENT(LUW("cfg_filt_ft_adj"))->value;
 
 
-	/* Songlength-detection settings */
-	xs_cfg.playUseMaxTime = GTK_TOGGLE_BUTTON(cfg_sld_usemaxtime)->active;
-	xs_cfg.playMaxTime = GTK_ADJUSTMENT(cfg_sld_maxtime_adj)->value;
-
-	if (GTK_TOGGLE_BUTTON(cfg_sld_none)->active)
-		xs_cfg.playMethod = XMMS_SID_PMETHOD_NONE;
-	else if (GTK_TOGGLE_BUTTON(cfg_sld_maxsilence)->active)
-		xs_cfg.playMethod = XMMS_SID_PMETHOD_MAXSILENCE;
-	else if (GTK_TOGGLE_BUTTON(cfg_sld_database)->active)
-		xs_cfg.playMethod = XMMS_SID_PMETHOD_DATABASE;
-
-	xs_cfg.playMaxSilentTime = GTK_ADJUSTMENT(cfg_sld_silencetime_adj)->value;
-	xs_cfg.playSilentPercent = GTK_ADJUSTMENT(cfg_sld_percentage_adj)->value;
+ /* Memorymode settings */
+ if (GTK_TOGGLE_BUTTON(LUW("cfg_mem_banksw"))->active)
+	xs_cfg.memoryMode = XS_MPU_BANK_SWITCHING;
+	else
+ if (GTK_TOGGLE_BUTTON(LUW("cfg_mem_transrom"))->active)
+	xs_cfg.memoryMode = XS_MPU_TRANSPARENT_ROM;
+	else
+ if (GTK_TOGGLE_BUTTON(LUW("cfg_mem_playsid"))->active)
+	xs_cfg.memoryMode = XS_MPU_PLAYSID_ENVIRONMENT;
 
-	xs_strcalloc(&xs_cfg.playDBPath, gtk_entry_get_text(GTK_ENTRY(cfg_sld_dbpath)));
-
-
-	/* STIL and miscellaneous settings */
-	xs_cfg.useSTIL = GTK_TOGGLE_BUTTON(cfg_stil_use)->active;
-
-	xs_strcalloc(&xs_cfg.STILpath, gtk_entry_get_text(GTK_ENTRY(cfg_stil_path)));
+ /* Clockspeed settings */
+ if (GTK_TOGGLE_BUTTON(LUW("cfg_clock_ntsc"))->active)
+	xs_cfg.clockSpeed = XS_CLOCK_NTSC;
+	else
+	xs_cfg.clockSpeed = XS_CLOCK_PAL;
 
-	xs_cfg.finfoUseColors = GTK_TOGGLE_BUTTON(cfg_finfo_usecolors)->active;
-	xs_cfg.detectMagic = GTK_TOGGLE_BUTTON(cfg_detectmagic)->active;
-
-
-	/* Title settings */
-	xs_cfg.titleOverride = GTK_TOGGLE_BUTTON(cfg_ftitle_override)->active;
-
-	xs_strcalloc(&xs_cfg.titleFormat, gtk_entry_get_text(GTK_ENTRY(cfg_ftitle_format)));
+ xs_cfg.forceSpeed = GTK_TOGGLE_BUTTON(LUW("cfg_clock_force"))->active;
 
 
-	/*
-	 * Try to open the XMMS configuration file
-	 */
-	cfg_fn = g_strconcat(g_get_home_dir(), "/.xmms/config", NULL);
-	cfg_file = xmms_cfg_open_file(cfg_fn);
+ /* Songlength-detection settings */
+ xs_cfg.playMaxTimeEnable = GTK_TOGGLE_BUTTON(LUW("cfg_sld_usemaxtime"))->active;
+ xs_cfg.playMaxTime = GTK_ADJUSTMENT(LUW("cfg_sld_maxtime_adj"))->value;
 
-	if (!cfg_file)
-		cfg_file = xmms_cfg_new();
+ xs_cfg.songlenDBEnable = (GTK_TOGGLE_BUTTON(LUW("cfg_sld"))->active);
+ xs_strcalloc(&xs_cfg.songlenDBPath, gtk_entry_get_text(GTK_ENTRY(LUW("cfg_sld_dbpath"))));
 
 
-	/* Write the new settings to XMMS configuration file */
-	for (i = 0; i < XS_CFGTABLE_MAX; i++) {
-
-		switch (xs_cfgtable[i].atype) {
-		case ATYPE_INT:
-			xmms_cfg_write_int(cfg_file, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gint *) xs_cfgtable[i].adata);
-			break;
+ /* STIL and miscellaneous settings */
+ xs_cfg.stilDBEnable = GTK_TOGGLE_BUTTON(LUW("cfg_stil_use"))->active;
+ xs_strcalloc(&xs_cfg.stilDBPath, gtk_entry_get_text(GTK_ENTRY(LUW("cfg_stil_path"))));
 
-		case ATYPE_BOOL:
-			xmms_cfg_write_boolean(cfg_file, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gboolean *) xs_cfgtable[i].adata);
-			break;
+ xs_cfg.detectMagic = GTK_TOGGLE_BUTTON(LUW("cfg_detectmagic"))->active;
 
-		case ATYPE_FLOAT:
-			xmms_cfg_write_float(cfg_file, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gfloat *) xs_cfgtable[i].adata);
-			break;
+ /* Title settings */
+ xs_cfg.titleOverride = GTK_TOGGLE_BUTTON(LUW("cfg_ftitle_override"))->active;
+ xs_strcalloc(&xs_cfg.titleFormat, gtk_entry_get_text(GTK_ENTRY(LUW("cfg_ftitle_format"))));
 
-		case ATYPE_STR:
-			xmms_cfg_write_string(cfg_file, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gchar **) xs_cfgtable[i].adata);
-			break;
 
-		default:
-			XSERR("Internal: Unsupported setting type found while writing configuration file. Please report to author!\n");
-			break;
-		}
-
-	}
+ /* Write settings */
+ xs_write_configuration();
 
-	/* Flush the file */
-	xmms_cfg_write_file(cfg_file, cfg_fn);
+/* NOTICE/FIXME FIX ME: if songlendb or stildb settings changed, we need to flush and reread them */
 
-	/* Free the memory areas */
-	xmms_cfg_free(cfg_file);
-
-	g_free(cfg_fn);
-
-	gtk_widget_destroy(xs_configwin);
-	xs_configwin = NULL;
+ /* Close window */
+ gtk_widget_destroy(xs_configwin);
+ xs_configwin = NULL;
 }
 
 
 /*
  * Update filter setting sliders
  */
-static void xs_update_filters(void)
+void xs_update_filters(void)
 {
-	gtk_adjustment_set_value(GTK_ADJUSTMENT(cfg_filt_fs_adj), xs_cfg.filterFs);
-	gtk_adjustment_set_value(GTK_ADJUSTMENT(cfg_filt_fm_adj), xs_cfg.filterFm);
-	gtk_adjustment_set_value(GTK_ADJUSTMENT(cfg_filt_ft_adj), xs_cfg.filterFt);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(LUW("cfg_filt_fs_adj")), xs_cfg.filterFs);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(LUW("cfg_filt_fm_adj")), xs_cfg.filterFm);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(LUW("cfg_filt_ft_adj")), xs_cfg.filterFt);
 }
 
 
 /*
  * Reset filter settings to defaults
  */
-static void xs_cfg_filter_reset(void)
+void xs_cfg_filter_reset(void)
 {
-	xs_reset_filters();
-	xs_update_filters();
+ xs_reset_filters();
+ xs_update_filters();
 }
 
 
 /*
  * HVSC songlength-database file selector response-functions
  */
-void xs_cfg_sld_fs_ok(void)
+void xs_cfg_sld_dbbrowse(GtkButton *button, gpointer user_data)
 {
-	/* Selection was accepted! */
-	gtk_entry_set_text(GTK_ENTRY(cfg_sld_dbpath), gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_sld_fileselector))
-	    );
-
-	/* Close file selector window */
-	gtk_widget_destroy(xs_sld_fileselector);
-	xs_sld_fileselector = NULL;
 }
 
 
-void xs_cfg_sld_fs_cancel(void)
+void xs_cfg_sldb_fs_ok(void)
 {
-	/* Close file selector window */
-	gtk_widget_destroy(xs_sld_fileselector);
-	xs_sld_fileselector = NULL;
+ /* Selection was accepted! */
+ gtk_entry_set_text(GTK_ENTRY(LUW("cfg_sld_dbpath")),
+ 	gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_sldb_fileselector))
+ 	);
+
+ /* Close file selector window */
+ gtk_widget_destroy(xs_sldb_fileselector);
+ xs_sldb_fileselector = NULL;
+}
+
+
+void xs_cfg_sldb_fs_cancel(void)
+{
+ /* Close file selector window */
+ gtk_widget_destroy(xs_sldb_fileselector);
+ xs_sldb_fileselector = NULL;
 }
 
 
 /*
  * STIL-database file selector response-functions
  */
+void xs_cfg_stil_browse(GtkButton *button, gpointer user_data)
+{
+
+}
+
+
 void xs_cfg_stil_fs_ok(void)
 {
-	/* Selection was accepted! */
-	gtk_entry_set_text(GTK_ENTRY(cfg_stil_path), gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_stil_fileselector))
-	    );
+ /* Selection was accepted! */
+ gtk_entry_set_text(GTK_ENTRY(LUW("cfg_stil_path")),
+ 	gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_stil_fileselector)));
 
-	/* Close file selector window */
-	gtk_widget_destroy(xs_stil_fileselector);
-	xs_stil_fileselector = NULL;
+ /* Close file selector window */
+ gtk_widget_destroy(xs_stil_fileselector);
+ xs_stil_fileselector = NULL;
 }
 
 
 void xs_cfg_stil_fs_cancel(void)
 {
-	/* Close file selector window */
-	gtk_widget_destroy(xs_stil_fileselector);
-	xs_stil_fileselector = NULL;
+ /* Close file selector window */
+ gtk_widget_destroy(xs_stil_fileselector);
+ xs_stil_fileselector = NULL;
 }
 
 
@@ -413,15 +423,17 @@
  */
 void xs_configure(void)
 {
-
-	/* Check if the window already exists */
-	if (xs_configwin != NULL) {
-		gdk_window_raise(xs_configwin->window);
-		return;
+ /* Check if the window already exists */
+ if (xs_configwin != NULL)
+	{
+	gdk_window_raise(xs_configwin->window);
+	return;
 	}
 
-
-
+ /* Create the window */
+ xs_configwin = create_xs_configwin();
+ 	
+#if 0
 
 	/* Set the states of widgets */
 
@@ -454,15 +466,15 @@
 
 	/* Memorymode settings */
 	switch (xs_cfg.memoryMode) {
-	case XMMS_SID_MPU_BANK_SWITCHING:
+	case XS_MPU_BANK_SWITCHING:
 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cfg_mem_banksw), TRUE);
 		break;
 
-	case XMMS_SID_MPU_TRANSPARENT_ROM:
+	case XS_MPU_TRANSPARENT_ROM:
 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cfg_mem_transrom), TRUE);
 		break;
 
-	case XMMS_SID_MPU_PLAYSID_ENVIRONMENT:
+	case XS_MPU_PLAYSID_ENVIRONMENT:
 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cfg_mem_playsid), TRUE);
 		break;
 	}
@@ -485,16 +497,16 @@
 
 	/* Song-length detection */
 	switch (xs_cfg.playMethod) {
-	case XMMS_SID_PMETHOD_NONE:
+	case XS_PMETHOD_NONE:
 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cfg_sld_none), TRUE);
 		break;
 
-	case XMMS_SID_PMETHOD_MAXSILENCE:
+	case XS_PMETHOD_MAXSILENCE:
 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cfg_sld_maxsilence), TRUE);
 		break;
 
 
-	case XMMS_SID_PMETHOD_DATABASE:
+	case XS_PMETHOD_DATABASE:
 		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cfg_sld_database), TRUE);
 		break;
 	}
@@ -539,11 +551,8 @@
 		gtk_entry_set_text(GTK_ENTRY(cfg_ftitle_format), xs_cfg.titleFormat);
 		}
 
+#endif
 
-	gtk_widget_show(xs_configwin);
+ gtk_widget_show(xs_configwin);
 }
 
-#endif
-void xs_configure(void)
-{
-}