Mercurial > hg > xmms-sid
view src/xs_title.c @ 957:0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
FP, as it seems the engine configuration has some persistence despite
reconfiguration between loaded files if same engine object is retained. This
caused, for example, 2SID stereo tunes being played "mono" if played after a
normal 1-SID tune. Duh.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 20 Nov 2012 22:13:48 +0200 |
parents | 61a527ac3baa |
children | be2a8436461a |
line wrap: on
line source
/* XMMS-SID - SIDPlay input plugin for X MultiMedia System (XMMS) Titlestring handling Programmed and designed by Matti 'ccr' Hamalainen <ccr@tnsp.org> (C) Copyright 1999-2009 Tecnic Software productions (TNSP) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "xs_title.h" #include "xs_support.h" #include "xs_config.h" static void xs_path_split(gchar *path, gchar **tmpFilename, gchar **tmpFilePath, gchar **tmpFileExt) { gchar *tmpStr; /* Split the filename into path */ *tmpFilePath = g_strdup(path); tmpStr = strrchr(*tmpFilePath, '/'); if (tmpStr) tmpStr[1] = 0; /* Filename */ *tmpFilename = strrchr(path, '/'); if (*tmpFilename) *tmpFilename = g_strdup(*tmpFilename + 1); else *tmpFilename = g_strdup(path); tmpStr = strrchr(*tmpFilename, '.'); tmpStr[0] = 0; /* Extension */ *tmpFileExt = strrchr(path, '.'); } /* Create a title string based on given information and settings. */ #define VPUTCH(MCH) \ if (index < XS_BUF_SIZE) tmpBuf[index++] = MCH; #define VPUTSTR(MSTR) { \ if (MSTR != NULL) { \ if ((index + strlen(MSTR) + 1) < XS_BUF_SIZE) { \ strcpy(&tmpBuf[index], MSTR); \ index += strlen(MSTR); \ } else \ index = XS_BUF_SIZE; \ } \ } gchar *xs_make_titlestring(XSTuneInfo *p, gint subTune) { gchar *tmpFilename, *tmpFilePath, *tmpFileExt, *str, *result, tmpStr[XS_BUF_SIZE], tmpBuf[XS_BUF_SIZE]; XSSubTuneInfo *subInfo; gint index; /* Get filename parts */ xs_path_split(p->sidFilename, &tmpFilename, &tmpFilePath, &tmpFileExt); /* Get sub-tune information */ if ((subTune > 0) && (subTune <= p->nsubTunes)) { subInfo = &(p->subTunes[subTune - 1]); } else subInfo = NULL; /* Check if the titles are overridden or not */ #if !defined(AUDACIOUS_PLUGIN) if (!xs_cfg.titleOverride) { TitleInput *pTuple; pTuple = (TitleInput *) g_malloc0(sizeof(TitleInput)); pTuple->__size = XMMS_TITLEINPUT_SIZE; pTuple->__version = XMMS_TITLEINPUT_VERSION; /* Create the input fields */ pTuple->file_name = tmpFilename; pTuple->file_ext = tmpFileExt; pTuple->file_path = tmpFilePath; pTuple->track_name = g_strdup(p->sidName); pTuple->track_number = subTune; pTuple->album_name = NULL; pTuple->performer = g_strdup(p->sidComposer); pTuple->date = g_strdup((p->sidModel == XS_SIDMODEL_6581) ? "SID6581" : "SID8580"); pTuple->year = 0; pTuple->genre = g_strdup("SID-tune"); pTuple->comment = g_strdup(p->sidCopyright); result = xmms_get_titlestring(xmms_get_gentitle_format(), pTuple); g_free(pTuple->track_name); g_free(pTuple->album_name); g_free(pTuple->performer); g_free(pTuple->date); g_free(pTuple->genre); g_free(pTuple->comment); g_free(pTuple); } else #endif { /* Create the string */ str = xs_cfg.titleFormat; index = 0; while (*str && (index < XS_BUF_SIZE)) { if (*str == '%') { str++; switch (*str) { case '%': VPUTCH('%'); break; case 'f': VPUTSTR(tmpFilename); break; case 'F': VPUTSTR(tmpFilePath); break; case 'e': VPUTSTR(tmpFileExt); break; case 'p': VPUTSTR(p->sidComposer); break; case 't': VPUTSTR(p->sidName); break; case 'c': VPUTSTR(p->sidCopyright); break; case 's': VPUTSTR(p->sidFormat); break; case 'm': switch (p->sidModel) { case XS_SIDMODEL_6581: VPUTSTR("6581"); break; case XS_SIDMODEL_8580: VPUTSTR("8580"); break; case XS_SIDMODEL_ANY: VPUTSTR("ANY"); break; default: VPUTSTR("?"); break; } break; case 'C': if (subInfo && (subInfo->tuneSpeed > 0)) { switch (subInfo->tuneSpeed) { case XS_CLOCK_PAL: VPUTSTR("PAL"); break; case XS_CLOCK_NTSC: VPUTSTR("NTSC"); break; case XS_CLOCK_ANY: VPUTSTR("ANY"); break; case XS_CLOCK_VBI: VPUTSTR("VBI"); break; case XS_CLOCK_CIA: VPUTSTR("CIA"); break; default: g_snprintf(tmpStr, XS_BUF_SIZE, "%iHz", subInfo->tuneSpeed); VPUTSTR(tmpStr); } } else VPUTSTR("?"); break; case 'n': g_snprintf(tmpStr, XS_BUF_SIZE, "%i", subTune); VPUTSTR(tmpStr); break; case 'N': g_snprintf(tmpStr, XS_BUF_SIZE, "%i", p->nsubTunes); VPUTSTR(tmpStr); break; } } else VPUTCH(*str); str++; } tmpBuf[index] = 0; /* Make resulting string */ result = g_strdup(tmpBuf); } /* Free temporary strings */ g_free(tmpFilename); g_free(tmpFilePath); return result; }