Blame src/tokenparser.c

Packit Service aee942
Packit Service aee942
#line 3 "tokenparser.c"
Packit Service aee942
Packit Service aee942
#define  YY_INT_ALIGNED short int
Packit Service aee942
Packit Service aee942
/* A lexical scanner generated by flex */
Packit Service aee942
Packit Service aee942
#define FLEX_SCANNER
Packit Service aee942
#define YY_FLEX_MAJOR_VERSION 2
Packit Service aee942
#define YY_FLEX_MINOR_VERSION 6
Packit Service aee942
#define YY_FLEX_SUBMINOR_VERSION 1
Packit Service aee942
#if YY_FLEX_SUBMINOR_VERSION > 0
Packit Service aee942
#define FLEX_BETA
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
/* First, we deal with  platform-specific or compiler-specific issues. */
Packit Service aee942
Packit Service aee942
/* begin standard C headers. */
Packit Service aee942
#include <stdio.h>
Packit Service aee942
#include <string.h>
Packit Service aee942
#include <errno.h>
Packit Service aee942
#include <stdlib.h>
Packit Service aee942
Packit Service aee942
/* end standard C headers. */
Packit Service aee942
Packit Service aee942
/* flex integer type definitions */
Packit Service aee942
Packit Service aee942
#ifndef FLEXINT_H
Packit Service aee942
#define FLEXINT_H
Packit Service aee942
Packit Service aee942
/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
Packit Service aee942
Packit Service aee942
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
Packit Service aee942
Packit Service aee942
/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
Packit Service aee942
 * if you want the limit (max/min) macros for int types. 
Packit Service aee942
 */
Packit Service aee942
#ifndef __STDC_LIMIT_MACROS
Packit Service aee942
#define __STDC_LIMIT_MACROS 1
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
#include <inttypes.h>
Packit Service aee942
typedef int8_t flex_int8_t;
Packit Service aee942
typedef uint8_t flex_uint8_t;
Packit Service aee942
typedef int16_t flex_int16_t;
Packit Service aee942
typedef uint16_t flex_uint16_t;
Packit Service aee942
typedef int32_t flex_int32_t;
Packit Service aee942
typedef uint32_t flex_uint32_t;
Packit Service aee942
#else
Packit Service aee942
typedef signed char flex_int8_t;
Packit Service aee942
typedef short int flex_int16_t;
Packit Service aee942
typedef int flex_int32_t;
Packit Service aee942
typedef unsigned char flex_uint8_t; 
Packit Service aee942
typedef unsigned short int flex_uint16_t;
Packit Service aee942
typedef unsigned int flex_uint32_t;
Packit Service aee942
Packit Service aee942
/* Limits of integral types. */
Packit Service aee942
#ifndef INT8_MIN
Packit Service aee942
#define INT8_MIN               (-128)
Packit Service aee942
#endif
Packit Service aee942
#ifndef INT16_MIN
Packit Service aee942
#define INT16_MIN              (-32767-1)
Packit Service aee942
#endif
Packit Service aee942
#ifndef INT32_MIN
Packit Service aee942
#define INT32_MIN              (-2147483647-1)
Packit Service aee942
#endif
Packit Service aee942
#ifndef INT8_MAX
Packit Service aee942
#define INT8_MAX               (127)
Packit Service aee942
#endif
Packit Service aee942
#ifndef INT16_MAX
Packit Service aee942
#define INT16_MAX              (32767)
Packit Service aee942
#endif
Packit Service aee942
#ifndef INT32_MAX
Packit Service aee942
#define INT32_MAX              (2147483647)
Packit Service aee942
#endif
Packit Service aee942
#ifndef UINT8_MAX
Packit Service aee942
#define UINT8_MAX              (255U)
Packit Service aee942
#endif
Packit Service aee942
#ifndef UINT16_MAX
Packit Service aee942
#define UINT16_MAX             (65535U)
Packit Service aee942
#endif
Packit Service aee942
#ifndef UINT32_MAX
Packit Service aee942
#define UINT32_MAX             (4294967295U)
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
#endif /* ! C99 */
Packit Service aee942
Packit Service aee942
#endif /* ! FLEXINT_H */
Packit Service aee942
Packit Service aee942
/* TODO: this is always defined, so inline it */
Packit Service aee942
#define yyconst const
Packit Service aee942
Packit Service aee942
#if defined(__GNUC__) && __GNUC__ >= 3
Packit Service aee942
#define yynoreturn __attribute__((__noreturn__))
Packit Service aee942
#else
Packit Service aee942
#define yynoreturn
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
/* Returned upon end-of-file. */
Packit Service aee942
#define YY_NULL 0
Packit Service aee942
Packit Service aee942
/* Promotes a possibly negative, possibly signed char to an unsigned
Packit Service aee942
 * integer for use as an array index.  If the signed char is negative,
Packit Service aee942
 * we want to instead treat it as an 8-bit unsigned char, hence the
Packit Service aee942
 * double cast.
Packit Service aee942
 */
Packit Service aee942
#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
Packit Service aee942
Packit Service aee942
/* Enter a start condition.  This macro really ought to take a parameter,
Packit Service aee942
 * but we do it the disgusting crufty way forced on us by the ()-less
Packit Service aee942
 * definition of BEGIN.
Packit Service aee942
 */
Packit Service aee942
#define BEGIN (yy_start) = 1 + 2 *
Packit Service aee942
Packit Service aee942
/* Translate the current start state into a value that can be later handed
Packit Service aee942
 * to BEGIN to return to the state.  The YYSTATE alias is for lex
Packit Service aee942
 * compatibility.
Packit Service aee942
 */
Packit Service aee942
#define YY_START (((yy_start) - 1) / 2)
Packit Service aee942
#define YYSTATE YY_START
Packit Service aee942
Packit Service aee942
/* Action number for EOF rule of a given start state. */
Packit Service aee942
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
Packit Service aee942
Packit Service aee942
/* Special action meaning "start processing a new file". */
Packit Service aee942
#define YY_NEW_FILE yyrestart(yyin  )
Packit Service aee942
Packit Service aee942
#define YY_END_OF_BUFFER_CHAR 0
Packit Service aee942
Packit Service aee942
/* Size of default input buffer. */
Packit Service aee942
#ifndef YY_BUF_SIZE
Packit Service aee942
#ifdef __ia64__
Packit Service aee942
/* On IA-64, the buffer size is 16k, not 8k.
Packit Service aee942
 * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
Packit Service aee942
 * Ditto for the __ia64__ case accordingly.
Packit Service aee942
 */
Packit Service aee942
#define YY_BUF_SIZE 32768
Packit Service aee942
#else
Packit Service aee942
#define YY_BUF_SIZE 16384
Packit Service aee942
#endif /* __ia64__ */
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
/* The state buf must be large enough to hold one state per character in the main buffer.
Packit Service aee942
 */
Packit Service aee942
#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
Packit Service aee942
Packit Service aee942
#ifndef YY_TYPEDEF_YY_BUFFER_STATE
Packit Service aee942
#define YY_TYPEDEF_YY_BUFFER_STATE
Packit Service aee942
typedef struct yy_buffer_state *YY_BUFFER_STATE;
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
#ifndef YY_TYPEDEF_YY_SIZE_T
Packit Service aee942
#define YY_TYPEDEF_YY_SIZE_T
Packit Service aee942
typedef size_t yy_size_t;
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
extern int yyleng;
Packit Service aee942
Packit Service aee942
extern FILE *yyin, *yyout;
Packit Service aee942
Packit Service aee942
#define EOB_ACT_CONTINUE_SCAN 0
Packit Service aee942
#define EOB_ACT_END_OF_FILE 1
Packit Service aee942
#define EOB_ACT_LAST_MATCH 2
Packit Service aee942
Packit Service aee942
    #define YY_LESS_LINENO(n)
Packit Service aee942
    #define YY_LINENO_REWIND_TO(ptr)
Packit Service aee942
    
Packit Service aee942
/* Return all but the first "n" matched characters back to the input stream. */
Packit Service aee942
#define yyless(n) \
Packit Service aee942
	do \
Packit Service aee942
		{ \
Packit Service aee942
		/* Undo effects of setting up yytext. */ \
Packit Service aee942
        int yyless_macro_arg = (n); \
Packit Service aee942
        YY_LESS_LINENO(yyless_macro_arg);\
Packit Service aee942
		*yy_cp = (yy_hold_char); \
Packit Service aee942
		YY_RESTORE_YY_MORE_OFFSET \
Packit Service aee942
		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
Packit Service aee942
		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
Packit Service aee942
		} \
Packit Service aee942
	while ( 0 )
Packit Service aee942
Packit Service aee942
#define unput(c) yyunput( c, (yytext_ptr)  )
Packit Service aee942
Packit Service aee942
#ifndef YY_STRUCT_YY_BUFFER_STATE
Packit Service aee942
#define YY_STRUCT_YY_BUFFER_STATE
Packit Service aee942
struct yy_buffer_state
Packit Service aee942
	{
Packit Service aee942
	FILE *yy_input_file;
Packit Service aee942
Packit Service aee942
	char *yy_ch_buf;		/* input buffer */
Packit Service aee942
	char *yy_buf_pos;		/* current position in input buffer */
Packit Service aee942
Packit Service aee942
	/* Size of input buffer in bytes, not including room for EOB
Packit Service aee942
	 * characters.
Packit Service aee942
	 */
Packit Service aee942
	int yy_buf_size;
Packit Service aee942
Packit Service aee942
	/* Number of characters read into yy_ch_buf, not including EOB
Packit Service aee942
	 * characters.
Packit Service aee942
	 */
Packit Service aee942
	int yy_n_chars;
Packit Service aee942
Packit Service aee942
	/* Whether we "own" the buffer - i.e., we know we created it,
Packit Service aee942
	 * and can realloc() it to grow it, and should free() it to
Packit Service aee942
	 * delete it.
Packit Service aee942
	 */
Packit Service aee942
	int yy_is_our_buffer;
Packit Service aee942
Packit Service aee942
	/* Whether this is an "interactive" input source; if so, and
Packit Service aee942
	 * if we're using stdio for input, then we want to use getc()
Packit Service aee942
	 * instead of fread(), to make sure we stop fetching input after
Packit Service aee942
	 * each newline.
Packit Service aee942
	 */
Packit Service aee942
	int yy_is_interactive;
Packit Service aee942
Packit Service aee942
	/* Whether we're considered to be at the beginning of a line.
Packit Service aee942
	 * If so, '^' rules will be active on the next match, otherwise
Packit Service aee942
	 * not.
Packit Service aee942
	 */
Packit Service aee942
	int yy_at_bol;
Packit Service aee942
Packit Service aee942
    int yy_bs_lineno; /**< The line count. */
Packit Service aee942
    int yy_bs_column; /**< The column count. */
Packit Service aee942
    
Packit Service aee942
	/* Whether to try to fill the input buffer when we reach the
Packit Service aee942
	 * end of it.
Packit Service aee942
	 */
Packit Service aee942
	int yy_fill_buffer;
Packit Service aee942
Packit Service aee942
	int yy_buffer_status;
Packit Service aee942
Packit Service aee942
#define YY_BUFFER_NEW 0
Packit Service aee942
#define YY_BUFFER_NORMAL 1
Packit Service aee942
	/* When an EOF's been seen but there's still some text to process
Packit Service aee942
	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
Packit Service aee942
	 * shouldn't try reading from the input source any more.  We might
Packit Service aee942
	 * still have a bunch of tokens to match, though, because of
Packit Service aee942
	 * possible backing-up.
Packit Service aee942
	 *
Packit Service aee942
	 * When we actually see the EOF, we change the status to "new"
Packit Service aee942
	 * (via yyrestart()), so that the user can continue scanning by
Packit Service aee942
	 * just pointing yyin at a new input file.
Packit Service aee942
	 */
Packit Service aee942
#define YY_BUFFER_EOF_PENDING 2
Packit Service aee942
Packit Service aee942
	};
