annotate src/xs_title.cc @ 24:271be59be975

Lots of changes
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 07 Jun 2003 12:42:05 +0000
parents d5789951b7e2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1 /*
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2 xmms-sid - SIDPlay input plugin for X MultiMedia System (XMMS)
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
3
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
4 Song title parsing
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
5
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
6 Written by Matti "ccr" Hamalainen <ccr@tnsp.org>
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
7
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
8 This program is free software; you can redistribute it and/or modify
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
9 it under the terms of the GNU General Public License as published by
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
10 the Free Software Foundation; either version 2 of the License, or
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
11 (at your option) any later version.
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
12
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
13 This program is distributed in the hope that it will be useful,
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
16 GNU General Public License for more details.
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
17
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
19 along with this program; if not, write to the Free Software
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
21 */
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
22 #include "xmms-sid.h"
24
271be59be975 Lots of changes
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
23 #include "xs_config.h"
271be59be975 Lots of changes
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
24 #include "xs_support.h"
21
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
25 #include <stdlib.h>
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
26 #include <string.h>
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
27 #include <xmms/titlestring.h>
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
28
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
29 #include <sidplay/player.h>
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
30 #include <sidplay/myendian.h>
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
31 #include <sidplay/fformat.h>
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
32
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
33
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
34 /*
24
271be59be975 Lots of changes
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
35 * Create the SID-tune description string from the tune's information
271be59be975 Lots of changes
Matti Hamalainen <ccr@tnsp.org>
parents: 21
diff changeset
36 * formatted by the user-specified format-string.
21
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
37 */
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
38 gchar *xs_filetitle_get(gchar *pcFilename, void *pfInfo, gint iSubTune)
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
39 {
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
40 gint i, j, iLength;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
41 gchar *pcResult;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
42 struct sidTuneInfo *finfo = (struct sidTuneInfo *) pfInfo;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
43 #ifdef HAVE_XMMSEXTRA
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
44 TitleInput *ptInput;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
45 #endif
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
46
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
47 // FIXME FIXME: get STIL-info
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
48
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
49
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
50 #ifdef HAVE_XMMSEXTRA
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
51 /* Check if the titles are overridden or not */
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
52 if (!xs_cfg.titleOverride) {
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
53 /* Use generic XMMS titles */
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
54
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
55 // XMMS_NEW_TITLEINPUT(ptInput);
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
56 // we duplicate and add typecast to the code here due to XMMS's braindead headers
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
57
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
58 ptInput = (TitleInput *) g_malloc0(sizeof(TitleInput));
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
59 ptInput->__size = XMMS_TITLEINPUT_SIZE;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
60 ptInput->__version = XMMS_TITLEINPUT_VERSION;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
61
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
62
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
63 /* Create the input fields */
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
64 ptInput->file_name = pcFilename;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
65 ptInput->file_ext = pcFilename;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
66 ptInput->file_path = pcFilename;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
67
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
68 ptInput->track_name = finfo->nameString;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
69 ptInput->track_number = iSubTune;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
70 ptInput->album_name = NULL;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
71 ptInput->performer = finfo->authorString;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
72 ptInput->date = NULL;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
73 ptInput->year = 0;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
74 xs_strcalloc(&ptInput->genre, "SID-tune");
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
75 ptInput->comment = finfo->copyrightString;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
76 pcResult = xmms_get_titlestring(xmms_get_gentitle_format(), ptInput);
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
77
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
78 /* Dispose all allocated memory */
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
79 g_free(ptInput->genre);
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
80 g_free(ptInput); /* was allocated by XMMS_NEW_TITLEINPUT */
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
81 } else {
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
82 #endif
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
83 /* Check the info strings */
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
84 if (finfo->numberOfInfoStrings != 3) {
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
85
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
86 if (finfo->numberOfInfoStrings < 1)
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
87 return 0;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
88
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
89 return g_strdup(finfo->infoString[0]);
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
90 }
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
91
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
92 /* Check the format-string for NULL */
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
93 if (xs_cfg.titleFormat == NULL)
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
94 return g_strdup_printf("%s - %s", finfo->nameString, finfo->authorString);
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
95
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
96 /* Calculate the length */
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
97 iLength = 2;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
98
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
99 for (i = 0; i < strlen(xs_cfg.titleFormat); i++) {
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
100
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
101 if (xs_cfg.titleFormat[i] == '%') {
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
102 switch (xs_cfg.titleFormat[++i]) {
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
103
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
104 case '1': iLength += strlen(finfo->authorString); break;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
105 case '2': iLength += strlen(finfo->nameString); break;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
106 case '3': iLength += strlen(finfo->copyrightString); break;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
107 case '4': iLength += strlen(finfo->formatString); break;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
108
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
109 } /* case */
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
110
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
111 } else
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
112 iLength++;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
113
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
114 } /* for */
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
115
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
116
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
117 /* Allocate the result-string */
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
118 pcResult = (gchar *) g_malloc(iLength);
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
119
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
120 /* Construct the final result info */
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
121 j = 0;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
122 for (i = 0; i < strlen(xs_cfg.titleFormat); i++) {
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
123
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
124 if (xs_cfg.titleFormat[i] == '%') {
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
125 switch (xs_cfg.titleFormat[++i]) {
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
126
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
127 case '1':
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
128 xs_strcpy(&pcResult, &j, finfo->authorString);
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
129 break;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
130
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
131 case '2':
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
132 xs_strcpy(&pcResult, &j, finfo->nameString);
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
133 break;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
134
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
135 case '3':
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
136 xs_strcpy(&pcResult, &j, finfo->copyrightString);
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
137 break;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
138
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
139 case '4':
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
140 xs_strcpy(&pcResult, &j, finfo->formatString);
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
141 break;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
142
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
143 } /* case */
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
144
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
145 } else {
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
146 pcResult[j++] = xs_cfg.titleFormat[i];
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
147 } /* if */
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
148
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
149 } /* for */
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
150
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
151 pcResult[j] = '\0';
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
152 #ifdef HAVE_XMMSEXTRA
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
153 }
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
154 #endif
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
155
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
156 return pcResult;
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
157 }
d5789951b7e2 Added files
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
158