# HG changeset patch # User Matti Hamalainen # Date 1074221582 0 # Node ID 4162a5370b9ef88760c7cd056cb7a74b43572e48 # Parent 0d5d0126cce67a85e586c622910cafef827805ae Added "seek"-subsong control option, in style of xmms-sidplay. diff -r 0d5d0126cce6 -r 4162a5370b9e src/xmms-sid.c --- a/src/xmms-sid.c Fri Jan 16 02:52:00 2004 +0000 +++ b/src/xmms-sid.c Fri Jan 16 02:53:02 2004 +0000 @@ -466,19 +466,24 @@ */ void xs_seek(gint iTime) { - gint n; + /* Check status */ if (!xs_status.pTune || !xs_status.isPlaying) return; - + + /* Act according to settings */ switch (xs_cfg.subsongControl) { - case XS_SSC_POPUP: + case XS_SSC_SEEK: pthread_mutex_lock(&xs_mutex); - - n = xs_status.pTune->subTunes[xs_status.currSong].tuneLength; - if ((iTime > 0) && (iTime <= n)) + if (iTime < xs_status.lastTime) { - xs_status.currSong = 1 + ((iTime * xs_status.pTune->nsubTunes) / n); + if (xs_status.currSong > 1) + xs_status.currSong--; + } else + if (iTime > xs_status.lastTime) + { + if (xs_status.currSong < xs_status.pTune->nsubTunes) + xs_status.currSong++; } - + pthread_mutex_unlock(&xs_mutex); break; @@ -518,15 +523,20 @@ return -1; /* Let's see what we do */ + switch (xs_cfg.subsongControl) { + case XS_SSC_SEEK: + xs_status.lastTime = xs_plugin_ip.output->output_time() / 1000; + break; + #ifdef HAVE_SONG_POSITION - if (xs_cfg.subsongControl == XS_SSC_PATCH) - { + case XS_SSC_PATCH: pthread_mutex_lock(&xs_mutex); set_song_position(xs_status.currSong, 1, xs_status.pTune->nsubTunes); pthread_mutex_unlock(&xs_mutex); - } + break; #endif - + } + /* Else, return output time reported by audio output plugin */ return xs_plugin_ip.output->output_time(); } diff -r 0d5d0126cce6 -r 4162a5370b9e src/xmms-sid.h --- a/src/xmms-sid.h Fri Jan 16 02:52:00 2004 +0000 +++ b/src/xmms-sid.h Fri Jan 16 02:53:02 2004 +0000 @@ -84,7 +84,8 @@ audioBitsPerSample; void *player; gboolean isError, isPlaying; - gint currSong; + gint currSong, + lastTime; t_xs_tune *pTune; } t_xs_status; diff -r 0d5d0126cce6 -r 4162a5370b9e src/xs_config.c --- a/src/xs_config.c Fri Jan 16 02:52:00 2004 +0000 +++ b/src/xs_config.c Fri Jan 16 02:53:02 2004 +0000 @@ -128,6 +128,7 @@ { WTYPE_TEXT, CTYPE_STR, "cfg_hvsc_path", &xs_cfg.hvscPath, 0 }, { WTYPE_BGROUP, CTYPE_INT, "cfg_subsong_none", &xs_cfg.subsongControl, XS_SSC_NONE }, +{ WTYPE_BGROUP, CTYPE_INT, "cfg_subsong_seek", &xs_cfg.subsongControl, XS_SSC_SEEK }, { WTYPE_BGROUP, CTYPE_INT, "cfg_subsong_popup", &xs_cfg.subsongControl, XS_SSC_POPUP }, { WTYPE_BGROUP, CTYPE_INT, "cfg_subsong_patch", &xs_cfg.subsongControl, XS_SSC_PATCH }, diff -r 0d5d0126cce6 -r 4162a5370b9e src/xs_config.h --- a/src/xs_config.h Fri Jan 16 02:52:00 2004 +0000 +++ b/src/xs_config.h Fri Jan 16 02:53:02 2004 +0000 @@ -57,7 +57,8 @@ enum XS_SSC { XS_SSC_NONE = 1, XS_SSC_POPUP, - XS_SSC_PATCH + XS_SSC_PATCH, + XS_SSC_SEEK }; @@ -111,7 +112,7 @@ /* - * Configuration-file + * Configuration-file */ enum { CTYPE_INT = 1, diff -r 0d5d0126cce6 -r 4162a5370b9e src/xs_stil.c --- a/src/xs_stil.c Fri Jan 16 02:52:00 2004 +0000 +++ b/src/xs_stil.c Fri Jan 16 02:53:02 2004 +0000 @@ -137,6 +137,7 @@ lineNum = 0; isError = FALSE; tmpNode = NULL; + subEntry = 0; while (!feof(inFile) && !isError) {