add gperf'd source files
git-svn-id: https://svn.musicpd.org/mpd/trunk@1870 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
parent
989e2edab1
commit
e33dcb9bd4
503
src/libid3tag/compat.c
Normal file
503
src/libid3tag/compat.c
Normal file
@ -0,0 +1,503 @@
|
|||||||
|
/* C code produced by gperf version 3.0.1 */
|
||||||
|
/* Command-line: gperf -tCcTonD -K id -N id3_compat_lookup -s -3 -k '*' compat.gperf */
|
||||||
|
|
||||||
|
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
|
||||||
|
&& ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
|
||||||
|
&& (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
|
||||||
|
&& ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
|
||||||
|
&& ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
|
||||||
|
&& ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
|
||||||
|
&& ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
|
||||||
|
&& ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
|
||||||
|
&& ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
|
||||||
|
&& ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
|
||||||
|
&& ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
|
||||||
|
&& ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
|
||||||
|
&& ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
|
||||||
|
&& ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
|
||||||
|
&& ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
|
||||||
|
&& ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
|
||||||
|
&& ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
|
||||||
|
&& ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
|
||||||
|
&& ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
|
||||||
|
&& ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
|
||||||
|
&& ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
|
||||||
|
&& ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
|
||||||
|
&& ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
|
||||||
|
/* The character set is not based on ISO-646. */
|
||||||
|
error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#line 1 "compat.gperf"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* libid3tag - ID3 tag manipulation library
|
||||||
|
* Copyright (C) 2000-2004 Underbit Technologies, Inc.
|
||||||
|
*
|
||||||
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* Id: compat.gperf,v 1.11 2004/01/23 09:41:32 rob Exp
|
||||||
|
*/
|
||||||
|
|
||||||
|
# ifdef HAVE_CONFIG_H
|
||||||
|
# include "config.h"
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# include "global.h"
|
||||||
|
|
||||||
|
# include <stdlib.h>
|
||||||
|
# include <string.h>
|
||||||
|
|
||||||
|
# ifdef HAVE_ASSERT_H
|
||||||
|
# include <assert.h>
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# include "id3tag.h"
|
||||||
|
# include "compat.h"
|
||||||
|
# include "frame.h"
|
||||||
|
# include "field.h"
|
||||||
|
# include "parse.h"
|
||||||
|
# include "ucs4.h"
|
||||||
|
|
||||||
|
# define EQ(id) #id, 0
|
||||||
|
# define OBSOLETE 0, 0
|
||||||
|
# define TX(id) #id, translate_##id
|
||||||
|
|
||||||
|
static id3_compat_func_t translate_TCON;
|
||||||
|
|
||||||
|
#define TOTAL_KEYWORDS 73
|
||||||
|
#define MIN_WORD_LENGTH 3
|
||||||
|
#define MAX_WORD_LENGTH 4
|
||||||
|
#define MIN_HASH_VALUE 6
|
||||||
|
#define MAX_HASH_VALUE 127
|
||||||
|
/* maximum key range = 122, duplicates = 0 */
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
__inline
|
||||||
|
#else
|
||||||
|
#ifdef __cplusplus
|
||||||
|
inline
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
static unsigned int
|
||||||
|
hash (str, len)
|
||||||
|
register const char *str;
|
||||||
|
register unsigned int len;
|
||||||
|
{
|
||||||
|
static const unsigned char asso_values[] =
|
||||||
|
{
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 64,
|
||||||
|
58, 20, 15, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 10, 18, 3, 6, 1,
|
||||||
|
47, 0, 128, 42, 62, 30, 31, 0, 19, 52,
|
||||||
|
10, 24, 8, 30, 5, 3, 30, 8, 25, 47,
|
||||||
|
3, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 128, 128, 128, 128, 128, 128
|
||||||
|
};
|
||||||
|
register int hval = 0;
|
||||||
|
|
||||||
|
switch (len)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
hval += asso_values[(unsigned char)str[3]];
|
||||||
|
/*FALLTHROUGH*/
|
||||||
|
case 3:
|
||||||
|
hval += asso_values[(unsigned char)str[2]];
|
||||||
|
/*FALLTHROUGH*/
|
||||||
|
case 2:
|
||||||
|
hval += asso_values[(unsigned char)str[1]+1];
|
||||||
|
/*FALLTHROUGH*/
|
||||||
|
case 1:
|
||||||
|
hval += asso_values[(unsigned char)str[0]];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return hval;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
__inline
|
||||||
|
#endif
|
||||||
|
const struct id3_compat *
|
||||||
|
id3_compat_lookup (str, len)
|
||||||
|
register const char *str;
|
||||||
|
register unsigned int len;
|
||||||
|
{
|
||||||
|
static const struct id3_compat wordlist[] =
|
||||||
|
{
|
||||||
|
#line 97 "compat.gperf"
|
||||||
|
{"TLE", EQ(TLEN) /* Length */},
|
||||||
|
#line 68 "compat.gperf"
|
||||||
|
{"ETC", EQ(ETCO) /* Event timing codes */},
|
||||||
|
#line 126 "compat.gperf"
|
||||||
|
{"ULT", EQ(USLT) /* Unsynchronised lyric/text transcription */},
|
||||||
|
#line 123 "compat.gperf"
|
||||||
|
{"TYE", OBSOLETE /* Year [obsolete] */},
|
||||||
|
#line 92 "compat.gperf"
|
||||||
|
{"TFT", EQ(TFLT) /* File type */},
|
||||||
|
#line 84 "compat.gperf"
|
||||||
|
{"TCM", EQ(TCOM) /* Composer */},
|
||||||
|
#line 66 "compat.gperf"
|
||||||
|
{"EQU", OBSOLETE /* Equalization [obsolete] */},
|
||||||
|
#line 63 "compat.gperf"
|
||||||
|
{"COM", EQ(COMM) /* Comments */},
|
||||||
|
#line 130 "compat.gperf"
|
||||||
|
{"WCM", EQ(WCOM) /* Commercial information */},
|
||||||
|
#line 96 "compat.gperf"
|
||||||
|
{"TLA", EQ(TLAN) /* Language(s) */},
|
||||||
|
#line 88 "compat.gperf"
|
||||||
|
{"TDA", OBSOLETE /* Date [obsolete] */},
|
||||||
|
#line 124 "compat.gperf"
|
||||||
|
{"TYER", OBSOLETE /* Year [obsolete] */},
|
||||||
|
#line 83 "compat.gperf"
|
||||||
|
{"TBP", EQ(TBPM) /* BPM (beats per minute) */},
|
||||||
|
#line 87 "compat.gperf"
|
||||||
|
{"TCR", EQ(TCOP) /* Copyright message */},
|
||||||
|
#line 104 "compat.gperf"
|
||||||
|
{"TOT", EQ(TOAL) /* Original album/movie/show title */},
|
||||||
|
#line 89 "compat.gperf"
|
||||||
|
{"TDAT", OBSOLETE /* Date [obsolete] */},
|
||||||
|
#line 67 "compat.gperf"
|
||||||
|
{"EQUA", OBSOLETE /* Equalization [obsolete] */},
|
||||||
|
#line 102 "compat.gperf"
|
||||||
|
{"TOR", EQ(TDOR) /* Original release year [obsolete] */},
|
||||||
|
#line 131 "compat.gperf"
|
||||||
|
{"WCP", EQ(WCOP) /* Copyright/legal information */},
|
||||||
|
#line 99 "compat.gperf"
|
||||||
|
{"TOA", EQ(TOPE) /* Original artist(s)/performer(s) */},
|
||||||
|
#line 78 "compat.gperf"
|
||||||
|
{"RVA", OBSOLETE /* Relative volume adjustment [obsolete] */},
|
||||||
|
#line 120 "compat.gperf"
|
||||||
|
{"TT3", EQ(TIT3) /* Subtitle/description refinement */},
|
||||||
|
#line 98 "compat.gperf"
|
||||||
|
{"TMT", EQ(TMED) /* Media type */},
|
||||||
|
#line 76 "compat.gperf"
|
||||||
|
{"POP", EQ(POPM) /* Popularimeter */},
|
||||||
|
#line 74 "compat.gperf"
|
||||||
|
{"MLL", EQ(MLLT) /* MPEG location lookup table */},
|
||||||
|
#line 79 "compat.gperf"
|
||||||
|
{"RVAD", OBSOLETE /* Relative volume adjustment [obsolete] */},
|
||||||
|
#line 65 "compat.gperf"
|
||||||
|
{"CRM", OBSOLETE /* Encrypted meta frame [obsolete] */},
|
||||||
|
#line 128 "compat.gperf"
|
||||||
|
{"WAR", EQ(WOAR) /* Official artist/performer webpage */},
|
||||||
|
#line 80 "compat.gperf"
|
||||||
|
{"SLT", EQ(SYLT) /* Synchronised lyric/text */},
|
||||||
|
#line 81 "compat.gperf"
|
||||||
|
{"STC", EQ(SYTC) /* Synchronised tempo codes */},
|
||||||
|
#line 95 "compat.gperf"
|
||||||
|
{"TKE", EQ(TKEY) /* Initial key */},
|
||||||
|
#line 111 "compat.gperf"
|
||||||
|
{"TRC", EQ(TSRC) /* ISRC (international standard recording code) */},
|
||||||
|
#line 109 "compat.gperf"
|
||||||
|
{"TPA", EQ(TPOS) /* Part of a set */},
|
||||||
|
#line 117 "compat.gperf"
|
||||||
|
{"TSS", EQ(TSSE) /* Software/hardware and settings used for encoding */},
|
||||||
|
#line 112 "compat.gperf"
|
||||||
|
{"TRD", OBSOLETE /* Recording dates [obsolete] */},
|
||||||
|
#line 64 "compat.gperf"
|
||||||
|
{"CRA", EQ(AENC) /* Audio encryption */},
|
||||||
|
#line 108 "compat.gperf"
|
||||||
|
{"TP4", EQ(TPE4) /* Interpreted, remixed, or otherwise modified by */},
|
||||||
|
#line 125 "compat.gperf"
|
||||||
|
{"UFI", EQ(UFID) /* Unique file identifier */},
|
||||||
|
#line 101 "compat.gperf"
|
||||||
|
{"TOL", EQ(TOLY) /* Original lyricist(s)/text writer(s) */},
|
||||||
|
#line 110 "compat.gperf"
|
||||||
|
{"TPB", EQ(TPUB) /* Publisher */},
|
||||||
|
#line 73 "compat.gperf"
|
||||||
|
{"MCI", EQ(MCDI) /* Music CD identifier */},
|
||||||
|
#line 107 "compat.gperf"
|
||||||
|
{"TP3", EQ(TPE3) /* Conductor/performer refinement */},
|
||||||
|
#line 132 "compat.gperf"
|
||||||
|
{"WPB", EQ(WPUB) /* Publishers official webpage */},
|
||||||
|
#line 113 "compat.gperf"
|
||||||
|
{"TRDA", OBSOLETE /* Recording dates [obsolete] */},
|
||||||
|
#line 115 "compat.gperf"
|
||||||
|
{"TSI", OBSOLETE /* Size [obsolete] */},
|
||||||
|
#line 90 "compat.gperf"
|
||||||
|
{"TDY", EQ(TDLY) /* Playlist delay */},
|
||||||
|
#line 82 "compat.gperf"
|
||||||
|
{"TAL", EQ(TALB) /* Album/movie/show title */},
|
||||||
|
#line 116 "compat.gperf"
|
||||||
|
{"TSIZ", OBSOLETE /* Size [obsolete] */},
|
||||||
|
#line 129 "compat.gperf"
|
||||||
|
{"WAS", EQ(WOAS) /* Official audio source webpage */},
|
||||||
|
#line 121 "compat.gperf"
|
||||||
|
{"TXT", EQ(TEXT) /* Lyricist/text writer */},
|
||||||
|
#line 62 "compat.gperf"
|
||||||
|
{"CNT", EQ(PCNT) /* Play counter */},
|
||||||
|
#line 100 "compat.gperf"
|
||||||
|
{"TOF", EQ(TOFN) /* Original filename */},
|
||||||
|
#line 85 "compat.gperf"
|
||||||
|
{"TCO", TX(TCON) /* Content type */},
|
||||||
|
#line 114 "compat.gperf"
|
||||||
|
{"TRK", EQ(TRCK) /* Track number/position in set */},
|
||||||
|
#line 119 "compat.gperf"
|
||||||
|
{"TT2", EQ(TIT2) /* Title/songname/content description */},
|
||||||
|
#line 93 "compat.gperf"
|
||||||
|
{"TIM", OBSOLETE /* Time [obsolete] */},
|
||||||
|
#line 94 "compat.gperf"
|
||||||
|
{"TIME", OBSOLETE /* Time [obsolete] */},
|
||||||
|
#line 103 "compat.gperf"
|
||||||
|
{"TORY", EQ(TDOR) /* Original release year [obsolete] */},
|
||||||
|
#line 91 "compat.gperf"
|
||||||
|
{"TEN", EQ(TENC) /* Encoded by */},
|
||||||
|
#line 118 "compat.gperf"
|
||||||
|
{"TT1", EQ(TIT1) /* Content group description */},
|
||||||
|
#line 127 "compat.gperf"
|
||||||
|
{"WAF", EQ(WOAF) /* Official audio file webpage */},
|
||||||
|
#line 75 "compat.gperf"
|
||||||
|
{"PIC", EQ(APIC) /* Attached picture */},
|
||||||
|
#line 122 "compat.gperf"
|
||||||
|
{"TXX", EQ(TXXX) /* User defined text information frame */},
|
||||||
|
#line 133 "compat.gperf"
|
||||||
|
{"WXX", EQ(WXXX) /* User defined URL link frame */},
|
||||||
|
#line 86 "compat.gperf"
|
||||||
|
{"TCON", TX(TCON) /* Content type */},
|
||||||
|
#line 77 "compat.gperf"
|
||||||
|
{"REV", EQ(RVRB) /* Reverb */},
|
||||||
|
#line 106 "compat.gperf"
|
||||||
|
{"TP2", EQ(TPE2) /* Band/orchestra/accompaniment */},
|
||||||
|
#line 105 "compat.gperf"
|
||||||
|
{"TP1", EQ(TPE1) /* Lead performer(s)/soloist(s) */},
|
||||||
|
#line 61 "compat.gperf"
|
||||||
|
{"BUF", EQ(RBUF) /* Recommended buffer size */},
|
||||||
|
#line 70 "compat.gperf"
|
||||||
|
{"IPL", EQ(TIPL) /* Involved people list */},
|
||||||
|
#line 69 "compat.gperf"
|
||||||
|
{"GEO", EQ(GEOB) /* General encapsulated object */},
|
||||||
|
#line 72 "compat.gperf"
|
||||||
|
{"LNK", EQ(LINK) /* Linked information */},
|
||||||
|
#line 71 "compat.gperf"
|
||||||
|
{"IPLS", EQ(TIPL) /* Involved people list */}
|
||||||
|
};
|
||||||
|
|
||||||
|
static const short lookup[] =
|
||||||
|
{
|
||||||
|
-1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7,
|
||||||
|
8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, -1,
|
||||||
|
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
|
||||||
|
-1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
|
||||||
|
48, 49, -1, -1, 50, -1, 51, 52, -1, 53, 54, 55, 56, -1,
|
||||||
|
57, 58, 59, 60, -1, 61, -1, 62, -1, -1, 63, -1, 64, -1,
|
||||||
|
-1, 65, -1, 66, -1, -1, -1, -1, -1, 67, -1, 68, -1, 69,
|
||||||
|
-1, 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 72
|
||||||
|
};
|
||||||
|
|
||||||
|
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
|
||||||
|
{
|
||||||
|
register int key = hash (str, len);
|
||||||
|
|
||||||
|
if (key <= MAX_HASH_VALUE && key >= 0)
|
||||||
|
{
|
||||||
|
register int index = lookup[key];
|
||||||
|
|
||||||
|
if (index >= 0)
|
||||||
|
{
|
||||||
|
register const char *s = wordlist[index].id;
|
||||||
|
|
||||||
|
if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
|
||||||
|
return &wordlist[index];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#line 134 "compat.gperf"
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
int translate_TCON(struct id3_frame *frame, char const *oldid,
|
||||||
|
id3_byte_t const *data, id3_length_t length)
|
||||||
|
{
|
||||||
|
id3_byte_t const *end;
|
||||||
|
enum id3_field_textencoding encoding;
|
||||||
|
id3_ucs4_t *string = 0, *ptr, *endptr;
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
/* translate old TCON syntax into multiple strings */
|
||||||
|
|
||||||
|
assert(frame->nfields == 2);
|
||||||
|
|
||||||
|
encoding = ID3_FIELD_TEXTENCODING_ISO_8859_1;
|
||||||
|
|
||||||
|
end = data + length;
|
||||||
|
|
||||||
|
if (id3_field_parse(&frame->fields[0], &data, end - data, &encoding) == -1)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
string = id3_parse_string(&data, end - data, encoding, 0);
|
||||||
|
if (string == 0)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
ptr = string;
|
||||||
|
while (*ptr == '(') {
|
||||||
|
if (*++ptr == '(')
|
||||||
|
break;
|
||||||
|
|
||||||
|
endptr = ptr;
|
||||||
|
while (*endptr && *endptr != ')')
|
||||||
|
++endptr;
|
||||||
|
|
||||||
|
if (*endptr)
|
||||||
|
*endptr++ = 0;
|
||||||
|
|
||||||
|
if (id3_field_addstring(&frame->fields[1], ptr) == -1)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
ptr = endptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*ptr && id3_field_addstring(&frame->fields[1], ptr) == -1)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
if (0) {
|
||||||
|
fail:
|
||||||
|
result = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string)
|
||||||
|
free(string);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NAME: compat->fixup()
|
||||||
|
* DESCRIPTION: finish compatibility translations
|
||||||
|
*/
|
||||||
|
int id3_compat_fixup(struct id3_tag *tag)
|
||||||
|
{
|
||||||
|
struct id3_frame *frame;
|
||||||
|
unsigned int index;
|
||||||
|
id3_ucs4_t timestamp[17] = { 0 };
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
/* create a TDRC frame from obsolete TYER/TDAT/TIME frames */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TYE/TYER: YYYY
|
||||||
|
* TDA/TDAT: DDMM
|
||||||
|
* TIM/TIME: HHMM
|
||||||
|
*
|
||||||
|
* TDRC: yyyy-MM-ddTHH:mm
|
||||||
|
*/
|
||||||
|
|
||||||
|
index = 0;
|
||||||
|
while ((frame = id3_tag_findframe(tag, ID3_FRAME_OBSOLETE, index++))) {
|
||||||
|
char const *id;
|
||||||
|
id3_byte_t const *data, *end;
|
||||||
|
id3_length_t length;
|
||||||
|
enum id3_field_textencoding encoding;
|
||||||
|
id3_ucs4_t *string;
|
||||||
|
|
||||||
|
id = id3_field_getframeid(&frame->fields[0]);
|
||||||
|
assert(id);
|
||||||
|
|
||||||
|
if (strcmp(id, "TYER") != 0 && strcmp(id, "YTYE") != 0 &&
|
||||||
|
strcmp(id, "TDAT") != 0 && strcmp(id, "YTDA") != 0 &&
|
||||||
|
strcmp(id, "TIME") != 0 && strcmp(id, "YTIM") != 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
data = id3_field_getbinarydata(&frame->fields[1], &length);
|
||||||
|
assert(data);
|
||||||
|
|
||||||
|
if (length < 1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
end = data + length;
|
||||||
|
|
||||||
|
encoding = id3_parse_uint(&data, 1);
|
||||||
|
string = id3_parse_string(&data, end - data, encoding, 0);
|
||||||
|
|
||||||
|
if (id3_ucs4_length(string) < 4) {
|
||||||
|
free(string);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(id, "TYER") == 0 ||
|
||||||
|
strcmp(id, "YTYE") == 0) {
|
||||||
|
timestamp[0] = string[0];
|
||||||
|
timestamp[1] = string[1];
|
||||||
|
timestamp[2] = string[2];
|
||||||
|
timestamp[3] = string[3];
|
||||||
|
}
|
||||||
|
else if (strcmp(id, "TDAT") == 0 ||
|
||||||
|
strcmp(id, "YTDA") == 0) {
|
||||||
|
timestamp[4] = '-';
|
||||||
|
timestamp[5] = string[2];
|
||||||
|
timestamp[6] = string[3];
|
||||||
|
timestamp[7] = '-';
|
||||||
|
timestamp[8] = string[0];
|
||||||
|
timestamp[9] = string[1];
|
||||||
|
}
|
||||||
|
else { /* TIME or YTIM */
|
||||||
|
timestamp[10] = 'T';
|
||||||
|
timestamp[11] = string[0];
|
||||||
|
timestamp[12] = string[1];
|
||||||
|
timestamp[13] = ':';
|
||||||
|
timestamp[14] = string[2];
|
||||||
|
timestamp[15] = string[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
free(string);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (timestamp[0]) {
|
||||||
|
id3_ucs4_t *strings;
|
||||||
|
|
||||||
|
frame = id3_frame_new("TDRC");
|
||||||
|
if (frame == 0)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
strings = timestamp;
|
||||||
|
|
||||||
|
if (id3_field_settextencoding(&frame->fields[0],
|
||||||
|
ID3_FIELD_TEXTENCODING_ISO_8859_1) == -1 ||
|
||||||
|
id3_field_setstrings(&frame->fields[1], 1, &strings) == -1 ||
|
||||||
|
id3_tag_attachframe(tag, frame) == -1) {
|
||||||
|
id3_frame_delete(frame);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0) {
|
||||||
|
fail:
|
||||||
|
result = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
568
src/libid3tag/frametype.c
Normal file
568
src/libid3tag/frametype.c
Normal file
@ -0,0 +1,568 @@
|
|||||||
|
/* C code produced by gperf version 3.0.1 */
|
||||||
|
/* Command-line: gperf -tCcTonD -K id -N id3_frametype_lookup -s -3 -k '*' frametype.gperf */
|
||||||
|
|
||||||
|
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
|
||||||
|
&& ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
|
||||||
|
&& (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
|
||||||
|
&& ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
|
||||||
|
&& ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
|
||||||
|
&& ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
|
||||||
|
&& ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
|
||||||
|
&& ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
|
||||||
|
&& ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
|
||||||
|
&& ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
|
||||||
|
&& ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
|
||||||
|
&& ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
|
||||||
|
&& ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
|
||||||
|
&& ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
|
||||||
|
&& ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
|
||||||
|
&& ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
|
||||||
|
&& ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
|
||||||
|
&& ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
|
||||||
|
&& ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
|
||||||
|
&& ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
|
||||||
|
&& ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
|
||||||
|
&& ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
|
||||||
|
&& ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
|
||||||
|
/* The character set is not based on ISO-646. */
|
||||||
|
error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#line 1 "frametype.gperf"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* libid3tag - ID3 tag manipulation library
|
||||||
|
* Copyright (C) 2000-2004 Underbit Technologies, Inc.
|
||||||
|
*
|
||||||
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* Id: frametype.gperf,v 1.7 2004/01/23 09:41:32 rob Exp
|
||||||
|
*/
|
||||||
|
|
||||||
|
# ifdef HAVE_CONFIG_H
|
||||||
|
# include "config.h"
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# include "global.h"
|
||||||
|
|
||||||
|
# include <string.h>
|
||||||
|
|
||||||
|
# include "id3tag.h"
|
||||||
|
# include "frametype.h"
|
||||||
|
|
||||||
|
# define FIELDS(id) static enum id3_field_type const fields_##id[]
|
||||||
|
|
||||||
|
/* frame field descriptions */
|
||||||
|
|
||||||
|
FIELDS(UFID) = {
|
||||||
|
ID3_FIELD_TYPE_LATIN1,
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(TXXX) = {
|
||||||
|
ID3_FIELD_TYPE_TEXTENCODING,
|
||||||
|
ID3_FIELD_TYPE_STRING,
|
||||||
|
ID3_FIELD_TYPE_STRING
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(WXXX) = {
|
||||||
|
ID3_FIELD_TYPE_TEXTENCODING,
|
||||||
|
ID3_FIELD_TYPE_STRING,
|
||||||
|
ID3_FIELD_TYPE_LATIN1
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(MCDI) = {
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(ETCO) = {
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(MLLT) = {
|
||||||
|
ID3_FIELD_TYPE_INT16,
|
||||||
|
ID3_FIELD_TYPE_INT24,
|
||||||
|
ID3_FIELD_TYPE_INT24,
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(SYTC) = {
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(USLT) = {
|
||||||
|
ID3_FIELD_TYPE_TEXTENCODING,
|
||||||
|
ID3_FIELD_TYPE_LANGUAGE,
|
||||||
|
ID3_FIELD_TYPE_STRING,
|
||||||
|
ID3_FIELD_TYPE_STRINGFULL
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(SYLT) = {
|
||||||
|
ID3_FIELD_TYPE_TEXTENCODING,
|
||||||
|
ID3_FIELD_TYPE_LANGUAGE,
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_STRING,
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(COMM) = {
|
||||||
|
ID3_FIELD_TYPE_TEXTENCODING,
|
||||||
|
ID3_FIELD_TYPE_LANGUAGE,
|
||||||
|
ID3_FIELD_TYPE_STRING,
|
||||||
|
ID3_FIELD_TYPE_STRINGFULL
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(RVA2) = {
|
||||||
|
ID3_FIELD_TYPE_LATIN1,
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(EQU2) = {
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_LATIN1,
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(RVRB) = {
|
||||||
|
ID3_FIELD_TYPE_INT16,
|
||||||
|
ID3_FIELD_TYPE_INT16,
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_INT8
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(APIC) = {
|
||||||
|
ID3_FIELD_TYPE_TEXTENCODING,
|
||||||
|
ID3_FIELD_TYPE_LATIN1,
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_STRING,
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(GEOB) = {
|
||||||
|
ID3_FIELD_TYPE_TEXTENCODING,
|
||||||
|
ID3_FIELD_TYPE_LATIN1,
|
||||||
|
ID3_FIELD_TYPE_STRING,
|
||||||
|
ID3_FIELD_TYPE_STRING,
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(PCNT) = {
|
||||||
|
ID3_FIELD_TYPE_INT32PLUS
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(POPM) = {
|
||||||
|
ID3_FIELD_TYPE_LATIN1,
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_INT32PLUS
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(RBUF) = {
|
||||||
|
ID3_FIELD_TYPE_INT24,
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_INT32
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(AENC) = {
|
||||||
|
ID3_FIELD_TYPE_LATIN1,
|
||||||
|
ID3_FIELD_TYPE_INT16,
|
||||||
|
ID3_FIELD_TYPE_INT16,
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(LINK) = {
|
||||||
|
ID3_FIELD_TYPE_FRAMEID,
|
||||||
|
ID3_FIELD_TYPE_LATIN1,
|
||||||
|
ID3_FIELD_TYPE_LATIN1LIST
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(POSS) = {
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(USER) = {
|
||||||
|
ID3_FIELD_TYPE_TEXTENCODING,
|
||||||
|
ID3_FIELD_TYPE_LANGUAGE,
|
||||||
|
ID3_FIELD_TYPE_STRING
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(OWNE) = {
|
||||||
|
ID3_FIELD_TYPE_TEXTENCODING,
|
||||||
|
ID3_FIELD_TYPE_LATIN1,
|
||||||
|
ID3_FIELD_TYPE_DATE,
|
||||||
|
ID3_FIELD_TYPE_STRING
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(COMR) = {
|
||||||
|
ID3_FIELD_TYPE_TEXTENCODING,
|
||||||
|
ID3_FIELD_TYPE_LATIN1,
|
||||||
|
ID3_FIELD_TYPE_DATE,
|
||||||
|
ID3_FIELD_TYPE_LATIN1,
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_STRING,
|
||||||
|
ID3_FIELD_TYPE_STRING,
|
||||||
|
ID3_FIELD_TYPE_LATIN1,
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(ENCR) = {
|
||||||
|
ID3_FIELD_TYPE_LATIN1,
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(GRID) = {
|
||||||
|
ID3_FIELD_TYPE_LATIN1,
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(PRIV) = {
|
||||||
|
ID3_FIELD_TYPE_LATIN1,
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(SIGN) = {
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(SEEK) = {
|
||||||
|
ID3_FIELD_TYPE_INT32
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(ASPI) = {
|
||||||
|
ID3_FIELD_TYPE_INT32,
|
||||||
|
ID3_FIELD_TYPE_INT32,
|
||||||
|
ID3_FIELD_TYPE_INT16,
|
||||||
|
ID3_FIELD_TYPE_INT8,
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(text) = {
|
||||||
|
ID3_FIELD_TYPE_TEXTENCODING,
|
||||||
|
ID3_FIELD_TYPE_STRINGLIST
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(url) = {
|
||||||
|
ID3_FIELD_TYPE_LATIN1
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(unknown) = {
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
FIELDS(ZOBS) = {
|
||||||
|
ID3_FIELD_TYPE_FRAMEID,
|
||||||
|
ID3_FIELD_TYPE_BINARYDATA
|
||||||
|
};
|
||||||
|
|
||||||
|
# define FRAME(id) \
|
||||||
|
sizeof(fields_##id) / sizeof(fields_##id[0]), fields_##id
|
||||||
|
|
||||||
|
# define PRESERVE 0
|
||||||
|
# define DISCARD ID3_FRAME_FLAG_FILEALTERPRESERVATION
|
||||||
|
# define OBSOLETE (DISCARD | ID3_FRAME_FLAG_TAGALTERPRESERVATION)
|
||||||
|
|
||||||
|
# define FRAMETYPE(type, id, flags, desc) \
|
||||||
|
struct id3_frametype const id3_frametype_##type = { \
|
||||||
|
0, FRAME(id), flags, desc \
|
||||||
|
}
|
||||||
|
|
||||||
|
/* static frame types */
|
||||||
|
|
||||||
|
FRAMETYPE(text, text, PRESERVE, "Unknown text information frame");
|
||||||
|
FRAMETYPE(url, url, PRESERVE, "Unknown URL link frame");
|
||||||
|
FRAMETYPE(experimental, unknown, PRESERVE, "Experimental frame");
|
||||||
|
FRAMETYPE(unknown, unknown, PRESERVE, "Unknown frame");
|
||||||
|
FRAMETYPE(obsolete, unknown, OBSOLETE, "Obsolete frame");
|
||||||
|
|
||||||
|
#define TOTAL_KEYWORDS 84
|
||||||
|
#define MIN_WORD_LENGTH 4
|
||||||
|
#define MAX_WORD_LENGTH 4
|
||||||
|
#define MIN_HASH_VALUE 7
|
||||||
|
#define MAX_HASH_VALUE 155
|
||||||
|
/* maximum key range = 149, duplicates = 0 */
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
__inline
|
||||||
|
#else
|
||||||
|
#ifdef __cplusplus
|
||||||
|
inline
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
static unsigned int
|
||||||
|
hash (str, len)
|
||||||
|
register const char *str;
|
||||||
|
register unsigned int len;
|
||||||
|
{
|
||||||
|
static const unsigned char asso_values[] =
|
||||||
|
{
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
43, 4, 47, 49, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 31, 53, 3, 15, 3,
|
||||||
|
24, 25, 10, 52, 69, 34, 23, 30, 1, 5,
|
||||||
|
10, 62, 20, 0, 28, 28, 22, 19, 47, 3,
|
||||||
|
10, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
|
||||||
|
156, 156, 156, 156, 156, 156, 156
|
||||||
|
};
|
||||||
|
return asso_values[(unsigned char)str[3]+1] + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[1]] + asso_values[(unsigned char)str[0]];
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
__inline
|
||||||
|
#endif
|
||||||
|
const struct id3_frametype *
|
||||||
|
id3_frametype_lookup (str, len)
|
||||||
|
register const char *str;
|
||||||
|
register unsigned int len;
|
||||||
|
{
|
||||||
|
static const struct id3_frametype wordlist[] =
|
||||||
|
{
|
||||||
|
#line 282 "frametype.gperf"
|
||||||
|
{"ENCR", FRAME(ENCR), PRESERVE, "Encryption method registration"},
|
||||||
|
#line 292 "frametype.gperf"
|
||||||
|
{"POPM", FRAME(POPM), PRESERVE, "Popularimeter"},
|
||||||
|
#line 351 "frametype.gperf"
|
||||||
|
{"WCOM", FRAME(url), PRESERVE, "Commercial information"},
|
||||||
|
#line 298 "frametype.gperf"
|
||||||
|
{"SEEK", FRAME(SEEK), DISCARD, "Seek frame"},
|
||||||
|
#line 349 "frametype.gperf"
|
||||||
|
{"USER", FRAME(USER), PRESERVE, "Terms of use"},
|
||||||
|
#line 285 "frametype.gperf"
|
||||||
|
{"GEOB", FRAME(GEOB), PRESERVE, "General encapsulated object"},
|
||||||
|
#line 304 "frametype.gperf"
|
||||||
|
{"TCOM", FRAME(text), PRESERVE, "Composer"},
|
||||||
|
#line 281 "frametype.gperf"
|
||||||
|
{"COMR", FRAME(COMR), PRESERVE, "Commercial frame"},
|
||||||
|
#line 280 "frametype.gperf"
|
||||||
|
{"COMM", FRAME(COMM), PRESERVE, "Comments"},
|
||||||
|
#line 305 "frametype.gperf"
|
||||||
|
{"TCON", FRAME(text), PRESERVE, "Content type"},
|
||||||
|
#line 291 "frametype.gperf"
|
||||||
|
{"PCNT", FRAME(PCNT), PRESERVE, "Play counter"},
|
||||||
|
#line 293 "frametype.gperf"
|
||||||
|
{"POSS", FRAME(POSS), DISCARD, "Position synchronisation frame"},
|
||||||
|
#line 284 "frametype.gperf"
|
||||||
|
{"ETCO", FRAME(ETCO), DISCARD, "Event timing codes"},
|
||||||
|
#line 332 "frametype.gperf"
|
||||||
|
{"TPE2", FRAME(text), PRESERVE, "Band/orchestra/accompaniment"},
|
||||||
|
#line 301 "frametype.gperf"
|
||||||
|
{"SYTC", FRAME(SYTC), DISCARD, "Synchronised tempo codes"},
|
||||||
|
#line 313 "frametype.gperf"
|
||||||
|
{"TENC", FRAME(text), DISCARD, "Encoded by"},
|
||||||
|
#line 309 "frametype.gperf"
|
||||||
|
{"TDOR", FRAME(text), PRESERVE, "Original release time"},
|
||||||
|
#line 290 "frametype.gperf"
|
||||||
|
{"OWNE", FRAME(OWNE), PRESERVE, "Ownership frame"},
|
||||||
|
#line 277 "frametype.gperf"
|
||||||
|
{"AENC", FRAME(AENC), DISCARD, "Audio encryption"},
|
||||||
|
#line 307 "frametype.gperf"
|
||||||
|
{"TDEN", FRAME(text), PRESERVE, "Encoding time"},
|
||||||
|
#line 345 "frametype.gperf"
|
||||||
|
{"TSSE", FRAME(text), PRESERVE, "Software/hardware and settings used for encoding"},
|
||||||
|
#line 339 "frametype.gperf"
|
||||||
|
{"TRSN", FRAME(text), PRESERVE, "Internet radio station name"},
|
||||||
|
#line 300 "frametype.gperf"
|
||||||
|
{"SYLT", FRAME(SYLT), DISCARD, "Synchronised lyric/text"},
|
||||||
|
#line 354 "frametype.gperf"
|
||||||
|
{"WOAR", FRAME(url), PRESERVE, "Official artist/performer webpage"},
|
||||||
|
#line 346 "frametype.gperf"
|
||||||
|
{"TSST", FRAME(text), PRESERVE, "Set subtitle"},
|
||||||
|
#line 330 "frametype.gperf"
|
||||||
|
{"TOWN", FRAME(text), PRESERVE, "File owner/licensee"},
|
||||||
|
#line 340 "frametype.gperf"
|
||||||
|
{"TRSO", FRAME(text), PRESERVE, "Internet radio station owner"},
|
||||||
|
#line 322 "frametype.gperf"
|
||||||
|
{"TLEN", FRAME(text), DISCARD, "Length"},
|
||||||
|
#line 358 "frametype.gperf"
|
||||||
|
{"WPUB", FRAME(url), PRESERVE, "Publishers official webpage"},
|
||||||
|
#line 343 "frametype.gperf"
|
||||||
|
{"TSOT", FRAME(text), PRESERVE, "Title sort order"},
|
||||||
|
#line 327 "frametype.gperf"
|
||||||
|
{"TOFN", FRAME(text), PRESERVE, "Original filename"},
|
||||||
|
#line 344 "frametype.gperf"
|
||||||
|
{"TSRC", FRAME(text), PRESERVE, "ISRC (international standard recording code)"},
|
||||||
|
#line 324 "frametype.gperf"
|
||||||
|
{"TMED", FRAME(text), PRESERVE, "Media type"},
|
||||||
|
#line 297 "frametype.gperf"
|
||||||
|
{"RVRB", FRAME(RVRB), PRESERVE, "Reverb"},
|
||||||
|
#line 328 "frametype.gperf"
|
||||||
|
{"TOLY", FRAME(text), PRESERVE, "Original lyricist(s)/text writer(s)"},
|
||||||
|
#line 329 "frametype.gperf"
|
||||||
|
{"TOPE", FRAME(text), PRESERVE, "Original artist(s)/performer(s)"},
|
||||||
|
#line 336 "frametype.gperf"
|
||||||
|
{"TPRO", FRAME(text), PRESERVE, "Produced notice"},
|
||||||
|
#line 337 "frametype.gperf"
|
||||||
|
{"TPUB", FRAME(text), PRESERVE, "Publisher"},
|
||||||
|
#line 357 "frametype.gperf"
|
||||||
|
{"WPAY", FRAME(url), PRESERVE, "Payment"},
|
||||||
|
#line 335 "frametype.gperf"
|
||||||
|
{"TPOS", FRAME(text), PRESERVE, "Part of a set"},
|
||||||
|
#line 356 "frametype.gperf"
|
||||||
|
{"WORS", FRAME(url), PRESERVE, "Official Internet radio station homepage"},
|
||||||
|
#line 325 "frametype.gperf"
|
||||||
|
{"TMOO", FRAME(text), PRESERVE, "Mood"},
|
||||||
|
#line 338 "frametype.gperf"
|
||||||
|
{"TRCK", FRAME(text), PRESERVE, "Track number/position in set"},
|
||||||
|
#line 320 "frametype.gperf"
|
||||||
|
{"TKEY", FRAME(text), PRESERVE, "Initial key"},
|
||||||
|
#line 308 "frametype.gperf"
|
||||||
|
{"TDLY", FRAME(text), PRESERVE, "Playlist delay"},
|
||||||
|
#line 296 "frametype.gperf"
|
||||||
|
{"RVA2", FRAME(RVA2), DISCARD, "Relative volume adjustment (2)"},
|
||||||
|
#line 310 "frametype.gperf"
|
||||||
|
{"TDRC", FRAME(text), PRESERVE, "Recording time"},
|
||||||
|
#line 350 "frametype.gperf"
|
||||||
|
{"USLT", FRAME(USLT), PRESERVE, "Unsynchronised lyric/text transcription"},
|
||||||
|
#line 353 "frametype.gperf"
|
||||||
|
{"WOAF", FRAME(url), PRESERVE, "Official audio file webpage"},
|
||||||
|
#line 312 "frametype.gperf"
|
||||||
|
{"TDTG", FRAME(text), PRESERVE, "Tagging time"},
|
||||||
|
#line 299 "frametype.gperf"
|
||||||
|
{"SIGN", FRAME(SIGN), PRESERVE, "Signature frame"},
|
||||||
|
#line 355 "frametype.gperf"
|
||||||
|
{"WOAS", FRAME(url), PRESERVE, "Official audio source webpage"},
|
||||||
|
#line 331 "frametype.gperf"
|
||||||
|
{"TPE1", FRAME(text), PRESERVE, "Lead performer(s)/soloist(s)"},
|
||||||
|
#line 302 "frametype.gperf"
|
||||||
|
{"TALB", FRAME(text), PRESERVE, "Album/movie/show title"},
|
||||||
|
#line 341 "frametype.gperf"
|
||||||
|
{"TSOA", FRAME(text), PRESERVE, "Album sort order"},
|
||||||
|
#line 321 "frametype.gperf"
|
||||||
|
{"TLAN", FRAME(text), PRESERVE, "Language(s)"},
|
||||||
|
#line 333 "frametype.gperf"
|
||||||
|
{"TPE3", FRAME(text), PRESERVE, "Conductor/performer refinement"},
|
||||||
|
#line 352 "frametype.gperf"
|
||||||
|
{"WCOP", FRAME(url), PRESERVE, "Copyright/legal information"},
|
||||||
|
#line 334 "frametype.gperf"
|
||||||
|
{"TPE4", FRAME(text), PRESERVE, "Interpreted, remixed, or otherwise modified by"},
|
||||||
|
#line 323 "frametype.gperf"
|
||||||
|
{"TMCL", FRAME(text), PRESERVE, "Musician credits list"},
|
||||||
|
#line 303 "frametype.gperf"
|
||||||
|
{"TBPM", FRAME(text), PRESERVE, "BPM (beats per minute)"},
|
||||||
|
#line 311 "frametype.gperf"
|
||||||
|
{"TDRL", FRAME(text), PRESERVE, "Release time"},
|
||||||
|
#line 326 "frametype.gperf"
|
||||||
|
{"TOAL", FRAME(text), PRESERVE, "Original album/movie/show title"},
|
||||||
|
#line 342 "frametype.gperf"
|
||||||
|
{"TSOP", FRAME(text), PRESERVE, "Performer sort order"},
|
||||||
|
#line 363 "frametype.gperf"
|
||||||
|
{"ZOBS", FRAME(ZOBS), OBSOLETE, "Obsolete frame"},
|
||||||
|
#line 283 "frametype.gperf"
|
||||||
|
{"EQU2", FRAME(EQU2), DISCARD, "Equalisation (2)"},
|
||||||
|
#line 306 "frametype.gperf"
|
||||||
|
{"TCOP", FRAME(text), PRESERVE, "Copyright message"},
|
||||||
|
#line 287 "frametype.gperf"
|
||||||
|
{"LINK", FRAME(LINK), PRESERVE, "Linked information"},
|
||||||
|
#line 286 "frametype.gperf"
|
||||||
|
{"GRID", FRAME(GRID), PRESERVE, "Group identification registration"},
|
||||||
|
#line 294 "frametype.gperf"
|
||||||
|
{"PRIV", FRAME(PRIV), PRESERVE, "Private frame"},
|
||||||
|
#line 315 "frametype.gperf"
|
||||||
|
{"TFLT", FRAME(text), PRESERVE, "File type"},
|
||||||
|
#line 289 "frametype.gperf"
|
||||||
|
{"MLLT", FRAME(MLLT), DISCARD, "MPEG location lookup table"},
|
||||||
|
#line 314 "frametype.gperf"
|
||||||
|
{"TEXT", FRAME(text), PRESERVE, "Lyricist/text writer"},
|
||||||
|
#line 348 "frametype.gperf"
|
||||||
|
{"UFID", FRAME(UFID), PRESERVE, "Unique file identifier"},
|
||||||
|
#line 278 "frametype.gperf"
|
||||||
|
{"APIC", FRAME(APIC), PRESERVE, "Attached picture"},
|
||||||
|
#line 279 "frametype.gperf"
|
||||||
|
{"ASPI", FRAME(ASPI), DISCARD, "Audio seek point index"},
|
||||||
|
#line 318 "frametype.gperf"
|
||||||
|
{"TIT2", FRAME(text), PRESERVE, "Title/songname/content description"},
|
||||||
|
#line 359 "frametype.gperf"
|
||||||
|
{"WXXX", FRAME(WXXX), PRESERVE, "User defined URL link frame"},
|
||||||
|
#line 288 "frametype.gperf"
|
||||||
|
{"MCDI", FRAME(MCDI), PRESERVE, "Music CD identifier"},
|
||||||
|
#line 316 "frametype.gperf"
|
||||||
|
{"TIPL", FRAME(text), PRESERVE, "Involved people list"},
|
||||||
|
#line 347 "frametype.gperf"
|
||||||
|
{"TXXX", FRAME(TXXX), PRESERVE, "User defined text information frame"},
|
||||||
|
#line 295 "frametype.gperf"
|
||||||
|
{"RBUF", FRAME(RBUF), PRESERVE, "Recommended buffer size"},
|
||||||
|
#line 317 "frametype.gperf"
|
||||||
|
{"TIT1", FRAME(text), PRESERVE, "Content group description"},
|
||||||
|
#line 319 "frametype.gperf"
|
||||||
|
{"TIT3", FRAME(text), PRESERVE, "Subtitle/description refinement"}
|
||||||
|
};
|
||||||
|
|
||||||
|
static const short lookup[] =
|
||||||
|
{
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1,
|
||||||
|
2, 3, -1, 4, -1, -1, -1, -1, 5, 6, 7, 8, -1, 9,
|
||||||
|
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
|
||||||
|
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
|
||||||
|
38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
|
||||||
|
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
|
||||||
|
66, 67, 68, 69, -1, 70, 71, -1, 72, 73, 74, -1, 75, -1,
|
||||||
|
76, -1, -1, -1, 77, 78, -1, -1, 79, -1, -1, -1, -1, 80,
|
||||||
|
81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 82, -1, -1,
|
||||||
|
-1, 83
|
||||||
|
};
|
||||||
|
|
||||||
|
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
|
||||||
|
{
|
||||||
|
register int key = hash (str, len);
|
||||||
|
|
||||||
|
if (key <= MAX_HASH_VALUE && key >= 0)
|
||||||
|
{
|
||||||
|
register int index = lookup[key];
|
||||||
|
|
||||||
|
if (index >= 0)
|
||||||
|
{
|
||||||
|
register const char *s = wordlist[index].id;
|
||||||
|
|
||||||
|
if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
|
||||||
|
return &wordlist[index];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user