Packit Service aee942
#endif /* !YY_STRUCT_YY_BUFFER_STATE */
Packit Service aee942
Packit Service aee942
/* Stack of input buffers. */
Packit Service aee942
static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
Packit Service aee942
static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
Packit Service aee942
static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
Packit Service aee942
Packit Service aee942
/* We provide macros for accessing buffer states in case in the
Packit Service aee942
 * future we want to put the buffer states in a more general
Packit Service aee942
 * "scanner state".
Packit Service aee942
 *
Packit Service aee942
 * Returns the top of the stack, or NULL.
Packit Service aee942
 */
Packit Service aee942
#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
Packit Service aee942
                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
Packit Service aee942
                          : NULL)
Packit Service aee942
Packit Service aee942
/* Same as previous macro, but useful when we know that the buffer stack is not
Packit Service aee942
 * NULL or when we need an lvalue. For internal use only.
Packit Service aee942
 */
Packit Service aee942
#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
Packit Service aee942
Packit Service aee942
/* yy_hold_char holds the character lost when yytext is formed. */
Packit Service aee942
static char yy_hold_char;
Packit Service aee942
static int yy_n_chars;		/* number of characters read into yy_ch_buf */
Packit Service aee942
int yyleng;
Packit Service aee942
Packit Service aee942
/* Points to current character in buffer. */
Packit Service aee942
static char *yy_c_buf_p = NULL;
Packit Service aee942
static int yy_init = 0;		/* whether we need to initialize */
Packit Service aee942
static int yy_start = 0;	/* start state number */
Packit Service aee942
Packit Service aee942
/* Flag which is used to allow yywrap()'s to do buffer switches
Packit Service aee942
 * instead of setting up a fresh yyin.  A bit of a hack ...
Packit Service aee942
 */
Packit Service aee942
static int yy_did_buffer_switch_on_eof;
Packit Service aee942
Packit Service aee942
void yyrestart (FILE *input_file  );
Packit Service aee942
void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
Packit Service aee942
YY_BUFFER_STATE yy_create_buffer (FILE *file,int size  );
Packit Service aee942
void yy_delete_buffer (YY_BUFFER_STATE b  );
Packit Service aee942
void yy_flush_buffer (YY_BUFFER_STATE b  );
Packit Service aee942
void yypush_buffer_state (YY_BUFFER_STATE new_buffer  );
Packit Service aee942
void yypop_buffer_state (void );
Packit Service aee942
Packit Service aee942
static void yyensure_buffer_stack (void );
Packit Service aee942
static void yy_load_buffer_state (void );
Packit Service aee942
static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
Packit Service aee942
Packit Service aee942
#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
Packit Service aee942
Packit Service aee942
YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
Packit Service aee942
YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
Packit Service aee942
YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len  );
Packit Service aee942
Packit Service aee942
void *yyalloc (yy_size_t  );
Packit Service aee942
void *yyrealloc (void *,yy_size_t  );
Packit Service aee942
void yyfree (void *  );
Packit Service aee942
Packit Service aee942
#define yy_new_buffer yy_create_buffer
Packit Service aee942
Packit Service aee942
#define yy_set_interactive(is_interactive) \
Packit Service aee942
	{ \
Packit Service aee942
	if ( ! YY_CURRENT_BUFFER ){ \
Packit Service aee942
        yyensure_buffer_stack (); \
Packit Service aee942
		YY_CURRENT_BUFFER_LVALUE =    \
Packit Service aee942
            yy_create_buffer(yyin,YY_BUF_SIZE ); \
Packit Service aee942
	} \
Packit Service aee942
	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
Packit Service aee942
	}
Packit Service aee942
Packit Service aee942
#define yy_set_bol(at_bol) \
Packit Service aee942
	{ \
Packit Service aee942
	if ( ! YY_CURRENT_BUFFER ){\
Packit Service aee942
        yyensure_buffer_stack (); \
Packit Service aee942
		YY_CURRENT_BUFFER_LVALUE =    \
Packit Service aee942
            yy_create_buffer(yyin,YY_BUF_SIZE ); \
Packit Service aee942
	} \
Packit Service aee942
	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
Packit Service aee942
	}
Packit Service aee942
Packit Service aee942
#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
Packit Service aee942
Packit Service aee942
/* Begin user sect3 */
Packit Service aee942
Packit Service aee942
#define yywrap() (/*CONSTCOND*/1)
Packit Service aee942
#define YY_SKIP_YYWRAP
Packit Service aee942
Packit Service aee942
typedef unsigned char YY_CHAR;
Packit Service aee942
Packit Service aee942
FILE *yyin = NULL, *yyout = NULL;
Packit Service aee942
Packit Service aee942
typedef int yy_state_type;
Packit Service aee942
Packit Service aee942
extern int yylineno;
Packit Service aee942
Packit Service aee942
int yylineno = 1;
Packit Service aee942
Packit Service aee942
extern char *yytext;
Packit Service aee942
#ifdef yytext_ptr
Packit Service aee942
#undef yytext_ptr
Packit Service aee942
#endif
Packit Service aee942
#define yytext_ptr yytext
Packit Service aee942
Packit Service aee942
static yy_state_type yy_get_previous_state (void );
Packit Service aee942
static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
Packit Service aee942
static int yy_get_next_buffer (void );
Packit Service aee942
static void yynoreturn yy_fatal_error (yyconst char* msg  );
Packit Service aee942
Packit Service aee942
/* Done after the current pattern has been matched and before the
Packit Service aee942
 * corresponding action - sets up yytext.
Packit Service aee942
 */
Packit Service aee942
#define YY_DO_BEFORE_ACTION \
Packit Service aee942
	(yytext_ptr) = yy_bp; \
Packit Service aee942
	yyleng = (int) (yy_cp - yy_bp); \
Packit Service aee942
	(yy_hold_char) = *yy_cp; \
Packit Service aee942
	*yy_cp = '\0'; \
Packit Service aee942
	(yy_c_buf_p) = yy_cp;
Packit Service aee942
Packit Service aee942
#define YY_NUM_RULES 7
Packit Service aee942
#define YY_END_OF_BUFFER 8
Packit Service aee942
/* This struct is not used in this scanner,
Packit Service aee942
   but its presence is necessary. */
Packit Service aee942
struct yy_trans_info
Packit Service aee942
	{
Packit Service aee942
	flex_int32_t yy_verify;
Packit Service aee942
	flex_int32_t yy_nxt;
Packit Service aee942
	};
Packit Service aee942
static yyconst flex_int16_t yy_accept[39] =
Packit Service aee942
    {   0,
Packit Service aee942
        0,    0,    8,    6,    4,    2,    1,    6,    1,    0,
Packit Service aee942
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
Packit Service aee942
        0,    0,    0,    0,    0,    0,    0,    0,    0,    3,
Packit Service aee942
        0,    0,    0,    0,    0,    0,    5,    0
Packit Service aee942
    } ;
Packit Service aee942
Packit Service aee942
static yyconst YY_CHAR yy_ec[256] =
Packit Service aee942
    {   0,
Packit Service aee942
        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
Packit Service aee942
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
Packit Service aee942
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
Packit Service aee942
        1,    2,    4,    4,    5,    4,    4,    4,    4,    4,
Packit Service aee942
        4,    4,    4,    4,    4,    4,    6,    7,    7,    7,
Packit Service aee942
        7,    7,    7,    7,    7,    7,    7,    4,    4,    8,
Packit Service aee942
        4,    9,    4,    4,   10,   10,   10,   10,   10,   10,
Packit Service aee942
       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
Packit Service aee942
       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
Packit Service aee942
        4,    1,    4,    4,    4,    1,   11,   11,   11,   11,
Packit Service aee942
Packit Service aee942
       12,   11,   13,   11,   14,   11,   15,   11,   11,   16,
Packit Service aee942
       11,   11,   11,   17,   18,   19,   11,   11,   11,   11,
Packit Service aee942
       20,   11,    1,    1,    1,    4,    1,    1,    1,    1,
Packit Service aee942
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
Packit Service aee942
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
Packit Service aee942
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
Packit Service aee942
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
Packit Service aee942
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
Packit Service aee942
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
Packit Service aee942
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
Packit Service aee942
Packit Service aee942
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
Packit Service aee942
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
Packit Service aee942
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
Packit Service aee942
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
Packit Service aee942
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
Packit Service aee942
        1,    1,    1,    1,    1
Packit Service aee942
    } ;
Packit Service aee942
Packit Service aee942
static yyconst YY_CHAR yy_meta[21] =
Packit Service aee942
    {   0,
Packit Service aee942
        1,    2,    3,    4,    4,    4,    2,    1,    1,    2,
Packit Service aee942
        2,    2,    2,    2,    2,    2,    2,    2,    2,    2
Packit Service aee942
    } ;
Packit Service aee942
Packit Service aee942
static yyconst flex_uint16_t yy_base[43] =
Packit Service aee942
    {   0,
Packit Service aee942
        0,    7,   49,   50,   50,   50,    0,    1,    0,   36,
Packit Service aee942
       28,   26,   28,   35,   29,    0,   26,   33,   27,   33,
Packit Service aee942
       29,   22,    0,   24,   27,   14,   27,   23,   13,   50,
Packit Service aee942
       10,    9,    4,    1,    0,    2,   50,   50,   19,   23,
Packit Service aee942
        2,   26
Packit Service aee942
    } ;
Packit Service aee942
Packit Service aee942
static yyconst flex_int16_t yy_def[43] =
Packit Service aee942
    {   0,
Packit Service aee942
       39,   39,   38,   38,   38,   38,   40,   38,   40,   38,
Packit Service aee942
       38,   38,   38,   38,   38,   41,   38,   41,   38,   38,
Packit Service aee942
       38,   38,   42,   38,   42,   38,   38,   38,   38,   38,
Packit Service aee942
       38,   38,   38,   38,   38,   38,   38,    0,   38,   38,
Packit Service aee942
       38,   38
Packit Service aee942
    } ;
Packit Service aee942
Packit Service aee942
static yyconst flex_uint16_t yy_nxt[71] =
Packit Service aee942
    {   0,
Packit Service aee942
       38,    5,    6,   18,    7,   38,   38,    8,    5,    6,
Packit Service aee942
       37,    7,   36,   38,    8,   10,   35,   34,   11,    4,
Packit Service aee942
        4,    4,    4,    9,    9,   33,    9,   25,   32,   25,
Packit Service aee942
       31,   30,   29,   28,   27,   26,   24,   23,   22,   21,
Packit Service aee942
       20,   19,   17,   16,   15,   14,   13,   12,   38,    3,
Packit Service aee942
       38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
Packit Service aee942
       38,   38,   38,   38,   38,   38,   38,   38,   38,   38
Packit Service aee942
    } ;
