Mercurial > hg > xmms-sid
view src/xs_title.c @ 1009:0cd6bcc9ef80
Cosmetics.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 05 May 2014 23:00:51 +0300 |
parents | be2a8436461a |
children |
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; \ } \ } const gchar *xs_get_sidmodel(gint model) { switch (model) { case XS_SIDMODEL_6581: return "6581"; case XS_SIDMODEL_8580: return "8580"; case XS_SIDMODEL_ANY: return "ANY"; case XS_SIDMODEL_UNKNOWN: return "???"; default: return ""; } } 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_printf("%s%s%s", xs_get_sidmodel(p->sidModel1), (p->sidModel2 > XS_SIDMODEL_UNKNOWN) ? " + " : "", (p->sidModel2 > XS_SIDMODEL_UNKNOWN) ? xs_get_sidmodel(p->sidModel2) : ""); 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 '1': VPUTSTR(xs_get_sidmodel(p->sidModel1)); break; case '2': VPUTSTR(xs_get_sidmodel(p->sidModel2)); break; case 'm': VPUTSTR(xs_get_sidmodel(p->sidModel1)); if (p->sidModel2 > XS_SIDMODEL_UNKNOWN) { VPUTSTR(" + "); VPUTSTR(xs_get_sidmodel(p->sidModel2)); } 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; }