yann@1: yann@1: #line 3 "scripts/kconfig/lex.zconf.c" yann@1: yann@1: #define YY_INT_ALIGNED short int yann@1: yann@1: /* A lexical scanner generated by flex */ yann@1: yann@943: #define yy_create_buffer zconf_create_buffer yann@943: #define yy_delete_buffer zconf_delete_buffer yann@943: #define yy_flex_debug zconf_flex_debug yann@943: #define yy_init_buffer zconf_init_buffer yann@943: #define yy_flush_buffer zconf_flush_buffer yann@943: #define yy_load_buffer_state zconf_load_buffer_state yann@943: #define yy_switch_to_buffer zconf_switch_to_buffer yann@943: #define yyin zconfin yann@943: #define yyleng zconfleng yann@943: #define yylex zconflex yann@943: #define yylineno zconflineno yann@943: #define yyout zconfout yann@943: #define yyrestart zconfrestart yann@943: #define yytext zconftext yann@943: #define yywrap zconfwrap yann@943: #define yyalloc zconfalloc yann@943: #define yyrealloc zconfrealloc yann@943: #define yyfree zconffree yann@943: yann@1: #define FLEX_SCANNER yann@1: #define YY_FLEX_MAJOR_VERSION 2 yann@1: #define YY_FLEX_MINOR_VERSION 5 yann@943: #define YY_FLEX_SUBMINOR_VERSION 35 yann@1: #if YY_FLEX_SUBMINOR_VERSION > 0 yann@1: #define FLEX_BETA yann@1: #endif yann@1: yann@1: /* First, we deal with platform-specific or compiler-specific issues. */ yann@1: yann@1: /* begin standard C headers. */ yann@1: #include yann@1: #include yann@1: #include yann@1: #include yann@1: yann@1: /* end standard C headers. */ yann@1: yann@1: /* flex integer type definitions */ yann@1: yann@1: #ifndef FLEXINT_H yann@1: #define FLEXINT_H yann@1: yann@1: /* C99 systems have . Non-C99 systems may or may not. */ yann@1: yann@943: #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L yann@1: yann@1: /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, yann@943: * if you want the limit (max/min) macros for int types. yann@1: */ yann@1: #ifndef __STDC_LIMIT_MACROS yann@1: #define __STDC_LIMIT_MACROS 1 yann@1: #endif yann@1: yann@1: #include yann@1: typedef int8_t flex_int8_t; yann@1: typedef uint8_t flex_uint8_t; yann@1: typedef int16_t flex_int16_t; yann@1: typedef uint16_t flex_uint16_t; yann@1: typedef int32_t flex_int32_t; yann@1: typedef uint32_t flex_uint32_t; yann@1: #else yann@1: typedef signed char flex_int8_t; yann@1: typedef short int flex_int16_t; yann@1: typedef int flex_int32_t; yann@1: typedef unsigned char flex_uint8_t; yann@1: typedef unsigned short int flex_uint16_t; yann@1: typedef unsigned int flex_uint32_t; yann@1: yann@1: /* Limits of integral types. */ yann@1: #ifndef INT8_MIN yann@1: #define INT8_MIN (-128) yann@1: #endif yann@1: #ifndef INT16_MIN yann@1: #define INT16_MIN (-32767-1) yann@1: #endif yann@1: #ifndef INT32_MIN yann@1: #define INT32_MIN (-2147483647-1) yann@1: #endif yann@1: #ifndef INT8_MAX yann@1: #define INT8_MAX (127) yann@1: #endif yann@1: #ifndef INT16_MAX yann@1: #define INT16_MAX (32767) yann@1: #endif yann@1: #ifndef INT32_MAX yann@1: #define INT32_MAX (2147483647) yann@1: #endif yann@1: #ifndef UINT8_MAX yann@1: #define UINT8_MAX (255U) yann@1: #endif yann@1: #ifndef UINT16_MAX yann@1: #define UINT16_MAX (65535U) yann@1: #endif yann@1: #ifndef UINT32_MAX yann@1: #define UINT32_MAX (4294967295U) yann@1: #endif yann@1: yann@943: #endif /* ! C99 */ yann@943: yann@1: #endif /* ! FLEXINT_H */ yann@1: yann@1: #ifdef __cplusplus yann@1: yann@1: /* The "const" storage-class-modifier is valid. */ yann@1: #define YY_USE_CONST yann@1: yann@1: #else /* ! __cplusplus */ yann@1: yann@943: /* C99 requires __STDC__ to be defined as 1. */ yann@943: #if defined (__STDC__) yann@1: yann@1: #define YY_USE_CONST yann@1: yann@943: #endif /* defined (__STDC__) */ yann@1: #endif /* ! __cplusplus */ yann@1: yann@1: #ifdef YY_USE_CONST yann@1: #define yyconst const yann@1: #else yann@1: #define yyconst yann@1: #endif yann@1: yann@1: /* Returned upon end-of-file. */ yann@1: #define YY_NULL 0 yann@1: yann@1: /* Promotes a possibly negative, possibly signed char to an unsigned yann@1: * integer for use as an array index. If the signed char is negative, yann@1: * we want to instead treat it as an 8-bit unsigned char, hence the yann@1: * double cast. yann@1: */ yann@1: #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) yann@1: yann@1: /* Enter a start condition. This macro really ought to take a parameter, yann@1: * but we do it the disgusting crufty way forced on us by the ()-less yann@1: * definition of BEGIN. yann@1: */ yann@1: #define BEGIN (yy_start) = 1 + 2 * yann@1: yann@1: /* Translate the current start state into a value that can be later handed yann@1: * to BEGIN to return to the state. The YYSTATE alias is for lex yann@1: * compatibility. yann@1: */ yann@1: #define YY_START (((yy_start) - 1) / 2) yann@1: #define YYSTATE YY_START yann@1: yann@1: /* Action number for EOF rule of a given start state. */ yann@1: #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) yann@1: yann@1: /* Special action meaning "start processing a new file". */ yann@1: #define YY_NEW_FILE zconfrestart(zconfin ) yann@1: yann@1: #define YY_END_OF_BUFFER_CHAR 0 yann@1: yann@1: /* Size of default input buffer. */ yann@1: #ifndef YY_BUF_SIZE yann@1: #define YY_BUF_SIZE 16384 yann@1: #endif yann@1: yann@1: /* The state buf must be large enough to hold one state per character in the main buffer. yann@1: */ yann@1: #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) yann@1: yann@1: #ifndef YY_TYPEDEF_YY_BUFFER_STATE yann@1: #define YY_TYPEDEF_YY_BUFFER_STATE yann@1: typedef struct yy_buffer_state *YY_BUFFER_STATE; yann@1: #endif yann@1: yann@1: extern int zconfleng; yann@1: yann@1: extern FILE *zconfin, *zconfout; yann@1: yann@1: #define EOB_ACT_CONTINUE_SCAN 0 yann@1: #define EOB_ACT_END_OF_FILE 1 yann@1: #define EOB_ACT_LAST_MATCH 2 yann@1: yann@1: #define YY_LESS_LINENO(n) yann@1: yann@1: /* Return all but the first "n" matched characters back to the input stream. */ yann@1: #define yyless(n) \ yann@1: do \ yann@1: { \ yann@1: /* Undo effects of setting up zconftext. */ \ yann@1: int yyless_macro_arg = (n); \ yann@1: YY_LESS_LINENO(yyless_macro_arg);\ yann@1: *yy_cp = (yy_hold_char); \ yann@1: YY_RESTORE_YY_MORE_OFFSET \ yann@1: (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ yann@1: YY_DO_BEFORE_ACTION; /* set up zconftext again */ \ yann@1: } \ yann@1: while ( 0 ) yann@1: yann@1: #define unput(c) yyunput( c, (yytext_ptr) ) yann@1: yann@1: #ifndef YY_TYPEDEF_YY_SIZE_T yann@1: #define YY_TYPEDEF_YY_SIZE_T yann@943: typedef size_t yy_size_t; yann@1: #endif yann@1: yann@1: #ifndef YY_STRUCT_YY_BUFFER_STATE yann@1: #define YY_STRUCT_YY_BUFFER_STATE yann@1: struct yy_buffer_state yann@1: { yann@1: FILE *yy_input_file; yann@1: yann@1: char *yy_ch_buf; /* input buffer */ yann@1: char *yy_buf_pos; /* current position in input buffer */ yann@1: yann@1: /* Size of input buffer in bytes, not including room for EOB yann@1: * characters. yann@1: */ yann@1: yy_size_t yy_buf_size; yann@1: yann@1: /* Number of characters read into yy_ch_buf, not including EOB yann@1: * characters. yann@1: */ yann@1: int yy_n_chars; yann@1: yann@1: /* Whether we "own" the buffer - i.e., we know we created it, yann@1: * and can realloc() it to grow it, and should free() it to yann@1: * delete it. yann@1: */ yann@1: int yy_is_our_buffer; yann@1: yann@1: /* Whether this is an "interactive" input source; if so, and yann@1: * if we're using stdio for input, then we want to use getc() yann@1: * instead of fread(), to make sure we stop fetching input after yann@1: * each newline. yann@1: */ yann@1: int yy_is_interactive; yann@1: yann@1: /* Whether we're considered to be at the beginning of a line. yann@1: * If so, '^' rules will be active on the next match, otherwise yann@1: * not. yann@1: */ yann@1: int yy_at_bol; yann@1: yann@1: int yy_bs_lineno; /**< The line count. */ yann@1: int yy_bs_column; /**< The column count. */ yann@1: yann@1: /* Whether to try to fill the input buffer when we reach the yann@1: * end of it. yann@1: */ yann@1: int yy_fill_buffer; yann@1: yann@1: int yy_buffer_status; yann@1: yann@1: #define YY_BUFFER_NEW 0 yann@1: #define YY_BUFFER_NORMAL 1 yann@1: /* When an EOF's been seen but there's still some text to process yann@1: * then we mark the buffer as YY_EOF_PENDING, to indicate that we yann@1: * shouldn't try reading from the input source any more. We might yann@1: * still have a bunch of tokens to match, though, because of yann@1: * possible backing-up. yann@1: * yann@1: * When we actually see the EOF, we change the status to "new" yann@1: * (via zconfrestart()), so that the user can continue scanning by yann@1: * just pointing zconfin at a new input file. yann@1: */ yann@1: #define YY_BUFFER_EOF_PENDING 2 yann@1: yann@1: }; yann@1: #endif /* !YY_STRUCT_YY_BUFFER_STATE */ yann@1: yann@1: /* Stack of input buffers. */ yann@1: static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ yann@1: static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ yann@1: static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ yann@1: yann@1: /* We provide macros for accessing buffer states in case in the yann@1: * future we want to put the buffer states in a more general yann@1: * "scanner state". yann@1: * yann@1: * Returns the top of the stack, or NULL. yann@1: */ yann@1: #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ yann@1: ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ yann@1: : NULL) yann@1: yann@1: /* Same as previous macro, but useful when we know that the buffer stack is not yann@1: * NULL or when we need an lvalue. For internal use only. yann@1: */ yann@1: #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] yann@1: yann@1: /* yy_hold_char holds the character lost when zconftext is formed. */ yann@1: static char yy_hold_char; yann@1: static int yy_n_chars; /* number of characters read into yy_ch_buf */ yann@1: int zconfleng; yann@1: yann@1: /* Points to current character in buffer. */ yann@1: static char *yy_c_buf_p = (char *) 0; yann@1: static int yy_init = 0; /* whether we need to initialize */ yann@1: static int yy_start = 0; /* start state number */ yann@1: yann@1: /* Flag which is used to allow zconfwrap()'s to do buffer switches yann@1: * instead of setting up a fresh zconfin. A bit of a hack ... yann@1: */ yann@1: static int yy_did_buffer_switch_on_eof; yann@1: yann@1: void zconfrestart (FILE *input_file ); yann@1: void zconf_switch_to_buffer (YY_BUFFER_STATE new_buffer ); yann@1: YY_BUFFER_STATE zconf_create_buffer (FILE *file,int size ); yann@1: void zconf_delete_buffer (YY_BUFFER_STATE b ); yann@1: void zconf_flush_buffer (YY_BUFFER_STATE b ); yann@1: void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer ); yann@1: void zconfpop_buffer_state (void ); yann@1: yann@1: static void zconfensure_buffer_stack (void ); yann@1: static void zconf_load_buffer_state (void ); yann@1: static void zconf_init_buffer (YY_BUFFER_STATE b,FILE *file ); yann@1: yann@1: #define YY_FLUSH_BUFFER zconf_flush_buffer(YY_CURRENT_BUFFER ) yann@1: yann@1: YY_BUFFER_STATE zconf_scan_buffer (char *base,yy_size_t size ); yann@1: YY_BUFFER_STATE zconf_scan_string (yyconst char *yy_str ); yann@1: YY_BUFFER_STATE zconf_scan_bytes (yyconst char *bytes,int len ); yann@1: yann@1: void *zconfalloc (yy_size_t ); yann@1: void *zconfrealloc (void *,yy_size_t ); yann@1: void zconffree (void * ); yann@1: yann@1: #define yy_new_buffer zconf_create_buffer yann@1: yann@1: #define yy_set_interactive(is_interactive) \ yann@1: { \ yann@1: if ( ! YY_CURRENT_BUFFER ){ \ yann@1: zconfensure_buffer_stack (); \ yann@1: YY_CURRENT_BUFFER_LVALUE = \ yann@1: zconf_create_buffer(zconfin,YY_BUF_SIZE ); \ yann@1: } \ yann@1: YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ yann@1: } yann@1: yann@1: #define yy_set_bol(at_bol) \ yann@1: { \ yann@1: if ( ! YY_CURRENT_BUFFER ){\ yann@1: zconfensure_buffer_stack (); \ yann@1: YY_CURRENT_BUFFER_LVALUE = \ yann@1: zconf_create_buffer(zconfin,YY_BUF_SIZE ); \ yann@1: } \ yann@1: YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ yann@1: } yann@1: yann@1: #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) yann@1: yann@1: /* Begin user sect3 */ yann@1: yann@943: #define zconfwrap(n) 1 yann@1: #define YY_SKIP_YYWRAP yann@1: yann@1: typedef unsigned char YY_CHAR; yann@1: yann@1: FILE *zconfin = (FILE *) 0, *zconfout = (FILE *) 0; yann@1: yann@1: typedef int yy_state_type; yann@1: yann@1: extern int zconflineno; yann@1: yann@1: int zconflineno = 1; yann@1: yann@1: extern char *zconftext; yann@1: #define yytext_ptr zconftext yann@1: static yyconst flex_int16_t yy_nxt[][17] = yann@1: { yann@1: { yann@1: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, yann@1: 0, 0, 0, 0, 0, 0, 0 yann@1: }, yann@1: yann@1: { yann@1: 11, 12, 13, 14, 12, 12, 15, 12, 12, 12, yann@1: 12, 12, 12, 12, 12, 12, 12 yann@1: }, yann@1: yann@1: { yann@1: 11, 12, 13, 14, 12, 12, 15, 12, 12, 12, yann@1: 12, 12, 12, 12, 12, 12, 12 yann@1: }, yann@1: yann@1: { yann@1: 11, 16, 16, 17, 16, 16, 16, 16, 16, 16, yann@1: 16, 16, 16, 18, 16, 16, 16 yann@1: }, yann@1: yann@1: { yann@1: 11, 16, 16, 17, 16, 16, 16, 16, 16, 16, yann@1: 16, 16, 16, 18, 16, 16, 16 yann@1: yann@1: }, yann@1: yann@1: { yann@1: 11, 19, 20, 21, 19, 19, 19, 19, 19, 19, yann@1: 19, 19, 19, 19, 19, 19, 19 yann@1: }, yann@1: yann@1: { yann@1: 11, 19, 20, 21, 19, 19, 19, 19, 19, 19, yann@1: 19, 19, 19, 19, 19, 19, 19 yann@1: }, yann@1: yann@1: { yann@1: 11, 22, 22, 23, 22, 24, 22, 22, 24, 22, yann@1: 22, 22, 22, 22, 22, 25, 22 yann@1: }, yann@1: yann@1: { yann@1: 11, 22, 22, 23, 22, 24, 22, 22, 24, 22, yann@1: 22, 22, 22, 22, 22, 25, 22 yann@1: }, yann@1: yann@1: { yann@1: 11, 26, 26, 27, 28, 29, 30, 31, 29, 32, yann@1: 33, 34, 35, 35, 36, 37, 38 yann@1: yann@1: }, yann@1: yann@1: { yann@1: 11, 26, 26, 27, 28, 29, 30, 31, 29, 32, yann@1: 33, 34, 35, 35, 36, 37, 38 yann@1: }, yann@1: yann@1: { yann@1: -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, yann@1: -11, -11, -11, -11, -11, -11, -11 yann@1: }, yann@1: yann@1: { yann@1: 11, -12, -12, -12, -12, -12, -12, -12, -12, -12, yann@1: -12, -12, -12, -12, -12, -12, -12 yann@1: }, yann@1: yann@1: { yann@1: 11, -13, 39, 40, -13, -13, 41, -13, -13, -13, yann@1: -13, -13, -13, -13, -13, -13, -13 yann@1: }, yann@1: yann@1: { yann@1: 11, -14, -14, -14, -14, -14, -14, -14, -14, -14, yann@1: -14, -14, -14, -14, -14, -14, -14 yann@1: yann@1: }, yann@1: yann@1: { yann@1: 11, 42, 42, 43, 42, 42, 42, 42, 42, 42, yann@1: 42, 42, 42, 42, 42, 42, 42 yann@1: }, yann@1: yann@1: { yann@1: 11, -16, -16, -16, -16, -16, -16, -16, -16, -16, yann@1: -16, -16, -16, -16, -16, -16, -16 yann@1: }, yann@1: yann@1: { yann@1: 11, -17, -17, -17, -17, -17, -17, -17, -17, -17, yann@1: -17, -17, -17, -17, -17, -17, -17 yann@1: }, yann@1: yann@1: { yann@1: 11, -18, -18, -18, -18, -18, -18, -18, -18, -18, yann@1: -18, -18, -18, 44, -18, -18, -18 yann@1: }, yann@1: yann@1: { yann@1: 11, 45, 45, -19, 45, 45, 45, 45, 45, 45, yann@1: 45, 45, 45, 45, 45, 45, 45 yann@1: yann@1: }, yann@1: yann@1: { yann@1: 11, -20, 46, 47, -20, -20, -20, -20, -20, -20, yann@1: -20, -20, -20, -20, -20, -20, -20 yann@1: }, yann@1: yann@1: { yann@1: 11, 48, -21, -21, 48, 48, 48, 48, 48, 48, yann@1: 48, 48, 48, 48, 48, 48, 48 yann@1: }, yann@1: yann@1: { yann@1: 11, 49, 49, 50, 49, -22, 49, 49, -22, 49, yann@1: 49, 49, 49, 49, 49, -22, 49 yann@1: }, yann@1: yann@1: { yann@1: 11, -23, -23, -23, -23, -23, -23, -23, -23, -23, yann@1: -23, -23, -23, -23, -23, -23, -23 yann@1: }, yann@1: yann@1: { yann@1: 11, -24, -24, -24, -24, -24, -24, -24, -24, -24, yann@1: -24, -24, -24, -24, -24, -24, -24 yann@1: yann@1: }, yann@1: yann@1: { yann@1: 11, 51, 51, 52, 51, 51, 51, 51, 51, 51, yann@1: 51, 51, 51, 51, 51, 51, 51 yann@1: }, yann@1: yann@1: { yann@1: 11, -26, -26, -26, -26, -26, -26, -26, -26, -26, yann@1: -26, -26, -26, -26, -26, -26, -26 yann@1: }, yann@1: yann@1: { yann@1: 11, -27, -27, -27, -27, -27, -27, -27, -27, -27, yann@1: -27, -27, -27, -27, -27, -27, -27 yann@1: }, yann@1: yann@1: { yann@1: 11, -28, -28, -28, -28, -28, -28, -28, -28, -28, yann@1: -28, -28, -28, -28, 53, -28, -28 yann@1: }, yann@1: yann@1: { yann@1: 11, -29, -29, -29, -29, -29, -29, -29, -29, -29, yann@1: -29, -29, -29, -29, -29, -29, -29 yann@1: yann@1: }, yann@1: yann@1: { yann@1: 11, 54, 54, -30, 54, 54, 54, 54, 54, 54, yann@1: 54, 54, 54, 54, 54, 54, 54 yann@1: }, yann@1: yann@1: { yann@1: 11, -31, -31, -31, -31, -31, -31, 55, -31, -31, yann@1: -31, -31, -31, -31, -31, -31, -31 yann@1: }, yann@1: yann@1: { yann@1: 11, -32, -32, -32, -32, -32, -32, -32, -32, -32, yann@1: -32, -32, -32, -32, -32, -32, -32 yann@1: }, yann@1: yann@1: { yann@1: 11, -33, -33, -33, -33, -33, -33, -33, -33, -33, yann@1: -33, -33, -33, -33, -33, -33, -33 yann@1: }, yann@1: yann@1: { yann@1: 11, -34, -34, -34, -34, -34, -34, -34, -34, -34, yann@1: -34, 56, 57, 57, -34, -34, -34 yann@1: yann@1: }, yann@1: yann@1: { yann@1: 11, -35, -35, -35, -35, -35, -35, -35, -35, -35, yann@1: -35, 57, 57, 57, -35, -35, -35 yann@1: }, yann@1: yann@1: { yann@1: 11, -36, -36, -36, -36, -36, -36, -36, -36, -36, yann@1: -36, -36, -36, -36, -36, -36, -36 yann@1: }, yann@1: yann@1: { yann@1: 11, -37, -37, 58, -37, -37, -37, -37, -37, -37, yann@1: -37, -37, -37, -37, -37, -37, -37 yann@1: }, yann@1: yann@1: { yann@1: 11, -38, -38, -38, -38, -38, -38, -38, -38, -38, yann@1: -38, -38, -38, -38, -38, -38, 59 yann@1: }, yann@1: yann@1: { yann@1: 11, -39, 39, 40, -39, -39, 41, -39, -39, -39, yann@1: -39, -39, -39, -39, -39, -39, -39 yann@1: yann@1: }, yann@1: yann@1: { yann@1: 11, -40, -40, -40, -40, -40, -40, -40, -40, -40, yann@1: -40, -40, -40, -40, -40, -40, -40 yann@1: }, yann@1: yann@1: { yann@1: 11, 42, 42, 43, 42, 42, 42, 42, 42, 42, yann@1: 42, 42, 42, 42, 42, 42, 42 yann@1: }, yann@1: yann@1: { yann@1: 11, 42, 42, 43, 42, 42, 42, 42, 42, 42, yann@1: 42, 42, 42, 42, 42, 42, 42 yann@1: }, yann@1: yann@1: { yann@1: 11, -43, -43, -43, -43, -43, -43, -43, -43, -43, yann@1: -43, -43, -43, -43, -43, -43, -43 yann@1: }, yann@1: yann@1: { yann@1: 11, -44, -44, -44, -44, -44, -44, -44, -44, -44, yann@1: -44, -44, -44, 44, -44, -44, -44 yann@1: yann@1: }, yann@1: yann@1: { yann@1: 11, 45, 45, -45, 45, 45, 45, 45, 45, 45, yann@1: 45, 45, 45, 45, 45, 45, 45 yann@1: }, yann@1: yann@1: { yann@1: 11, -46, 46, 47, -46, -46, -46, -46, -46, -46, yann@1: -46, -46, -46, -46, -46, -46, -46 yann@1: }, yann@1: yann@1: { yann@1: 11, 48, -47, -47, 48, 48, 48, 48, 48, 48, yann@1: 48, 48, 48, 48, 48, 48, 48 yann@1: }, yann@1: yann@1: { yann@1: 11, -48, -48, -48, -48, -48, -48, -48, -48, -48, yann@1: -48, -48, -48, -48, -48, -48, -48 yann@1: }, yann@1: yann@1: { yann@1: 11, 49, 49, 50, 49, -49, 49, 49, -49, 49, yann@1: 49, 49, 49, 49, 49, -49, 49 yann@1: yann@1: }, yann@1: yann@1: { yann@1: 11, -50, -50, -50, -50, -50, -50, -50, -50, -50, yann@1: -50, -50, -50, -50, -50, -50, -50 yann@1: }, yann@1: yann@1: { yann@1: 11, -51, -51, 52, -51, -51, -51, -51, -51, -51, yann@1: -51, -51, -51, -51, -51, -51, -51 yann@1: }, yann@1: yann@1: { yann@1: 11, -52, -52, -52, -52, -52, -52, -52, -52, -52, yann@1: -52, -52, -52, -52, -52, -52, -52 yann@1: }, yann@1: yann@1: { yann@1: 11, -53, -53, -53, -53, -53, -53, -53, -53, -53, yann@1: -53, -53, -53, -53, -53, -53, -53 yann@1: }, yann@1: yann@1: { yann@1: 11, 54, 54, -54, 54, 54, 54, 54, 54, 54, yann@1: 54, 54, 54, 54, 54, 54, 54 yann@1: yann@1: }, yann@1: yann@1: { yann@1: 11, -55, -55, -55, -55, -55, -55, -55, -55, -55, yann@1: -55, -55, -55, -55, -55, -55, -55 yann@1: }, yann@1: yann@1: { yann@1: 11, -56, -56, -56, -56, -56, -56, -56, -56, -56, yann@1: -56, 60, 57, 57, -56, -56, -56 yann@1: }, yann@1: yann@1: { yann@1: 11, -57, -57, -57, -57, -57, -57, -57, -57, -57, yann@1: -57, 57, 57, 57, -57, -57, -57 yann@1: }, yann@1: yann@1: { yann@1: 11, -58, -58, -58, -58, -58, -58, -58, -58, -58, yann@1: -58, -58, -58, -58, -58, -58, -58 yann@1: }, yann@1: yann@1: { yann@1: 11, -59, -59, -59, -59, -59, -59, -59, -59, -59, yann@1: -59, -59, -59, -59, -59, -59, -59 yann@1: yann@1: }, yann@1: yann@1: { yann@1: 11, -60, -60, -60, -60, -60, -60, -60, -60, -60, yann@1: -60, 57, 57, 57, -60, -60, -60 yann@1: }, yann@1: yann@1: } ; yann@1: yann@1: static yy_state_type yy_get_previous_state (void ); yann@1: static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); yann@1: static int yy_get_next_buffer (void ); yann@1: static void yy_fatal_error (yyconst char msg[] ); yann@1: yann@1: /* Done after the current pattern has been matched and before the yann@1: * corresponding action - sets up zconftext. yann@1: */ yann@1: #define YY_DO_BEFORE_ACTION \ yann@1: (yytext_ptr) = yy_bp; \ yann@1: zconfleng = (size_t) (yy_cp - yy_bp); \ yann@1: (yy_hold_char) = *yy_cp; \ yann@1: *yy_cp = '\0'; \ yann@1: (yy_c_buf_p) = yy_cp; yann@1: yann@1: #define YY_NUM_RULES 33 yann@1: #define YY_END_OF_BUFFER 34 yann@1: /* This struct is not used in this scanner, yann@1: but its presence is necessary. */ yann@1: struct yy_trans_info yann@1: { yann@1: flex_int32_t yy_verify; yann@1: flex_int32_t yy_nxt; yann@1: }; yann@1: static yyconst flex_int16_t yy_accept[61] = yann@1: { 0, yann@1: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, yann@1: 34, 5, 4, 2, 3, 7, 8, 6, 32, 29, yann@1: 31, 24, 28, 27, 26, 22, 17, 13, 16, 20, yann@1: 22, 11, 12, 19, 19, 14, 22, 22, 4, 2, yann@1: 3, 3, 1, 6, 32, 29, 31, 30, 24, 23, yann@1: 26, 25, 15, 20, 9, 19, 19, 21, 10, 18 yann@1: } ; yann@1: yann@1: static yyconst flex_int32_t yy_ec[256] = yann@1: { 0, yann@1: 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, yann@1: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, yann@1: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, yann@1: 1, 2, 4, 5, 6, 1, 1, 7, 8, 9, yann@1: 10, 1, 1, 1, 11, 12, 12, 13, 13, 13, yann@1: 13, 13, 13, 13, 13, 13, 13, 1, 1, 1, yann@1: 14, 1, 1, 1, 13, 13, 13, 13, 13, 13, yann@1: 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, yann@1: 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, yann@1: 1, 15, 1, 1, 13, 1, 13, 13, 13, 13, yann@1: yann@1: 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, yann@1: 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, yann@1: 13, 13, 1, 16, 1, 1, 1, 1, 1, 1, yann@1: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, yann@1: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, yann@1: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, yann@1: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, yann@1: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, yann@1: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, yann@1: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, yann@1: yann@1: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, yann@1: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, yann@1: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, yann@1: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, yann@1: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, yann@1: 1, 1, 1, 1, 1 yann@1: } ; yann@1: yann@1: extern int zconf_flex_debug; yann@1: int zconf_flex_debug = 0; yann@1: yann@1: /* The intent behind this definition is that it'll catch yann@1: * any uses of REJECT which flex missed. yann@1: */ yann@1: #define REJECT reject_used_but_not_detected yann@1: #define yymore() yymore_used_but_not_detected yann@1: #define YY_MORE_ADJ 0 yann@1: #define YY_RESTORE_YY_MORE_OFFSET yann@1: char *zconftext; yann@943: #define YY_NO_INPUT 1 yann@1: yann@1: /* yann@1: * Copyright (C) 2002 Roman Zippel yann@1: * Released under the terms of the GNU GPL v2.0. yann@1: */ yann@1: yann@1: #include yann@1: #include yann@1: #include yann@1: #include yann@1: #include yann@1: yann@1: #define LKC_DIRECT_LINK yann@1: #include "lkc.h" yann@1: yann@1: #define START_STRSIZE 16 yann@1: yann@1: static struct { yann@1: struct file *file; yann@1: int lineno; yann@1: } current_pos; yann@1: yann@1: static char *text; yann@1: static int text_size, text_asize; yann@1: yann@1: struct buffer { yann@1: struct buffer *parent; yann@1: YY_BUFFER_STATE state; yann@1: }; yann@1: yann@1: struct buffer *current_buf; yann@1: yann@1: static int last_ts, first_ts; yann@1: yann@1: static void zconf_endhelp(void); yann@1: static void zconf_endfile(void); yann@1: yann@1: void new_string(void) yann@1: { yann@1: text = malloc(START_STRSIZE); yann@1: text_asize = START_STRSIZE; yann@1: text_size = 0; yann@1: *text = 0; yann@1: } yann@1: yann@1: void append_string(const char *str, int size) yann@1: { yann@1: int new_size = text_size + size + 1; yann@1: if (new_size > text_asize) { yann@1: new_size += START_STRSIZE - 1; yann@1: new_size &= -START_STRSIZE; yann@1: text = realloc(text, new_size); yann@1: text_asize = new_size; yann@1: } yann@1: memcpy(text + text_size, str, size); yann@1: text_size += size; yann@1: text[text_size] = 0; yann@1: } yann@1: yann@1: void alloc_string(const char *str, int size) yann@1: { yann@1: text = malloc(size + 1); yann@1: memcpy(text, str, size); yann@1: text[size] = 0; yann@1: } yann@1: yann@1: #define INITIAL 0 yann@1: #define COMMAND 1 yann@1: #define HELP 2 yann@1: #define STRING 3 yann@1: #define PARAM 4 yann@1: yann@1: #ifndef YY_NO_UNISTD_H yann@1: /* Special case for "unistd.h", since it is non-ANSI. We include it way yann@1: * down here because we want the user's section 1 to have been scanned first. yann@1: * The user has a chance to override it with an option. yann@1: */ yann@1: #include yann@1: #endif yann@1: yann@1: #ifndef YY_EXTRA_TYPE yann@1: #define YY_EXTRA_TYPE void * yann@1: #endif yann@1: yann@1: static int yy_init_globals (void ); yann@1: yann@943: /* Accessor methods to globals. yann@943: These are made visible to non-reentrant scanners for convenience. */ yann@943: yann@943: int zconflex_destroy (void ); yann@943: yann@943: int zconfget_debug (void ); yann@943: yann@943: void zconfset_debug (int debug_flag ); yann@943: yann@943: YY_EXTRA_TYPE zconfget_extra (void ); yann@943: yann@943: void zconfset_extra (YY_EXTRA_TYPE user_defined ); yann@943: yann@943: FILE *zconfget_in (void ); yann@943: yann@943: void zconfset_in (FILE * in_str ); yann@943: yann@943: FILE *zconfget_out (void ); yann@943: yann@943: void zconfset_out (FILE * out_str ); yann@943: yann@943: int zconfget_leng (void ); yann@943: yann@943: char *zconfget_text (void ); yann@943: yann@943: int zconfget_lineno (void ); yann@943: yann@943: void zconfset_lineno (int line_number ); yann@943: yann@1: /* Macros after this point can all be overridden by user definitions in yann@1: * section 1. yann@1: */ yann@1: yann@1: #ifndef YY_SKIP_YYWRAP yann@1: #ifdef __cplusplus yann@1: extern "C" int zconfwrap (void ); yann@1: #else yann@1: extern int zconfwrap (void ); yann@1: #endif yann@1: #endif yann@1: yann@1: static void yyunput (int c,char *buf_ptr ); yann@1: yann@1: #ifndef yytext_ptr yann@1: static void yy_flex_strncpy (char *,yyconst char *,int ); yann@1: #endif yann@1: yann@1: #ifdef YY_NEED_STRLEN yann@1: static int yy_flex_strlen (yyconst char * ); yann@1: #endif yann@1: yann@1: #ifndef YY_NO_INPUT yann@1: yann@1: #ifdef __cplusplus yann@1: static int yyinput (void ); yann@1: #else yann@1: static int input (void ); yann@1: #endif yann@1: yann@1: #endif yann@1: yann@1: /* Amount of stuff to slurp up with each read. */ yann@1: #ifndef YY_READ_BUF_SIZE yann@1: #define YY_READ_BUF_SIZE 8192 yann@1: #endif yann@1: yann@1: /* Copy whatever the last rule matched to the standard output. */ yann@1: #ifndef ECHO yann@1: /* This used to be an fputs(), but since the string might contain NUL's, yann@1: * we now use fwrite(). yann@1: */ yann@943: #define ECHO fwrite( zconftext, zconfleng, 1, zconfout ) yann@1: #endif yann@1: yann@1: /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, yann@1: * is returned in "result". yann@1: */ yann@1: #ifndef YY_INPUT yann@1: #define YY_INPUT(buf,result,max_size) \ yann@1: errno=0; \ yann@1: while ( (result = read( fileno(zconfin), (char *) buf, max_size )) < 0 ) \ yann@1: { \ yann@1: if( errno != EINTR) \ yann@1: { \ yann@1: YY_FATAL_ERROR( "input in flex scanner failed" ); \ yann@1: break; \ yann@1: } \ yann@1: errno=0; \ yann@1: clearerr(zconfin); \ yann@1: }\ yann@1: \ yann@1: yann@1: #endif yann@1: yann@1: /* No semi-colon after return; correct usage is to write "yyterminate();" - yann@1: * we don't want an extra ';' after the "return" because that will cause yann@1: * some compilers to complain about unreachable statements. yann@1: */ yann@1: #ifndef yyterminate yann@1: #define yyterminate() return YY_NULL yann@1: #endif yann@1: yann@1: /* Number of entries by which start-condition stack grows. */ yann@1: #ifndef YY_START_STACK_INCR yann@1: #define YY_START_STACK_INCR 25 yann@1: #endif yann@1: yann@1: /* Report a fatal error. */ yann@1: #ifndef YY_FATAL_ERROR yann@1: #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) yann@1: #endif yann@1: yann@1: /* end tables serialization structures and prototypes */ yann@1: yann@1: /* Default declaration of generated scanner - a define so the user can yann@1: * easily add parameters. yann@1: */ yann@1: #ifndef YY_DECL yann@1: #define YY_DECL_IS_OURS 1 yann@1: yann@1: extern int zconflex (void); yann@1: yann@1: #define YY_DECL int zconflex (void) yann@1: #endif /* !YY_DECL */ yann@1: yann@1: /* Code executed at the beginning of each rule, after zconftext and zconfleng yann@1: * have been set up. yann@1: */ yann@1: #ifndef YY_USER_ACTION yann@1: #define YY_USER_ACTION yann@1: #endif yann@1: yann@1: /* Code executed at the end of each rule. */ yann@1: #ifndef YY_BREAK yann@1: #define YY_BREAK break; yann@1: #endif yann@1: yann@1: #define YY_RULE_SETUP \ yann@1: YY_USER_ACTION yann@1: yann@1: /** The main scanner function which does all the work. yann@1: */ yann@1: YY_DECL yann@1: { yann@1: register yy_state_type yy_current_state; yann@1: register char *yy_cp, *yy_bp; yann@1: register int yy_act; yann@1: yann@1: int str = 0; yann@1: int ts, i; yann@1: yann@1: if ( !(yy_init) ) yann@1: { yann@1: (yy_init) = 1; yann@1: yann@1: #ifdef YY_USER_INIT yann@1: YY_USER_INIT; yann@1: #endif yann@1: yann@1: if ( ! (yy_start) ) yann@1: (yy_start) = 1; /* first start state */ yann@1: yann@1: if ( ! zconfin ) yann@1: zconfin = stdin; yann@1: yann@1: if ( ! zconfout ) yann@1: zconfout = stdout; yann@1: yann@1: if ( ! YY_CURRENT_BUFFER ) { yann@1: zconfensure_buffer_stack (); yann@1: YY_CURRENT_BUFFER_LVALUE = yann@1: zconf_create_buffer(zconfin,YY_BUF_SIZE ); yann@1: } yann@1: yann@1: zconf_load_buffer_state( ); yann@1: } yann@1: yann@1: while ( 1 ) /* loops until end-of-file is reached */ yann@1: { yann@1: yy_cp = (yy_c_buf_p); yann@1: yann@1: /* Support of zconftext. */ yann@1: *yy_cp = (yy_hold_char); yann@1: yann@1: /* yy_bp points to the position in yy_ch_buf of the start of yann@1: * the current run. yann@1: */ yann@1: yy_bp = yy_cp; yann@1: yann@1: yy_current_state = (yy_start); yann@1: yy_match: yann@1: while ( (yy_current_state = yy_nxt[yy_current_state][ yy_ec[YY_SC_TO_UI(*yy_cp)] ]) > 0 ) yann@1: ++yy_cp; yann@1: yann@1: yy_current_state = -yy_current_state; yann@1: yann@1: yy_find_action: yann@1: yy_act = yy_accept[yy_current_state]; yann@1: yann@1: YY_DO_BEFORE_ACTION; yann@1: yann@1: do_action: /* This label is used only to access EOF actions. */ yann@1: yann@1: switch ( yy_act ) yann@1: { /* beginning of action switch */ yann@1: case 1: yann@1: /* rule 1 can match eol */ yann@1: case 2: yann@1: /* rule 2 can match eol */ yann@1: YY_RULE_SETUP yann@1: { yann@1: current_file->lineno++; yann@1: return T_EOL; yann@1: } yann@1: YY_BREAK yann@1: case 3: yann@1: YY_RULE_SETUP yann@1: yann@1: YY_BREAK yann@1: case 4: yann@1: YY_RULE_SETUP yann@1: { yann@1: BEGIN(COMMAND); yann@1: } yann@1: YY_BREAK yann@1: case 5: yann@1: YY_RULE_SETUP yann@1: { yann@1: unput(zconftext[0]); yann@1: BEGIN(COMMAND); yann@1: } yann@1: YY_BREAK yann@1: yann@1: case 6: yann@1: YY_RULE_SETUP yann@1: { yann@1: struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng); yann@1: BEGIN(PARAM); yann@1: current_pos.file = current_file; yann@1: current_pos.lineno = current_file->lineno; yann@1: if (id && id->flags & TF_COMMAND) { yann@1: zconflval.id = id; yann@1: return id->token; yann@1: } yann@1: alloc_string(zconftext, zconfleng); yann@1: zconflval.string = text; yann@1: return T_WORD; yann@1: } yann@1: YY_BREAK yann@1: case 7: yann@1: YY_RULE_SETUP yann@1: yann@1: YY_BREAK yann@1: case 8: yann@1: /* rule 8 can match eol */ yann@1: YY_RULE_SETUP yann@1: { yann@1: BEGIN(INITIAL); yann@1: current_file->lineno++; yann@1: return T_EOL; yann@1: } yann@1: YY_BREAK yann@1: yann@1: case 9: yann@1: YY_RULE_SETUP yann@1: return T_AND; yann@1: YY_BREAK yann@1: case 10: yann@1: YY_RULE_SETUP yann@1: return T_OR; yann@1: YY_BREAK yann@1: case 11: yann@1: YY_RULE_SETUP yann@1: return T_OPEN_PAREN; yann@1: YY_BREAK yann@1: case 12: yann@1: YY_RULE_SETUP yann@1: return T_CLOSE_PAREN; yann@1: YY_BREAK yann@1: case 13: yann@1: YY_RULE_SETUP yann@1: return T_NOT; yann@1: YY_BREAK yann@1: case 14: yann@1: YY_RULE_SETUP yann@1: return T_EQUAL; yann@1: YY_BREAK yann@1: case 15: yann@1: YY_RULE_SETUP yann@1: return T_UNEQUAL; yann@1: YY_BREAK yann@1: case 16: yann@1: YY_RULE_SETUP yann@1: { yann@1: str = zconftext[0]; yann@1: new_string(); yann@1: BEGIN(STRING); yann@1: } yann@1: YY_BREAK yann@1: case 17: yann@1: /* rule 17 can match eol */ yann@1: YY_RULE_SETUP yann@1: BEGIN(INITIAL); current_file->lineno++; return T_EOL; yann@1: YY_BREAK yann@1: case 18: yann@1: YY_RULE_SETUP yann@1: /* ignore */ yann@1: YY_BREAK yann@1: case 19: yann@1: YY_RULE_SETUP yann@1: { yann@1: struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng); yann@1: if (id && id->flags & TF_PARAM) { yann@1: zconflval.id = id; yann@1: return id->token; yann@1: } yann@1: alloc_string(zconftext, zconfleng); yann@1: zconflval.string = text; yann@1: return T_WORD; yann@1: } yann@1: YY_BREAK yann@1: case 20: yann@1: YY_RULE_SETUP yann@1: /* comment */ yann@1: YY_BREAK yann@1: case 21: yann@1: /* rule 21 can match eol */ yann@1: YY_RULE_SETUP yann@1: current_file->lineno++; yann@1: YY_BREAK yann@1: case 22: yann@1: YY_RULE_SETUP yann@1: yann@1: YY_BREAK yann@1: case YY_STATE_EOF(PARAM): yann@1: { yann@1: BEGIN(INITIAL); yann@1: } yann@1: YY_BREAK yann@1: yann@1: case 23: yann@1: /* rule 23 can match eol */ yann@1: *yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */ yann@1: (yy_c_buf_p) = yy_cp -= 1; yann@1: YY_DO_BEFORE_ACTION; /* set up zconftext again */ yann@1: YY_RULE_SETUP yann@1: { yann@1: append_string(zconftext, zconfleng); yann@1: zconflval.string = text; yann@1: return T_WORD_QUOTE; yann@1: } yann@1: YY_BREAK yann@1: case 24: yann@1: YY_RULE_SETUP yann@1: { yann@1: append_string(zconftext, zconfleng); yann@1: } yann@1: YY_BREAK yann@1: case 25: yann@1: /* rule 25 can match eol */ yann@1: *yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */ yann@1: (yy_c_buf_p) = yy_cp -= 1; yann@1: YY_DO_BEFORE_ACTION; /* set up zconftext again */ yann@1: YY_RULE_SETUP yann@1: { yann@1: append_string(zconftext + 1, zconfleng - 1); yann@1: zconflval.string = text; yann@1: return T_WORD_QUOTE; yann@1: } yann@1: YY_BREAK yann@1: case 26: yann@1: YY_RULE_SETUP yann@1: { yann@1: append_string(zconftext + 1, zconfleng - 1); yann@1: } yann@1: YY_BREAK yann@1: case 27: yann@1: YY_RULE_SETUP yann@1: { yann@1: if (str == zconftext[0]) { yann@1: BEGIN(PARAM); yann@1: zconflval.string = text; yann@1: return T_WORD_QUOTE; yann@1: } else yann@1: append_string(zconftext, 1); yann@1: } yann@1: YY_BREAK yann@1: case 28: yann@1: /* rule 28 can match eol */ yann@1: YY_RULE_SETUP yann@1: { yann@1: printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno()); yann@1: current_file->lineno++; yann@1: BEGIN(INITIAL); yann@1: return T_EOL; yann@1: } yann@1: YY_BREAK yann@1: case YY_STATE_EOF(STRING): yann@1: { yann@1: BEGIN(INITIAL); yann@1: } yann@1: YY_BREAK yann@1: yann@1: case 29: yann@1: YY_RULE_SETUP yann@1: { yann@1: ts = 0; yann@1: for (i = 0; i < zconfleng; i++) { yann@1: if (zconftext[i] == '\t') yann@1: ts = (ts & ~7) + 8; yann@1: else yann@1: ts++; yann@1: } yann@1: last_ts = ts; yann@1: if (first_ts) { yann@1: if (ts < first_ts) { yann@1: zconf_endhelp(); yann@1: return T_HELPTEXT; yann@1: } yann@1: ts -= first_ts; yann@1: while (ts > 8) { yann@1: append_string(" ", 8); yann@1: ts -= 8; yann@1: } yann@1: append_string(" ", ts); yann@1: } yann@1: } yann@1: YY_BREAK yann@1: case 30: yann@1: /* rule 30 can match eol */ yann@1: *yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */ yann@1: (yy_c_buf_p) = yy_cp -= 1; yann@1: YY_DO_BEFORE_ACTION; /* set up zconftext again */ yann@1: YY_RULE_SETUP yann@1: { yann@1: current_file->lineno++; yann@1: zconf_endhelp(); yann@1: return T_HELPTEXT; yann@1: } yann@1: YY_BREAK yann@1: case 31: yann@1: /* rule 31 can match eol */ yann@1: YY_RULE_SETUP yann@1: { yann@1: current_file->lineno++; yann@1: append_string("\n", 1); yann@1: } yann@1: YY_BREAK yann@1: case 32: yann@1: YY_RULE_SETUP yann@1: { yann@943: while (zconfleng) { yann@943: if ((zconftext[zconfleng-1] != ' ') && (zconftext[zconfleng-1] != '\t')) yann@943: break; yann@943: zconfleng--; yann@943: } yann@1: append_string(zconftext, zconfleng); yann@1: if (!first_ts) yann@1: first_ts = last_ts; yann@1: } yann@1: YY_BREAK yann@1: case YY_STATE_EOF(HELP): yann@1: { yann@1: zconf_endhelp(); yann@1: return T_HELPTEXT; yann@1: } yann@1: YY_BREAK yann@1: yann@1: case YY_STATE_EOF(INITIAL): yann@1: case YY_STATE_EOF(COMMAND): yann@1: { yann@1: if (current_file) { yann@1: zconf_endfile(); yann@1: return T_EOL; yann@1: } yann@1: fclose(zconfin); yann@1: yyterminate(); yann@1: } yann@1: YY_BREAK yann@1: case 33: yann@1: YY_RULE_SETUP yann@1: YY_FATAL_ERROR( "flex scanner jammed" ); yann@1: YY_BREAK yann@1: yann@1: case YY_END_OF_BUFFER: yann@1: { yann@1: /* Amount of text matched not including the EOB char. */ yann@1: int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; yann@1: yann@1: /* Undo the effects of YY_DO_BEFORE_ACTION. */ yann@1: *yy_cp = (yy_hold_char); yann@1: YY_RESTORE_YY_MORE_OFFSET yann@1: yann@1: if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) yann@1: { yann@1: /* We're scanning a new file or input source. It's yann@1: * possible that this happened because the user yann@1: * just pointed zconfin at a new source and called yann@1: * zconflex(). If so, then we have to assure yann@1: * consistency between YY_CURRENT_BUFFER and our yann@1: * globals. Here is the right place to do so, because yann@1: * this is the first action (other than possibly a yann@1: * back-up) that will match for the new input source. yann@1: */ yann@1: (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; yann@1: YY_CURRENT_BUFFER_LVALUE->yy_input_file = zconfin; yann@1: YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; yann@1: } yann@1: yann@1: /* Note that here we test for yy_c_buf_p "<=" to the position yann@1: * of the first EOB in the buffer, since yy_c_buf_p will yann@1: * already have been incremented past the NUL character yann@1: * (since all states make transitions on EOB to the yann@1: * end-of-buffer state). Contrast this with the test yann@1: * in input(). yann@1: */ yann@1: if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) yann@1: { /* This was really a NUL. */ yann@1: yy_state_type yy_next_state; yann@1: yann@1: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yann@1: yann@1: yy_current_state = yy_get_previous_state( ); yann@1: yann@1: /* Okay, we're now positioned to make the NUL yann@1: * transition. We couldn't have yann@1: * yy_get_previous_state() go ahead and do it yann@1: * for us because it doesn't know how to deal yann@1: * with the possibility of jamming (and we don't yann@1: * want to build jamming into it because then it yann@1: * will run more slowly). yann@1: */ yann@1: yann@1: yy_next_state = yy_try_NUL_trans( yy_current_state ); yann@1: yann@1: yy_bp = (yytext_ptr) + YY_MORE_ADJ; yann@1: yann@1: if ( yy_next_state ) yann@1: { yann@1: /* Consume the NUL. */ yann@1: yy_cp = ++(yy_c_buf_p); yann@1: yy_current_state = yy_next_state; yann@1: goto yy_match; yann@1: } yann@1: yann@1: else yann@1: { yann@1: yy_cp = (yy_c_buf_p); yann@1: goto yy_find_action; yann@1: } yann@1: } yann@1: yann@1: else switch ( yy_get_next_buffer( ) ) yann@1: { yann@1: case EOB_ACT_END_OF_FILE: yann@1: { yann@1: (yy_did_buffer_switch_on_eof) = 0; yann@1: yann@1: if ( zconfwrap( ) ) yann@1: { yann@1: /* Note: because we've taken care in yann@1: * yy_get_next_buffer() to have set up yann@1: * zconftext, we can now set up yann@1: * yy_c_buf_p so that if some total yann@1: * hoser (like flex itself) wants to yann@1: * call the scanner after we return the yann@1: * YY_NULL, it'll still work - another yann@1: * YY_NULL will get returned. yann@1: */ yann@1: (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yann@1: yann@1: yy_act = YY_STATE_EOF(YY_START); yann@1: goto do_action; yann@1: } yann@1: yann@1: else yann@1: { yann@1: if ( ! (yy_did_buffer_switch_on_eof) ) yann@1: YY_NEW_FILE; yann@1: } yann@1: break; yann@1: } yann@1: yann@1: case EOB_ACT_CONTINUE_SCAN: yann@1: (yy_c_buf_p) = yann@1: (yytext_ptr) + yy_amount_of_matched_text; yann@1: yann@1: yy_current_state = yy_get_previous_state( ); yann@1: yann@1: yy_cp = (yy_c_buf_p); yann@1: yy_bp = (yytext_ptr) + YY_MORE_ADJ; yann@1: goto yy_match; yann@1: yann@1: case EOB_ACT_LAST_MATCH: yann@1: (yy_c_buf_p) = yann@1: &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yann@1: yann@1: yy_current_state = yy_get_previous_state( ); yann@1: yann@1: yy_cp = (yy_c_buf_p); yann@1: yy_bp = (yytext_ptr) + YY_MORE_ADJ; yann@1: goto yy_find_action; yann@1: } yann@1: break; yann@1: } yann@1: yann@1: default: yann@1: YY_FATAL_ERROR( yann@1: "fatal flex scanner internal error--no action found" ); yann@1: } /* end of action switch */ yann@1: } /* end of scanning one token */ yann@1: } /* end of zconflex */ yann@1: yann@1: /* yy_get_next_buffer - try to read in a new buffer yann@1: * yann@1: * Returns a code representing an action: yann@1: * EOB_ACT_LAST_MATCH - yann@1: * EOB_ACT_CONTINUE_SCAN - continue scanning from current position yann@1: * EOB_ACT_END_OF_FILE - end of file yann@1: */ yann@1: static int yy_get_next_buffer (void) yann@1: { yann@1: register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; yann@1: register char *source = (yytext_ptr); yann@1: register int number_to_move, i; yann@1: int ret_val; yann@1: yann@1: if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) yann@1: YY_FATAL_ERROR( yann@1: "fatal flex scanner internal error--end of buffer missed" ); yann@1: yann@1: if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) yann@1: { /* Don't try to fill the buffer, so this is an EOF. */ yann@1: if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) yann@1: { yann@1: /* We matched a single character, the EOB, so yann@1: * treat this as a final EOF. yann@1: */ yann@1: return EOB_ACT_END_OF_FILE; yann@1: } yann@1: yann@1: else yann@1: { yann@1: /* We matched some text prior to the EOB, first yann@1: * process it. yann@1: */ yann@1: return EOB_ACT_LAST_MATCH; yann@1: } yann@1: } yann@1: yann@1: /* Try to read more data. */ yann@1: yann@1: /* First move last chars to start of buffer. */ yann@1: number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; yann@1: yann@1: for ( i = 0; i < number_to_move; ++i ) yann@1: *(dest++) = *(source++); yann@1: yann@1: if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) yann@1: /* don't do the read, it's not guaranteed to return an EOF, yann@1: * just force an EOF yann@1: */ yann@1: YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; yann@1: yann@1: else yann@1: { yann@1: int num_to_read = yann@1: YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; yann@1: yann@1: while ( num_to_read <= 0 ) yann@1: { /* Not enough room in the buffer - grow it. */ yann@1: yann@1: /* just a shorter name for the current buffer */ yann@1: YY_BUFFER_STATE b = YY_CURRENT_BUFFER; yann@1: yann@1: int yy_c_buf_p_offset = yann@1: (int) ((yy_c_buf_p) - b->yy_ch_buf); yann@1: yann@1: if ( b->yy_is_our_buffer ) yann@1: { yann@1: int new_size = b->yy_buf_size * 2; yann@1: yann@1: if ( new_size <= 0 ) yann@1: b->yy_buf_size += b->yy_buf_size / 8; yann@1: else yann@1: b->yy_buf_size *= 2; yann@1: yann@1: b->yy_ch_buf = (char *) yann@1: /* Include room in for 2 EOB chars. */ yann@1: zconfrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); yann@1: } yann@1: else yann@1: /* Can't grow it, we don't own it. */ yann@1: b->yy_ch_buf = 0; yann@1: yann@1: if ( ! b->yy_ch_buf ) yann@1: YY_FATAL_ERROR( yann@1: "fatal error - scanner input buffer overflow" ); yann@1: yann@1: (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; yann@1: yann@1: num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - yann@1: number_to_move - 1; yann@1: yann@1: } yann@1: yann@1: if ( num_to_read > YY_READ_BUF_SIZE ) yann@1: num_to_read = YY_READ_BUF_SIZE; yann@1: yann@1: /* Read in more data. */ yann@1: YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), yann@943: (yy_n_chars), (size_t) num_to_read ); yann@1: yann@1: YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); yann@1: } yann@1: yann@1: if ( (yy_n_chars) == 0 ) yann@1: { yann@1: if ( number_to_move == YY_MORE_ADJ ) yann@1: { yann@1: ret_val = EOB_ACT_END_OF_FILE; yann@1: zconfrestart(zconfin ); yann@1: } yann@1: yann@1: else yann@1: { yann@1: ret_val = EOB_ACT_LAST_MATCH; yann@1: YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = yann@1: YY_BUFFER_EOF_PENDING; yann@1: } yann@1: } yann@1: yann@1: else yann@1: ret_val = EOB_ACT_CONTINUE_SCAN; yann@1: yann@943: if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { yann@943: /* Extend the array by 50%, plus the number we really need. */ yann@943: yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); yann@943: YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) zconfrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); yann@943: if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) yann@943: YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); yann@943: } yann@943: yann@1: (yy_n_chars) += number_to_move; yann@1: YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; yann@1: YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; yann@1: yann@1: (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; yann@1: yann@1: return ret_val; yann@1: } yann@1: yann@1: /* yy_get_previous_state - get the state just before the EOB char was reached */ yann@1: yann@1: static yy_state_type yy_get_previous_state (void) yann@1: { yann@1: register yy_state_type yy_current_state; yann@1: register char *yy_cp; yann@1: yann@1: yy_current_state = (yy_start); yann@1: yann@1: for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) yann@1: { yann@1: yy_current_state = yy_nxt[yy_current_state][(*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1)]; yann@1: } yann@1: yann@1: return yy_current_state; yann@1: } yann@1: yann@1: /* yy_try_NUL_trans - try to make a transition on the NUL character yann@1: * yann@1: * synopsis yann@1: * next_state = yy_try_NUL_trans( current_state ); yann@1: */ yann@1: static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) yann@1: { yann@1: register int yy_is_jam; yann@1: yann@1: yy_current_state = yy_nxt[yy_current_state][1]; yann@1: yy_is_jam = (yy_current_state <= 0); yann@1: yann@1: return yy_is_jam ? 0 : yy_current_state; yann@1: } yann@1: yann@1: static void yyunput (int c, register char * yy_bp ) yann@1: { yann@1: register char *yy_cp; yann@1: yann@1: yy_cp = (yy_c_buf_p); yann@1: yann@1: /* undo effects of setting up zconftext */ yann@1: *yy_cp = (yy_hold_char); yann@1: yann@1: if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) yann@1: { /* need to shift things up to make room */ yann@1: /* +2 for EOB chars. */ yann@1: register int number_to_move = (yy_n_chars) + 2; yann@1: register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ yann@1: YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; yann@1: register char *source = yann@1: &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; yann@1: yann@1: while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) yann@1: *--dest = *--source; yann@1: yann@1: yy_cp += (int) (dest - source); yann@1: yy_bp += (int) (dest - source); yann@1: YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yann@1: (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; yann@1: yann@1: if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) yann@1: YY_FATAL_ERROR( "flex scanner push-back overflow" ); yann@1: } yann@1: yann@1: *--yy_cp = (char) c; yann@1: yann@1: (yytext_ptr) = yy_bp; yann@1: (yy_hold_char) = *yy_cp; yann@1: (yy_c_buf_p) = yy_cp; yann@1: } yann@1: yann@1: #ifndef YY_NO_INPUT yann@1: #ifdef __cplusplus yann@1: static int yyinput (void) yann@1: #else yann@1: static int input (void) yann@1: #endif yann@1: yann@1: { yann@1: int c; yann@1: yann@1: *(yy_c_buf_p) = (yy_hold_char); yann@1: yann@1: if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) yann@1: { yann@1: /* yy_c_buf_p now points to the character we want to return. yann@1: * If this occurs *before* the EOB characters, then it's a yann@1: * valid NUL; if not, then we've hit the end of the buffer. yann@1: */ yann@1: if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) yann@1: /* This was really a NUL. */ yann@1: *(yy_c_buf_p) = '\0'; yann@1: yann@1: else yann@1: { /* need more input */ yann@1: int offset = (yy_c_buf_p) - (yytext_ptr); yann@1: ++(yy_c_buf_p); yann@1: yann@1: switch ( yy_get_next_buffer( ) ) yann@1: { yann@1: case EOB_ACT_LAST_MATCH: yann@1: /* This happens because yy_g_n_b() yann@1: * sees that we've accumulated a yann@1: * token and flags that we need to yann@1: * try matching the token before yann@1: * proceeding. But for input(), yann@1: * there's no matching to consider. yann@1: * So convert the EOB_ACT_LAST_MATCH yann@1: * to EOB_ACT_END_OF_FILE. yann@1: */ yann@1: yann@1: /* Reset buffer status. */ yann@1: zconfrestart(zconfin ); yann@1: yann@1: /*FALLTHROUGH*/ yann@1: yann@1: case EOB_ACT_END_OF_FILE: yann@1: { yann@1: if ( zconfwrap( ) ) yann@1: return EOF; yann@1: yann@1: if ( ! (yy_did_buffer_switch_on_eof) ) yann@1: YY_NEW_FILE; yann@1: #ifdef __cplusplus yann@1: return yyinput(); yann@1: #else yann@1: return input(); yann@1: #endif yann@1: } yann@1: yann@1: case EOB_ACT_CONTINUE_SCAN: yann@1: (yy_c_buf_p) = (yytext_ptr) + offset; yann@1: break; yann@1: } yann@1: } yann@1: } yann@1: yann@1: c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ yann@1: *(yy_c_buf_p) = '\0'; /* preserve zconftext */ yann@1: (yy_hold_char) = *++(yy_c_buf_p); yann@1: yann@1: return c; yann@1: } yann@1: #endif /* ifndef YY_NO_INPUT */ yann@1: yann@1: /** Immediately switch to a different input stream. yann@1: * @param input_file A readable stream. yann@1: * yann@1: * @note This function does not reset the start condition to @c INITIAL . yann@1: */ yann@1: void zconfrestart (FILE * input_file ) yann@1: { yann@1: yann@1: if ( ! YY_CURRENT_BUFFER ){ yann@1: zconfensure_buffer_stack (); yann@1: YY_CURRENT_BUFFER_LVALUE = yann@1: zconf_create_buffer(zconfin,YY_BUF_SIZE ); yann@1: } yann@1: yann@1: zconf_init_buffer(YY_CURRENT_BUFFER,input_file ); yann@1: zconf_load_buffer_state( ); yann@1: } yann@1: yann@1: /** Switch to a different input buffer. yann@1: * @param new_buffer The new input buffer. yann@1: * yann@1: */ yann@1: void zconf_switch_to_buffer (YY_BUFFER_STATE new_buffer ) yann@1: { yann@1: yann@1: /* TODO. We should be able to replace this entire function body yann@1: * with yann@1: * zconfpop_buffer_state(); yann@1: * zconfpush_buffer_state(new_buffer); yann@1: */ yann@1: zconfensure_buffer_stack (); yann@1: if ( YY_CURRENT_BUFFER == new_buffer ) yann@1: return; yann@1: yann@1: if ( YY_CURRENT_BUFFER ) yann@1: { yann@1: /* Flush out information for old buffer. */ yann@1: *(yy_c_buf_p) = (yy_hold_char); yann@1: YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); yann@1: YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); yann@1: } yann@1: yann@1: YY_CURRENT_BUFFER_LVALUE = new_buffer; yann@1: zconf_load_buffer_state( ); yann@1: yann@1: /* We don't actually know whether we did this switch during yann@1: * EOF (zconfwrap()) processing, but the only time this flag yann@1: * is looked at is after zconfwrap() is called, so it's safe yann@1: * to go ahead and always set it. yann@1: */ yann@1: (yy_did_buffer_switch_on_eof) = 1; yann@1: } yann@1: yann@1: static void zconf_load_buffer_state (void) yann@1: { yann@1: (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; yann@1: (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yann@1: zconfin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; yann@1: (yy_hold_char) = *(yy_c_buf_p); yann@1: } yann@1: yann@1: /** Allocate and initialize an input buffer state. yann@1: * @param file A readable stream. yann@1: * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. yann@1: * yann@1: * @return the allocated buffer state. yann@1: */ yann@1: YY_BUFFER_STATE zconf_create_buffer (FILE * file, int size ) yann@1: { yann@1: YY_BUFFER_STATE b; yann@1: yann@1: b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state ) ); yann@1: if ( ! b ) yann@1: YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" ); yann@1: yann@1: b->yy_buf_size = size; yann@1: yann@1: /* yy_ch_buf has to be 2 characters longer than the size given because yann@1: * we need to put in 2 end-of-buffer characters. yann@1: */ yann@1: b->yy_ch_buf = (char *) zconfalloc(b->yy_buf_size + 2 ); yann@1: if ( ! b->yy_ch_buf ) yann@1: YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" ); yann@1: yann@1: b->yy_is_our_buffer = 1; yann@1: yann@1: zconf_init_buffer(b,file ); yann@1: yann@1: return b; yann@1: } yann@1: yann@1: /** Destroy the buffer. yann@1: * @param b a buffer created with zconf_create_buffer() yann@1: * yann@1: */ yann@1: void zconf_delete_buffer (YY_BUFFER_STATE b ) yann@1: { yann@1: yann@1: if ( ! b ) yann@1: return; yann@1: yann@1: if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ yann@1: YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; yann@1: yann@1: if ( b->yy_is_our_buffer ) yann@1: zconffree((void *) b->yy_ch_buf ); yann@1: yann@1: zconffree((void *) b ); yann@1: } yann@1: yann@1: /* Initializes or reinitializes a buffer. yann@1: * This function is sometimes called more than once on the same buffer, yann@1: * such as during a zconfrestart() or at EOF. yann@1: */ yann@1: static void zconf_init_buffer (YY_BUFFER_STATE b, FILE * file ) yann@1: yann@1: { yann@1: int oerrno = errno; yann@1: yann@1: zconf_flush_buffer(b ); yann@1: yann@1: b->yy_input_file = file; yann@1: b->yy_fill_buffer = 1; yann@1: yann@1: /* If b is the current buffer, then zconf_init_buffer was _probably_ yann@1: * called from zconfrestart() or through yy_get_next_buffer. yann@1: * In that case, we don't want to reset the lineno or column. yann@1: */ yann@1: if (b != YY_CURRENT_BUFFER){ yann@1: b->yy_bs_lineno = 1; yann@1: b->yy_bs_column = 0; yann@1: } yann@1: yann@1: b->yy_is_interactive = 0; yann@1: yann@1: errno = oerrno; yann@1: } yann@1: yann@1: /** Discard all buffered characters. On the next scan, YY_INPUT will be called. yann@1: * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. yann@1: * yann@1: */ yann@1: void zconf_flush_buffer (YY_BUFFER_STATE b ) yann@1: { yann@1: if ( ! b ) yann@1: return; yann@1: yann@1: b->yy_n_chars = 0; yann@1: yann@1: /* We always need two end-of-buffer characters. The first causes yann@1: * a transition to the end-of-buffer state. The second causes yann@1: * a jam in that state. yann@1: */ yann@1: b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; yann@1: b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; yann@1: yann@1: b->yy_buf_pos = &b->yy_ch_buf[0]; yann@1: yann@1: b->yy_at_bol = 1; yann@1: b->yy_buffer_status = YY_BUFFER_NEW; yann@1: yann@1: if ( b == YY_CURRENT_BUFFER ) yann@1: zconf_load_buffer_state( ); yann@1: } yann@1: yann@1: /** Pushes the new state onto the stack. The new state becomes yann@1: * the current state. This function will allocate the stack yann@1: * if necessary. yann@1: * @param new_buffer The new state. yann@1: * yann@1: */ yann@1: void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer ) yann@1: { yann@1: if (new_buffer == NULL) yann@1: return; yann@1: yann@1: zconfensure_buffer_stack(); yann@1: yann@1: /* This block is copied from zconf_switch_to_buffer. */ yann@1: if ( YY_CURRENT_BUFFER ) yann@1: { yann@1: /* Flush out information for old buffer. */ yann@1: *(yy_c_buf_p) = (yy_hold_char); yann@1: YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); yann@1: YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); yann@1: } yann@1: yann@1: /* Only push if top exists. Otherwise, replace top. */ yann@1: if (YY_CURRENT_BUFFER) yann@1: (yy_buffer_stack_top)++; yann@1: YY_CURRENT_BUFFER_LVALUE = new_buffer; yann@1: yann@1: /* copied from zconf_switch_to_buffer. */ yann@1: zconf_load_buffer_state( ); yann@1: (yy_did_buffer_switch_on_eof) = 1; yann@1: } yann@1: yann@1: /** Removes and deletes the top of the stack, if present. yann@1: * The next element becomes the new top. yann@1: * yann@1: */ yann@1: void zconfpop_buffer_state (void) yann@1: { yann@1: if (!YY_CURRENT_BUFFER) yann@1: return; yann@1: yann@1: zconf_delete_buffer(YY_CURRENT_BUFFER ); yann@1: YY_CURRENT_BUFFER_LVALUE = NULL; yann@1: if ((yy_buffer_stack_top) > 0) yann@1: --(yy_buffer_stack_top); yann@1: yann@1: if (YY_CURRENT_BUFFER) { yann@1: zconf_load_buffer_state( ); yann@1: (yy_did_buffer_switch_on_eof) = 1; yann@1: } yann@1: } yann@1: yann@1: /* Allocates the stack if it does not exist. yann@1: * Guarantees space for at least one push. yann@1: */ yann@1: static void zconfensure_buffer_stack (void) yann@1: { yann@1: int num_to_alloc; yann@1: yann@1: if (!(yy_buffer_stack)) { yann@1: yann@1: /* First allocation is just for 2 elements, since we don't know if this yann@1: * scanner will even need a stack. We use 2 instead of 1 to avoid an yann@1: * immediate realloc on the next call. yann@1: */ yann@1: num_to_alloc = 1; yann@1: (yy_buffer_stack) = (struct yy_buffer_state**)zconfalloc yann@1: (num_to_alloc * sizeof(struct yy_buffer_state*) yann@1: ); yann@943: if ( ! (yy_buffer_stack) ) yann@943: YY_FATAL_ERROR( "out of dynamic memory in zconfensure_buffer_stack()" ); yann@943: yann@1: memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); yann@1: yann@1: (yy_buffer_stack_max) = num_to_alloc; yann@1: (yy_buffer_stack_top) = 0; yann@1: return; yann@1: } yann@1: yann@1: if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ yann@1: yann@1: /* Increase the buffer to prepare for a possible push. */ yann@1: int grow_size = 8 /* arbitrary grow size */; yann@1: yann@1: num_to_alloc = (yy_buffer_stack_max) + grow_size; yann@1: (yy_buffer_stack) = (struct yy_buffer_state**)zconfrealloc yann@1: ((yy_buffer_stack), yann@1: num_to_alloc * sizeof(struct yy_buffer_state*) yann@1: ); yann@943: if ( ! (yy_buffer_stack) ) yann@943: YY_FATAL_ERROR( "out of dynamic memory in zconfensure_buffer_stack()" ); yann@1: yann@1: /* zero only the new slots.*/ yann@1: memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); yann@1: (yy_buffer_stack_max) = num_to_alloc; yann@1: } yann@1: } yann@1: yann@1: /** Setup the input buffer state to scan directly from a user-specified character buffer. yann@1: * @param base the character buffer yann@1: * @param size the size in bytes of the character buffer yann@1: * yann@1: * @return the newly allocated buffer state object. yann@1: */ yann@1: YY_BUFFER_STATE zconf_scan_buffer (char * base, yy_size_t size ) yann@1: { yann@1: YY_BUFFER_STATE b; yann@1: yann@1: if ( size < 2 || yann@1: base[size-2] != YY_END_OF_BUFFER_CHAR || yann@1: base[size-1] != YY_END_OF_BUFFER_CHAR ) yann@1: /* They forgot to leave room for the EOB's. */ yann@1: return 0; yann@1: yann@1: b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state ) ); yann@1: if ( ! b ) yann@1: YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_buffer()" ); yann@1: yann@1: b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ yann@1: b->yy_buf_pos = b->yy_ch_buf = base; yann@1: b->yy_is_our_buffer = 0; yann@1: b->yy_input_file = 0; yann@1: b->yy_n_chars = b->yy_buf_size; yann@1: b->yy_is_interactive = 0; yann@1: b->yy_at_bol = 1; yann@1: b->yy_fill_buffer = 0; yann@1: b->yy_buffer_status = YY_BUFFER_NEW; yann@1: yann@1: zconf_switch_to_buffer(b ); yann@1: yann@1: return b; yann@1: } yann@1: yann@1: /** Setup the input buffer state to scan a string. The next call to zconflex() will yann@1: * scan from a @e copy of @a str. yann@1: * @param yystr a NUL-terminated string to scan yann@1: * yann@1: * @return the newly allocated buffer state object. yann@1: * @note If you want to scan bytes that may contain NUL values, then use yann@1: * zconf_scan_bytes() instead. yann@1: */ yann@1: YY_BUFFER_STATE zconf_scan_string (yyconst char * yystr ) yann@1: { yann@1: yann@1: return zconf_scan_bytes(yystr,strlen(yystr) ); yann@1: } yann@1: yann@1: /** Setup the input buffer state to scan the given bytes. The next call to zconflex() will yann@1: * scan from a @e copy of @a bytes. yann@1: * @param bytes the byte buffer to scan yann@1: * @param len the number of bytes in the buffer pointed to by @a bytes. yann@1: * yann@1: * @return the newly allocated buffer state object. yann@1: */ yann@1: YY_BUFFER_STATE zconf_scan_bytes (yyconst char * yybytes, int _yybytes_len ) yann@1: { yann@1: YY_BUFFER_STATE b; yann@1: char *buf; yann@1: yy_size_t n; yann@1: int i; yann@1: yann@1: /* Get memory for full buffer, including space for trailing EOB's. */ yann@1: n = _yybytes_len + 2; yann@1: buf = (char *) zconfalloc(n ); yann@1: if ( ! buf ) yann@1: YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_bytes()" ); yann@1: yann@1: for ( i = 0; i < _yybytes_len; ++i ) yann@1: buf[i] = yybytes[i]; yann@1: yann@1: buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; yann@1: yann@1: b = zconf_scan_buffer(buf,n ); yann@1: if ( ! b ) yann@1: YY_FATAL_ERROR( "bad buffer in zconf_scan_bytes()" ); yann@1: yann@1: /* It's okay to grow etc. this buffer, and we should throw it yann@1: * away when we're done. yann@1: */ yann@1: b->yy_is_our_buffer = 1; yann@1: yann@1: return b; yann@1: } yann@1: yann@1: #ifndef YY_EXIT_FAILURE yann@1: #define YY_EXIT_FAILURE 2 yann@1: #endif yann@1: yann@1: static void yy_fatal_error (yyconst char* msg ) yann@1: { yann@1: (void) fprintf( stderr, "%s\n", msg ); yann@1: exit( YY_EXIT_FAILURE ); yann@1: } yann@1: yann@1: /* Redefine yyless() so it works in section 3 code. */ yann@1: yann@1: #undef yyless yann@1: #define yyless(n) \ yann@1: do \ yann@1: { \ yann@1: /* Undo effects of setting up zconftext. */ \ yann@1: int yyless_macro_arg = (n); \ yann@1: YY_LESS_LINENO(yyless_macro_arg);\ yann@1: zconftext[zconfleng] = (yy_hold_char); \ yann@1: (yy_c_buf_p) = zconftext + yyless_macro_arg; \ yann@1: (yy_hold_char) = *(yy_c_buf_p); \ yann@1: *(yy_c_buf_p) = '\0'; \ yann@1: zconfleng = yyless_macro_arg; \ yann@1: } \ yann@1: while ( 0 ) yann@1: yann@1: /* Accessor methods (get/set functions) to struct members. */ yann@1: yann@1: /** Get the current line number. yann@1: * yann@1: */ yann@1: int zconfget_lineno (void) yann@1: { yann@1: yann@1: return zconflineno; yann@1: } yann@1: yann@1: /** Get the input stream. yann@1: * yann@1: */ yann@1: FILE *zconfget_in (void) yann@1: { yann@1: return zconfin; yann@1: } yann@1: yann@1: /** Get the output stream. yann@1: * yann@1: */ yann@1: FILE *zconfget_out (void) yann@1: { yann@1: return zconfout; yann@1: } yann@1: yann@1: /** Get the length of the current token. yann@1: * yann@1: */ yann@1: int zconfget_leng (void) yann@1: { yann@1: return zconfleng; yann@1: } yann@1: yann@1: /** Get the current token. yann@1: * yann@1: */ yann@1: yann@1: char *zconfget_text (void) yann@1: { yann@1: return zconftext; yann@1: } yann@1: yann@1: /** Set the current line number. yann@1: * @param line_number yann@1: * yann@1: */ yann@1: void zconfset_lineno (int line_number ) yann@1: { yann@1: yann@1: zconflineno = line_number; yann@1: } yann@1: yann@1: /** Set the input stream. This does not discard the current yann@1: * input buffer. yann@1: * @param in_str A readable stream. yann@1: * yann@1: * @see zconf_switch_to_buffer yann@1: */ yann@1: void zconfset_in (FILE * in_str ) yann@1: { yann@1: zconfin = in_str ; yann@1: } yann@1: yann@1: void zconfset_out (FILE * out_str ) yann@1: { yann@1: zconfout = out_str ; yann@1: } yann@1: yann@1: int zconfget_debug (void) yann@1: { yann@1: return zconf_flex_debug; yann@1: } yann@1: yann@1: void zconfset_debug (int bdebug ) yann@1: { yann@1: zconf_flex_debug = bdebug ; yann@1: } yann@1: yann@1: static int yy_init_globals (void) yann@1: { yann@1: /* Initialization is the same as for the non-reentrant scanner. yann@1: * This function is called from zconflex_destroy(), so don't allocate here. yann@1: */ yann@1: yann@1: (yy_buffer_stack) = 0; yann@1: (yy_buffer_stack_top) = 0; yann@1: (yy_buffer_stack_max) = 0; yann@1: (yy_c_buf_p) = (char *) 0; yann@1: (yy_init) = 0; yann@1: (yy_start) = 0; yann@1: yann@1: /* Defined in main.c */ yann@1: #ifdef YY_STDINIT yann@1: zconfin = stdin; yann@1: zconfout = stdout; yann@1: #else yann@1: zconfin = (FILE *) 0; yann@1: zconfout = (FILE *) 0; yann@1: #endif yann@1: yann@1: /* For future reference: Set errno on error, since we are called by yann@1: * zconflex_init() yann@1: */ yann@1: return 0; yann@1: } yann@1: yann@1: /* zconflex_destroy is for both reentrant and non-reentrant scanners. */ yann@1: int zconflex_destroy (void) yann@1: { yann@1: yann@1: /* Pop the buffer stack, destroying each element. */ yann@1: while(YY_CURRENT_BUFFER){ yann@1: zconf_delete_buffer(YY_CURRENT_BUFFER ); yann@1: YY_CURRENT_BUFFER_LVALUE = NULL; yann@1: zconfpop_buffer_state(); yann@1: } yann@1: yann@1: /* Destroy the stack itself. */ yann@1: zconffree((yy_buffer_stack) ); yann@1: (yy_buffer_stack) = NULL; yann@1: yann@1: /* Reset the globals. This is important in a non-reentrant scanner so the next time yann@1: * zconflex() is called, initialization will occur. */ yann@1: yy_init_globals( ); yann@1: yann@1: return 0; yann@1: } yann@1: yann@1: /* yann@1: * Internal utility routines. yann@1: */ yann@1: yann@1: #ifndef yytext_ptr yann@1: static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) yann@1: { yann@1: register int i; yann@1: for ( i = 0; i < n; ++i ) yann@1: s1[i] = s2[i]; yann@1: } yann@1: #endif yann@1: yann@1: #ifdef YY_NEED_STRLEN yann@1: static int yy_flex_strlen (yyconst char * s ) yann@1: { yann@1: register int n; yann@1: for ( n = 0; s[n]; ++n ) yann@1: ; yann@1: yann@1: return n; yann@1: } yann@1: #endif yann@1: yann@1: void *zconfalloc (yy_size_t size ) yann@1: { yann@1: return (void *) malloc( size ); yann@1: } yann@1: yann@1: void *zconfrealloc (void * ptr, yy_size_t size ) yann@1: { yann@1: /* The cast to (char *) in the following accommodates both yann@1: * implementations that use char* generic pointers, and those yann@1: * that use void* generic pointers. It works with the latter yann@1: * because both ANSI C and C++ allow castless assignment from yann@1: * any pointer type to void*, and deal with argument conversions yann@1: * as though doing an assignment. yann@1: */ yann@1: return (void *) realloc( (char *) ptr, size ); yann@1: } yann@1: yann@1: void zconffree (void * ptr ) yann@1: { yann@1: free( (char *) ptr ); /* see zconfrealloc() for (char *) cast */ yann@1: } yann@1: yann@1: #define YYTABLES_NAME "yytables" yann@1: yann@1: void zconf_starthelp(void) yann@1: { yann@1: new_string(); yann@1: last_ts = first_ts = 0; yann@1: BEGIN(HELP); yann@1: } yann@1: yann@1: static void zconf_endhelp(void) yann@1: { yann@1: zconflval.string = text; yann@1: BEGIN(INITIAL); yann@1: } yann@1: yann@1: /* yann@1: * Try to open specified file with following names: yann@1: * ./name yann@1: * $(srctree)/name yann@1: * The latter is used when srctree is separate from objtree yann@1: * when compiling the kernel. yann@1: * Return NULL if file is not found. yann@1: */ yann@1: FILE *zconf_fopen(const char *name) yann@1: { yann@1: char *env, fullname[PATH_MAX+1]; yann@1: FILE *f; yann@1: yann@1: f = fopen(name, "r"); yann@943: if (!f && name != NULL && name[0] != '/') { yann@1: env = getenv(SRCTREE); yann@1: if (env) { yann@1: sprintf(fullname, "%s/%s", env, name); yann@1: f = fopen(fullname, "r"); yann@1: } yann@1: } yann@1: return f; yann@1: } yann@1: yann@1: void zconf_initscan(const char *name) yann@1: { yann@1: zconfin = zconf_fopen(name); yann@1: if (!zconfin) { yann@1: printf("can't find file %s\n", name); yann@1: exit(1); yann@1: } yann@1: yann@1: current_buf = malloc(sizeof(*current_buf)); yann@1: memset(current_buf, 0, sizeof(*current_buf)); yann@1: yann@1: current_file = file_lookup(name); yann@1: current_file->lineno = 1; yann@1: current_file->flags = FILE_BUSY; yann@1: } yann@1: yann@1: void zconf_nextfile(const char *name) yann@1: { yann@1: struct file *file = file_lookup(name); yann@1: struct buffer *buf = malloc(sizeof(*buf)); yann@1: memset(buf, 0, sizeof(*buf)); yann@1: yann@1: current_buf->state = YY_CURRENT_BUFFER; yann@1: zconfin = zconf_fopen(name); yann@1: if (!zconfin) { yann@1: printf("%s:%d: can't open file \"%s\"\n", zconf_curname(), zconf_lineno(), name); yann@1: exit(1); yann@1: } yann@1: zconf_switch_to_buffer(zconf_create_buffer(zconfin,YY_BUF_SIZE)); yann@1: buf->parent = current_buf; yann@1: current_buf = buf; yann@1: yann@1: if (file->flags & FILE_BUSY) { yann@1237: printf("%s:%d: do not source '%s' from itself\n", yann@1237: zconf_curname(), zconf_lineno(), name); yann@1: exit(1); yann@1: } yann@1: if (file->flags & FILE_SCANNED) { yann@1237: printf("%s:%d: file '%s' is already sourced from '%s'\n", yann@1237: zconf_curname(), zconf_lineno(), name, yann@1237: file->parent->name); yann@1: exit(1); yann@1: } yann@1: file->flags |= FILE_BUSY; yann@1: file->lineno = 1; yann@1: file->parent = current_file; yann@1: current_file = file; yann@1: } yann@1: yann@1: static void zconf_endfile(void) yann@1: { yann@1: struct buffer *parent; yann@1: yann@1: current_file->flags |= FILE_SCANNED; yann@1: current_file->flags &= ~FILE_BUSY; yann@1: current_file = current_file->parent; yann@1: yann@1: parent = current_buf->parent; yann@1: if (parent) { yann@1: fclose(zconfin); yann@1: zconf_delete_buffer(YY_CURRENT_BUFFER); yann@1: zconf_switch_to_buffer(parent->state); yann@1: } yann@1: free(current_buf); yann@1: current_buf = parent; yann@1: } yann@1: yann@1: int zconf_lineno(void) yann@1: { yann@1: return current_pos.lineno; yann@1: } yann@1: yann@1: char *zconf_curname(void) yann@1: { yann@1: return current_pos.file ? current_pos.file->name : ""; yann@1: } yann@1: