Mercurial > audlegacy-plugins
diff src/sid/xs_title.c @ 12:3da1b8942b8b trunk
[svn] - remove src/Input src/Output src/Effect src/General src/Visualization src/Container
author | nenolod |
---|---|
date | Mon, 18 Sep 2006 03:14:20 -0700 |
parents | src/Input/sid/xs_title.c@088092a52fea |
children | 6c3c7b841382 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/sid/xs_title.c Mon Sep 18 03:14:20 2006 -0700 @@ -0,0 +1,184 @@ +/* + 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-2005 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" +#include "audacious/titlestring.h" + + +/* + * Create a title string based on given information and settings. + */ +#define VPUTCH(MCH) \ +if (iIndex < XS_BUF_SIZE) tmpBuf[iIndex++] = MCH; +#define VPUTSTR(MSTR) { \ + if (MSTR) { \ + if ((iIndex + strlen(MSTR) + 1) < XS_BUF_SIZE) { \ + strcpy(&tmpBuf[iIndex], MSTR); \ + iIndex += strlen(MSTR); \ + } else \ + iIndex = XS_BUF_SIZE; \ + } \ + } + + +gchar *xs_make_titlestring(gchar * pcFilename, gint iSubTune, gint nSubTunes, gint iSidModel, + const gchar * formatString, const gchar * infoString0, + const gchar * infoString1, const gchar * infoString2) +{ + gchar *tmpFilename, *tmpFilePath, *tmpFileExt, *pcStr, *pcResult, tmpStr[XS_BUF_SIZE], tmpBuf[XS_BUF_SIZE]; + gint iIndex; +#ifdef HAVE_XMMSEXTRA + TitleInput *ptInput; +#endif + + /* Split the filename into path */ + tmpFilePath = g_strdup(pcFilename); + tmpFilename = xs_strrchr(tmpFilePath, '/'); + if (tmpFilename) + tmpFilename[1] = 0; + + /* Filename */ + tmpFilename = xs_strrchr(pcFilename, '/'); + if (tmpFilename) + tmpFilename = g_strdup(tmpFilename + 1); + else + tmpFilename = g_strdup(pcFilename); + + tmpFileExt = xs_strrchr(tmpFilename, '.'); + tmpFileExt[0] = 0; + + /* Extension */ + tmpFileExt = xs_strrchr(pcFilename, '.'); + + +#ifdef HAVE_XMMSEXTRA + /* Check if the titles are overridden or not */ + if (!xs_cfg.titleOverride) { + /* Use generic XMMS titles */ + /* XMMS_NEW_TITLEINPUT(ptInput); + * We duplicate and add typecast to the code here due to XMMS's braindead headers + */ + ptInput = (TitleInput *) g_malloc0(sizeof(TitleInput)); + ptInput->__size = XMMS_TITLEINPUT_SIZE; + ptInput->__version = XMMS_TITLEINPUT_VERSION; + + /* Create the input fields */ + ptInput->file_name = tmpFilename; + ptInput->file_ext = tmpFileExt; + ptInput->file_path = tmpFilePath; + + ptInput->track_name = g_strdup(infoString0); + ptInput->track_number = iSubTune; + ptInput->album_name = NULL; + ptInput->performer = g_strdup(infoString1); + ptInput->date = g_strdup((iSidModel == XS_SIDMODEL_6581) ? "SID6581" : "SID8580"); + + ptInput->year = 0; + ptInput->genre = g_strdup("SID-tune"); + ptInput->comment = g_strdup(infoString2); + + /* Create the string */ + pcResult = xmms_get_titlestring(xmms_get_gentitle_format(), ptInput); + + /* Dispose all allocated memory */ + g_free(ptInput->track_name); + g_free(ptInput->performer); + g_free(ptInput->comment); + g_free(ptInput->date); + g_free(ptInput->genre); + g_free(ptInput); + } else +#endif + { + /* Create the string */ + pcStr = xs_cfg.titleFormat; + iIndex = 0; + while (*pcStr && (iIndex < XS_BUF_SIZE)) { + if (*pcStr == '%') { + pcStr++; + switch (*pcStr) { + case '%': + VPUTCH('%'); + break; + case 'f': + VPUTSTR(tmpFilename); + break; + case 'F': + VPUTSTR(tmpFilePath); + break; + case 'e': + VPUTSTR(tmpFileExt); + break; + case 'p': + VPUTSTR(infoString1); + break; + case 't': + VPUTSTR(infoString0); + break; + case 'c': + VPUTSTR(infoString2); + break; + case 's': + VPUTSTR(formatString); + break; + case 'm': + switch (iSidModel) { + case XS_SIDMODEL_6581: + VPUTSTR("6581"); + break; + case XS_SIDMODEL_8580: + VPUTSTR("8580"); + break; + default: + VPUTSTR("Unknown"); + break; + } + break; + case 'n': + snprintf(tmpStr, XS_BUF_SIZE, "%i", iSubTune); + VPUTSTR(tmpStr); + break; + case 'N': + snprintf(tmpStr, XS_BUF_SIZE, "%i", nSubTunes); + VPUTSTR(tmpStr); + break; + } + } else { + VPUTCH(*pcStr); + } + pcStr++; + } + + tmpBuf[iIndex] = 0; + + /* Make resulting string */ + pcResult = g_strdup(tmpBuf); + } + + /* Free temporary strings */ + g_free(tmpFilename); + g_free(tmpFilePath); + + return pcResult; +}