Annotation of embedaddon/confuse/src/lexer.c, revision 1.1
1.1 ! misho 1: #line 2 "lexer.c"
! 2:
! 3: #line 4 "lexer.c"
! 4:
! 5: #define YY_INT_ALIGNED short int
! 6:
! 7: /* A lexical scanner generated by flex */
! 8:
! 9: #define yy_create_buffer cfg_yy_create_buffer
! 10: #define yy_delete_buffer cfg_yy_delete_buffer
! 11: #define yy_flex_debug cfg_yy_flex_debug
! 12: #define yy_init_buffer cfg_yy_init_buffer
! 13: #define yy_flush_buffer cfg_yy_flush_buffer
! 14: #define yy_load_buffer_state cfg_yy_load_buffer_state
! 15: #define yy_switch_to_buffer cfg_yy_switch_to_buffer
! 16: #define yyin cfg_yyin
! 17: #define yyleng cfg_yyleng
! 18: #define yylex cfg_yylex
! 19: #define yylineno cfg_yylineno
! 20: #define yyout cfg_yyout
! 21: #define yyrestart cfg_yyrestart
! 22: #define yytext cfg_yytext
! 23: #define yywrap cfg_yywrap
! 24: #define yyalloc cfg_yyalloc
! 25: #define yyrealloc cfg_yyrealloc
! 26: #define yyfree cfg_yyfree
! 27:
! 28: #define FLEX_SCANNER
! 29: #define YY_FLEX_MAJOR_VERSION 2
! 30: #define YY_FLEX_MINOR_VERSION 5
! 31: #define YY_FLEX_SUBMINOR_VERSION 35
! 32: #if YY_FLEX_SUBMINOR_VERSION > 0
! 33: #define FLEX_BETA
! 34: #endif
! 35:
! 36: /* First, we deal with platform-specific or compiler-specific issues. */
! 37:
! 38: /* begin standard C headers. */
! 39: #include <stdio.h>
! 40: #include <string.h>
! 41: #include <errno.h>
! 42: #include <stdlib.h>
! 43:
! 44: /* end standard C headers. */
! 45:
! 46: /* flex integer type definitions */
! 47:
! 48: #ifndef FLEXINT_H
! 49: #define FLEXINT_H
! 50:
! 51: /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
! 52:
! 53: #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
! 54:
! 55: /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
! 56: * if you want the limit (max/min) macros for int types.
! 57: */
! 58: #ifndef __STDC_LIMIT_MACROS
! 59: #define __STDC_LIMIT_MACROS 1
! 60: #endif
! 61:
! 62: #include <inttypes.h>
! 63: typedef int8_t flex_int8_t;
! 64: typedef uint8_t flex_uint8_t;
! 65: typedef int16_t flex_int16_t;
! 66: typedef uint16_t flex_uint16_t;
! 67: typedef int32_t flex_int32_t;
! 68: typedef uint32_t flex_uint32_t;
! 69: #else
! 70: typedef signed char flex_int8_t;
! 71: typedef short int flex_int16_t;
! 72: typedef int flex_int32_t;
! 73: typedef unsigned char flex_uint8_t;
! 74: typedef unsigned short int flex_uint16_t;
! 75: typedef unsigned int flex_uint32_t;
! 76: #endif /* ! C99 */
! 77:
! 78: /* Limits of integral types. */
! 79: #ifndef INT8_MIN
! 80: #define INT8_MIN (-128)
! 81: #endif
! 82: #ifndef INT16_MIN
! 83: #define INT16_MIN (-32767-1)
! 84: #endif
! 85: #ifndef INT32_MIN
! 86: #define INT32_MIN (-2147483647-1)
! 87: #endif
! 88: #ifndef INT8_MAX
! 89: #define INT8_MAX (127)
! 90: #endif
! 91: #ifndef INT16_MAX
! 92: #define INT16_MAX (32767)
! 93: #endif
! 94: #ifndef INT32_MAX
! 95: #define INT32_MAX (2147483647)
! 96: #endif
! 97: #ifndef UINT8_MAX
! 98: #define UINT8_MAX (255U)
! 99: #endif
! 100: #ifndef UINT16_MAX
! 101: #define UINT16_MAX (65535U)
! 102: #endif
! 103: #ifndef UINT32_MAX
! 104: #define UINT32_MAX (4294967295U)
! 105: #endif
! 106:
! 107: #endif /* ! FLEXINT_H */
! 108:
! 109: #ifdef __cplusplus
! 110:
! 111: /* The "const" storage-class-modifier is valid. */
! 112: #define YY_USE_CONST
! 113:
! 114: #else /* ! __cplusplus */
! 115:
! 116: /* C99 requires __STDC__ to be defined as 1. */
! 117: #if defined (__STDC__)
! 118:
! 119: #define YY_USE_CONST
! 120:
! 121: #endif /* defined (__STDC__) */
! 122: #endif /* ! __cplusplus */
! 123:
! 124: #ifdef YY_USE_CONST
! 125: #define yyconst const
! 126: #else
! 127: #define yyconst
! 128: #endif
! 129:
! 130: /* Returned upon end-of-file. */
! 131: #define YY_NULL 0
! 132:
! 133: /* Promotes a possibly negative, possibly signed char to an unsigned
! 134: * integer for use as an array index. If the signed char is negative,
! 135: * we want to instead treat it as an 8-bit unsigned char, hence the
! 136: * double cast.
! 137: */
! 138: #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
! 139:
! 140: /* Enter a start condition. This macro really ought to take a parameter,
! 141: * but we do it the disgusting crufty way forced on us by the ()-less
! 142: * definition of BEGIN.
! 143: */
! 144: #define BEGIN (yy_start) = 1 + 2 *
! 145:
! 146: /* Translate the current start state into a value that can be later handed
! 147: * to BEGIN to return to the state. The YYSTATE alias is for lex
! 148: * compatibility.
! 149: */
! 150: #define YY_START (((yy_start) - 1) / 2)
! 151: #define YYSTATE YY_START
! 152:
! 153: /* Action number for EOF rule of a given start state. */
! 154: #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
! 155:
! 156: /* Special action meaning "start processing a new file". */
! 157: #define YY_NEW_FILE cfg_yyrestart(cfg_yyin )
! 158:
! 159: #define YY_END_OF_BUFFER_CHAR 0
! 160:
! 161: /* Size of default input buffer. */
! 162: #ifndef YY_BUF_SIZE
! 163: #define YY_BUF_SIZE 16384
! 164: #endif
! 165:
! 166: /* The state buf must be large enough to hold one state per character in the main buffer.
! 167: */
! 168: #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
! 169:
! 170: #ifndef YY_TYPEDEF_YY_BUFFER_STATE
! 171: #define YY_TYPEDEF_YY_BUFFER_STATE
! 172: typedef struct yy_buffer_state *YY_BUFFER_STATE;
! 173: #endif
! 174:
! 175: extern int cfg_yyleng;
! 176:
! 177: extern FILE *cfg_yyin, *cfg_yyout;
! 178:
! 179: #define EOB_ACT_CONTINUE_SCAN 0
! 180: #define EOB_ACT_END_OF_FILE 1
! 181: #define EOB_ACT_LAST_MATCH 2
! 182:
! 183: #define YY_LESS_LINENO(n)
! 184:
! 185: /* Return all but the first "n" matched characters back to the input stream. */
! 186: #define yyless(n) \
! 187: do \
! 188: { \
! 189: /* Undo effects of setting up cfg_yytext. */ \
! 190: int yyless_macro_arg = (n); \
! 191: YY_LESS_LINENO(yyless_macro_arg);\
! 192: *yy_cp = (yy_hold_char); \
! 193: YY_RESTORE_YY_MORE_OFFSET \
! 194: (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
! 195: YY_DO_BEFORE_ACTION; /* set up cfg_yytext again */ \
! 196: } \
! 197: while ( 0 )
! 198:
! 199: #define unput(c) yyunput( c, (yytext_ptr) )
! 200:
! 201: #ifndef YY_TYPEDEF_YY_SIZE_T
! 202: #define YY_TYPEDEF_YY_SIZE_T
! 203: typedef size_t yy_size_t;
! 204: #endif
! 205:
! 206: #ifndef YY_STRUCT_YY_BUFFER_STATE
! 207: #define YY_STRUCT_YY_BUFFER_STATE
! 208: struct yy_buffer_state
! 209: {
! 210: FILE *yy_input_file;
! 211:
! 212: char *yy_ch_buf; /* input buffer */
! 213: char *yy_buf_pos; /* current position in input buffer */
! 214:
! 215: /* Size of input buffer in bytes, not including room for EOB
! 216: * characters.
! 217: */
! 218: yy_size_t yy_buf_size;
! 219:
! 220: /* Number of characters read into yy_ch_buf, not including EOB
! 221: * characters.
! 222: */
! 223: int yy_n_chars;
! 224:
! 225: /* Whether we "own" the buffer - i.e., we know we created it,
! 226: * and can realloc() it to grow it, and should free() it to
! 227: * delete it.
! 228: */
! 229: int yy_is_our_buffer;
! 230:
! 231: /* Whether this is an "interactive" input source; if so, and
! 232: * if we're using stdio for input, then we want to use getc()
! 233: * instead of fread(), to make sure we stop fetching input after
! 234: * each newline.
! 235: */
! 236: int yy_is_interactive;
! 237:
! 238: /* Whether we're considered to be at the beginning of a line.
! 239: * If so, '^' rules will be active on the next match, otherwise
! 240: * not.
! 241: */
! 242: int yy_at_bol;
! 243:
! 244: int yy_bs_lineno; /**< The line count. */
! 245: int yy_bs_column; /**< The column count. */
! 246:
! 247: /* Whether to try to fill the input buffer when we reach the
! 248: * end of it.
! 249: */
! 250: int yy_fill_buffer;
! 251:
! 252: int yy_buffer_status;
! 253:
! 254: #define YY_BUFFER_NEW 0
! 255: #define YY_BUFFER_NORMAL 1
! 256: /* When an EOF's been seen but there's still some text to process
! 257: * then we mark the buffer as YY_EOF_PENDING, to indicate that we
! 258: * shouldn't try reading from the input source any more. We might
! 259: * still have a bunch of tokens to match, though, because of
! 260: * possible backing-up.
! 261: *
! 262: * When we actually see the EOF, we change the status to "new"
! 263: * (via cfg_yyrestart()), so that the user can continue scanning by
! 264: * just pointing cfg_yyin at a new input file.
! 265: */
! 266: #define YY_BUFFER_EOF_PENDING 2
! 267:
! 268: };
! 269: #endif /* !YY_STRUCT_YY_BUFFER_STATE */
! 270:
! 271: /* Stack of input buffers. */
! 272: static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
! 273: static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
! 274: static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
! 275:
! 276: /* We provide macros for accessing buffer states in case in the
! 277: * future we want to put the buffer states in a more general
! 278: * "scanner state".
! 279: *
! 280: * Returns the top of the stack, or NULL.
! 281: */
! 282: #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
! 283: ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
! 284: : NULL)
! 285:
! 286: /* Same as previous macro, but useful when we know that the buffer stack is not
! 287: * NULL or when we need an lvalue. For internal use only.
! 288: */
! 289: #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
! 290:
! 291: /* yy_hold_char holds the character lost when cfg_yytext is formed. */
! 292: static char yy_hold_char;
! 293: static int yy_n_chars; /* number of characters read into yy_ch_buf */
! 294: int cfg_yyleng;
! 295:
! 296: /* Points to current character in buffer. */
! 297: static char *yy_c_buf_p = (char *) 0;
! 298: static int yy_init = 0; /* whether we need to initialize */
! 299: static int yy_start = 0; /* start state number */
! 300:
! 301: /* Flag which is used to allow cfg_yywrap()'s to do buffer switches
! 302: * instead of setting up a fresh cfg_yyin. A bit of a hack ...
! 303: */
! 304: static int yy_did_buffer_switch_on_eof;
! 305:
! 306: void cfg_yyrestart (FILE *input_file );
! 307: void cfg_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer );
! 308: YY_BUFFER_STATE cfg_yy_create_buffer (FILE *file,int size );
! 309: void cfg_yy_delete_buffer (YY_BUFFER_STATE b );
! 310: void cfg_yy_flush_buffer (YY_BUFFER_STATE b );
! 311: void cfg_yypush_buffer_state (YY_BUFFER_STATE new_buffer );
! 312: void cfg_yypop_buffer_state (void );
! 313:
! 314: static void cfg_yyensure_buffer_stack (void );
! 315: static void cfg_yy_load_buffer_state (void );
! 316: static void cfg_yy_init_buffer (YY_BUFFER_STATE b,FILE *file );
! 317:
! 318: #define YY_FLUSH_BUFFER cfg_yy_flush_buffer(YY_CURRENT_BUFFER )
! 319:
! 320: YY_BUFFER_STATE cfg_yy_scan_buffer (char *base,yy_size_t size );
! 321: YY_BUFFER_STATE cfg_yy_scan_string (yyconst char *yy_str );
! 322: YY_BUFFER_STATE cfg_yy_scan_bytes (yyconst char *bytes,int len );
! 323:
! 324: void *cfg_yyalloc (yy_size_t );
! 325: void *cfg_yyrealloc (void *,yy_size_t );
! 326: void cfg_yyfree (void * );
! 327:
! 328: #define yy_new_buffer cfg_yy_create_buffer
! 329:
! 330: #define yy_set_interactive(is_interactive) \
! 331: { \
! 332: if ( ! YY_CURRENT_BUFFER ){ \
! 333: cfg_yyensure_buffer_stack (); \
! 334: YY_CURRENT_BUFFER_LVALUE = \
! 335: cfg_yy_create_buffer(cfg_yyin,YY_BUF_SIZE ); \
! 336: } \
! 337: YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
! 338: }
! 339:
! 340: #define yy_set_bol(at_bol) \
! 341: { \
! 342: if ( ! YY_CURRENT_BUFFER ){\
! 343: cfg_yyensure_buffer_stack (); \
! 344: YY_CURRENT_BUFFER_LVALUE = \
! 345: cfg_yy_create_buffer(cfg_yyin,YY_BUF_SIZE ); \
! 346: } \
! 347: YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
! 348: }
! 349:
! 350: #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
! 351:
! 352: /* Begin user sect3 */
! 353:
! 354: #define cfg_yywrap(n) 1
! 355: #define YY_SKIP_YYWRAP
! 356:
! 357: typedef unsigned char YY_CHAR;
! 358:
! 359: FILE *cfg_yyin = (FILE *) 0, *cfg_yyout = (FILE *) 0;
! 360:
! 361: typedef int yy_state_type;
! 362:
! 363: extern int cfg_yylineno;
! 364:
! 365: int cfg_yylineno = 1;
! 366:
! 367: extern char *cfg_yytext;
! 368: #define yytext_ptr cfg_yytext
! 369:
! 370: static yy_state_type yy_get_previous_state (void );
! 371: static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
! 372: static int yy_get_next_buffer (void );
! 373: static void yy_fatal_error (yyconst char msg[] );
! 374:
! 375: /* Done after the current pattern has been matched and before the
! 376: * corresponding action - sets up cfg_yytext.
! 377: */
! 378: #define YY_DO_BEFORE_ACTION \
! 379: (yytext_ptr) = yy_bp; \
! 380: cfg_yyleng = (size_t) (yy_cp - yy_bp); \
! 381: (yy_hold_char) = *yy_cp; \
! 382: *yy_cp = '\0'; \
! 383: (yy_c_buf_p) = yy_cp;
! 384:
! 385: #define YY_NUM_RULES 44
! 386: #define YY_END_OF_BUFFER 45
! 387: /* This struct is not used in this scanner,
! 388: but its presence is necessary. */
! 389: struct yy_trans_info
! 390: {
! 391: flex_int32_t yy_verify;
! 392: flex_int32_t yy_nxt;
! 393: };
! 394: static yyconst flex_int16_t yy_accept[85] =
! 395: { 0,
! 396: 0, 0, 12, 12, 0, 0, 0, 0, 45, 42,
! 397: 1, 2, 43, 16, 3, 42, 34, 6, 7, 43,
! 398: 10, 42, 8, 4, 5, 12, 14, 13, 33, 19,
! 399: 17, 33, 44, 40, 36, 35, 44, 42, 42, 1,
! 400: 3, 0, 9, 42, 11, 3, 12, 13, 13, 15,
! 401: 33, 33, 32, 20, 21, 22, 28, 26, 29, 27,
! 402: 24, 25, 30, 31, 32, 40, 39, 37, 38, 0,
! 403: 41, 3, 3, 33, 0, 18, 21, 22, 23, 3,
! 404: 18, 21, 23, 0
! 405: } ;
! 406:
! 407: static yyconst flex_int32_t yy_ec[256] =
! 408: { 0,
! 409: 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
! 410: 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
! 411: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 412: 1, 2, 1, 5, 6, 7, 1, 1, 8, 9,
! 413: 10, 11, 12, 13, 1, 1, 14, 15, 15, 15,
! 414: 15, 15, 15, 15, 15, 16, 16, 1, 1, 1,
! 415: 17, 1, 1, 1, 18, 18, 18, 18, 18, 18,
! 416: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 417: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 418: 1, 19, 1, 1, 1, 1, 20, 21, 18, 18,
! 419:
! 420: 22, 23, 1, 1, 1, 1, 1, 1, 1, 24,
! 421: 1, 1, 1, 25, 1, 26, 1, 27, 1, 28,
! 422: 1, 1, 29, 1, 30, 1, 1, 1, 1, 1,
! 423: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 424: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 425: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 426: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 427: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 428: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 429: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 430:
! 431: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 432: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 433: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 434: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 435: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 436: 1, 1, 1, 1, 1
! 437: } ;
! 438:
! 439: static yyconst flex_int32_t yy_meta[31] =
! 440: { 0,
! 441: 1, 2, 3, 2, 4, 2, 1, 5, 2, 2,
! 442: 6, 2, 2, 1, 7, 7, 2, 7, 8, 7,
! 443: 7, 7, 7, 1, 1, 1, 1, 1, 2, 2
! 444: } ;
! 445:
! 446: static yyconst flex_int16_t yy_base[102] =
! 447: { 0,
! 448: 0, 0, 28, 29, 30, 31, 38, 39, 131, 116,
! 449: 127, 293, 293, 293, 0, 30, 293, 293, 293, 111,
! 450: 293, 34, 293, 293, 293, 0, 293, 40, 0, 293,
! 451: 293, 98, 57, 0, 293, 293, 67, 107, 41, 116,
! 452: 0, 59, 293, 62, 293, 86, 0, 42, 50, 293,
! 453: 0, 114, 293, 293, 47, 50, 293, 293, 293, 293,
! 454: 293, 293, 293, 293, 0, 0, 293, 293, 293, 44,
! 455: 293, 144, 0, 117, 41, 0, 52, 108, 0, 0,
! 456: 293, 110, 293, 293, 174, 182, 190, 198, 206, 214,
! 457: 222, 230, 238, 245, 253, 260, 268, 276, 62, 284,
! 458:
! 459: 36
! 460: } ;
! 461:
! 462: static yyconst flex_int16_t yy_def[102] =
! 463: { 0,
! 464: 84, 1, 85, 85, 86, 86, 87, 87, 84, 88,
! 465: 84, 84, 84, 84, 89, 88, 84, 84, 84, 84,
! 466: 84, 90, 84, 84, 84, 91, 84, 92, 93, 84,
! 467: 84, 93, 94, 95, 84, 84, 96, 88, 90, 84,
! 468: 89, 97, 84, 88, 84, 84, 91, 92, 92, 84,
! 469: 93, 98, 84, 84, 84, 84, 84, 84, 84, 84,
! 470: 84, 84, 84, 84, 99, 95, 84, 84, 84, 97,
! 471: 84, 84, 46, 98, 100, 93, 84, 84, 101, 72,
! 472: 84, 84, 84, 0, 84, 84, 84, 84, 84, 84,
! 473: 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
! 474:
! 475: 84
! 476: } ;
! 477:
! 478: static yyconst flex_int16_t yy_nxt[324] =
! 479: { 0,
! 480: 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
! 481: 13, 20, 21, 22, 10, 10, 23, 10, 10, 10,
! 482: 10, 10, 10, 10, 10, 10, 10, 10, 24, 25,
! 483: 27, 27, 30, 30, 31, 31, 32, 32, 28, 28,
! 484: 35, 35, 83, 39, 45, 36, 36, 46, 33, 33,
! 485: 49, 84, 84, 50, 39, 84, 37, 37, 42, 54,
! 486: 49, 77, 78, 50, 78, 78, 82, 78, 79, 68,
! 487: 81, 55, 56, 71, 69, 39, 57, 58, 59, 60,
! 488: 61, 62, 63, 64, 65, 69, 72, 41, 71, 41,
! 489: 41, 41, 72, 41, 41, 41, 41, 41, 41, 73,
! 490:
! 491: 72, 72, 41, 72, 72, 72, 72, 72, 72, 72,
! 492: 72, 72, 72, 72, 41, 41, 75, 40, 75, 75,
! 493: 39, 75, 78, 78, 78, 78, 52, 43, 40, 39,
! 494: 84, 84, 75, 84, 84, 75, 84, 84, 84, 84,
! 495: 84, 84, 84, 76, 80, 41, 76, 41, 41, 41,
! 496: 80, 41, 41, 41, 41, 41, 41, 73, 80, 80,
! 497: 41, 80, 80, 80, 80, 80, 80, 80, 80, 80,
! 498: 80, 80, 41, 41, 26, 26, 26, 26, 26, 26,
! 499: 26, 26, 29, 29, 29, 29, 29, 29, 29, 29,
! 500: 34, 34, 34, 34, 34, 34, 34, 34, 38, 84,
! 501:
! 502: 84, 84, 84, 84, 38, 38, 41, 41, 84, 41,
! 503: 41, 41, 41, 41, 44, 84, 84, 84, 84, 44,
! 504: 44, 44, 47, 47, 84, 47, 47, 84, 47, 47,
! 505: 48, 48, 84, 48, 48, 48, 48, 48, 51, 51,
! 506: 84, 84, 51, 51, 51, 53, 53, 53, 53, 53,
! 507: 53, 53, 53, 66, 66, 84, 66, 84, 66, 66,
! 508: 67, 67, 67, 67, 67, 67, 67, 67, 70, 70,
! 509: 70, 70, 70, 70, 70, 70, 74, 74, 74, 74,
! 510: 74, 74, 74, 74, 75, 75, 75, 75, 75, 75,
! 511: 75, 75, 9, 84, 84, 84, 84, 84, 84, 84,
! 512:
! 513: 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
! 514: 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
! 515: 84, 84, 84
! 516: } ;
! 517:
! 518: static yyconst flex_int16_t yy_chk[324] =
! 519: { 0,
! 520: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 521: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 522: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 523: 3, 4, 5, 6, 5, 6, 5, 6, 3, 4,
! 524: 7, 8, 101, 16, 22, 7, 8, 22, 5, 6,
! 525: 28, 39, 48, 28, 39, 48, 7, 8, 16, 33,
! 526: 49, 55, 55, 49, 56, 56, 77, 77, 99, 37,
! 527: 75, 33, 33, 70, 37, 44, 33, 33, 33, 33,
! 528: 33, 33, 33, 33, 33, 37, 46, 46, 42, 46,
! 529: 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
! 530:
! 531: 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
! 532: 46, 46, 46, 46, 46, 46, 52, 40, 52, 74,
! 533: 38, 74, 78, 78, 82, 82, 32, 20, 11, 10,
! 534: 9, 0, 52, 0, 0, 74, 0, 0, 0, 0,
! 535: 0, 0, 0, 52, 72, 72, 74, 72, 72, 72,
! 536: 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
! 537: 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
! 538: 72, 72, 72, 72, 85, 85, 85, 85, 85, 85,
! 539: 85, 85, 86, 86, 86, 86, 86, 86, 86, 86,
! 540: 87, 87, 87, 87, 87, 87, 87, 87, 88, 0,
! 541:
! 542: 0, 0, 0, 0, 88, 88, 89, 89, 0, 89,
! 543: 89, 89, 89, 89, 90, 0, 0, 0, 0, 90,
! 544: 90, 90, 91, 91, 0, 91, 91, 0, 91, 91,
! 545: 92, 92, 0, 92, 92, 92, 92, 92, 93, 93,
! 546: 0, 0, 93, 93, 93, 94, 94, 94, 94, 94,
! 547: 94, 94, 94, 95, 95, 0, 95, 0, 95, 95,
! 548: 96, 96, 96, 96, 96, 96, 96, 96, 97, 97,
! 549: 97, 97, 97, 97, 97, 97, 98, 98, 98, 98,
! 550: 98, 98, 98, 98, 100, 100, 100, 100, 100, 100,
! 551: 100, 100, 84, 84, 84, 84, 84, 84, 84, 84,
! 552:
! 553: 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
! 554: 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
! 555: 84, 84, 84
! 556: } ;
! 557:
! 558: static yy_state_type yy_last_accepting_state;
! 559: static char *yy_last_accepting_cpos;
! 560:
! 561: extern int cfg_yy_flex_debug;
! 562: int cfg_yy_flex_debug = 0;
! 563:
! 564: /* The intent behind this definition is that it'll catch
! 565: * any uses of REJECT which flex missed.
! 566: */
! 567: #define REJECT reject_used_but_not_detected
! 568: #define yymore() yymore_used_but_not_detected
! 569: #define YY_MORE_ADJ 0
! 570: #define YY_RESTORE_YY_MORE_OFFSET
! 571: char *cfg_yytext;
! 572: #line 1 "lexer.l"
! 573: #line 2 "lexer.l"
! 574: /*
! 575: * Copyright (c) 2002,2003,2007 Martin Hedenfalk <martin@bzero.se>
! 576: *
! 577: * Permission to use, copy, modify, and distribute this software for any
! 578: * purpose with or without fee is hereby granted, provided that the above
! 579: * copyright notice and this permission notice appear in all copies.
! 580: *
! 581: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
! 582: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 583: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
! 584: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 585: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
! 586: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
! 587: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
! 588: */
! 589:
! 590: #ifdef HAVE_CONFIG_H
! 591: # include <config.h>
! 592: #endif
! 593:
! 594: #include <assert.h>
! 595:
! 596: #ifdef HAVE_STRING_H
! 597: # include <string.h>
! 598: #endif
! 599: #include "confuse.h"
! 600:
! 601: #include <errno.h>
! 602:
! 603: #if defined(ENABLE_NLS) && defined(HAVE_GETTEXT)
! 604: # include <libintl.h>
! 605: # define _(str) dgettext(PACKAGE, str)
! 606: #else
! 607: # define _(str) str
! 608: #endif
! 609: #define N_(str) str
! 610:
! 611: /*
! 612: * Prevent compilation of static input() function in generated code
! 613: * This function is never used but GCC 4.3 will warn about it.
! 614: */
! 615: #define YY_NO_INPUT
! 616:
! 617: typedef char * YYSTYPE;
! 618: extern YYSTYPE cfg_yylval;
! 619:
! 620: #define YY_DECL int cfg_yylex ( cfg_t *cfg )
! 621:
! 622: /* temporary buffer for the quoted strings scanner
! 623: */
! 624: char *cfg_qstring = NULL;
! 625: static unsigned int qstring_index = 0;
! 626: static unsigned int qstring_len = 0;
! 627: static void qputc(char ch);
! 628: #define CFG_QSTRING_BUFSIZ 32
! 629:
! 630: #define MAX_INCLUDE_DEPTH 10
! 631: struct {
! 632: YY_BUFFER_STATE state;
! 633: char *filename;
! 634: unsigned int line;
! 635: } cfg_include_stack[MAX_INCLUDE_DEPTH];
! 636: int cfg_include_stack_ptr = 0;
! 637:
! 638: static YY_BUFFER_STATE pre_string_scan_state = 0;
! 639: static YY_BUFFER_STATE string_scan_state = 0;
! 640:
! 641: /* start conditions
! 642: */
! 643:
! 644:
! 645:
! 646: #line 647 "lexer.c"
! 647:
! 648: #define INITIAL 0
! 649: #define comment 1
! 650: #define dq_str 2
! 651: #define sq_str 3
! 652:
! 653: #ifndef YY_NO_UNISTD_H
! 654: /* Special case for "unistd.h", since it is non-ANSI. We include it way
! 655: * down here because we want the user's section 1 to have been scanned first.
! 656: * The user has a chance to override it with an option.
! 657: */
! 658: #include <unistd.h>
! 659: #endif
! 660:
! 661: #ifndef YY_EXTRA_TYPE
! 662: #define YY_EXTRA_TYPE void *
! 663: #endif
! 664:
! 665: static int yy_init_globals (void );
! 666:
! 667: /* Accessor methods to globals.
! 668: These are made visible to non-reentrant scanners for convenience. */
! 669:
! 670: int cfg_yylex_destroy (void );
! 671:
! 672: int cfg_yyget_debug (void );
! 673:
! 674: void cfg_yyset_debug (int debug_flag );
! 675:
! 676: YY_EXTRA_TYPE cfg_yyget_extra (void );
! 677:
! 678: void cfg_yyset_extra (YY_EXTRA_TYPE user_defined );
! 679:
! 680: FILE *cfg_yyget_in (void );
! 681:
! 682: void cfg_yyset_in (FILE * in_str );
! 683:
! 684: FILE *cfg_yyget_out (void );
! 685:
! 686: void cfg_yyset_out (FILE * out_str );
! 687:
! 688: int cfg_yyget_leng (void );
! 689:
! 690: char *cfg_yyget_text (void );
! 691:
! 692: int cfg_yyget_lineno (void );
! 693:
! 694: void cfg_yyset_lineno (int line_number );
! 695:
! 696: /* Macros after this point can all be overridden by user definitions in
! 697: * section 1.
! 698: */
! 699:
! 700: #ifndef YY_SKIP_YYWRAP
! 701: #ifdef __cplusplus
! 702: extern "C" int cfg_yywrap (void );
! 703: #else
! 704: extern int cfg_yywrap (void );
! 705: #endif
! 706: #endif
! 707:
! 708: static void yyunput (int c,char *buf_ptr );
! 709:
! 710: #ifndef yytext_ptr
! 711: static void yy_flex_strncpy (char *,yyconst char *,int );
! 712: #endif
! 713:
! 714: #ifdef YY_NEED_STRLEN
! 715: static int yy_flex_strlen (yyconst char * );
! 716: #endif
! 717:
! 718: #ifndef YY_NO_INPUT
! 719:
! 720: #ifdef __cplusplus
! 721: static int yyinput (void );
! 722: #else
! 723: static int input (void );
! 724: #endif
! 725:
! 726: #endif
! 727:
! 728: /* Amount of stuff to slurp up with each read. */
! 729: #ifndef YY_READ_BUF_SIZE
! 730: #define YY_READ_BUF_SIZE 8192
! 731: #endif
! 732:
! 733: /* Copy whatever the last rule matched to the standard output. */
! 734: #ifndef ECHO
! 735: /* This used to be an fputs(), but since the string might contain NUL's,
! 736: * we now use fwrite().
! 737: */
! 738: #define ECHO fwrite( cfg_yytext, cfg_yyleng, 1, cfg_yyout )
! 739: #endif
! 740:
! 741: /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
! 742: * is returned in "result".
! 743: */
! 744: #ifndef YY_INPUT
! 745: #define YY_INPUT(buf,result,max_size) \
! 746: if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
! 747: { \
! 748: int c = '*'; \
! 749: int n; \
! 750: for ( n = 0; n < max_size && \
! 751: (c = getc( cfg_yyin )) != EOF && c != '\n'; ++n ) \
! 752: buf[n] = (char) c; \
! 753: if ( c == '\n' ) \
! 754: buf[n++] = (char) c; \
! 755: if ( c == EOF && ferror( cfg_yyin ) ) \
! 756: YY_FATAL_ERROR( "input in flex scanner failed" ); \
! 757: result = n; \
! 758: } \
! 759: else \
! 760: { \
! 761: errno=0; \
! 762: while ( (result = fread(buf, 1, max_size, cfg_yyin))==0 && ferror(cfg_yyin)) \
! 763: { \
! 764: if( errno != EINTR) \
! 765: { \
! 766: YY_FATAL_ERROR( "input in flex scanner failed" ); \
! 767: break; \
! 768: } \
! 769: errno=0; \
! 770: clearerr(cfg_yyin); \
! 771: } \
! 772: }\
! 773: \
! 774:
! 775: #endif
! 776:
! 777: /* No semi-colon after return; correct usage is to write "yyterminate();" -
! 778: * we don't want an extra ';' after the "return" because that will cause
! 779: * some compilers to complain about unreachable statements.
! 780: */
! 781: #ifndef yyterminate
! 782: #define yyterminate() return YY_NULL
! 783: #endif
! 784:
! 785: /* Number of entries by which start-condition stack grows. */
! 786: #ifndef YY_START_STACK_INCR
! 787: #define YY_START_STACK_INCR 25
! 788: #endif
! 789:
! 790: /* Report a fatal error. */
! 791: #ifndef YY_FATAL_ERROR
! 792: #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
! 793: #endif
! 794:
! 795: /* end tables serialization structures and prototypes */
! 796:
! 797: /* Default declaration of generated scanner - a define so the user can
! 798: * easily add parameters.
! 799: */
! 800: #ifndef YY_DECL
! 801: #define YY_DECL_IS_OURS 1
! 802:
! 803: extern int cfg_yylex (void);
! 804:
! 805: #define YY_DECL int cfg_yylex (void)
! 806: #endif /* !YY_DECL */
! 807:
! 808: /* Code executed at the beginning of each rule, after cfg_yytext and cfg_yyleng
! 809: * have been set up.
! 810: */
! 811: #ifndef YY_USER_ACTION
! 812: #define YY_USER_ACTION
! 813: #endif
! 814:
! 815: /* Code executed at the end of each rule. */
! 816: #ifndef YY_BREAK
! 817: #define YY_BREAK break;
! 818: #endif
! 819:
! 820: #define YY_RULE_SETUP \
! 821: YY_USER_ACTION
! 822:
! 823: /** The main scanner function which does all the work.
! 824: */
! 825: YY_DECL
! 826: {
! 827: register yy_state_type yy_current_state;
! 828: register char *yy_cp, *yy_bp;
! 829: register int yy_act;
! 830:
! 831: #line 79 "lexer.l"
! 832:
! 833:
! 834: #line 835 "lexer.c"
! 835:
! 836: if ( !(yy_init) )
! 837: {
! 838: (yy_init) = 1;
! 839:
! 840: #ifdef YY_USER_INIT
! 841: YY_USER_INIT;
! 842: #endif
! 843:
! 844: if ( ! (yy_start) )
! 845: (yy_start) = 1; /* first start state */
! 846:
! 847: if ( ! cfg_yyin )
! 848: cfg_yyin = stdin;
! 849:
! 850: if ( ! cfg_yyout )
! 851: cfg_yyout = stdout;
! 852:
! 853: if ( ! YY_CURRENT_BUFFER ) {
! 854: cfg_yyensure_buffer_stack ();
! 855: YY_CURRENT_BUFFER_LVALUE =
! 856: cfg_yy_create_buffer(cfg_yyin,YY_BUF_SIZE );
! 857: }
! 858:
! 859: cfg_yy_load_buffer_state( );
! 860: }
! 861:
! 862: while ( 1 ) /* loops until end-of-file is reached */
! 863: {
! 864: yy_cp = (yy_c_buf_p);
! 865:
! 866: /* Support of cfg_yytext. */
! 867: *yy_cp = (yy_hold_char);
! 868:
! 869: /* yy_bp points to the position in yy_ch_buf of the start of
! 870: * the current run.
! 871: */
! 872: yy_bp = yy_cp;
! 873:
! 874: yy_current_state = (yy_start);
! 875: yy_match:
! 876: do
! 877: {
! 878: register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
! 879: if ( yy_accept[yy_current_state] )
! 880: {
! 881: (yy_last_accepting_state) = yy_current_state;
! 882: (yy_last_accepting_cpos) = yy_cp;
! 883: }
! 884: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
! 885: {
! 886: yy_current_state = (int) yy_def[yy_current_state];
! 887: if ( yy_current_state >= 85 )
! 888: yy_c = yy_meta[(unsigned int) yy_c];
! 889: }
! 890: yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
! 891: ++yy_cp;
! 892: }
! 893: while ( yy_base[yy_current_state] != 293 );
! 894:
! 895: yy_find_action:
! 896: yy_act = yy_accept[yy_current_state];
! 897: if ( yy_act == 0 )
! 898: { /* have to back up */
! 899: yy_cp = (yy_last_accepting_cpos);
! 900: yy_current_state = (yy_last_accepting_state);
! 901: yy_act = yy_accept[yy_current_state];
! 902: }
! 903:
! 904: YY_DO_BEFORE_ACTION;
! 905:
! 906: do_action: /* This label is used only to access EOF actions. */
! 907:
! 908: switch ( yy_act )
! 909: { /* beginning of action switch */
! 910: case 0: /* must back up */
! 911: /* undo the effects of YY_DO_BEFORE_ACTION */
! 912: *yy_cp = (yy_hold_char);
! 913: yy_cp = (yy_last_accepting_cpos);
! 914: yy_current_state = (yy_last_accepting_state);
! 915: goto yy_find_action;
! 916:
! 917: case 1:
! 918: YY_RULE_SETUP
! 919: #line 81 "lexer.l"
! 920: /* eat up whitespace */
! 921: YY_BREAK
! 922: case 2:
! 923: /* rule 2 can match eol */
! 924: YY_RULE_SETUP
! 925: #line 83 "lexer.l"
! 926: cfg->line++; /* keep track of line number */
! 927: YY_BREAK
! 928: case 3:
! 929: YY_RULE_SETUP
! 930: #line 85 "lexer.l"
! 931: /* eat up one-line comments */
! 932: YY_BREAK
! 933: /* special keywords/symbols
! 934: */
! 935: case 4:
! 936: YY_RULE_SETUP
! 937: #line 89 "lexer.l"
! 938: { cfg_yylval = cfg_yytext; return '{'; }
! 939: YY_BREAK
! 940: case 5:
! 941: YY_RULE_SETUP
! 942: #line 90 "lexer.l"
! 943: { cfg_yylval = cfg_yytext; return '}'; }
! 944: YY_BREAK
! 945: case 6:
! 946: YY_RULE_SETUP
! 947: #line 91 "lexer.l"
! 948: { cfg_yylval = cfg_yytext; return '('; }
! 949: YY_BREAK
! 950: case 7:
! 951: YY_RULE_SETUP
! 952: #line 92 "lexer.l"
! 953: { cfg_yylval = cfg_yytext; return ')'; }
! 954: YY_BREAK
! 955: case 8:
! 956: YY_RULE_SETUP
! 957: #line 93 "lexer.l"
! 958: { cfg_yylval = cfg_yytext; return '='; }
! 959: YY_BREAK
! 960: case 9:
! 961: YY_RULE_SETUP
! 962: #line 94 "lexer.l"
! 963: { cfg_yylval = cfg_yytext; return '+'; }
! 964: YY_BREAK
! 965: case 10:
! 966: YY_RULE_SETUP
! 967: #line 95 "lexer.l"
! 968: { cfg_yylval = cfg_yytext; return ','; }
! 969: YY_BREAK
! 970: /* handle multi-line C-style comments
! 971: */
! 972: case 11:
! 973: YY_RULE_SETUP
! 974: #line 99 "lexer.l"
! 975: BEGIN(comment);
! 976: YY_BREAK
! 977: case 12:
! 978: YY_RULE_SETUP
! 979: #line 100 "lexer.l"
! 980: /* eat anything that's not a '*' */
! 981: YY_BREAK
! 982: case 13:
! 983: YY_RULE_SETUP
! 984: #line 101 "lexer.l"
! 985: /* eat up '*'s not followed by '/'s */
! 986: YY_BREAK
! 987: case 14:
! 988: /* rule 14 can match eol */
! 989: YY_RULE_SETUP
! 990: #line 102 "lexer.l"
! 991: cfg->line++;
! 992: YY_BREAK
! 993: case 15:
! 994: YY_RULE_SETUP
! 995: #line 103 "lexer.l"
! 996: BEGIN(INITIAL);
! 997: YY_BREAK
! 998: /* handle C-style strings
! 999: */
! 1000: case 16:
! 1001: YY_RULE_SETUP
! 1002: #line 107 "lexer.l"
! 1003: {
! 1004: qstring_index = 0;
! 1005: BEGIN(dq_str);
! 1006: }
! 1007: YY_BREAK
! 1008: case 17:
! 1009: YY_RULE_SETUP
! 1010: #line 111 "lexer.l"
! 1011: { /* saw closing quote - all done */
! 1012: BEGIN(INITIAL);
! 1013: qputc('\0');
! 1014: cfg_yylval = cfg_qstring;
! 1015: return CFGT_STR;
! 1016: }
! 1017: YY_BREAK
! 1018: case 18:
! 1019: /* rule 18 can match eol */
! 1020: YY_RULE_SETUP
! 1021: #line 117 "lexer.l"
! 1022: { /* environment variable substitution */
! 1023: char *var;
! 1024: char *e;
! 1025: cfg_yytext[strlen(cfg_yytext) - 1] = 0;
! 1026: e = strchr(cfg_yytext+2, ':');
! 1027: if(e && e[1] == '-')
! 1028: *e = 0;
! 1029: else
! 1030: e = 0;
! 1031: var = getenv(cfg_yytext+2);
! 1032: if(!var && e)
! 1033: var = e+2;
! 1034: while(var && *var)
! 1035: qputc(*var++);
! 1036: }
! 1037: YY_BREAK
! 1038: case 19:
! 1039: /* rule 19 can match eol */
! 1040: YY_RULE_SETUP
! 1041: #line 132 "lexer.l"
! 1042: {
! 1043: qputc('\n');
! 1044: cfg->line++;
! 1045: }
! 1046: YY_BREAK
! 1047: case 20:
! 1048: /* rule 20 can match eol */
! 1049: YY_RULE_SETUP
! 1050: #line 136 "lexer.l"
! 1051: { /* allow continuing on next line */
! 1052: /* no-op */
! 1053: cfg->line++;
! 1054: }
! 1055: YY_BREAK
! 1056: case 21:
! 1057: YY_RULE_SETUP
! 1058: #line 140 "lexer.l"
! 1059: { /* octal escape sequence */
! 1060: unsigned int result;
! 1061: sscanf(cfg_yytext + 1, "%o", &result);
! 1062: if(result > 0xFF) {
! 1063: cfg_error(cfg, _("invalid octal number '%s'"), cfg_yytext);
! 1064: return 0;
! 1065: }
! 1066: qputc(result);
! 1067: }
! 1068: YY_BREAK
! 1069: case 22:
! 1070: YY_RULE_SETUP
! 1071: #line 149 "lexer.l"
! 1072: {
! 1073: cfg_error(cfg, _("bad escape sequence '%s'"), cfg_yytext);
! 1074: return 0;
! 1075: }
! 1076: YY_BREAK
! 1077: case 23:
! 1078: YY_RULE_SETUP
! 1079: #line 153 "lexer.l"
! 1080: { /* hexadecimal escape sequence */
! 1081: unsigned int result;
! 1082: sscanf(cfg_yytext + 2, "%x", &result);
! 1083: qputc(result);
! 1084: }
! 1085: YY_BREAK
! 1086: case 24:
! 1087: YY_RULE_SETUP
! 1088: #line 158 "lexer.l"
! 1089: {
! 1090: qputc('\n');
! 1091: }
! 1092: YY_BREAK
! 1093: case 25:
! 1094: YY_RULE_SETUP
! 1095: #line 161 "lexer.l"
! 1096: {
! 1097: qputc('\r');
! 1098: }
! 1099: YY_BREAK
! 1100: case 26:
! 1101: YY_RULE_SETUP
! 1102: #line 164 "lexer.l"
! 1103: {
! 1104: qputc('\b');
! 1105: }
! 1106: YY_BREAK
! 1107: case 27:
! 1108: YY_RULE_SETUP
! 1109: #line 167 "lexer.l"
! 1110: {
! 1111: qputc('\f');
! 1112: }
! 1113: YY_BREAK
! 1114: case 28:
! 1115: YY_RULE_SETUP
! 1116: #line 170 "lexer.l"
! 1117: {
! 1118: qputc('\007');
! 1119: }
! 1120: YY_BREAK
! 1121: case 29:
! 1122: YY_RULE_SETUP
! 1123: #line 173 "lexer.l"
! 1124: {
! 1125: qputc('\033');
! 1126: }
! 1127: YY_BREAK
! 1128: case 30:
! 1129: YY_RULE_SETUP
! 1130: #line 176 "lexer.l"
! 1131: {
! 1132: qputc('\t');
! 1133: }
! 1134: YY_BREAK
! 1135: case 31:
! 1136: YY_RULE_SETUP
! 1137: #line 179 "lexer.l"
! 1138: {
! 1139: qputc('\v');
! 1140: }
! 1141: YY_BREAK
! 1142: case 32:
! 1143: YY_RULE_SETUP
! 1144: #line 182 "lexer.l"
! 1145: {
! 1146: qputc(cfg_yytext[1]);
! 1147: }
! 1148: YY_BREAK
! 1149: case 33:
! 1150: YY_RULE_SETUP
! 1151: #line 185 "lexer.l"
! 1152: {
! 1153: char *yptr = cfg_yytext;
! 1154: while(*yptr) {
! 1155: qputc(*yptr++);
! 1156: }
! 1157: }
! 1158: YY_BREAK
! 1159: /* single-quoted string ('...') */
! 1160: case 34:
! 1161: YY_RULE_SETUP
! 1162: #line 193 "lexer.l"
! 1163: {
! 1164: qstring_index = 0;
! 1165: BEGIN(sq_str);
! 1166: }
! 1167: YY_BREAK
! 1168: case 35:
! 1169: YY_RULE_SETUP
! 1170: #line 197 "lexer.l"
! 1171: { /* saw closing quote - all done */
! 1172: BEGIN(INITIAL);
! 1173: qputc('\0');
! 1174: cfg_yylval = cfg_qstring;
! 1175: return CFGT_STR;
! 1176: }
! 1177: YY_BREAK
! 1178: case 36:
! 1179: /* rule 36 can match eol */
! 1180: YY_RULE_SETUP
! 1181: #line 203 "lexer.l"
! 1182: {
! 1183: qputc('\n');
! 1184: cfg->line++;
! 1185: }
! 1186: YY_BREAK
! 1187: case 37:
! 1188: /* rule 37 can match eol */
! 1189: YY_RULE_SETUP
! 1190: #line 207 "lexer.l"
! 1191: { /* allow continuing on next line */
! 1192: /* no-op */
! 1193: cfg->line++;
! 1194: }
! 1195: YY_BREAK
! 1196: case 38:
! 1197: YY_RULE_SETUP
! 1198: #line 211 "lexer.l"
! 1199: {
! 1200: qputc(cfg_yytext[1]);
! 1201: }
! 1202: YY_BREAK
! 1203: case 39:
! 1204: /* rule 39 can match eol */
! 1205: YY_RULE_SETUP
! 1206: #line 214 "lexer.l"
! 1207: {
! 1208: qputc(cfg_yytext[0]);
! 1209: qputc(cfg_yytext[1]);
! 1210: }
! 1211: YY_BREAK
! 1212: case 40:
! 1213: YY_RULE_SETUP
! 1214: #line 218 "lexer.l"
! 1215: {
! 1216: char *cp = cfg_yytext;
! 1217: while(*cp != '\0') {
! 1218: qputc(*cp++);
! 1219: }
! 1220: }
! 1221: YY_BREAK
! 1222: case YY_STATE_EOF(sq_str):
! 1223: #line 224 "lexer.l"
! 1224: {
! 1225: cfg_error(cfg, _("unterminated string constant"));
! 1226: return 0;
! 1227: }
! 1228: YY_BREAK
! 1229: case YY_STATE_EOF(INITIAL):
! 1230: case YY_STATE_EOF(comment):
! 1231: case YY_STATE_EOF(dq_str):
! 1232: #line 229 "lexer.l"
! 1233: {
! 1234: if (cfg_include_stack_ptr <= 0)
! 1235: {
! 1236: return EOF;
! 1237: }
! 1238: else
! 1239: {
! 1240: cfg_yy_delete_buffer(YY_CURRENT_BUFFER );
! 1241: fclose(cfg_yyin);
! 1242: cfg_yyin = 0;
! 1243: --cfg_include_stack_ptr;
! 1244: cfg_yy_switch_to_buffer(cfg_include_stack[cfg_include_stack_ptr].state );
! 1245: free(cfg->filename);
! 1246: cfg->filename = cfg_include_stack[cfg_include_stack_ptr].filename;
! 1247: cfg->line = cfg_include_stack[cfg_include_stack_ptr].line;
! 1248: }
! 1249: }
! 1250: YY_BREAK
! 1251: case 41:
! 1252: /* rule 41 can match eol */
! 1253: YY_RULE_SETUP
! 1254: #line 248 "lexer.l"
! 1255: {
! 1256: char *var;
! 1257: char *e;
! 1258: cfg_yytext[strlen(cfg_yytext) - 1] = 0;
! 1259: e = strchr(cfg_yytext+2, ':');
! 1260: if(e && e[1] == '-')
! 1261: *e = 0;
! 1262: else
! 1263: e = 0;
! 1264: var = getenv(cfg_yytext+2);
! 1265: if(!var && e)
! 1266: var = e+2;
! 1267: if(!var)
! 1268: var = "";
! 1269: cfg_yylval = var;
! 1270: return CFGT_STR;
! 1271: }
! 1272: YY_BREAK
! 1273: /* an unquoted string
! 1274: * a slash can't be followed by another slash (c++
! 1275: * comment) or an asterisk (C multi-line comment)
! 1276: */
! 1277: case 42:
! 1278: YY_RULE_SETUP
! 1279: #line 270 "lexer.l"
! 1280: {
! 1281: cfg_yylval = cfg_yytext;
! 1282: return CFGT_STR;
! 1283: }
! 1284: YY_BREAK
! 1285: case 43:
! 1286: YY_RULE_SETUP
! 1287: #line 275 "lexer.l"
! 1288: /* eat any non-matching characters */
! 1289: YY_BREAK
! 1290: case 44:
! 1291: YY_RULE_SETUP
! 1292: #line 277 "lexer.l"
! 1293: ECHO;
! 1294: YY_BREAK
! 1295: #line 1296 "lexer.c"
! 1296:
! 1297: case YY_END_OF_BUFFER:
! 1298: {
! 1299: /* Amount of text matched not including the EOB char. */
! 1300: int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
! 1301:
! 1302: /* Undo the effects of YY_DO_BEFORE_ACTION. */
! 1303: *yy_cp = (yy_hold_char);
! 1304: YY_RESTORE_YY_MORE_OFFSET
! 1305:
! 1306: if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
! 1307: {
! 1308: /* We're scanning a new file or input source. It's
! 1309: * possible that this happened because the user
! 1310: * just pointed cfg_yyin at a new source and called
! 1311: * cfg_yylex(). If so, then we have to assure
! 1312: * consistency between YY_CURRENT_BUFFER and our
! 1313: * globals. Here is the right place to do so, because
! 1314: * this is the first action (other than possibly a
! 1315: * back-up) that will match for the new input source.
! 1316: */
! 1317: (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
! 1318: YY_CURRENT_BUFFER_LVALUE->yy_input_file = cfg_yyin;
! 1319: YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
! 1320: }
! 1321:
! 1322: /* Note that here we test for yy_c_buf_p "<=" to the position
! 1323: * of the first EOB in the buffer, since yy_c_buf_p will
! 1324: * already have been incremented past the NUL character
! 1325: * (since all states make transitions on EOB to the
! 1326: * end-of-buffer state). Contrast this with the test
! 1327: * in input().
! 1328: */
! 1329: if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
! 1330: { /* This was really a NUL. */
! 1331: yy_state_type yy_next_state;
! 1332:
! 1333: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
! 1334:
! 1335: yy_current_state = yy_get_previous_state( );
! 1336:
! 1337: /* Okay, we're now positioned to make the NUL
! 1338: * transition. We couldn't have
! 1339: * yy_get_previous_state() go ahead and do it
! 1340: * for us because it doesn't know how to deal
! 1341: * with the possibility of jamming (and we don't
! 1342: * want to build jamming into it because then it
! 1343: * will run more slowly).
! 1344: */
! 1345:
! 1346: yy_next_state = yy_try_NUL_trans( yy_current_state );
! 1347:
! 1348: yy_bp = (yytext_ptr) + YY_MORE_ADJ;
! 1349:
! 1350: if ( yy_next_state )
! 1351: {
! 1352: /* Consume the NUL. */
! 1353: yy_cp = ++(yy_c_buf_p);
! 1354: yy_current_state = yy_next_state;
! 1355: goto yy_match;
! 1356: }
! 1357:
! 1358: else
! 1359: {
! 1360: yy_cp = (yy_c_buf_p);
! 1361: goto yy_find_action;
! 1362: }
! 1363: }
! 1364:
! 1365: else switch ( yy_get_next_buffer( ) )
! 1366: {
! 1367: case EOB_ACT_END_OF_FILE:
! 1368: {
! 1369: (yy_did_buffer_switch_on_eof) = 0;
! 1370:
! 1371: if ( cfg_yywrap( ) )
! 1372: {
! 1373: /* Note: because we've taken care in
! 1374: * yy_get_next_buffer() to have set up
! 1375: * cfg_yytext, we can now set up
! 1376: * yy_c_buf_p so that if some total
! 1377: * hoser (like flex itself) wants to
! 1378: * call the scanner after we return the
! 1379: * YY_NULL, it'll still work - another
! 1380: * YY_NULL will get returned.
! 1381: */
! 1382: (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
! 1383:
! 1384: yy_act = YY_STATE_EOF(YY_START);
! 1385: goto do_action;
! 1386: }
! 1387:
! 1388: else
! 1389: {
! 1390: if ( ! (yy_did_buffer_switch_on_eof) )
! 1391: YY_NEW_FILE;
! 1392: }
! 1393: break;
! 1394: }
! 1395:
! 1396: case EOB_ACT_CONTINUE_SCAN:
! 1397: (yy_c_buf_p) =
! 1398: (yytext_ptr) + yy_amount_of_matched_text;
! 1399:
! 1400: yy_current_state = yy_get_previous_state( );
! 1401:
! 1402: yy_cp = (yy_c_buf_p);
! 1403: yy_bp = (yytext_ptr) + YY_MORE_ADJ;
! 1404: goto yy_match;
! 1405:
! 1406: case EOB_ACT_LAST_MATCH:
! 1407: (yy_c_buf_p) =
! 1408: &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
! 1409:
! 1410: yy_current_state = yy_get_previous_state( );
! 1411:
! 1412: yy_cp = (yy_c_buf_p);
! 1413: yy_bp = (yytext_ptr) + YY_MORE_ADJ;
! 1414: goto yy_find_action;
! 1415: }
! 1416: break;
! 1417: }
! 1418:
! 1419: default:
! 1420: YY_FATAL_ERROR(
! 1421: "fatal flex scanner internal error--no action found" );
! 1422: } /* end of action switch */
! 1423: } /* end of scanning one token */
! 1424: } /* end of cfg_yylex */
! 1425:
! 1426: /* yy_get_next_buffer - try to read in a new buffer
! 1427: *
! 1428: * Returns a code representing an action:
! 1429: * EOB_ACT_LAST_MATCH -
! 1430: * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
! 1431: * EOB_ACT_END_OF_FILE - end of file
! 1432: */
! 1433: static int yy_get_next_buffer (void)
! 1434: {
! 1435: register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
! 1436: register char *source = (yytext_ptr);
! 1437: register int number_to_move, i;
! 1438: int ret_val;
! 1439:
! 1440: if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
! 1441: YY_FATAL_ERROR(
! 1442: "fatal flex scanner internal error--end of buffer missed" );
! 1443:
! 1444: if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
! 1445: { /* Don't try to fill the buffer, so this is an EOF. */
! 1446: if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
! 1447: {
! 1448: /* We matched a single character, the EOB, so
! 1449: * treat this as a final EOF.
! 1450: */
! 1451: return EOB_ACT_END_OF_FILE;
! 1452: }
! 1453:
! 1454: else
! 1455: {
! 1456: /* We matched some text prior to the EOB, first
! 1457: * process it.
! 1458: */
! 1459: return EOB_ACT_LAST_MATCH;
! 1460: }
! 1461: }
! 1462:
! 1463: /* Try to read more data. */
! 1464:
! 1465: /* First move last chars to start of buffer. */
! 1466: number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
! 1467:
! 1468: for ( i = 0; i < number_to_move; ++i )
! 1469: *(dest++) = *(source++);
! 1470:
! 1471: if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
! 1472: /* don't do the read, it's not guaranteed to return an EOF,
! 1473: * just force an EOF
! 1474: */
! 1475: YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
! 1476:
! 1477: else
! 1478: {
! 1479: int num_to_read =
! 1480: YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
! 1481:
! 1482: while ( num_to_read <= 0 )
! 1483: { /* Not enough room in the buffer - grow it. */
! 1484:
! 1485: /* just a shorter name for the current buffer */
! 1486: YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
! 1487:
! 1488: int yy_c_buf_p_offset =
! 1489: (int) ((yy_c_buf_p) - b->yy_ch_buf);
! 1490:
! 1491: if ( b->yy_is_our_buffer )
! 1492: {
! 1493: int new_size = b->yy_buf_size * 2;
! 1494:
! 1495: if ( new_size <= 0 )
! 1496: b->yy_buf_size += b->yy_buf_size / 8;
! 1497: else
! 1498: b->yy_buf_size *= 2;
! 1499:
! 1500: b->yy_ch_buf = (char *)
! 1501: /* Include room in for 2 EOB chars. */
! 1502: cfg_yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
! 1503: }
! 1504: else
! 1505: /* Can't grow it, we don't own it. */
! 1506: b->yy_ch_buf = 0;
! 1507:
! 1508: if ( ! b->yy_ch_buf )
! 1509: YY_FATAL_ERROR(
! 1510: "fatal error - scanner input buffer overflow" );
! 1511:
! 1512: (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
! 1513:
! 1514: num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
! 1515: number_to_move - 1;
! 1516:
! 1517: }
! 1518:
! 1519: if ( num_to_read > YY_READ_BUF_SIZE )
! 1520: num_to_read = YY_READ_BUF_SIZE;
! 1521:
! 1522: /* Read in more data. */
! 1523: YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
! 1524: (yy_n_chars), (size_t) num_to_read );
! 1525:
! 1526: YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
! 1527: }
! 1528:
! 1529: if ( (yy_n_chars) == 0 )
! 1530: {
! 1531: if ( number_to_move == YY_MORE_ADJ )
! 1532: {
! 1533: ret_val = EOB_ACT_END_OF_FILE;
! 1534: cfg_yyrestart(cfg_yyin );
! 1535: }
! 1536:
! 1537: else
! 1538: {
! 1539: ret_val = EOB_ACT_LAST_MATCH;
! 1540: YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
! 1541: YY_BUFFER_EOF_PENDING;
! 1542: }
! 1543: }
! 1544:
! 1545: else
! 1546: ret_val = EOB_ACT_CONTINUE_SCAN;
! 1547:
! 1548: if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
! 1549: /* Extend the array by 50%, plus the number we really need. */
! 1550: yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
! 1551: YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) cfg_yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
! 1552: if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
! 1553: YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
! 1554: }
! 1555:
! 1556: (yy_n_chars) += number_to_move;
! 1557: YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
! 1558: YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
! 1559:
! 1560: (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
! 1561:
! 1562: return ret_val;
! 1563: }
! 1564:
! 1565: /* yy_get_previous_state - get the state just before the EOB char was reached */
! 1566:
! 1567: static yy_state_type yy_get_previous_state (void)
! 1568: {
! 1569: register yy_state_type yy_current_state;
! 1570: register char *yy_cp;
! 1571:
! 1572: yy_current_state = (yy_start);
! 1573:
! 1574: for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
! 1575: {
! 1576: register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
! 1577: if ( yy_accept[yy_current_state] )
! 1578: {
! 1579: (yy_last_accepting_state) = yy_current_state;
! 1580: (yy_last_accepting_cpos) = yy_cp;
! 1581: }
! 1582: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
! 1583: {
! 1584: yy_current_state = (int) yy_def[yy_current_state];
! 1585: if ( yy_current_state >= 85 )
! 1586: yy_c = yy_meta[(unsigned int) yy_c];
! 1587: }
! 1588: yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
! 1589: }
! 1590:
! 1591: return yy_current_state;
! 1592: }
! 1593:
! 1594: /* yy_try_NUL_trans - try to make a transition on the NUL character
! 1595: *
! 1596: * synopsis
! 1597: * next_state = yy_try_NUL_trans( current_state );
! 1598: */
! 1599: static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
! 1600: {
! 1601: register int yy_is_jam;
! 1602: register char *yy_cp = (yy_c_buf_p);
! 1603:
! 1604: register YY_CHAR yy_c = 1;
! 1605: if ( yy_accept[yy_current_state] )
! 1606: {
! 1607: (yy_last_accepting_state) = yy_current_state;
! 1608: (yy_last_accepting_cpos) = yy_cp;
! 1609: }
! 1610: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
! 1611: {
! 1612: yy_current_state = (int) yy_def[yy_current_state];
! 1613: if ( yy_current_state >= 85 )
! 1614: yy_c = yy_meta[(unsigned int) yy_c];
! 1615: }
! 1616: yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
! 1617: yy_is_jam = (yy_current_state == 84);
! 1618:
! 1619: return yy_is_jam ? 0 : yy_current_state;
! 1620: }
! 1621:
! 1622: static void yyunput (int c, register char * yy_bp )
! 1623: {
! 1624: register char *yy_cp;
! 1625:
! 1626: yy_cp = (yy_c_buf_p);
! 1627:
! 1628: /* undo effects of setting up cfg_yytext */
! 1629: *yy_cp = (yy_hold_char);
! 1630:
! 1631: if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
! 1632: { /* need to shift things up to make room */
! 1633: /* +2 for EOB chars. */
! 1634: register int number_to_move = (yy_n_chars) + 2;
! 1635: register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
! 1636: YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
! 1637: register char *source =
! 1638: &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
! 1639:
! 1640: while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
! 1641: *--dest = *--source;
! 1642:
! 1643: yy_cp += (int) (dest - source);
! 1644: yy_bp += (int) (dest - source);
! 1645: YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
! 1646: (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
! 1647:
! 1648: if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
! 1649: YY_FATAL_ERROR( "flex scanner push-back overflow" );
! 1650: }
! 1651:
! 1652: *--yy_cp = (char) c;
! 1653:
! 1654: (yytext_ptr) = yy_bp;
! 1655: (yy_hold_char) = *yy_cp;
! 1656: (yy_c_buf_p) = yy_cp;
! 1657: }
! 1658:
! 1659: #ifndef YY_NO_INPUT
! 1660: #ifdef __cplusplus
! 1661: static int yyinput (void)
! 1662: #else
! 1663: static int input (void)
! 1664: #endif
! 1665:
! 1666: {
! 1667: int c;
! 1668:
! 1669: *(yy_c_buf_p) = (yy_hold_char);
! 1670:
! 1671: if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
! 1672: {
! 1673: /* yy_c_buf_p now points to the character we want to return.
! 1674: * If this occurs *before* the EOB characters, then it's a
! 1675: * valid NUL; if not, then we've hit the end of the buffer.
! 1676: */
! 1677: if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
! 1678: /* This was really a NUL. */
! 1679: *(yy_c_buf_p) = '\0';
! 1680:
! 1681: else
! 1682: { /* need more input */
! 1683: int offset = (yy_c_buf_p) - (yytext_ptr);
! 1684: ++(yy_c_buf_p);
! 1685:
! 1686: switch ( yy_get_next_buffer( ) )
! 1687: {
! 1688: case EOB_ACT_LAST_MATCH:
! 1689: /* This happens because yy_g_n_b()
! 1690: * sees that we've accumulated a
! 1691: * token and flags that we need to
! 1692: * try matching the token before
! 1693: * proceeding. But for input(),
! 1694: * there's no matching to consider.
! 1695: * So convert the EOB_ACT_LAST_MATCH
! 1696: * to EOB_ACT_END_OF_FILE.
! 1697: */
! 1698:
! 1699: /* Reset buffer status. */
! 1700: cfg_yyrestart(cfg_yyin );
! 1701:
! 1702: /*FALLTHROUGH*/
! 1703:
! 1704: case EOB_ACT_END_OF_FILE:
! 1705: {
! 1706: if ( cfg_yywrap( ) )
! 1707: return EOF;
! 1708:
! 1709: if ( ! (yy_did_buffer_switch_on_eof) )
! 1710: YY_NEW_FILE;
! 1711: #ifdef __cplusplus
! 1712: return yyinput();
! 1713: #else
! 1714: return input();
! 1715: #endif
! 1716: }
! 1717:
! 1718: case EOB_ACT_CONTINUE_SCAN:
! 1719: (yy_c_buf_p) = (yytext_ptr) + offset;
! 1720: break;
! 1721: }
! 1722: }
! 1723: }
! 1724:
! 1725: c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
! 1726: *(yy_c_buf_p) = '\0'; /* preserve cfg_yytext */
! 1727: (yy_hold_char) = *++(yy_c_buf_p);
! 1728:
! 1729: return c;
! 1730: }
! 1731: #endif /* ifndef YY_NO_INPUT */
! 1732:
! 1733: /** Immediately switch to a different input stream.
! 1734: * @param input_file A readable stream.
! 1735: *
! 1736: * @note This function does not reset the start condition to @c INITIAL .
! 1737: */
! 1738: void cfg_yyrestart (FILE * input_file )
! 1739: {
! 1740:
! 1741: if ( ! YY_CURRENT_BUFFER ){
! 1742: cfg_yyensure_buffer_stack ();
! 1743: YY_CURRENT_BUFFER_LVALUE =
! 1744: cfg_yy_create_buffer(cfg_yyin,YY_BUF_SIZE );
! 1745: }
! 1746:
! 1747: cfg_yy_init_buffer(YY_CURRENT_BUFFER,input_file );
! 1748: cfg_yy_load_buffer_state( );
! 1749: }
! 1750:
! 1751: /** Switch to a different input buffer.
! 1752: * @param new_buffer The new input buffer.
! 1753: *
! 1754: */
! 1755: void cfg_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
! 1756: {
! 1757:
! 1758: /* TODO. We should be able to replace this entire function body
! 1759: * with
! 1760: * cfg_yypop_buffer_state();
! 1761: * cfg_yypush_buffer_state(new_buffer);
! 1762: */
! 1763: cfg_yyensure_buffer_stack ();
! 1764: if ( YY_CURRENT_BUFFER == new_buffer )
! 1765: return;
! 1766:
! 1767: if ( YY_CURRENT_BUFFER )
! 1768: {
! 1769: /* Flush out information for old buffer. */
! 1770: *(yy_c_buf_p) = (yy_hold_char);
! 1771: YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
! 1772: YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
! 1773: }
! 1774:
! 1775: YY_CURRENT_BUFFER_LVALUE = new_buffer;
! 1776: cfg_yy_load_buffer_state( );
! 1777:
! 1778: /* We don't actually know whether we did this switch during
! 1779: * EOF (cfg_yywrap()) processing, but the only time this flag
! 1780: * is looked at is after cfg_yywrap() is called, so it's safe
! 1781: * to go ahead and always set it.
! 1782: */
! 1783: (yy_did_buffer_switch_on_eof) = 1;
! 1784: }
! 1785:
! 1786: static void cfg_yy_load_buffer_state (void)
! 1787: {
! 1788: (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
! 1789: (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
! 1790: cfg_yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
! 1791: (yy_hold_char) = *(yy_c_buf_p);
! 1792: }
! 1793:
! 1794: /** Allocate and initialize an input buffer state.
! 1795: * @param file A readable stream.
! 1796: * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
! 1797: *
! 1798: * @return the allocated buffer state.
! 1799: */
! 1800: YY_BUFFER_STATE cfg_yy_create_buffer (FILE * file, int size )
! 1801: {
! 1802: YY_BUFFER_STATE b;
! 1803:
! 1804: b = (YY_BUFFER_STATE) cfg_yyalloc(sizeof( struct yy_buffer_state ) );
! 1805: if ( ! b )
! 1806: YY_FATAL_ERROR( "out of dynamic memory in cfg_yy_create_buffer()" );
! 1807:
! 1808: b->yy_buf_size = size;
! 1809:
! 1810: /* yy_ch_buf has to be 2 characters longer than the size given because
! 1811: * we need to put in 2 end-of-buffer characters.
! 1812: */
! 1813: b->yy_ch_buf = (char *) cfg_yyalloc(b->yy_buf_size + 2 );
! 1814: if ( ! b->yy_ch_buf )
! 1815: YY_FATAL_ERROR( "out of dynamic memory in cfg_yy_create_buffer()" );
! 1816:
! 1817: b->yy_is_our_buffer = 1;
! 1818:
! 1819: cfg_yy_init_buffer(b,file );
! 1820:
! 1821: return b;
! 1822: }
! 1823:
! 1824: /** Destroy the buffer.
! 1825: * @param b a buffer created with cfg_yy_create_buffer()
! 1826: *
! 1827: */
! 1828: void cfg_yy_delete_buffer (YY_BUFFER_STATE b )
! 1829: {
! 1830:
! 1831: if ( ! b )
! 1832: return;
! 1833:
! 1834: if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
! 1835: YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
! 1836:
! 1837: if ( b->yy_is_our_buffer )
! 1838: cfg_yyfree((void *) b->yy_ch_buf );
! 1839:
! 1840: cfg_yyfree((void *) b );
! 1841: }
! 1842:
! 1843: #ifndef _UNISTD_H /* assume unistd.h has isatty() for us */
! 1844: #ifdef __cplusplus
! 1845: extern "C" {
! 1846: #endif
! 1847: #ifdef __THROW /* this is a gnuism */
! 1848: extern int isatty (int ) __THROW;
! 1849: #else
! 1850: extern int isatty (int );
! 1851: #endif
! 1852: #ifdef __cplusplus
! 1853: }
! 1854: #endif
! 1855: #endif
! 1856:
! 1857: /* Initializes or reinitializes a buffer.
! 1858: * This function is sometimes called more than once on the same buffer,
! 1859: * such as during a cfg_yyrestart() or at EOF.
! 1860: */
! 1861: static void cfg_yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
! 1862:
! 1863: {
! 1864: int oerrno = errno;
! 1865:
! 1866: cfg_yy_flush_buffer(b );
! 1867:
! 1868: b->yy_input_file = file;
! 1869: b->yy_fill_buffer = 1;
! 1870:
! 1871: /* If b is the current buffer, then cfg_yy_init_buffer was _probably_
! 1872: * called from cfg_yyrestart() or through yy_get_next_buffer.
! 1873: * In that case, we don't want to reset the lineno or column.
! 1874: */
! 1875: if (b != YY_CURRENT_BUFFER){
! 1876: b->yy_bs_lineno = 1;
! 1877: b->yy_bs_column = 0;
! 1878: }
! 1879:
! 1880: b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
! 1881:
! 1882: errno = oerrno;
! 1883: }
! 1884:
! 1885: /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
! 1886: * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
! 1887: *
! 1888: */
! 1889: void cfg_yy_flush_buffer (YY_BUFFER_STATE b )
! 1890: {
! 1891: if ( ! b )
! 1892: return;
! 1893:
! 1894: b->yy_n_chars = 0;
! 1895:
! 1896: /* We always need two end-of-buffer characters. The first causes
! 1897: * a transition to the end-of-buffer state. The second causes
! 1898: * a jam in that state.
! 1899: */
! 1900: b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
! 1901: b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
! 1902:
! 1903: b->yy_buf_pos = &b->yy_ch_buf[0];
! 1904:
! 1905: b->yy_at_bol = 1;
! 1906: b->yy_buffer_status = YY_BUFFER_NEW;
! 1907:
! 1908: if ( b == YY_CURRENT_BUFFER )
! 1909: cfg_yy_load_buffer_state( );
! 1910: }
! 1911:
! 1912: /** Pushes the new state onto the stack. The new state becomes
! 1913: * the current state. This function will allocate the stack
! 1914: * if necessary.
! 1915: * @param new_buffer The new state.
! 1916: *
! 1917: */
! 1918: void cfg_yypush_buffer_state (YY_BUFFER_STATE new_buffer )
! 1919: {
! 1920: if (new_buffer == NULL)
! 1921: return;
! 1922:
! 1923: cfg_yyensure_buffer_stack();
! 1924:
! 1925: /* This block is copied from cfg_yy_switch_to_buffer. */
! 1926: if ( YY_CURRENT_BUFFER )
! 1927: {
! 1928: /* Flush out information for old buffer. */
! 1929: *(yy_c_buf_p) = (yy_hold_char);
! 1930: YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
! 1931: YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
! 1932: }
! 1933:
! 1934: /* Only push if top exists. Otherwise, replace top. */
! 1935: if (YY_CURRENT_BUFFER)
! 1936: (yy_buffer_stack_top)++;
! 1937: YY_CURRENT_BUFFER_LVALUE = new_buffer;
! 1938:
! 1939: /* copied from cfg_yy_switch_to_buffer. */
! 1940: cfg_yy_load_buffer_state( );
! 1941: (yy_did_buffer_switch_on_eof) = 1;
! 1942: }
! 1943:
! 1944: /** Removes and deletes the top of the stack, if present.
! 1945: * The next element becomes the new top.
! 1946: *
! 1947: */
! 1948: void cfg_yypop_buffer_state (void)
! 1949: {
! 1950: if (!YY_CURRENT_BUFFER)
! 1951: return;
! 1952:
! 1953: cfg_yy_delete_buffer(YY_CURRENT_BUFFER );
! 1954: YY_CURRENT_BUFFER_LVALUE = NULL;
! 1955: if ((yy_buffer_stack_top) > 0)
! 1956: --(yy_buffer_stack_top);
! 1957:
! 1958: if (YY_CURRENT_BUFFER) {
! 1959: cfg_yy_load_buffer_state( );
! 1960: (yy_did_buffer_switch_on_eof) = 1;
! 1961: }
! 1962: }
! 1963:
! 1964: /* Allocates the stack if it does not exist.
! 1965: * Guarantees space for at least one push.
! 1966: */
! 1967: static void cfg_yyensure_buffer_stack (void)
! 1968: {
! 1969: int num_to_alloc;
! 1970:
! 1971: if (!(yy_buffer_stack)) {
! 1972:
! 1973: /* First allocation is just for 2 elements, since we don't know if this
! 1974: * scanner will even need a stack. We use 2 instead of 1 to avoid an
! 1975: * immediate realloc on the next call.
! 1976: */
! 1977: num_to_alloc = 1;
! 1978: (yy_buffer_stack) = (struct yy_buffer_state**)cfg_yyalloc
! 1979: (num_to_alloc * sizeof(struct yy_buffer_state*)
! 1980: );
! 1981: if ( ! (yy_buffer_stack) )
! 1982: YY_FATAL_ERROR( "out of dynamic memory in cfg_yyensure_buffer_stack()" );
! 1983:
! 1984: memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
! 1985:
! 1986: (yy_buffer_stack_max) = num_to_alloc;
! 1987: (yy_buffer_stack_top) = 0;
! 1988: return;
! 1989: }
! 1990:
! 1991: if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
! 1992:
! 1993: /* Increase the buffer to prepare for a possible push. */
! 1994: int grow_size = 8 /* arbitrary grow size */;
! 1995:
! 1996: num_to_alloc = (yy_buffer_stack_max) + grow_size;
! 1997: (yy_buffer_stack) = (struct yy_buffer_state**)cfg_yyrealloc
! 1998: ((yy_buffer_stack),
! 1999: num_to_alloc * sizeof(struct yy_buffer_state*)
! 2000: );
! 2001: if ( ! (yy_buffer_stack) )
! 2002: YY_FATAL_ERROR( "out of dynamic memory in cfg_yyensure_buffer_stack()" );
! 2003:
! 2004: /* zero only the new slots.*/
! 2005: memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
! 2006: (yy_buffer_stack_max) = num_to_alloc;
! 2007: }
! 2008: }
! 2009:
! 2010: /** Setup the input buffer state to scan directly from a user-specified character buffer.
! 2011: * @param base the character buffer
! 2012: * @param size the size in bytes of the character buffer
! 2013: *
! 2014: * @return the newly allocated buffer state object.
! 2015: */
! 2016: YY_BUFFER_STATE cfg_yy_scan_buffer (char * base, yy_size_t size )
! 2017: {
! 2018: YY_BUFFER_STATE b;
! 2019:
! 2020: if ( size < 2 ||
! 2021: base[size-2] != YY_END_OF_BUFFER_CHAR ||
! 2022: base[size-1] != YY_END_OF_BUFFER_CHAR )
! 2023: /* They forgot to leave room for the EOB's. */
! 2024: return 0;
! 2025:
! 2026: b = (YY_BUFFER_STATE) cfg_yyalloc(sizeof( struct yy_buffer_state ) );
! 2027: if ( ! b )
! 2028: YY_FATAL_ERROR( "out of dynamic memory in cfg_yy_scan_buffer()" );
! 2029:
! 2030: b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
! 2031: b->yy_buf_pos = b->yy_ch_buf = base;
! 2032: b->yy_is_our_buffer = 0;
! 2033: b->yy_input_file = 0;
! 2034: b->yy_n_chars = b->yy_buf_size;
! 2035: b->yy_is_interactive = 0;
! 2036: b->yy_at_bol = 1;
! 2037: b->yy_fill_buffer = 0;
! 2038: b->yy_buffer_status = YY_BUFFER_NEW;
! 2039:
! 2040: cfg_yy_switch_to_buffer(b );
! 2041:
! 2042: return b;
! 2043: }
! 2044:
! 2045: /** Setup the input buffer state to scan a string. The next call to cfg_yylex() will
! 2046: * scan from a @e copy of @a str.
! 2047: * @param yystr a NUL-terminated string to scan
! 2048: *
! 2049: * @return the newly allocated buffer state object.
! 2050: * @note If you want to scan bytes that may contain NUL values, then use
! 2051: * cfg_yy_scan_bytes() instead.
! 2052: */
! 2053: YY_BUFFER_STATE cfg_yy_scan_string (yyconst char * yystr )
! 2054: {
! 2055:
! 2056: return cfg_yy_scan_bytes(yystr,strlen(yystr) );
! 2057: }
! 2058:
! 2059: /** Setup the input buffer state to scan the given bytes. The next call to cfg_yylex() will
! 2060: * scan from a @e copy of @a bytes.
! 2061: * @param bytes the byte buffer to scan
! 2062: * @param len the number of bytes in the buffer pointed to by @a bytes.
! 2063: *
! 2064: * @return the newly allocated buffer state object.
! 2065: */
! 2066: YY_BUFFER_STATE cfg_yy_scan_bytes (yyconst char * yybytes, int _yybytes_len )
! 2067: {
! 2068: YY_BUFFER_STATE b;
! 2069: char *buf;
! 2070: yy_size_t n;
! 2071: int i;
! 2072:
! 2073: /* Get memory for full buffer, including space for trailing EOB's. */
! 2074: n = _yybytes_len + 2;
! 2075: buf = (char *) cfg_yyalloc(n );
! 2076: if ( ! buf )
! 2077: YY_FATAL_ERROR( "out of dynamic memory in cfg_yy_scan_bytes()" );
! 2078:
! 2079: for ( i = 0; i < _yybytes_len; ++i )
! 2080: buf[i] = yybytes[i];
! 2081:
! 2082: buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
! 2083:
! 2084: b = cfg_yy_scan_buffer(buf,n );
! 2085: if ( ! b )
! 2086: YY_FATAL_ERROR( "bad buffer in cfg_yy_scan_bytes()" );
! 2087:
! 2088: /* It's okay to grow etc. this buffer, and we should throw it
! 2089: * away when we're done.
! 2090: */
! 2091: b->yy_is_our_buffer = 1;
! 2092:
! 2093: return b;
! 2094: }
! 2095:
! 2096: #ifndef YY_EXIT_FAILURE
! 2097: #define YY_EXIT_FAILURE 2
! 2098: #endif
! 2099:
! 2100: static void yy_fatal_error (yyconst char* msg )
! 2101: {
! 2102: (void) fprintf( stderr, "%s\n", msg );
! 2103: exit( YY_EXIT_FAILURE );
! 2104: }
! 2105:
! 2106: /* Redefine yyless() so it works in section 3 code. */
! 2107:
! 2108: #undef yyless
! 2109: #define yyless(n) \
! 2110: do \
! 2111: { \
! 2112: /* Undo effects of setting up cfg_yytext. */ \
! 2113: int yyless_macro_arg = (n); \
! 2114: YY_LESS_LINENO(yyless_macro_arg);\
! 2115: cfg_yytext[cfg_yyleng] = (yy_hold_char); \
! 2116: (yy_c_buf_p) = cfg_yytext + yyless_macro_arg; \
! 2117: (yy_hold_char) = *(yy_c_buf_p); \
! 2118: *(yy_c_buf_p) = '\0'; \
! 2119: cfg_yyleng = yyless_macro_arg; \
! 2120: } \
! 2121: while ( 0 )
! 2122:
! 2123: /* Accessor methods (get/set functions) to struct members. */
! 2124:
! 2125: /** Get the current line number.
! 2126: *
! 2127: */
! 2128: int cfg_yyget_lineno (void)
! 2129: {
! 2130:
! 2131: return cfg_yylineno;
! 2132: }
! 2133:
! 2134: /** Get the input stream.
! 2135: *
! 2136: */
! 2137: FILE *cfg_yyget_in (void)
! 2138: {
! 2139: return cfg_yyin;
! 2140: }
! 2141:
! 2142: /** Get the output stream.
! 2143: *
! 2144: */
! 2145: FILE *cfg_yyget_out (void)
! 2146: {
! 2147: return cfg_yyout;
! 2148: }
! 2149:
! 2150: /** Get the length of the current token.
! 2151: *
! 2152: */
! 2153: int cfg_yyget_leng (void)
! 2154: {
! 2155: return cfg_yyleng;
! 2156: }
! 2157:
! 2158: /** Get the current token.
! 2159: *
! 2160: */
! 2161:
! 2162: char *cfg_yyget_text (void)
! 2163: {
! 2164: return cfg_yytext;
! 2165: }
! 2166:
! 2167: /** Set the current line number.
! 2168: * @param line_number
! 2169: *
! 2170: */
! 2171: void cfg_yyset_lineno (int line_number )
! 2172: {
! 2173:
! 2174: cfg_yylineno = line_number;
! 2175: }
! 2176:
! 2177: /** Set the input stream. This does not discard the current
! 2178: * input buffer.
! 2179: * @param in_str A readable stream.
! 2180: *
! 2181: * @see cfg_yy_switch_to_buffer
! 2182: */
! 2183: void cfg_yyset_in (FILE * in_str )
! 2184: {
! 2185: cfg_yyin = in_str ;
! 2186: }
! 2187:
! 2188: void cfg_yyset_out (FILE * out_str )
! 2189: {
! 2190: cfg_yyout = out_str ;
! 2191: }
! 2192:
! 2193: int cfg_yyget_debug (void)
! 2194: {
! 2195: return cfg_yy_flex_debug;
! 2196: }
! 2197:
! 2198: void cfg_yyset_debug (int bdebug )
! 2199: {
! 2200: cfg_yy_flex_debug = bdebug ;
! 2201: }
! 2202:
! 2203: static int yy_init_globals (void)
! 2204: {
! 2205: /* Initialization is the same as for the non-reentrant scanner.
! 2206: * This function is called from cfg_yylex_destroy(), so don't allocate here.
! 2207: */
! 2208:
! 2209: (yy_buffer_stack) = 0;
! 2210: (yy_buffer_stack_top) = 0;
! 2211: (yy_buffer_stack_max) = 0;
! 2212: (yy_c_buf_p) = (char *) 0;
! 2213: (yy_init) = 0;
! 2214: (yy_start) = 0;
! 2215:
! 2216: /* Defined in main.c */
! 2217: #ifdef YY_STDINIT
! 2218: cfg_yyin = stdin;
! 2219: cfg_yyout = stdout;
! 2220: #else
! 2221: cfg_yyin = (FILE *) 0;
! 2222: cfg_yyout = (FILE *) 0;
! 2223: #endif
! 2224:
! 2225: /* For future reference: Set errno on error, since we are called by
! 2226: * cfg_yylex_init()
! 2227: */
! 2228: return 0;
! 2229: }
! 2230:
! 2231: /* cfg_yylex_destroy is for both reentrant and non-reentrant scanners. */
! 2232: int cfg_yylex_destroy (void)
! 2233: {
! 2234:
! 2235: /* Pop the buffer stack, destroying each element. */
! 2236: while(YY_CURRENT_BUFFER){
! 2237: cfg_yy_delete_buffer(YY_CURRENT_BUFFER );
! 2238: YY_CURRENT_BUFFER_LVALUE = NULL;
! 2239: cfg_yypop_buffer_state();
! 2240: }
! 2241:
! 2242: /* Destroy the stack itself. */
! 2243: cfg_yyfree((yy_buffer_stack) );
! 2244: (yy_buffer_stack) = NULL;
! 2245:
! 2246: /* Reset the globals. This is important in a non-reentrant scanner so the next time
! 2247: * cfg_yylex() is called, initialization will occur. */
! 2248: yy_init_globals( );
! 2249:
! 2250: return 0;
! 2251: }
! 2252:
! 2253: /*
! 2254: * Internal utility routines.
! 2255: */
! 2256:
! 2257: #ifndef yytext_ptr
! 2258: static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
! 2259: {
! 2260: register int i;
! 2261: for ( i = 0; i < n; ++i )
! 2262: s1[i] = s2[i];
! 2263: }
! 2264: #endif
! 2265:
! 2266: #ifdef YY_NEED_STRLEN
! 2267: static int yy_flex_strlen (yyconst char * s )
! 2268: {
! 2269: register int n;
! 2270: for ( n = 0; s[n]; ++n )
! 2271: ;
! 2272:
! 2273: return n;
! 2274: }
! 2275: #endif
! 2276:
! 2277: void *cfg_yyalloc (yy_size_t size )
! 2278: {
! 2279: return (void *) malloc( size );
! 2280: }
! 2281:
! 2282: void *cfg_yyrealloc (void * ptr, yy_size_t size )
! 2283: {
! 2284: /* The cast to (char *) in the following accommodates both
! 2285: * implementations that use char* generic pointers, and those
! 2286: * that use void* generic pointers. It works with the latter
! 2287: * because both ANSI C and C++ allow castless assignment from
! 2288: * any pointer type to void*, and deal with argument conversions
! 2289: * as though doing an assignment.
! 2290: */
! 2291: return (void *) realloc( (char *) ptr, size );
! 2292: }
! 2293:
! 2294: void cfg_yyfree (void * ptr )
! 2295: {
! 2296: free( (char *) ptr ); /* see cfg_yyrealloc() for (char *) cast */
! 2297: }
! 2298:
! 2299: #define YYTABLES_NAME "yytables"
! 2300:
! 2301: #line 277 "lexer.l"
! 2302:
! 2303:
! 2304:
! 2305: void cfg_dummy_function(void)
! 2306: {
! 2307: /* please compiler :-)
! 2308: * otherwise "defined but not used" warning
! 2309: */
! 2310: yyunput(0, 0);
! 2311: }
! 2312:
! 2313: int cfg_lexer_include(cfg_t *cfg, const char *filename)
! 2314: {
! 2315: char *xfilename;
! 2316:
! 2317: if(cfg_include_stack_ptr >= MAX_INCLUDE_DEPTH) {
! 2318: cfg_error(cfg, _("includes nested too deeply"));
! 2319: return 1;
! 2320: }
! 2321:
! 2322: cfg_include_stack[cfg_include_stack_ptr].state = YY_CURRENT_BUFFER;
! 2323: cfg_include_stack[cfg_include_stack_ptr].filename = cfg->filename;
! 2324: cfg_include_stack[cfg_include_stack_ptr].line = cfg->line;
! 2325: cfg_include_stack_ptr++;
! 2326:
! 2327: xfilename = cfg_tilde_expand(filename);
! 2328:
! 2329: cfg_yyin = fopen(xfilename, "r");
! 2330:
! 2331: if(!cfg_yyin) {
! 2332: cfg_error(cfg, "%s: %s", xfilename, strerror(errno));
! 2333: free(xfilename);
! 2334: return 1;
! 2335: }
! 2336:
! 2337: cfg->filename = xfilename;
! 2338: cfg->line = 1;
! 2339:
! 2340: cfg_yy_switch_to_buffer(cfg_yy_create_buffer(cfg_yyin,YY_BUF_SIZE));
! 2341: return 0;
! 2342: }
! 2343:
! 2344: /* write a character to the quoted string buffer, and reallocate as
! 2345: * necessary
! 2346: */
! 2347: static void qputc(char ch)
! 2348: {
! 2349: if(qstring_index >= qstring_len) {
! 2350: qstring_len += CFG_QSTRING_BUFSIZ;
! 2351: cfg_qstring = (char *)realloc(cfg_qstring, qstring_len);
! 2352: assert(cfg_qstring);
! 2353: memset(cfg_qstring + qstring_index, 0, CFG_QSTRING_BUFSIZ);
! 2354: }
! 2355: cfg_qstring[qstring_index++] = ch;
! 2356: }
! 2357:
! 2358: void cfg_scan_string_begin(const char *buf)
! 2359: {
! 2360: pre_string_scan_state = YY_CURRENT_BUFFER;
! 2361:
! 2362: /* cfg_yy_scan_string does a cfg_yy_switch_to_buffer call for us
! 2363: */
! 2364: string_scan_state = cfg_yy_scan_string(buf);
! 2365: }
! 2366:
! 2367: void cfg_scan_string_end(void)
! 2368: {
! 2369: /* restore to previous state
! 2370: */
! 2371: cfg_yy_delete_buffer(string_scan_state);
! 2372: if (pre_string_scan_state)
! 2373: cfg_yy_switch_to_buffer(pre_string_scan_state);
! 2374: free(cfg_qstring);
! 2375: cfg_qstring = 0;
! 2376: qstring_index = qstring_len = 0;
! 2377: string_scan_state = 0;
! 2378: }
! 2379:
! 2380: static YY_BUFFER_STATE pre_fp_scan_state;
! 2381: static YY_BUFFER_STATE fp_scan_state;
! 2382:
! 2383: void cfg_scan_fp_begin(FILE *fp)
! 2384: {
! 2385: pre_fp_scan_state = YY_CURRENT_BUFFER;
! 2386: fp_scan_state = cfg_yy_create_buffer(fp,YY_BUF_SIZE);
! 2387: cfg_yy_switch_to_buffer(fp_scan_state);
! 2388: }
! 2389:
! 2390: void cfg_scan_fp_end(void)
! 2391: {
! 2392: /* restore to previous state
! 2393: */
! 2394: cfg_yy_delete_buffer(fp_scan_state);
! 2395: if(pre_fp_scan_state)
! 2396: cfg_yy_switch_to_buffer(pre_fp_scan_state);
! 2397: free(cfg_qstring);
! 2398: cfg_qstring = 0;
! 2399: qstring_index = qstring_len = 0;
! 2400: }
! 2401:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>