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