Mercurial > hg > xmms-sid
diff src/xmms-sid.c @ 622:d7389ea52113
Move SLDB and STIL utility functions to xs_slsup.[ch] and amend some changes between XMMS-SID and Aud-SID via a macro mess.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 03 Sep 2007 00:22:04 +0000 |
parents | 59046d70c0ef |
children | 109445214255 |
line wrap: on
line diff
--- a/src/xmms-sid.c Mon Sep 03 00:21:05 2007 +0000 +++ b/src/xmms-sid.c Mon Sep 03 00:22:04 2007 +0000 @@ -39,6 +39,8 @@ #include "xs_interface.h" #include "xs_glade.h" #include "xs_player.h" +#include "xs_slsup.h" + /* * Include player engines @@ -94,13 +96,6 @@ void xs_subctrl_close(void); void xs_subctrl_update(void); -static t_xs_sldb *xs_sldb_db = NULL; -XS_MUTEX(xs_sldb_db); - -gint xs_songlen_init(void); -void xs_songlen_close(void); -t_xs_sldb_node *xs_songlen_get(const gchar *); - /* * Error messages @@ -976,165 +971,3 @@ XS_MUTEX_UNLOCK(xs_status); } - -/* Allocate a new tune information structure - */ -t_xs_tuneinfo *xs_tuneinfo_new(const gchar * pcFilename, - gint nsubTunes, gint startTune, const gchar * sidName, - const gchar * sidComposer, const gchar * sidCopyright, - gint loadAddr, gint initAddr, gint playAddr, - gint dataFileLen, const gchar *sidFormat, gint sidModel) -{ - t_xs_tuneinfo *pResult; - t_xs_sldb_node *tmpLength; - gint i; - - /* Allocate structure */ - pResult = (t_xs_tuneinfo *) g_malloc0(sizeof(t_xs_tuneinfo)); - if (!pResult) { - xs_error(_("Could not allocate memory for t_xs_tuneinfo ('%s')\n"), - pcFilename); - return NULL; - } - - pResult->sidFilename = g_strdup(pcFilename); - if (!pResult->sidFilename) { - xs_error(_("Could not allocate sidFilename ('%s')\n"), - pcFilename); - g_free(pResult); - return NULL; - } - - /* Allocate space for subtune information */ - pResult->subTunes = g_malloc0(sizeof(t_xs_subtuneinfo) * (nsubTunes + 1)); - if (!pResult->subTunes) { - xs_error(_("Could not allocate memory for t_xs_subtuneinfo ('%s', %i)\n"), - pcFilename, nsubTunes); - - g_free(pResult->sidFilename); - g_free(pResult); - return NULL; - } - - /* The following allocations don't matter if they fail */ - pResult->sidName = g_strdup(sidName); - pResult->sidComposer = g_strdup(sidComposer); - pResult->sidCopyright = g_strdup(sidCopyright); - - pResult->nsubTunes = nsubTunes; - pResult->startTune = startTune; - - pResult->loadAddr = loadAddr; - pResult->initAddr = initAddr; - pResult->playAddr = playAddr; - pResult->dataFileLen = dataFileLen; - pResult->sidFormat = g_strdup(sidFormat); - - pResult->sidModel = sidModel; - - /* Get length information (NOTE: Do not free this!) */ - tmpLength = xs_songlen_get(pcFilename); - - /* Fill in sub-tune information */ - for (i = 0; i < pResult->nsubTunes; i++) { - if (tmpLength && (i < tmpLength->nLengths)) - pResult->subTunes[i].tuneLength = tmpLength->sLengths[i]; - else - pResult->subTunes[i].tuneLength = -1; - - pResult->subTunes[i].tuneSpeed = -1; - } - - return pResult; -} - - -/* Free given tune information structure - */ -void xs_tuneinfo_free(t_xs_tuneinfo * pTune) -{ - if (!pTune) return; - - g_free(pTune->subTunes); - g_free(pTune->sidFilename); - g_free(pTune->sidName); - g_free(pTune->sidComposer); - g_free(pTune->sidCopyright); - g_free(pTune->sidFormat); - g_free(pTune); -} - - -/* Song length database handling glue - */ -gint xs_songlen_init(void) -{ - XS_MUTEX_LOCK(xs_cfg); - - if (!xs_cfg.songlenDBPath) { - XS_MUTEX_UNLOCK(xs_cfg); - return -1; - } - - XS_MUTEX_LOCK(xs_sldb_db); - - /* Check if already initialized */ - if (xs_sldb_db) - xs_sldb_free(xs_sldb_db); - - /* Allocate database */ - xs_sldb_db = (t_xs_sldb *) g_malloc0(sizeof(t_xs_sldb)); - if (!xs_sldb_db) { - XS_MUTEX_UNLOCK(xs_cfg); - XS_MUTEX_UNLOCK(xs_sldb_db); - return -2; - } - - /* Read the database */ - if (xs_sldb_read(xs_sldb_db, xs_cfg.songlenDBPath) != 0) { - xs_sldb_free(xs_sldb_db); - xs_sldb_db = NULL; - XS_MUTEX_UNLOCK(xs_cfg); - XS_MUTEX_UNLOCK(xs_sldb_db); - return -3; - } - - /* Create index */ - if (xs_sldb_index(xs_sldb_db) != 0) { - xs_sldb_free(xs_sldb_db); - xs_sldb_db = NULL; - XS_MUTEX_UNLOCK(xs_cfg); - XS_MUTEX_UNLOCK(xs_sldb_db); - return -4; - } - - XS_MUTEX_UNLOCK(xs_cfg); - XS_MUTEX_UNLOCK(xs_sldb_db); - return 0; -} - - -void xs_songlen_close(void) -{ - XS_MUTEX_LOCK(xs_sldb_db); - xs_sldb_free(xs_sldb_db); - xs_sldb_db = NULL; - XS_MUTEX_UNLOCK(xs_sldb_db); -} - - -t_xs_sldb_node *xs_songlen_get(const gchar * pcFilename) -{ - t_xs_sldb_node *pResult; - - XS_MUTEX_LOCK(xs_sldb_db); - - if (xs_cfg.songlenDBEnable && xs_sldb_db) - pResult = xs_sldb_get(xs_sldb_db, pcFilename); - else - pResult = NULL; - - XS_MUTEX_UNLOCK(xs_sldb_db); - - return pResult; -}