Packit Service aee942
Packit Service aee942
static yyconst flex_int16_t yy_chk[71] =
Packit Service aee942
    {   0,
Packit Service aee942
        0,    1,    1,   41,    1,    0,    0,    1,    2,    2,
Packit Service aee942
       36,    2,   35,    0,    2,    8,   34,   33,    8,   39,
Packit Service aee942
       39,   39,   39,   40,   40,   32,   40,   42,   31,   42,
Packit Service aee942
       29,   28,   27,   26,   25,   24,   22,   21,   20,   19,
Packit Service aee942
       18,   17,   15,   14,   13,   12,   11,   10,    3,   38,
Packit Service aee942
       38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
Packit Service aee942
       38,   38,   38,   38,   38,   38,   38,   38,   38,   38
Packit Service aee942
    } ;
Packit Service aee942
Packit Service aee942
static yy_state_type yy_last_accepting_state;
Packit Service aee942
static char *yy_last_accepting_cpos;
Packit Service aee942
Packit Service aee942
extern int yy_flex_debug;
Packit Service aee942
int yy_flex_debug = 0;
Packit Service aee942
Packit Service aee942
/* The intent behind this definition is that it'll catch
Packit Service aee942
 * any uses of REJECT which flex missed.
Packit Service aee942
 */
Packit Service aee942
#define REJECT reject_used_but_not_detected
Packit Service aee942
#define yymore() yymore_used_but_not_detected
Packit Service aee942
#define YY_MORE_ADJ 0
Packit Service aee942
#define YY_RESTORE_YY_MORE_OFFSET
Packit Service aee942
char *yytext;
Packit Service aee942
#line 1 "tokenparser.l"
Packit Service aee942
/*
Packit Service aee942
 * Reads lexical config files and updates database.
Packit Service aee942
 *
Packit Service aee942
 * MUSCLE SmartCard Development ( http://pcsclite.alioth.debian.org/pcsclite.html )
Packit Service aee942
 *
Packit Service aee942
 * Copyright (C) 2001-2003
Packit Service aee942
 *  David Corcoran <corcoran@musclecard.com>
Packit Service aee942
 * Copyright (C) 2003-2010
Packit Service aee942
 *  Ludovic Rousseau <ludovic.rousseau@free.fr>
Packit Service aee942
 *
Packit Service aee942
Redistribution and use in source and binary forms, with or without
Packit Service aee942
modification, are permitted provided that the following conditions
Packit Service aee942
are met:
Packit Service aee942
Packit Service aee942
1. Redistributions of source code must retain the above copyright
Packit Service aee942
   notice, this list of conditions and the following disclaimer.
Packit Service aee942
2. Redistributions in binary form must reproduce the above copyright
Packit Service aee942
   notice, this list of conditions and the following disclaimer in the
Packit Service aee942
   documentation and/or other materials provided with the distribution.
Packit Service aee942
3. The name of the author may not be used to endorse or promote products
Packit Service aee942
   derived from this software without specific prior written permission.
Packit Service aee942
Packit Service aee942
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
Packit Service aee942
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
Packit Service aee942
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
Packit Service aee942
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
Packit Service aee942
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
Packit Service aee942
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
Packit Service aee942
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
Packit Service aee942
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Packit Service aee942
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
Packit Service aee942
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit Service aee942
 */
Packit Service aee942
/**
Packit Service aee942
 * @file
Packit Service aee942
 * @brief provides parsing functions for Info.plist files
Packit Service aee942
 * platforms
Packit Service aee942
 */
Packit Service aee942
#line 42 "tokenparser.l"
Packit Service aee942
Packit Service aee942
#include "config.h"
Packit Service aee942
#include <stdio.h>
Packit Service aee942
#include <string.h>
Packit Service aee942
#include <errno.h>
Packit Service aee942
#define NDEBUG
Packit Service aee942
#include <assert.h>
Packit Service aee942
Packit Service aee942
#include "simclist.h"
Packit Service aee942
#include "debuglog.h"
Packit Service aee942
#include "parser.h"
Packit Service aee942
Packit Service aee942
static void eval_key(char *pcToken, list_t *list_key);
Packit Service aee942
static void eval_value(char *pcToken, list_t *list_values);
Packit Service aee942
void tperrorCheck (char *pcToken_error);
Packit Service aee942
Packit Service aee942
static list_t *ListKeys;
Packit Service aee942
static list_t *ListValues;
Packit Service aee942
Packit Service aee942
#define YY_NO_INPUT 1
Packit Service aee942
#line 536 "tokenparser.c"
Packit Service aee942
Packit Service aee942
#define INITIAL 0
Packit Service aee942
Packit Service aee942
#ifndef YY_NO_UNISTD_H
Packit Service aee942
/* Special case for "unistd.h", since it is non-ANSI. We include it way
Packit Service aee942
 * down here because we want the user's section 1 to have been scanned first.
Packit Service aee942
 * The user has a chance to override it with an option.
Packit Service aee942
 */
Packit Service aee942
#include <unistd.h>
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
#ifndef YY_EXTRA_TYPE
Packit Service aee942
#define YY_EXTRA_TYPE void *
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
static int yy_init_globals (void );
Packit Service aee942
Packit Service aee942
/* Accessor methods to globals.
Packit Service aee942
   These are made visible to non-reentrant scanners for convenience. */
Packit Service aee942
Packit Service aee942
int yylex_destroy (void );
Packit Service aee942
Packit Service aee942
int yyget_debug (void );
Packit Service aee942
Packit Service aee942
void yyset_debug (int debug_flag  );
Packit Service aee942
Packit Service aee942
YY_EXTRA_TYPE yyget_extra (void );
Packit Service aee942
Packit Service aee942
void yyset_extra (YY_EXTRA_TYPE user_defined  );
Packit Service aee942
Packit Service aee942
FILE *yyget_in (void );
Packit Service aee942
Packit Service aee942
void yyset_in  (FILE * _in_str  );
Packit Service aee942
Packit Service aee942
FILE *yyget_out (void );
Packit Service aee942
Packit Service aee942
void yyset_out  (FILE * _out_str  );
Packit Service aee942
Packit Service aee942
			int yyget_leng (void );
Packit Service aee942
Packit Service aee942
char *yyget_text (void );
Packit Service aee942
Packit Service aee942
int yyget_lineno (void );
Packit Service aee942
Packit Service aee942
void yyset_lineno (int _line_number  );
Packit Service aee942
Packit Service aee942
/* Macros after this point can all be overridden by user definitions in
Packit Service aee942
 * section 1.
Packit Service aee942
 */
Packit Service aee942
Packit Service aee942
#ifndef YY_SKIP_YYWRAP
Packit Service aee942
#ifdef __cplusplus
Packit Service aee942
extern "C" int yywrap (void );
Packit Service aee942
#else
Packit Service aee942
extern int yywrap (void );
Packit Service aee942
#endif
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
#ifndef YY_NO_UNPUT
Packit Service aee942
    
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
#ifndef yytext_ptr
Packit Service aee942
static void yy_flex_strncpy (char *,yyconst char *,int );
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
#ifdef YY_NEED_STRLEN
Packit Service aee942
static int yy_flex_strlen (yyconst char * );
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
#ifndef YY_NO_INPUT
Packit Service aee942
Packit Service aee942
#ifdef __cplusplus
Packit Service aee942
static int yyinput (void );
Packit Service aee942
#else
Packit Service aee942
static int input (void );
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
/* Amount of stuff to slurp up with each read. */
Packit Service aee942
#ifndef YY_READ_BUF_SIZE
Packit Service aee942
#ifdef __ia64__
Packit Service aee942
/* On IA-64, the buffer size is 16k, not 8k */
Packit Service aee942
#define YY_READ_BUF_SIZE 16384
Packit Service aee942
#else
Packit Service aee942
#define YY_READ_BUF_SIZE 8192
Packit Service aee942
#endif /* __ia64__ */
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
/* Copy whatever the last rule matched to the standard output. */
Packit Service aee942
#ifndef ECHO
Packit Service aee942
/* This used to be an fputs(), but since the string might contain NUL's,
Packit Service aee942
 * we now use fwrite().
Packit Service aee942
 */
Packit Service aee942
#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
Packit Service aee942
 * is returned in "result".
Packit Service aee942
 */
Packit Service aee942
#ifndef YY_INPUT
Packit Service aee942
#define YY_INPUT(buf,result,max_size) \
Packit Service aee942
	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
