/***************************************************************************
 *             __________               __   ___.
 *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
 *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
 *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
 *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
 *                     \/            \/     \/    \/            \/
 * $Id$
 *
 * Copyright (C) 2005 by Michiel van der Kolk 
 *
 * All files in this archive are subject to the GNU General Public License.
 * See the file COPYING in the source tree root for full license agreement.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ****************************************************************************/
#ifndef EDITTOKEN_H
#define EDITTOKEN_H

#define TOKEN_INVALID         -1
#define TOKEN_EOF              0 // EOF
#define TOKEN_NOT              1 // "not"
#define TOKEN_AND              2 // "and"
#define TOKEN_OR               3 // "or"
#define TOKEN_GT               4 // '>'
#define TOKEN_GTE              5 // '>='
#define TOKEN_LT               6 // '<'
#define TOKEN_LTE              7 // '<='
#define TOKEN_EQ               8 // '=='
#define TOKEN_NE               9 // '!='
#define TOKEN_CONTAINS         10 // "contains"
#define TOKEN_EQUALS           11 // "equals"
#define TOKEN_STARTSWITH       12
#define TOKEN_ENDSWITH         13
#define TOKEN_LPAREN           14 // '('
#define TOKEN_RPAREN           15 // ')'
#define TOKEN_NUM              16 // (0..9)+
#define TOKEN_NUMIDENTIFIER    17 // year, trackid, bpm, etc.
#define TOKEN_STRING           18 // (?)+
#define TOKEN_STRINGIDENTIFIER 19 // album, artist, title, genre ...
#define TOKEN_SHUFFLE          20
#define TOKEN_PLAYTIMELIMIT    21

// pseudotokens..
#define TOKEN_YEAR      118
#define TOKEN_RATING    119
#define TOKEN_PLAYCOUNT 120
#define TOKEN_TITLE     121
#define TOKEN_ARTIST    122
#define TOKEN_ALBUM     123
#define TOKEN_GENRE     124
#define TOKEN_FILENAME  125
#define TOKEN_EDIT      126
#define TOKEN_AUTORATING 127
#define TOKEN_PLAYTIME      128
#define TOKEN_TRACKNUM      129
#define TOKEN_SAMPLERATE    130
#define TOKEN_BITRATE       131

#define ACCEPT_EOF          0x1
#define ACCEPT_BOOLOP       0x2
#define ACCEPT_NUMOP        0x4
#define ACCEPT_STROP        0x8
#define ACCEPT_LPAREN       0x10
#define ACCEPT_RPAREN       0x20
#define ACCEPT_NUMARG       0x40
#define ACCEPT_STRARG       0x80
#define ACCEPT_NOT          0x100
#define ACCEPT_DELETE       0x200

#define INTVALUE_YEAR          1
#define INTVALUE_RATING        2
#define INTVALUE_PLAYCOUNT     3
#define INTVALUE_AUTORATING    4
#define INTVALUE_PLAYTIME      5
#define INTVALUE_TRACKNUM      6
#define INTVALUE_SAMPLERATE    7
#define INTVALUE_BITRATE       8
#define INTVALUE_TITLE        14
#define INTVALUE_ARTIST       15
#define INTVALUE_ALBUM        16
#define INTVALUE_GENRE        17
#define INTVALUE_FILENAME     18

#define SPELLING_LENGTH 100

struct token {
    char kind;
    char spelling[SPELLING_LENGTH + 3];
    long intvalue;
};
char *tokentypetostring(int tokentype);
char *tokentostring(struct token *token);
void buildtoken(int tokentype,struct token *token);
#endif
