File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / confuse / src / lexer.c
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Mar 17 00:49:17 2021 UTC (3 years, 3 months ago) by misho
Branches: confuse, MAIN
CVS tags: v3_3, HEAD
confuse 3.3

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>