1%{
2/*
3 * libid3tag - ID3 tag manipulation library
4 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 *
20 * $Id: frametype.gperf,v 1.7 2004/01/23 09:41:32 rob Exp $
21 */
22
23# ifdef HAVE_CONFIG_H
24#  include "config.h"
25# endif
26
27# include "global.h"
28
29# include <string.h>
30
31# include "id3tag.h"
32# include "frametype.h"
33
34# define FIELDS(id)  static enum id3_field_type const fields_##id[]
35
36/* frame field descriptions */
37
38FIELDS(UFID) = {
39  ID3_FIELD_TYPE_LATIN1,
40  ID3_FIELD_TYPE_BINARYDATA
41};
42
43FIELDS(TXXX) = {
44  ID3_FIELD_TYPE_TEXTENCODING,
45  ID3_FIELD_TYPE_STRING,
46  ID3_FIELD_TYPE_STRING
47};
48
49FIELDS(WXXX) = {
50  ID3_FIELD_TYPE_TEXTENCODING,
51  ID3_FIELD_TYPE_STRING,
52  ID3_FIELD_TYPE_LATIN1
53};
54
55FIELDS(MCDI) = {
56  ID3_FIELD_TYPE_BINARYDATA
57};
58
59FIELDS(ETCO) = {
60  ID3_FIELD_TYPE_INT8,
61  ID3_FIELD_TYPE_BINARYDATA
62};
63
64FIELDS(MLLT) = {
65  ID3_FIELD_TYPE_INT16,
66  ID3_FIELD_TYPE_INT24,
67  ID3_FIELD_TYPE_INT24,
68  ID3_FIELD_TYPE_INT8,
69  ID3_FIELD_TYPE_INT8,
70  ID3_FIELD_TYPE_BINARYDATA
71};
72
73FIELDS(SYTC) = {
74  ID3_FIELD_TYPE_INT8,
75  ID3_FIELD_TYPE_BINARYDATA
76};
77
78FIELDS(USLT) = {
79  ID3_FIELD_TYPE_TEXTENCODING,
80  ID3_FIELD_TYPE_LANGUAGE,
81  ID3_FIELD_TYPE_STRING,
82  ID3_FIELD_TYPE_STRINGFULL
83};
84
85FIELDS(SYLT) = {
86  ID3_FIELD_TYPE_TEXTENCODING,
87  ID3_FIELD_TYPE_LANGUAGE,
88  ID3_FIELD_TYPE_INT8,
89  ID3_FIELD_TYPE_INT8,
90  ID3_FIELD_TYPE_STRING,
91  ID3_FIELD_TYPE_BINARYDATA
92};
93
94FIELDS(COMM) = {
95  ID3_FIELD_TYPE_TEXTENCODING,
96  ID3_FIELD_TYPE_LANGUAGE,
97  ID3_FIELD_TYPE_STRING,
98  ID3_FIELD_TYPE_STRINGFULL
99};
100
101FIELDS(RVA2) = {
102  ID3_FIELD_TYPE_LATIN1,
103  ID3_FIELD_TYPE_BINARYDATA
104};
105
106FIELDS(EQU2) = {
107  ID3_FIELD_TYPE_INT8,
108  ID3_FIELD_TYPE_LATIN1,
109  ID3_FIELD_TYPE_BINARYDATA
110};
111
112FIELDS(RVRB) = {
113  ID3_FIELD_TYPE_INT16,
114  ID3_FIELD_TYPE_INT16,
115  ID3_FIELD_TYPE_INT8,
116  ID3_FIELD_TYPE_INT8,
117  ID3_FIELD_TYPE_INT8,
118  ID3_FIELD_TYPE_INT8,
119  ID3_FIELD_TYPE_INT8,
120  ID3_FIELD_TYPE_INT8,
121  ID3_FIELD_TYPE_INT8,
122  ID3_FIELD_TYPE_INT8
123};
124
125FIELDS(APIC) = {
126  ID3_FIELD_TYPE_TEXTENCODING,
127  ID3_FIELD_TYPE_LATIN1,
128  ID3_FIELD_TYPE_INT8,
129  ID3_FIELD_TYPE_STRING,
130  ID3_FIELD_TYPE_BINARYDATA
131};
132
133FIELDS(GEOB) = {
134  ID3_FIELD_TYPE_TEXTENCODING,
135  ID3_FIELD_TYPE_LATIN1,
136  ID3_FIELD_TYPE_STRING,
137  ID3_FIELD_TYPE_STRING,
138  ID3_FIELD_TYPE_BINARYDATA
139};
140
141FIELDS(PCNT) = {
142  ID3_FIELD_TYPE_INT32PLUS
143};
144
145FIELDS(POPM) = {
146  ID3_FIELD_TYPE_LATIN1,
147  ID3_FIELD_TYPE_INT8,
148  ID3_FIELD_TYPE_INT32PLUS
149};
150
151FIELDS(RBUF) = {
152  ID3_FIELD_TYPE_INT24,
153  ID3_FIELD_TYPE_INT8,
154  ID3_FIELD_TYPE_INT32
155};
156
157FIELDS(AENC) = {
158  ID3_FIELD_TYPE_LATIN1,
159  ID3_FIELD_TYPE_INT16,
160  ID3_FIELD_TYPE_INT16,
161  ID3_FIELD_TYPE_BINARYDATA
162};
163
164FIELDS(LINK) = {
165  ID3_FIELD_TYPE_FRAMEID,
166  ID3_FIELD_TYPE_LATIN1,
167  ID3_FIELD_TYPE_LATIN1LIST
168};
169
170FIELDS(POSS) = {
171  ID3_FIELD_TYPE_INT8,
172  ID3_FIELD_TYPE_BINARYDATA
173};
174
175FIELDS(USER) = {
176  ID3_FIELD_TYPE_TEXTENCODING,
177  ID3_FIELD_TYPE_LANGUAGE,
178  ID3_FIELD_TYPE_STRING
179};
180
181FIELDS(OWNE) = {
182  ID3_FIELD_TYPE_TEXTENCODING,
183  ID3_FIELD_TYPE_LATIN1,
184  ID3_FIELD_TYPE_DATE,
185  ID3_FIELD_TYPE_STRING
186};
187
188FIELDS(COMR) = {
189  ID3_FIELD_TYPE_TEXTENCODING,
190  ID3_FIELD_TYPE_LATIN1,
191  ID3_FIELD_TYPE_DATE,
192  ID3_FIELD_TYPE_LATIN1,
193  ID3_FIELD_TYPE_INT8,
194  ID3_FIELD_TYPE_STRING,
195  ID3_FIELD_TYPE_STRING,
196  ID3_FIELD_TYPE_LATIN1,
197  ID3_FIELD_TYPE_BINARYDATA
198};
199
200FIELDS(ENCR) = {
201  ID3_FIELD_TYPE_LATIN1,
202  ID3_FIELD_TYPE_INT8,
203  ID3_FIELD_TYPE_BINARYDATA
204};
205
206FIELDS(GRID) = {
207  ID3_FIELD_TYPE_LATIN1,
208  ID3_FIELD_TYPE_INT8,
209  ID3_FIELD_TYPE_BINARYDATA
210};
211
212FIELDS(PRIV) = {
213  ID3_FIELD_TYPE_LATIN1,
214  ID3_FIELD_TYPE_BINARYDATA
215};
216
217FIELDS(SIGN) = {
218  ID3_FIELD_TYPE_INT8,
219  ID3_FIELD_TYPE_BINARYDATA
220};
221
222FIELDS(SEEK) = {
223  ID3_FIELD_TYPE_INT32
224};
225
226FIELDS(ASPI) = {
227  ID3_FIELD_TYPE_INT32,
228  ID3_FIELD_TYPE_INT32,
229  ID3_FIELD_TYPE_INT16,
230  ID3_FIELD_TYPE_INT8,
231  ID3_FIELD_TYPE_BINARYDATA
232};
233
234FIELDS(text) = {
235  ID3_FIELD_TYPE_TEXTENCODING,
236  ID3_FIELD_TYPE_STRINGLIST
237};
238
239FIELDS(url) = {
240  ID3_FIELD_TYPE_LATIN1
241};
242
243FIELDS(unknown) = {
244  ID3_FIELD_TYPE_BINARYDATA
245};
246
247FIELDS(ZOBS) = {
248  ID3_FIELD_TYPE_FRAMEID,
249  ID3_FIELD_TYPE_BINARYDATA
250};
251
252# define FRAME(id)  \
253  sizeof(fields_##id) / sizeof(fields_##id[0]), fields_##id
254
255# define PRESERVE  0
256# define DISCARD   ID3_FRAME_FLAG_FILEALTERPRESERVATION
257# define OBSOLETE  (DISCARD | ID3_FRAME_FLAG_TAGALTERPRESERVATION)
258
259# define FRAMETYPE(type, id, flags, desc)  \
260  struct id3_frametype const id3_frametype_##type = {  \
261    0, FRAME(id), flags, desc  \
262  }
263
264/* static frame types */
265
266FRAMETYPE(text,         text,    PRESERVE, "Unknown text information frame");
267FRAMETYPE(url,          url,     PRESERVE, "Unknown URL link frame");
268FRAMETYPE(experimental, unknown, PRESERVE, "Experimental frame");
269FRAMETYPE(unknown,      unknown, PRESERVE, "Unknown frame");
270FRAMETYPE(obsolete,     unknown, OBSOLETE, "Obsolete frame");
271%}
272struct id3_frametype;
273%%
274#
275# ID3v2.4 frames
276#
277AENC, FRAME(AENC), DISCARD,  "Audio encryption"
278APIC, FRAME(APIC), PRESERVE, "Attached picture"
279ASPI, FRAME(ASPI), DISCARD,  "Audio seek point index"
280COMM, FRAME(COMM), PRESERVE, "Comments"
281COMR, FRAME(COMR), PRESERVE, "Commercial frame"
282ENCR, FRAME(ENCR), PRESERVE, "Encryption method registration"
283EQU2, FRAME(EQU2), DISCARD,  "Equalisation (2)"
284ETCO, FRAME(ETCO), DISCARD,  "Event timing codes"
285GEOB, FRAME(GEOB), PRESERVE, "General encapsulated object"
286GRID, FRAME(GRID), PRESERVE, "Group identification registration"
287LINK, FRAME(LINK), PRESERVE, "Linked information"
288MCDI, FRAME(MCDI), PRESERVE, "Music CD identifier"
289MLLT, FRAME(MLLT), DISCARD,  "MPEG location lookup table"
290OWNE, FRAME(OWNE), PRESERVE, "Ownership frame"
291PCNT, FRAME(PCNT), PRESERVE, "Play counter"
292POPM, FRAME(POPM), PRESERVE, "Popularimeter"
293POSS, FRAME(POSS), DISCARD,  "Position synchronisation frame"
294PRIV, FRAME(PRIV), PRESERVE, "Private frame"
295RBUF, FRAME(RBUF), PRESERVE, "Recommended buffer size"
296RVA2, FRAME(RVA2), DISCARD,  "Relative volume adjustment (2)"
297RVRB, FRAME(RVRB), PRESERVE, "Reverb"
298SEEK, FRAME(SEEK), DISCARD,  "Seek frame"
299SIGN, FRAME(SIGN), PRESERVE, "Signature frame"
300SYLT, FRAME(SYLT), DISCARD,  "Synchronised lyric/text"
301SYTC, FRAME(SYTC), DISCARD,  "Synchronised tempo codes"
302TALB, FRAME(text), PRESERVE, "Album/movie/show title"
303TBPM, FRAME(text), PRESERVE, "BPM (beats per minute)"
304TCOM, FRAME(text), PRESERVE, "Composer"
305TCON, FRAME(text), PRESERVE, "Content type"
306TCOP, FRAME(text), PRESERVE, "Copyright message"
307TDEN, FRAME(text), PRESERVE, "Encoding time"
308TDLY, FRAME(text), PRESERVE, "Playlist delay"
309TDOR, FRAME(text), PRESERVE, "Original release time"
310TDRC, FRAME(text), PRESERVE, "Recording time"
311TDRL, FRAME(text), PRESERVE, "Release time"
312TDTG, FRAME(text), PRESERVE, "Tagging time"
313TENC, FRAME(text), DISCARD,  "Encoded by"
314TEXT, FRAME(text), PRESERVE, "Lyricist/text writer"
315TFLT, FRAME(text), PRESERVE, "File type"
316TIPL, FRAME(text), PRESERVE, "Involved people list"
317TIT1, FRAME(text), PRESERVE, "Content group description"
318TIT2, FRAME(text), PRESERVE, "Title/songname/content description"
319TIT3, FRAME(text), PRESERVE, "Subtitle/description refinement"
320TKEY, FRAME(text), PRESERVE, "Initial key"
321TLAN, FRAME(text), PRESERVE, "Language(s)"
322TLEN, FRAME(text), DISCARD,  "Length"
323TMCL, FRAME(text), PRESERVE, "Musician credits list"
324TMED, FRAME(text), PRESERVE, "Media type"
325TMOO, FRAME(text), PRESERVE, "Mood"
326TOAL, FRAME(text), PRESERVE, "Original album/movie/show title"
327TOFN, FRAME(text), PRESERVE, "Original filename"
328TOLY, FRAME(text), PRESERVE, "Original lyricist(s)/text writer(s)"
329TOPE, FRAME(text), PRESERVE, "Original artist(s)/performer(s)"
330TOWN, FRAME(text), PRESERVE, "File owner/licensee"
331TPE1, FRAME(text), PRESERVE, "Lead performer(s)/soloist(s)"
332TPE2, FRAME(text), PRESERVE, "Band/orchestra/accompaniment"
333TPE3, FRAME(text), PRESERVE, "Conductor/performer refinement"
334TPE4, FRAME(text), PRESERVE, "Interpreted, remixed, or otherwise modified by"
335TPOS, FRAME(text), PRESERVE, "Part of a set"
336TPRO, FRAME(text), PRESERVE, "Produced notice"
337TPUB, FRAME(text), PRESERVE, "Publisher"
338TRCK, FRAME(text), PRESERVE, "Track number/position in set"
339TRSN, FRAME(text), PRESERVE, "Internet radio station name"
340TRSO, FRAME(text), PRESERVE, "Internet radio station owner"
341TSOA, FRAME(text), PRESERVE, "Album sort order"
342TSOP, FRAME(text), PRESERVE, "Performer sort order"
343TSOT, FRAME(text), PRESERVE, "Title sort order"
344TSRC, FRAME(text), PRESERVE, "ISRC (international standard recording code)"
345TSSE, FRAME(text), PRESERVE, "Software/hardware and settings used for encoding"
346TSST, FRAME(text), PRESERVE, "Set subtitle"
347TXXX, FRAME(TXXX), PRESERVE, "User defined text information frame"
348UFID, FRAME(UFID), PRESERVE, "Unique file identifier"
349USER, FRAME(USER), PRESERVE, "Terms of use"
350USLT, FRAME(USLT), PRESERVE, "Unsynchronised lyric/text transcription"
351WCOM, FRAME(url),  PRESERVE, "Commercial information"
352WCOP, FRAME(url),  PRESERVE, "Copyright/legal information"
353WOAF, FRAME(url),  PRESERVE, "Official audio file webpage"
354WOAR, FRAME(url),  PRESERVE, "Official artist/performer webpage"
355WOAS, FRAME(url),  PRESERVE, "Official audio source webpage"
356WORS, FRAME(url),  PRESERVE, "Official Internet radio station homepage"
357WPAY, FRAME(url),  PRESERVE, "Payment"
358WPUB, FRAME(url),  PRESERVE, "Publishers official webpage"
359WXXX, FRAME(WXXX), PRESERVE, "User defined URL link frame"
360#
361# Special frames
362#
363ZOBS, FRAME(ZOBS), OBSOLETE, "Obsolete frame"
364