Annotation of embedaddon/sudo/plugins/sudoers/toke.c, revision 1.1
1.1 ! misho 1: #include <config.h>
! 2: /* $OpenBSD: flex.skl,v 1.11 2010/08/04 18:24:50 millert Exp $ */
! 3:
! 4: /* A lexical scanner generated by flex */
! 5:
! 6: /* Scanner skeleton version:
! 7: * $Header: /cvs/src/usr.bin/lex/flex.skl,v 1.11 2010/08/04 18:24:50 millert Exp $
! 8: */
! 9:
! 10: #define FLEX_SCANNER
! 11: #define YY_FLEX_MAJOR_VERSION 2
! 12: #define YY_FLEX_MINOR_VERSION 5
! 13:
! 14: #include <stdio.h>
! 15: #include <errno.h>
! 16:
! 17:
! 18: /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
! 19: #ifdef c_plusplus
! 20: #ifndef __cplusplus
! 21: #define __cplusplus
! 22: #endif
! 23: #endif
! 24:
! 25:
! 26: #ifdef __cplusplus
! 27:
! 28: #include <stdlib.h>
! 29: #include <unistd.h>
! 30:
! 31: /* Use prototypes in function declarations. */
! 32: #define YY_USE_PROTOS
! 33:
! 34: /* The "const" storage-class-modifier is valid. */
! 35: #define YY_USE_CONST
! 36:
! 37: #else /* ! __cplusplus */
! 38:
! 39: #ifdef __STDC__
! 40:
! 41: #define YY_USE_PROTOS
! 42: #define YY_USE_CONST
! 43:
! 44: #endif /* __STDC__ */
! 45: #endif /* ! __cplusplus */
! 46:
! 47: #ifdef __TURBOC__
! 48: #pragma warn -rch
! 49: #pragma warn -use
! 50: #include <io.h>
! 51: #include <stdlib.h>
! 52: #define YY_USE_CONST
! 53: #define YY_USE_PROTOS
! 54: #endif
! 55:
! 56: #ifdef YY_USE_CONST
! 57: #define yyconst const
! 58: #else
! 59: #define yyconst
! 60: #endif
! 61:
! 62:
! 63: #ifdef YY_USE_PROTOS
! 64: #define YY_PROTO(proto) proto
! 65: #else
! 66: #define YY_PROTO(proto) ()
! 67: #endif
! 68:
! 69: /* Returned upon end-of-file. */
! 70: #define YY_NULL 0
! 71:
! 72: /* Promotes a possibly negative, possibly signed char to an unsigned
! 73: * integer for use as an array index. If the signed char is negative,
! 74: * we want to instead treat it as an 8-bit unsigned char, hence the
! 75: * double cast.
! 76: */
! 77: #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
! 78:
! 79: /* Enter a start condition. This macro really ought to take a parameter,
! 80: * but we do it the disgusting crufty way forced on us by the ()-less
! 81: * definition of BEGIN.
! 82: */
! 83: #define BEGIN yy_start = 1 + 2 *
! 84:
! 85: /* Translate the current start state into a value that can be later handed
! 86: * to BEGIN to return to the state. The YYSTATE alias is for lex
! 87: * compatibility.
! 88: */
! 89: #define YY_START ((yy_start - 1) / 2)
! 90: #define YYSTATE YY_START
! 91:
! 92: /* Action number for EOF rule of a given start state. */
! 93: #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
! 94:
! 95: /* Special action meaning "start processing a new file". */
! 96: #define YY_NEW_FILE yyrestart( yyin )
! 97:
! 98: #define YY_END_OF_BUFFER_CHAR 0
! 99:
! 100: /* Size of default input buffer. */
! 101: #define YY_BUF_SIZE 16384
! 102:
! 103: typedef struct yy_buffer_state *YY_BUFFER_STATE;
! 104:
! 105: extern int yyleng;
! 106: extern FILE *yyin, *yyout;
! 107:
! 108: #define EOB_ACT_CONTINUE_SCAN 0
! 109: #define EOB_ACT_END_OF_FILE 1
! 110: #define EOB_ACT_LAST_MATCH 2
! 111:
! 112: /* The funky do-while in the following #define is used to turn the definition
! 113: * int a single C statement (which needs a semi-colon terminator). This
! 114: * avoids problems with code like:
! 115: *
! 116: * if ( condition_holds )
! 117: * yyless( 5 );
! 118: * else
! 119: * do_something_else();
! 120: *
! 121: * Prior to using the do-while the compiler would get upset at the
! 122: * "else" because it interpreted the "if" statement as being all
! 123: * done when it reached the ';' after the yyless() call.
! 124: */
! 125:
! 126: /* Return all but the first 'n' matched characters back to the input stream. */
! 127:
! 128: #define yyless(n) \
! 129: do \
! 130: { \
! 131: /* Undo effects of setting up yytext. */ \
! 132: *yy_cp = yy_hold_char; \
! 133: YY_RESTORE_YY_MORE_OFFSET \
! 134: yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
! 135: YY_DO_BEFORE_ACTION; /* set up yytext again */ \
! 136: } \
! 137: while ( 0 )
! 138:
! 139: #define unput(c) yyunput( c, yytext_ptr )
! 140:
! 141: /* The following is because we cannot portably get our hands on size_t
! 142: * (without autoconf's help, which isn't available because we want
! 143: * flex-generated scanners to compile on their own).
! 144: */
! 145: typedef unsigned int yy_size_t;
! 146:
! 147:
! 148: struct yy_buffer_state
! 149: {
! 150: FILE *yy_input_file;
! 151:
! 152: char *yy_ch_buf; /* input buffer */
! 153: char *yy_buf_pos; /* current position in input buffer */
! 154:
! 155: /* Size of input buffer in bytes, not including room for EOB
! 156: * characters.
! 157: */
! 158: yy_size_t yy_buf_size;
! 159:
! 160: /* Number of characters read into yy_ch_buf, not including EOB
! 161: * characters.
! 162: */
! 163: int yy_n_chars;
! 164:
! 165: /* Whether we "own" the buffer - i.e., we know we created it,
! 166: * and can realloc() it to grow it, and should free() it to
! 167: * delete it.
! 168: */
! 169: int yy_is_our_buffer;
! 170:
! 171: /* Whether this is an "interactive" input source; if so, and
! 172: * if we're using stdio for input, then we want to use getc()
! 173: * instead of fread(), to make sure we stop fetching input after
! 174: * each newline.
! 175: */
! 176: int yy_is_interactive;
! 177:
! 178: /* Whether we're considered to be at the beginning of a line.
! 179: * If so, '^' rules will be active on the next match, otherwise
! 180: * not.
! 181: */
! 182: int yy_at_bol;
! 183:
! 184: /* Whether to try to fill the input buffer when we reach the
! 185: * end of it.
! 186: */
! 187: int yy_fill_buffer;
! 188:
! 189: int yy_buffer_status;
! 190: #define YY_BUFFER_NEW 0
! 191: #define YY_BUFFER_NORMAL 1
! 192: /* When an EOF's been seen but there's still some text to process
! 193: * then we mark the buffer as YY_EOF_PENDING, to indicate that we
! 194: * shouldn't try reading from the input source any more. We might
! 195: * still have a bunch of tokens to match, though, because of
! 196: * possible backing-up.
! 197: *
! 198: * When we actually see the EOF, we change the status to "new"
! 199: * (via yyrestart()), so that the user can continue scanning by
! 200: * just pointing yyin at a new input file.
! 201: */
! 202: #define YY_BUFFER_EOF_PENDING 2
! 203: };
! 204:
! 205: static YY_BUFFER_STATE yy_current_buffer = 0;
! 206:
! 207: /* We provide macros for accessing buffer states in case in the
! 208: * future we want to put the buffer states in a more general
! 209: * "scanner state".
! 210: */
! 211: #define YY_CURRENT_BUFFER yy_current_buffer
! 212:
! 213:
! 214: /* yy_hold_char holds the character lost when yytext is formed. */
! 215: static char yy_hold_char;
! 216:
! 217: static int yy_n_chars; /* number of characters read into yy_ch_buf */
! 218:
! 219:
! 220: int yyleng;
! 221:
! 222: /* Points to current character in buffer. */
! 223: static char *yy_c_buf_p = (char *) 0;
! 224: static int yy_init = 1; /* whether we need to initialize */
! 225: static int yy_start = 0; /* start state number */
! 226:
! 227: /* Flag which is used to allow yywrap()'s to do buffer switches
! 228: * instead of setting up a fresh yyin. A bit of a hack ...
! 229: */
! 230: static int yy_did_buffer_switch_on_eof;
! 231:
! 232: void yyrestart YY_PROTO(( FILE *input_file ));
! 233:
! 234: void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
! 235: void yy_load_buffer_state YY_PROTO(( void ));
! 236: YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
! 237: void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
! 238: void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
! 239: void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
! 240: #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
! 241:
! 242: YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
! 243: YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
! 244: YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
! 245:
! 246: static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
! 247: static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
! 248: static void yy_flex_free YY_PROTO(( void * ));
! 249:
! 250: #define yy_new_buffer yy_create_buffer
! 251:
! 252: #define yy_set_interactive(is_interactive) \
! 253: { \
! 254: if ( ! yy_current_buffer ) \
! 255: yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
! 256: yy_current_buffer->yy_is_interactive = is_interactive; \
! 257: }
! 258:
! 259: #define yy_set_bol(at_bol) \
! 260: { \
! 261: if ( ! yy_current_buffer ) \
! 262: yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
! 263: yy_current_buffer->yy_at_bol = at_bol; \
! 264: }
! 265:
! 266: #define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
! 267:
! 268:
! 269: #define yywrap() 1
! 270: #define YY_SKIP_YYWRAP
! 271: typedef unsigned char YY_CHAR;
! 272: FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
! 273: typedef int yy_state_type;
! 274: extern char *yytext;
! 275: #define yytext_ptr yytext
! 276:
! 277: static yy_state_type yy_get_previous_state YY_PROTO(( void ));
! 278: static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
! 279: static int yy_get_next_buffer YY_PROTO(( void ));
! 280: static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
! 281:
! 282: /* Done after the current pattern has been matched and before the
! 283: * corresponding action - sets up yytext.
! 284: */
! 285: #define YY_DO_BEFORE_ACTION \
! 286: yytext_ptr = yy_bp; \
! 287: yyleng = (int) (yy_cp - yy_bp); \
! 288: yy_hold_char = *yy_cp; \
! 289: *yy_cp = '\0'; \
! 290: yy_c_buf_p = yy_cp;
! 291:
! 292: #define YY_NUM_RULES 59
! 293: #define YY_END_OF_BUFFER 60
! 294: static yyconst short int yy_accept[607] =
! 295: { 0,
! 296: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
! 297: 0, 0, 60, 47, 55, 54, 53, 46, 58, 32,
! 298: 48, 49, 32, 50, 47, 47, 47, 47, 52, 51,
! 299: 58, 42, 42, 42, 42, 42, 42, 42, 42, 42,
! 300: 42, 58, 47, 47, 55, 58, 42, 42, 42, 42,
! 301: 42, 2, 58, 1, 47, 47, 17, 16, 17, 16,
! 302: 16, 58, 58, 58, 3, 9, 8, 9, 4, 9,
! 303: 5, 58, 13, 13, 13, 11, 12, 47, 0, 55,
! 304: 53, 0, 57, 0, 47, 34, 0, 32, 0, 33,
! 305: 0, 45, 45, 0, 47, 47, 0, 47, 47, 47,
! 306:
! 307: 47, 0, 37, 42, 42, 42, 42, 42, 42, 42,
! 308: 42, 42, 42, 47, 56, 47, 55, 0, 0, 0,
! 309: 0, 0, 0, 47, 47, 47, 47, 47, 2, 1,
! 310: 0, 1, 43, 43, 0, 47, 17, 17, 15, 14,
! 311: 15, 0, 0, 3, 9, 0, 6, 7, 9, 9,
! 312: 13, 0, 13, 13, 0, 10, 0, 0, 0, 34,
! 313: 34, 0, 0, 47, 47, 47, 47, 47, 0, 0,
! 314: 37, 37, 42, 39, 42, 42, 42, 42, 42, 42,
! 315: 42, 42, 42, 42, 47, 0, 0, 0, 0, 0,
! 316: 0, 47, 47, 47, 47, 47, 0, 47, 10, 0,
! 317:
! 318: 47, 47, 47, 47, 47, 47, 0, 38, 38, 38,
! 319: 0, 0, 37, 37, 37, 37, 37, 37, 37, 42,
! 320: 42, 42, 42, 42, 42, 42, 42, 40, 42, 41,
! 321: 47, 0, 0, 0, 0, 0, 0, 47, 47, 47,
! 322: 47, 47, 47, 47, 0, 0, 38, 38, 38, 0,
! 323: 37, 37, 0, 37, 37, 37, 37, 37, 37, 37,
! 324: 37, 37, 37, 37, 0, 25, 42, 42, 42, 42,
! 325: 42, 42, 42, 42, 47, 0, 0, 0, 0, 47,
! 326: 47, 47, 47, 47, 47, 47, 47, 0, 38, 0,
! 327: 37, 37, 37, 0, 0, 0, 37, 37, 37, 37,
! 328:
! 329: 37, 37, 37, 37, 37, 37, 37, 37, 37, 42,
! 330: 42, 42, 42, 42, 42, 42, 42, 47, 0, 0,
! 331: 0, 47, 47, 47, 35, 35, 35, 0, 0, 37,
! 332: 37, 37, 37, 37, 37, 37, 0, 0, 0, 0,
! 333: 0, 37, 37, 37, 37, 37, 37, 37, 37, 37,
! 334: 37, 37, 37, 37, 37, 42, 42, 0, 24, 42,
! 335: 42, 42, 42, 0, 23, 0, 26, 47, 0, 0,
! 336: 0, 47, 47, 47, 47, 35, 35, 35, 35, 0,
! 337: 37, 0, 37, 37, 37, 37, 37, 37, 37, 37,
! 338: 37, 37, 37, 0, 0, 0, 37, 37, 37, 37,
! 339:
! 340: 37, 37, 37, 37, 37, 37, 37, 37, 37, 42,
! 341: 42, 42, 42, 42, 42, 44, 0, 0, 0, 47,
! 342: 20, 43, 36, 36, 36, 36, 37, 0, 0, 0,
! 343: 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
! 344: 37, 37, 37, 0, 0, 0, 0, 0, 37, 37,
! 345: 37, 37, 37, 37, 37, 37, 42, 42, 42, 42,
! 346: 0, 22, 0, 27, 0, 20, 0, 0, 47, 0,
! 347: 47, 47, 47, 36, 36, 36, 36, 0, 0, 0,
! 348: 0, 0, 37, 37, 37, 37, 37, 37, 37, 37,
! 349: 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
! 350:
! 351: 37, 37, 0, 30, 42, 42, 42, 0, 0, 0,
! 352: 21, 20, 0, 0, 0, 0, 0, 20, 0, 47,
! 353: 47, 47, 0, 0, 0, 37, 37, 37, 37, 37,
! 354: 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
! 355: 37, 37, 37, 0, 28, 42, 42, 21, 0, 18,
! 356: 0, 0, 20, 47, 47, 47, 47, 47, 0, 0,
! 357: 0, 0, 0, 37, 37, 37, 37, 37, 37, 37,
! 358: 37, 0, 31, 42, 0, 47, 47, 47, 37, 37,
! 359: 37, 37, 37, 37, 0, 29, 0, 47, 47, 47,
! 360: 47, 47, 37, 37, 37, 37, 37, 0, 19, 35,
! 361:
! 362: 35, 35, 35, 35, 35, 0
! 363: } ;
! 364:
! 365: static yyconst int yy_ec[256] =
! 366: { 0,
! 367: 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
! 368: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 369: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 370: 1, 2, 4, 5, 6, 1, 7, 1, 1, 8,
! 371: 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
! 372: 19, 20, 21, 22, 22, 22, 23, 24, 1, 1,
! 373: 25, 26, 10, 27, 28, 29, 30, 31, 32, 29,
! 374: 33, 34, 35, 36, 36, 37, 36, 38, 39, 40,
! 375: 36, 41, 42, 43, 44, 45, 46, 47, 48, 36,
! 376: 10, 49, 10, 1, 50, 1, 51, 52, 53, 54,
! 377:
! 378: 55, 56, 57, 57, 58, 57, 57, 59, 60, 61,
! 379: 62, 57, 57, 63, 64, 65, 66, 57, 57, 57,
! 380: 57, 57, 1, 1, 1, 1, 1, 1, 1, 1,
! 381: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 382: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 383: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 384: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 385: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 386: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 387: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 388:
! 389: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 390: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 391: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 392: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 393: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 394: 1, 1, 1, 1, 1
! 395: } ;
! 396:
! 397: static yyconst int yy_meta[67] =
! 398: { 0,
! 399: 1, 2, 3, 4, 5, 6, 1, 7, 7, 1,
! 400: 1, 8, 1, 9, 10, 11, 11, 11, 11, 11,
! 401: 11, 11, 11, 12, 13, 7, 1, 11, 11, 11,
! 402: 11, 11, 1, 1, 1, 1, 1, 1, 1, 1,
! 403: 1, 1, 1, 1, 1, 1, 1, 1, 14, 15,
! 404: 16, 16, 16, 16, 16, 16, 15, 15, 15, 15,
! 405: 15, 15, 15, 15, 15, 15
! 406: } ;
! 407:
! 408: static yyconst short int yy_base[671] =
! 409: { 0,
! 410: 0, 65, 67, 72, 99, 114, 162, 227, 292, 340,
! 411: 86, 125, 2840, 2790, 2836, 3665, 2833, 3665, 387, 70,
! 412: 3665, 3665, 2771, 3665, 136, 397, 133, 159, 2795, 3665,
! 413: 3665, 453, 2781, 33, 504, 2770, 2767, 2777, 2765, 2771,
! 414: 2754, 559, 170, 19, 165, 583, 38, 49, 2739, 68,
! 415: 2727, 81, 219, 2771, 305, 48, 0, 3665, 2761, 3665,
! 416: 0, 250, 639, 119, 0, 2709, 3665, 108, 3665, 112,
! 417: 3665, 140, 2699, 98, 121, 3665, 195, 2693, 661, 2739,
! 418: 2736, 2736, 3665, 227, 247, 300, 316, 152, 354, 2681,
! 419: 686, 373, 2670, 711, 352, 722, 2692, 2669, 375, 414,
! 420:
! 421: 302, 2656, 57, 763, 0, 2628, 2625, 2614, 505, 2602,
! 422: 2606, 2599, 2601, 202, 3665, 153, 546, 2572, 2565, 2549,
! 423: 2537, 2524, 200, 110, 244, 28, 111, 252, 171, 2578,
! 424: 422, 2577, 565, 2529, 818, 262, 0, 2573, 179, 3665,
! 425: 3665, 599, 269, 0, 2513, 453, 3665, 3665, 2512, 548,
! 426: 2490, 2533, 206, 253, 323, 2535, 2524, 2513, 607, 615,
! 427: 306, 722, 586, 831, 867, 903, 939, 2499, 2456, 980,
! 428: 333, 1022, 1063, 0, 2430, 2394, 2363, 2364, 2374, 2369,
! 429: 2327, 2330, 2329, 2328, 266, 2289, 2283, 2272, 2274, 2279,
! 430: 409, 334, 2279, 145, 335, 83, 672, 278, 2327, 2325,
! 431:
! 432: 627, 259, 1106, 1142, 741, 210, 2293, 2279, 683, 513,
! 433: 2275, 2271, 352, 747, 1178, 780, 788, 1220, 815, 2270,
! 434: 400, 325, 2261, 2258, 2248, 2246, 2242, 0, 2240, 0,
! 435: 489, 2223, 2213, 2198, 2211, 2198, 420, 407, 529, 490,
! 436: 491, 1263, 1299, 1335, 2235, 2234, 839, 2234, 2232, 2228,
! 437: 2226, 528, 848, 657, 856, 665, 1371, 0, 877, 1382,
! 438: 886, 894, 1424, 913, 570, 3665, 2208, 2197, 2198, 2177,
! 439: 2184, 2193, 2190, 2169, 558, 2145, 2098, 2099, 648, 626,
! 440: 530, 559, 923, 336, 1467, 1503, 964, 2138, 2137, 2108,
! 441: 2086, 1537, 551, 1000, 1041, 1082, 653, 694, 797, 1049,
! 442:
! 443: 923, 1580, 0, 1116, 1591, 1090, 1008, 1633, 1125, 2069,
! 444: 2065, 747, 686, 2046, 2005, 786, 926, 905, 2014, 1982,
! 445: 679, 634, 544, 915, 1675, 1710, 1745, 2015, 1978, 1962,
! 446: 1150, 1781, 1158, 1133, 1822, 1197, 1166, 1954, 1239, 1273,
! 447: 1207, 950, 951, 962, 991, 1247, 1073, 1865, 0, 1283,
! 448: 1876, 1307, 1315, 1918, 1323, 1923, 1923, 1188, 3665, 1924,
! 449: 1898, 1893, 1873, 1286, 3665, 1336, 3665, 707, 1790, 1783,
! 450: 786, 930, 764, 1298, 1358, 1041, 1960, 1995, 1400, 1823,
! 451: 1799, 1348, 708, 1406, 1348, 2031, 0, 559, 2042, 1441,
! 452: 1449, 2083, 1477, 1487, 1513, 1523, 1230, 1290, 1458, 1548,
! 453:
! 454: 1557, 1602, 2126, 0, 1613, 2137, 1650, 1565, 1660, 1765,
! 455: 1763, 1680, 1675, 1359, 1406, 1626, 1601, 1577, 897, 938,
! 456: 1695, 1589, 2180, 2216, 2252, 2288, 1611, 1686, 1720, 1731,
! 457: 1563, 1478, 1504, 1694, 1524, 2324, 0, 617, 2335, 1753,
! 458: 1761, 2376, 1769, 1798, 1550, 1808, 1841, 1851, 1335, 1358,
! 459: 1887, 714, 825, 2419, 0, 926, 1407, 1508, 1506, 1471,
! 460: 1547, 3665, 1616, 3665, 1423, 1731, 1907, 1512, 1575, 1910,
! 461: 1915, 1935, 1498, 2429, 2465, 1971, 1611, 1977, 1457, 2005,
! 462: 2015, 1987, 1408, 1254, 1732, 1782, 2059, 1842, 2501, 0,
! 463: 1025, 2512, 2067, 2100, 2553, 2108, 2155, 2164, 2189, 1769,
! 464:
! 465: 1207, 1189, 1634, 3665, 1699, 1162, 1113, 1074, 1118, 384,
! 466: 1040, 2211, 2218, 2238, 2243, 2263, 2288, 2249, 2307, 2596,
! 467: 2632, 2668, 2304, 2354, 2395, 1025, 1006, 1889, 2016, 2362,
! 468: 2043, 2704, 0, 1224, 2715, 2403, 2437, 2445, 992, 2454,
! 469: 2474, 2483, 903, 1921, 3665, 1941, 839, 3665, 843, 3665,
! 470: 1306, 2489, 2529, 2537, 1911, 2758, 2794, 2573, 2579, 811,
! 471: 2607, 2617, 2642, 640, 629, 2109, 535, 447, 2650, 0,
! 472: 1428, 1942, 3665, 2044, 2216, 2830, 2866, 2902, 2676, 2684,
! 473: 2692, 337, 0, 333, 2067, 3665, 327, 2733, 1912, 2938,
! 474: 2974, 2743, 3665, 2767, 2777, 2658, 3665, 166, 3665, 2805,
! 475:
! 476: 2813, 2847, 63, 2855, 2881, 3665, 3023, 3039, 3055, 3071,
! 477: 3087, 3103, 3119, 3135, 3151, 3157, 3173, 3189, 1498, 3205,
! 478: 3221, 3237, 3253, 3269, 3285, 3301, 3307, 3314, 3330, 3346,
! 479: 3352, 3359, 3365, 3371, 3377, 3384, 3390, 3396, 3402, 3409,
! 480: 3417, 3423, 3429, 3435, 3442, 3450, 3456, 3462, 3469, 3477,
! 481: 3483, 3491, 3498, 3506, 3512, 3520, 3527, 3535, 3551, 3567,
! 482: 3573, 3581, 3588, 3604, 3610, 3618, 3624, 3632, 1295, 3648
! 483: } ;
! 484:
! 485: static yyconst short int yy_def[671] =
! 486: { 0,
! 487: 606, 1, 1, 1, 607, 607, 608, 608, 609, 609,
! 488: 610, 610, 606, 611, 606, 606, 606, 606, 612, 613,
! 489: 606, 606, 614, 606, 615, 611, 26, 26, 616, 606,
! 490: 606, 606, 32, 32, 32, 35, 35, 35, 35, 35,
! 491: 35, 611, 26, 611, 606, 612, 32, 32, 35, 35,
! 492: 35, 606, 606, 606, 617, 611, 618, 606, 618, 606,
! 493: 618, 606, 612, 606, 619, 620, 606, 620, 606, 620,
! 494: 606, 621, 622, 622, 622, 606, 606, 611, 611, 606,
! 495: 606, 623, 606, 624, 606, 613, 606, 625, 613, 614,
! 496: 614, 615, 626, 611, 611, 26, 616, 96, 96, 96,
! 497:
! 498: 96, 627, 628, 35, 35, 35, 35, 35, 35, 35,
! 499: 35, 35, 35, 611, 606, 611, 606, 606, 606, 606,
! 500: 606, 606, 623, 611, 96, 611, 611, 611, 606, 606,
! 501: 606, 606, 617, 629, 611, 611, 618, 618, 606, 606,
! 502: 606, 624, 606, 619, 620, 620, 606, 606, 620, 620,
! 503: 622, 606, 622, 622, 606, 606, 623, 630, 606, 606,
! 504: 625, 625, 606, 611, 611, 611, 96, 167, 631, 606,
! 505: 632, 606, 104, 35, 35, 35, 35, 35, 35, 35,
! 506: 35, 35, 35, 35, 611, 606, 606, 606, 606, 606,
! 507: 623, 611, 167, 611, 611, 611, 606, 611, 606, 630,
! 508:
! 509: 611, 611, 611, 611, 611, 611, 633, 634, 634, 209,
! 510: 635, 634, 636, 172, 606, 215, 215, 606, 215, 35,
! 511: 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
! 512: 611, 606, 606, 606, 606, 606, 623, 611, 611, 611,
! 513: 611, 611, 611, 611, 606, 637, 637, 247, 637, 638,
! 514: 639, 640, 606, 641, 218, 641, 641, 257, 641, 606,
! 515: 260, 260, 606, 260, 606, 606, 35, 35, 35, 35,
! 516: 35, 35, 35, 35, 611, 606, 606, 606, 623, 611,
! 517: 611, 611, 611, 611, 611, 611, 611, 642, 642, 643,
! 518: 644, 606, 606, 606, 606, 606, 645, 645, 646, 263,
! 519:
! 520: 646, 646, 302, 646, 606, 305, 305, 606, 305, 35,
! 521: 35, 35, 35, 35, 35, 35, 35, 611, 606, 606,
! 522: 623, 611, 611, 611, 611, 611, 611, 606, 647, 648,
! 523: 292, 606, 332, 332, 606, 332, 606, 606, 606, 606,
! 524: 606, 606, 649, 649, 650, 308, 650, 650, 348, 650,
! 525: 606, 351, 351, 606, 351, 35, 35, 606, 606, 35,
! 526: 35, 35, 35, 606, 606, 606, 606, 611, 606, 606,
! 527: 623, 611, 611, 611, 611, 611, 611, 611, 611, 606,
! 528: 651, 606, 652, 335, 652, 652, 386, 386, 606, 389,
! 529: 389, 606, 389, 606, 606, 606, 606, 653, 653, 654,
! 530:
! 531: 354, 654, 654, 403, 654, 606, 406, 406, 406, 35,
! 532: 35, 35, 35, 35, 35, 611, 606, 606, 623, 611,
! 533: 611, 611, 611, 611, 611, 611, 606, 606, 606, 606,
! 534: 655, 655, 656, 392, 656, 656, 436, 436, 606, 439,
! 535: 439, 606, 439, 606, 606, 606, 606, 606, 606, 657,
! 536: 657, 658, 658, 658, 454, 454, 35, 35, 35, 35,
! 537: 606, 606, 606, 606, 606, 606, 623, 623, 611, 659,
! 538: 660, 611, 611, 611, 611, 611, 611, 606, 606, 606,
! 539: 606, 606, 606, 661, 661, 662, 442, 662, 662, 489,
! 540: 489, 606, 492, 492, 606, 492, 606, 606, 606, 606,
! 541:
! 542: 663, 663, 606, 606, 35, 35, 35, 606, 664, 623,
! 543: 611, 659, 659, 659, 659, 606, 659, 660, 660, 611,
! 544: 611, 611, 606, 606, 606, 606, 665, 665, 666, 495,
! 545: 666, 666, 532, 532, 606, 535, 535, 535, 606, 606,
! 546: 606, 606, 606, 606, 606, 35, 35, 606, 664, 606,
! 547: 623, 606, 606, 611, 611, 611, 611, 611, 606, 606,
! 548: 606, 606, 606, 606, 667, 667, 668, 668, 668, 569,
! 549: 569, 606, 606, 35, 623, 611, 611, 611, 606, 606,
! 550: 606, 606, 669, 669, 606, 606, 670, 611, 611, 611,
! 551: 611, 611, 606, 606, 606, 606, 606, 670, 606, 611,
! 552:
! 553: 611, 611, 611, 611, 611, 0, 606, 606, 606, 606,
! 554: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 555: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 556: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 557: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 558: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 559: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606
! 560: } ;
! 561:
! 562: static yyconst short int yy_nxt[3732] =
! 563: { 0,
! 564: 14, 15, 16, 17, 18, 19, 20, 21, 22, 14,
! 565: 23, 24, 14, 14, 25, 26, 27, 28, 26, 26,
! 566: 26, 26, 26, 29, 30, 31, 14, 32, 33, 33,
! 567: 33, 34, 35, 35, 35, 35, 36, 37, 35, 38,
! 568: 39, 40, 41, 35, 35, 35, 35, 35, 42, 14,
! 569: 43, 43, 43, 43, 43, 43, 14, 14, 14, 14,
! 570: 14, 14, 14, 44, 14, 14, 45, 79, 52, 105,
! 571: 46, 170, 53, 52, 105, 87, 79, 53, 54, 107,
! 572: 172, 55, 129, 54, 116, 105, 55, 74, 16, 75,
! 573: 76, 194, 130, 88, 47, 48, 79, 124, 49, 153,
! 574:
! 575: 15, 58, 59, 125, 60, 50, 111, 35, 51, 35,
! 576: 60, 79, 35, 136, 35, 15, 58, 59, 89, 60,
! 577: 143, 115, 60, 61, 154, 60, 74, 16, 75, 76,
! 578: 56, 79, 147, 127, 77, 56, 148, 60, 61, 93,
! 579: 93, 150, 115, 93, 93, 238, 152, 62, 99, 99,
! 580: 99, 99, 99, 99, 99, 99, 146, 87, 79, 79,
! 581: 146, 93, 62, 15, 16, 17, 117, 63, 599, 152,
! 582: 192, 195, 129, 77, 100, 100, 100, 100, 100, 101,
! 583: 143, 115, 130, 78, 94, 98, 98, 98, 98, 98,
! 584: 98, 98, 98, 79, 118, 119, 155, 156, 120, 151,
! 585:
! 586: 162, 79, 83, 143, 115, 121, 185, 153, 122, 238,
! 587: 64, 65, 65, 65, 65, 65, 65, 65, 65, 65,
! 588: 65, 65, 65, 65, 65, 65, 65, 65, 15, 16,
! 589: 17, 131, 63, 97, 85, 85, 85, 85, 85, 85,
! 590: 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
! 591: 79, 139, 115, 140, 152, 141, 154, 78, 79, 140,
! 592: 191, 141, 85, 85, 85, 85, 85, 85, 85, 85,
! 593: 143, 115, 201, 141, 141, 64, 65, 65, 65, 65,
! 594: 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
! 595: 65, 65, 65, 15, 16, 17, 67, 63, 141, 193,
! 596:
! 597: 79, 152, 68, 69, 70, 606, 196, 79, 134, 134,
! 598: 79, 606, 134, 134, 79, 198, 71, 168, 168, 168,
! 599: 168, 168, 168, 606, 155, 156, 79, 231, 159, 599,
! 600: 134, 160, 160, 160, 160, 160, 160, 160, 160, 241,
! 601: 72, 15, 16, 17, 67, 63, 382, 170, 89, 283,
! 602: 68, 69, 70, 135, 162, 86, 214, 86, 86, 267,
! 603: 530, 86, 86, 268, 71, 86, 170, 164, 165, 166,
! 604: 164, 164, 164, 164, 164, 214, 93, 93, 86, 86,
! 605: 93, 93, 79, 79, 79, 240, 83, 238, 72, 83,
! 606: 168, 168, 168, 168, 168, 168, 168, 168, 93, 84,
! 607:
! 608: 79, 265, 85, 85, 85, 85, 85, 85, 85, 85,
! 609: 95, 83, 96, 96, 96, 96, 96, 96, 96, 96,
! 610: 97, 94, 83, 266, 98, 98, 98, 98, 98, 168,
! 611: 168, 168, 168, 168, 168, 168, 168, 85, 85, 85,
! 612: 85, 85, 85, 85, 85, 79, 551, 98, 98, 98,
! 613: 98, 98, 98, 78, 145, 79, 280, 145, 145, 78,
! 614: 606, 237, 78, 78, 145, 78, 78, 78, 104, 104,
! 615: 104, 104, 104, 104, 104, 104, 97, 145, 279, 78,
! 616: 104, 104, 104, 104, 104, 105, 105, 105, 105, 106,
! 617: 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
! 618:
! 619: 105, 79, 105, 98, 98, 98, 98, 98, 98, 78,
! 620: 78, 78, 78, 78, 78, 78, 78, 78, 78, 105,
! 621: 105, 105, 105, 105, 105, 105, 105, 606, 249, 249,
! 622: 249, 105, 105, 105, 105, 105, 177, 79, 79, 79,
! 623: 105, 178, 170, 275, 179, 282, 180, 117, 382, 143,
! 624: 115, 214, 97, 238, 78, 78, 78, 78, 78, 78,
! 625: 114, 115, 78, 78, 78, 170, 78, 78, 134, 134,
! 626: 78, 265, 134, 134, 214, 118, 119, 79, 79, 120,
! 627: 431, 431, 78, 78, 78, 83, 121, 93, 323, 122,
! 628: 134, 93, 79, 266, 281, 84, 146, 93, 85, 85,
! 629:
! 630: 85, 85, 85, 85, 85, 85, 79, 79, 373, 93,
! 631: 93, 318, 324, 135, 606, 606, 606, 606, 606, 606,
! 632: 606, 606, 160, 160, 160, 160, 160, 160, 160, 160,
! 633: 160, 160, 160, 160, 160, 160, 160, 160, 484, 484,
! 634: 123, 83, 242, 243, 244, 242, 242, 242, 242, 242,
! 635: 83, 142, 530, 322, 606, 606, 606, 606, 606, 606,
! 636: 606, 606, 78, 487, 78, 78, 78, 170, 78, 78,
! 637: 253, 170, 78, 134, 79, 79, 255, 134, 606, 170,
! 638: 255, 83, 79, 134, 78, 78, 78, 90, 255, 90,
! 639: 90, 90, 372, 90, 90, 134, 134, 90, 247, 247,
! 640:
! 641: 248, 249, 249, 249, 249, 249, 211, 253, 170, 90,
! 642: 90, 90, 92, 321, 78, 78, 92, 255, 78, 78,
! 643: 360, 382, 92, 161, 361, 161, 161, 253, 170, 161,
! 644: 161, 384, 371, 161, 92, 92, 78, 167, 167, 167,
! 645: 167, 167, 167, 167, 167, 161, 161, 161, 358, 167,
! 646: 167, 167, 167, 167, 201, 79, 202, 202, 202, 202,
! 647: 202, 202, 219, 219, 219, 219, 219, 219, 219, 219,
! 648: 359, 416, 167, 167, 167, 167, 167, 167, 173, 173,
! 649: 173, 173, 173, 173, 173, 173, 97, 364, 83, 79,
! 650: 173, 173, 173, 173, 173, 257, 257, 257, 257, 257,
! 651:
! 652: 257, 257, 257, 258, 258, 258, 258, 258, 259, 365,
! 653: 253, 170, 79, 167, 167, 167, 167, 167, 167, 133,
! 654: 300, 78, 78, 133, 559, 78, 78, 421, 606, 133,
! 655: 256, 256, 256, 256, 256, 256, 256, 256, 606, 170,
! 656: 419, 133, 133, 78, 201, 550, 202, 202, 202, 202,
! 657: 202, 202, 202, 202, 289, 289, 289, 289, 289, 289,
! 658: 289, 289, 211, 294, 295, 296, 294, 294, 294, 294,
! 659: 294, 264, 264, 264, 264, 264, 264, 264, 264, 79,
! 660: 201, 574, 203, 203, 203, 203, 203, 203, 203, 203,
! 661: 253, 170, 298, 298, 298, 298, 298, 298, 467, 83,
! 662:
! 663: 255, 302, 302, 302, 302, 302, 302, 302, 302, 303,
! 664: 303, 303, 303, 303, 304, 79, 201, 170, 204, 204,
! 665: 204, 204, 204, 205, 202, 202, 606, 366, 301, 301,
! 666: 301, 301, 301, 301, 301, 301, 606, 170, 325, 326,
! 667: 327, 325, 325, 325, 325, 325, 300, 501, 501, 367,
! 668: 468, 79, 78, 79, 206, 206, 206, 206, 206, 206,
! 669: 206, 206, 368, 79, 170, 170, 206, 206, 206, 206,
! 670: 206, 79, 374, 255, 300, 253, 170, 283, 79, 284,
! 671: 284, 284, 284, 284, 284, 300, 79, 420, 469, 206,
! 672: 206, 206, 206, 206, 206, 208, 209, 210, 210, 210,
! 673:
! 674: 210, 210, 210, 211, 253, 170, 170, 212, 212, 212,
! 675: 212, 212, 79, 337, 346, 338, 338, 338, 338, 338,
! 676: 338, 338, 338, 349, 349, 349, 349, 349, 350, 487,
! 677: 212, 212, 212, 212, 212, 212, 170, 215, 216, 217,
! 678: 215, 215, 215, 215, 215, 218, 527, 527, 434, 219,
! 679: 219, 219, 219, 219, 337, 375, 339, 339, 339, 339,
! 680: 339, 339, 339, 339, 309, 309, 309, 309, 309, 309,
! 681: 309, 309, 219, 219, 219, 219, 219, 219, 220, 220,
! 682: 220, 220, 220, 220, 220, 220, 606, 170, 79, 79,
! 683: 220, 220, 220, 220, 220, 337, 346, 340, 340, 340,
! 684:
! 685: 340, 340, 341, 338, 338, 348, 348, 348, 348, 348,
! 686: 348, 348, 348, 206, 206, 206, 206, 206, 206, 201,
! 687: 550, 202, 202, 202, 202, 202, 202, 202, 202, 253,
! 688: 170, 344, 344, 344, 344, 344, 344, 548, 606, 300,
! 689: 347, 347, 347, 347, 347, 347, 347, 347, 387, 387,
! 690: 387, 387, 387, 388, 79, 201, 547, 202, 202, 202,
! 691: 202, 202, 202, 202, 202, 336, 336, 336, 336, 336,
! 692: 336, 336, 336, 386, 386, 386, 386, 386, 386, 386,
! 693: 386, 394, 395, 396, 394, 394, 394, 394, 394, 358,
! 694: 79, 253, 170, 254, 254, 254, 254, 254, 254, 254,
! 695:
! 696: 254, 255, 253, 170, 546, 256, 256, 256, 256, 256,
! 697: 606, 359, 385, 385, 385, 385, 385, 385, 385, 385,
! 698: 337, 170, 338, 338, 338, 338, 338, 338, 256, 256,
! 699: 256, 256, 256, 256, 170, 260, 261, 262, 260, 260,
! 700: 260, 260, 260, 263, 170, 565, 565, 264, 264, 264,
! 701: 264, 264, 337, 300, 338, 338, 338, 338, 338, 338,
! 702: 338, 338, 355, 355, 355, 355, 355, 355, 355, 355,
! 703: 264, 264, 264, 264, 264, 264, 283, 434, 284, 284,
! 704: 284, 284, 284, 284, 284, 284, 337, 364, 338, 338,
! 705: 338, 338, 338, 338, 338, 338, 253, 170, 399, 399,
! 706:
! 707: 399, 399, 399, 399, 170, 597, 346, 575, 83, 365,
! 708: 597, 79, 283, 346, 285, 285, 285, 285, 285, 285,
! 709: 285, 285, 403, 403, 403, 403, 403, 403, 403, 403,
! 710: 404, 404, 404, 404, 404, 405, 606, 366, 402, 402,
! 711: 402, 402, 402, 402, 402, 402, 79, 79, 283, 170,
! 712: 286, 286, 286, 286, 286, 287, 284, 284, 346, 367,
! 713: 461, 606, 422, 428, 429, 430, 428, 428, 428, 428,
! 714: 428, 384, 170, 423, 424, 425, 426, 423, 423, 423,
! 715: 423, 401, 462, 79, 253, 170, 298, 298, 298, 298,
! 716: 298, 298, 298, 298, 255, 253, 170, 299, 299, 299,
! 717:
! 718: 299, 299, 299, 299, 299, 300, 79, 463, 503, 301,
! 719: 301, 301, 301, 301, 375, 376, 376, 376, 376, 376,
! 720: 376, 393, 393, 393, 393, 393, 393, 393, 393, 464,
! 721: 504, 384, 301, 301, 301, 301, 301, 301, 170, 305,
! 722: 306, 307, 305, 305, 305, 305, 305, 308, 79, 583,
! 723: 583, 309, 309, 309, 309, 309, 436, 436, 436, 436,
! 724: 436, 436, 436, 436, 437, 437, 437, 437, 437, 438,
! 725: 478, 253, 170, 508, 309, 309, 309, 309, 309, 309,
! 726: 283, 346, 284, 284, 284, 284, 284, 284, 284, 284,
! 727: 606, 382, 435, 435, 435, 435, 435, 435, 435, 435,
! 728:
! 729: 444, 384, 445, 445, 445, 445, 445, 445, 445, 445,
! 730: 507, 472, 144, 144, 83, 79, 283, 382, 284, 284,
! 731: 284, 284, 284, 284, 284, 284, 444, 434, 446, 446,
! 732: 446, 446, 446, 446, 446, 446, 444, 606, 447, 447,
! 733: 447, 447, 447, 448, 445, 445, 79, 434, 461, 506,
! 734: 505, 79, 332, 333, 334, 332, 332, 332, 332, 332,
! 735: 335, 253, 170, 444, 336, 336, 336, 336, 336, 510,
! 736: 462, 401, 409, 409, 409, 409, 409, 409, 409, 409,
! 737: 455, 455, 455, 455, 455, 456, 384, 336, 336, 336,
! 738: 336, 336, 336, 253, 170, 344, 344, 344, 344, 344,
! 739:
! 740: 344, 344, 344, 300, 253, 170, 345, 345, 345, 345,
! 741: 345, 345, 345, 345, 346, 606, 170, 463, 347, 347,
! 742: 347, 347, 347, 79, 472, 401, 253, 170, 451, 451,
! 743: 451, 451, 451, 451, 331, 503, 401, 79, 511, 464,
! 744: 466, 347, 347, 347, 347, 347, 347, 170, 351, 352,
! 745: 353, 351, 351, 351, 351, 351, 354, 504, 465, 79,
! 746: 355, 355, 355, 355, 355, 454, 454, 454, 454, 454,
! 747: 454, 454, 454, 606, 79, 453, 453, 453, 453, 453,
! 748: 453, 453, 453, 355, 355, 355, 355, 355, 355, 375,
! 749: 376, 376, 376, 376, 376, 376, 376, 376, 470, 478,
! 750:
! 751: 544, 479, 479, 479, 479, 479, 479, 479, 479, 443,
! 752: 443, 443, 443, 443, 443, 443, 443, 460, 470, 459,
! 753: 470, 471, 545, 79, 375, 377, 377, 377, 377, 377,
! 754: 377, 377, 377, 478, 470, 480, 480, 480, 480, 480,
! 755: 480, 480, 480, 79, 478, 382, 481, 481, 481, 481,
! 756: 481, 482, 479, 479, 470, 434, 470, 470, 79, 375,
! 757: 378, 378, 378, 378, 378, 379, 376, 376, 489, 489,
! 758: 489, 489, 489, 489, 489, 489, 490, 490, 490, 490,
! 759: 490, 491, 606, 170, 488, 488, 488, 488, 488, 488,
! 760: 488, 488, 401, 79, 382, 382, 383, 383, 383, 383,
! 761:
! 762: 383, 383, 383, 383, 384, 487, 458, 457, 385, 385,
! 763: 385, 385, 385, 497, 498, 499, 497, 497, 497, 497,
! 764: 497, 444, 331, 445, 445, 445, 445, 445, 445, 445,
! 765: 445, 385, 385, 385, 385, 385, 385, 389, 390, 391,
! 766: 389, 389, 389, 389, 389, 392, 251, 418, 417, 393,
! 767: 393, 393, 393, 393, 444, 606, 445, 445, 445, 445,
! 768: 445, 445, 445, 445, 444, 487, 445, 445, 445, 445,
! 769: 445, 445, 393, 393, 393, 393, 393, 393, 253, 170,
! 770: 399, 399, 399, 399, 399, 399, 399, 399, 346, 253,
! 771: 170, 400, 400, 400, 400, 400, 400, 400, 400, 401,
! 772:
! 773: 253, 170, 382, 402, 402, 402, 402, 402, 467, 83,
! 774: 401, 513, 487, 514, 515, 516, 513, 415, 514, 515,
! 775: 516, 509, 544, 414, 554, 588, 402, 402, 402, 402,
! 776: 402, 402, 170, 406, 407, 408, 406, 406, 406, 406,
! 777: 406, 413, 572, 572, 545, 409, 409, 409, 409, 409,
! 778: 520, 521, 522, 520, 520, 520, 520, 520, 517, 79,
! 779: 79, 412, 411, 519, 573, 573, 410, 337, 409, 409,
! 780: 409, 409, 409, 409, 375, 376, 376, 376, 376, 376,
! 781: 376, 376, 376, 79, 472, 331, 473, 473, 473, 473,
! 782: 473, 473, 523, 524, 525, 523, 523, 523, 523, 523,
! 783:
! 784: 478, 251, 479, 479, 479, 479, 479, 479, 79, 375,
! 785: 376, 376, 376, 376, 376, 376, 376, 376, 478, 79,
! 786: 479, 479, 479, 479, 479, 479, 479, 479, 478, 382,
! 787: 479, 479, 479, 479, 479, 479, 479, 479, 211, 530,
! 788: 370, 369, 363, 79, 382, 585, 432, 432, 432, 432,
! 789: 432, 432, 432, 432, 384, 382, 606, 433, 433, 433,
! 790: 433, 433, 433, 433, 433, 434, 530, 586, 585, 435,
! 791: 435, 435, 435, 435, 496, 496, 496, 496, 496, 496,
! 792: 496, 496, 532, 532, 532, 532, 532, 532, 532, 532,
! 793: 586, 362, 435, 435, 435, 435, 435, 435, 439, 440,
! 794:
! 795: 441, 439, 439, 439, 439, 439, 442, 357, 356, 331,
! 796: 443, 443, 443, 443, 443, 533, 533, 533, 533, 533,
! 797: 534, 606, 382, 531, 531, 531, 531, 531, 531, 531,
! 798: 531, 251, 530, 443, 443, 443, 443, 443, 443, 253,
! 799: 170, 451, 451, 451, 451, 451, 451, 451, 451, 401,
! 800: 253, 170, 452, 452, 452, 452, 452, 452, 452, 452,
! 801: 211, 211, 276, 320, 453, 453, 453, 453, 453, 170,
! 802: 539, 539, 539, 539, 539, 539, 539, 539, 170, 540,
! 803: 540, 540, 540, 540, 540, 540, 540, 453, 453, 453,
! 804: 453, 453, 453, 472, 319, 473, 473, 473, 473, 473,
! 805:
! 806: 473, 473, 473, 170, 541, 541, 541, 541, 541, 542,
! 807: 539, 539, 606, 317, 606, 606, 606, 575, 83, 513,
! 808: 316, 514, 515, 516, 315, 314, 313, 312, 79, 472,
! 809: 587, 474, 474, 474, 474, 474, 474, 474, 474, 606,
! 810: 311, 514, 515, 516, 606, 310, 606, 606, 516, 292,
! 811: 606, 251, 606, 606, 606, 211, 288, 211, 103, 517,
! 812: 276, 278, 276, 277, 79, 472, 517, 475, 475, 475,
! 813: 475, 475, 476, 477, 477, 552, 276, 274, 553, 553,
! 814: 553, 553, 553, 553, 553, 553, 517, 273, 272, 271,
! 815: 270, 517, 269, 97, 211, 512, 512, 519, 251, 512,
! 816:
! 817: 79, 472, 211, 477, 477, 477, 473, 473, 473, 473,
! 818: 473, 512, 512, 512, 518, 518, 103, 559, 518, 560,
! 819: 560, 560, 560, 560, 560, 560, 560, 83, 199, 239,
! 820: 518, 518, 518, 236, 235, 234, 79, 382, 233, 485,
! 821: 485, 485, 485, 485, 485, 485, 485, 434, 382, 232,
! 822: 486, 486, 486, 486, 486, 486, 486, 486, 487, 230,
! 823: 229, 228, 488, 488, 488, 488, 488, 559, 227, 561,
! 824: 561, 561, 561, 561, 561, 561, 561, 538, 538, 538,
! 825: 538, 538, 538, 538, 538, 488, 488, 488, 488, 488,
! 826: 488, 492, 493, 494, 492, 492, 492, 492, 492, 495,
! 827:
! 828: 226, 225, 224, 496, 496, 496, 496, 496, 559, 223,
! 829: 562, 562, 562, 562, 562, 563, 560, 560, 569, 569,
! 830: 569, 569, 569, 569, 569, 569, 496, 496, 496, 496,
! 831: 496, 496, 253, 170, 502, 502, 502, 502, 502, 502,
! 832: 502, 502, 472, 222, 473, 473, 473, 473, 473, 473,
! 833: 473, 473, 570, 570, 570, 570, 570, 571, 606, 221,
! 834: 568, 568, 568, 568, 568, 568, 568, 568, 170, 539,
! 835: 539, 539, 539, 539, 539, 539, 539, 79, 472, 103,
! 836: 473, 473, 473, 473, 473, 473, 473, 473, 170, 539,
! 837: 539, 539, 539, 539, 539, 539, 539, 170, 539, 539,
! 838:
! 839: 539, 539, 539, 539, 553, 553, 553, 553, 553, 553,
! 840: 553, 553, 95, 79, 382, 83, 528, 528, 528, 528,
! 841: 528, 528, 528, 528, 487, 382, 83, 529, 529, 529,
! 842: 529, 529, 529, 529, 529, 530, 199, 151, 152, 531,
! 843: 531, 531, 531, 531, 553, 553, 553, 553, 553, 553,
! 844: 553, 553, 576, 577, 578, 576, 576, 576, 576, 576,
! 845: 146, 146, 531, 531, 531, 531, 531, 531, 535, 536,
! 846: 537, 535, 535, 535, 535, 535, 138, 197, 132, 132,
! 847: 538, 538, 538, 538, 538, 79, 554, 190, 555, 555,
! 848: 555, 555, 555, 555, 579, 580, 581, 579, 579, 579,
! 849:
! 850: 579, 579, 189, 538, 538, 538, 538, 538, 538, 554,
! 851: 188, 555, 555, 555, 555, 555, 555, 555, 555, 187,
! 852: 559, 79, 560, 560, 560, 560, 560, 560, 560, 560,
! 853: 559, 186, 560, 560, 560, 560, 560, 560, 560, 560,
! 854: 184, 183, 182, 181, 79, 554, 176, 556, 556, 556,
! 855: 556, 556, 556, 556, 556, 559, 175, 560, 560, 560,
! 856: 560, 560, 560, 382, 174, 584, 584, 584, 584, 584,
! 857: 584, 584, 584, 593, 593, 593, 593, 593, 593, 103,
! 858: 79, 554, 78, 557, 557, 557, 557, 557, 558, 555,
! 859: 555, 593, 593, 593, 593, 593, 593, 593, 593, 594,
! 860:
! 861: 594, 594, 594, 594, 594, 594, 594, 595, 595, 595,
! 862: 595, 595, 596, 593, 593, 103, 79, 382, 163, 566,
! 863: 566, 566, 566, 566, 566, 566, 566, 530, 382, 91,
! 864: 567, 567, 567, 567, 567, 567, 567, 567, 83, 81,
! 865: 80, 79, 568, 568, 568, 568, 568, 152, 600, 601,
! 866: 602, 600, 600, 600, 600, 600, 588, 146, 589, 589,
! 867: 589, 589, 589, 589, 138, 568, 568, 568, 568, 568,
! 868: 568, 554, 132, 555, 555, 555, 555, 555, 555, 555,
! 869: 555, 79, 593, 593, 593, 593, 593, 593, 593, 593,
! 870: 128, 79, 593, 593, 593, 593, 593, 593, 593, 593,
! 871:
! 872: 126, 113, 112, 111, 110, 109, 79, 554, 108, 555,
! 873: 555, 555, 555, 555, 555, 555, 555, 105, 103, 91,
! 874: 603, 603, 603, 603, 603, 603, 603, 603, 600, 600,
! 875: 600, 600, 600, 600, 600, 600, 81, 80, 79, 606,
! 876: 606, 606, 79, 588, 606, 589, 589, 589, 589, 589,
! 877: 589, 589, 589, 79, 606, 606, 606, 606, 606, 606,
! 878: 606, 79, 604, 604, 604, 604, 604, 605, 603, 603,
! 879: 603, 603, 603, 603, 603, 603, 603, 603, 79, 588,
! 880: 606, 590, 590, 590, 590, 590, 590, 590, 590, 606,
! 881: 606, 606, 606, 606, 606, 79, 603, 603, 603, 603,
! 882:
! 883: 603, 603, 606, 79, 606, 606, 606, 606, 606, 606,
! 884: 606, 606, 606, 606, 79, 588, 606, 591, 591, 591,
! 885: 591, 591, 592, 589, 589, 606, 606, 606, 606, 79,
! 886: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 887: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 888: 79, 588, 606, 589, 589, 589, 589, 589, 589, 589,
! 889: 589, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 890: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 891: 606, 606, 606, 606, 606, 606, 79, 588, 606, 589,
! 892: 589, 589, 589, 589, 589, 589, 589, 606, 606, 606,
! 893:
! 894: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 895: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 896: 606, 606, 79, 57, 57, 57, 57, 57, 57, 57,
! 897: 57, 57, 57, 57, 57, 57, 57, 57, 57, 31,
! 898: 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
! 899: 31, 31, 31, 31, 31, 66, 66, 66, 66, 66,
! 900: 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
! 901: 66, 73, 73, 73, 73, 73, 73, 73, 73, 73,
! 902: 73, 73, 73, 73, 73, 73, 73, 78, 606, 606,
! 903: 606, 606, 606, 606, 606, 78, 78, 78, 606, 606,
! 904:
! 905: 78, 78, 78, 82, 82, 82, 82, 82, 82, 82,
! 906: 82, 82, 82, 82, 82, 82, 82, 82, 82, 86,
! 907: 606, 606, 606, 606, 86, 606, 606, 86, 86, 86,
! 908: 86, 606, 86, 86, 86, 90, 606, 606, 606, 606,
! 909: 606, 606, 606, 90, 90, 90, 606, 606, 90, 90,
! 910: 90, 92, 606, 606, 92, 92, 606, 92, 606, 92,
! 911: 92, 92, 606, 606, 92, 92, 92, 102, 102, 606,
! 912: 606, 606, 102, 133, 606, 606, 133, 133, 606, 133,
! 913: 606, 133, 133, 133, 606, 606, 133, 133, 133, 137,
! 914: 606, 606, 137, 137, 606, 137, 606, 137, 137, 137,
! 915:
! 916: 606, 137, 606, 137, 137, 145, 606, 606, 145, 606,
! 917: 606, 145, 606, 145, 145, 145, 145, 606, 145, 145,
! 918: 145, 149, 149, 149, 149, 149, 149, 149, 149, 149,
! 919: 149, 149, 149, 149, 149, 149, 149, 151, 151, 606,
! 920: 151, 606, 151, 151, 151, 151, 151, 151, 151, 151,
! 921: 151, 151, 151, 157, 157, 157, 157, 157, 157, 157,
! 922: 157, 157, 157, 157, 157, 157, 157, 157, 157, 158,
! 923: 158, 606, 158, 158, 158, 158, 158, 158, 158, 158,
! 924: 158, 158, 158, 158, 158, 161, 606, 606, 606, 606,
! 925: 161, 606, 606, 161, 161, 161, 606, 606, 161, 161,
! 926:
! 927: 161, 93, 606, 606, 93, 93, 606, 93, 606, 93,
! 928: 93, 93, 606, 606, 93, 93, 93, 169, 169, 606,
! 929: 606, 606, 169, 171, 171, 171, 606, 606, 606, 171,
! 930: 134, 606, 606, 134, 134, 606, 134, 606, 134, 134,
! 931: 134, 606, 606, 134, 134, 134, 200, 200, 200, 200,
! 932: 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
! 933: 200, 200, 207, 207, 606, 606, 606, 207, 213, 213,
! 934: 213, 606, 606, 606, 213, 245, 245, 606, 606, 606,
! 935: 245, 246, 246, 606, 606, 606, 246, 250, 250, 606,
! 936: 606, 606, 250, 252, 252, 252, 606, 606, 606, 252,
! 937:
! 938: 288, 288, 606, 606, 606, 288, 290, 290, 606, 606,
! 939: 606, 290, 291, 291, 606, 606, 606, 291, 293, 293,
! 940: 293, 606, 606, 606, 293, 297, 297, 297, 297, 606,
! 941: 606, 606, 297, 328, 328, 606, 606, 606, 328, 329,
! 942: 329, 606, 606, 606, 329, 330, 330, 606, 606, 606,
! 943: 330, 342, 342, 342, 606, 606, 606, 342, 343, 343,
! 944: 343, 343, 606, 606, 606, 343, 380, 380, 606, 606,
! 945: 606, 380, 381, 381, 606, 606, 606, 381, 397, 397,
! 946: 397, 606, 606, 606, 397, 398, 398, 398, 398, 606,
! 947: 606, 606, 398, 427, 427, 606, 606, 606, 427, 431,
! 948:
! 949: 606, 431, 431, 606, 606, 606, 431, 449, 449, 449,
! 950: 606, 606, 606, 449, 450, 450, 450, 450, 606, 606,
! 951: 606, 450, 483, 483, 606, 606, 606, 483, 484, 606,
! 952: 484, 484, 606, 606, 606, 484, 500, 500, 500, 606,
! 953: 606, 606, 500, 501, 501, 501, 606, 606, 606, 606,
! 954: 501, 512, 512, 606, 512, 512, 512, 606, 606, 512,
! 955: 512, 512, 606, 606, 512, 512, 512, 518, 518, 606,
! 956: 518, 518, 518, 606, 606, 518, 518, 518, 606, 606,
! 957: 518, 518, 518, 526, 526, 606, 606, 606, 526, 527,
! 958: 606, 527, 527, 606, 606, 606, 527, 543, 543, 606,
! 959:
! 960: 606, 606, 606, 543, 549, 549, 549, 549, 549, 549,
! 961: 549, 549, 549, 549, 549, 549, 549, 549, 549, 549,
! 962: 564, 564, 606, 606, 606, 564, 565, 606, 565, 565,
! 963: 606, 606, 606, 565, 582, 582, 606, 606, 606, 582,
! 964: 583, 606, 583, 606, 606, 606, 606, 583, 598, 598,
! 965: 598, 598, 598, 598, 598, 598, 598, 598, 598, 598,
! 966: 598, 598, 598, 598, 13, 606, 606, 606, 606, 606,
! 967: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 968: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 969: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 970:
! 971: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 972: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 973: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 974: 606
! 975: } ;
! 976:
! 977: static yyconst short int yy_chk[3732] =
! 978: { 0,
! 979: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 980: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 981: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 982: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 983: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 984: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
! 985: 1, 1, 1, 1, 1, 1, 2, 44, 3, 34,
! 986: 2, 103, 3, 4, 47, 20, 126, 4, 3, 34,
! 987: 103, 3, 52, 4, 44, 48, 4, 11, 11, 11,
! 988: 11, 126, 52, 20, 2, 2, 56, 47, 2, 74,
! 989:
! 990: 5, 5, 5, 48, 5, 2, 50, 3, 2, 3,
! 991: 5, 603, 4, 56, 4, 6, 6, 6, 20, 6,
! 992: 64, 64, 5, 5, 75, 6, 12, 12, 12, 12,
! 993: 3, 196, 68, 50, 11, 4, 70, 6, 6, 25,
! 994: 25, 72, 72, 25, 25, 196, 74, 5, 27, 27,
! 995: 27, 27, 27, 27, 27, 27, 68, 88, 124, 127,
! 996: 70, 25, 6, 7, 7, 7, 45, 7, 598, 75,
! 997: 124, 127, 129, 12, 28, 28, 28, 28, 28, 28,
! 998: 139, 139, 129, 43, 25, 43, 43, 43, 43, 43,
! 999: 43, 43, 43, 194, 45, 45, 77, 77, 45, 77,
! 1000:
! 1001: 88, 116, 123, 114, 114, 45, 116, 153, 45, 194,
! 1002: 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
! 1003: 7, 7, 7, 7, 7, 7, 7, 7, 8, 8,
! 1004: 8, 53, 8, 206, 53, 53, 53, 53, 53, 53,
! 1005: 53, 53, 84, 84, 84, 84, 84, 84, 84, 84,
! 1006: 114, 62, 62, 62, 153, 62, 154, 125, 206, 62,
! 1007: 123, 62, 85, 85, 85, 85, 85, 85, 85, 85,
! 1008: 143, 143, 202, 62, 62, 8, 8, 8, 8, 8,
! 1009: 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
! 1010: 8, 8, 8, 9, 9, 9, 9, 9, 62, 125,
! 1011:
! 1012: 128, 154, 9, 9, 9, 86, 128, 202, 55, 55,
! 1013: 136, 161, 55, 55, 185, 136, 9, 101, 101, 101,
! 1014: 101, 101, 101, 86, 155, 155, 198, 185, 87, 587,
! 1015: 55, 87, 87, 87, 87, 87, 87, 87, 87, 198,
! 1016: 9, 10, 10, 10, 10, 10, 584, 171, 86, 284,
! 1017: 10, 10, 10, 55, 161, 89, 171, 89, 89, 222,
! 1018: 582, 89, 89, 222, 10, 89, 213, 95, 95, 95,
! 1019: 95, 95, 95, 95, 95, 213, 92, 92, 89, 89,
! 1020: 92, 92, 192, 195, 284, 195, 510, 192, 10, 19,
! 1021: 99, 99, 99, 99, 99, 99, 99, 99, 92, 19,
! 1022:
! 1023: 95, 221, 19, 19, 19, 19, 19, 19, 19, 19,
! 1024: 26, 191, 26, 26, 26, 26, 26, 26, 26, 26,
! 1025: 26, 92, 237, 221, 26, 26, 26, 26, 26, 100,
! 1026: 100, 100, 100, 100, 100, 100, 100, 131, 131, 131,
! 1027: 131, 131, 131, 131, 131, 26, 510, 26, 26, 26,
! 1028: 26, 26, 26, 32, 146, 238, 238, 146, 146, 32,
! 1029: 568, 191, 32, 32, 146, 32, 32, 32, 32, 32,
! 1030: 32, 32, 32, 32, 32, 32, 32, 146, 237, 32,
! 1031: 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
! 1032: 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
! 1033:
! 1034: 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
! 1035: 32, 32, 32, 32, 32, 32, 32, 32, 32, 35,
! 1036: 35, 35, 35, 35, 35, 35, 35, 35, 210, 210,
! 1037: 210, 35, 35, 35, 35, 35, 109, 231, 240, 241,
! 1038: 35, 109, 252, 231, 109, 241, 109, 117, 567, 150,
! 1039: 150, 252, 239, 240, 35, 35, 35, 35, 35, 35,
! 1040: 42, 42, 42, 42, 42, 293, 42, 42, 133, 133,
! 1041: 42, 265, 133, 133, 293, 117, 117, 239, 281, 117,
! 1042: 388, 388, 42, 42, 42, 46, 117, 163, 281, 117,
! 1043: 133, 163, 323, 265, 239, 46, 150, 163, 46, 46,
! 1044:
! 1045: 46, 46, 46, 46, 46, 46, 275, 282, 323, 163,
! 1046: 163, 275, 282, 133, 142, 142, 142, 142, 142, 142,
! 1047: 142, 142, 159, 159, 159, 159, 159, 159, 159, 159,
! 1048: 160, 160, 160, 160, 160, 160, 160, 160, 438, 438,
! 1049: 46, 63, 201, 201, 201, 201, 201, 201, 201, 201,
! 1050: 279, 63, 565, 280, 63, 63, 63, 63, 63, 63,
! 1051: 63, 63, 79, 564, 79, 79, 79, 297, 79, 79,
! 1052: 254, 254, 79, 197, 280, 201, 297, 197, 256, 256,
! 1053: 254, 321, 322, 197, 79, 79, 79, 91, 256, 91,
! 1054: 91, 91, 322, 91, 91, 197, 197, 91, 209, 209,
! 1055:
! 1056: 209, 209, 209, 209, 209, 209, 209, 298, 298, 91,
! 1057: 91, 91, 94, 279, 94, 94, 94, 298, 94, 94,
! 1058: 313, 383, 94, 162, 313, 162, 162, 452, 452, 162,
! 1059: 162, 383, 321, 162, 94, 94, 94, 96, 96, 96,
! 1060: 96, 96, 96, 96, 96, 162, 162, 162, 312, 96,
! 1061: 96, 96, 96, 96, 205, 368, 205, 205, 205, 205,
! 1062: 205, 205, 214, 214, 214, 214, 214, 214, 214, 214,
! 1063: 312, 368, 96, 96, 96, 96, 96, 96, 104, 104,
! 1064: 104, 104, 104, 104, 104, 104, 104, 316, 371, 205,
! 1065: 104, 104, 104, 104, 104, 216, 216, 216, 216, 216,
! 1066:
! 1067: 216, 216, 216, 217, 217, 217, 217, 217, 217, 316,
! 1068: 299, 299, 373, 104, 104, 104, 104, 104, 104, 135,
! 1069: 299, 135, 135, 135, 560, 135, 135, 373, 219, 135,
! 1070: 219, 219, 219, 219, 219, 219, 219, 219, 453, 453,
! 1071: 371, 135, 135, 135, 164, 549, 164, 164, 164, 164,
! 1072: 164, 164, 164, 164, 247, 247, 247, 247, 247, 247,
! 1073: 247, 247, 247, 253, 253, 253, 253, 253, 253, 253,
! 1074: 253, 255, 255, 255, 255, 255, 255, 255, 255, 164,
! 1075: 165, 547, 165, 165, 165, 165, 165, 165, 165, 165,
! 1076: 259, 259, 259, 259, 259, 259, 259, 259, 419, 419,
! 1077:
! 1078: 259, 261, 261, 261, 261, 261, 261, 261, 261, 262,
! 1079: 262, 262, 262, 262, 262, 165, 166, 543, 166, 166,
! 1080: 166, 166, 166, 166, 166, 166, 264, 317, 264, 264,
! 1081: 264, 264, 264, 264, 264, 264, 301, 301, 283, 283,
! 1082: 283, 283, 283, 283, 283, 283, 301, 456, 456, 317,
! 1083: 419, 166, 167, 318, 167, 167, 167, 167, 167, 167,
! 1084: 167, 167, 318, 324, 342, 343, 167, 167, 167, 167,
! 1085: 167, 283, 324, 342, 343, 344, 344, 287, 372, 287,
! 1086: 287, 287, 287, 287, 287, 344, 420, 372, 420, 167,
! 1087: 167, 167, 167, 167, 167, 170, 170, 170, 170, 170,
! 1088:
! 1089: 170, 170, 170, 170, 345, 345, 539, 170, 170, 170,
! 1090: 170, 170, 287, 294, 345, 294, 294, 294, 294, 294,
! 1091: 294, 294, 294, 307, 307, 307, 307, 307, 307, 527,
! 1092: 170, 170, 170, 170, 170, 170, 172, 172, 172, 172,
! 1093: 172, 172, 172, 172, 172, 172, 491, 491, 526, 172,
! 1094: 172, 172, 172, 172, 295, 376, 295, 295, 295, 295,
! 1095: 295, 295, 295, 295, 300, 300, 300, 300, 300, 300,
! 1096: 300, 300, 172, 172, 172, 172, 172, 172, 173, 173,
! 1097: 173, 173, 173, 173, 173, 173, 347, 347, 511, 376,
! 1098: 173, 173, 173, 173, 173, 296, 347, 296, 296, 296,
! 1099:
! 1100: 296, 296, 296, 296, 296, 306, 306, 306, 306, 306,
! 1101: 306, 306, 306, 173, 173, 173, 173, 173, 173, 203,
! 1102: 509, 203, 203, 203, 203, 203, 203, 203, 203, 304,
! 1103: 304, 304, 304, 304, 304, 304, 304, 508, 309, 304,
! 1104: 309, 309, 309, 309, 309, 309, 309, 309, 334, 334,
! 1105: 334, 334, 334, 334, 203, 204, 507, 204, 204, 204,
! 1106: 204, 204, 204, 204, 204, 331, 331, 331, 331, 331,
! 1107: 331, 331, 331, 333, 333, 333, 333, 333, 333, 333,
! 1108: 333, 337, 337, 337, 337, 337, 337, 337, 337, 358,
! 1109: 204, 215, 215, 215, 215, 215, 215, 215, 215, 215,
! 1110:
! 1111: 215, 215, 502, 502, 506, 215, 215, 215, 215, 215,
! 1112: 336, 358, 336, 336, 336, 336, 336, 336, 336, 336,
! 1113: 341, 501, 341, 341, 341, 341, 341, 341, 215, 215,
! 1114: 215, 215, 215, 215, 218, 218, 218, 218, 218, 218,
! 1115: 218, 218, 218, 218, 397, 534, 534, 218, 218, 218,
! 1116: 218, 218, 339, 397, 339, 339, 339, 339, 339, 339,
! 1117: 339, 339, 346, 346, 346, 346, 346, 346, 346, 346,
! 1118: 218, 218, 218, 218, 218, 218, 242, 484, 242, 242,
! 1119: 242, 242, 242, 242, 242, 242, 340, 364, 340, 340,
! 1120: 340, 340, 340, 340, 340, 340, 350, 350, 350, 350,
! 1121:
! 1122: 350, 350, 350, 350, 398, 669, 350, 551, 551, 364,
! 1123: 669, 242, 243, 398, 243, 243, 243, 243, 243, 243,
! 1124: 243, 243, 352, 352, 352, 352, 352, 352, 352, 352,
! 1125: 353, 353, 353, 353, 353, 353, 355, 366, 355, 355,
! 1126: 355, 355, 355, 355, 355, 355, 374, 243, 244, 449,
! 1127: 244, 244, 244, 244, 244, 244, 244, 244, 449, 366,
! 1128: 414, 385, 374, 382, 382, 382, 382, 382, 382, 382,
! 1129: 382, 385, 450, 375, 375, 375, 375, 375, 375, 375,
! 1130: 375, 450, 414, 244, 257, 257, 257, 257, 257, 257,
! 1131: 257, 257, 257, 257, 257, 260, 260, 260, 260, 260,
! 1132:
! 1133: 260, 260, 260, 260, 260, 260, 375, 415, 457, 260,
! 1134: 260, 260, 260, 260, 379, 379, 379, 379, 379, 379,
! 1135: 379, 384, 384, 384, 384, 384, 384, 384, 384, 415,
! 1136: 457, 483, 260, 260, 260, 260, 260, 260, 263, 263,
! 1137: 263, 263, 263, 263, 263, 263, 263, 263, 379, 571,
! 1138: 571, 263, 263, 263, 263, 263, 390, 390, 390, 390,
! 1139: 390, 390, 390, 390, 391, 391, 391, 391, 391, 391,
! 1140: 479, 399, 399, 465, 263, 263, 263, 263, 263, 263,
! 1141: 285, 399, 285, 285, 285, 285, 285, 285, 285, 285,
! 1142: 393, 432, 393, 393, 393, 393, 393, 393, 393, 393,
! 1143:
! 1144: 394, 432, 394, 394, 394, 394, 394, 394, 394, 394,
! 1145: 460, 473, 619, 619, 468, 285, 286, 433, 286, 286,
! 1146: 286, 286, 286, 286, 286, 286, 395, 433, 395, 395,
! 1147: 395, 395, 395, 395, 395, 395, 396, 435, 396, 396,
! 1148: 396, 396, 396, 396, 396, 396, 473, 435, 461, 459,
! 1149: 458, 286, 292, 292, 292, 292, 292, 292, 292, 292,
! 1150: 292, 400, 400, 445, 292, 292, 292, 292, 292, 468,
! 1151: 461, 400, 401, 401, 401, 401, 401, 401, 401, 401,
! 1152: 408, 408, 408, 408, 408, 408, 431, 292, 292, 292,
! 1153: 292, 292, 292, 302, 302, 302, 302, 302, 302, 302,
! 1154:
! 1155: 302, 302, 302, 302, 305, 305, 305, 305, 305, 305,
! 1156: 305, 305, 305, 305, 305, 402, 402, 463, 305, 305,
! 1157: 305, 305, 305, 469, 477, 402, 405, 405, 405, 405,
! 1158: 405, 405, 405, 405, 427, 503, 405, 422, 469, 463,
! 1159: 418, 305, 305, 305, 305, 305, 305, 308, 308, 308,
! 1160: 308, 308, 308, 308, 308, 308, 308, 503, 417, 477,
! 1161: 308, 308, 308, 308, 308, 407, 407, 407, 407, 407,
! 1162: 407, 407, 407, 409, 416, 409, 409, 409, 409, 409,
! 1163: 409, 409, 409, 308, 308, 308, 308, 308, 308, 325,
! 1164: 325, 325, 325, 325, 325, 325, 325, 325, 421, 428,
! 1165:
! 1166: 505, 428, 428, 428, 428, 428, 428, 428, 428, 434,
! 1167: 434, 434, 434, 434, 434, 434, 434, 413, 421, 412,
! 1168: 421, 421, 505, 325, 326, 326, 326, 326, 326, 326,
! 1169: 326, 326, 326, 429, 466, 429, 429, 429, 429, 429,
! 1170: 429, 429, 429, 421, 430, 485, 430, 430, 430, 430,
! 1171: 430, 430, 430, 430, 466, 485, 466, 466, 326, 327,
! 1172: 327, 327, 327, 327, 327, 327, 327, 327, 440, 440,
! 1173: 440, 440, 440, 440, 440, 440, 441, 441, 441, 441,
! 1174: 441, 441, 443, 500, 443, 443, 443, 443, 443, 443,
! 1175: 443, 443, 500, 327, 332, 486, 332, 332, 332, 332,
! 1176:
! 1177: 332, 332, 332, 332, 332, 486, 411, 410, 332, 332,
! 1178: 332, 332, 332, 444, 444, 444, 444, 444, 444, 444,
! 1179: 444, 446, 381, 446, 446, 446, 446, 446, 446, 446,
! 1180: 446, 332, 332, 332, 332, 332, 332, 335, 335, 335,
! 1181: 335, 335, 335, 335, 335, 335, 380, 370, 369, 335,
! 1182: 335, 335, 335, 335, 447, 488, 447, 447, 447, 447,
! 1183: 447, 447, 447, 447, 448, 488, 448, 448, 448, 448,
! 1184: 448, 448, 335, 335, 335, 335, 335, 335, 348, 348,
! 1185: 348, 348, 348, 348, 348, 348, 348, 348, 348, 351,
! 1186: 351, 351, 351, 351, 351, 351, 351, 351, 351, 351,
! 1187:
! 1188: 451, 451, 528, 351, 351, 351, 351, 351, 467, 467,
! 1189: 451, 470, 528, 470, 470, 470, 471, 363, 471, 471,
! 1190: 471, 467, 544, 362, 555, 589, 351, 351, 351, 351,
! 1191: 351, 351, 354, 354, 354, 354, 354, 354, 354, 354,
! 1192: 354, 361, 546, 572, 544, 354, 354, 354, 354, 354,
! 1193: 472, 472, 472, 472, 472, 472, 472, 472, 470, 555,
! 1194: 589, 360, 357, 471, 546, 572, 356, 338, 354, 354,
! 1195: 354, 354, 354, 354, 377, 377, 377, 377, 377, 377,
! 1196: 377, 377, 377, 472, 476, 330, 476, 476, 476, 476,
! 1197: 476, 476, 478, 478, 478, 478, 478, 478, 478, 478,
! 1198:
! 1199: 482, 329, 482, 482, 482, 482, 482, 482, 377, 378,
! 1200: 378, 378, 378, 378, 378, 378, 378, 378, 480, 476,
! 1201: 480, 480, 480, 480, 480, 480, 480, 480, 481, 529,
! 1202: 481, 481, 481, 481, 481, 481, 481, 481, 328, 529,
! 1203: 320, 319, 315, 378, 386, 574, 386, 386, 386, 386,
! 1204: 386, 386, 386, 386, 386, 389, 531, 389, 389, 389,
! 1205: 389, 389, 389, 389, 389, 389, 531, 574, 585, 389,
! 1206: 389, 389, 389, 389, 487, 487, 487, 487, 487, 487,
! 1207: 487, 487, 493, 493, 493, 493, 493, 493, 493, 493,
! 1208: 585, 314, 389, 389, 389, 389, 389, 389, 392, 392,
! 1209:
! 1210: 392, 392, 392, 392, 392, 392, 392, 311, 310, 291,
! 1211: 392, 392, 392, 392, 392, 494, 494, 494, 494, 494,
! 1212: 494, 496, 566, 496, 496, 496, 496, 496, 496, 496,
! 1213: 496, 290, 566, 392, 392, 392, 392, 392, 392, 403,
! 1214: 403, 403, 403, 403, 403, 403, 403, 403, 403, 403,
! 1215: 406, 406, 406, 406, 406, 406, 406, 406, 406, 406,
! 1216: 289, 288, 278, 277, 406, 406, 406, 406, 406, 497,
! 1217: 497, 497, 497, 497, 497, 497, 497, 497, 498, 498,
! 1218: 498, 498, 498, 498, 498, 498, 498, 406, 406, 406,
! 1219: 406, 406, 406, 423, 276, 423, 423, 423, 423, 423,
! 1220:
! 1221: 423, 423, 423, 499, 499, 499, 499, 499, 499, 499,
! 1222: 499, 499, 512, 274, 512, 512, 512, 575, 575, 513,
! 1223: 273, 513, 513, 513, 272, 271, 270, 269, 423, 424,
! 1224: 575, 424, 424, 424, 424, 424, 424, 424, 424, 514,
! 1225: 268, 514, 514, 514, 515, 267, 515, 515, 515, 251,
! 1226: 518, 250, 518, 518, 518, 249, 248, 246, 245, 512,
! 1227: 236, 235, 234, 233, 424, 425, 513, 425, 425, 425,
! 1228: 425, 425, 425, 425, 425, 516, 232, 229, 516, 516,
! 1229: 516, 516, 516, 516, 516, 516, 514, 227, 226, 225,
! 1230: 224, 515, 223, 220, 212, 517, 517, 518, 211, 517,
! 1231:
! 1232: 425, 426, 208, 426, 426, 426, 426, 426, 426, 426,
! 1233: 426, 517, 517, 517, 519, 519, 207, 523, 519, 523,
! 1234: 523, 523, 523, 523, 523, 523, 523, 200, 199, 193,
! 1235: 519, 519, 519, 190, 189, 188, 426, 436, 187, 436,
! 1236: 436, 436, 436, 436, 436, 436, 436, 436, 439, 186,
! 1237: 439, 439, 439, 439, 439, 439, 439, 439, 439, 184,
! 1238: 183, 182, 439, 439, 439, 439, 439, 524, 181, 524,
! 1239: 524, 524, 524, 524, 524, 524, 524, 530, 530, 530,
! 1240: 530, 530, 530, 530, 530, 439, 439, 439, 439, 439,
! 1241: 439, 442, 442, 442, 442, 442, 442, 442, 442, 442,
! 1242:
! 1243: 180, 179, 178, 442, 442, 442, 442, 442, 525, 177,
! 1244: 525, 525, 525, 525, 525, 525, 525, 525, 536, 536,
! 1245: 536, 536, 536, 536, 536, 536, 442, 442, 442, 442,
! 1246: 442, 442, 454, 454, 454, 454, 454, 454, 454, 454,
! 1247: 454, 454, 474, 176, 474, 474, 474, 474, 474, 474,
! 1248: 474, 474, 537, 537, 537, 537, 537, 537, 538, 175,
! 1249: 538, 538, 538, 538, 538, 538, 538, 538, 540, 540,
! 1250: 540, 540, 540, 540, 540, 540, 540, 474, 475, 169,
! 1251: 475, 475, 475, 475, 475, 475, 475, 475, 541, 541,
! 1252: 541, 541, 541, 541, 541, 541, 541, 542, 542, 542,
! 1253:
! 1254: 542, 542, 542, 542, 552, 552, 552, 552, 552, 552,
! 1255: 552, 552, 168, 475, 489, 158, 489, 489, 489, 489,
! 1256: 489, 489, 489, 489, 489, 492, 157, 492, 492, 492,
! 1257: 492, 492, 492, 492, 492, 492, 156, 152, 151, 492,
! 1258: 492, 492, 492, 492, 553, 553, 553, 553, 553, 553,
! 1259: 553, 553, 554, 554, 554, 554, 554, 554, 554, 554,
! 1260: 149, 145, 492, 492, 492, 492, 492, 492, 495, 495,
! 1261: 495, 495, 495, 495, 495, 495, 138, 134, 132, 130,
! 1262: 495, 495, 495, 495, 495, 554, 558, 122, 558, 558,
! 1263: 558, 558, 558, 558, 559, 559, 559, 559, 559, 559,
! 1264:
! 1265: 559, 559, 121, 495, 495, 495, 495, 495, 495, 520,
! 1266: 120, 520, 520, 520, 520, 520, 520, 520, 520, 119,
! 1267: 561, 558, 561, 561, 561, 561, 561, 561, 561, 561,
! 1268: 562, 118, 562, 562, 562, 562, 562, 562, 562, 562,
! 1269: 113, 112, 111, 110, 520, 521, 108, 521, 521, 521,
! 1270: 521, 521, 521, 521, 521, 563, 107, 563, 563, 563,
! 1271: 563, 563, 563, 569, 106, 569, 569, 569, 569, 569,
! 1272: 569, 569, 569, 596, 596, 596, 596, 596, 596, 102,
! 1273: 521, 522, 98, 522, 522, 522, 522, 522, 522, 522,
! 1274: 522, 579, 579, 579, 579, 579, 579, 579, 579, 580,
! 1275:
! 1276: 580, 580, 580, 580, 580, 580, 580, 581, 581, 581,
! 1277: 581, 581, 581, 581, 581, 97, 522, 532, 93, 532,
! 1278: 532, 532, 532, 532, 532, 532, 532, 532, 535, 90,
! 1279: 535, 535, 535, 535, 535, 535, 535, 535, 82, 81,
! 1280: 80, 78, 535, 535, 535, 535, 535, 73, 588, 588,
! 1281: 588, 588, 588, 588, 588, 588, 592, 66, 592, 592,
! 1282: 592, 592, 592, 592, 59, 535, 535, 535, 535, 535,
! 1283: 535, 556, 54, 556, 556, 556, 556, 556, 556, 556,
! 1284: 556, 588, 594, 594, 594, 594, 594, 594, 594, 594,
! 1285: 51, 592, 595, 595, 595, 595, 595, 595, 595, 595,
! 1286:
! 1287: 49, 41, 40, 39, 38, 37, 556, 557, 36, 557,
! 1288: 557, 557, 557, 557, 557, 557, 557, 33, 29, 23,
! 1289: 600, 600, 600, 600, 600, 600, 600, 600, 601, 601,
! 1290: 601, 601, 601, 601, 601, 601, 17, 15, 14, 13,
! 1291: 0, 0, 557, 576, 0, 576, 576, 576, 576, 576,
! 1292: 576, 576, 576, 600, 0, 0, 0, 0, 0, 0,
! 1293: 0, 601, 602, 602, 602, 602, 602, 602, 602, 602,
! 1294: 604, 604, 604, 604, 604, 604, 604, 604, 576, 577,
! 1295: 0, 577, 577, 577, 577, 577, 577, 577, 577, 0,
! 1296: 0, 0, 0, 0, 0, 602, 605, 605, 605, 605,
! 1297:
! 1298: 605, 605, 0, 604, 0, 0, 0, 0, 0, 0,
! 1299: 0, 0, 0, 0, 577, 578, 0, 578, 578, 578,
! 1300: 578, 578, 578, 578, 578, 0, 0, 0, 0, 605,
! 1301: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
! 1302: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
! 1303: 578, 590, 0, 590, 590, 590, 590, 590, 590, 590,
! 1304: 590, 0, 0, 0, 0, 0, 0, 0, 0, 0,
! 1305: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
! 1306: 0, 0, 0, 0, 0, 0, 590, 591, 0, 591,
! 1307: 591, 591, 591, 591, 591, 591, 591, 0, 0, 0,
! 1308:
! 1309: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
! 1310: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
! 1311: 0, 0, 591, 607, 607, 607, 607, 607, 607, 607,
! 1312: 607, 607, 607, 607, 607, 607, 607, 607, 607, 608,
! 1313: 608, 608, 608, 608, 608, 608, 608, 608, 608, 608,
! 1314: 608, 608, 608, 608, 608, 609, 609, 609, 609, 609,
! 1315: 609, 609, 609, 609, 609, 609, 609, 609, 609, 609,
! 1316: 609, 610, 610, 610, 610, 610, 610, 610, 610, 610,
! 1317: 610, 610, 610, 610, 610, 610, 610, 611, 0, 0,
! 1318: 0, 0, 0, 0, 0, 611, 611, 611, 0, 0,
! 1319:
! 1320: 611, 611, 611, 612, 612, 612, 612, 612, 612, 612,
! 1321: 612, 612, 612, 612, 612, 612, 612, 612, 612, 613,
! 1322: 0, 0, 0, 0, 613, 0, 0, 613, 613, 613,
! 1323: 613, 0, 613, 613, 613, 614, 0, 0, 0, 0,
! 1324: 0, 0, 0, 614, 614, 614, 0, 0, 614, 614,
! 1325: 614, 615, 0, 0, 615, 615, 0, 615, 0, 615,
! 1326: 615, 615, 0, 0, 615, 615, 615, 616, 616, 0,
! 1327: 0, 0, 616, 617, 0, 0, 617, 617, 0, 617,
! 1328: 0, 617, 617, 617, 0, 0, 617, 617, 617, 618,
! 1329: 0, 0, 618, 618, 0, 618, 0, 618, 618, 618,
! 1330:
! 1331: 0, 618, 0, 618, 618, 620, 0, 0, 620, 0,
! 1332: 0, 620, 0, 620, 620, 620, 620, 0, 620, 620,
! 1333: 620, 621, 621, 621, 621, 621, 621, 621, 621, 621,
! 1334: 621, 621, 621, 621, 621, 621, 621, 622, 622, 0,
! 1335: 622, 0, 622, 622, 622, 622, 622, 622, 622, 622,
! 1336: 622, 622, 622, 623, 623, 623, 623, 623, 623, 623,
! 1337: 623, 623, 623, 623, 623, 623, 623, 623, 623, 624,
! 1338: 624, 0, 624, 624, 624, 624, 624, 624, 624, 624,
! 1339: 624, 624, 624, 624, 624, 625, 0, 0, 0, 0,
! 1340: 625, 0, 0, 625, 625, 625, 0, 0, 625, 625,
! 1341:
! 1342: 625, 626, 0, 0, 626, 626, 0, 626, 0, 626,
! 1343: 626, 626, 0, 0, 626, 626, 626, 627, 627, 0,
! 1344: 0, 0, 627, 628, 628, 628, 0, 0, 0, 628,
! 1345: 629, 0, 0, 629, 629, 0, 629, 0, 629, 629,
! 1346: 629, 0, 0, 629, 629, 629, 630, 630, 630, 630,
! 1347: 630, 630, 630, 630, 630, 630, 630, 630, 630, 630,
! 1348: 630, 630, 631, 631, 0, 0, 0, 631, 632, 632,
! 1349: 632, 0, 0, 0, 632, 633, 633, 0, 0, 0,
! 1350: 633, 634, 634, 0, 0, 0, 634, 635, 635, 0,
! 1351: 0, 0, 635, 636, 636, 636, 0, 0, 0, 636,
! 1352:
! 1353: 637, 637, 0, 0, 0, 637, 638, 638, 0, 0,
! 1354: 0, 638, 639, 639, 0, 0, 0, 639, 640, 640,
! 1355: 640, 0, 0, 0, 640, 641, 641, 641, 641, 0,
! 1356: 0, 0, 641, 642, 642, 0, 0, 0, 642, 643,
! 1357: 643, 0, 0, 0, 643, 644, 644, 0, 0, 0,
! 1358: 644, 645, 645, 645, 0, 0, 0, 645, 646, 646,
! 1359: 646, 646, 0, 0, 0, 646, 647, 647, 0, 0,
! 1360: 0, 647, 648, 648, 0, 0, 0, 648, 649, 649,
! 1361: 649, 0, 0, 0, 649, 650, 650, 650, 650, 0,
! 1362: 0, 0, 650, 651, 651, 0, 0, 0, 651, 652,
! 1363:
! 1364: 0, 652, 652, 0, 0, 0, 652, 653, 653, 653,
! 1365: 0, 0, 0, 653, 654, 654, 654, 654, 0, 0,
! 1366: 0, 654, 655, 655, 0, 0, 0, 655, 656, 0,
! 1367: 656, 656, 0, 0, 0, 656, 657, 657, 657, 0,
! 1368: 0, 0, 657, 658, 658, 658, 0, 0, 0, 0,
! 1369: 658, 659, 659, 0, 659, 659, 659, 0, 0, 659,
! 1370: 659, 659, 0, 0, 659, 659, 659, 660, 660, 0,
! 1371: 660, 660, 660, 0, 0, 660, 660, 660, 0, 0,
! 1372: 660, 660, 660, 661, 661, 0, 0, 0, 661, 662,
! 1373: 0, 662, 662, 0, 0, 0, 662, 663, 663, 0,
! 1374:
! 1375: 0, 0, 0, 663, 664, 664, 664, 664, 664, 664,
! 1376: 664, 664, 664, 664, 664, 664, 664, 664, 664, 664,
! 1377: 665, 665, 0, 0, 0, 665, 666, 0, 666, 666,
! 1378: 0, 0, 0, 666, 667, 667, 0, 0, 0, 667,
! 1379: 668, 0, 668, 0, 0, 0, 0, 668, 670, 670,
! 1380: 670, 670, 670, 670, 670, 670, 670, 670, 670, 670,
! 1381: 670, 670, 670, 670, 606, 606, 606, 606, 606, 606,
! 1382: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 1383: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 1384: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 1385:
! 1386: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 1387: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 1388: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606,
! 1389: 606
! 1390: } ;
! 1391:
! 1392: static yy_state_type yy_last_accepting_state;
! 1393: static char *yy_last_accepting_cpos;
! 1394:
! 1395: /* The intent behind this definition is that it'll catch
! 1396: * any uses of REJECT which flex missed.
! 1397: */
! 1398: #define REJECT reject_used_but_not_detected
! 1399: #define yymore() yymore_used_but_not_detected
! 1400: #define YY_MORE_ADJ 0
! 1401: #define YY_RESTORE_YY_MORE_OFFSET
! 1402: char *yytext;
! 1403: #line 1 "toke.l"
! 1404: #define INITIAL 0
! 1405: #line 2 "toke.l"
! 1406: /*
! 1407: * Copyright (c) 1996, 1998-2005, 2007-2011
! 1408: * Todd C. Miller <Todd.Miller@courtesan.com>
! 1409: *
! 1410: * Permission to use, copy, modify, and distribute this software for any
! 1411: * purpose with or without fee is hereby granted, provided that the above
! 1412: * copyright notice and this permission notice appear in all copies.
! 1413: *
! 1414: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
! 1415: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 1416: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
! 1417: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 1418: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
! 1419: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
! 1420: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
! 1421: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
! 1422: * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
! 1423: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
! 1424: *
! 1425: * Sponsored in part by the Defense Advanced Research Projects
! 1426: * Agency (DARPA) and Air Force Research Laboratory, Air Force
! 1427: * Materiel Command, USAF, under agreement number F39502-99-1-0512.
! 1428: */
! 1429:
! 1430: #include <config.h>
! 1431:
! 1432: #include <sys/types.h>
! 1433: #include <sys/param.h>
! 1434: #include <sys/stat.h>
! 1435: #include <stdio.h>
! 1436: #ifdef STDC_HEADERS
! 1437: # include <stdlib.h>
! 1438: # include <stddef.h>
! 1439: #else
! 1440: # ifdef HAVE_STDLIB_H
! 1441: # include <stdlib.h>
! 1442: # endif
! 1443: #endif /* STDC_HEADERS */
! 1444: #ifdef HAVE_STRING_H
! 1445: # include <string.h>
! 1446: #endif /* HAVE_STRING_H */
! 1447: #ifdef HAVE_STRINGS_H
! 1448: # include <strings.h>
! 1449: #endif /* HAVE_STRINGS_H */
! 1450: #ifdef HAVE_UNISTD_H
! 1451: # include <unistd.h>
! 1452: #endif /* HAVE_UNISTD_H */
! 1453: #if defined(HAVE_MALLOC_H) && !defined(STDC_HEADERS)
! 1454: # include <malloc.h>
! 1455: #endif /* HAVE_MALLOC_H && !STDC_HEADERS */
! 1456: #ifdef HAVE_DIRENT_H
! 1457: # include <dirent.h>
! 1458: # define NAMLEN(dirent) strlen((dirent)->d_name)
! 1459: #else
! 1460: # define dirent direct
! 1461: # define NAMLEN(dirent) (dirent)->d_namlen
! 1462: # ifdef HAVE_SYS_NDIR_H
! 1463: # include <sys/ndir.h>
! 1464: # endif
! 1465: # ifdef HAVE_SYS_DIR_H
! 1466: # include <sys/dir.h>
! 1467: # endif
! 1468: # ifdef HAVE_NDIR_H
! 1469: # include <ndir.h>
! 1470: # endif
! 1471: #endif
! 1472: #include <errno.h>
! 1473: #include <ctype.h>
! 1474: #include "sudoers.h"
! 1475: #include "parse.h"
! 1476: #include "toke.h"
! 1477: #include <gram.h>
! 1478:
! 1479: extern YYSTYPE yylval;
! 1480: extern int parse_error;
! 1481: int sudolineno;
! 1482: char *sudoers;
! 1483:
! 1484: static int continued, prev_state, sawspace;
! 1485:
! 1486: static int _push_include(char *, int);
! 1487: static int pop_include(void);
! 1488: static char *parse_include(char *);
! 1489:
! 1490: #ifdef TRACELEXER
! 1491: static int sudoers_trace_print(const char *msg);
! 1492: #else
! 1493: # define sudoers_trace_print NULL
! 1494: #endif
! 1495: int (*trace_print)(const char *msg) = sudoers_trace_print;
! 1496:
! 1497: #define push_include(_p) (_push_include((_p), FALSE))
! 1498: #define push_includedir(_p) (_push_include((_p), TRUE))
! 1499: #define YY_NO_INPUT 1
! 1500: #define YY_NO_UNPUT 1
! 1501: #define GOTDEFS 1
! 1502:
! 1503: #define GOTCMND 2
! 1504:
! 1505: #define STARTDEFS 3
! 1506:
! 1507: #define INDEFS 4
! 1508:
! 1509: #define INSTR 5
! 1510:
! 1511: #line 1511 "lex.yy.c"
! 1512:
! 1513: /* Macros after this point can all be overridden by user definitions in
! 1514: * section 1.
! 1515: */
! 1516:
! 1517: #ifndef YY_SKIP_YYWRAP
! 1518: #ifdef __cplusplus
! 1519: extern "C" int yywrap YY_PROTO(( void ));
! 1520: #else
! 1521: extern int yywrap YY_PROTO(( void ));
! 1522: #endif
! 1523: #endif
! 1524:
! 1525: #ifndef YY_NO_UNPUT
! 1526: static void yyunput YY_PROTO(( int c, char *buf_ptr ));
! 1527: #endif
! 1528:
! 1529: #ifndef yytext_ptr
! 1530: static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
! 1531: #endif
! 1532:
! 1533: #ifdef YY_NEED_STRLEN
! 1534: static int yy_flex_strlen YY_PROTO(( yyconst char * ));
! 1535: #endif
! 1536:
! 1537: #ifndef YY_NO_INPUT
! 1538: #ifdef __cplusplus
! 1539: static int yyinput YY_PROTO(( void ));
! 1540: #else
! 1541: static int input YY_PROTO(( void ));
! 1542: #endif
! 1543: #endif
! 1544:
! 1545: #if defined(YY_STACK_USED) && YY_STACK_USED
! 1546: static int yy_start_stack_ptr = 0;
! 1547: static int yy_start_stack_depth = 0;
! 1548: static int *yy_start_stack = 0;
! 1549: #ifndef YY_NO_PUSH_STATE
! 1550: static void yy_push_state YY_PROTO(( int new_state ));
! 1551: #endif
! 1552: #ifndef YY_NO_POP_STATE
! 1553: static void yy_pop_state YY_PROTO(( void ));
! 1554: #endif
! 1555: #ifndef YY_NO_TOP_STATE
! 1556: static int yy_top_state YY_PROTO(( void ));
! 1557: #endif
! 1558:
! 1559: #else
! 1560: #define YY_NO_PUSH_STATE 1
! 1561: #define YY_NO_POP_STATE 1
! 1562: #define YY_NO_TOP_STATE 1
! 1563: #endif
! 1564:
! 1565: #ifdef YY_MALLOC_DECL
! 1566: YY_MALLOC_DECL
! 1567: #else
! 1568: #ifdef __STDC__
! 1569: #ifndef __cplusplus
! 1570: #include <stdlib.h>
! 1571: #endif
! 1572: #else
! 1573: /* Just try to get by without declaring the routines. This will fail
! 1574: * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
! 1575: * or sizeof(void*) != sizeof(int).
! 1576: */
! 1577: #endif
! 1578: #endif
! 1579:
! 1580: /* Amount of stuff to slurp up with each read. */
! 1581: #ifndef YY_READ_BUF_SIZE
! 1582: #define YY_READ_BUF_SIZE 8192
! 1583: #endif
! 1584:
! 1585: /* Copy whatever the last rule matched to the standard output. */
! 1586:
! 1587: #ifndef ECHO
! 1588: /* This used to be an fputs(), but since the string might contain NUL's,
! 1589: * we now use fwrite().
! 1590: */
! 1591: #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
! 1592: #endif
! 1593:
! 1594: /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
! 1595: * is returned in "result".
! 1596: */
! 1597: #ifndef YY_INPUT
! 1598: #define YY_INPUT(buf,result,max_size) \
! 1599: if ( yy_current_buffer->yy_is_interactive ) \
! 1600: { \
! 1601: int c = '*', n; \
! 1602: for ( n = 0; n < max_size && \
! 1603: (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
! 1604: buf[n] = (char) c; \
! 1605: if ( c == '\n' ) \
! 1606: buf[n++] = (char) c; \
! 1607: if ( c == EOF && ferror( yyin ) ) \
! 1608: YY_FATAL_ERROR( "input in flex scanner failed" ); \
! 1609: result = n; \
! 1610: } \
! 1611: else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
! 1612: && ferror( yyin ) ) \
! 1613: YY_FATAL_ERROR( "input in flex scanner failed" );
! 1614: #endif
! 1615:
! 1616: /* No semi-colon after return; correct usage is to write "yyterminate();" -
! 1617: * we don't want an extra ';' after the "return" because that will cause
! 1618: * some compilers to complain about unreachable statements.
! 1619: */
! 1620: #ifndef yyterminate
! 1621: #define yyterminate() return YY_NULL
! 1622: #endif
! 1623:
! 1624: /* Number of entries by which start-condition stack grows. */
! 1625: #ifndef YY_START_STACK_INCR
! 1626: #define YY_START_STACK_INCR 25
! 1627: #endif
! 1628:
! 1629: /* Report a fatal error. */
! 1630: #ifndef YY_FATAL_ERROR
! 1631: #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
! 1632: #endif
! 1633:
! 1634: /* Default declaration of generated scanner - a define so the user can
! 1635: * easily add parameters.
! 1636: */
! 1637: #ifndef YY_DECL
! 1638: #define YY_DECL int yylex YY_PROTO(( void ))
! 1639: #endif
! 1640:
! 1641: /* Code executed at the beginning of each rule, after yytext and yyleng
! 1642: * have been set up.
! 1643: */
! 1644: #ifndef YY_USER_ACTION
! 1645: #define YY_USER_ACTION
! 1646: #endif
! 1647:
! 1648: /* Code executed at the end of each rule. */
! 1649: #ifndef YY_BREAK
! 1650: #define YY_BREAK break;
! 1651: #endif
! 1652:
! 1653: #define YY_RULE_SETUP \
! 1654: if ( yyleng > 0 ) \
! 1655: yy_current_buffer->yy_at_bol = \
! 1656: (yytext[yyleng - 1] == '\n'); \
! 1657: YY_USER_ACTION
! 1658:
! 1659: YY_DECL
! 1660: {
! 1661: register yy_state_type yy_current_state;
! 1662: register char *yy_cp, *yy_bp;
! 1663: register int yy_act;
! 1664:
! 1665: #line 119 "toke.l"
! 1666:
! 1667: #line 1667 "lex.yy.c"
! 1668:
! 1669: if ( yy_init )
! 1670: {
! 1671: yy_init = 0;
! 1672:
! 1673: #ifdef YY_USER_INIT
! 1674: YY_USER_INIT;
! 1675: #endif
! 1676:
! 1677: if ( ! yy_start )
! 1678: yy_start = 1; /* first start state */
! 1679:
! 1680: if ( ! yyin )
! 1681: yyin = stdin;
! 1682:
! 1683: if ( ! yyout )
! 1684: yyout = stdout;
! 1685:
! 1686: if ( ! yy_current_buffer )
! 1687: yy_current_buffer =
! 1688: yy_create_buffer( yyin, YY_BUF_SIZE );
! 1689:
! 1690: yy_load_buffer_state();
! 1691: }
! 1692:
! 1693: while ( 1 ) /* loops until end-of-file is reached */
! 1694: {
! 1695: yy_cp = yy_c_buf_p;
! 1696:
! 1697: /* Support of yytext. */
! 1698: *yy_cp = yy_hold_char;
! 1699:
! 1700: /* yy_bp points to the position in yy_ch_buf of the start of
! 1701: * the current run.
! 1702: */
! 1703: yy_bp = yy_cp;
! 1704:
! 1705: yy_current_state = yy_start;
! 1706: yy_current_state += YY_AT_BOL();
! 1707: yy_match:
! 1708: do
! 1709: {
! 1710: register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
! 1711: if ( yy_accept[yy_current_state] )
! 1712: {
! 1713: yy_last_accepting_state = yy_current_state;
! 1714: yy_last_accepting_cpos = yy_cp;
! 1715: }
! 1716: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
! 1717: {
! 1718: yy_current_state = (int) yy_def[yy_current_state];
! 1719: if ( yy_current_state >= 607 )
! 1720: yy_c = yy_meta[(unsigned int) yy_c];
! 1721: }
! 1722: yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
! 1723: ++yy_cp;
! 1724: }
! 1725: while ( yy_base[yy_current_state] != 3665 );
! 1726:
! 1727: yy_find_action:
! 1728: yy_act = yy_accept[yy_current_state];
! 1729: if ( yy_act == 0 )
! 1730: { /* have to back up */
! 1731: yy_cp = yy_last_accepting_cpos;
! 1732: yy_current_state = yy_last_accepting_state;
! 1733: yy_act = yy_accept[yy_current_state];
! 1734: }
! 1735:
! 1736: YY_DO_BEFORE_ACTION;
! 1737:
! 1738:
! 1739: do_action: /* This label is used only to access EOF actions. */
! 1740:
! 1741:
! 1742: switch ( yy_act )
! 1743: { /* beginning of action switch */
! 1744: case 0: /* must back up */
! 1745: /* undo the effects of YY_DO_BEFORE_ACTION */
! 1746: *yy_cp = yy_hold_char;
! 1747: yy_cp = yy_last_accepting_cpos;
! 1748: yy_current_state = yy_last_accepting_state;
! 1749: goto yy_find_action;
! 1750:
! 1751: case 1:
! 1752: YY_RULE_SETUP
! 1753: #line 120 "toke.l"
! 1754: {
! 1755: LEXTRACE(", ");
! 1756: return ',';
! 1757: } /* return ',' */
! 1758: YY_BREAK
! 1759: case 2:
! 1760: YY_RULE_SETUP
! 1761: #line 125 "toke.l"
! 1762: BEGIN STARTDEFS;
! 1763: YY_BREAK
! 1764: case 3:
! 1765: YY_RULE_SETUP
! 1766: #line 127 "toke.l"
! 1767: {
! 1768: BEGIN INDEFS;
! 1769: LEXTRACE("DEFVAR ");
! 1770: if (!fill(yytext, yyleng))
! 1771: yyterminate();
! 1772: return DEFVAR;
! 1773: }
! 1774: YY_BREAK
! 1775:
! 1776: case 4:
! 1777: YY_RULE_SETUP
! 1778: #line 136 "toke.l"
! 1779: {
! 1780: BEGIN STARTDEFS;
! 1781: LEXTRACE(", ");
! 1782: return ',';
! 1783: } /* return ',' */
! 1784: YY_BREAK
! 1785: case 5:
! 1786: YY_RULE_SETUP
! 1787: #line 142 "toke.l"
! 1788: {
! 1789: LEXTRACE("= ");
! 1790: return '=';
! 1791: } /* return '=' */
! 1792: YY_BREAK
! 1793: case 6:
! 1794: YY_RULE_SETUP
! 1795: #line 147 "toke.l"
! 1796: {
! 1797: LEXTRACE("+= ");
! 1798: return '+';
! 1799: } /* return '+' */
! 1800: YY_BREAK
! 1801: case 7:
! 1802: YY_RULE_SETUP
! 1803: #line 152 "toke.l"
! 1804: {
! 1805: LEXTRACE("-= ");
! 1806: return '-';
! 1807: } /* return '-' */
! 1808: YY_BREAK
! 1809: case 8:
! 1810: YY_RULE_SETUP
! 1811: #line 157 "toke.l"
! 1812: {
! 1813: LEXTRACE("BEGINSTR ");
! 1814: yylval.string = NULL;
! 1815: prev_state = YY_START;
! 1816: BEGIN INSTR;
! 1817: }
! 1818: YY_BREAK
! 1819: case 9:
! 1820: YY_RULE_SETUP
! 1821: #line 164 "toke.l"
! 1822: {
! 1823: LEXTRACE("WORD(2) ");
! 1824: if (!fill(yytext, yyleng))
! 1825: yyterminate();
! 1826: return WORD;
! 1827: }
! 1828: YY_BREAK
! 1829:
! 1830:
! 1831: case 10:
! 1832: YY_RULE_SETUP
! 1833: #line 173 "toke.l"
! 1834: {
! 1835: /* Line continuation char followed by newline. */
! 1836: ++sudolineno;
! 1837: continued = TRUE;
! 1838: }
! 1839: YY_BREAK
! 1840: case 11:
! 1841: YY_RULE_SETUP
! 1842: #line 179 "toke.l"
! 1843: {
! 1844: LEXTRACE("ENDSTR ");
! 1845: BEGIN prev_state;
! 1846:
! 1847: if (yylval.string == NULL) {
! 1848: LEXTRACE("ERROR "); /* empty string */
! 1849: return ERROR;
! 1850: }
! 1851: if (prev_state == INITIAL) {
! 1852: switch (yylval.string[0]) {
! 1853: case '%':
! 1854: if (yylval.string[1] == '\0' ||
! 1855: (yylval.string[1] == ':' &&
! 1856: yylval.string[2] == '\0')) {
! 1857: LEXTRACE("ERROR "); /* empty group */
! 1858: return ERROR;
! 1859: }
! 1860: LEXTRACE("USERGROUP ");
! 1861: return USERGROUP;
! 1862: case '+':
! 1863: if (yylval.string[1] == '\0') {
! 1864: LEXTRACE("ERROR "); /* empty netgroup */
! 1865: return ERROR;
! 1866: }
! 1867: LEXTRACE("NETGROUP ");
! 1868: return NETGROUP;
! 1869: }
! 1870: }
! 1871: LEXTRACE("WORD(4) ");
! 1872: return WORD;
! 1873: }
! 1874: YY_BREAK
! 1875: case 12:
! 1876: YY_RULE_SETUP
! 1877: #line 211 "toke.l"
! 1878: {
! 1879: LEXTRACE("BACKSLASH ");
! 1880: if (!append(yytext, yyleng))
! 1881: yyterminate();
! 1882: }
! 1883: YY_BREAK
! 1884: case 13:
! 1885: YY_RULE_SETUP
! 1886: #line 217 "toke.l"
! 1887: {
! 1888: LEXTRACE("STRBODY ");
! 1889: if (!append(yytext, yyleng))
! 1890: yyterminate();
! 1891: }
! 1892: YY_BREAK
! 1893:
! 1894:
! 1895: case 14:
! 1896: YY_RULE_SETUP
! 1897: #line 225 "toke.l"
! 1898: {
! 1899: /* quoted fnmatch glob char, pass verbatim */
! 1900: LEXTRACE("QUOTEDCHAR ");
! 1901: if (!fill_args(yytext, 2, sawspace))
! 1902: yyterminate();
! 1903: sawspace = FALSE;
! 1904: }
! 1905: YY_BREAK
! 1906: case 15:
! 1907: YY_RULE_SETUP
! 1908: #line 233 "toke.l"
! 1909: {
! 1910: /* quoted sudoers special char, strip backslash */
! 1911: LEXTRACE("QUOTEDCHAR ");
! 1912: if (!fill_args(yytext + 1, 1, sawspace))
! 1913: yyterminate();
! 1914: sawspace = FALSE;
! 1915: }
! 1916: YY_BREAK
! 1917: case 16:
! 1918: YY_RULE_SETUP
! 1919: #line 241 "toke.l"
! 1920: {
! 1921: BEGIN INITIAL;
! 1922: yyless(0);
! 1923: return COMMAND;
! 1924: } /* end of command line args */
! 1925: YY_BREAK
! 1926: case 17:
! 1927: YY_RULE_SETUP
! 1928: #line 247 "toke.l"
! 1929: {
! 1930: LEXTRACE("ARG ");
! 1931: if (!fill_args(yytext, yyleng, sawspace))
! 1932: yyterminate();
! 1933: sawspace = FALSE;
! 1934: } /* a command line arg */
! 1935: YY_BREAK
! 1936:
! 1937: case 18:
! 1938: YY_RULE_SETUP
! 1939: #line 255 "toke.l"
! 1940: {
! 1941: char *path;
! 1942:
! 1943: if (continued) {
! 1944: LEXTRACE("ERROR ");
! 1945: return ERROR;
! 1946: }
! 1947:
! 1948: if ((path = parse_include(yytext)) == NULL)
! 1949: yyterminate();
! 1950:
! 1951: LEXTRACE("INCLUDE\n");
! 1952:
! 1953: /* Push current buffer and switch to include file */
! 1954: if (!push_include(path))
! 1955: yyterminate();
! 1956: }
! 1957: YY_BREAK
! 1958: case 19:
! 1959: YY_RULE_SETUP
! 1960: #line 273 "toke.l"
! 1961: {
! 1962: char *path;
! 1963:
! 1964: if (continued) {
! 1965: LEXTRACE("ERROR ");
! 1966: return ERROR;
! 1967: }
! 1968:
! 1969: if ((path = parse_include(yytext)) == NULL)
! 1970: yyterminate();
! 1971:
! 1972: LEXTRACE("INCLUDEDIR\n");
! 1973:
! 1974: /*
! 1975: * Push current buffer and switch to include file.
! 1976: * We simply ignore empty directories.
! 1977: */
! 1978: if (!push_includedir(path) && parse_error)
! 1979: yyterminate();
! 1980: }
! 1981: YY_BREAK
! 1982: case 20:
! 1983: YY_RULE_SETUP
! 1984: #line 294 "toke.l"
! 1985: {
! 1986: char deftype;
! 1987: int n;
! 1988:
! 1989: if (continued) {
! 1990: LEXTRACE("ERROR ");
! 1991: return ERROR;
! 1992: }
! 1993:
! 1994: for (n = 0; isblank((unsigned char)yytext[n]); n++)
! 1995: continue;
! 1996: n += sizeof("Defaults") - 1;
! 1997: if ((deftype = yytext[n++]) != '\0') {
! 1998: while (isblank((unsigned char)yytext[n]))
! 1999: n++;
! 2000: }
! 2001: BEGIN GOTDEFS;
! 2002: switch (deftype) {
! 2003: case ':':
! 2004: yyless(n);
! 2005: LEXTRACE("DEFAULTS_USER ");
! 2006: return DEFAULTS_USER;
! 2007: case '>':
! 2008: yyless(n);
! 2009: LEXTRACE("DEFAULTS_RUNAS ");
! 2010: return DEFAULTS_RUNAS;
! 2011: case '@':
! 2012: yyless(n);
! 2013: LEXTRACE("DEFAULTS_HOST ");
! 2014: return DEFAULTS_HOST;
! 2015: case '!':
! 2016: yyless(n);
! 2017: LEXTRACE("DEFAULTS_CMND ");
! 2018: return DEFAULTS_CMND;
! 2019: default:
! 2020: LEXTRACE("DEFAULTS ");
! 2021: return DEFAULTS;
! 2022: }
! 2023: }
! 2024: YY_BREAK
! 2025: case 21:
! 2026: YY_RULE_SETUP
! 2027: #line 334 "toke.l"
! 2028: {
! 2029: int n;
! 2030:
! 2031: if (continued) {
! 2032: LEXTRACE("ERROR ");
! 2033: return ERROR;
! 2034: }
! 2035:
! 2036: for (n = 0; isblank((unsigned char)yytext[n]); n++)
! 2037: continue;
! 2038: switch (yytext[n]) {
! 2039: case 'H':
! 2040: LEXTRACE("HOSTALIAS ");
! 2041: return HOSTALIAS;
! 2042: case 'C':
! 2043: LEXTRACE("CMNDALIAS ");
! 2044: return CMNDALIAS;
! 2045: case 'U':
! 2046: LEXTRACE("USERALIAS ");
! 2047: return USERALIAS;
! 2048: case 'R':
! 2049: LEXTRACE("RUNASALIAS ");
! 2050: return RUNASALIAS;
! 2051: }
! 2052: }
! 2053: YY_BREAK
! 2054: case 22:
! 2055: YY_RULE_SETUP
! 2056: #line 360 "toke.l"
! 2057: {
! 2058: /* cmnd does not require passwd for this user */
! 2059: LEXTRACE("NOPASSWD ");
! 2060: return NOPASSWD;
! 2061: }
! 2062: YY_BREAK
! 2063: case 23:
! 2064: YY_RULE_SETUP
! 2065: #line 366 "toke.l"
! 2066: {
! 2067: /* cmnd requires passwd for this user */
! 2068: LEXTRACE("PASSWD ");
! 2069: return PASSWD;
! 2070: }
! 2071: YY_BREAK
! 2072: case 24:
! 2073: YY_RULE_SETUP
! 2074: #line 372 "toke.l"
! 2075: {
! 2076: LEXTRACE("NOEXEC ");
! 2077: return NOEXEC;
! 2078: }
! 2079: YY_BREAK
! 2080: case 25:
! 2081: YY_RULE_SETUP
! 2082: #line 377 "toke.l"
! 2083: {
! 2084: LEXTRACE("EXEC ");
! 2085: return EXEC;
! 2086: }
! 2087: YY_BREAK
! 2088: case 26:
! 2089: YY_RULE_SETUP
! 2090: #line 382 "toke.l"
! 2091: {
! 2092: LEXTRACE("SETENV ");
! 2093: return SETENV;
! 2094: }
! 2095: YY_BREAK
! 2096: case 27:
! 2097: YY_RULE_SETUP
! 2098: #line 387 "toke.l"
! 2099: {
! 2100: LEXTRACE("NOSETENV ");
! 2101: return NOSETENV;
! 2102: }
! 2103: YY_BREAK
! 2104: case 28:
! 2105: YY_RULE_SETUP
! 2106: #line 392 "toke.l"
! 2107: {
! 2108: LEXTRACE("LOG_OUTPUT ");
! 2109: return LOG_OUTPUT;
! 2110: }
! 2111: YY_BREAK
! 2112: case 29:
! 2113: YY_RULE_SETUP
! 2114: #line 397 "toke.l"
! 2115: {
! 2116: LEXTRACE("NOLOG_OUTPUT ");
! 2117: return NOLOG_OUTPUT;
! 2118: }
! 2119: YY_BREAK
! 2120: case 30:
! 2121: YY_RULE_SETUP
! 2122: #line 402 "toke.l"
! 2123: {
! 2124: LEXTRACE("LOG_INPUT ");
! 2125: return LOG_INPUT;
! 2126: }
! 2127: YY_BREAK
! 2128: case 31:
! 2129: YY_RULE_SETUP
! 2130: #line 407 "toke.l"
! 2131: {
! 2132: LEXTRACE("NOLOG_INPUT ");
! 2133: return NOLOG_INPUT;
! 2134: }
! 2135: YY_BREAK
! 2136: case 32:
! 2137: YY_RULE_SETUP
! 2138: #line 412 "toke.l"
! 2139: {
! 2140: /* empty group or netgroup */
! 2141: LEXTRACE("ERROR ");
! 2142: return ERROR;
! 2143: }
! 2144: YY_BREAK
! 2145: case 33:
! 2146: YY_RULE_SETUP
! 2147: #line 418 "toke.l"
! 2148: {
! 2149: /* netgroup */
! 2150: if (!fill(yytext, yyleng))
! 2151: yyterminate();
! 2152: LEXTRACE("NETGROUP ");
! 2153: return NETGROUP;
! 2154: }
! 2155: YY_BREAK
! 2156: case 34:
! 2157: YY_RULE_SETUP
! 2158: #line 426 "toke.l"
! 2159: {
! 2160: /* group */
! 2161: if (!fill(yytext, yyleng))
! 2162: yyterminate();
! 2163: LEXTRACE("USERGROUP ");
! 2164: return USERGROUP;
! 2165: }
! 2166: YY_BREAK
! 2167: case 35:
! 2168: YY_RULE_SETUP
! 2169: #line 434 "toke.l"
! 2170: {
! 2171: if (!fill(yytext, yyleng))
! 2172: yyterminate();
! 2173: LEXTRACE("NTWKADDR ");
! 2174: return NTWKADDR;
! 2175: }
! 2176: YY_BREAK
! 2177: case 36:
! 2178: YY_RULE_SETUP
! 2179: #line 441 "toke.l"
! 2180: {
! 2181: if (!fill(yytext, yyleng))
! 2182: yyterminate();
! 2183: LEXTRACE("NTWKADDR ");
! 2184: return NTWKADDR;
! 2185: }
! 2186: YY_BREAK
! 2187: case 37:
! 2188: YY_RULE_SETUP
! 2189: #line 448 "toke.l"
! 2190: {
! 2191: if (!ipv6_valid(yytext)) {
! 2192: LEXTRACE("ERROR ");
! 2193: return ERROR;
! 2194: }
! 2195: if (!fill(yytext, yyleng))
! 2196: yyterminate();
! 2197: LEXTRACE("NTWKADDR ");
! 2198: return NTWKADDR;
! 2199: }
! 2200: YY_BREAK
! 2201: case 38:
! 2202: YY_RULE_SETUP
! 2203: #line 459 "toke.l"
! 2204: {
! 2205: if (!ipv6_valid(yytext)) {
! 2206: LEXTRACE("ERROR ");
! 2207: return ERROR;
! 2208: }
! 2209: if (!fill(yytext, yyleng))
! 2210: yyterminate();
! 2211: LEXTRACE("NTWKADDR ");
! 2212: return NTWKADDR;
! 2213: }
! 2214: YY_BREAK
! 2215: case 39:
! 2216: YY_RULE_SETUP
! 2217: #line 470 "toke.l"
! 2218: {
! 2219: LEXTRACE("ALL ");
! 2220: return ALL;
! 2221:
! 2222: }
! 2223: YY_BREAK
! 2224: case 40:
! 2225: YY_RULE_SETUP
! 2226: #line 476 "toke.l"
! 2227: {
! 2228: #ifdef HAVE_SELINUX
! 2229: LEXTRACE("ROLE ");
! 2230: return ROLE;
! 2231: #else
! 2232: goto got_alias;
! 2233: #endif
! 2234: }
! 2235: YY_BREAK
! 2236: case 41:
! 2237: YY_RULE_SETUP
! 2238: #line 485 "toke.l"
! 2239: {
! 2240: #ifdef HAVE_SELINUX
! 2241: LEXTRACE("TYPE ");
! 2242: return TYPE;
! 2243: #else
! 2244: goto got_alias;
! 2245: #endif
! 2246: }
! 2247: YY_BREAK
! 2248: case 42:
! 2249: YY_RULE_SETUP
! 2250: #line 494 "toke.l"
! 2251: {
! 2252: #ifndef HAVE_SELINUX
! 2253: got_alias:
! 2254: #endif
! 2255: if (!fill(yytext, yyleng))
! 2256: yyterminate();
! 2257: LEXTRACE("ALIAS ");
! 2258: return ALIAS;
! 2259: }
! 2260: YY_BREAK
! 2261: case 43:
! 2262: YY_RULE_SETUP
! 2263: #line 504 "toke.l"
! 2264: {
! 2265: /* no command args allowed for Defaults!/path */
! 2266: if (!fill_cmnd(yytext, yyleng))
! 2267: yyterminate();
! 2268: LEXTRACE("COMMAND ");
! 2269: return COMMAND;
! 2270: }
! 2271: YY_BREAK
! 2272: case 44:
! 2273: YY_RULE_SETUP
! 2274: #line 512 "toke.l"
! 2275: {
! 2276: BEGIN GOTCMND;
! 2277: LEXTRACE("COMMAND ");
! 2278: if (!fill_cmnd(yytext, yyleng))
! 2279: yyterminate();
! 2280: } /* sudo -e */
! 2281: YY_BREAK
! 2282: case 45:
! 2283: YY_RULE_SETUP
! 2284: #line 519 "toke.l"
! 2285: {
! 2286: /* directories can't have args... */
! 2287: if (yytext[yyleng - 1] == '/') {
! 2288: LEXTRACE("COMMAND ");
! 2289: if (!fill_cmnd(yytext, yyleng))
! 2290: yyterminate();
! 2291: return COMMAND;
! 2292: } else {
! 2293: BEGIN GOTCMND;
! 2294: LEXTRACE("COMMAND ");
! 2295: if (!fill_cmnd(yytext, yyleng))
! 2296: yyterminate();
! 2297: }
! 2298: } /* a pathname */
! 2299: YY_BREAK
! 2300: case 46:
! 2301: YY_RULE_SETUP
! 2302: #line 534 "toke.l"
! 2303: {
! 2304: LEXTRACE("BEGINSTR ");
! 2305: yylval.string = NULL;
! 2306: prev_state = YY_START;
! 2307: BEGIN INSTR;
! 2308: }
! 2309: YY_BREAK
! 2310: case 47:
! 2311: YY_RULE_SETUP
! 2312: #line 541 "toke.l"
! 2313: {
! 2314: /* a word */
! 2315: if (!fill(yytext, yyleng))
! 2316: yyterminate();
! 2317: LEXTRACE("WORD(5) ");
! 2318: return WORD;
! 2319: }
! 2320: YY_BREAK
! 2321: case 48:
! 2322: YY_RULE_SETUP
! 2323: #line 549 "toke.l"
! 2324: {
! 2325: LEXTRACE("( ");
! 2326: return '(';
! 2327: }
! 2328: YY_BREAK
! 2329: case 49:
! 2330: YY_RULE_SETUP
! 2331: #line 554 "toke.l"
! 2332: {
! 2333: LEXTRACE(") ");
! 2334: return ')';
! 2335: }
! 2336: YY_BREAK
! 2337: case 50:
! 2338: YY_RULE_SETUP
! 2339: #line 559 "toke.l"
! 2340: {
! 2341: LEXTRACE(", ");
! 2342: return ',';
! 2343: } /* return ',' */
! 2344: YY_BREAK
! 2345: case 51:
! 2346: YY_RULE_SETUP
! 2347: #line 564 "toke.l"
! 2348: {
! 2349: LEXTRACE("= ");
! 2350: return '=';
! 2351: } /* return '=' */
! 2352: YY_BREAK
! 2353: case 52:
! 2354: YY_RULE_SETUP
! 2355: #line 569 "toke.l"
! 2356: {
! 2357: LEXTRACE(": ");
! 2358: return ':';
! 2359: } /* return ':' */
! 2360: YY_BREAK
! 2361: case 53:
! 2362: YY_RULE_SETUP
! 2363: #line 574 "toke.l"
! 2364: {
! 2365: if (yyleng & 1) {
! 2366: LEXTRACE("!");
! 2367: return '!'; /* return '!' */
! 2368: }
! 2369: }
! 2370: YY_BREAK
! 2371: case 54:
! 2372: YY_RULE_SETUP
! 2373: #line 581 "toke.l"
! 2374: {
! 2375: if (YY_START == INSTR) {
! 2376: LEXTRACE("ERROR ");
! 2377: return ERROR; /* line break in string */
! 2378: }
! 2379: BEGIN INITIAL;
! 2380: ++sudolineno;
! 2381: continued = FALSE;
! 2382: LEXTRACE("\n");
! 2383: return COMMENT;
! 2384: } /* return newline */
! 2385: YY_BREAK
! 2386: case 55:
! 2387: YY_RULE_SETUP
! 2388: #line 593 "toke.l"
! 2389: { /* throw away space/tabs */
! 2390: sawspace = TRUE; /* but remember for fill_args */
! 2391: }
! 2392: YY_BREAK
! 2393: case 56:
! 2394: YY_RULE_SETUP
! 2395: #line 597 "toke.l"
! 2396: {
! 2397: sawspace = TRUE; /* remember for fill_args */
! 2398: ++sudolineno;
! 2399: continued = TRUE;
! 2400: } /* throw away EOL after \ */
! 2401: YY_BREAK
! 2402: case 57:
! 2403: YY_RULE_SETUP
! 2404: #line 603 "toke.l"
! 2405: {
! 2406: BEGIN INITIAL;
! 2407: ++sudolineno;
! 2408: continued = FALSE;
! 2409: LEXTRACE("#\n");
! 2410: return COMMENT;
! 2411: } /* comment, not uid/gid */
! 2412: YY_BREAK
! 2413: case 58:
! 2414: YY_RULE_SETUP
! 2415: #line 611 "toke.l"
! 2416: {
! 2417: LEXTRACE("ERROR ");
! 2418: return ERROR;
! 2419: } /* parse error */
! 2420: YY_BREAK
! 2421: case YY_STATE_EOF(INITIAL):
! 2422: case YY_STATE_EOF(GOTDEFS):
! 2423: case YY_STATE_EOF(GOTCMND):
! 2424: case YY_STATE_EOF(STARTDEFS):
! 2425: case YY_STATE_EOF(INDEFS):
! 2426: case YY_STATE_EOF(INSTR):
! 2427: #line 616 "toke.l"
! 2428: {
! 2429: if (YY_START != INITIAL) {
! 2430: BEGIN INITIAL;
! 2431: LEXTRACE("ERROR ");
! 2432: return ERROR;
! 2433: }
! 2434: if (!pop_include())
! 2435: yyterminate();
! 2436: }
! 2437: YY_BREAK
! 2438: case 59:
! 2439: YY_RULE_SETUP
! 2440: #line 626 "toke.l"
! 2441: ECHO;
! 2442: YY_BREAK
! 2443: #line 2443 "lex.yy.c"
! 2444:
! 2445: case YY_END_OF_BUFFER:
! 2446: {
! 2447: /* Amount of text matched not including the EOB char. */
! 2448: int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
! 2449:
! 2450: /* Undo the effects of YY_DO_BEFORE_ACTION. */
! 2451: *yy_cp = yy_hold_char;
! 2452: YY_RESTORE_YY_MORE_OFFSET
! 2453:
! 2454: if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
! 2455: {
! 2456: /* We're scanning a new file or input source. It's
! 2457: * possible that this happened because the user
! 2458: * just pointed yyin at a new source and called
! 2459: * yylex(). If so, then we have to assure
! 2460: * consistency between yy_current_buffer and our
! 2461: * globals. Here is the right place to do so, because
! 2462: * this is the first action (other than possibly a
! 2463: * back-up) that will match for the new input source.
! 2464: */
! 2465: yy_n_chars = yy_current_buffer->yy_n_chars;
! 2466: yy_current_buffer->yy_input_file = yyin;
! 2467: yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
! 2468: }
! 2469:
! 2470: /* Note that here we test for yy_c_buf_p "<=" to the position
! 2471: * of the first EOB in the buffer, since yy_c_buf_p will
! 2472: * already have been incremented past the NUL character
! 2473: * (since all states make transitions on EOB to the
! 2474: * end-of-buffer state). Contrast this with the test
! 2475: * in input().
! 2476: */
! 2477: if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
! 2478: { /* This was really a NUL. */
! 2479: yy_state_type yy_next_state;
! 2480:
! 2481: yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
! 2482:
! 2483: yy_current_state = yy_get_previous_state();
! 2484:
! 2485: /* Okay, we're now positioned to make the NUL
! 2486: * transition. We couldn't have
! 2487: * yy_get_previous_state() go ahead and do it
! 2488: * for us because it doesn't know how to deal
! 2489: * with the possibility of jamming (and we don't
! 2490: * want to build jamming into it because then it
! 2491: * will run more slowly).
! 2492: */
! 2493:
! 2494: yy_next_state = yy_try_NUL_trans( yy_current_state );
! 2495:
! 2496: yy_bp = yytext_ptr + YY_MORE_ADJ;
! 2497:
! 2498: if ( yy_next_state )
! 2499: {
! 2500: /* Consume the NUL. */
! 2501: yy_cp = ++yy_c_buf_p;
! 2502: yy_current_state = yy_next_state;
! 2503: goto yy_match;
! 2504: }
! 2505:
! 2506: else
! 2507: {
! 2508: yy_cp = yy_c_buf_p;
! 2509: goto yy_find_action;
! 2510: }
! 2511: }
! 2512:
! 2513: else switch ( yy_get_next_buffer() )
! 2514: {
! 2515: case EOB_ACT_END_OF_FILE:
! 2516: {
! 2517: yy_did_buffer_switch_on_eof = 0;
! 2518:
! 2519: if ( yywrap() )
! 2520: {
! 2521: /* Note: because we've taken care in
! 2522: * yy_get_next_buffer() to have set up
! 2523: * yytext, we can now set up
! 2524: * yy_c_buf_p so that if some total
! 2525: * hoser (like flex itself) wants to
! 2526: * call the scanner after we return the
! 2527: * YY_NULL, it'll still work - another
! 2528: * YY_NULL will get returned.
! 2529: */
! 2530: yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
! 2531:
! 2532: yy_act = YY_STATE_EOF(YY_START);
! 2533: goto do_action;
! 2534: }
! 2535:
! 2536: else
! 2537: {
! 2538: if ( ! yy_did_buffer_switch_on_eof )
! 2539: YY_NEW_FILE;
! 2540: }
! 2541: break;
! 2542: }
! 2543:
! 2544: case EOB_ACT_CONTINUE_SCAN:
! 2545: yy_c_buf_p =
! 2546: yytext_ptr + yy_amount_of_matched_text;
! 2547:
! 2548: yy_current_state = yy_get_previous_state();
! 2549:
! 2550: yy_cp = yy_c_buf_p;
! 2551: yy_bp = yytext_ptr + YY_MORE_ADJ;
! 2552: goto yy_match;
! 2553:
! 2554: case EOB_ACT_LAST_MATCH:
! 2555: yy_c_buf_p =
! 2556: &yy_current_buffer->yy_ch_buf[yy_n_chars];
! 2557:
! 2558: yy_current_state = yy_get_previous_state();
! 2559:
! 2560: yy_cp = yy_c_buf_p;
! 2561: yy_bp = yytext_ptr + YY_MORE_ADJ;
! 2562: goto yy_find_action;
! 2563: }
! 2564: break;
! 2565: }
! 2566:
! 2567: default:
! 2568: YY_FATAL_ERROR(
! 2569: "fatal flex scanner internal error--no action found" );
! 2570: } /* end of action switch */
! 2571: } /* end of scanning one token */
! 2572: } /* end of yylex */
! 2573:
! 2574:
! 2575: /* yy_get_next_buffer - try to read in a new buffer
! 2576: *
! 2577: * Returns a code representing an action:
! 2578: * EOB_ACT_LAST_MATCH -
! 2579: * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
! 2580: * EOB_ACT_END_OF_FILE - end of file
! 2581: */
! 2582:
! 2583: static int yy_get_next_buffer()
! 2584: {
! 2585: register char *dest = yy_current_buffer->yy_ch_buf;
! 2586: register char *source = yytext_ptr;
! 2587: register int number_to_move, i;
! 2588: int ret_val;
! 2589:
! 2590: if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
! 2591: YY_FATAL_ERROR(
! 2592: "fatal flex scanner internal error--end of buffer missed" );
! 2593:
! 2594: if ( yy_current_buffer->yy_fill_buffer == 0 )
! 2595: { /* Don't try to fill the buffer, so this is an EOF. */
! 2596: if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
! 2597: {
! 2598: /* We matched a single character, the EOB, so
! 2599: * treat this as a final EOF.
! 2600: */
! 2601: return EOB_ACT_END_OF_FILE;
! 2602: }
! 2603:
! 2604: else
! 2605: {
! 2606: /* We matched some text prior to the EOB, first
! 2607: * process it.
! 2608: */
! 2609: return EOB_ACT_LAST_MATCH;
! 2610: }
! 2611: }
! 2612:
! 2613: /* Try to read more data. */
! 2614:
! 2615: /* First move last chars to start of buffer. */
! 2616: number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
! 2617:
! 2618: for ( i = 0; i < number_to_move; ++i )
! 2619: *(dest++) = *(source++);
! 2620:
! 2621: if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
! 2622: /* don't do the read, it's not guaranteed to return an EOF,
! 2623: * just force an EOF
! 2624: */
! 2625: yy_current_buffer->yy_n_chars = yy_n_chars = 0;
! 2626:
! 2627: else
! 2628: {
! 2629: int num_to_read =
! 2630: yy_current_buffer->yy_buf_size - number_to_move - 1;
! 2631:
! 2632: while ( num_to_read <= 0 )
! 2633: { /* Not enough room in the buffer - grow it. */
! 2634: #ifdef YY_USES_REJECT
! 2635: YY_FATAL_ERROR(
! 2636: "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
! 2637: #else
! 2638:
! 2639: /* just a shorter name for the current buffer */
! 2640: YY_BUFFER_STATE b = yy_current_buffer;
! 2641:
! 2642: int yy_c_buf_p_offset =
! 2643: (int) (yy_c_buf_p - b->yy_ch_buf);
! 2644:
! 2645: if ( b->yy_is_our_buffer )
! 2646: {
! 2647: int new_size = b->yy_buf_size * 2;
! 2648:
! 2649: if ( new_size <= 0 )
! 2650: b->yy_buf_size += b->yy_buf_size / 8;
! 2651: else
! 2652: b->yy_buf_size *= 2;
! 2653:
! 2654: b->yy_ch_buf = (char *)
! 2655: /* Include room in for 2 EOB chars. */
! 2656: yy_flex_realloc( (void *) b->yy_ch_buf,
! 2657: b->yy_buf_size + 2 );
! 2658: }
! 2659: else
! 2660: /* Can't grow it, we don't own it. */
! 2661: b->yy_ch_buf = 0;
! 2662:
! 2663: if ( ! b->yy_ch_buf )
! 2664: YY_FATAL_ERROR(
! 2665: "fatal error - scanner input buffer overflow" );
! 2666:
! 2667: yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
! 2668:
! 2669: num_to_read = yy_current_buffer->yy_buf_size -
! 2670: number_to_move - 1;
! 2671: #endif
! 2672: }
! 2673:
! 2674: if ( num_to_read > YY_READ_BUF_SIZE )
! 2675: num_to_read = YY_READ_BUF_SIZE;
! 2676:
! 2677: /* Read in more data. */
! 2678: YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
! 2679: yy_n_chars, num_to_read );
! 2680:
! 2681: yy_current_buffer->yy_n_chars = yy_n_chars;
! 2682: }
! 2683:
! 2684: if ( yy_n_chars == 0 )
! 2685: {
! 2686: if ( number_to_move == YY_MORE_ADJ )
! 2687: {
! 2688: ret_val = EOB_ACT_END_OF_FILE;
! 2689: yyrestart( yyin );
! 2690: }
! 2691:
! 2692: else
! 2693: {
! 2694: ret_val = EOB_ACT_LAST_MATCH;
! 2695: yy_current_buffer->yy_buffer_status =
! 2696: YY_BUFFER_EOF_PENDING;
! 2697: }
! 2698: }
! 2699:
! 2700: else
! 2701: ret_val = EOB_ACT_CONTINUE_SCAN;
! 2702:
! 2703: yy_n_chars += number_to_move;
! 2704: yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
! 2705: yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
! 2706:
! 2707: yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
! 2708:
! 2709: return ret_val;
! 2710: }
! 2711:
! 2712:
! 2713: /* yy_get_previous_state - get the state just before the EOB char was reached */
! 2714:
! 2715: static yy_state_type yy_get_previous_state()
! 2716: {
! 2717: register yy_state_type yy_current_state;
! 2718: register char *yy_cp;
! 2719:
! 2720: yy_current_state = yy_start;
! 2721: yy_current_state += YY_AT_BOL();
! 2722:
! 2723: for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
! 2724: {
! 2725: register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
! 2726: if ( yy_accept[yy_current_state] )
! 2727: {
! 2728: yy_last_accepting_state = yy_current_state;
! 2729: yy_last_accepting_cpos = yy_cp;
! 2730: }
! 2731: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
! 2732: {
! 2733: yy_current_state = (int) yy_def[yy_current_state];
! 2734: if ( yy_current_state >= 607 )
! 2735: yy_c = yy_meta[(unsigned int) yy_c];
! 2736: }
! 2737: yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
! 2738: }
! 2739:
! 2740: return yy_current_state;
! 2741: }
! 2742:
! 2743:
! 2744: /* yy_try_NUL_trans - try to make a transition on the NUL character
! 2745: *
! 2746: * synopsis
! 2747: * next_state = yy_try_NUL_trans( current_state );
! 2748: */
! 2749:
! 2750: #ifdef YY_USE_PROTOS
! 2751: static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
! 2752: #else
! 2753: static yy_state_type yy_try_NUL_trans( yy_current_state )
! 2754: yy_state_type yy_current_state;
! 2755: #endif
! 2756: {
! 2757: register int yy_is_jam;
! 2758: register char *yy_cp = yy_c_buf_p;
! 2759:
! 2760: register YY_CHAR yy_c = 1;
! 2761: if ( yy_accept[yy_current_state] )
! 2762: {
! 2763: yy_last_accepting_state = yy_current_state;
! 2764: yy_last_accepting_cpos = yy_cp;
! 2765: }
! 2766: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
! 2767: {
! 2768: yy_current_state = (int) yy_def[yy_current_state];
! 2769: if ( yy_current_state >= 607 )
! 2770: yy_c = yy_meta[(unsigned int) yy_c];
! 2771: }
! 2772: yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
! 2773: yy_is_jam = (yy_current_state == 606);
! 2774:
! 2775: return yy_is_jam ? 0 : yy_current_state;
! 2776: }
! 2777:
! 2778:
! 2779: #ifndef YY_NO_UNPUT
! 2780: #ifdef YY_USE_PROTOS
! 2781: static void yyunput( int c, register char *yy_bp )
! 2782: #else
! 2783: static void yyunput( c, yy_bp )
! 2784: int c;
! 2785: register char *yy_bp;
! 2786: #endif
! 2787: {
! 2788: register char *yy_cp = yy_c_buf_p;
! 2789:
! 2790: /* undo effects of setting up yytext */
! 2791: *yy_cp = yy_hold_char;
! 2792:
! 2793: if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
! 2794: { /* need to shift things up to make room */
! 2795: /* +2 for EOB chars. */
! 2796: register int number_to_move = yy_n_chars + 2;
! 2797: register char *dest = &yy_current_buffer->yy_ch_buf[
! 2798: yy_current_buffer->yy_buf_size + 2];
! 2799: register char *source =
! 2800: &yy_current_buffer->yy_ch_buf[number_to_move];
! 2801:
! 2802: while ( source > yy_current_buffer->yy_ch_buf )
! 2803: *--dest = *--source;
! 2804:
! 2805: yy_cp += (int) (dest - source);
! 2806: yy_bp += (int) (dest - source);
! 2807: yy_current_buffer->yy_n_chars =
! 2808: yy_n_chars = yy_current_buffer->yy_buf_size;
! 2809:
! 2810: if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
! 2811: YY_FATAL_ERROR( "flex scanner push-back overflow" );
! 2812: }
! 2813:
! 2814: *--yy_cp = (char) c;
! 2815:
! 2816:
! 2817: yytext_ptr = yy_bp;
! 2818: yy_hold_char = *yy_cp;
! 2819: yy_c_buf_p = yy_cp;
! 2820: }
! 2821: #endif /* ifndef YY_NO_UNPUT */
! 2822:
! 2823:
! 2824: #ifndef YY_NO_INPUT
! 2825: #ifdef __cplusplus
! 2826: static int yyinput()
! 2827: #else
! 2828: static int input()
! 2829: #endif
! 2830: {
! 2831: int c;
! 2832:
! 2833: *yy_c_buf_p = yy_hold_char;
! 2834:
! 2835: if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
! 2836: {
! 2837: /* yy_c_buf_p now points to the character we want to return.
! 2838: * If this occurs *before* the EOB characters, then it's a
! 2839: * valid NUL; if not, then we've hit the end of the buffer.
! 2840: */
! 2841: if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
! 2842: /* This was really a NUL. */
! 2843: *yy_c_buf_p = '\0';
! 2844:
! 2845: else
! 2846: { /* need more input */
! 2847: int offset = yy_c_buf_p - yytext_ptr;
! 2848: ++yy_c_buf_p;
! 2849:
! 2850: switch ( yy_get_next_buffer() )
! 2851: {
! 2852: case EOB_ACT_LAST_MATCH:
! 2853: /* This happens because yy_g_n_b()
! 2854: * sees that we've accumulated a
! 2855: * token and flags that we need to
! 2856: * try matching the token before
! 2857: * proceeding. But for input(),
! 2858: * there's no matching to consider.
! 2859: * So convert the EOB_ACT_LAST_MATCH
! 2860: * to EOB_ACT_END_OF_FILE.
! 2861: */
! 2862:
! 2863: /* Reset buffer status. */
! 2864: yyrestart( yyin );
! 2865:
! 2866: /* fall through */
! 2867:
! 2868: case EOB_ACT_END_OF_FILE:
! 2869: {
! 2870: if ( yywrap() )
! 2871: return EOF;
! 2872:
! 2873: if ( ! yy_did_buffer_switch_on_eof )
! 2874: YY_NEW_FILE;
! 2875: #ifdef __cplusplus
! 2876: return yyinput();
! 2877: #else
! 2878: return input();
! 2879: #endif
! 2880: }
! 2881:
! 2882: case EOB_ACT_CONTINUE_SCAN:
! 2883: yy_c_buf_p = yytext_ptr + offset;
! 2884: break;
! 2885: }
! 2886: }
! 2887: }
! 2888:
! 2889: c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
! 2890: *yy_c_buf_p = '\0'; /* preserve yytext */
! 2891: yy_hold_char = *++yy_c_buf_p;
! 2892:
! 2893: yy_current_buffer->yy_at_bol = (c == '\n');
! 2894:
! 2895: return c;
! 2896: }
! 2897: #endif /* ifndef YY_NO_INPUT */
! 2898:
! 2899:
! 2900: #ifdef YY_USE_PROTOS
! 2901: void yyrestart( FILE *input_file )
! 2902: #else
! 2903: void yyrestart( input_file )
! 2904: FILE *input_file;
! 2905: #endif
! 2906: {
! 2907: if ( ! yy_current_buffer )
! 2908: yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
! 2909:
! 2910: yy_init_buffer( yy_current_buffer, input_file );
! 2911: yy_load_buffer_state();
! 2912: }
! 2913:
! 2914:
! 2915: #ifdef YY_USE_PROTOS
! 2916: void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
! 2917: #else
! 2918: void yy_switch_to_buffer( new_buffer )
! 2919: YY_BUFFER_STATE new_buffer;
! 2920: #endif
! 2921: {
! 2922: if ( yy_current_buffer == new_buffer )
! 2923: return;
! 2924:
! 2925: if ( yy_current_buffer )
! 2926: {
! 2927: /* Flush out information for old buffer. */
! 2928: *yy_c_buf_p = yy_hold_char;
! 2929: yy_current_buffer->yy_buf_pos = yy_c_buf_p;
! 2930: yy_current_buffer->yy_n_chars = yy_n_chars;
! 2931: }
! 2932:
! 2933: yy_current_buffer = new_buffer;
! 2934: yy_load_buffer_state();
! 2935:
! 2936: /* We don't actually know whether we did this switch during
! 2937: * EOF (yywrap()) processing, but the only time this flag
! 2938: * is looked at is after yywrap() is called, so it's safe
! 2939: * to go ahead and always set it.
! 2940: */
! 2941: yy_did_buffer_switch_on_eof = 1;
! 2942: }
! 2943:
! 2944:
! 2945: #ifdef YY_USE_PROTOS
! 2946: void yy_load_buffer_state( void )
! 2947: #else
! 2948: void yy_load_buffer_state()
! 2949: #endif
! 2950: {
! 2951: yy_n_chars = yy_current_buffer->yy_n_chars;
! 2952: yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
! 2953: yyin = yy_current_buffer->yy_input_file;
! 2954: yy_hold_char = *yy_c_buf_p;
! 2955: }
! 2956:
! 2957:
! 2958: #ifdef YY_USE_PROTOS
! 2959: YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
! 2960: #else
! 2961: YY_BUFFER_STATE yy_create_buffer( file, size )
! 2962: FILE *file;
! 2963: int size;
! 2964: #endif
! 2965: {
! 2966: YY_BUFFER_STATE b;
! 2967:
! 2968: b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
! 2969: if ( ! b )
! 2970: YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
! 2971:
! 2972: b->yy_buf_size = size;
! 2973:
! 2974: /* yy_ch_buf has to be 2 characters longer than the size given because
! 2975: * we need to put in 2 end-of-buffer characters.
! 2976: */
! 2977: b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
! 2978: if ( ! b->yy_ch_buf )
! 2979: YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
! 2980:
! 2981: b->yy_is_our_buffer = 1;
! 2982:
! 2983: yy_init_buffer( b, file );
! 2984:
! 2985: return b;
! 2986: }
! 2987:
! 2988:
! 2989: #ifdef YY_USE_PROTOS
! 2990: void yy_delete_buffer( YY_BUFFER_STATE b )
! 2991: #else
! 2992: void yy_delete_buffer( b )
! 2993: YY_BUFFER_STATE b;
! 2994: #endif
! 2995: {
! 2996: if ( ! b )
! 2997: return;
! 2998:
! 2999: if ( b == yy_current_buffer )
! 3000: yy_current_buffer = (YY_BUFFER_STATE) 0;
! 3001:
! 3002: if ( b->yy_is_our_buffer )
! 3003: yy_flex_free( (void *) b->yy_ch_buf );
! 3004:
! 3005: yy_flex_free( (void *) b );
! 3006: }
! 3007:
! 3008:
! 3009: #ifndef YY_ALWAYS_INTERACTIVE
! 3010: #ifndef YY_NEVER_INTERACTIVE
! 3011: #include <unistd.h>
! 3012: #endif
! 3013: #endif
! 3014:
! 3015: #ifdef YY_USE_PROTOS
! 3016: void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
! 3017: #else
! 3018: void yy_init_buffer( b, file )
! 3019: YY_BUFFER_STATE b;
! 3020: FILE *file;
! 3021: #endif
! 3022:
! 3023:
! 3024: {
! 3025: int oerrno = errno;
! 3026:
! 3027: yy_flush_buffer( b );
! 3028:
! 3029: b->yy_input_file = file;
! 3030: b->yy_fill_buffer = 1;
! 3031:
! 3032: #if defined(YY_ALWAYS_INTERACTIVE) && YY_ALWAYS_INTERACTIVE
! 3033: b->yy_is_interactive = 1;
! 3034: #else
! 3035: #if defined(YY_NEVER_INTERACTIVE) && YY_NEVER_INTERACTIVE
! 3036: b->yy_is_interactive = 0;
! 3037: #else
! 3038: b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
! 3039: #endif
! 3040: #endif
! 3041: errno = oerrno;
! 3042: }
! 3043:
! 3044:
! 3045: #ifdef YY_USE_PROTOS
! 3046: void yy_flush_buffer( YY_BUFFER_STATE b )
! 3047: #else
! 3048: void yy_flush_buffer( b )
! 3049: YY_BUFFER_STATE b;
! 3050: #endif
! 3051:
! 3052: {
! 3053: if ( ! b )
! 3054: return;
! 3055:
! 3056: b->yy_n_chars = 0;
! 3057:
! 3058: /* We always need two end-of-buffer characters. The first causes
! 3059: * a transition to the end-of-buffer state. The second causes
! 3060: * a jam in that state.
! 3061: */
! 3062: b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
! 3063: b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
! 3064:
! 3065: b->yy_buf_pos = &b->yy_ch_buf[0];
! 3066:
! 3067: b->yy_at_bol = 1;
! 3068: b->yy_buffer_status = YY_BUFFER_NEW;
! 3069:
! 3070: if ( b == yy_current_buffer )
! 3071: yy_load_buffer_state();
! 3072: }
! 3073:
! 3074:
! 3075: #ifndef YY_NO_SCAN_BUFFER
! 3076: #ifdef YY_USE_PROTOS
! 3077: YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
! 3078: #else
! 3079: YY_BUFFER_STATE yy_scan_buffer( base, size )
! 3080: char *base;
! 3081: yy_size_t size;
! 3082: #endif
! 3083: {
! 3084: YY_BUFFER_STATE b;
! 3085:
! 3086: if ( size < 2 ||
! 3087: base[size-2] != YY_END_OF_BUFFER_CHAR ||
! 3088: base[size-1] != YY_END_OF_BUFFER_CHAR )
! 3089: /* They forgot to leave room for the EOB's. */
! 3090: return 0;
! 3091:
! 3092: b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
! 3093: if ( ! b )
! 3094: YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
! 3095:
! 3096: b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
! 3097: b->yy_buf_pos = b->yy_ch_buf = base;
! 3098: b->yy_is_our_buffer = 0;
! 3099: b->yy_input_file = 0;
! 3100: b->yy_n_chars = b->yy_buf_size;
! 3101: b->yy_is_interactive = 0;
! 3102: b->yy_at_bol = 1;
! 3103: b->yy_fill_buffer = 0;
! 3104: b->yy_buffer_status = YY_BUFFER_NEW;
! 3105:
! 3106: yy_switch_to_buffer( b );
! 3107:
! 3108: return b;
! 3109: }
! 3110: #endif
! 3111:
! 3112:
! 3113: #ifndef YY_NO_SCAN_STRING
! 3114: #ifdef YY_USE_PROTOS
! 3115: YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
! 3116: #else
! 3117: YY_BUFFER_STATE yy_scan_string( yy_str )
! 3118: yyconst char *yy_str;
! 3119: #endif
! 3120: {
! 3121: int len;
! 3122: for ( len = 0; yy_str[len]; ++len )
! 3123: ;
! 3124:
! 3125: return yy_scan_bytes( yy_str, len );
! 3126: }
! 3127: #endif
! 3128:
! 3129:
! 3130: #ifndef YY_NO_SCAN_BYTES
! 3131: #ifdef YY_USE_PROTOS
! 3132: YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
! 3133: #else
! 3134: YY_BUFFER_STATE yy_scan_bytes( bytes, len )
! 3135: yyconst char *bytes;
! 3136: int len;
! 3137: #endif
! 3138: {
! 3139: YY_BUFFER_STATE b;
! 3140: char *buf;
! 3141: yy_size_t n;
! 3142: int i;
! 3143:
! 3144: /* Get memory for full buffer, including space for trailing EOB's. */
! 3145: n = len + 2;
! 3146: buf = (char *) yy_flex_alloc( n );
! 3147: if ( ! buf )
! 3148: YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
! 3149:
! 3150: for ( i = 0; i < len; ++i )
! 3151: buf[i] = bytes[i];
! 3152:
! 3153: buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
! 3154:
! 3155: b = yy_scan_buffer( buf, n );
! 3156: if ( ! b )
! 3157: YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
! 3158:
! 3159: /* It's okay to grow etc. this buffer, and we should throw it
! 3160: * away when we're done.
! 3161: */
! 3162: b->yy_is_our_buffer = 1;
! 3163:
! 3164: return b;
! 3165: }
! 3166: #endif
! 3167:
! 3168:
! 3169: #ifndef YY_NO_PUSH_STATE
! 3170: #ifdef YY_USE_PROTOS
! 3171: static void yy_push_state( int new_state )
! 3172: #else
! 3173: static void yy_push_state( new_state )
! 3174: int new_state;
! 3175: #endif
! 3176: {
! 3177: if ( yy_start_stack_ptr >= yy_start_stack_depth )
! 3178: {
! 3179: yy_size_t new_size;
! 3180:
! 3181: yy_start_stack_depth += YY_START_STACK_INCR;
! 3182: new_size = yy_start_stack_depth * sizeof( int );
! 3183:
! 3184: if ( ! yy_start_stack )
! 3185: yy_start_stack = (int *) yy_flex_alloc( new_size );
! 3186:
! 3187: else
! 3188: yy_start_stack = (int *) yy_flex_realloc(
! 3189: (void *) yy_start_stack, new_size );
! 3190:
! 3191: if ( ! yy_start_stack )
! 3192: YY_FATAL_ERROR(
! 3193: "out of memory expanding start-condition stack" );
! 3194: }
! 3195:
! 3196: yy_start_stack[yy_start_stack_ptr++] = YY_START;
! 3197:
! 3198: BEGIN(new_state);
! 3199: }
! 3200: #endif
! 3201:
! 3202:
! 3203: #ifndef YY_NO_POP_STATE
! 3204: static void yy_pop_state()
! 3205: {
! 3206: if ( --yy_start_stack_ptr < 0 )
! 3207: YY_FATAL_ERROR( "start-condition stack underflow" );
! 3208:
! 3209: BEGIN(yy_start_stack[yy_start_stack_ptr]);
! 3210: }
! 3211: #endif
! 3212:
! 3213:
! 3214: #ifndef YY_NO_TOP_STATE
! 3215: static int yy_top_state()
! 3216: {
! 3217: return yy_start_stack[yy_start_stack_ptr - 1];
! 3218: }
! 3219: #endif
! 3220:
! 3221: #ifndef YY_EXIT_FAILURE
! 3222: #define YY_EXIT_FAILURE 2
! 3223: #endif
! 3224:
! 3225: #ifdef YY_USE_PROTOS
! 3226: static void yy_fatal_error( yyconst char msg[] )
! 3227: #else
! 3228: static void yy_fatal_error( msg )
! 3229: char msg[];
! 3230: #endif
! 3231: {
! 3232: (void) fprintf( stderr, "%s\n", msg );
! 3233: exit( YY_EXIT_FAILURE );
! 3234: }
! 3235:
! 3236:
! 3237:
! 3238: /* Redefine yyless() so it works in section 3 code. */
! 3239:
! 3240: #undef yyless
! 3241: #define yyless(n) \
! 3242: do \
! 3243: { \
! 3244: /* Undo effects of setting up yytext. */ \
! 3245: yytext[yyleng] = yy_hold_char; \
! 3246: yy_c_buf_p = yytext + n; \
! 3247: yy_hold_char = *yy_c_buf_p; \
! 3248: *yy_c_buf_p = '\0'; \
! 3249: yyleng = n; \
! 3250: } \
! 3251: while ( 0 )
! 3252:
! 3253:
! 3254: /* Internal utility routines. */
! 3255:
! 3256: #ifndef yytext_ptr
! 3257: #ifdef YY_USE_PROTOS
! 3258: static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
! 3259: #else
! 3260: static void yy_flex_strncpy( s1, s2, n )
! 3261: char *s1;
! 3262: yyconst char *s2;
! 3263: int n;
! 3264: #endif
! 3265: {
! 3266: register int i;
! 3267: for ( i = 0; i < n; ++i )
! 3268: s1[i] = s2[i];
! 3269: }
! 3270: #endif
! 3271:
! 3272: #ifdef YY_NEED_STRLEN
! 3273: #ifdef YY_USE_PROTOS
! 3274: static int yy_flex_strlen( yyconst char *s )
! 3275: #else
! 3276: static int yy_flex_strlen( s )
! 3277: yyconst char *s;
! 3278: #endif
! 3279: {
! 3280: register int n;
! 3281: for ( n = 0; s[n]; ++n )
! 3282: ;
! 3283:
! 3284: return n;
! 3285: }
! 3286: #endif
! 3287:
! 3288:
! 3289: #ifdef YY_USE_PROTOS
! 3290: static void *yy_flex_alloc( yy_size_t size )
! 3291: #else
! 3292: static void *yy_flex_alloc( size )
! 3293: yy_size_t size;
! 3294: #endif
! 3295: {
! 3296: return (void *) malloc( size );
! 3297: }
! 3298:
! 3299: #ifdef YY_USE_PROTOS
! 3300: static void *yy_flex_realloc( void *ptr, yy_size_t size )
! 3301: #else
! 3302: static void *yy_flex_realloc( ptr, size )
! 3303: void *ptr;
! 3304: yy_size_t size;
! 3305: #endif
! 3306: {
! 3307: /* The cast to (char *) in the following accommodates both
! 3308: * implementations that use char* generic pointers, and those
! 3309: * that use void* generic pointers. It works with the latter
! 3310: * because both ANSI C and C++ allow castless assignment from
! 3311: * any pointer type to void*, and deal with argument conversions
! 3312: * as though doing an assignment.
! 3313: */
! 3314: return (void *) realloc( (char *) ptr, size );
! 3315: }
! 3316:
! 3317: #ifdef YY_USE_PROTOS
! 3318: static void yy_flex_free( void *ptr )
! 3319: #else
! 3320: static void yy_flex_free( ptr )
! 3321: void *ptr;
! 3322: #endif
! 3323: {
! 3324: free( ptr );
! 3325: }
! 3326:
! 3327: #if defined(YY_MAIN) && YY_MAIN
! 3328: int main()
! 3329: {
! 3330: yylex();
! 3331: return 0;
! 3332: }
! 3333: #endif
! 3334: #line 626 "toke.l"
! 3335:
! 3336: struct path_list {
! 3337: char *path;
! 3338: struct path_list *next;
! 3339: };
! 3340:
! 3341: struct include_stack {
! 3342: YY_BUFFER_STATE bs;
! 3343: char *path;
! 3344: struct path_list *more; /* more files in case of includedir */
! 3345: int lineno;
! 3346: int keepopen;
! 3347: };
! 3348:
! 3349: static int
! 3350: pl_compare(const void *v1, const void *v2)
! 3351: {
! 3352: const struct path_list * const *p1 = v1;
! 3353: const struct path_list * const *p2 = v2;
! 3354:
! 3355: return strcmp((*p1)->path, (*p2)->path);
! 3356: }
! 3357:
! 3358: static char *
! 3359: switch_dir(struct include_stack *stack, char *dirpath)
! 3360: {
! 3361: DIR *dir;
! 3362: int i, count = 0;
! 3363: char *path = NULL;
! 3364: struct dirent *dent;
! 3365: struct stat sb;
! 3366: struct path_list *pl, *first = NULL;
! 3367: struct path_list **sorted = NULL;
! 3368:
! 3369: if (!(dir = opendir(dirpath))) {
! 3370: if (errno != ENOENT) {
! 3371: char *errbuf;
! 3372: if (asprintf(&errbuf, _("%s: %s"), dirpath, strerror(errno)) != -1) {
! 3373: yyerror(errbuf);
! 3374: free(errbuf);
! 3375: } else {
! 3376: yyerror(_("unable to allocate memory"));
! 3377: }
! 3378: }
! 3379: goto done;
! 3380: }
! 3381: while ((dent = readdir(dir))) {
! 3382: /* Ignore files that end in '~' or have a '.' in them. */
! 3383: if (dent->d_name[0] == '\0' || dent->d_name[NAMLEN(dent) - 1] == '~'
! 3384: || strchr(dent->d_name, '.') != NULL) {
! 3385: continue;
! 3386: }
! 3387: if (asprintf(&path, "%s/%s", dirpath, dent->d_name) == -1) {
! 3388: closedir(dir);
! 3389: goto bad;
! 3390: }
! 3391: if (stat(path, &sb) != 0 || !S_ISREG(sb.st_mode)) {
! 3392: efree(path);
! 3393: path = NULL;
! 3394: continue;
! 3395: }
! 3396: pl = malloc(sizeof(*pl));
! 3397: if (pl == NULL)
! 3398: goto bad;
! 3399: pl->path = path;
! 3400: pl->next = first;
! 3401: first = pl;
! 3402: count++;
! 3403: }
! 3404: closedir(dir);
! 3405:
! 3406: if (count == 0)
! 3407: goto done;
! 3408:
! 3409: /* Sort the list as an array. */
! 3410: sorted = malloc(sizeof(*sorted) * count);
! 3411: if (sorted == NULL)
! 3412: goto bad;
! 3413: pl = first;
! 3414: for (i = 0; i < count; i++) {
! 3415: sorted[i] = pl;
! 3416: pl = pl->next;
! 3417: }
! 3418: qsort(sorted, count, sizeof(*sorted), pl_compare);
! 3419:
! 3420: /* Apply sorting to the list. */
! 3421: first = sorted[0];
! 3422: sorted[count - 1]->next = NULL;
! 3423: for (i = 1; i < count; i++)
! 3424: sorted[i - 1]->next = sorted[i];
! 3425: efree(sorted);
! 3426:
! 3427: /* Pull out the first element for parsing, leave the rest for later. */
! 3428: if (count) {
! 3429: path = first->path;
! 3430: pl = first->next;
! 3431: efree(first);
! 3432: stack->more = pl;
! 3433: } else {
! 3434: path = NULL;
! 3435: }
! 3436: done:
! 3437: efree(dirpath);
! 3438: return path;
! 3439: bad:
! 3440: while (first != NULL) {
! 3441: pl = first;
! 3442: first = pl->next;
! 3443: free(pl->path);
! 3444: free(pl);
! 3445: }
! 3446: efree(sorted);
! 3447: efree(dirpath);
! 3448: efree(path);
! 3449: return NULL;
! 3450: }
! 3451:
! 3452: #define MAX_SUDOERS_DEPTH 128
! 3453: #define SUDOERS_STACK_INCREMENT 16
! 3454:
! 3455: static size_t istacksize, idepth;
! 3456: static struct include_stack *istack;
! 3457: static int keepopen;
! 3458:
! 3459: void
! 3460: init_lexer(void)
! 3461: {
! 3462: struct path_list *pl;
! 3463:
! 3464: while (idepth) {
! 3465: idepth--;
! 3466: while ((pl = istack[idepth].more) != NULL) {
! 3467: istack[idepth].more = pl->next;
! 3468: efree(pl->path);
! 3469: efree(pl);
! 3470: }
! 3471: efree(istack[idepth].path);
! 3472: if (idepth && !istack[idepth].keepopen)
! 3473: fclose(istack[idepth].bs->yy_input_file);
! 3474: yy_delete_buffer(istack[idepth].bs);
! 3475: }
! 3476: efree(istack);
! 3477: istack = NULL;
! 3478: istacksize = idepth = 0;
! 3479: sudolineno = 1;
! 3480: keepopen = FALSE;
! 3481: sawspace = FALSE;
! 3482: continued = FALSE;
! 3483: prev_state = INITIAL;
! 3484: }
! 3485:
! 3486: static int
! 3487: _push_include(char *path, int isdir)
! 3488: {
! 3489: struct path_list *pl;
! 3490: FILE *fp;
! 3491:
! 3492: /* push current state onto stack */
! 3493: if (idepth >= istacksize) {
! 3494: if (idepth > MAX_SUDOERS_DEPTH) {
! 3495: yyerror(_("too many levels of includes"));
! 3496: return FALSE;
! 3497: }
! 3498: istacksize += SUDOERS_STACK_INCREMENT;
! 3499: istack = (struct include_stack *) realloc(istack,
! 3500: sizeof(*istack) * istacksize);
! 3501: if (istack == NULL) {
! 3502: yyerror(_("unable to allocate memory"));
! 3503: return FALSE;
! 3504: }
! 3505: }
! 3506: if (isdir) {
! 3507: if (!(path = switch_dir(&istack[idepth], path))) {
! 3508: /* switch_dir() called yyerror() for us */
! 3509: return FALSE;
! 3510: }
! 3511: while ((fp = open_sudoers(path, FALSE, &keepopen)) == NULL) {
! 3512: /* Unable to open path in includedir, go to next one, if any. */
! 3513: efree(path);
! 3514: if ((pl = istack[idepth].more) == NULL)
! 3515: return FALSE;
! 3516: path = pl->path;
! 3517: istack[idepth].more = pl->next;
! 3518: efree(pl);
! 3519: }
! 3520: } else {
! 3521: if ((fp = open_sudoers(path, TRUE, &keepopen)) == NULL) {
! 3522: char *errbuf;
! 3523: if (asprintf(&errbuf, _("%s: %s"), path, strerror(errno)) != -1) {
! 3524: yyerror(errbuf);
! 3525: free(errbuf);
! 3526: } else {
! 3527: yyerror(_("unable to allocate memory"));
! 3528: }
! 3529: return FALSE;
! 3530: }
! 3531: istack[idepth].more = NULL;
! 3532: }
! 3533: /* Push the old (current) file and open the new one. */
! 3534: istack[idepth].path = sudoers; /* push old path */
! 3535: istack[idepth].bs = YY_CURRENT_BUFFER;
! 3536: istack[idepth].lineno = sudolineno;
! 3537: istack[idepth].keepopen = keepopen;
! 3538: idepth++;
! 3539: sudolineno = 1;
! 3540: sudoers = path;
! 3541: yy_switch_to_buffer(yy_create_buffer(fp, YY_BUF_SIZE));
! 3542:
! 3543: return TRUE;
! 3544: }
! 3545:
! 3546: static int
! 3547: pop_include(void)
! 3548: {
! 3549: struct path_list *pl;
! 3550: FILE *fp;
! 3551:
! 3552: if (idepth == 0)
! 3553: return FALSE;
! 3554:
! 3555: if (!keepopen)
! 3556: fclose(YY_CURRENT_BUFFER->yy_input_file);
! 3557: yy_delete_buffer(YY_CURRENT_BUFFER);
! 3558: /* If we are in an include dir, move to the next file. */
! 3559: while ((pl = istack[idepth - 1].more) != NULL) {
! 3560: fp = open_sudoers(pl->path, FALSE, &keepopen);
! 3561: if (fp != NULL) {
! 3562: istack[idepth - 1].more = pl->next;
! 3563: efree(sudoers);
! 3564: sudoers = pl->path;
! 3565: sudolineno = 1;
! 3566: yy_switch_to_buffer(yy_create_buffer(fp, YY_BUF_SIZE));
! 3567: efree(pl);
! 3568: break;
! 3569: }
! 3570: /* Unable to open path in include dir, go to next one. */
! 3571: istack[idepth - 1].more = pl->next;
! 3572: efree(pl->path);
! 3573: efree(pl);
! 3574: }
! 3575: /* If no path list, just pop the last dir on the stack. */
! 3576: if (pl == NULL) {
! 3577: idepth--;
! 3578: yy_switch_to_buffer(istack[idepth].bs);
! 3579: efree(sudoers);
! 3580: sudoers = istack[idepth].path;
! 3581: sudolineno = istack[idepth].lineno;
! 3582: keepopen = istack[idepth].keepopen;
! 3583: }
! 3584: return TRUE;
! 3585: }
! 3586:
! 3587: static char *
! 3588: parse_include(char *base)
! 3589: {
! 3590: char *cp, *ep, *path;
! 3591: int len = 0, subst = 0;
! 3592: size_t shost_len = 0;
! 3593:
! 3594: /* Pull out path from #include line. */
! 3595: cp = base + sizeof("#include");
! 3596: if (*cp == 'i')
! 3597: cp += 3; /* includedir */
! 3598: while (isblank((unsigned char) *cp))
! 3599: cp++;
! 3600: ep = cp;
! 3601: while (*ep != '\0' && !isspace((unsigned char) *ep)) {
! 3602: if (ep[0] == '%' && ep[1] == 'h') {
! 3603: shost_len = strlen(user_shost);
! 3604: len += shost_len - 2;
! 3605: subst = 1;
! 3606: }
! 3607: ep++;
! 3608: }
! 3609:
! 3610: /* Make a copy of path and return it. */
! 3611: len += (int)(ep - cp);
! 3612: if ((path = malloc(len + 1)) == NULL) {
! 3613: yyerror(_("unable to allocate memory"));
! 3614: return NULL;
! 3615: }
! 3616: if (subst) {
! 3617: /* substitute for %h */
! 3618: char *pp = path;
! 3619: while (cp < ep) {
! 3620: if (cp[0] == '%' && cp[1] == 'h') {
! 3621: memcpy(pp, user_shost, shost_len);
! 3622: pp += shost_len;
! 3623: cp += 2;
! 3624: continue;
! 3625: }
! 3626: *pp++ = *cp++;
! 3627: }
! 3628: *pp = '\0';
! 3629: } else {
! 3630: memcpy(path, cp, len);
! 3631: path[len] = '\0';
! 3632: }
! 3633:
! 3634: /* Push any excess characters (e.g. comment, newline) back to the lexer */
! 3635: if (*ep != '\0')
! 3636: yyless((int)(ep - base));
! 3637:
! 3638: return path;
! 3639: }
! 3640:
! 3641: #ifdef TRACELEXER
! 3642: static int
! 3643: sudoers_trace_print(const char *msg)
! 3644: {
! 3645: return fputs(msg, stderr);
! 3646: }
! 3647: #endif /* TRACELEXER */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>