# HG changeset patch # User Matti Hamalainen # Date 1056279663 0 # Node ID 85811bcd049ea8d944e6c762725a8751d6010340 # Parent 6a3ce7260ae17a42871c9e9360d066cc670f80ed Improved, re-written configuration code and lots of minor fixes diff -r 6a3ce7260ae1 -r 85811bcd049e src/Makefile.am --- a/src/Makefile.am Sun Jun 22 00:17:04 2003 +0000 +++ b/src/Makefile.am Sun Jun 22 11:01:03 2003 +0000 @@ -2,7 +2,7 @@ lib_LTLIBRARIES = libxmmssid.la # Generals -AM_CFLAGS = -D_REENTRANT @GTK_CFLAGS@ @SIDPLAY1_INCLUDES@ @SIDPLAY2_INCLUDES@ +AM_CFLAGS = -W -Wall -D_REENTRANT @GTK_CFLAGS@ @SIDPLAY1_INCLUDES@ @SIDPLAY2_INCLUDES@ AM_CXXFLAGS = $(AM_CFLAGS) libxmmssid_la_LDFLAGS = -module -avoid-version diff -r 6a3ce7260ae1 -r 85811bcd049e src/xmms-sid.cc --- a/src/xmms-sid.cc Sun Jun 22 00:17:04 2003 +0000 +++ b/src/xmms-sid.cc Sun Jun 22 11:01:03 2003 +0000 @@ -87,7 +87,8 @@ /* Create sub-song control window */ if (xs_ctrlwin != NULL) { - gdk_window_raise(xs_ctrlwin->window); + if (xs_cfg.alwaysRaise) + gdk_window_raise(xs_ctrlwin->window); return; } @@ -108,6 +109,9 @@ xs_read_configuration(); + add_pixmap_directory(PACKAGE_DATA_DIR "/pixmaps"); + + /* Initialize status */ xs_status.isError = FALSE; xs_status.isPlaying = FALSE; xs_status.nSongs = 0; @@ -138,7 +142,7 @@ /* Initialize STIL structures */ - xs_ctrlwin_open(); +// xs_ctrlwin_open(); // FIXME FIXME FIx ME @@ -581,8 +585,8 @@ */ gchar *xs_filetitle_get(gchar *pcFilename, void *pfInfo, gint iSubTune) { - gint i, j, iLength; - gchar *pcResult; + gint j, iLength; + gchar *pcStr, *pcResult; t_xs_tuneinfo *finfo = (t_xs_tuneinfo *) pfInfo; #ifdef HAVE_XMMSEXTRA TitleInput *ptInput; @@ -635,31 +639,46 @@ return g_strdup(finfo->infoString[0]); } - /* Construct the final result info */ - for (j = i = 0; i < strlen(xs_cfg.titleFormat); i++) + /* Estimate the length of the string */ + pcStr = xs_cfg.titleFormat; + iLength = 0; + while (*pcStr) + { + if (*pcStr == '%') { - if (xs_cfg.titleFormat[i] == '%') - { - switch (xs_cfg.titleFormat[++i]) { - case '1': - xs_strpcat(&pcResult, &j, finfo->authorString); - break; + switch (*(++pcStr)) { + case '1': iLength += strlen(finfo->authorString); break; + case '2': iLength += strlen(finfo->nameString); break; + case '3': iLength += strlen(finfo->copyrightString); break; + case '4': iLength += strlen(finfo->formatString); break; + case '%': iLength++; + } + } else + iLength++; + } - case '2': - xs_strpcat(&pcResult, &j, finfo->nameString); - break; - - case '3': - xs_strpcat(&pcResult, &j, finfo->copyrightString); - break; + /* Allocate memory */ + pcResult = (gchar *) g_malloc(iLength + 2); + if (pcResult == NULL) + return g_strdup(finfo->infoString[0]); - case '4': - xs_strpcat(&pcResult, &j, finfo->formatString); - break; - } /* case */ - } else - pcResult[j++] = xs_cfg.titleFormat[i]; + /* Create the string */ + pcStr = xs_cfg.titleFormat; + j = 0; + while (*pcStr) + { + if (*pcStr == '%') + { + switch (*(++pcStr)) { + case '1': xs_strpcat(pcResult, &j, finfo->authorString); break; + case '2': xs_strpcat(pcResult, &j, finfo->nameString); break; + case '3': xs_strpcat(pcResult, &j, finfo->copyrightString); break; + case '4': xs_strpcat(pcResult, &j, finfo->formatString); break; + case '%': pcResult[j++] = '%'; break; } + } else + pcResult[j++] = *pcStr; + } pcResult[j] = 0; #ifdef HAVE_XMMSEXTRA diff -r 6a3ce7260ae1 -r 85811bcd049e src/xs_config.c --- a/src/xs_config.c Sun Jun 22 00:17:04 2003 +0000 +++ b/src/xs_config.c Sun Jun 22 11:01:03 2003 +0000 @@ -40,37 +40,82 @@ * Configuration specific stuff */ t_xs_cfg_item xs_cfgtable[] = { - {ATYPE_INT, &xs_cfg.fmtBitsPerSample,"fmtBitsPerSample"}, - {ATYPE_INT, &xs_cfg.fmtChannels, "fmtChannels"}, - {ATYPE_INT, &xs_cfg.fmtFrequency, "fmtFrequency"}, + {CTYPE_INT, &xs_cfg.fmtBitsPerSample, "fmtBitsPerSample"}, + {CTYPE_INT, &xs_cfg.fmtChannels, "fmtChannels"}, + {CTYPE_INT, &xs_cfg.fmtFrequency, "fmtFrequency"}, - {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"}, + {CTYPE_BOOL, &xs_cfg.mos8580, "mos8580"}, + {CTYPE_BOOL, &xs_cfg.emulateFilters, "emulateFilters"}, + {CTYPE_FLOAT, &xs_cfg.filterFs, "filterFs"}, + {CTYPE_FLOAT, &xs_cfg.filterFm, "filterFm"}, + {CTYPE_FLOAT, &xs_cfg.filterFt, "filterFt"}, + {CTYPE_INT, &xs_cfg.memoryMode, "memoryMode"}, + {CTYPE_INT, &xs_cfg.clockSpeed, "clockSpeed"}, + {CTYPE_BOOL, &xs_cfg.forceSpeed, "forceSpeed"}, - {ATYPE_BOOL, &xs_cfg.oversampleEnable,"oversampleEnable"}, - {ATYPE_INT, &xs_cfg.oversampleFactor,"oversampleFactor"}, + {CTYPE_BOOL, &xs_cfg.oversampleEnable, "oversampleEnable"}, + {CTYPE_INT, &xs_cfg.oversampleFactor, "oversampleFactor"}, - {ATYPE_BOOL, &xs_cfg.playMaxTimeEnable,"playMaxTimeEnable"}, - {ATYPE_INT, &xs_cfg.playMaxTime, "playMaxTime"}, - {ATYPE_BOOL, &xs_cfg.songlenDBEnable,"songlenDBEnable"}, - {ATYPE_STR, &xs_cfg.songlenDBPath, "songlenDBPath"}, + {CTYPE_BOOL, &xs_cfg.playMaxTimeEnable, "playMaxTimeEnable"}, + {CTYPE_INT, &xs_cfg.playMaxTime, "playMaxTime"}, + {CTYPE_BOOL, &xs_cfg.songlenDBEnable, "songlenDBEnable"}, + {CTYPE_STR, &xs_cfg.songlenDBPath, "songlenDBPath"}, - {ATYPE_BOOL, &xs_cfg.stilDBEnable, "stilDBEnable"}, - {ATYPE_STR, &xs_cfg.stilDBPath, "stilDBPath"}, + {CTYPE_BOOL, &xs_cfg.stilDBEnable, "stilDBEnable"}, + {CTYPE_STR, &xs_cfg.stilDBPath, "stilDBPath"}, - {ATYPE_BOOL, &xs_cfg.detectMagic, "detectMagic"}, + {CTYPE_BOOL, &xs_cfg.detectMagic, "detectMagic"}, + {CTYPE_BOOL, &xs_cfg.alwaysRaise, "alwaysRaise"}, - {ATYPE_BOOL, &xs_cfg.titleOverride, "titleOverride"}, - {ATYPE_STR, &xs_cfg.titleFormat, "titleFormat"} + {CTYPE_BOOL, &xs_cfg.titleOverride, "titleOverride"}, + {CTYPE_STR, &xs_cfg.titleFormat, "titleFormat"} }; -const gint XS_CFGTABLE_MAX = (sizeof(xs_cfgtable) / sizeof(t_xs_cfg_item)); +const gint xs_cfgtable_max = (sizeof(xs_cfgtable) / sizeof(t_xs_cfg_item)); + + +t_xs_wid_item xs_widtable[] = { +{ WTYPE_BGROUP, CTYPE_INT, "cfg_res_16bit", &xs_cfg.fmtBitsPerSample, XS_RES_16BIT }, +{ WTYPE_BGROUP, CTYPE_INT, "cfg_res_8bit", &xs_cfg.fmtBitsPerSample, XS_RES_8BIT }, + +{ WTYPE_BGROUP, CTYPE_INT, "cfg_chn_mono", &xs_cfg.fmtChannels, XS_CHN_MONO }, +{ WTYPE_BGROUP, CTYPE_INT, "cfg_chn_stereo", &xs_cfg.fmtChannels, XS_CHN_STEREO }, +{ WTYPE_BGROUP, CTYPE_INT, "cfg_chn_autopan", &xs_cfg.fmtChannels, XS_CHN_AUTOPAN }, + +{ WTYPE_SPIN, CTYPE_INT, "cfg_samplerate", &xs_cfg.fmtFrequency, 0 }, + +{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_mos8580", &xs_cfg.mos8580, 0 }, +{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_filters", &xs_cfg.emulateFilters, 0 }, + +{ WTYPE_SCALE, CTYPE_FLOAT, "cfg_emu_filt_fs", &xs_cfg.filterFs, 0 }, +{ WTYPE_SCALE, CTYPE_FLOAT, "cfg_emu_filt_fm", &xs_cfg.filterFm, 0 }, +{ WTYPE_SCALE, CTYPE_FLOAT, "cfg_emu_filt_ft", &xs_cfg.filterFt, 0 }, + +{ WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_real", &xs_cfg.memoryMode, XS_MPU_REAL }, +{ WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_banksw", &xs_cfg.memoryMode, XS_MPU_BANK_SWITCHING }, +{ WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_transrom", &xs_cfg.memoryMode, XS_MPU_TRANSPARENT_ROM }, +{ WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_playsid", &xs_cfg.memoryMode, XS_MPU_PLAYSID_ENVIRONMENT }, + +{ WTYPE_BGROUP, CTYPE_INT, "cfg_emu_clock_ntsc", &xs_cfg.clockSpeed, XS_CLOCK_NTSC }, +{ WTYPE_BGROUP, CTYPE_INT, "cfg_emu_clock_pal", &xs_cfg.clockSpeed, XS_CLOCK_PAL }, +{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_clock_force", &xs_cfg.forceSpeed, 0 }, + +{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_sld_usemaxtime", &xs_cfg.playMaxTimeEnable, 0 }, +{ WTYPE_SPIN, CTYPE_INT, "cfg_sld_maxtime", &xs_cfg.playMaxTime, 0 }, +{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_sld_enable", &xs_cfg.songlenDBEnable, 0 }, +{ WTYPE_TEXT, CTYPE_STR, "cfg_sld_dbpath", &xs_cfg.songlenDBPath, 0 }, + +{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_stil_enable", &xs_cfg.stilDBEnable, 0 }, +{ WTYPE_TEXT, CTYPE_STR, "cfg_stil_dbpath", &xs_cfg.stilDBPath, 0 }, + +{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_detectmagic", &xs_cfg.detectMagic, 0 }, +{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_alwaysraise", &xs_cfg.alwaysRaise, 0 }, + +{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_ftitle_override", &xs_cfg.titleOverride, 0 }, +{ WTYPE_TEXT, CTYPE_STR, "cfg_ftitle_format", &xs_cfg.titleFormat, 0 } +}; + +const gint xs_widtable_max = (sizeof(xs_widtable) / sizeof(t_xs_wid_item)); /* @@ -99,7 +144,7 @@ XSDEBUG("initializing configuration ...\n"); /* Pre-initialize configuration structure */ - xs_cfg.fmtBitsPerSample = 16; + xs_cfg.fmtBitsPerSample = XS_RES_16BIT; xs_cfg.fmtChannels = XS_CHN_MONO; xs_cfg.fmtFrequency = 44100; @@ -128,6 +173,7 @@ xs_strcalloc(&xs_cfg.stilDBPath, "~/C64Music/DOCUMENTS/STIL.txt"); xs_cfg.detectMagic = FALSE; + xs_cfg.alwaysRaise = TRUE; #ifdef HAVE_XMMSEXTRA xs_cfg.titleOverride = FALSE; @@ -155,26 +201,26 @@ } /* Read the new settings from XMMS configuration file */ - for (i = 0; i < XS_CFGTABLE_MAX; i++) + 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); + switch (xs_cfgtable[i].valType) { + case CTYPE_INT: + xmms_cfg_read_int(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].valName, (gint *) xs_cfgtable[i].valData); break; - case ATYPE_BOOL: - xmms_cfg_read_boolean(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gboolean *) xs_cfgtable[i].adata); + case CTYPE_BOOL: + xmms_cfg_read_boolean(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].valName, (gboolean *) xs_cfgtable[i].valData); break; - case ATYPE_FLOAT: - xmms_cfg_read_float(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gfloat *) xs_cfgtable[i].adata); + case CTYPE_FLOAT: + xmms_cfg_read_float(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].valName, (gfloat *) xs_cfgtable[i].valData); break; - case ATYPE_STR: - if (xmms_cfg_read_string(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gchar **) &tmpStr)) + case CTYPE_STR: + if (xmms_cfg_read_string(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].valName, (gchar **) &tmpStr)) { /* Read was successfull */ - xs_strcalloc((gchar **) xs_cfgtable[i].adata, tmpStr); + xs_strcalloc((gchar **) xs_cfgtable[i].valData, tmpStr); g_free(tmpStr); } break; @@ -220,23 +266,23 @@ /* Write the new settings to XMMS configuration file */ - for (i = 0; i < XS_CFGTABLE_MAX; i++) + 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); + switch (xs_cfgtable[i].valType) { + case CTYPE_INT: + xmms_cfg_write_int(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].valName, *(gint *) xs_cfgtable[i].valData); break; - case ATYPE_BOOL: - xmms_cfg_write_boolean(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gboolean *) xs_cfgtable[i].adata); + case CTYPE_BOOL: + xmms_cfg_write_boolean(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].valName, *(gboolean *) xs_cfgtable[i].valData); break; - case ATYPE_FLOAT: - xmms_cfg_write_float(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gfloat *) xs_cfgtable[i].adata); + case CTYPE_FLOAT: + xmms_cfg_write_float(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].valName, *(gfloat *) xs_cfgtable[i].valData); break; - case ATYPE_STR: - xmms_cfg_write_string(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gchar **) xs_cfgtable[i].adata); + case CTYPE_STR: + xmms_cfg_write_string(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].valName, *(gchar **) xs_cfgtable[i].valData); break; default: @@ -275,80 +321,64 @@ */ void xs_cfg_ok(void) { + gint i; + gfloat tmpValue; + XSDEBUG("get data from widgets to config...\n"); - /* 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(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; - - - /* Frequency setting */ - xs_cfg.fmtFrequency = (gint) GTK_ADJUSTMENT(LUW("cfg_samplerate"))->value; - - - /* Filter and waveform settings */ - xs_cfg.mos8580 = GTK_TOGGLE_BUTTON(LUW("cfg_emu_mos8580"))->active; - - xs_cfg.emulateFilters = GTK_TOGGLE_BUTTON(LUW("cfg_emu_filters"))->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; - + for (i = 0; i < xs_widtable_max; i++) + { + switch (xs_widtable[i].widType) { + case WTYPE_BGROUP: + /* Check if toggle-button is active */ + if (GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName))->active) + { + /* Yes, set the constant value */ + *((gint *) xs_widtable[i].valData) = xs_widtable[i].valSet; + } + break; + + case WTYPE_SPIN: + case WTYPE_SCALE: + /* Get the value */ + switch (xs_widtable[i].widType) { + case WTYPE_SPIN: + tmpValue = gtk_spin_button_get_adjustment( + GTK_SPIN_BUTTON(LUW(xs_widtable[i].widName)))->value; + break; + + case WTYPE_SCALE: + tmpValue = gtk_range_get_adjustment( + GTK_RANGE(LUW(xs_widtable[i].widName)))->value; + break; + } + + /* Set the value */ + switch (xs_widtable[i].valType) { + case CTYPE_INT: + *((gint *) xs_widtable[i].valData) = (gint) tmpValue; + break; - /* Memorymode settings */ - if (GTK_TOGGLE_BUTTON(LUW("cfg_emu_mem_real"))->active) - xs_cfg.memoryMode = XS_MPU_REAL; - else - if (GTK_TOGGLE_BUTTON(LUW("cfg_emu_mem_banksw"))->active) - xs_cfg.memoryMode = XS_MPU_BANK_SWITCHING; - else - if (GTK_TOGGLE_BUTTON(LUW("cfg_emu_mem_transrom"))->active) - xs_cfg.memoryMode = XS_MPU_TRANSPARENT_ROM; - else - if (GTK_TOGGLE_BUTTON(LUW("cfg_emu_mem_playsid"))->active) - xs_cfg.memoryMode = XS_MPU_PLAYSID_ENVIRONMENT; - - /* Clockspeed settings */ - if (GTK_TOGGLE_BUTTON(LUW("cfg_clock_ntsc"))->active) - xs_cfg.clockSpeed = XS_CLOCK_NTSC; - else - xs_cfg.clockSpeed = XS_CLOCK_PAL; + case CTYPE_FLOAT: + *((gfloat *) xs_widtable[i].valData) = tmpValue; + break; + } + break; + + case WTYPE_BUTTON: + /* Check if toggle-button is active */ + *((gboolean *) xs_widtable[i].valData) = + (GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName))->active); + break; - xs_cfg.forceSpeed = GTK_TOGGLE_BUTTON(LUW("cfg_clock_force"))->active; - - - /* 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; - - 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")))); - - - /* 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")))); - - xs_cfg.detectMagic = GTK_TOGGLE_BUTTON(LUW("cfg_detectmagic"))->active; - - /* 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 WTYPE_TEXT: + /* Get text from text-widget */ + xs_strcalloc((gchar **) xs_widtable[i].valData, + gtk_entry_get_text(GTK_ENTRY(LUW(xs_widtable[i].widName))) + ); + break; + } + } /* Write settings */ xs_write_configuration(); @@ -362,23 +392,15 @@ /* - * Update filter setting sliders - */ -void xs_update_filters(void) -{ - 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 */ void xs_cfg_filter_reset(void) { xs_reset_filters(); - xs_update_filters(); + + gtk_adjustment_set_value(gtk_range_get_adjustment(GTK_RANGE(LUW("cfg_emu_filt_fs"))), xs_cfg.filterFs); + gtk_adjustment_set_value(gtk_range_get_adjustment(GTK_RANGE(LUW("cfg_emu_filt_fm"))), xs_cfg.filterFm); + gtk_adjustment_set_value(gtk_range_get_adjustment(GTK_RANGE(LUW("cfg_emu_filt_ft"))), xs_cfg.filterFt); } @@ -402,8 +424,7 @@ { /* Selection was accepted! */ gtk_entry_set_text(GTK_ENTRY(LUW("cfg_sld_dbpath")), - gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_sldb_fileselector)) - ); + gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_sldb_fileselector))); /* Close file selector window */ gtk_widget_destroy(xs_sldb_fileselector); @@ -438,7 +459,7 @@ void xs_cfg_stil_fs_ok(void) { /* Selection was accepted! */ - gtk_entry_set_text(GTK_ENTRY(LUW("cfg_stil_path")), + gtk_entry_set_text(GTK_ENTRY(LUW("cfg_stil_dbpath")), gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_stil_fileselector))); /* Close file selector window */ @@ -460,6 +481,9 @@ */ void xs_configure(void) { + gint i; + gfloat tmpValue; + /* Check if the window already exists */ if (xs_configwin != NULL) { @@ -494,96 +518,70 @@ gtk_widget_set_sensitive(LUW("cfg_ftitle_override"), FALSE); xs_cfg.titleOverride = TRUE; #endif - - /* Sound resolution settings */ - switch (xs_cfg.fmtBitsPerSample) { - case XS_RES_16BIT: - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_res_16bit")), TRUE); - break; - case XS_RES_8BIT: - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_res_8bit")), TRUE); - break; - } - - gtk_adjustment_set_value(GTK_ADJUSTMENT(LUW("cfg_samplerate_adj")), xs_cfg.fmtFrequency); - - /* Channel settings */ - switch (xs_cfg.fmtChannels) { - case XS_CHN_MONO: - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_chn_mono")), TRUE); - break; - case XS_CHN_STEREO: - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_chn_stereo")), TRUE); - break; - case XS_CHN_AUTOPAN: - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_chn_autopan")), TRUE); - break; - } - /* Memorymode settings */ - switch (xs_cfg.memoryMode) { - case XS_MPU_REAL: - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_emu_mem_real")), TRUE); + /* Set current data to widgets */ + for (i = 0; i < xs_widtable_max; i++) + { + switch (xs_widtable[i].widType) { + case WTYPE_BGROUP: + /* Check if current value matches the given one */ + gtk_toggle_button_set_active( + GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName)), + (*((gint *) xs_widtable[i].valData) == xs_widtable[i].valSet) + ); break; + + + case WTYPE_SPIN: + case WTYPE_SCALE: + /* Get the value */ + switch (xs_widtable[i].valType) { + case CTYPE_INT: + tmpValue = (gfloat) *((gint *) xs_widtable[i].valData); + break; - case XS_MPU_BANK_SWITCHING: - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_emu_mem_banksw")), TRUE); + case CTYPE_FLOAT: + tmpValue = *((gfloat *) xs_widtable[i].valData); + break; + } + + /* Set the value */ + switch (xs_widtable[i].widType) { + case WTYPE_SPIN: + gtk_adjustment_set_value( + gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(LUW(xs_widtable[i].widName))), + tmpValue); + break; + + case WTYPE_SCALE: + gtk_adjustment_set_value( + gtk_range_get_adjustment(GTK_RANGE(LUW(xs_widtable[i].widName))), + tmpValue); + break; + } break; - - case XS_MPU_TRANSPARENT_ROM: - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_emu_mem_transrom")), TRUE); + + case WTYPE_BUTTON: + /* Set toggle-button */ + gtk_toggle_button_set_active( + GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName)), + *((gboolean *) xs_widtable[i].valData) + ); break; - case XS_MPU_PLAYSID_ENVIRONMENT: - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_emu_mem_playsid")), TRUE); + case WTYPE_TEXT: + /* Set text to text-widget */ + if (*(gchar **) xs_widtable[i].valData != NULL) + { + gtk_entry_set_text( + GTK_ENTRY(LUW(xs_widtable[i].widName)), + *(gchar **) xs_widtable[i].valData); + } break; - } - - - /* Filter and waveform settings */ - if (xs_cfg.mos8580) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_emu_mos8580")), TRUE); - else - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_emu_mos6581")), TRUE); - - if (xs_cfg.emulateFilters) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_emu_filters")), TRUE); - - xs_update_filters(); - - - /* Song-length database */ - if (xs_cfg.playMaxTimeEnable) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_sld_usemaxtime")), TRUE); - - gtk_adjustment_set_value(GTK_ADJUSTMENT(LUW("cfg_sld_maxtime_adj")), xs_cfg.playMaxTime); - - if (xs_cfg.songlenDBEnable) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_sld")), TRUE); - - if (xs_cfg.songlenDBPath != NULL) - gtk_entry_set_text(GTK_ENTRY(LUW("cfg_sld_dbpath")), xs_cfg.songlenDBPath); - - - /* STIL and miscellaneous settings */ - if (xs_cfg.stilDBEnable) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_stil_use")), TRUE); - - if (xs_cfg.stilDBPath != NULL) - gtk_entry_set_text(GTK_ENTRY(LUW("cfg_stil_path")), xs_cfg.stilDBPath); - - if (xs_cfg.detectMagic) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_detectmagic")), TRUE); - - - /* Title-settings */ - if (xs_cfg.titleOverride) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_ftitle_override")), TRUE); - - if (xs_cfg.titleFormat != NULL) - gtk_entry_set_text(GTK_ENTRY(LUW("cfg_ftitle_format")), xs_cfg.titleFormat); - + } + } + gtk_widget_show(xs_configwin); } diff -r 6a3ce7260ae1 -r 85811bcd049e src/xs_config.h --- a/src/xs_config.h Sun Jun 22 00:17:04 2003 +0000 +++ b/src/xs_config.h Sun Jun 22 11:01:03 2003 +0000 @@ -56,28 +56,29 @@ gfloat filterFs; gfloat filterFm; gfloat filterFt; - gint memoryMode; + gint memoryMode; /* See XS_MPU-constants */ gint clockSpeed; /* PAL (50Hz) or NTSC (60Hz) */ gboolean forceSpeed; /* TRUE = force to given clockspeed */ - gboolean oversampleEnable; /* TRUE = oversample */ + gboolean oversampleEnable; gint oversampleFactor; /* Factor of oversampling */ /* Playing settings */ - gboolean playMaxTimeEnable; /* TRUE = use MAX playtime */ + gboolean playMaxTimeEnable; gint playMaxTime; /* MAX playtime in seconds */ gboolean songlenDBEnable; - gchar *songlenDBPath; + gchar *songlenDBPath; /* Path to Songlengths.txt */ /* Miscellaneous settings */ gboolean stilDBEnable; - gchar *stilDBPath; + gchar *stilDBPath; /* Path to STIL.txt */ gboolean detectMagic; + gboolean alwaysRaise; - gboolean titleOverride; + gboolean titleOverride; /* TRUE if XMMS titles are overriden */ gchar *titleFormat; } xs_cfg; @@ -86,20 +87,37 @@ * Configuration-file */ enum { - ATYPE_INT = 1, - ATYPE_FLOAT, - ATYPE_STR, - ATYPE_BOOL + CTYPE_INT = 1, + CTYPE_FLOAT, + CTYPE_STR, + CTYPE_BOOL +}; + +enum { + WTYPE_BGROUP = 1, + WTYPE_SPIN, + WTYPE_SCALE, + WTYPE_BUTTON, + WTYPE_TEXT }; typedef struct { - gint atype; /* Type of item (ATYPE_*) */ - void *adata; /* Pointer to variable */ - gchar *aname; /* Name of configuration item */ + gint valType; /* Type of item (ATYPE_*) */ + void *valData; /* Pointer to variable */ + gchar *valName; /* Name of configuration item */ } t_xs_cfg_item; +typedef struct { + gint widType; + gint valType; + gchar *widName; + void *valData; + gint valSet; +} t_xs_wid_item; + + /* * Functions */ diff -r 6a3ce7260ae1 -r 85811bcd049e src/xs_length.c --- a/src/xs_length.c Sun Jun 22 00:17:04 2003 +0000 +++ b/src/xs_length.c Sun Jun 22 11:01:03 2003 +0000 @@ -199,11 +199,12 @@ /* * Read database to memory */ -gint xs_db_read(gchar *dbFilename, t_xs_dbentry **dataBase) +gint xs_db_read(gchar *dbFilename) { FILE *inFile; gchar inLine[XS_BUFSIZE]; - gint lineNum, linePos, iOK; + guint lineNum, linePos; + gboolean iOK; t_xs_dbentry *tmpNode; /* Try to open the file */ @@ -264,9 +265,9 @@ } else { /* First playtime is after '=' */ linePos++; - iOK = 1; + iOK = TRUE; - while ((linePos < strlen(inLine)) && (iOK)) + while ((linePos < strlen(inLine)) && iOK) { xs_findnext(inLine, &linePos); @@ -276,7 +277,7 @@ xs_gettime(inLine, &linePos); tmpNode->nLengths++; } else - iOK = 0; + iOK = FALSE; } /* Add an entry to db in memory */ @@ -325,7 +326,7 @@ if (xs_cfg.songlenDBPath == NULL) return -10; - if (xs_db_read(xs_cfg.songlenDBPath, &xs_database) < 0) + if (xs_db_read(xs_cfg.songlenDBPath) < 0) return -9; /* Get size of db */ @@ -562,11 +563,8 @@ { dbEntry = xs_db_get(dbHash); - if (dbEntry) - { - if ((subTune >= 0) && (subTune < dbEntry->nLengths)) - iResult = dbEntry->sLengths[subTune - 1]; - } + if (dbEntry && (subTune >= 0) && (subTune < dbEntry->nLengths)) + iResult = dbEntry->sLengths[subTune - 1]; } } #if 0 diff -r 6a3ce7260ae1 -r 85811bcd049e src/xs_support.c --- a/src/xs_support.c Sun Jun 22 00:17:04 2003 +0000 +++ b/src/xs_support.c Sun Jun 22 11:01:03 2003 +0000 @@ -60,24 +60,15 @@ } -int xs_strpcat(gchar **ppcResult, gint *j, const gchar *pcStr) +gint xs_strpcat(gchar *pcResult, gint *j, const gchar *pcStr) { - int iLen; - - assert(ppcResult); + assert(pcResult); assert(pcStr); assert(j); - /* Get length of the pcString to be catted */ - iLen = strlen(pcStr); - (*j) += iLen; - - /* Re-allocate memory for destination */ - *ppcResult = (gchar *) g_realloc(*ppcResult, strlen(*ppcResult) + iLen + 1); - if (*ppcResult == NULL) return -1; - /* Cat to the destination */ - strcat(*ppcResult, pcStr); + strcpy((pcResult+(*j)), pcStr); + (*j) += strlen(pcStr); return 0; } diff -r 6a3ce7260ae1 -r 85811bcd049e src/xs_support.h --- a/src/xs_support.h Sun Jun 22 00:17:04 2003 +0000 +++ b/src/xs_support.h Sun Jun 22 11:01:03 2003 +0000 @@ -12,7 +12,7 @@ */ gint xs_strcalloc(gchar **, const gchar *); gint xs_strcat(gchar **, const gchar *); -gint xs_strpcat(gchar **, gint *, const gchar *); +gint xs_strpcat(gchar *, gint *, const gchar *); gchar *xs_strrchr(gchar *, gchar); inline void xs_findnext(gchar *, gint *); inline void xs_findnum(gchar *, gint *);