Packit Service aee942
		{ \
Packit Service aee942
		int c = '*'; \
Packit Service aee942
		size_t n; \
Packit Service aee942
		for ( n = 0; n < max_size && \
Packit Service aee942
			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
Packit Service aee942
			buf[n] = (char) c; \
Packit Service aee942
		if ( c == '\n' ) \
Packit Service aee942
			buf[n++] = (char) c; \
Packit Service aee942
		if ( c == EOF && ferror( yyin ) ) \
Packit Service aee942
			YY_FATAL_ERROR( "input in flex scanner failed" ); \
Packit Service aee942
		result = n; \
Packit Service aee942
		} \
Packit Service aee942
	else \
Packit Service aee942
		{ \
Packit Service aee942
		errno=0; \
Packit Service aee942
		while ( (result = (int) fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
Packit Service aee942
			{ \
Packit Service aee942
			if( errno != EINTR) \
Packit Service aee942
				{ \
Packit Service aee942
				YY_FATAL_ERROR( "input in flex scanner failed" ); \
Packit Service aee942
				break; \
Packit Service aee942
				} \
Packit Service aee942
			errno=0; \
Packit Service aee942
			clearerr(yyin); \
Packit Service aee942
			} \
Packit Service aee942
		}\
Packit Service aee942
\
Packit Service aee942
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
/* No semi-colon after return; correct usage is to write "yyterminate();" -
Packit Service aee942
 * we don't want an extra ';' after the "return" because that will cause
Packit Service aee942
 * some compilers to complain about unreachable statements.
Packit Service aee942
 */
Packit Service aee942
#ifndef yyterminate
Packit Service aee942
#define yyterminate() return YY_NULL
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
/* Number of entries by which start-condition stack grows. */
Packit Service aee942
#ifndef YY_START_STACK_INCR
Packit Service aee942
#define YY_START_STACK_INCR 25
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
/* Report a fatal error. */
Packit Service aee942
#ifndef YY_FATAL_ERROR
Packit Service aee942
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
/* end tables serialization structures and prototypes */
Packit Service aee942
Packit Service aee942
/* Default declaration of generated scanner - a define so the user can
Packit Service aee942
 * easily add parameters.
Packit Service aee942
 */
Packit Service aee942
#ifndef YY_DECL
Packit Service aee942
#define YY_DECL_IS_OURS 1
Packit Service aee942
Packit Service aee942
extern int yylex (void);
Packit Service aee942
Packit Service aee942
#define YY_DECL int yylex (void)
Packit Service aee942
#endif /* !YY_DECL */
Packit Service aee942
Packit Service aee942
/* Code executed at the beginning of each rule, after yytext and yyleng
Packit Service aee942
 * have been set up.
Packit Service aee942
 */
Packit Service aee942
#ifndef YY_USER_ACTION
Packit Service aee942
#define YY_USER_ACTION
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
/* Code executed at the end of each rule. */
Packit Service aee942
#ifndef YY_BREAK
Packit Service aee942
#define YY_BREAK /*LINTED*/break;
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
#define YY_RULE_SETUP \
Packit Service aee942
	YY_USER_ACTION
Packit Service aee942
Packit Service aee942
/** The main scanner function which does all the work.
Packit Service aee942
 */
Packit Service aee942
YY_DECL
Packit Service aee942
{
Packit Service aee942
	yy_state_type yy_current_state;
Packit Service aee942
	char *yy_cp, *yy_bp;
Packit Service aee942
	int yy_act;
Packit Service aee942
    
Packit Service aee942
	if ( !(yy_init) )
Packit Service aee942
		{
Packit Service aee942
		(yy_init) = 1;
Packit Service aee942
Packit Service aee942
#ifdef YY_USER_INIT
Packit Service aee942
		YY_USER_INIT;
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
		if ( ! (yy_start) )
Packit Service aee942
			(yy_start) = 1;	/* first start state */
Packit Service aee942
Packit Service aee942
		if ( ! yyin )
Packit Service aee942
			yyin = stdin;
Packit Service aee942
Packit Service aee942
		if ( ! yyout )
Packit Service aee942
			yyout = stdout;
Packit Service aee942
Packit Service aee942
		if ( ! YY_CURRENT_BUFFER ) {
Packit Service aee942
			yyensure_buffer_stack ();
Packit Service aee942
			YY_CURRENT_BUFFER_LVALUE =
Packit Service aee942
				yy_create_buffer(yyin,YY_BUF_SIZE );
Packit Service aee942
		}
Packit Service aee942
Packit Service aee942
		yy_load_buffer_state( );
Packit Service aee942
		}
Packit Service aee942
Packit Service aee942
	{
Packit Service aee942
#line 67 "tokenparser.l"
Packit Service aee942
Packit Service aee942
Packit Service aee942
#line 755 "tokenparser.c"
Packit Service aee942
Packit Service aee942
	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
Packit Service aee942
		{
Packit Service aee942
		yy_cp = (yy_c_buf_p);
Packit Service aee942
Packit Service aee942
		/* Support of yytext. */
Packit Service aee942
		*yy_cp = (yy_hold_char);
Packit Service aee942
Packit Service aee942
		/* yy_bp points to the position in yy_ch_buf of the start of
Packit Service aee942
		 * the current run.
Packit Service aee942
		 */
Packit Service aee942
		yy_bp = yy_cp;
Packit Service aee942
Packit Service aee942
		yy_current_state = (yy_start);
Packit Service aee942
yy_match:
Packit Service aee942
		do
Packit Service aee942
			{
Packit Service aee942
			YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
Packit Service aee942
			if ( yy_accept[yy_current_state] )
Packit Service aee942
				{
Packit Service aee942
				(yy_last_accepting_state) = yy_current_state;
Packit Service aee942
				(yy_last_accepting_cpos) = yy_cp;
Packit Service aee942
				}
Packit Service aee942
			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
Packit Service aee942
				{
Packit Service aee942
				yy_current_state = (int) yy_def[yy_current_state];
Packit Service aee942
				if ( yy_current_state >= 39 )
Packit Service aee942
					yy_c = yy_meta[(unsigned int) yy_c];
Packit Service aee942
				}
Packit Service aee942
			yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
Packit Service aee942
			++yy_cp;
Packit Service aee942
			}
Packit Service aee942
		while ( yy_base[yy_current_state] != 50 );
Packit Service aee942
Packit Service aee942
yy_find_action:
Packit Service aee942
		yy_act = yy_accept[yy_current_state];
Packit Service aee942
		if ( yy_act == 0 )
Packit Service aee942
			{ /* have to back up */
Packit Service aee942
			yy_cp = (yy_last_accepting_cpos);
Packit Service aee942
			yy_current_state = (yy_last_accepting_state);
Packit Service aee942
			yy_act = yy_accept[yy_current_state];
Packit Service aee942
			}
Packit Service aee942
Packit Service aee942
		YY_DO_BEFORE_ACTION;
Packit Service aee942
Packit Service aee942
do_action:	/* This label is used only to access EOF actions. */
Packit Service aee942
Packit Service aee942
		switch ( yy_act )
Packit Service aee942
	{ /* beginning of action switch */
Packit Service aee942
			case 0: /* must back up */
Packit Service aee942
			/* undo the effects of YY_DO_BEFORE_ACTION */
Packit Service aee942
			*yy_cp = (yy_hold_char);
Packit Service aee942
			yy_cp = (yy_last_accepting_cpos);
Packit Service aee942
			yy_current_state = (yy_last_accepting_state);
Packit Service aee942
			goto yy_find_action;
Packit Service aee942
Packit Service aee942
case 1:
Packit Service aee942
YY_RULE_SETUP
Packit Service aee942
#line 69 "tokenparser.l"
Packit Service aee942
{}
Packit Service aee942
	YY_BREAK
Packit Service aee942
case 2:
Packit Service aee942
/* rule 2 can match eol */
Packit Service aee942
YY_RULE_SETUP
Packit Service aee942
#line 70 "tokenparser.l"
Packit Service aee942
{}
Packit Service aee942
	YY_BREAK
Packit Service aee942
case 3:
Packit Service aee942
YY_RULE_SETUP
Packit Service aee942
#line 71 "tokenparser.l"
Packit Service aee942
{ eval_key(yytext, ListKeys); }
Packit Service aee942
	YY_BREAK
Packit Service aee942
case 4:
Packit Service aee942
YY_RULE_SETUP
Packit Service aee942
#line 72 "tokenparser.l"
Packit Service aee942
{}
Packit Service aee942
	YY_BREAK
Packit Service aee942
case 5:
Packit Service aee942
YY_RULE_SETUP
Packit Service aee942
#line 73 "tokenparser.l"
Packit Service aee942
{ eval_value(yytext, ListValues); }
Packit Service aee942
	YY_BREAK
Packit Service aee942
case 6:
Packit Service aee942
YY_RULE_SETUP
Packit Service aee942
#line 74 "tokenparser.l"
Packit Service aee942
{ tperrorCheck(yytext); }
Packit Service aee942
	YY_BREAK
Packit Service aee942
case 7:
Packit Service aee942
YY_RULE_SETUP
Packit Service aee942
#line 75 "tokenparser.l"
Packit Service aee942
ECHO;
Packit Service aee942
	YY_BREAK
Packit Service aee942
#line 848 "tokenparser.c"
Packit Service aee942
case YY_STATE_EOF(INITIAL):
Packit Service aee942
	yyterminate();
Packit Service aee942
Packit Service aee942
	case YY_END_OF_BUFFER:
Packit Service aee942
		{
Packit Service aee942
		/* Amount of text matched not including the EOB char. */
Packit Service aee942
		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
Packit Service aee942
Packit Service aee942
		/* Undo the effects of YY_DO_BEFORE_ACTION. */
Packit Service aee942
		*yy_cp = (yy_hold_char);
Packit Service aee942
		YY_RESTORE_YY_MORE_OFFSET
Packit Service aee942
Packit Service aee942
		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
Packit Service aee942
			{
Packit Service aee942
			/* We're scanning a new file or input source.  It's
Packit Service aee942
			 * possible that this happened because the user
Packit Service aee942
			 * just pointed yyin at a new source and called
Packit Service aee942
			 * yylex().  If so, then we have to assure
Packit Service aee942
			 * consistency between YY_CURRENT_BUFFER and our
Packit Service aee942
			 * globals.  Here is the right place to do so, because
Packit Service aee942
			 * this is the first action (other than possibly a
Packit Service aee942
			 * back-up) that will match for the new input source.
Packit Service aee942
			 */
Packit Service aee942
			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
Packit Service aee942
			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
Packit Service aee942
			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
Packit Service aee942
			}
Packit Service aee942
Packit Service aee942
		/* Note that here we test for yy_c_buf_p "<=" to the position
Packit Service aee942
		 * of the first EOB in the buffer, since yy_c_buf_p will
Packit Service aee942
		 * already have been incremented past the NUL character
Packit Service aee942
		 * (since all states make transitions on EOB to the
Packit Service aee942
		 * end-of-buffer state).  Contrast this with the test
Packit Service aee942
		 * in input().
Packit Service aee942
		 */
Packit Service aee942
		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
Packit Service aee942
			{ /* This was really a NUL. */
Packit Service aee942
			yy_state_type yy_next_state;
Packit Service aee942
Packit Service aee942
			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
Packit Service aee942
Packit Service aee942
			yy_current_state = yy_get_previous_state(  );
Packit Service aee942
Packit Service aee942
			/* Okay, we're now positioned to make the NUL
Packit Service aee942
			 * transition.  We couldn't have
Packit Service aee942
			 * yy_get_previous_state() go ahead and do it
Packit Service aee942
			 * for us because it doesn't know how to deal
Packit Service aee942
			 * with the possibility of jamming (and we don't
Packit Service aee942
			 * want to build jamming into it because then it
Packit Service aee942
			 * will run more slowly).
Packit Service aee942
			 */
Packit Service aee942
Packit Service aee942
			yy_next_state = yy_try_NUL_trans( yy_current_state );
Packit Service aee942
Packit Service aee942
			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
Packit Service aee942
Packit Service aee942
			if ( yy_next_state )
Packit Service aee942
				{
Packit Service aee942
				/* Consume the NUL. */
Packit Service aee942
				yy_cp = ++(yy_c_buf_p);
Packit Service aee942
				yy_current_state = yy_next_state;
Packit Service aee942
				goto yy_match;
Packit Service aee942
				}
Packit Service aee942
Packit Service aee942
			else
Packit Service aee942
				{
Packit Service aee942
				yy_cp = (yy_c_buf_p);
Packit Service aee942
				goto yy_find_action;
Packit Service aee942
				}
Packit Service aee942
			}
Packit Service aee942
Packit Service aee942
		else switch ( yy_get_next_buffer(  ) )
Packit Service aee942
			{
Packit Service aee942
			case EOB_ACT_END_OF_FILE:
Packit Service aee942
				{
Packit Service aee942
				(yy_did_buffer_switch_on_eof) = 0;
Packit Service aee942
Packit Service aee942
				if ( yywrap( ) )
Packit Service aee942
					{
Packit Service aee942
					/* Note: because we've taken care in
Packit Service aee942
					 * yy_get_next_buffer() to have set up
Packit Service aee942
					 * yytext, we can now set up
Packit Service aee942
					 * yy_c_buf_p so that if some total
Packit Service aee942
					 * hoser (like flex itself) wants to
Packit Service aee942
					 * call the scanner after we return the
Packit Service aee942
					 * YY_NULL, it'll still work - another
Packit Service aee942
					 * YY_NULL will get returned.
Packit Service aee942
					 */
Packit Service aee942
					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
Packit Service aee942
Packit Service aee942
					yy_act = YY_STATE_EOF(YY_START);
Packit Service aee942
					goto do_action;
Packit Service aee942
					}
Packit Service aee942
Packit Service aee942
				else
Packit Service aee942
					{
Packit Service aee942
					if ( ! (yy_did_buffer_switch_on_eof) )
Packit Service aee942
						YY_NEW_FILE;
Packit Service aee942
					}
Packit Service aee942
				break;
Packit Service aee942
				}
Packit Service aee942
Packit Service aee942
			case EOB_ACT_CONTINUE_SCAN:
Packit Service aee942
				(yy_c_buf_p) =
Packit Service aee942
					(yytext_ptr) + yy_amount_of_matched_text;
Packit Service aee942
Packit Service aee942
				yy_current_state = yy_get_previous_state(  );
Packit Service aee942
Packit Service aee942
				yy_cp = (yy_c_buf_p);
Packit Service aee942
				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
Packit Service aee942
				goto yy_match;
Packit Service aee942
Packit Service aee942
			case EOB_ACT_LAST_MATCH:
Packit Service aee942
				(yy_c_buf_p) =
Packit Service aee942
				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
Packit Service aee942
Packit Service aee942
				yy_current_state = yy_get_previous_state(  );
Packit Service aee942
Packit Service aee942
				yy_cp = (yy_c_buf_p);
Packit Service aee942
				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
Packit Service aee942
				goto yy_find_action;
Packit Service aee942
			}
Packit Service aee942
		break;
Packit Service aee942
		}
Packit Service aee942
Packit Service aee942
	default:
Packit Service aee942
		YY_FATAL_ERROR(
Packit Service aee942
			"fatal flex scanner internal error--no action found" );
Packit Service aee942
	} /* end of action switch */
Packit Service aee942
		} /* end of scanning one token */
Packit Service aee942
	} /* end of user's declarations */
Packit Service aee942
} /* end of yylex */
Packit Service aee942
Packit Service aee942
/* yy_get_next_buffer - try to read in a new buffer
Packit Service aee942
 *
Packit Service aee942
 * Returns a code representing an action:
Packit Service aee942
 *	EOB_ACT_LAST_MATCH -
Packit Service aee942
 *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
Packit Service aee942
 *	EOB_ACT_END_OF_FILE - end of file
Packit Service aee942
 */
Packit Service aee942
static int yy_get_next_buffer (void)
Packit Service aee942
{
Packit Service aee942
    	char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
Packit Service aee942
	char *source = (yytext_ptr);
Packit Service aee942
	yy_size_t number_to_move, i;
Packit Service aee942
	int ret_val;
Packit Service aee942
Packit Service aee942
	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
Packit Service aee942
		YY_FATAL_ERROR(
Packit Service aee942
		"fatal flex scanner internal error--end of buffer missed" );
Packit Service aee942
Packit Service aee942
	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
Packit Service aee942
		{ /* Don't try to fill the buffer, so this is an EOF. */
Packit Service aee942
		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
Packit Service aee942
			{
Packit Service aee942
			/* We matched a single character, the EOB, so
Packit Service aee942
			 * treat this as a final EOF.
Packit Service aee942
			 */
Packit Service aee942
			return EOB_ACT_END_OF_FILE;
Packit Service aee942
			}
Packit Service aee942
Packit Service aee942
		else
Packit Service aee942
			{
Packit Service aee942
			/* We matched some text prior to the EOB, first
Packit Service aee942
			 * process it.
Packit Service aee942
			 */
Packit Service aee942
			return EOB_ACT_LAST_MATCH;
Packit Service aee942
			}
Packit Service aee942
		}
Packit Service aee942
Packit Service aee942
	/* Try to read more data. */
Packit Service aee942
Packit Service aee942
	/* First move last chars to start of buffer. */
Packit Service aee942
	number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1;
Packit Service aee942
Packit Service aee942
	for ( i = 0; i < number_to_move; ++i )
Packit Service aee942
		*(dest++) = *(source++);
Packit Service aee942
Packit Service aee942
	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
Packit Service aee942
		/* don't do the read, it's not guaranteed to return an EOF,
Packit Service aee942
		 * just force an EOF
Packit Service aee942
		 */
Packit Service aee942
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
Packit Service aee942
Packit Service aee942
	else
Packit Service aee942
		{
Packit Service aee942
			int num_to_read =
Packit Service aee942
			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
Packit Service aee942
Packit Service aee942
		while ( num_to_read <= 0 )
Packit Service aee942
			{ /* Not enough room in the buffer - grow it. */
Packit Service aee942
Packit Service aee942
			/* just a shorter name for the current buffer */
Packit Service aee942
			YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
Packit Service aee942
Packit Service aee942
			int yy_c_buf_p_offset =
Packit Service aee942
				(int) ((yy_c_buf_p) - b->yy_ch_buf);
Packit Service aee942
Packit Service aee942
			if ( b->yy_is_our_buffer )
Packit Service aee942
				{
Packit Service aee942
				int new_size = b->yy_buf_size * 2;
Packit Service aee942
Packit Service aee942
				if ( new_size <= 0 )
Packit Service aee942
					b->yy_buf_size += b->yy_buf_size / 8;
Packit Service aee942
				else
Packit Service aee942
					b->yy_buf_size *= 2;
Packit Service aee942
Packit Service aee942
				b->yy_ch_buf = (char *)
Packit Service aee942
					/* Include room in for 2 EOB chars. */
Packit Service aee942
					yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
Packit Service aee942
				}
Packit Service aee942
			else
Packit Service aee942
				/* Can't grow it, we don't own it. */
Packit Service aee942
				b->yy_ch_buf = NULL;
Packit Service aee942
Packit Service aee942
			if ( ! b->yy_ch_buf )
Packit Service aee942
				YY_FATAL_ERROR(
Packit Service aee942
				"fatal error - scanner input buffer overflow" );
Packit Service aee942
Packit Service aee942
			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
Packit Service aee942
Packit Service aee942
			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
Packit Service aee942
						number_to_move - 1;
Packit Service aee942
Packit Service aee942
			}
Packit Service aee942
Packit Service aee942
		if ( num_to_read > YY_READ_BUF_SIZE )
Packit Service aee942
			num_to_read = YY_READ_BUF_SIZE;
Packit Service aee942
Packit Service aee942
		/* Read in more data. */
Packit Service aee942
		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
Packit Service aee942
			(yy_n_chars), num_to_read );
Packit Service aee942
Packit Service aee942
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
Packit Service aee942
		}
Packit Service aee942
Packit Service aee942
	if ( (yy_n_chars) == 0 )
Packit Service aee942
		{
Packit Service aee942
		if ( number_to_move == YY_MORE_ADJ )
Packit Service aee942
			{
Packit Service aee942
			ret_val = EOB_ACT_END_OF_FILE;
Packit Service aee942
			yyrestart(yyin  );
Packit Service aee942
			}
Packit Service aee942
Packit Service aee942
		else
Packit Service aee942
			{
Packit Service aee942
			ret_val = EOB_ACT_LAST_MATCH;
Packit Service aee942
			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
Packit Service aee942
				YY_BUFFER_EOF_PENDING;
Packit Service aee942
			}
Packit Service aee942
		}
Packit Service aee942
Packit Service aee942
	else
Packit Service aee942
		ret_val = EOB_ACT_CONTINUE_SCAN;
Packit Service aee942
Packit Service aee942
	if ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
Packit Service aee942
		/* Extend the array by 50%, plus the number we really need. */
Packit Service aee942
		int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
Packit Service aee942
		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
Packit Service aee942
		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
Packit Service aee942
			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
Packit Service aee942
	}
Packit Service aee942
Packit Service aee942
	(yy_n_chars) += number_to_move;
Packit Service aee942
	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
Packit Service aee942
	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
Packit Service aee942
Packit Service aee942
	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
Packit Service aee942
Packit Service aee942
	return ret_val;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/* yy_get_previous_state - get the state just before the EOB char was reached */
Packit Service aee942
Packit Service aee942
    static yy_state_type yy_get_previous_state (void)
Packit Service aee942
{
Packit Service aee942
	yy_state_type yy_current_state;
Packit Service aee942
	char *yy_cp;
Packit Service aee942
    
Packit Service aee942
	yy_current_state = (yy_start);
Packit Service aee942
Packit Service aee942
	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
Packit Service aee942
		{
Packit Service aee942
		YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
Packit Service aee942
		if ( yy_accept[yy_current_state] )
Packit Service aee942
			{
Packit Service aee942
			(yy_last_accepting_state) = yy_current_state;
Packit Service aee942
			(yy_last_accepting_cpos) = yy_cp;
Packit Service aee942
			}
Packit Service aee942
		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
Packit Service aee942
			{
Packit Service aee942
			yy_current_state = (int) yy_def[yy_current_state];
Packit Service aee942
			if ( yy_current_state >= 39 )
Packit Service aee942
				yy_c = yy_meta[(unsigned int) yy_c];
Packit Service aee942
			}
Packit Service aee942
		yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
Packit Service aee942
		}
Packit Service aee942
Packit Service aee942
	return yy_current_state;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/* yy_try_NUL_trans - try to make a transition on the NUL character
Packit Service aee942
 *
Packit Service aee942
 * synopsis
Packit Service aee942
 *	next_state = yy_try_NUL_trans( current_state );
Packit Service aee942
 */
Packit Service aee942
    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
Packit Service aee942
{
Packit Service aee942
	int yy_is_jam;
Packit Service aee942
    	char *yy_cp = (yy_c_buf_p);
Packit Service aee942
Packit Service aee942
	YY_CHAR yy_c = 1;
Packit Service aee942
	if ( yy_accept[yy_current_state] )
Packit Service aee942
		{
Packit Service aee942
		(yy_last_accepting_state) = yy_current_state;
Packit Service aee942
		(yy_last_accepting_cpos) = yy_cp;
Packit Service aee942
		}
Packit Service aee942
	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
Packit Service aee942
		{
Packit Service aee942
		yy_current_state = (int) yy_def[yy_current_state];
Packit Service aee942
		if ( yy_current_state >= 39 )
Packit Service aee942
			yy_c = yy_meta[(unsigned int) yy_c];
Packit Service aee942
		}
Packit Service aee942
	yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
Packit Service aee942
	yy_is_jam = (yy_current_state == 38);
Packit Service aee942
Packit Service aee942
		return yy_is_jam ? 0 : yy_current_state;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
#ifndef YY_NO_UNPUT
Packit Service aee942
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
#ifndef YY_NO_INPUT
Packit Service aee942
#ifdef __cplusplus
Packit Service aee942
    static int yyinput (void)
Packit Service aee942
#else
Packit Service aee942
    static int input  (void)
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
{
Packit Service aee942
	int c;
Packit Service aee942
    
Packit Service aee942
	*(yy_c_buf_p) = (yy_hold_char);
Packit Service aee942
Packit Service aee942
	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
Packit Service aee942
		{
Packit Service aee942
		/* yy_c_buf_p now points to the character we want to return.
Packit Service aee942
		 * If this occurs *before* the EOB characters, then it's a
Packit Service aee942
		 * valid NUL; if not, then we've hit the end of the buffer.
Packit Service aee942
		 */
Packit Service aee942
		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
Packit Service aee942
			/* This was really a NUL. */
Packit Service aee942
			*(yy_c_buf_p) = '\0';
Packit Service aee942
Packit Service aee942
		else
Packit Service aee942
			{ /* need more input */
Packit Service aee942
			int offset = (yy_c_buf_p) - (yytext_ptr);
Packit Service aee942
			++(yy_c_buf_p);
Packit Service aee942
Packit Service aee942
			switch ( yy_get_next_buffer(  ) )
Packit Service aee942
				{
Packit Service aee942
				case EOB_ACT_LAST_MATCH:
Packit Service aee942
					/* This happens because yy_g_n_b()
Packit Service aee942
					 * sees that we've accumulated a
Packit Service aee942
					 * token and flags that we need to
Packit Service aee942
					 * try matching the token before
Packit Service aee942
					 * proceeding.  But for input(),
Packit Service aee942
					 * there's no matching to consider.
Packit Service aee942
					 * So convert the EOB_ACT_LAST_MATCH
Packit Service aee942
					 * to EOB_ACT_END_OF_FILE.
Packit Service aee942
					 */
Packit Service aee942
Packit Service aee942
					/* Reset buffer status. */
Packit Service aee942
					yyrestart(yyin );
Packit Service aee942
Packit Service aee942
					/*FALLTHROUGH*/
Packit Service aee942
Packit Service aee942
				case EOB_ACT_END_OF_FILE:
Packit Service aee942
					{
Packit Service aee942
					if ( yywrap( ) )
Packit Service aee942
						return 0;
Packit Service aee942
Packit Service aee942
					if ( ! (yy_did_buffer_switch_on_eof) )
Packit Service aee942
						YY_NEW_FILE;
Packit Service aee942
#ifdef __cplusplus
Packit Service aee942
					return yyinput();
Packit Service aee942
#else
Packit Service aee942
					return input();
Packit Service aee942
#endif
Packit Service aee942
					}
Packit Service aee942
Packit Service aee942
				case EOB_ACT_CONTINUE_SCAN:
Packit Service aee942
					(yy_c_buf_p) = (yytext_ptr) + offset;
Packit Service aee942
					break;
Packit Service aee942
				}
Packit Service aee942
			}
Packit Service aee942
		}
Packit Service aee942
Packit Service aee942
	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
Packit Service aee942
	*(yy_c_buf_p) = '\0';	/* preserve yytext */
Packit Service aee942
	(yy_hold_char) = *++(yy_c_buf_p);
Packit Service aee942
Packit Service aee942
	return c;
Packit Service aee942
}
Packit Service aee942
#endif	/* ifndef YY_NO_INPUT */
Packit Service aee942
Packit Service aee942
/** Immediately switch to a different input stream.
Packit Service aee942
 * @param input_file A readable stream.
Packit Service aee942
 * 
Packit Service aee942
 * @note This function does not reset the start condition to @c INITIAL .
Packit Service aee942
 */
Packit Service aee942
    void yyrestart  (FILE * input_file )
Packit Service aee942
{
Packit Service aee942
    
Packit Service aee942
	if ( ! YY_CURRENT_BUFFER ){
Packit Service aee942
        yyensure_buffer_stack ();
Packit Service aee942
		YY_CURRENT_BUFFER_LVALUE =
Packit Service aee942
            yy_create_buffer(yyin,YY_BUF_SIZE );
Packit Service aee942
	}
Packit Service aee942
Packit Service aee942
	yy_init_buffer(YY_CURRENT_BUFFER,input_file );
Packit Service aee942
	yy_load_buffer_state( );
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/** Switch to a different input buffer.
Packit Service aee942
 * @param new_buffer The new input buffer.
Packit Service aee942
 * 
Packit Service aee942
 */
Packit Service aee942
    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
Packit Service aee942
{
Packit Service aee942
    
Packit Service aee942
	/* TODO. We should be able to replace this entire function body
Packit Service aee942
	 * with
Packit Service aee942
	 *		yypop_buffer_state();
Packit Service aee942
	 *		yypush_buffer_state(new_buffer);
Packit Service aee942
     */
Packit Service aee942
	yyensure_buffer_stack ();
Packit Service aee942
	if ( YY_CURRENT_BUFFER == new_buffer )
Packit Service aee942
		return;
Packit Service aee942
Packit Service aee942
	if ( YY_CURRENT_BUFFER )
Packit Service aee942
		{
Packit Service aee942
		/* Flush out information for old buffer. */
Packit Service aee942
		*(yy_c_buf_p) = (yy_hold_char);
Packit Service aee942
		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
Packit Service aee942
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
Packit Service aee942
		}
Packit Service aee942
Packit Service aee942
	YY_CURRENT_BUFFER_LVALUE = new_buffer;
Packit Service aee942
	yy_load_buffer_state( );
Packit Service aee942
Packit Service aee942
	/* We don't actually know whether we did this switch during
Packit Service aee942
	 * EOF (yywrap()) processing, but the only time this flag
Packit Service aee942
	 * is looked at is after yywrap() is called, so it's safe
Packit Service aee942
	 * to go ahead and always set it.
Packit Service aee942
	 */
Packit Service aee942
	(yy_did_buffer_switch_on_eof) = 1;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
static void yy_load_buffer_state  (void)
Packit Service aee942
{
Packit Service aee942
    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
Packit Service aee942
	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
Packit Service aee942
	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
Packit Service aee942
	(yy_hold_char) = *(yy_c_buf_p);
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/** Allocate and initialize an input buffer state.
Packit Service aee942
 * @param file A readable stream.
Packit Service aee942
 * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
Packit Service aee942
 * 
Packit Service aee942
 * @return the allocated buffer state.
Packit Service aee942
 */
Packit Service aee942
    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
Packit Service aee942
{
Packit Service aee942
	YY_BUFFER_STATE b;
Packit Service aee942
    
Packit Service aee942
	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
Packit Service aee942
	if ( ! b )
Packit Service aee942
		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
Packit Service aee942
Packit Service aee942
	b->yy_buf_size = (yy_size_t)size;
Packit Service aee942
Packit Service aee942
	/* yy_ch_buf has to be 2 characters longer than the size given because
Packit Service aee942
	 * we need to put in 2 end-of-buffer characters.
Packit Service aee942
	 */
Packit Service aee942
	b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2  );
Packit Service aee942
	if ( ! b->yy_ch_buf )
Packit Service aee942
		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
Packit Service aee942
Packit Service aee942
	b->yy_is_our_buffer = 1;
Packit Service aee942
Packit Service aee942
	yy_init_buffer(b,file );
Packit Service aee942
Packit Service aee942
	return b;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/** Destroy the buffer.
Packit Service aee942
 * @param b a buffer created with yy_create_buffer()
Packit Service aee942
 * 
Packit Service aee942
 */
Packit Service aee942
    void yy_delete_buffer (YY_BUFFER_STATE  b )
Packit Service aee942
{
Packit Service aee942
    
Packit Service aee942
	if ( ! b )
Packit Service aee942
		return;
Packit Service aee942
Packit Service aee942
	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
Packit Service aee942
		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
Packit Service aee942
Packit Service aee942
	if ( b->yy_is_our_buffer )
Packit Service aee942
		yyfree((void *) b->yy_ch_buf  );
Packit Service aee942
Packit Service aee942
	yyfree((void *) b  );
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/* Initializes or reinitializes a buffer.
Packit Service aee942
 * This function is sometimes called more than once on the same buffer,
Packit Service aee942
 * such as during a yyrestart() or at EOF.
Packit Service aee942
 */
Packit Service aee942
    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
Packit Service aee942
Packit Service aee942
{
Packit Service aee942
	int oerrno = errno;
Packit Service aee942
    
Packit Service aee942
	yy_flush_buffer(b );
Packit Service aee942
Packit Service aee942
	b->yy_input_file = file;
Packit Service aee942
	b->yy_fill_buffer = 1;
Packit Service aee942
Packit Service aee942
    /* If b is the current buffer, then yy_init_buffer was _probably_
Packit Service aee942
     * called from yyrestart() or through yy_get_next_buffer.
Packit Service aee942
     * In that case, we don't want to reset the lineno or column.
Packit Service aee942
     */
Packit Service aee942
    if (b != YY_CURRENT_BUFFER){
Packit Service aee942
        b->yy_bs_lineno = 1;
Packit Service aee942
        b->yy_bs_column = 0;
Packit Service aee942
    }
Packit Service aee942
Packit Service aee942
        b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
Packit Service aee942
    
Packit Service aee942
	errno = oerrno;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
Packit Service aee942
 * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
Packit Service aee942
 * 
Packit Service aee942
 */
Packit Service aee942
    void yy_flush_buffer (YY_BUFFER_STATE  b )
Packit Service aee942
{
Packit Service aee942
    	if ( ! b )
Packit Service aee942
		return;
Packit Service aee942
Packit Service aee942
	b->yy_n_chars = 0;
Packit Service aee942
Packit Service aee942
	/* We always need two end-of-buffer characters.  The first causes
Packit Service aee942
	 * a transition to the end-of-buffer state.  The second causes
Packit Service aee942
	 * a jam in that state.
Packit Service aee942
	 */
Packit Service aee942
	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
Packit Service aee942
	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
Packit Service aee942
Packit Service aee942
	b->yy_buf_pos = &b->yy_ch_buf[0];
Packit Service aee942
Packit Service aee942
	b->yy_at_bol = 1;
Packit Service aee942
	b->yy_buffer_status = YY_BUFFER_NEW;
Packit Service aee942
Packit Service aee942
	if ( b == YY_CURRENT_BUFFER )
Packit Service aee942
		yy_load_buffer_state( );
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/** Pushes the new state onto the stack. The new state becomes
Packit Service aee942
 *  the current state. This function will allocate the stack
Packit Service aee942
 *  if necessary.
Packit Service aee942
 *  @param new_buffer The new state.
Packit Service aee942
 *  
Packit Service aee942
 */
Packit Service aee942
void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
Packit Service aee942
{
Packit Service aee942
    	if (new_buffer == NULL)
Packit Service aee942
		return;
Packit Service aee942
Packit Service aee942
	yyensure_buffer_stack();
Packit Service aee942
Packit Service aee942
	/* This block is copied from yy_switch_to_buffer. */
Packit Service aee942
	if ( YY_CURRENT_BUFFER )
Packit Service aee942
		{
Packit Service aee942
		/* Flush out information for old buffer. */
Packit Service aee942
		*(yy_c_buf_p) = (yy_hold_char);
Packit Service aee942
		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
Packit Service aee942
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
Packit Service aee942
		}
Packit Service aee942
Packit Service aee942
	/* Only push if top exists. Otherwise, replace top. */
Packit Service aee942
	if (YY_CURRENT_BUFFER)
Packit Service aee942
		(yy_buffer_stack_top)++;
Packit Service aee942
	YY_CURRENT_BUFFER_LVALUE = new_buffer;
Packit Service aee942
Packit Service aee942
	/* copied from yy_switch_to_buffer. */
Packit Service aee942
	yy_load_buffer_state( );
Packit Service aee942
	(yy_did_buffer_switch_on_eof) = 1;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/** Removes and deletes the top of the stack, if present.
Packit Service aee942
 *  The next element becomes the new top.
Packit Service aee942
 *  
Packit Service aee942
 */
Packit Service aee942
void yypop_buffer_state (void)
Packit Service aee942
{
Packit Service aee942
    	if (!YY_CURRENT_BUFFER)
Packit Service aee942
		return;
Packit Service aee942
Packit Service aee942
	yy_delete_buffer(YY_CURRENT_BUFFER );
Packit Service aee942
	YY_CURRENT_BUFFER_LVALUE = NULL;
Packit Service aee942
	if ((yy_buffer_stack_top) > 0)
Packit Service aee942
		--(yy_buffer_stack_top);
Packit Service aee942
Packit Service aee942
	if (YY_CURRENT_BUFFER) {
Packit Service aee942
		yy_load_buffer_state( );
Packit Service aee942
		(yy_did_buffer_switch_on_eof) = 1;
Packit Service aee942
	}
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/* Allocates the stack if it does not exist.
Packit Service aee942
 *  Guarantees space for at least one push.
Packit Service aee942
 */
Packit Service aee942
static void yyensure_buffer_stack (void)
Packit Service aee942
{
Packit Service aee942
	int num_to_alloc;
Packit Service aee942
    
Packit Service aee942
	if (!(yy_buffer_stack)) {
Packit Service aee942
Packit Service aee942
		/* First allocation is just for 2 elements, since we don't know if this
Packit Service aee942
		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
Packit Service aee942
		 * immediate realloc on the next call.
Packit Service aee942
         */
Packit Service aee942
      num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
Packit Service aee942
		(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
Packit Service aee942
								(num_to_alloc * sizeof(struct yy_buffer_state*)
Packit Service aee942
								);
Packit Service aee942
		if ( ! (yy_buffer_stack) )
Packit Service aee942
			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
Packit Service aee942
								  
Packit Service aee942
		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
Packit Service aee942
				
Packit Service aee942
		(yy_buffer_stack_max) = num_to_alloc;
Packit Service aee942
		(yy_buffer_stack_top) = 0;
Packit Service aee942
		return;
Packit Service aee942
	}
Packit Service aee942
Packit Service aee942
	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
Packit Service aee942
Packit Service aee942
		/* Increase the buffer to prepare for a possible push. */
Packit Service aee942
		yy_size_t grow_size = 8 /* arbitrary grow size */;
Packit Service aee942
Packit Service aee942
		num_to_alloc = (yy_buffer_stack_max) + grow_size;
Packit Service aee942
		(yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
Packit Service aee942
								((yy_buffer_stack),
Packit Service aee942
								num_to_alloc * sizeof(struct yy_buffer_state*)
Packit Service aee942
								);
Packit Service aee942
		if ( ! (yy_buffer_stack) )
Packit Service aee942
			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
Packit Service aee942
Packit Service aee942
		/* zero only the new slots.*/
Packit Service aee942
		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
Packit Service aee942
		(yy_buffer_stack_max) = num_to_alloc;
Packit Service aee942
	}
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/** Setup the input buffer state to scan directly from a user-specified character buffer.
Packit Service aee942
 * @param base the character buffer
Packit Service aee942
 * @param size the size in bytes of the character buffer
Packit Service aee942
 * 
Packit Service aee942
 * @return the newly allocated buffer state object. 
Packit Service aee942
 */
Packit Service aee942
YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
Packit Service aee942
{
Packit Service aee942
	YY_BUFFER_STATE b;
Packit Service aee942
    
Packit Service aee942
	if ( size < 2 ||
Packit Service aee942
	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
Packit Service aee942
	     base[size-1] != YY_END_OF_BUFFER_CHAR )
Packit Service aee942
		/* They forgot to leave room for the EOB's. */
Packit Service aee942
		return NULL;
Packit Service aee942
Packit Service aee942
	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
Packit Service aee942
	if ( ! b )
Packit Service aee942
		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
Packit Service aee942
Packit Service aee942
	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
Packit Service aee942
	b->yy_buf_pos = b->yy_ch_buf = base;
Packit Service aee942
	b->yy_is_our_buffer = 0;
Packit Service aee942
	b->yy_input_file = NULL;
Packit Service aee942
	b->yy_n_chars = b->yy_buf_size;
Packit Service aee942
	b->yy_is_interactive = 0;
Packit Service aee942
	b->yy_at_bol = 1;
Packit Service aee942
	b->yy_fill_buffer = 0;
Packit Service aee942
	b->yy_buffer_status = YY_BUFFER_NEW;
Packit Service aee942
Packit Service aee942
	yy_switch_to_buffer(b  );
Packit Service aee942
Packit Service aee942
	return b;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/** Setup the input buffer state to scan a string. The next call to yylex() will
Packit Service aee942
 * scan from a @e copy of @a str.
Packit Service aee942
 * @param yystr a NUL-terminated string to scan
Packit Service aee942
 * 
Packit Service aee942
 * @return the newly allocated buffer state object.
Packit Service aee942
 * @note If you want to scan bytes that may contain NUL values, then use
Packit Service aee942
 *       yy_scan_bytes() instead.
Packit Service aee942
 */
Packit Service aee942
YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
Packit Service aee942
{
Packit Service aee942
    
Packit Service aee942
	return yy_scan_bytes(yystr,(int) strlen(yystr) );
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
Packit Service aee942
 * scan from a @e copy of @a bytes.
Packit Service aee942
 * @param yybytes the byte buffer to scan
Packit Service aee942
 * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
Packit Service aee942
 * 
Packit Service aee942
 * @return the newly allocated buffer state object.
Packit Service aee942
 */
Packit Service aee942
YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
Packit Service aee942
{
Packit Service aee942
	YY_BUFFER_STATE b;
Packit Service aee942
	char *buf;
Packit Service aee942
	yy_size_t n;
Packit Service aee942
	yy_size_t i;
Packit Service aee942
    
Packit Service aee942
	/* Get memory for full buffer, including space for trailing EOB's. */
Packit Service aee942
	n = (yy_size_t) _yybytes_len + 2;
Packit Service aee942
	buf = (char *) yyalloc(n  );
Packit Service aee942
	if ( ! buf )
Packit Service aee942
		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
Packit Service aee942
Packit Service aee942
	for ( i = 0; i < _yybytes_len; ++i )
Packit Service aee942
		buf[i] = yybytes[i];
Packit Service aee942
Packit Service aee942
	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
Packit Service aee942
Packit Service aee942
	b = yy_scan_buffer(buf,n );
Packit Service aee942
	if ( ! b )
Packit Service aee942
		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
Packit Service aee942
Packit Service aee942
	/* It's okay to grow etc. this buffer, and we should throw it
Packit Service aee942
	 * away when we're done.
Packit Service aee942
	 */
Packit Service aee942
	b->yy_is_our_buffer = 1;
Packit Service aee942
Packit Service aee942
	return b;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
#ifndef YY_EXIT_FAILURE
Packit Service aee942
#define YY_EXIT_FAILURE 2
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
static void yynoreturn yy_fatal_error (yyconst char* msg )
Packit Service aee942
{
Packit Service aee942
			(void) fprintf( stderr, "%s\n", msg );
Packit Service aee942
	exit( YY_EXIT_FAILURE );
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/* Redefine yyless() so it works in section 3 code. */
Packit Service aee942
Packit Service aee942
#undef yyless
Packit Service aee942
#define yyless(n) \
Packit Service aee942
	do \
Packit Service aee942
		{ \
Packit Service aee942
		/* Undo effects of setting up yytext. */ \
Packit Service aee942
        int yyless_macro_arg = (n); \
Packit Service aee942
        YY_LESS_LINENO(yyless_macro_arg);\
Packit Service aee942
		yytext[yyleng] = (yy_hold_char); \
Packit Service aee942
		(yy_c_buf_p) = yytext + yyless_macro_arg; \
Packit Service aee942
		(yy_hold_char) = *(yy_c_buf_p); \
Packit Service aee942
		*(yy_c_buf_p) = '\0'; \
Packit Service aee942
		yyleng = yyless_macro_arg; \
Packit Service aee942
		} \
Packit Service aee942
	while ( 0 )
Packit Service aee942
Packit Service aee942
/* Accessor  methods (get/set functions) to struct members. */
Packit Service aee942
Packit Service aee942
/** Get the current line number.
Packit Service aee942
 * 
Packit Service aee942
 */
Packit Service aee942
int yyget_lineno  (void)
Packit Service aee942
{
Packit Service aee942
        
Packit Service aee942
    return yylineno;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/** Get the input stream.
Packit Service aee942
 * 
Packit Service aee942
 */
Packit Service aee942
FILE *yyget_in  (void)
Packit Service aee942
{
Packit Service aee942
        return yyin;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/** Get the output stream.
Packit Service aee942
 * 
Packit Service aee942
 */
Packit Service aee942
FILE *yyget_out  (void)
Packit Service aee942
{
Packit Service aee942
        return yyout;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/** Get the length of the current token.
Packit Service aee942
 * 
Packit Service aee942
 */
Packit Service aee942
int yyget_leng  (void)
Packit Service aee942
{
Packit Service aee942
        return yyleng;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/** Get the current token.
Packit Service aee942
 * 
Packit Service aee942
 */
Packit Service aee942
Packit Service aee942
char *yyget_text  (void)
Packit Service aee942
{
Packit Service aee942
        return yytext;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/** Set the current line number.
Packit Service aee942
 * @param _line_number line number
Packit Service aee942
 * 
Packit Service aee942
 */
Packit Service aee942
void yyset_lineno (int  _line_number )
Packit Service aee942
{
Packit Service aee942
    
Packit Service aee942
    yylineno = _line_number;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/** Set the input stream. This does not discard the current
Packit Service aee942
 * input buffer.
Packit Service aee942
 * @param _in_str A readable stream.
Packit Service aee942
 * 
Packit Service aee942
 * @see yy_switch_to_buffer
Packit Service aee942
 */
Packit Service aee942
void yyset_in (FILE *  _in_str )
Packit Service aee942
{
Packit Service aee942
        yyin = _in_str ;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
void yyset_out (FILE *  _out_str )
Packit Service aee942
{
Packit Service aee942
        yyout = _out_str ;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
int yyget_debug  (void)
Packit Service aee942
{
Packit Service aee942
        return yy_flex_debug;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
void yyset_debug (int  _bdebug )
Packit Service aee942
{
Packit Service aee942
        yy_flex_debug = _bdebug ;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
static int yy_init_globals (void)
Packit Service aee942
{
Packit Service aee942
        /* Initialization is the same as for the non-reentrant scanner.
Packit Service aee942
     * This function is called from yylex_destroy(), so don't allocate here.
Packit Service aee942
     */
Packit Service aee942
Packit Service aee942
    (yy_buffer_stack) = NULL;
Packit Service aee942
    (yy_buffer_stack_top) = 0;
Packit Service aee942
    (yy_buffer_stack_max) = 0;
Packit Service aee942
    (yy_c_buf_p) = NULL;
Packit Service aee942
    (yy_init) = 0;
Packit Service aee942
    (yy_start) = 0;
Packit Service aee942
Packit Service aee942
/* Defined in main.c */
Packit Service aee942
#ifdef YY_STDINIT
Packit Service aee942
    yyin = stdin;
Packit Service aee942
    yyout = stdout;
Packit Service aee942
#else
Packit Service aee942
    yyin = NULL;
Packit Service aee942
    yyout = NULL;
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
    /* For future reference: Set errno on error, since we are called by
Packit Service aee942
     * yylex_init()
Packit Service aee942
     */
Packit Service aee942
    return 0;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/* yylex_destroy is for both reentrant and non-reentrant scanners. */
Packit Service aee942
int yylex_destroy  (void)
Packit Service aee942
{
Packit Service aee942
    
Packit Service aee942
    /* Pop the buffer stack, destroying each element. */
Packit Service aee942
	while(YY_CURRENT_BUFFER){
Packit Service aee942
		yy_delete_buffer(YY_CURRENT_BUFFER  );
Packit Service aee942
		YY_CURRENT_BUFFER_LVALUE = NULL;
Packit Service aee942
		yypop_buffer_state();
Packit Service aee942
	}
Packit Service aee942
Packit Service aee942
	/* Destroy the stack itself. */
Packit Service aee942
	yyfree((yy_buffer_stack) );
Packit Service aee942
	(yy_buffer_stack) = NULL;
Packit Service aee942
Packit Service aee942
    /* Reset the globals. This is important in a non-reentrant scanner so the next time
Packit Service aee942
     * yylex() is called, initialization will occur. */
Packit Service aee942
    yy_init_globals( );
Packit Service aee942
Packit Service aee942
    return 0;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/*
Packit Service aee942
 * Internal utility routines.
Packit Service aee942
 */
Packit Service aee942
Packit Service aee942
#ifndef yytext_ptr
Packit Service aee942
static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
Packit Service aee942
{
Packit Service aee942
		
Packit Service aee942
	int i;
Packit Service aee942
	for ( i = 0; i < n; ++i )
Packit Service aee942
		s1[i] = s2[i];
Packit Service aee942
}
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
#ifdef YY_NEED_STRLEN
Packit Service aee942
static int yy_flex_strlen (yyconst char * s )
Packit Service aee942
{
Packit Service aee942
	int n;
Packit Service aee942
	for ( n = 0; s[n]; ++n )
Packit Service aee942
		;
Packit Service aee942
Packit Service aee942
	return n;
Packit Service aee942
}
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
void *yyalloc (yy_size_t  size )
Packit Service aee942
{
Packit Service aee942
			return malloc(size);
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
void *yyrealloc  (void * ptr, yy_size_t  size )
Packit Service aee942
{
Packit Service aee942
		
Packit Service aee942
	/* The cast to (char *) in the following accommodates both
Packit Service aee942
	 * implementations that use char* generic pointers, and those
Packit Service aee942
	 * that use void* generic pointers.  It works with the latter
Packit Service aee942
	 * because both ANSI C and C++ allow castless assignment from
Packit Service aee942
	 * any pointer type to void*, and deal with argument conversions
Packit Service aee942
	 * as though doing an assignment.
Packit Service aee942
	 */
Packit Service aee942
	return realloc(ptr, size);
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
void yyfree (void * ptr )
Packit Service aee942
{
Packit Service aee942
			free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
#define YYTABLES_NAME "yytables"
Packit Service aee942
Packit Service aee942
#line 75 "tokenparser.l"
Packit Service aee942
Packit Service aee942
Packit Service aee942
Packit Service aee942
Packit Service aee942
static void eval_key(char *pcToken, list_t *list_key)
Packit Service aee942
{
Packit Service aee942
	struct bundleElt *elt;
Packit Service aee942
	int r;
Packit Service aee942
	size_t len;
Packit Service aee942
Packit Service aee942
	/* create a new list element */
Packit Service aee942
	elt = malloc(sizeof(*elt));
Packit Service aee942
	assert(elt);
Packit Service aee942
Packit Service aee942
	/* <key>foobar</key>
Packit Service aee942
	 * 012345 : 5 is the first key character index */
Packit Service aee942
Packit Service aee942
	/* calculate the argument length */
Packit Service aee942
	for (len=0; pcToken[len+5] != '<'; len++)
Packit Service aee942
		;
Packit Service aee942
	len++;	/* final NULL byte */
Packit Service aee942
Packit Service aee942
	elt->key = malloc(len);
Packit Service aee942
	memcpy(elt->key, &pcToken[5], len-1);
Packit Service aee942
	elt->key[len-1] = '\0';
Packit Service aee942
Packit Service aee942
	r = list_init(&elt->values);
Packit Service aee942
	assert(r >= 0);
Packit Service aee942
	(void)r;
Packit Service aee942
Packit Service aee942
	/* add the key/values */
Packit Service aee942
	list_append(list_key, elt);
Packit Service aee942
Packit Service aee942
	/* set the list to store the values */
Packit Service aee942
	ListValues = &elt->values;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
static void eval_value(char *pcToken, list_t *list_values)
Packit Service aee942
{
Packit Service aee942
	int r;
Packit Service aee942
	size_t len;
Packit Service aee942
	char *value;
Packit Service aee942
	char *amp;
Packit Service aee942
Packit Service aee942
	/* <string>foobar</string>
Packit Service aee942
	 * 012345678 : 8 is the first string character index */
Packit Service aee942
Packit Service aee942
	/* calculate the argument length */
Packit Service aee942
	for (len=0; pcToken[len+8] != '<'; len++)
Packit Service aee942
		;
Packit Service aee942
	len++;	/* final NULL byte */
Packit Service aee942
Packit Service aee942
	value = malloc(len);
Packit Service aee942
	assert(value);
Packit Service aee942
Packit Service aee942
	memcpy(value, &pcToken[8], len-1);
Packit Service aee942
	value[len-1] = '\0';
Packit Service aee942
Packit Service aee942
	/* for all & in the string */
Packit Service aee942
	amp = value;
Packit Service aee942
	while ((amp = strstr(amp, "&")) != NULL)
Packit Service aee942
	{
Packit Service aee942
		char *p;
Packit Service aee942
Packit Service aee942
		/* just skip "amp;" substring (4 letters) */
Packit Service aee942
		for (p = amp+1; *(p+4); p++)
Packit Service aee942
		{
Packit Service aee942
			*p = *(p+4);
Packit Service aee942
		}
Packit Service aee942
		/* terminate the now shorter string */
Packit Service aee942
		*p = '\0';
Packit Service aee942
Packit Service aee942
		/* skip the & and continue */
Packit Service aee942
		amp++;
Packit Service aee942
	}
Packit Service aee942
Packit Service aee942
	r = list_append(list_values, value);
Packit Service aee942
	assert(r >= 0);
Packit Service aee942
	(void)r;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
void tperrorCheck (char *token_error)
Packit Service aee942
{
Packit Service aee942
    (void)token_error;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/**
Packit Service aee942
 * Find an optional key in a configuration file
Packit Service aee942
 * No error is logged if the key is not found
Packit Service aee942
 *
Packit Service aee942
 * @param l list generated by bundleParse()
Packit Service aee942
 * @param key searched key
Packit Service aee942
 * @param[out] values list of token value (if key found)
Packit Service aee942
 * @retval 0 OK
Packit Service aee942
 * @retval 1 key not found
Packit Service aee942
 */
Packit Service aee942
int LTPBundleFindValueWithKey(list_t *l, const char *key, list_t **values)
Packit Service aee942
{
Packit Service aee942
	unsigned int i;
Packit Service aee942
	int ret = 1;
Packit Service aee942
Packit Service aee942
	for (i=0; i < list_size(l); i++)
Packit Service aee942
	{
Packit Service aee942
		struct bundleElt *elt;
Packit Service aee942
Packit Service aee942
		elt = list_get_at(l, i);
Packit Service aee942
		assert(elt);
Packit Service aee942
Packit Service aee942
		if (0 == strcmp(elt->key, key))
Packit Service aee942
		{
Packit Service aee942
			*values = &elt->values;
Packit Service aee942
			ret = 0;
Packit Service aee942
		}
Packit Service aee942
	}
Packit Service aee942
Packit Service aee942
	return ret;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
Packit Service aee942
/**
Packit Service aee942
 * Parse a Info.plist file and file a list
Packit Service aee942
 *
Packit Service aee942
 * @param fileName file name
Packit Service aee942
 * @param l list containing the results
Packit Service aee942
 * @retval -1 configuration file not found
Packit Service aee942
 * @retval 0 OK
Packit Service aee942
 */
Packit Service aee942
int bundleParse(const char *fileName, list_t *l)
Packit Service aee942
{
Packit Service aee942
	FILE *file = NULL;
Packit Service aee942
	int r;
Packit Service aee942
#ifndef NDEBUG
Packit Service aee942
	int i;
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
	file = fopen(fileName, "r");
Packit Service aee942
	if (!file)
Packit Service aee942
	{
Packit Service aee942
		Log3(PCSC_LOG_CRITICAL, "Could not open bundle file %s: %s",
Packit Service aee942
			fileName, strerror(errno));
Packit Service aee942
		return 1;
Packit Service aee942
	}
Packit Service aee942
Packit Service aee942
	r = list_init(l);
Packit Service aee942
	assert(r >= 0);
Packit Service aee942
	(void)r;
Packit Service aee942
Packit Service aee942
	ListKeys = l;
Packit Service aee942
	yyin = file;
Packit Service aee942
Packit Service aee942
	do
Packit Service aee942
	{
Packit Service aee942
		(void)yylex();
Packit Service aee942
	} while (!feof(file));
Packit Service aee942
	yylex_destroy();
Packit Service aee942
Packit Service aee942
	(void)fclose(file);
Packit Service aee942
Packit Service aee942
#ifndef NDEBUG
Packit Service aee942
	printf("size: %d\n", list_size(l));
Packit Service aee942
	for (i=0; i < list_size(l); i++)
Packit Service aee942
	{
Packit Service aee942
		struct bundleElt *elt;
Packit Service aee942
		unsigned int j;
Packit Service aee942
Packit Service aee942
		elt = list_get_at(l, i);
Packit Service aee942
		assert(elt);
Packit Service aee942
		printf("Key: %s\n", elt->key);
Packit Service aee942
Packit Service aee942
		for (j=0; j<list_size(&elt->values); j++)
Packit Service aee942
		{
Packit Service aee942
			char *v = list_get_at(&elt->values, j);
Packit Service aee942
			printf(" value: %s\n", v);
Packit Service aee942
		}
Packit Service aee942
	}
Packit Service aee942
#endif
Packit Service aee942
Packit Service aee942
	return 0;
Packit Service aee942
}
Packit Service aee942
Packit Service aee942
/**
Packit Service aee942
 * Free the list created by bundleParse()
Packit Service aee942
 *
Packit Service aee942
 * @param l list containing the results
Packit Service aee942
 */
Packit Service aee942
void bundleRelease(list_t *l)
Packit Service aee942
{
Packit Service aee942
	unsigned int i;
Packit Service aee942
Packit Service aee942
	for (i=0; i < list_size(l); i++)
Packit Service aee942
	{
Packit Service aee942
		struct bundleElt *elt;
Packit Service aee942
		unsigned int j;
Packit Service aee942
Packit Service aee942
		elt = list_get_at(l, i);
Packit Service aee942
		assert(elt);
Packit Service aee942
Packit Service aee942
		/* free all the values */
Packit Service aee942
		for (j=0; j<list_size(&elt->values); j++)
Packit Service aee942
			free(list_get_at(&elt->values, j));
Packit Service aee942
		list_destroy(&elt->values);
Packit Service aee942
Packit Service aee942
		/* free the key */
Packit Service aee942
		free(elt->key);
Packit Service aee942
		free(elt);
Packit Service aee942
	}
Packit Service aee942
Packit Service aee942
	list_destroy(l);
Packit Service aee942
}
Packit Service aee942