pre.cpp

Go to the documentation of this file.
00001 
00002 #line 3 "<stdout>"
00003 
00004 #define  YY_INT_ALIGNED short int
00005 
00006 /* A lexical scanner generated by flex */
00007 
00008 #define FLEX_SCANNER
00009 #define YY_FLEX_MAJOR_VERSION 2
00010 #define YY_FLEX_MINOR_VERSION 5
00011 #define YY_FLEX_SUBMINOR_VERSION 33
00012 #if YY_FLEX_SUBMINOR_VERSION > 0
00013 #define FLEX_BETA
00014 #endif
00015 
00016 /* First, we deal with  platform-specific or compiler-specific issues. */
00017 
00018 /* begin standard C headers. */
00019 #include <stdio.h>
00020 #include <string.h>
00021 #include <errno.h>
00022 #include <stdlib.h>
00023 
00024 /* end standard C headers. */
00025 
00026 /* flex integer type definitions */
00027 
00028 #ifndef FLEXINT_H
00029 #define FLEXINT_H
00030 
00031 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
00032 
00033 #if __STDC_VERSION__ >= 199901L
00034 
00035 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
00036  * if you want the limit (max/min) macros for int types. 
00037  */
00038 #ifndef __STDC_LIMIT_MACROS
00039 #define __STDC_LIMIT_MACROS 1
00040 #endif
00041 
00042 #include <inttypes.h>
00043 typedef int8_t flex_int8_t;
00044 typedef uint8_t flex_uint8_t;
00045 typedef int16_t flex_int16_t;
00046 typedef uint16_t flex_uint16_t;
00047 typedef int32_t flex_int32_t;
00048 typedef uint32_t flex_uint32_t;
00049 #else
00050 typedef signed char flex_int8_t;
00051 typedef short int flex_int16_t;
00052 typedef int flex_int32_t;
00053 typedef unsigned char flex_uint8_t; 
00054 typedef unsigned short int flex_uint16_t;
00055 typedef unsigned int flex_uint32_t;
00056 #endif /* ! C99 */
00057 
00058 /* Limits of integral types. */
00059 #ifndef INT8_MIN
00060 #define INT8_MIN               (-128)
00061 #endif
00062 #ifndef INT16_MIN
00063 #define INT16_MIN              (-32767-1)
00064 #endif
00065 #ifndef INT32_MIN
00066 #define INT32_MIN              (-2147483647-1)
00067 #endif
00068 #ifndef INT8_MAX
00069 #define INT8_MAX               (127)
00070 #endif
00071 #ifndef INT16_MAX
00072 #define INT16_MAX              (32767)
00073 #endif
00074 #ifndef INT32_MAX
00075 #define INT32_MAX              (2147483647)
00076 #endif
00077 #ifndef UINT8_MAX
00078 #define UINT8_MAX              (255U)
00079 #endif
00080 #ifndef UINT16_MAX
00081 #define UINT16_MAX             (65535U)
00082 #endif
00083 #ifndef UINT32_MAX
00084 #define UINT32_MAX             (4294967295U)
00085 #endif
00086 
00087 #endif /* ! FLEXINT_H */
00088 
00089 #ifdef __cplusplus
00090 
00091 /* The "const" storage-class-modifier is valid. */
00092 #define YY_USE_CONST
00093 
00094 #else   /* ! __cplusplus */
00095 
00096 #if __STDC__
00097 
00098 #define YY_USE_CONST
00099 
00100 #endif  /* __STDC__ */
00101 #endif  /* ! __cplusplus */
00102 
00103 #ifdef YY_USE_CONST
00104 #define yyconst const
00105 #else
00106 #define yyconst
00107 #endif
00108 
00109 /* Returned upon end-of-file. */
00110 #define YY_NULL 0
00111 
00112 /* Promotes a possibly negative, possibly signed char to an unsigned
00113  * integer for use as an array index.  If the signed char is negative,
00114  * we want to instead treat it as an 8-bit unsigned char, hence the
00115  * double cast.
00116  */
00117 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
00118 
00119 /* Enter a start condition.  This macro really ought to take a parameter,
00120  * but we do it the disgusting crufty way forced on us by the ()-less
00121  * definition of BEGIN.
00122  */
00123 #define BEGIN (yy_start) = 1 + 2 *
00124 
00125 /* Translate the current start state into a value that can be later handed
00126  * to BEGIN to return to the state.  The YYSTATE alias is for lex
00127  * compatibility.
00128  */
00129 #define YY_START (((yy_start) - 1) / 2)
00130 #define YYSTATE YY_START
00131 
00132 /* Action number for EOF rule of a given start state. */
00133 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
00134 
00135 /* Special action meaning "start processing a new file". */
00136 #define YY_NEW_FILE preYYrestart(preYYin  )
00137 
00138 #define YY_END_OF_BUFFER_CHAR 0
00139 
00140 /* Size of default input buffer. */
00141 #ifndef YY_BUF_SIZE
00142 #define YY_BUF_SIZE 262144
00143 #endif
00144 
00145 /* The state buf must be large enough to hold one state per character in the main buffer.
00146  */
00147 #define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
00148 
00149 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
00150 #define YY_TYPEDEF_YY_BUFFER_STATE
00151 typedef struct yy_buffer_state *YY_BUFFER_STATE;
00152 #endif
00153 
00154 extern int preYYleng;
00155 
00156 extern FILE *preYYin, *preYYout;
00157 
00158 #define EOB_ACT_CONTINUE_SCAN 0
00159 #define EOB_ACT_END_OF_FILE 1
00160 #define EOB_ACT_LAST_MATCH 2
00161 
00162     #define YY_LESS_LINENO(n)
00163     
00164 /* Return all but the first "n" matched characters back to the input stream. */
00165 #define yyless(n) \
00166         do \
00167                 { \
00168                 /* Undo effects of setting up preYYtext. */ \
00169         int yyless_macro_arg = (n); \
00170         YY_LESS_LINENO(yyless_macro_arg);\
00171                 *yy_cp = (yy_hold_char); \
00172                 YY_RESTORE_YY_MORE_OFFSET \
00173                 (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
00174                 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ \
00175                 } \
00176         while ( 0 )
00177 
00178 #define unput(c) yyunput( c, (yytext_ptr)  )
00179 
00180 /* The following is because we cannot portably get our hands on size_t
00181  * (without autoconf's help, which isn't available because we want
00182  * flex-generated scanners to compile on their own).
00183  */
00184 
00185 #ifndef YY_TYPEDEF_YY_SIZE_T
00186 #define YY_TYPEDEF_YY_SIZE_T
00187 typedef unsigned int yy_size_t;
00188 #endif
00189 
00190 #ifndef YY_STRUCT_YY_BUFFER_STATE
00191 #define YY_STRUCT_YY_BUFFER_STATE
00192 struct yy_buffer_state
00193         {
00194         FILE *yy_input_file;
00195 
00196         char *yy_ch_buf;                /* input buffer */
00197         char *yy_buf_pos;               /* current position in input buffer */
00198 
00199         /* Size of input buffer in bytes, not including room for EOB
00200          * characters.
00201          */
00202         yy_size_t yy_buf_size;
00203 
00204         /* Number of characters read into yy_ch_buf, not including EOB
00205          * characters.
00206          */
00207         int yy_n_chars;
00208 
00209         /* Whether we "own" the buffer - i.e., we know we created it,
00210          * and can realloc() it to grow it, and should free() it to
00211          * delete it.
00212          */
00213         int yy_is_our_buffer;
00214 
00215         /* Whether this is an "interactive" input source; if so, and
00216          * if we're using stdio for input, then we want to use getc()
00217          * instead of fread(), to make sure we stop fetching input after
00218          * each newline.
00219          */
00220         int yy_is_interactive;
00221 
00222         /* Whether we're considered to be at the beginning of a line.
00223          * If so, '^' rules will be active on the next match, otherwise
00224          * not.
00225          */
00226         int yy_at_bol;
00227 
00228     int yy_bs_lineno; 
00229     int yy_bs_column; 
00231         /* Whether to try to fill the input buffer when we reach the
00232          * end of it.
00233          */
00234         int yy_fill_buffer;
00235 
00236         int yy_buffer_status;
00237 
00238 #define YY_BUFFER_NEW 0
00239 #define YY_BUFFER_NORMAL 1
00240         /* When an EOF's been seen but there's still some text to process
00241          * then we mark the buffer as YY_EOF_PENDING, to indicate that we
00242          * shouldn't try reading from the input source any more.  We might
00243          * still have a bunch of tokens to match, though, because of
00244          * possible backing-up.
00245          *
00246          * When we actually see the EOF, we change the status to "new"
00247          * (via preYYrestart()), so that the user can continue scanning by
00248          * just pointing preYYin at a new input file.
00249          */
00250 #define YY_BUFFER_EOF_PENDING 2
00251 
00252         };
00253 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
00254 
00255 /* Stack of input buffers. */
00256 static size_t yy_buffer_stack_top = 0; 
00257 static size_t yy_buffer_stack_max = 0; 
00258 static YY_BUFFER_STATE * yy_buffer_stack = 0; 
00260 /* We provide macros for accessing buffer states in case in the
00261  * future we want to put the buffer states in a more general
00262  * "scanner state".
00263  *
00264  * Returns the top of the stack, or NULL.
00265  */
00266 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
00267                           ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
00268                           : NULL)
00269 
00270 /* Same as previous macro, but useful when we know that the buffer stack is not
00271  * NULL or when we need an lvalue. For internal use only.
00272  */
00273 #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
00274 
00275 /* yy_hold_char holds the character lost when preYYtext is formed. */
00276 static char yy_hold_char;
00277 static int yy_n_chars;          /* number of characters read into yy_ch_buf */
00278 int preYYleng;
00279 
00280 /* Points to current character in buffer. */
00281 static char *yy_c_buf_p = (char *) 0;
00282 static int yy_init = 0;         /* whether we need to initialize */
00283 static int yy_start = 0;        /* start state number */
00284 
00285 /* Flag which is used to allow preYYwrap()'s to do buffer switches
00286  * instead of setting up a fresh preYYin.  A bit of a hack ...
00287  */
00288 static int yy_did_buffer_switch_on_eof;
00289 
00290 void preYYrestart (FILE *input_file  );
00291 void preYY_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
00292 YY_BUFFER_STATE preYY_create_buffer (FILE *file,int size  );
00293 void preYY_delete_buffer (YY_BUFFER_STATE b  );
00294 void preYY_flush_buffer (YY_BUFFER_STATE b  );
00295 void preYYpush_buffer_state (YY_BUFFER_STATE new_buffer  );
00296 void preYYpop_buffer_state (void );
00297 
00298 static void preYYensure_buffer_stack (void );
00299 static void preYY_load_buffer_state (void );
00300 static void preYY_init_buffer (YY_BUFFER_STATE b,FILE *file  );
00301 
00302 #define YY_FLUSH_BUFFER preYY_flush_buffer(YY_CURRENT_BUFFER )
00303 
00304 YY_BUFFER_STATE preYY_scan_buffer (char *base,yy_size_t size  );
00305 YY_BUFFER_STATE preYY_scan_string (yyconst char *yy_str  );
00306 YY_BUFFER_STATE preYY_scan_bytes (yyconst char *bytes,int len  );
00307 
00308 void *preYYalloc (yy_size_t  );
00309 void *preYYrealloc (void *,yy_size_t  );
00310 void preYYfree (void *  );
00311 
00312 #define yy_new_buffer preYY_create_buffer
00313 
00314 #define yy_set_interactive(is_interactive) \
00315         { \
00316         if ( ! YY_CURRENT_BUFFER ){ \
00317         preYYensure_buffer_stack (); \
00318                 YY_CURRENT_BUFFER_LVALUE =    \
00319             preYY_create_buffer(preYYin,YY_BUF_SIZE ); \
00320         } \
00321         YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
00322         }
00323 
00324 #define yy_set_bol(at_bol) \
00325         { \
00326         if ( ! YY_CURRENT_BUFFER ){\
00327         preYYensure_buffer_stack (); \
00328                 YY_CURRENT_BUFFER_LVALUE =    \
00329             preYY_create_buffer(preYYin,YY_BUF_SIZE ); \
00330         } \
00331         YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
00332         }
00333 
00334 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
00335 
00336 /* Begin user sect3 */
00337 
00338 #define preYYwrap(n) 1
00339 #define YY_SKIP_YYWRAP
00340 
00341 typedef unsigned char YY_CHAR;
00342 
00343 FILE *preYYin = (FILE *) 0, *preYYout = (FILE *) 0;
00344 
00345 typedef int yy_state_type;
00346 
00347 extern int preYYlineno;
00348 
00349 int preYYlineno = 1;
00350 
00351 extern char *preYYtext;
00352 #define yytext_ptr preYYtext
00353 
00354 static yy_state_type yy_get_previous_state (void );
00355 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
00356 static int yy_get_next_buffer (void );
00357 static void yy_fatal_error (yyconst char msg[]  );
00358 
00359 /* Done after the current pattern has been matched and before the
00360  * corresponding action - sets up preYYtext.
00361  */
00362 #define YY_DO_BEFORE_ACTION \
00363         (yytext_ptr) = yy_bp; \
00364         preYYleng = (size_t) (yy_cp - yy_bp); \
00365         (yy_hold_char) = *yy_cp; \
00366         *yy_cp = '\0'; \
00367         (yy_c_buf_p) = yy_cp;
00368 
00369 #define YY_NUM_RULES 155
00370 #define YY_END_OF_BUFFER 156
00371 /* This struct is not used in this scanner,
00372    but its presence is necessary. */
00373 struct yy_trans_info
00374         {
00375         flex_int32_t yy_verify;
00376         flex_int32_t yy_nxt;
00377         };
00378 static yyconst flex_int16_t yy_acclist[1108] =
00379     {   0,
00380       138,  138,  156,  154,  155,    1,  154,  155,  153,  155,
00381         3,  154,  155,  154,  155,  154,  155,    2,  154,  155,
00382         6,  154,  155,    1,    6,  154,  155,    6,  154,  155,
00383         6,  153,  155,    3,    6,  154,  155,    5,  154,  155,
00384         6,  154,  155,    6,  154,  155,    6,  154,  155,    2,
00385         6,  154,  155,   52,  154,  155,    1,   52,  154,  155,
00386        48,  153,  155,    3,   52,  154,  155,   52,  154,  155,
00387        52,  154,  155,   49,   52,  154,  155,   49,   52,  154,
00388       155,   49,   52,  154,  155,   49,   52,  154,  155,   49,
00389        52,  154,  155,    2,   52,  154,  155,   76,  154,  155,
00390 
00391         1,   76,  154,  155,   74,  153,  155,    3,   76,  154,
00392       155,   76,  154,  155,   76,  154,  155,   75,   76,  154,
00393       155,   75,   76,  154,  155,   75,   76,  154,  155,    2,
00394        76,  154,  155,   77,   78,  154,  155,    1,   77,   78,
00395       154,  155,   81,  153,  155,    3,   77,   78,  154,  155,
00396        78,  154,  155,   77,   78,  154,  155,    2,   77,   78,
00397       154,  155,   22,  154,  155,    1,   22,  154,  155,   23,
00398       153,  155,    3,   22,  154,  155,   15,   22,  154,  155,
00399        22,  154,  155,   22,  154,  155,   22,  154,  155,   20,
00400        22,  154,  155,16403,   22,  154,  155,   20,   22,  154,
00401 
00402       155,16403,   10,   22,  154,  155,   11,   22,  154,  155,
00403         2,   22,  154,  155,   16,  154,  155,    1,   16,  154,
00404       155,   18,  154,  155,   16,  154,  155,   16,  154,  155,
00405       154,  155,    2,   16,  154,  155,  154,  155,    1,  154,
00406       155,    3,  154,  155,  154,  155,  154,  155,    2,  154,
00407       155,   83,  154,  155,   87,  154,  155,    1,   87,  154,
00408       155,   85,  153,  155,    3,   87,  154,  155,   87,  154,
00409       155,   87,  154,  155,   87,  154,  155,    2,   87,  154,
00410       155, 8281,  154,  155,16473,16474,  154,  155,   92,  154,
00411       155,   93,  154,  155,   91,  154,  155,  154,  155,   95,
00412 
00413       154,  155,  150,  154,  155,    1,  150,  154,  155,  138,
00414       150,  154,  155,  137,  153,  155,    3,  150,  154,  155,
00415       141,  150,  154,  155,  133,  150,  154,  155,  142,  150,
00416       154,  155,  150,  154,  155,  150,  154,  155,  140,  150,
00417       154,  155,  134,  150,  154,  155,  150,  154,  155,    2,
00418       150,  154,  155,   69,  154,  155,    1,   69,  154,  155,
00419        68,  153,  155,    3,   69,  154,  155,   69,  154,  155,
00420        69,  154,  155,    2,   69,  154,  155,   67,   69,  154,
00421       155,    1,   67,   69,  154,  155,   67,   69,  154,  155,
00422        67,   68,  153,  155,    3,   67,   69,  154,  155,   66,
00423 
00424        69,  154,  155,   67,   69,  154,  155,   67,   69,  154,
00425       155,    2,   67,   69,  154,  155,  111,  113,  154,  155,
00426         1,  113,  154,  155,  112,  153,  155,    3,  111,  113,
00427       154,  155,  113,  154,  155,  113,  154,  155,  111,  113,
00428       154,  155,  113,  154,  155,    2,  111,  113,  154,  155,
00429       114,  135,  154,  155,    1,  114,  135,  154,  155,  114,
00430       116,  153,  155,    3,  114,  135,  154,  155,  135,  154,
00431       155,  114,  135,  154,  155,  114,  135,  154,  155,  134,
00432       135,  154,  155,    2,  114,  135,  154,  155,  113,  154,
00433       155,  113,  154,  155,  113,  154,  155,  123,  127,  128,
00434 
00435       154,  155,    1,  123,  128,  154,  155,  124,  153,  155,
00436         3,  123,  127,  128,  154,  155,  127,  128,  154,  155,
00437       123,  127,  128,  154,  155,  128,  154,  155,    2,  123,
00438       127,  128,  154,  155,  120,  122,  154,  155,    1,  122,
00439       154,  155,  121,  153,  155,    3,  120,  122,  154,  155,
00440       122,  154,  155,  120,  122,  154,  155,  120,  122,  154,
00441       155,    2,  120,  122,  154,  155,  131,  132,  154,  155,
00442         1,  132,  154,  155,    3,  131,  132,  154,  155,  131,
00443       132,  154,  155,  131,  132,  154,  155,    2,  131,  132,
00444       154,  155,   58,  154,  155,    1,   58,  154,  155,   59,
00445 
00446       153,  155,    3,   58,  154,  155,   58,  154,  155,   58,
00447       154,  155,   57,   58,  154,  155,   58,  154,  155,   57,
00448        58,  154,  155,    2,   58,  154,  155,   65,  154,  155,
00449         1,   65,  154,  155,   63,  153,  155,    3,   65,  154,
00450       155,   65,  154,  155,   65,  154,  155,   61,   65,  154,
00451       155,   65,  154,  155,    2,   65,  154,  155,   64,   65,
00452       154,  155,   62,   65,  154,  155,  148,  154,  155,    1,
00453       148,  154,  155,    3,  148,  154,  155,  145,  148,  154,
00454       155,  148,  154,  155,  148,  154,  155,  148,  154,  155,
00455         2,  148,  154,  155,  149,  154,  155,    1,  149,  154,
00456 
00457       155,    3,  149,  154,  155,  147,  149,  154,  155,  149,
00458       154,  155,  149,  154,  155,  149,  154,  155,    2,  149,
00459       154,  155,   53,  154,  155,   51,  154,  155,    1,   51,
00460       154,  155,    3,   51,  154,  155,   51,  154,  155,   51,
00461       154,  155,   51,  154,  155,    2,   51,  154,  155,   30,
00462       154,  155,    1,   30,  154,  155,   28,  153,  155,    3,
00463        30,  154,  155,   27,   30,  154,  155,   30,  154,  155,
00464        24,   30,  154,  155,   25,   30,  154,  155,   30,  154,
00465       155,   30,  154,  155,   29,   30,  154,  155,    2,   30,
00466       154,  155,   34,  154,  155,    1,   34,  154,  155,    3,
00467 
00468        34,  154,  155,   31,   34,  154,  155,   34,  154,  155,
00469        34,  154,  155,   34,  154,  155,    2,   34,  154,  155,
00470       107,  154,  155,    1,  107,  154,  155,    3,  107,  154,
00471       155,  107,  154,  155,  107,  154,  155,  105,  107,  154,
00472       155,    2,  107,  154,  155,  151,  152,    6,    6,    5,
00473         6,   49,   49,   49,   49,   49,   49,   49,   49,   80,
00474       151,   79,  152,   75,   75,   75,   75,   77,   77, 8211,
00475        20,16403,   21,   20,16403,   16,   16,  151,   16,  152,
00476        16,   17,   84,  151,  152,   82,   83,   85,  151,  152,
00477        86, 8281, 8282,   88, 8281,16473,16474,   93,   92,   93,
00478 
00479        91,   95,   95,  138,  139,   96,  151,   97,  152,  134,
00480       136,   67,   67,   66,  111,   98,  100,  151,   99,  152,
00481       111,  114,  115,  114,  152,  114,  110,  110,  151,  123,
00482       127,  123,  127,  125,  127,  151,  126,  127,  152,  123,
00483       127,  120,  117,  119,  151,  118,  120,  152,  120,  131,
00484       129,  131,  151,  130,  131,  152,  131,   57,   54,   57,
00485        61,   60,   62,  144,  151,  143,  152,  146,   53,   50,
00486        32,  151,   32,  152,   33,  105,    4,16391,   49,   49,
00487        49,   49,   42,   49,   49,   49,   49,   49,   75,   75,
00488        75,   70,   75,   75,    4,   77,   14,   14,   20,16403,
00489 
00490         4,   16,    4,    4,   84,    4,   94,  139,    4,  111,
00491         4,  114,  109,    4,  123,  127,    4,  127,    4,  120,
00492         4,  131,   57,   26,    8, 8199,   49,   49,   49,   49,
00493        49,   49,   49,   49,   49,   75,   71,   75,   75,   75,
00494        13,   12,   13,   20,16403,   95,  101,   57,   26,    8,
00495         8,   49,   43,   46,   44,   44,   49,   49,   49,   49,
00496        49,   49,   49,   72,   75,   73,   75,   75,   12,   20,
00497     16403,  103,   57,    8,   49,   47,   39,   38,   49,   49,
00498        49,   45,   20,16403,  102,  104,  106,   57,    8,   37,
00499        41,   40,16419,   36,    9,   57,    8, 8227,   56,   55,
00500 
00501         8, 8227,  108,    8,    8,    8,    8
00502     } ;
00503 
00504 static yyconst flex_int16_t yy_accept[1057] =
00505     {   0,
00506         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00507         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00508         1,    1,    1,    1,    1,    2,    3,    3,    3,    3,
00509         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
00510         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
00511         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
00512         3,    3,    3,    3,    3,    4,    6,    9,   11,   14,
00513        16,   18,   21,   24,   28,   31,   34,   38,   41,   44,
00514        47,   50,   54,   57,   61,   64,   68,   71,   74,   78,
00515        82,   86,   90,   94,   98,  101,  105,  108,  112,  115,
00516 
00517       118,  122,  126,  130,  134,  138,  143,  146,  151,  154,
00518       158,  163,  166,  170,  173,  177,  181,  184,  187,  190,
00519       195,  198,  203,  207,  211,  215,  218,  222,  225,  228,
00520       231,  233,  237,  239,  242,  245,  247,  249,  252,  255,
00521       258,  262,  265,  269,  272,  275,  278,  282,  287,  289,
00522       292,  295,  298,  300,  303,  306,  310,  314,  317,  321,
00523       325,  329,  333,  336,  339,  343,  347,  350,  354,  357,
00524       361,  364,  368,  371,  374,  378,  382,  387,  391,  395,
00525       400,  404,  408,  412,  417,  421,  425,  428,  433,  436,
00526       439,  443,  446,  451,  455,  460,  464,  469,  472,  476,
00527 
00528       480,  484,  489,  492,  495,  498,  503,  508,  511,  517,
00529       521,  526,  529,  535,  539,  543,  546,  551,  554,  558,
00530       562,  567,  571,  575,  580,  584,  588,  593,  596,  600,
00531       603,  607,  610,  613,  617,  620,  624,  628,  631,  635,
00532       638,  642,  645,  648,  652,  655,  659,  663,  667,  670,
00533       674,  678,  682,  685,  688,  691,  695,  698,  702,  706,
00534       710,  713,  716,  719,  723,  726,  729,  733,  737,  740,
00535       743,  746,  750,  753,  757,  760,  764,  768,  771,  775,
00536       779,  782,  785,  789,  793,  796,  800,  804,  808,  811,
00537       814,  817,  821,  824,  828,  832,  835,  838,  842,  846,
00538 
00539       847,  848,  848,  849,  850,  851,  852,  852,  852,  852,
00540       853,  854,  855,  856,  857,  858,  859,  860,  862,  864,
00541       865,  866,  867,  868,  869,  870,  870,  870,  870,  871,
00542       873,  874,  874,  876,  877,  879,  881,  882,  883,  883,
00543       884,  885,  886,  886,  886,  887,  888,  888,  889,  890,
00544       891,  891,  892,  892,  893,  894,  895,  898,  898,  899,
00545       900,  901,  902,  902,  903,  903,  904,  905,  905,  906,
00546       908,  910,  911,  912,  912,  913,  914,  915,  916,  917,
00547       919,  921,  922,  922,  922,  922,  922,  922,  922,  922,
00548       922,  922,  922,  923,  924,  926,  927,  928,  930,  930,
00549 
00550       930,  932,  933,  934,  937,  940,  942,  942,  943,  944,
00551       946,  949,  950,  951,  954,  957,  958,  959,  960,  960,
00552       961,  962,  963,  964,  966,  968,  969,  970,  971,  971,
00553       971,  971,  973,  975,  976,  977,  978,  978,  978,  979,
00554       980,  981,  982,  983,  984,  985,  986,  987,  988,  989,
00555       990,  991,  992,  993,  994,  995,  997,  998,  998,  999,
00556       999,  999, 1001, 1003, 1004, 1006, 1007, 1008, 1008, 1009,
00557      1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011,
00558      1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1013,
00559      1013, 1014, 1017, 1019, 1019, 1021, 1023, 1024, 1024, 1025,
00560 
00561      1025, 1025, 1025, 1025, 1025, 1026, 1026, 1027, 1028, 1029,
00562      1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1039, 1040,
00563      1041, 1042, 1044, 1044, 1044, 1046, 1047, 1047, 1047, 1048,
00564      1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048,
00565      1048, 1048, 1048, 1048, 1048, 1048, 1048, 1049, 1049, 1050,
00566      1050, 1050, 1051, 1051, 1052, 1052, 1053, 1055, 1056, 1057,
00567      1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1065, 1066,
00568      1068, 1069, 1070, 1070, 1070, 1072, 1072, 1072, 1072, 1072,
00569      1072, 1072, 1072, 1072, 1072, 1073, 1073, 1073, 1073, 1073,
00570      1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
00571 
00572      1073, 1074, 1074, 1074, 1074, 1075, 1075, 1076, 1076, 1076,
00573      1077, 1078, 1079, 1080, 1081, 1082, 1083, 1083, 1083, 1085,
00574      1086, 1086, 1086, 1086, 1086, 1086, 1086, 1087, 1088, 1088,
00575      1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
00576      1088, 1088, 1088, 1088, 1088, 1089, 1089, 1090, 1090, 1091,
00577      1091, 1092, 1093, 1094, 1095, 1095, 1095, 1095, 1095, 1096,
00578      1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096,
00579      1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096,
00580      1097, 1097, 1098, 1098, 1099, 1099, 1099, 1099, 1099, 1099,
00581      1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
00582 
00583      1099, 1099, 1099, 1099, 1100, 1101, 1101, 1102, 1102, 1103,
00584      1103, 1103, 1103, 1103, 1103, 1103, 1104, 1104, 1104, 1104,
00585      1104, 1104, 1104, 1104, 1104, 1105, 1105, 1105, 1105, 1105,
00586      1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1106, 1106,
00587      1106, 1106, 1106, 1106, 1106, 1106, 1106, 1107, 1107, 1107,
00588      1107, 1107, 1107, 1107, 1108, 1108, 1108, 1108, 1108, 1108,
00589      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00590      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00591      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00592      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00593 
00594      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00595      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00596      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00597      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00598      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00599      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00600      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00601      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00602      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00603      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00604 
00605      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00606      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00607      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00608      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00609      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00610      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00611      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00612      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00613      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00614      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00615 
00616      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00617      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00618      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00619      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00620      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
00621      1108, 1108, 1108, 1108, 1108, 1108
00622     } ;
00623 
00624 static yyconst flex_int32_t yy_ec[256] =
00625     {   0,
00626         1,    1,    1,    1,    1,    2,    1,    1,    3,    4,
00627         1,    1,    5,    1,    1,    1,    1,    1,    1,    1,
00628         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00629         1,    3,    6,    7,    8,    9,    1,    1,   10,   11,
00630        12,   13,    1,   14,   15,   16,   17,   18,   18,   18,
00631        18,   18,   18,   18,   18,   19,   19,   20,    1,   21,
00632        22,   23,   24,   25,   26,   26,   27,   26,   26,   26,
00633        26,   26,   26,   26,   26,   26,   26,   26,   26,   26,
00634        26,   26,   26,   26,   26,   26,   26,   26,   26,   26,
00635        28,   29,   30,    1,   26,    1,   31,   32,   33,   34,
00636 
00637        35,   36,   37,   38,   39,   37,   37,   40,   41,   42,
00638        43,   44,   37,   45,   46,   47,   48,   49,   37,   50,
00639        51,   37,   52,    1,   53,    1,    1,    1,    1,    1,
00640         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00641         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00642         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00643         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00644         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00645         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00646         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00647 
00648         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00649         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00650         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00651         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00652         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00653         1,    1,    1,    1,    1
00654     } ;
00655 
00656 static yyconst flex_int32_t yy_meta[55] =
00657     {   0,
00658         1,    2,    3,    4,    5,    6,    7,    1,    1,    8,
00659         9,    6,   10,    1,   11,   12,   13,   14,   14,    1,
00660        15,    6,    6,    1,   16,   17,   17,    1,   18,    1,
00661        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
00662        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
00663        17,    1,    1,    1
00664     } ;
00665 
00666 static yyconst flex_int16_t yy_base[1114] =
00667     {   0,
00668         0,    4,    8,   61,  115,    0,  169,    0,   14,   18,
00669       223,    0,   32,  276,  280,  284,  338,    0,  391,  395,
00670       424,    0,  475,    0,  529,    0,   43,  399,  582,  586,
00671       590,  596,  649,  702,  756,    0,  809,  862,  613,  655,
00672       622,  681,  617,  697,  916,    0,  970,    0, 1013,    0,
00673       823,  841,  827, 1063, 1092,    0, 1067, 1142, 1195, 1248,
00674      1150, 1156, 1302,    0, 2439, 4450, 4450, 4450, 4450,   13,
00675      2409, 4450, 4450, 4450,   47, 4450, 4450, 4450,   16, 2398,
00676        72, 4450, 4450, 4450, 4450, 4450,   27, 2396,    0, 2383,
00677         1,   10, 2371, 4450, 4450, 4450, 4450, 4450,   40, 2387,
00678 
00679         0,   37, 2374, 4450,    0,    0, 4450,    0,   63, 2376,
00680         0, 4450, 4450, 4450, 4450, 4450, 2361,   76, 2364,   91,
00681        10,  684, 4450, 4450, 4450,    0,    0, 4450,   87, 2355,
00682         0,    0,    4,   85,  272,  289,  287,  291,   98, 2365,
00683      2364, 4450, 2362,  305,  295,   66, 2358,  102,  100, 2357,
00684      2356, 2354, 2339,  310, 4450, 4450,  312, 4450, 4450, 4450,
00685      2346, 4450,   94, 2320, 4450,    0,   77, 4450, 4450, 4450,
00686      4450, 4450,   97, 2314, 4450, 4450, 4450,  313, 4450, 4450,
00687      4450,  310, 2301, 4450,    0, 4450, 4450,    0, 2302,  311,
00688      2282, 1332,    0,    0,    0,    0,    0, 2280,  312, 2271,
00689 
00690         0,    0, 2272,  318,  297,  392,    0, 4450,  396,  393,
00691       409,  257,  412,    0, 4450, 4450,    0, 2271,  404, 2259,
00692         0,    0, 4450,    0,  405, 2253,    0, 4450, 4450, 4450,
00693      4450,  414, 2252,    0,  332, 2239, 4450, 4450, 4450, 4450,
00694      4450,  415, 2246,    0, 2264, 4450, 4450,    0, 4450, 4450,
00695      4450, 4450,  417, 2243,    0, 4450, 4450, 4450, 4450, 4450,
00696       422, 2241,    0, 4450,    0, 4450, 4450, 4450,  423, 2240,
00697       433, 4450, 4450, 4450, 4450, 4450, 4450, 2230, 4450, 4450,
00698       429, 2230, 4450, 4450, 4450, 4450, 4450, 4450,  430, 2229,
00699         0, 4450, 4450, 4450, 4450,  431, 2218,    0, 4450, 4450,
00700 
00701      4450,    0, 4450,  655, 4450,  714,  582, 2228,  719,    0,
00702      2202,  550, 2198,  622, 2180, 2190, 2186, 4450, 4450,    0,
00703       558, 2180,  705,    0, 1377, 2197,  598,  644, 4450,  739,
00704      4450, 2201,  812,    0,    0,    0, 1395, 4450,  418, 4450,
00705       622,  645, 1413,  620, 4450,  658, 2200, 4450, 2195, 2194,
00706      1433, 4450, 2191,  608, 4450, 4450,  689,  717, 2184, 2179,
00707      2177, 2176, 2160,  674, 2147,  694,  662, 2154, 2157, 4450,
00708      4450,    0, 4450, 2152, 4450,  688, 4450,    0, 4450, 2137,
00709      4450, 1451, 1442, 2110, 2108, 2108, 2101, 2107, 2101, 2079,
00710      2090, 2082,    0, 4450,    0, 1487, 4450, 4450, 2061,  809,
00711 
00712       711,    0,    0,    0,    0, 1509, 2048,    0, 4450, 4450,
00713         0, 1527,    0,    0,    0, 1545,    0, 4450, 2086, 2040,
00714         0, 4450,    0, 4450, 4450, 4450,    0, 4450, 2068, 2054,
00715      2036, 4450, 4450, 4450,    0, 4450, 2033, 2031,  816, 2002,
00716      2000, 2000, 1994, 4450, 1997, 1989, 1979, 1979, 1975, 1973,
00717      1972, 1964, 4450, 1966, 1964,    0, 4450, 1981, 1979,  831,
00718       850,  869,    0,  729, 4450, 1984, 4450, 1967, 1978,    0,
00719      1936, 1931,  841, 1925, 1940, 1929, 1900, 1911, 1899,  842,
00720      1884, 1896, 1878, 1870, 1873, 1869, 1852, 1856,    0, 1859,
00721      4450,  840,    0, 1842,    0,    0, 1844, 1866, 4450, 1865,
00722 
00723       872, 1860,  720, 1023, 1096, 1172, 4450, 1814,  886, 1568,
00724      1814, 1811, 1811, 1797, 1791, 1799,  895,  709, 1795, 1786,
00725      4450, 4450,  878,  904, 1031, 4450, 1787, 1771, 4450, 1774,
00726      1766, 1770, 1773, 1752, 1752, 1755, 1755,  750, 1754, 1744,
00727      1748, 1738, 1722, 1731, 1712, 1045, 1711, 1742, 4450,  884,
00728       896, 4450, 1178, 1183, 1211, 1712, 4450, 4450,  821, 1706,
00729      1622,  900, 1705, 1692, 1704, 1734, 4450,  832, 1698,    0,
00730      1026, 4450, 1723, 1099, 1103, 1690,  909, 1684, 1688, 1666,
00731      1660, 1665, 1637, 1108, 1146, 1522, 1521, 1513, 1517, 1516,
00732      1521, 1499, 1497, 1493, 1488, 1503, 1497, 1480, 1490, 1482,
00733 
00734      1482, 1506, 1493, 1218, 1222, 1236, 1498, 1027, 1454, 4450,
00735      1030, 4450, 1071, 1187, 1453, 1482, 1448, 1240, 1674, 1165,
00736      1438, 1429, 1435, 1425, 1434, 1422, 1229, 4450, 1243, 1418,
00737      1417, 1415, 1409, 1407, 1399, 1398, 1398, 1384, 1388, 1380,
00738      1384, 1386, 1364, 1368, 1370, 1359, 1466, 1502, 1399, 1251,
00739      1078, 4450, 1188, 4450, 1258, 1272, 1679, 1366, 4450, 1349,
00740      1347, 1340, 1338, 1329, 1335, 1340, 1329, 1318, 1308, 1307,
00741      1262, 1236, 1232, 1226, 1202, 1193, 1186, 1196, 1175, 1094,
00742      1509, 1684, 1688,    0, 1275, 1691, 1210, 1173, 1169, 1150,
00743      1142, 1150, 1133,    0, 1127, 1132, 1112, 1079, 1070, 1073,
00744 
00745      1067, 1067, 1051, 1153, 4450, 1696, 1702, 1707,    0, 1286,
00746      1710, 1725, 1037, 1037, 1029, 4450,  987,  989,  867,  865,
00747       845,  836,  838, 1715, 1741, 1746, 1289, 1753, 1381,  761,
00748       709,  676,  624,  592,  593,  558, 1765, 1768, 1771, 1392,
00749      1775, 1437,  403,  412,  364, 1791, 1796, 1799, 1410, 1803,
00750      1448,  266, 1821, 1825, 1829, 1542, 1833, 1491, 1849, 1854,
00751      1859, 1863, 1875, 1866, 1884, 1887, 1896, 1899, 1909, 1904,
00752      1918, 1921, 1930, 1933, 1938, 1947, 1954, 1959, 1950, 1964,
00753      1973, 1982, 1989, 2001, 1992, 2010, 2013, 2023, 2026, 2035,
00754      2044, 2047, 2052, 2057, 2063, 2066, 2075, 2078, 2081, 2090,
00755 
00756      2094, 2103, 2097, 2108, 2117, 2112, 2126, 2136, 2131, 2141,
00757      2154, 2163, 2167, 2170, 2181, 2186, 2189, 2198, 2205, 2214,
00758      2208, 2223, 2232, 2226, 2241, 2244, 2253, 2258, 2268, 2277,
00759      2282, 2287, 2296, 2299, 2304, 2309, 2313, 2323, 2318, 2332,
00760      2342, 2328, 2347, 2360, 2337, 2373, 2388, 2369, 2393, 2398,
00761      2378, 2403, 2412, 2382, 2421, 2424, 2433, 2438, 2441, 2450,
00762      2454, 2463, 2457, 2468, 2477, 2486, 2492, 2501, 2495, 2513,
00763      2516, 2527, 2530, 2539, 2551, 2554, 2559, 2568, 2571, 2581,
00764      2590, 2593, 2602, 2596, 2611, 2614, 2623, 2626, 2636, 2631,
00765      2641, 2646, 2655, 2658, 2667, 2676, 2681, 2686, 2691, 2697,
00766 
00767      2706, 2700, 2711, 2720, 2729, 2736, 2746, 2732, 2751, 2756,
00768      2741, 2765, 2775, 2761, 2784, 2796, 2770, 2801, 2812, 2787,
00769      2821, 2826, 2806, 2831, 2840, 2849, 2852, 2862, 2856, 2871,
00770      2876, 2867, 2885, 2895, 2881, 2900, 2913, 2890, 2918, 2927,
00771      2922, 2932, 2941, 2936, 2946, 2951, 2956, 2964, 2973, 2967,
00772      2978, 2987, 2982, 2996, 3006, 2992, 3001, 3011, 3023,   73,
00773      3026, 3037, 3042, 3047, 3057, 3051, 3062, 3067, 3076, 3081,
00774      3093, 3087, 3102, 3107, 3112, 3117, 3120,    7, 3126, 3131,
00775      3137, 3143, 3146, 3152, 3157, 3162, 3170, 3176, 3181, 3187,
00776      3196, 3202, 3207, 3212, 3215, 3220, 3226, 3231, 3237, 3240,
00777 
00778      3246, 3252, 3257, 3265, 3270, 3276, 3281, 3290, 3296, 3302,
00779      3307, 3310, 3315, 3320, 3326, 3331, 3334, 3340, 3346, 3352,
00780      3360, 3365, 3370, 3376, 3384, 3390, 3396, 3402, 3405, 3410,
00781      3415, 3420, 3426, 3429, 3434, 3440, 3446, 3455, 3460, 3465,
00782      3470, 3479, 3484, 3490, 3496, 3499, 3505, 3510, 3515, 3520,
00783      3523, 3529, 3534, 3540, 4450, 3592, 3610, 3628, 3646, 3664,
00784      3682, 3700, 3718, 3736, 3754, 3772, 3790, 3808, 3826, 3844,
00785      3862, 3880, 3898,  588, 1148, 3916, 3934, 3950, 3967, 3984,
00786      4002, 4018, 4035, 4050, 4065, 1254, 4082, 4100, 4117, 4135,
00787      4152, 4169, 4186, 4204, 1267, 1268, 1281, 4222, 1282, 4240,
00788 
00789      4258, 4266, 4278, 4293, 4311, 4329, 4346, 4364, 4382, 4399,
00790      4414, 1354, 4431
00791     } ;
00792 
00793 static yyconst flex_int16_t yy_def[1114] =
00794     {   0,
00795      1056, 1056, 1056, 1057, 1055,    5, 1055,    7, 1058, 1058,
00796      1055,   11, 1059, 1059, 1060, 1060, 1055,   17, 1061, 1061,
00797        17,   21, 1055,   23, 1055,   25, 1062, 1063, 1056, 1056,
00798      1056, 1056, 1064, 1064, 1055,   35, 1064, 1064, 1065, 1065,
00799      1066, 1066, 1067, 1067, 1055,   45, 1055,   47,   47,   49,
00800      1068, 1068, 1069, 1069,   21,   55, 1070, 1070, 1071, 1071,
00801      1072, 1072, 1055,   63, 1055, 1055, 1055, 1055, 1055, 1055,
00802      1055, 1055, 1055, 1055, 1073, 1055, 1055, 1055, 1055, 1055,
00803      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1074, 1074,
00804      1074, 1074, 1074, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00805 
00806      1075, 1075, 1075, 1055, 1076, 1076, 1055, 1076, 1055, 1076,
00807      1076, 1055, 1055, 1055, 1055, 1055, 1077, 1055, 1055, 1078,
00808      1055, 1078, 1055, 1055, 1055, 1079, 1079, 1055, 1079, 1079,
00809      1080, 1079, 1081, 1081, 1081, 1081, 1081, 1081, 1082, 1083,
00810      1083, 1055, 1083, 1083, 1083, 1055, 1083, 1084, 1055, 1055,
00811      1055, 1055, 1055, 1085, 1055, 1055, 1055, 1055, 1055, 1055,
00812      1055, 1055, 1055, 1055, 1055, 1086, 1055, 1055, 1055, 1055,
00813      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1087, 1055, 1055,
00814      1055, 1055, 1055, 1055, 1088, 1055, 1055, 1088, 1055, 1055,
00815      1088, 1055, 1088, 1089, 1089, 1089, 1089, 1055, 1089, 1089,
00816 
00817      1086, 1089, 1055, 1055, 1055, 1090, 1091, 1055, 1090, 1092,
00818      1090, 1055, 1090, 1093, 1055, 1055, 1093, 1055, 1093, 1093,
00819      1093, 1094, 1055, 1094, 1094, 1094, 1094, 1055, 1055, 1055,
00820      1055, 1055, 1055, 1095, 1055, 1095, 1055, 1055, 1055, 1055,
00821      1055, 1055, 1055, 1096, 1055, 1055, 1055, 1097, 1055, 1055,
00822      1055, 1055, 1055, 1055, 1098, 1055, 1055, 1055, 1055, 1055,
00823      1055, 1055, 1098, 1055, 1099, 1055, 1055, 1055, 1055, 1055,
00824      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1100, 1055, 1055,
00825      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00826      1101, 1055, 1055, 1055, 1055, 1055, 1055, 1102, 1055, 1055,
00827 
00828      1055, 1103, 1055, 1073, 1055, 1055, 1055, 1104, 1055, 1074,
00829      1074, 1074, 1074, 1074, 1074, 1074, 1074, 1055, 1055, 1075,
00830      1075, 1075, 1075, 1076, 1076, 1055, 1105, 1055, 1055, 1078,
00831      1055, 1055, 1078, 1079, 1079, 1079, 1079, 1055, 1081, 1055,
00832      1081, 1081, 1081, 1055, 1055, 1082, 1083, 1055, 1083, 1083,
00833      1083, 1055, 1055, 1055, 1055, 1055, 1084, 1055, 1055, 1055,
00834      1055, 1055, 1055, 1055, 1055, 1085, 1055, 1055, 1055, 1055,
00835      1055, 1086, 1055, 1055, 1055, 1087, 1055, 1088, 1055, 1055,
00836      1055, 1088, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00837      1055, 1055, 1089, 1055, 1089, 1089, 1055, 1055, 1055, 1055,
00838 
00839      1090, 1091, 1092, 1092, 1092, 1090, 1055, 1093, 1055, 1055,
00840      1093, 1093, 1094, 1094, 1094, 1094, 1095, 1055, 1055, 1095,
00841      1096, 1055, 1097, 1055, 1055, 1055, 1099, 1055, 1055, 1106,
00842      1107, 1055, 1055, 1055, 1102, 1055, 1108, 1104, 1055, 1074,
00843      1074, 1074, 1074, 1055, 1074, 1074, 1074, 1074, 1074, 1075,
00844      1075, 1075, 1055, 1075, 1075, 1076, 1055, 1055, 1055, 1055,
00845      1055, 1078, 1079, 1081, 1055, 1083, 1055, 1055, 1055, 1088,
00846      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00847      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1089, 1055,
00848      1055, 1090, 1092, 1055, 1093, 1094, 1095, 1109, 1055, 1055,
00849 
00850      1055, 1108, 1055, 1055, 1055, 1055, 1055, 1074, 1074, 1055,
00851      1074, 1074, 1074, 1074, 1074, 1074, 1075, 1075, 1075, 1075,
00852      1055, 1055, 1055, 1055, 1078, 1055, 1055, 1055, 1055, 1055,
00853      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00854      1055, 1055, 1055, 1055, 1055, 1055, 1095, 1110, 1055, 1055,
00855      1055, 1055, 1055, 1055, 1055, 1074, 1055, 1055, 1055, 1074,
00856      1055, 1074, 1074, 1074, 1074, 1074, 1055, 1055, 1075, 1075,
00857      1075, 1055, 1055, 1055, 1078, 1055, 1055, 1055, 1055, 1055,
00858      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00859      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00860 
00861      1095, 1055, 1055, 1055, 1055, 1055, 1074, 1055, 1055, 1055,
00862      1055, 1055, 1074, 1074, 1074, 1055, 1055, 1055, 1078, 1055,
00863      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00864      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00865      1055, 1055, 1055, 1055, 1095, 1055, 1055, 1055, 1055, 1055,
00866      1055, 1055, 1111, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00867      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00868      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1095,
00869      1055, 1055, 1055, 1112, 1055, 1055, 1055, 1055, 1055, 1055,
00870      1055, 1055, 1055, 1113, 1055, 1055, 1055, 1055, 1055, 1055,
00871 
00872      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1112, 1055,
00873      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00874      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00875      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00876      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00877      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00878      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00879      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00880      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00881      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00882 
00883      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00884      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00885      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00886      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00887      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00888      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00889      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00890      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00891      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00892      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00893 
00894      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00895      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00896      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00897      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00898      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00899      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00900      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00901      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00902      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00903      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00904 
00905      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00906      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00907      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00908      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00909      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00910      1055, 1055, 1055, 1055,    0, 1055, 1055, 1055, 1055, 1055,
00911      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00912      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00913      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00914      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00915 
00916      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
00917      1055, 1055, 1055
00918     } ;
00919 
00920 static yyconst flex_int16_t yy_nxt[4505] =
00921     {   0,
00922      1055,   67, 1055,   68,   69,   67, 1055,   68,   69,   67,
00923       340,   68,   69,  331,  332,  106,   70,  107,  108,  106,
00924        70,  107,  108,   71,   70,  300,  340,   71,  300,  301,
00925       109,   71,  301,  127,  109,   68,   69,  110,  128,  300,
00926       312,  110,  313,  301,  170,  314,  171,  172,  129,  304,
00927       315,  316,  318,   72,  305,  130,  319,   72,  659,  173,
00928       131,   72,   74,   75,   76,   77,  174,  111,   78,  352,
00929       353,  111,  306,  306,  307,  318,  321,   79,  322,  319,
00930       373,  374,  308,  329,   80,  132,   81,   81,  300,  309,
00931       309,  340,  301,  328,  328,  328,  175,  309,  309,  335,
00932 
00933       344,  329,  358,  336,  354,  355,  370,  340,  345,  318,
00934       371,  359,  356,  319,   82,   83,   84,   83,   85,   86,
00935        83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
00936        83,   87,   83,   83,   83,   83,   83,   83,   88,   83,
00937        89,   89,   83,   83,   83,   89,   89,   89,   90,   91,
00938        89,   89,   89,   92,   89,   89,   89,   89,   89,   89,
00939        89,   89,   93,   89,   89,   89,   83,   83,   94,   95,
00940        96,   95,   97,   98,   95,   95,   95,   95,   95,   95,
00941        95,   95,   95,   95,   95,   99,   95,   95,   95,   95,
00942        95,   95,  100,   95,  101,  101,   95,   95,   95,  101,
00943 
00944       101,  101,  101,  102,  101,  101,  101,  103,  101,  101,
00945       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
00946        95,   95,  104,  112,  113,  112,  114,  115,  112,  116,
00947       112,  112,  117,  112,  112,  112,  112,  112,  112,  118,
00948       112,  112,  112,  112,  112,  112,  119,  112,  120,  120,
00949       112,  121,  112,  120,  120,  120,  120,  122,  120,  120,
00950       120,  120,  120,  120,  120,  120,  120,  120,  120,  120,
00951       120,  120,  120,  120,  123,  124,  125,  127,  340,   68,
00952        69,  134,  128,   68,  135,  134,   66,   68,  135,  407,
00953        66,  386,  129,  340,  340,  340,  136,  340,  348,  130,
00954 
00955       136,  341,   66,  137,  131,  342,   66,  137,  348,  340,
00956       343,  340,  364,  340,  367,  376,  491,  349,  351,  368,
00957       377,  350,  318,  380,  300,  365,  319,  381,  395,  132,
00958       398,  399,  400,  138,  301,  418,  419,  138,   66,   67,
00959        66,   68,   69,   66,   66,   66,   66,   66,   66,   66,
00960        66,   66,   66,   66,   70,   66,   66,   66,   66,   66,
00961        66,   71,   66,  139,  139,   66,   66,   66,  139,  139,
00962       139,  139,  139,  139,  139,  139,  139,  139,  139,  139,
00963       139,  139,  139,  139,  139,  139,  139,  139,  139,   66,
00964        66,   72,  141,  402,  142,  143,  141,  402,  142,  143,
00965 
00966       177,  178,  179,  180,  491,  404,  181,  144,  403,  405,
00967       402,  144,  403,  402,  145,  182,  410,  414,  145,  146,
00968       411,  415,  183,  146,  340,  403,  300,  300,  403,  424,
00969       301,  301,  406,  425,  300,  300,  428,  429,  301,  301,
00970       340,  300,  432,  300,  147,  301,  433,  301,  147,  148,
00971       148,  752,  184,  491,  148,  148,  148,  148,  148,  148,
00972       148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
00973       148,  148,  148,  148,  148,   66,   67,  149,   68,   69,
00974        66,   66,   66,   66,   66,  150,  151,   66,  152,   66,
00975       153,   70,   66,   66,   66,   66,   66,   66,   71,   66,
00976 
00977       154,  154,   66,   66,   66,  154,  154,  154,  154,  154,
00978       154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
00979       154,  154,  154,  154,  154,  154,   66,   66,   72,  155,
00980       156,  157,  158,  159,  155,  160,  161,  155,  162,  155,
00981       155,  155,  155,  155,  155,  163,  155,  155,  155,  155,
00982       155,  155,  164,  165,  166,  166,  155,  167,  155,  166,
00983       166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
00984       166,  166,  166,  166,  166,  166,  166,  166,  166,  166,
00985       155,  155,  168,   67,  307,   68,   69,   67,  441,   68,
00986        69,   67,  437,   68,   69,  442,  450,   67,   70,   68,
00987 
00988        69,  310,   70,  451,  310,   71,   70,  459,  491,   71,
00989       354,  355,   70,   71,  207,  460,  208,  209,  223,   71,
00990       208,  224,  344,  215,  444,  216,  217,  444,  340,  210,
00991       345,  745,  444,  225,  218,   72,  211,  212,  219,   72,
00992       226,  212,  491,   72,  340,  220,  461,  461,  461,   72,
00993       186,  340,  187,  188,  329,  445,  207,  304,  208,  209,
00994       344,  189,  305,  446,  367,  190,  213,  340,  345,  368,
00995       227,  210,  191,  192,  491,  221,  364,  192,  211,  212,
00996       306,  306,  215,  212,  216,  217,  328,  328,  328,  365,
00997       376,  354,  355,  218,  329,  377,  364,  219,  223,  356,
00998 
00999       208,  224,  193,  186,  220,  187,  188,  453,  213,  365,
01000       453,  568,  402,  225,  189,  453,  307,  744,  190,  358,
01001       226,  307,  551,  552,  308,  191,  192,  403,  359,  308,
01002       192,  309,  309,  333,  221,  340,  309,  309,  454,  309,
01003       309,  328,  328,  328,  309,  309,  455,  569,  743,  329,
01004       227,  340,  585,  585,  585,  193,  194,  195,  194,  196,
01005       197,  194,  194,  194,  194,  194,  194,  194,  198,  194,
01006       194,  194,  199,  194,  194,  194,  194,  194,  194,  200,
01007       194,  201,  201,  194,  194,  194,  201,  201,  201,  201,
01008       201,  201,  201,  201,  201,  201,  201,  201,  201,  201,
01009 
01010       201,  201,  201,  201,  201,  201,  201,  194,  194,  202,
01011       186,  577,  187,  188,  328,  328,  328,  491,  504,  505,
01012       506,  203,  329,  608,  250,  204,   68,  251,  258,  252,
01013        68,  259,  191,  205,  568,  507,  260,  205,  491,  253,
01014       522,  402,  250,  261,   68,  251,  254,  252,  523,  529,
01015       262,  255,  524,  524,  524,  263,  403,  253,  462,  609,
01016       329,  491,  193,  186,  254,  187,  188,  507,  529,  255,
01017       617,  328,  328,  328,  203,  536,  256,  736,  204,  329,
01018       264,  549,  735,  537,  734,  191,  205,  572,  557,  550,
01019       205,  557,  529,  499,  256,  573,  557,  567,  551,  552,
01020 
01021       567,  603,  611,  525,  733,  567,  574,  574,  574,  732,
01022       612,  620,  620,  620,  329,  193,  228,  229,  228,  230,
01023       231,  228,  228,  228,  228,  228,  228,  228,  228,  228,
01024       228,  228,  232,  228,  228,  228,  228,  228,  228,  233,
01025       228,  234,  234,  228,  235,  228,  234,  234,  234,  236,
01026       234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
01027       234,  234,  234,  234,  234,  234,  234,  228,  228,  237,
01028       238,  239,  238,  240,  241,  238,  238,  238,  238,  238,
01029       238,  238,  238,  238,  238,  238,  242,  238,  238,  238,
01030       238,  238,  238,  243,  238,  244,  244,  238,  245,  238,
01031 
01032       244,  244,  244,  244,  244,  244,  244,  244,  244,  244,
01033       244,  244,  244,  244,  244,  244,  244,  244,  244,  244,
01034       244,  238,  238,  246,  247,  553,  554,  555,  453,  608,
01035       731,  453,  611,  328,  328,  328,  453,  538,  248,  248,
01036       612,  329,  507,  248,  248,  248,  248,  248,  248,  248,
01037       248,  248,  248,  248,  248,  248,  248,  248,  248,  248,
01038       248,  248,  248,  248,  258,  609,   68,  259,  267,  577,
01039        85,  268,  260,  651,  507,  575,  730,  593,  594,  261,
01040       651,  652,  595,  269,  596,  597,  262,  577,  652,  598,
01041       270,  263,  723,  599,  600,  271,  704,  722,  555,  555,
01042 
01043       555,  618,  618,  618,  705,  328,  328,  328,  721,  329,
01044       627,  628,  629,  329,  720,  507,  264,  265,  265,  719,
01045       272,  718,  265,  265,  265,  265,  265,  265,  265,  265,
01046       265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
01047       265,  265,  265,  267,  619,   85,  268,  507,  585,  585,
01048       585,  286,  538,   68,  287,  704,  288,  286,  269,   68,
01049       287,  320,  288,  705,  320,  270,  289,  620,  620,  620,
01050       271,  717,  289,  290,  555,  555,  555,  538,  291,  290,
01051       604,  605,  606,  577,  291,  606,  606,  606,  715,  653,
01052       653,  507,  577,  654,  654,  272,  274,  507,  275,  276,
01053 
01054       577,  277,  507,  292,  278,  279,  280,  654,  654,  292,
01055       714,  281,  713,  606,  606,  606,  712,  703,  282,  283,
01056       646,  647,  648,  507,  648,  648,  648,  702,  701,  507,
01057       507,  627,  628,  629,  507,  700,  699,  507,  648,  648,
01058       648,  507,  656,  656,  656,  629,  628,  629,  284,  274,
01059       329,  275,  276,  557,  277,  507,  557,  278,  279,  280,
01060       567,  557,  507,  567,  281,  698,  491,  372,  567,  507,
01061       372,  282,  283,  507,  685,  685,  685,  710,  710,  710,
01062       417,  421,  329,  417,  421,  329,  538,  507,  727,  727,
01063       727,  740,  740,  740,  423,  427,  329,  423,  427,  329,
01064 
01065       697,  284,  293,  294,  293,   68,  295,  293,  293,  293,
01066       293,  293,  293,  293,  293,  293,  293,  293,  296,  293,
01067       293,  293,  293,  293,  293,  297,  293,  298,  298,  293,
01068       293,  293,  298,  298,  298,  298,  298,  298,  298,  298,
01069       298,  298,  298,  298,  298,  298,  298,  298,  298,  298,
01070       298,  298,  298,  293,  293,  299,  383,  538,  538,  696,
01071       383,  681,  682,  683,  384,  385,  386,  709,  695,  387,
01072       709,  388,  389,  694,  693,  692,  390,  691,  507,  690,
01073       391,  392,  456,  742,  742,  742,  456,  456,  456,  689,
01074       688,  456,  687,  436,  749,  749,  749,  456,  456,  456,
01075 
01076       463,  649,  329,  680,  463,  463,  463,  679,  678,  463,
01077       507,  463,  756,  756,  756,  463,  463,  463,  464,  340,
01078       329,  677,  464,  464,  464,  676,  675,  464,  674,  464,
01079       491,  673,  659,  464,  464,  465,  348,  672,  466,  751,
01080       751,  751,  466,  466,  466,  671,  670,  466,  669,  466,
01081       758,  758,  758,  466,  466,  466,  470,  668,  667,  666,
01082       470,  470,  470,  665,  664,  470,  663,  436,  683,  683,
01083       683,  470,  470,  470,  471,  472,  662,  473,  661,  474,
01084       660,  475,  476,  655,  616,  507,  477,  614,  659,  650,
01085       478,  479,  489,  761,  761,  761,  489,  489,  489,  659,
01086 
01087       649,  489,  499,  489,  683,  683,  683,  489,  489,  489,
01088       402,  706,  707,  708,  492,  499,  645,  507,  492,  492,
01089       492,  507,  644,  492,  643,  493,  642,  641,  507,  492,
01090       492,  492,  495,  640,  639,  638,  495,  495,  495,  637,
01091       636,  495,  659,  495,  759,  759,  759,  495,  495,  495,
01092       496,  635,  329,  507,  496,  496,  496,  634,  633,  496,
01093       507,  496,  632,  631,  630,  496,  496,  496,  558,  558,
01094       559,  558,  558,  558,  558,  558,  558,  558,  558,  558,
01095       558,  558,  558,  558,  558,  310,  310,  558,  558,  558,
01096       558,  558,  558,  310,  310,  558,  558,  558,  310,  310,
01097 
01098       310,  310,  310,  310,  310,  310,  560,  310,  310,  310,
01099       310,  310,  310,  310,  310,  310,  310,  310,  310,  558,
01100       558,  558,  610,  610,  610,  610,  610,  610,  610,  610,
01101       610,  610,  610,  610,  610,  610,  610,  610,  610,  310,
01102       310,  610,  610,  610,  610,  610,  610,  310,  310,  610,
01103       610,  610,  310,  310,  310,  310,  310,  310,  310,  310,
01104       310,  310,  310,  310,  310,  310,  310,  310,  310,  310,
01105       310,  310,  310,  610,  610,  610,  657,  657,  657,  626,
01106       658,  686,  686,  686,  329,  658,  708,  708,  708,  329,
01107       708,  708,  708,  711,  711,  711,  625,  658,  724,  725,
01108 
01109       726,  329,  624,  507,  726,  726,  726,  507,  623,  726,
01110       726,  726,  728,  728,  728,  507,  658,  737,  738,  739,
01111       329,  507,  622,  621,  577,  659,  507,  729,  729,  729,
01112       659,  658,  572,  517,  507,  507,  616,  615,  614,  507,
01113       613,  509,  659,  739,  739,  739,  607,  507,  739,  739,
01114       739,  499,  601,  507,  592,  741,  741,  741,  507,  658,
01115       507,  659,  591,  329,  590,  507,  507,  746,  747,  748,
01116       748,  748,  748,  748,  748,  748,  659,  750,  750,  750,
01117       589,  658,  588,  587,  507,  329,  586,  507,  584,  538,
01118       507,  583,  507,  753,  754,  755,  582,  507,  755,  755,
01119 
01120       755,  755,  755,  755,  659,  757,  757,  757,  581,  658,
01121       507,  580,  579,  329,  578,  507,  507,  577,  507,  507,
01122       576,  571,  507,  753,  754,  755,  659,  755,  755,  755,
01123       570,  755,  755,  755,  566,  760,  760,  760,  565,  658,
01124       507,  564,  507,  329,  507,  563,  562,  507,  507,  561,
01125       507,  762,  762,  762,  659,  556,  763,  763,  763,  329,
01126       658,  764,  764,  764,  329,  765,  765,  765,  767,  767,
01127       767,  503,  507,  329,  499,  499,  507,  766,  766,  766,
01128       507,  658,  547,  537,  659,  329,  768,  768,  768,  769,
01129       769,  769,  546,  658,  329,  545,  544,  329,  770,  770,
01130 
01131       770,  771,  771,  771,  543,  659,  773,  773,  773,  329,
01132       659,  772,  772,  772,  542,  658,  541,  659,  540,  329,
01133       774,  774,  774,  775,  775,  775,  659,  658,  329,  539,
01134       538,  329,  776,  776,  776,  777,  777,  777,  659,  535,
01135       778,  778,  778,  329,  658,  534,  533,  659,  329,  779,
01136       779,  779,  782,  782,  782,  659,  780,  780,  780,  532,
01137       659,  781,  781,  781,  329,  658,  783,  783,  783,  329,
01138       531,  530,  659,  528,  329,  784,  784,  784,  527,  658,
01139       469,  659,  526,  329,  785,  785,  785,  348,  521,  659,
01140       521,  786,  786,  786,  788,  788,  788,  454,  659,  329,
01141 
01142       520,  659,  519,  787,  787,  787,  518,  658,  517,  516,
01143       659,  329,  789,  789,  789,  790,  790,  790,  515,  658,
01144       329,  514,  513,  329,  659,  791,  791,  791,  792,  792,
01145       792,  512,  511,  659,  510,  509,  329,  793,  793,  793,
01146       508,  658,  439,  659,  503,  329,  794,  794,  794,  795,
01147       795,  795,  659,  501,  796,  796,  796,  329,  658,  797,
01148       797,  797,  329,  499,  659,  798,  798,  798,  799,  799,
01149       799,  428,  658,  329,  659,  497,  329,  800,  800,  800,
01150       801,  801,  801,  802,  802,  802,  659,  658,  329,  418,
01151       494,  329,  803,  803,  803,  659,  804,  804,  804,  806,
01152 
01153       806,  806,  490,  659,  329,  805,  805,  805,  659,  658,
01154       807,  807,  807,  329,  809,  809,  809,  659,  329,  808,
01155       808,  808,  488,  658,  487,  486,  659,  329,  810,  810,
01156       810,  485,  659,  812,  812,  812,  329,  484,  811,  811,
01157       811,  659,  658,  813,  813,  813,  329,  483,  659,  482,
01158       481,  329,  480,  379,  659,  373,  814,  814,  814,  469,
01159       658,  369,  468,  659,  329,  815,  815,  815,  659,  816,
01160       816,  816,  817,  817,  817,  467,  658,  329,  362,  361,
01161       329,  360,  659,  818,  818,  818,  361,  659,  819,  819,
01162       819,  820,  820,  820,  352,  658,  329,  348,  348,  329,
01163 
01164       821,  821,  821,  348,  331,  659,  457,  822,  822,  822,
01165       824,  824,  824,  452,  659,  329,  823,  823,  823,  449,
01166       658,  659,  448,  447,  329,  825,  825,  825,  827,  827,
01167       827,  443,  659,  329,  826,  826,  826,  440,  658,  439,
01168       659,  302,  329,  828,  828,  828,  829,  829,  829,  659,
01169       658,  329,  302,  302,  329,  830,  830,  830,  431,  659,
01170       831,  831,  831,  302,  302,  659,  302,  422,  329,  302,
01171       832,  832,  832,  420,  658,  302,  416,  659,  329,  833,
01172       833,  833,  412,  659,  834,  834,  834,  409,  397,  835,
01173       835,  835,  329,  658,  396,  659,  394,  329,  836,  836,
01174 
01175       836,  837,  837,  837,  659,  382,  838,  838,  838,  329,
01176       658,  839,  839,  839,  329,  840,  840,  840,  379,  659,
01177       842,  842,  842,  329,  302,  841,  841,  841,  659,  658,
01178       845,  845,  845,  329,  843,  843,  843,  302,  659,  848,
01179       848,  848,  329,  302,  844,  844,  844,  659,  658,  846,
01180       846,  846,  329,  369,  363,  659,  362,  329,  361,  360,
01181       659,  348,  847,  847,  847,  348,  658,  348,  348,  659,
01182       329,  851,  851,  851,  659,  849,  849,  849,  337,  659,
01183       854,  854,  854,  329,  857,  857,  857,  302,  659,  327,
01184       850,  850,  850,  659,  658,  852,  852,  852,  329,  325,
01185 
01186       853,  853,  853,  329,  658,  855,  855,  855,  329,  323,
01187       302,  659,  317,  329,  856,  856,  856,  311,  658,  302,
01188       659,  302,  329,  858,  858,  858,  859,  859,  859,  659,
01189       658,  329,  302,  659,  329,  860,  860,  860, 1055,  659,
01190       861,  861,  861,  862,  862,  862, 1055,  658,  329,  659,
01191      1055,  329,  863,  863,  863, 1055,  864,  864,  864,  866,
01192       866,  866, 1055,  659,  329,  865,  865,  865, 1055,  658,
01193       867,  867,  867,  329, 1055,  659, 1055, 1055,  329,  868,
01194       868,  868, 1055,  658,  659, 1055, 1055,  329,  869,  869,
01195       869, 1055,  659, 1055,  870,  870,  870,  872,  872,  872,
01196 
01197      1055,  659,  329,  871,  871,  871, 1055,  658,  659, 1055,
01198      1055,  329, 1055, 1055,  659,  873,  873,  873,  874,  874,
01199       874, 1055,  658,  329, 1055, 1055,  329, 1055,  659,  875,
01200       875,  875,  876,  876,  876, 1055, 1055,  659, 1055, 1055,
01201       329,  877,  877,  877, 1055,  658,  659, 1055, 1055,  329,
01202      1055, 1055,  659,  878,  878,  878,  879,  879,  879, 1055,
01203      1055,  880,  880,  880,  329,  658, 1055,  659, 1055,  329,
01204       881,  881,  881,  882,  882,  882, 1055, 1055,  659, 1055,
01205      1055,  329, 1055,  883,  883,  883, 1055,  658, 1055, 1055,
01206       659,  329,  884,  884,  884,  885,  885,  885,  887,  887,
01207 
01208       887, 1055,  659,  329,  886,  886,  886, 1055,  658, 1055,
01209       659, 1055,  329,  888,  888,  888,  889,  889,  889,  659,
01210       658,  329, 1055, 1055,  329,  890,  890,  890,  891,  891,
01211       891, 1055,  659,  893,  893,  893,  329, 1055,  892,  892,
01212       892,  659,  658,  894,  894,  894,  329,  659,  895,  895,
01213       895,  329,  658,  659, 1055, 1055,  329,  896,  896,  896,
01214       897,  897,  897, 1055, 1055,  659, 1055, 1055,  329,  898,
01215       898,  898, 1055,  658,  659, 1055, 1055,  329,  899,  899,
01216       899, 1055,  659,  900,  900,  900, 1055,  659,  901,  901,
01217       901,  329,  658,  902,  902,  902,  329,  659, 1055,  903,
01218 
01219       903,  903,  905,  905,  905, 1055,  659,  329,  904,  904,
01220       904, 1055,  658,  906,  906,  906,  329, 1055,  659, 1055,
01221      1055,  329,  907,  907,  907, 1055,  658,  659, 1055, 1055,
01222       329,  908,  908,  908,  911,  911,  911,  659,  909,  909,
01223       909, 1055,  659,  914,  914,  914,  329, 1055,  910,  910,
01224       910,  659,  658,  912,  912,  912,  329,  659,  913,  913,
01225       913,  329,  658,  917,  917,  917,  329,  915,  915,  915,
01226      1055,  659,  920,  920,  920,  329, 1055,  916,  916,  916,
01227       659,  658, 1055,  659, 1055,  329,  918,  918,  918,  923,
01228       923,  923,  659, 1055,  329, 1055, 1055,  659,  919,  919,
01229 
01230       919, 1055,  658,  921,  921,  921,  329,  659,  926,  926,
01231       926,  329,  659, 1055,  922,  922,  922, 1055,  658, 1055,
01232      1055,  659,  329,  924,  924,  924,  659, 1055,  925,  925,
01233       925,  329,  658,  927,  927,  927,  329, 1055,  659, 1055,
01234      1055,  329,  928,  928,  928, 1055,  658,  659, 1055, 1055,
01235       329,  929,  929,  929,  930,  930,  930,  659,  932,  932,
01236       932, 1055,  329,  659,  931,  931,  931, 1055,  658,  935,
01237       935,  935,  329,  933,  933,  933, 1055,  659,  934,  934,
01238       934,  329,  658,  938,  938,  938,  329,  936,  936,  936,
01239      1055,  659,  941,  941,  941,  329, 1055,  937,  937,  937,
01240 
01241       659,  658,  939,  939,  939,  329, 1055,  659, 1055, 1055,
01242       329, 1055, 1055,  659, 1055,  940,  940,  940,  659,  658,
01243       942,  942,  942,  329,  944,  944,  944,  659,  329,  943,
01244       943,  943,  659,  658,  945,  945,  945,  329,  947,  947,
01245       947,  659,  329,  946,  946,  946,  659,  658,  948,  948,
01246       948,  329, 1055,  949,  949,  949,  329,  658,  950,  950,
01247       950,  329, 1055, 1055,  659, 1055,  951,  951,  951,  953,
01248       953,  953, 1055,  659,  329,  952,  952,  952,  659,  658,
01249       954,  954,  954,  329,  956,  956,  956,  659,  329,  955,
01250       955,  955,  659,  658,  959,  959,  959,  329,  957,  957,
01251 
01252       957, 1055,  659,  960,  960,  960,  329,  659,  958,  958,
01253       958,  329,  658,  961,  961,  961,  329,  658,  659, 1055,
01254      1055,  329, 1055, 1055,  659,  962,  962,  962,  963,  963,
01255       963, 1055,  658,  659, 1055, 1055,  329, 1055,  659,  964,
01256       964,  964, 1055,  659,  965,  965,  965, 1055,  658,  966,
01257       966,  966,  329,  968,  968,  968, 1055,  659, 1055,  967,
01258       967,  967,  659,  658,  969,  969,  969,  329,  658,  970,
01259       970,  970,  329, 1055,  659, 1055, 1055,  659,  971,  971,
01260       971, 1055,  658,  972,  972,  972,  329, 1055,  659,  974,
01261       974,  974, 1055,  659, 1055,  973,  973,  973,  659,  658,
01262 
01263      1055, 1055,  659,  329,  975,  975,  975, 1055,  659,  976,
01264       976,  976, 1055,  659,  977,  977,  977, 1055,  659,  978,
01265       978,  978,  979,  979,  979, 1055, 1055,  659,  980,  980,
01266       980, 1055,  659,  981,  981,  981, 1055, 1055,  659,  982,
01267       982,  982, 1055, 1055,  659,  983,  983,  983,  984,  984,
01268       984, 1055, 1055,  659,  985,  985,  985, 1055,  659,  986,
01269       986,  986, 1055,  659,  987,  987,  987, 1055,  659, 1055,
01270      1055,  659,  988,  988,  988, 1055, 1055,  659,  989,  989,
01271       989, 1055,  659,  990,  990,  990, 1055, 1055,  659,  991,
01272       991,  991, 1055, 1055,  659, 1055, 1055,  659,  992,  992,
01273 
01274       992, 1055, 1055,  659,  993,  993,  993, 1055,  659,  994,
01275       994,  994, 1055,  659,  995,  995,  995,  996,  996,  996,
01276      1055,  659,  997,  997,  997, 1055, 1055,  659,  998,  998,
01277       998, 1055,  659,  999,  999,  999, 1055, 1055,  659, 1000,
01278      1000, 1000, 1001, 1001, 1001, 1055, 1055,  659, 1002, 1002,
01279      1002, 1055, 1055,  659, 1003, 1003, 1003, 1055,  659, 1004,
01280      1004, 1004, 1055,  659, 1055, 1055,  659, 1005, 1005, 1005,
01281      1055,  659, 1006, 1006, 1006, 1055, 1055,  659, 1007, 1007,
01282      1007, 1055,  659, 1008, 1008, 1008, 1055, 1055,  659, 1055,
01283      1055,  659, 1009, 1009, 1009, 1055, 1055,  659, 1010, 1010,
01284 
01285      1010, 1055, 1055,  659, 1011, 1011, 1011, 1055,  659, 1012,
01286      1012, 1012, 1013, 1013, 1013, 1055,  659, 1014, 1014, 1014,
01287      1055,  659, 1015, 1015, 1015, 1055, 1055,  659, 1016, 1016,
01288      1016, 1055,  659, 1017, 1017, 1017, 1018, 1018, 1018, 1055,
01289      1055,  659, 1019, 1019, 1019, 1055, 1055,  659, 1020, 1020,
01290      1020, 1055, 1055,  659, 1021, 1021, 1021, 1055,  659, 1055,
01291      1055,  659, 1022, 1022, 1022, 1055,  659, 1023, 1023, 1023,
01292      1055,  659, 1024, 1024, 1024, 1055, 1055,  659, 1025, 1025,
01293      1025, 1055,  659, 1055, 1055,  659, 1026, 1026, 1026, 1055,
01294      1055,  659, 1027, 1027, 1027, 1055, 1055,  659, 1028, 1028,
01295 
01296      1028, 1055, 1055,  659, 1029, 1029, 1029, 1030, 1030, 1030,
01297      1055,  659, 1031, 1031, 1031, 1055,  659, 1032, 1032, 1032,
01298      1055,  659, 1033, 1033, 1033, 1055, 1055,  659, 1034, 1034,
01299      1034, 1035, 1035, 1035, 1055,  659, 1036, 1036, 1036, 1055,
01300      1055,  659, 1037, 1037, 1037, 1055, 1055,  659, 1038, 1038,
01301      1038, 1055, 1055,  659, 1055, 1055,  659, 1039, 1039, 1039,
01302      1055,  659, 1040, 1040, 1040, 1055,  659, 1041, 1041, 1041,
01303      1055,  659, 1042, 1042, 1042, 1055, 1055,  659, 1055, 1055,
01304       659, 1043, 1043, 1043, 1055,  659, 1044, 1044, 1044, 1055,
01305      1055,  659, 1045, 1045, 1045, 1055, 1055,  659, 1046, 1046,
01306 
01307      1046, 1047, 1047, 1047, 1055, 1055,  659, 1048, 1048, 1048,
01308      1055,  659, 1049, 1049, 1049, 1055,  659, 1050, 1050, 1050,
01309      1055,  659, 1051, 1051, 1051, 1052, 1052, 1052, 1055, 1055,
01310       659, 1053, 1053, 1053, 1055,  659, 1054, 1054, 1054, 1055,
01311      1055,  659,  978,  978,  978, 1055, 1055,  659, 1055, 1055,
01312       659, 1055, 1055, 1055, 1055, 1055,  659, 1055, 1055, 1055,
01313      1055,  659, 1055, 1055, 1055, 1055,  659, 1055, 1055, 1055,
01314      1055,  659, 1055, 1055,  659, 1055, 1055, 1055, 1055, 1055,
01315       659, 1055, 1055, 1055, 1055,  659, 1055, 1055, 1055, 1055,
01316      1055,  659,   66,   66,   66,   66,   66,   66,   66,   66,
01317 
01318        66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
01319        73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
01320        73,   73,   73,   73,   73,   73,   73,   73,  105,  105,
01321       105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
01322       105,  105,  105,  105,  105,  105,  126,  126,  126,  126,
01323       126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
01324       126,  126,  126,  126,  133,  133,  133,  133,  133,  133,
01325       133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
01326       133,  133,  140,  140,  140,  140,  140,  140,  140,  140,
01327       140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
01328 
01329       169,  169,  169,  169,  169,  169,  169,  169,  169,  169,
01330       169,  169,  169,  169,  169,  169,  169,  169,  176,  176,
01331       176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
01332       176,  176,  176,  176,  176,  176,  185,  185,  185,  185,
01333       185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
01334       185,  185,  185,  185,  206,  206,  206,  206,  206,  206,
01335       206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
01336       206,  206,  214,  214,  214,  214,  214,  214,  214,  214,
01337       214,  214,  214,  214,  214,  214,  214,  214,  214,  214,
01338       222,  222,  222,  222,  222,  222,  222,  222,  222,  222,
01339 
01340       222,  222,  222,  222,  222,  222,  222,  222,  249,  249,
01341       249,  249,  249,  249,  249,  249,  249,  249,  249,  249,
01342       249,  249,  249,  249,  249,  249,  257,  257,  257,  257,
01343       257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
01344       257,  257,  257,  257,  266,  266,  266,  266,  266,  266,
01345       266,  266,  266,  266,  266,  266,  266,  266,  266,  266,
01346       266,  266,  273,  273,  273,  273,  273,  273,  273,  273,
01347       273,  273,  273,  273,  273,  273,  273,  273,  273,  273,
01348       285,  285,  285,  285,  285,  285,  285,  285,  285,  285,
01349       285,  285,  285,  285,  285,  285,  285,  285,  303,  303,
01350 
01351       303,  303,  303,  303,  303,  303,  303,  303,  303,  303,
01352       303,  303,  303,  303,  303,  303,  324,  324,  324, 1055,
01353       324,  324,  324,  324,  324,  324,  324,  324, 1055,  324,
01354       324,  324,  324,  324,  326,  326,  326, 1055,  326,  326,
01355       326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
01356       326,  326,  330,  330,  330, 1055, 1055, 1055,  330, 1055,
01357      1055, 1055, 1055,  330, 1055, 1055,  330,  334,  334,  334,
01358      1055, 1055,  334, 1055,  334,  334,  334,  334,  334,  334,
01359       334,  334,  334,  334,  338,  338,  338, 1055,  338,  338,
01360       338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
01361 
01362       338,  338,  339,  339,  339, 1055,  339,  339,  339,  339,
01363       339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
01364       346, 1055, 1055, 1055, 1055, 1055,  346, 1055, 1055, 1055,
01365      1055,  346, 1055, 1055,  346,  347,  347,  347,  347,  347,
01366       347,  347,  347,  347,  347,  347,  347,  347,  347,  347,
01367       347,  347,  357,  357, 1055, 1055, 1055, 1055,  357, 1055,
01368      1055, 1055, 1055,  357, 1055, 1055,  357,  366, 1055, 1055,
01369      1055, 1055, 1055, 1055, 1055, 1055,  366, 1055,  366, 1055,
01370      1055,  366,  375,  375,  375,  375,  375,  375,  375,  375,
01371       375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
01372 
01373       378, 1055,  378, 1055,  378,  378,  378,  378,  378, 1055,
01374       378,  378, 1055,  378,  378, 1055,  378,  393,  393,  393,
01375       393,  393,  393,  393,  393,  393, 1055,  393,  393,  393,
01376       393,  393,  393, 1055,  393,  401,  401,  401, 1055,  401,
01377       401,  401,  401,  401,  401,  401,  401,  401,  401,  401,
01378      1055,  401,  402,  402,  402, 1055,  402,  402,  402,  402,
01379       402,  402,  402,  402, 1055,  402,  402, 1055,  402,  403,
01380      1055,  403, 1055,  403,  403,  403,  403,  403,  403,  403,
01381       403,  403,  403,  403, 1055,  403,  408, 1055,  408, 1055,
01382       408,  408,  408,  408,  408, 1055,  408,  408,  408,  408,
01383 
01384       408,  408,  408,  408,  413, 1055,  413, 1055,  413,  413,
01385       413,  413,  413,  413,  413,  413,  413,  413,  413,  413,
01386       413,  413,  426,  426,  426, 1055,  426,  426,  426,  426,
01387       426,  426,  426,  426,  426,  426,  426,  426,  426,  426,
01388       430,  430,  430, 1055,  430,  430,  430, 1055,  430,  430,
01389       430,  430,  430,  430,  430,  430,  430,  430,  434,  434,
01390       434, 1055,  434,  434,  434,  434,  434,  434,  434,  434,
01391       434,  434,  434,  434,  434,  434,  435,  435, 1055,  435,
01392      1055, 1055,  435,  436, 1055,  436,  436, 1055,  436, 1055,
01393       436, 1055,  436,  438,  438,  438, 1055,  438,  438,  438,
01394 
01395       438,  438,  438,  438,  438,  438,  438,  438,  438,  438,
01396       438,  458,  458,  458, 1055,  458,  458,  458,  458,  458,
01397       458,  458,  458,  458,  458,  458,  458,  458,  458,  498,
01398       498,  498, 1055,  498,  498,  498,  498,  498,  498,  498,
01399       498,  498,  498,  498,  498,  498,  500,  500,  500, 1055,
01400       500,  500,  500,  500,  500,  500,  500,  500,  500,  500,
01401       500,  500,  500,  500,  502,  502,  502, 1055,  502,  502,
01402       502,  502,  502,  502,  502,  502,  502,  502,  502,  502,
01403       502,  502,  548,  548,  548, 1055,  548,  548,  548,  548,
01404       548,  548,  548,  548,  548,  548,  548,  548,  548,  602,
01405 
01406       602,  602, 1055,  602,  602,  602,  602,  602,  602,  602,
01407       602,  602,  602,  602,  602,  602,  684, 1055, 1055, 1055,
01408       684, 1055, 1055, 1055, 1055, 1055, 1055, 1055,  684, 1055,
01409       684,  716,  716,  716,  716,  716,  716,  716,  716,  716,
01410       716,  716,  716,  716, 1055,  716,  716, 1055,  716,   65,
01411      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
01412      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
01413      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
01414      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
01415      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
01416 
01417      1055, 1055, 1055, 1055
01418     } ;
01419 
01420 static yyconst flex_int16_t yy_chk[4505] =
01421     {   0,
01422         0,    1,    0,    1,    1,    2,    0,    2,    2,    3,
01423       133,    3,    3,  121,  121,    9,    1,    9,    9,   10,
01424         2,   10,   10,    1,    3,   70,  133,    2,   79,   70,
01425         9,    3,   79,   13,   10,   13,   13,    9,   13,   87,
01426        91,   10,   91,   87,   27,   92,   27,   27,   13,   75,
01427        92,   92,   99,    1,   75,   13,   99,    2,  978,   27,
01428        13,    3,    4,    4,    4,    4,   27,    9,    4,  146,
01429       146,   10,   75,   75,   81,  109,  102,    4,  102,  109,
01430       167,  167,   81,  960,    4,   13,    4,    4,  118,   81,
01431        81,  134,  118,  120,  120,  120,   27,   81,   81,  129,
01432 
01433       139,  120,  149,  129,  148,  148,  163,  134,  139,  173,
01434       163,  149,  148,  173,    4,    5,    5,    5,    5,    5,
01435         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
01436         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
01437         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
01438         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
01439         5,    5,    5,    5,    5,    5,    5,    5,    5,    7,
01440         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
01441         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
01442         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
01443 
01444         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
01445         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
01446         7,    7,    7,   11,   11,   11,   11,   11,   11,   11,
01447        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
01448        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
01449        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
01450        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
01451        11,   11,   11,   11,   11,   11,   11,   14,  135,   14,
01452        14,   15,   14,   15,   15,   16,   15,   16,   16,  212,
01453        16,  212,   14,  137,  135,  136,   15,  138,  145,   14,
01454 
01455        16,  136,   15,   15,   14,  136,   16,   16,  144,  137,
01456       137,  136,  154,  138,  157,  178,  752,  144,  145,  157,
01457       178,  144,  182,  190,  199,  154,  182,  190,  199,   14,
01458       204,  205,  205,   15,  204,  235,  235,   16,   17,   17,
01459        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
01460        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
01461        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
01462        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
01463        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
01464        17,   17,   19,  206,   19,   19,   20,  209,   20,   20,
01465 
01466        28,   28,   28,   28,  745,  210,   28,   19,  206,  210,
01467       211,   20,  209,  213,   19,   28,  219,  225,   20,   19,
01468       219,  225,   28,   20,  339,  211,  232,  242,  213,  253,
01469       232,  242,  211,  253,  261,  269,  271,  271,  261,  269,
01470       339,  281,  289,  296,   19,  281,  289,  296,   20,   21,
01471        21,  744,   28,  743,   21,   21,   21,   21,   21,   21,
01472        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
01473        21,   21,   21,   21,   21,   23,   23,   23,   23,   23,
01474        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
01475        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
01476 
01477        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
01478        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
01479        23,   23,   23,   23,   23,   23,   23,   23,   23,   25,
01480        25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
01481        25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
01482        25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
01483        25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
01484        25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
01485        25,   25,   25,   29,  307,   29,   29,   30,  312,   30,
01486        30,   31,  307,   31,   31,  312,  321,   32,   29,   32,
01487 
01488        32, 1074,   30,  321, 1074,   29,   31,  327,  736,   30,
01489       354,  354,   32,   31,   39,  327,   39,   39,   43,   32,
01490        43,   43,  344,   41,  314,   41,   41,  314,  341,   39,
01491       344,  735,  314,   43,   41,   29,   39,   39,   41,   30,
01492        43,   39,  734,   31,  341,   41,  328,  328,  328,   32,
01493        33,  342,   33,   33,  328,  314,   40,  304,   40,   40,
01494       346,   33,  304,  314,  367,   33,   39,  342,  346,  367,
01495        43,   40,   33,   33,  733,   41,  364,   33,   40,   40,
01496       304,  304,   42,   40,   42,   42,  122,  122,  122,  364,
01497       376,  357,  357,   42,  122,  376,  366,   42,   44,  357,
01498 
01499        44,   44,   33,   34,   42,   34,   34,  323,   40,  366,
01500       323,  518,  401,   44,   34,  323,  306,  732,   34,  358,
01501        44,  309,  503,  503,  306,   34,   34,  401,  358,  309,
01502        34,  306,  306,  122,   42,  464,  309,  309,  323,  306,
01503       306,  330,  330,  330,  309,  309,  323,  518,  731,  330,
01504        44,  464,  538,  538,  538,   34,   35,   35,   35,   35,
01505        35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
01506        35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
01507        35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
01508        35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
01509 
01510        35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
01511        37,  730,   37,   37,  333,  333,  333,  400,  439,  439,
01512       439,   37,  333,  559,   51,   37,   51,   51,   53,   51,
01513        53,   53,   37,   37,  568,  439,   53,   37,  400,   51,
01514       460,  492,   52,   53,   52,   52,   51,   52,  460,  473,
01515        53,   51,  461,  461,  461,   53,  492,   52,  333,  559,
01516       461,  400,   37,   38,   52,   38,   38,  439,  473,   52,
01517       568,  462,  462,  462,   38,  480,   51,  723,   38,  462,
01518        53,  501,  722,  480,  721,   38,   38,  523,  509,  501,
01519        38,  509,  473,  550,   52,  523,  509,  517,  551,  551,
01520 
01521       517,  550,  562,  462,  720,  517,  524,  524,  524,  719,
01522       562,  577,  577,  577,  524,   38,   45,   45,   45,   45,
01523        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
01524        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
01525        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
01526        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
01527        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
01528        47,   47,   47,   47,   47,   47,   47,   47,   47,   47,
01529        47,   47,   47,   47,   47,   47,   47,   47,   47,   47,
01530        47,   47,   47,   47,   47,   47,   47,   47,   47,   47,
01531 
01532        47,   47,   47,   47,   47,   47,   47,   47,   47,   47,
01533        47,   47,   47,   47,   47,   47,   47,   47,   47,   47,
01534        47,   47,   47,   47,   49,  504,  504,  504,  571,  608,
01535       718,  571,  611,  525,  525,  525,  571,  717,   49,   49,
01536       611,  525,  504,   49,   49,   49,   49,   49,   49,   49,
01537        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
01538        49,   49,   49,   49,   54,  608,   54,   54,   57,  715,
01539        57,   57,   54,  613,  504,  525,  714,  546,  546,   54,
01540       651,  613,  546,   57,  546,  546,   54,  713,  651,  546,
01541        57,   54,  703,  546,  546,   57,  680,  702,  505,  505,
01542 
01543       505,  574,  574,  574,  680,  575,  575,  575,  701,  574,
01544       584,  584,  584,  575,  700,  505,   54,   55,   55,  699,
01545        57,  698,   55,   55,   55,   55,   55,   55,   55,   55,
01546        55,   55,   55,   55,   55,   55,   55,   55,   55,   55,
01547        55,   55,   55,   58,  575,   58,   58,  505,  585,  585,
01548       585,   61,  697,   61,   61,  704,   61,   62,   58,   62,
01549        62, 1075,   62,  704, 1075,   58,   61,  620,  620,  620,
01550        58,  696,   62,   61,  506,  506,  506,  695,   61,   62,
01551       553,  553,  553,  693,   62,  554,  554,  554,  692,  614,
01552       653,  506,  691,  614,  653,   58,   59,  553,   59,   59,
01553 
01554       690,   59,  554,   61,   59,   59,   59,  614,  653,   62,
01555       689,   59,  688,  555,  555,  555,  687,  679,   59,   59,
01556       604,  604,  604,  506,  605,  605,  605,  678,  677,  553,
01557       555,  627,  627,  627,  554,  676,  675,  604,  606,  606,
01558       606,  605,  618,  618,  618,  629,  629,  629,   59,   60,
01559       618,   60,   60,  650,   60,  606,  650,   60,   60,   60,
01560       655,  650,  555,  655,   60,  674,  673, 1086,  655,  604,
01561      1086,   60,   60,  605,  656,  656,  656,  685,  685,  685,
01562      1095, 1096,  656, 1095, 1096,  685,  672,  606,  710,  710,
01563       710,  727,  727,  727, 1097, 1099,  710, 1097, 1099,  727,
01564 
01565       671,   60,   63,   63,   63,   63,   63,   63,   63,   63,
01566        63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
01567        63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
01568        63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
01569        63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
01570        63,   63,   63,   63,   63,   63,  192,  670,  669,  668,
01571       192,  646,  646,  646,  192,  192,  192, 1112,  667,  192,
01572      1112,  192,  192,  666,  665,  664,  192,  663,  646,  662,
01573       192,  192,  325,  729,  729,  729,  325,  325,  325,  661,
01574       660,  325,  658,  325,  740,  740,  740,  325,  325,  325,
01575 
01576       337,  649,  740,  645,  337,  337,  337,  644,  643,  337,
01577       646,  337,  749,  749,  749,  337,  337,  337,  343,  343,
01578       749,  642,  343,  343,  343,  641,  640,  343,  639,  343,
01579       638,  637,  729,  343,  343,  343,  351,  636,  351,  742,
01580       742,  742,  351,  351,  351,  635,  634,  351,  633,  351,
01581       751,  751,  751,  351,  351,  351,  382,  632,  631,  630,
01582       382,  382,  382,  626,  625,  382,  624,  382,  647,  647,
01583       647,  382,  382,  382,  383,  383,  623,  383,  622,  383,
01584       621,  383,  383,  617,  616,  647,  383,  615,  742,  609,
01585       383,  383,  396,  758,  758,  758,  396,  396,  396,  751,
01586 
01587       607,  396,  603,  396,  648,  648,  648,  396,  396,  396,
01588       406,  681,  681,  681,  406,  602,  601,  647,  406,  406,
01589       406,  648,  600,  406,  599,  406,  598,  597,  681,  406,
01590       406,  406,  412,  596,  595,  594,  412,  412,  412,  593,
01591       592,  412,  758,  412,  756,  756,  756,  412,  412,  412,
01592       416,  591,  756,  648,  416,  416,  416,  590,  589,  416,
01593       681,  416,  588,  587,  586,  416,  416,  416,  510,  510,
01594       510,  510,  510,  510,  510,  510,  510,  510,  510,  510,
01595       510,  510,  510,  510,  510,  510,  510,  510,  510,  510,
01596       510,  510,  510,  510,  510,  510,  510,  510,  510,  510,
01597 
01598       510,  510,  510,  510,  510,  510,  510,  510,  510,  510,
01599       510,  510,  510,  510,  510,  510,  510,  510,  510,  510,
01600       510,  510,  561,  561,  561,  561,  561,  561,  561,  561,
01601       561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
01602       561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
01603       561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
01604       561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
01605       561,  561,  561,  561,  561,  561,  619,  619,  619,  583,
01606       619,  657,  657,  657,  619,  657,  682,  682,  682,  657,
01607       683,  683,  683,  686,  686,  686,  582,  686,  706,  706,
01608 
01609       706,  686,  581,  682,  707,  707,  707,  683,  580,  708,
01610       708,  708,  711,  711,  711,  706,  711,  724,  724,  724,
01611       711,  707,  579,  578,  576,  619,  708,  712,  712,  712,
01612       657,  712,  573,  569,  724,  682,  566,  565,  564,  683,
01613       563,  560,  686,  725,  725,  725,  556,  706,  726,  726,
01614       726,  548,  547,  707,  545,  728,  728,  728,  708,  728,
01615       725,  711,  544,  728,  543,  726,  724,  737,  737,  737,
01616       738,  738,  738,  739,  739,  739,  712,  741,  741,  741,
01617       542,  741,  541,  540,  737,  741,  539,  738,  537,  536,
01618       739,  535,  725,  746,  746,  746,  534,  726,  747,  747,
01619 
01620       747,  748,  748,  748,  728,  750,  750,  750,  533,  750,
01621       746,  532,  531,  750,  530,  747,  737,  528,  748,  738,
01622       527,  520,  739,  753,  753,  753,  741,  754,  754,  754,
01623       519,  755,  755,  755,  516,  757,  757,  757,  515,  757,
01624       753,  514,  746,  757,  754,  513,  512,  747,  755,  511,
01625       748,  759,  759,  759,  750,  508,  760,  760,  760,  759,
01626       760,  761,  761,  761,  760,  762,  762,  762,  764,  764,
01627       764,  502,  753,  762,  500,  498,  754,  763,  763,  763,
01628       755,  763,  497,  494,  757,  763,  765,  765,  765,  766,
01629       766,  766,  490,  766,  765,  488,  487,  766,  767,  767,
01630 
01631       767,  768,  768,  768,  486,  760,  770,  770,  770,  768,
01632       761,  769,  769,  769,  485,  769,  484,  764,  483,  769,
01633       771,  771,  771,  772,  772,  772,  763,  772,  771,  482,
01634       481,  772,  773,  773,  773,  774,  774,  774,  766,  479,
01635       775,  775,  775,  774,  775,  478,  477,  767,  775,  776,
01636       776,  776,  779,  779,  779,  770,  777,  777,  777,  476,
01637       769,  778,  778,  778,  777,  778,  780,  780,  780,  778,
01638       475,  474,  772,  472,  780,  781,  781,  781,  471,  781,
01639       469,  773,  468,  781,  782,  782,  782,  466,  459,  775,
01640       458,  783,  783,  783,  785,  785,  785,  455,  776,  783,
01641 
01642       454,  779,  452,  784,  784,  784,  451,  784,  450,  449,
01643       778,  784,  786,  786,  786,  787,  787,  787,  448,  787,
01644       786,  447,  446,  787,  781,  788,  788,  788,  789,  789,
01645       789,  445,  443,  782,  442,  441,  789,  790,  790,  790,
01646       440,  790,  438,  785,  437,  790,  791,  791,  791,  792,
01647       792,  792,  784,  431,  793,  793,  793,  792,  793,  794,
01648       794,  794,  793,  430,  787,  795,  795,  795,  796,  796,
01649       796,  429,  796,  795,  788,  420,  796,  797,  797,  797,
01650       798,  798,  798,  799,  799,  799,  790,  799,  798,  419,
01651       407,  799,  800,  800,  800,  791,  801,  801,  801,  803,
01652 
01653       803,  803,  399,  793,  801,  802,  802,  802,  794,  802,
01654       804,  804,  804,  802,  806,  806,  806,  796,  804,  805,
01655       805,  805,  392,  805,  391,  390,  797,  805,  807,  807,
01656       807,  389,  799,  809,  809,  809,  807,  388,  808,  808,
01657       808,  800,  808,  810,  810,  810,  808,  387,  803,  386,
01658       385,  810,  384,  380,  802,  374,  811,  811,  811,  369,
01659       811,  368,  365,  806,  811,  812,  812,  812,  805,  813,
01660       813,  813,  814,  814,  814,  363,  814,  813,  362,  361,
01661       814,  360,  809,  815,  815,  815,  359,  808,  816,  816,
01662       816,  817,  817,  817,  353,  817,  816,  350,  349,  817,
01663 
01664       818,  818,  818,  347,  332,  811,  326,  819,  819,  819,
01665       821,  821,  821,  322,  812,  819,  820,  820,  820,  317,
01666       820,  814,  316,  315,  820,  822,  822,  822,  824,  824,
01667       824,  313,  815,  822,  823,  823,  823,  311,  823,  308,
01668       817,  297,  823,  825,  825,  825,  826,  826,  826,  818,
01669       826,  825,  290,  282,  826,  827,  827,  827,  278,  821,
01670       828,  828,  828,  270,  262,  820,  254,  245,  828,  243,
01671       829,  829,  829,  236,  829,  233,  226,  824,  829,  830,
01672       830,  830,  220,  823,  831,  831,  831,  218,  203,  832,
01673       832,  832,  831,  832,  200,  826,  198,  832,  833,  833,
01674 
01675       833,  834,  834,  834,  827,  191,  835,  835,  835,  834,
01676       835,  836,  836,  836,  835,  837,  837,  837,  189,  829,
01677       839,  839,  839,  837,  183,  838,  838,  838,  830,  838,
01678       842,  842,  842,  838,  840,  840,  840,  174,  832,  845,
01679       845,  845,  840,  164,  841,  841,  841,  833,  841,  843,
01680       843,  843,  841,  161,  153,  835,  152,  843,  151,  150,
01681       836,  147,  844,  844,  844,  143,  844,  141,  140,  839,
01682       844,  848,  848,  848,  838,  846,  846,  846,  130,  842,
01683       851,  851,  851,  846,  854,  854,  854,  119,  845,  117,
01684       847,  847,  847,  841,  847,  849,  849,  849,  847,  110,
01685 
01686       850,  850,  850,  849,  850,  852,  852,  852,  850,  103,
01687       100,  844,   93,  852,  853,  853,  853,   90,  853,   88,
01688       848,   80,  853,  855,  855,  855,  856,  856,  856,  851,
01689       856,  855,   71,  854,  856,  857,  857,  857,   65,  847,
01690       858,  858,  858,  859,  859,  859,    0,  859,  858,  850,
01691         0,  859,  860,  860,  860,    0,  861,  861,  861,  863,
01692       863,  863,    0,  853,  861,  862,  862,  862,    0,  862,
01693       864,  864,  864,  862,    0,  856,    0,    0,  864,  865,
01694       865,  865,    0,  865,  857,    0,    0,  865,  866,  866,
01695       866,    0,  859,    0,  867,  867,  867,  869,  869,  869,
01696 
01697         0,  860,  867,  868,  868,  868,    0,  868,  863,    0,
01698         0,  868,    0,    0,  862,  870,  870,  870,  871,  871,
01699       871,    0,  871,  870,    0,    0,  871,    0,  865,  872,
01700       872,  872,  873,  873,  873,    0,    0,  866,    0,    0,
01701       873,  874,  874,  874,    0,  874,  869,    0,    0,  874,
01702         0,    0,  868,  875,  875,  875,  876,  876,  876,    0,
01703         0,  877,  877,  877,  876,  877,    0,  871,    0,  877,
01704       878,  878,  878,  879,  879,  879,    0,    0,  872,    0,
01705         0,  879,    0,  880,  880,  880,    0,  880,    0,    0,
01706       874,  880,  881,  881,  881,  882,  882,  882,  884,  884,
01707 
01708       884,    0,  875,  882,  883,  883,  883,    0,  883,    0,
01709       877,    0,  883,  885,  885,  885,  886,  886,  886,  878,
01710       886,  885,    0,    0,  886,  887,  887,  887,  888,  888,
01711       888,    0,  880,  890,  890,  890,  888,    0,  889,  889,
01712       889,  881,  889,  891,  891,  891,  889,  884,  892,  892,
01713       892,  891,  892,  883,    0,    0,  892,  893,  893,  893,
01714       894,  894,  894,    0,    0,  886,    0,    0,  894,  895,
01715       895,  895,    0,  895,  887,    0,    0,  895,  896,  896,
01716       896,    0,  890,  897,  897,  897,    0,  889,  898,  898,
01717       898,  897,  898,  899,  899,  899,  898,  892,    0,  900,
01718 
01719       900,  900,  902,  902,  902,    0,  893,  900,  901,  901,
01720       901,    0,  901,  903,  903,  903,  901,    0,  895,    0,
01721         0,  903,  904,  904,  904,    0,  904,  896,    0,    0,
01722       904,  905,  905,  905,  908,  908,  908,  898,  906,  906,
01723       906,    0,  899,  911,  911,  911,  906,    0,  907,  907,
01724       907,  902,  907,  909,  909,  909,  907,  901,  910,  910,
01725       910,  909,  910,  914,  914,  914,  910,  912,  912,  912,
01726         0,  904,  917,  917,  917,  912,    0,  913,  913,  913,
01727       905,  913,    0,  908,    0,  913,  915,  915,  915,  920,
01728       920,  920,  911,    0,  915,    0,    0,  907,  916,  916,
01729 
01730       916,    0,  916,  918,  918,  918,  916,  910,  923,  923,
01731       923,  918,  914,    0,  919,  919,  919,    0,  919,    0,
01732         0,  917,  919,  921,  921,  921,  913,    0,  922,  922,
01733       922,  921,  922,  924,  924,  924,  922,    0,  920,    0,
01734         0,  924,  925,  925,  925,    0,  925,  916,    0,    0,
01735       925,  926,  926,  926,  927,  927,  927,  923,  929,  929,
01736       929,    0,  927,  919,  928,  928,  928,    0,  928,  932,
01737       932,  932,  928,  930,  930,  930,    0,  922,  931,  931,
01738       931,  930,  931,  935,  935,  935,  931,  933,  933,  933,
01739         0,  925,  938,  938,  938,  933,    0,  934,  934,  934,
01740 
01741       926,  934,  936,  936,  936,  934,    0,  929,    0,    0,
01742       936,    0,    0,  928,    0,  937,  937,  937,  932,  937,
01743       939,  939,  939,  937,  941,  941,  941,  931,  939,  940,
01744       940,  940,  935,  940,  942,  942,  942,  940,  944,  944,
01745       944,  938,  942,  943,  943,  943,  934,  943,  945,  945,
01746       945,  943,    0,  946,  946,  946,  945,  946,  947,  947,
01747       947,  946,    0,    0,  937,    0,  948,  948,  948,  950,
01748       950,  950,    0,  941,  948,  949,  949,  949,  940,  949,
01749       951,  951,  951,  949,  953,  953,  953,  944,  951,  952,
01750       952,  952,  943,  952,  956,  956,  956,  952,  954,  954,
01751 
01752       954,    0,  946,  957,  957,  957,  954,  947,  955,  955,
01753       955,  957,  955,  958,  958,  958,  955,  958,  950,    0,
01754         0,  958,    0,    0,  949,  959,  959,  959,  961,  961,
01755       961,    0,  961,  953,    0,    0,  961,    0,  952,  962,
01756       962,  962,    0,  956,  963,  963,  963,    0,  963,  964,
01757       964,  964,  963,  966,  966,  966,    0,  955,    0,  965,
01758       965,  965,  958,  965,  967,  967,  967,  965,  967,  968,
01759       968,  968,  967,    0,  959,    0,    0,  961,  969,  969,
01760       969,    0,  969,  970,  970,  970,  969,    0,  962,  972,
01761       972,  972,    0,  963,    0,  971,  971,  971,  964,  971,
01762 
01763         0,    0,  966,  971,  973,  973,  973,    0,  965,  974,
01764       974,  974,    0,  967,  975,  975,  975,    0,  968,  976,
01765       976,  976,  977,  977,  977,    0,    0,  969,  979,  979,
01766       979,    0,  970,  980,  980,  980,    0,    0,  972,  981,
01767       981,  981,    0,    0,  971,  982,  982,  982,  983,  983,
01768       983,    0,    0,  973,  984,  984,  984,    0,  974,  985,
01769       985,  985,    0,  975,  986,  986,  986,    0,  976,    0,
01770         0,  977,  987,  987,  987,    0,    0,  979,  988,  988,
01771       988,    0,  980,  989,  989,  989,    0,    0,  981,  990,
01772       990,  990,    0,    0,  982,    0,    0,  983,  991,  991,
01773 
01774       991,    0,    0,  984,  992,  992,  992,    0,  985,  993,
01775       993,  993,    0,  986,  994,  994,  994,  995,  995,  995,
01776         0,  987,  996,  996,  996,    0,    0,  988,  997,  997,
01777       997,    0,  989,  998,  998,  998,    0,    0,  990,  999,
01778       999,  999, 1000, 1000, 1000,    0,    0,  991, 1001, 1001,
01779      1001,    0,    0,  992, 1002, 1002, 1002,    0,  993, 1003,
01780      1003, 1003,    0,  994,    0,    0,  995, 1004, 1004, 1004,
01781         0,  996, 1005, 1005, 1005,    0,    0,  997, 1006, 1006,
01782      1006,    0,  998, 1007, 1007, 1007,    0,    0,  999,    0,
01783         0, 1000, 1008, 1008, 1008,    0,    0, 1001, 1009, 1009,
01784 
01785      1009,    0,    0, 1002, 1010, 1010, 1010,    0, 1003, 1011,
01786      1011, 1011, 1012, 1012, 1012,    0, 1004, 1013, 1013, 1013,
01787         0, 1005, 1014, 1014, 1014,    0,    0, 1006, 1015, 1015,
01788      1015,    0, 1007, 1016, 1016, 1016, 1017, 1017, 1017,    0,
01789         0, 1008, 1018, 1018, 1018,    0,    0, 1009, 1019, 1019,
01790      1019,    0,    0, 1010, 1020, 1020, 1020,    0, 1011,    0,
01791         0, 1012, 1021, 1021, 1021,    0, 1013, 1022, 1022, 1022,
01792         0, 1014, 1023, 1023, 1023,    0,    0, 1015, 1024, 1024,
01793      1024,    0, 1016,    0,    0, 1017, 1025, 1025, 1025,    0,
01794         0, 1018, 1026, 1026, 1026,    0,    0, 1019, 1027, 1027,
01795 
01796      1027,    0,    0, 1020, 1028, 1028, 1028, 1029, 1029, 1029,
01797         0, 1021, 1030, 1030, 1030,    0, 1022, 1031, 1031, 1031,
01798         0, 1023, 1032, 1032, 1032,    0,    0, 1024, 1033, 1033,
01799      1033, 1034, 1034, 1034,    0, 1025, 1035, 1035, 1035,    0,
01800         0, 1026, 1036, 1036, 1036,    0,    0, 1027, 1037, 1037,
01801      1037,    0,    0, 1028,    0,    0, 1029, 1038, 1038, 1038,
01802         0, 1030, 1039, 1039, 1039,    0, 1031, 1040, 1040, 1040,
01803         0, 1032, 1041, 1041, 1041,    0,    0, 1033,    0,    0,
01804      1034, 1042, 1042, 1042,    0, 1035, 1043, 1043, 1043,    0,
01805         0, 1036, 1044, 1044, 1044,    0,    0, 1037, 1045, 1045,
01806 
01807      1045, 1046, 1046, 1046,    0,    0, 1038, 1047, 1047, 1047,
01808         0, 1039, 1048, 1048, 1048,    0, 1040, 1049, 1049, 1049,
01809         0, 1041, 1050, 1050, 1050, 1051, 1051, 1051,    0,    0,
01810      1042, 1052, 1052, 1052,    0, 1043, 1053, 1053, 1053,    0,
01811         0, 1044, 1054, 1054, 1054,    0,    0, 1045,    0,    0,
01812      1046,    0,    0,    0,    0,    0, 1047,    0,    0,    0,
01813         0, 1048,    0,    0,    0,    0, 1049,    0,    0,    0,
01814         0, 1050,    0,    0, 1051,    0,    0,    0,    0,    0,
01815      1052,    0,    0,    0,    0, 1053,    0,    0,    0,    0,
01816         0, 1054, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056,
01817 
01818      1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056,
01819      1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057,
01820      1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1058, 1058,
01821      1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058,
01822      1058, 1058, 1058, 1058, 1058, 1058, 1059, 1059, 1059, 1059,
01823      1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
01824      1059, 1059, 1059, 1059, 1060, 1060, 1060, 1060, 1060, 1060,
01825      1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060,
01826      1060, 1060, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
01827      1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
01828 
01829      1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
01830      1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1063, 1063,
01831      1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063,
01832      1063, 1063, 1063, 1063, 1063, 1063, 1064, 1064, 1064, 1064,
01833      1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064,
01834      1064, 1064, 1064, 1064, 1065, 1065, 1065, 1065, 1065, 1065,
01835      1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065,
01836      1065, 1065, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
01837      1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
01838      1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067,
01839 
01840      1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1068, 1068,
01841      1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
01842      1068, 1068, 1068, 1068, 1068, 1068, 1069, 1069, 1069, 1069,
01843      1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069,
01844      1069, 1069, 1069, 1069, 1070, 1070, 1070, 1070, 1070, 1070,
01845      1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070,
01846      1070, 1070, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
01847      1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
01848      1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072,
01849      1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1073, 1073,
01850 
01851      1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
01852      1073, 1073, 1073, 1073, 1073, 1073, 1076, 1076, 1076,    0,
01853      1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,    0, 1076,
01854      1076, 1076, 1076, 1076, 1077, 1077, 1077,    0, 1077, 1077,
01855      1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
01856      1077, 1077, 1078, 1078, 1078,    0,    0,    0, 1078,    0,
01857         0,    0,    0, 1078,    0,    0, 1078, 1079, 1079, 1079,
01858         0,    0, 1079,    0, 1079, 1079, 1079, 1079, 1079, 1079,
01859      1079, 1079, 1079, 1079, 1080, 1080, 1080,    0, 1080, 1080,
01860      1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
01861 
01862      1080, 1080, 1081, 1081, 1081,    0, 1081, 1081, 1081, 1081,
01863      1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
01864      1082,    0,    0,    0,    0,    0, 1082,    0,    0,    0,
01865         0, 1082,    0,    0, 1082, 1083, 1083, 1083, 1083, 1083,
01866      1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
01867      1083, 1083, 1084, 1084,    0,    0,    0,    0, 1084,    0,
01868         0,    0,    0, 1084,    0,    0, 1084, 1085,    0,    0,
01869         0,    0,    0,    0,    0,    0, 1085,    0, 1085,    0,
01870         0, 1085, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
01871      1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
01872 
01873      1088,    0, 1088,    0, 1088, 1088, 1088, 1088, 1088,    0,
01874      1088, 1088,    0, 1088, 1088,    0, 1088, 1089, 1089, 1089,
01875      1089, 1089, 1089, 1089, 1089, 1089,    0, 1089, 1089, 1089,
01876      1089, 1089, 1089,    0, 1089, 1090, 1090, 1090,    0, 1090,
01877      1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
01878         0, 1090, 1091, 1091, 1091,    0, 1091, 1091, 1091, 1091,
01879      1091, 1091, 1091, 1091,    0, 1091, 1091,    0, 1091, 1092,
01880         0, 1092,    0, 1092, 1092, 1092, 1092, 1092, 1092, 1092,
01881      1092, 1092, 1092, 1092,    0, 1092, 1093,    0, 1093,    0,
01882      1093, 1093, 1093, 1093, 1093,    0, 1093, 1093, 1093, 1093,
01883 
01884      1093, 1093, 1093, 1093, 1094,    0, 1094,    0, 1094, 1094,
01885      1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
01886      1094, 1094, 1098, 1098, 1098,    0, 1098, 1098, 1098, 1098,
01887      1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
01888      1100, 1100, 1100,    0, 1100, 1100, 1100,    0, 1100, 1100,
01889      1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1101, 1101,
01890      1101,    0, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101,
01891      1101, 1101, 1101, 1101, 1101, 1101, 1102, 1102,    0, 1102,
01892         0,    0, 1102, 1103,    0, 1103, 1103,    0, 1103,    0,
01893      1103,    0, 1103, 1104, 1104, 1104,    0, 1104, 1104, 1104,
01894 
01895      1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
01896      1104, 1105, 1105, 1105,    0, 1105, 1105, 1105, 1105, 1105,
01897      1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1106,
01898      1106, 1106,    0, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
01899      1106, 1106, 1106, 1106, 1106, 1106, 1107, 1107, 1107,    0,
01900      1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
01901      1107, 1107, 1107, 1107, 1108, 1108, 1108,    0, 1108, 1108,
01902      1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
01903      1108, 1108, 1109, 1109, 1109,    0, 1109, 1109, 1109, 1109,
01904      1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1110,
01905 
01906      1110, 1110,    0, 1110, 1110, 1110, 1110, 1110, 1110, 1110,
01907      1110, 1110, 1110, 1110, 1110, 1110, 1111,    0,    0,    0,
01908      1111,    0,    0,    0,    0,    0,    0,    0, 1111,    0,
01909      1111, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
01910      1113, 1113, 1113, 1113,    0, 1113, 1113,    0, 1113, 1055,
01911      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
01912      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
01913      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
01914      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
01915      1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
01916 
01917      1055, 1055, 1055, 1055
01918     } ;
01919 
01920 extern int preYY_flex_debug;
01921 int preYY_flex_debug = 0;
01922 
01923 static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
01924 static char *yy_full_match;
01925 static int yy_lp;
01926 static int yy_looking_for_trail_begin = 0;
01927 static int yy_full_lp;
01928 static int *yy_full_state;
01929 #define YY_TRAILING_MASK 0x2000
01930 #define YY_TRAILING_HEAD_MASK 0x4000
01931 #define REJECT \
01932 { \
01933 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ \
01934 yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
01935 (yy_lp) = yy_full_lp; /* restore orig. accepting pos. */ \
01936 (yy_state_ptr) = yy_full_state; /* restore orig. state */ \
01937 yy_current_state = *(yy_state_ptr); /* restore curr. state */ \
01938 ++(yy_lp); \
01939 goto find_rule; \
01940 }
01941 
01942 #define yymore() yymore_used_but_not_detected
01943 #define YY_MORE_ADJ 0
01944 #define YY_RESTORE_YY_MORE_OFFSET
01945 char *preYYtext;
01946 #line 1 "pre.l"
01947 /******************************************************************************
01948  *
01949  * 
01950  *
01951  * Copyright (C) 1997-2008 by Dimitri van Heesch.
01952  *
01953  * Permission to use, copy, modify, and distribute this software and its
01954  * documentation under the terms of the GNU General Public License is hereby 
01955  * granted. No representations are made about the suitability of this software 
01956  * for any purpose. It is provided "as is" without express or implied warranty.
01957  * See the GNU General Public License for more details.
01958  *
01959  * Documents produced by Doxygen are derivative works derived from the
01960  * input used in their production; they are not affected by this license.
01961  *
01962  */
01963 #line 19 "pre.l"
01964 
01965 /*
01966  *      includes
01967  */
01968 
01969 #include <stdio.h>
01970 #include <assert.h>
01971 #include <ctype.h>
01972 
01973 #include "qtbc.h"
01974 #include <qarray.h>
01975 #include <qstack.h>
01976 #include <qfile.h>
01977 #include <qstrlist.h>
01978 #include <qdict.h>
01979 #include <qregexp.h>
01980 #include <qfileinfo.h>
01981 #include <qdir.h>
01982   
01983 #include "pre.h"
01984 #include "constexp.h"
01985 #include "define.h"
01986 #include "doxygen.h"
01987 #include "message.h"
01988 #include "util.h"
01989 #include "defargs.h"
01990 #include "debug.h"
01991 #include "bufstr.h"
01992 #include "portable.h"
01993 
01994 #define YY_NEVER_INTERACTIVE 1
01995   
01996 
01997 struct FileState
01998 {
01999   int lineNr;
02000   FILE *filePtr;
02001   YY_BUFFER_STATE bufState;
02002   QCString fileName;
02003 };  
02004 
02005 /* -----------------------------------------------------------------
02006  *
02007  *      scanner's state
02008  */
02009 
02010 static int                g_yyLineNr   = 1;
02011 static QCString           g_yyFileName;
02012 static FileDef           *g_yyFileDef;
02013 static FileDef           *g_inputFileDef;
02014 static int                g_ifcount    = 0;
02015 static QStrList          *g_pathList = 0;  
02016 static QStack<FileState>  g_includeStack;
02017 static QDict<int>        *g_argDict;
02018 static int                g_defArgs = -1;
02019 static QCString           g_defName;
02020 static QCString           g_defText;
02021 static QCString           g_defLitText;
02022 static QCString           g_defArgsStr;
02023 static bool               g_defVarArgs;
02024 static int                g_level;
02025 static int                g_lastCContext;
02026 static int                g_lastCPPContext;
02027 static QArray<int>        g_levelGuard;
02028 static BufStr            *g_outputBuf;
02029 static int                g_roundCount;
02030 static bool               g_quoteArg;
02031 static DefineDict        *g_fileDefineDict;
02032 static DefineDict        *g_expandedDict;
02033 static int                g_findDefArgContext;
02034 static QCString           g_lastGuardName;
02035 static QCString           g_incName;
02036 static QCString           g_guardExpr;
02037 static int                g_curlyCount;
02038 static bool               g_nospaces; // add extra spaces during macro expansion
02039 
02040 static bool               g_macroExpansion; // from the configuration
02041 static bool               g_expandOnlyPredef; // from the configuration
02042 static int                g_commentCount;
02043 static bool               g_insideComment;
02044 static bool               g_isImported;
02045 static QCString           g_blockName;
02046 static int                g_condCtx;
02047 static bool               g_skip;
02048 static QStack<bool>       g_condStack;
02049 
02050 static bool               g_lexInit = FALSE;
02051 
02052 DefineDict* getFileDefineDict() {
02053   return g_fileDefineDict;
02054 }
02055 
02056 static void setFileName(const char *name)
02057 {
02058   bool ambig;
02059   g_yyFileName=name;
02060   g_yyFileDef=findFileDef(Doxygen::inputNameDict,g_yyFileName,ambig);
02061   if (g_yyFileDef && g_yyFileDef->isReference()) g_yyFileDef=0;
02062 }
02063 
02064 static void incrLevel()
02065 {
02066   g_level++;
02067   g_levelGuard.resize(g_level);
02068   g_levelGuard[g_level-1]=FALSE;
02069   //printf("%s line %d: incrLevel %d\n",g_yyFileName.data(),g_yyLineNr,g_level);
02070 }
02071 
02072 static void decrLevel()
02073 {
02074   //printf("%s line %d: decrLevel %d\n",g_yyFileName.data(),g_yyLineNr,g_level);
02075   if (g_level > 0)
02076   {
02077     g_level--;
02078     g_levelGuard.resize(g_level);
02079   }
02080   else
02081   {
02082     err("%s:%d: Error: More #endif's than #if's found.\n",
02083         g_yyFileName.data(),g_yyLineNr);
02084   }
02085 }
02086 
02087 static bool otherCaseDone()
02088 {
02089   if (g_level==0)
02090   {
02091     err("%s:%d: Error: Found an #else without a preceding #if.\n",
02092         g_yyFileName.data(),g_yyLineNr);
02093     return TRUE;
02094   }
02095   else
02096   {
02097     return g_levelGuard[g_level-1];
02098   }
02099 }
02100 
02101 static void setCaseDone(bool value)
02102 {
02103   g_levelGuard[g_level-1]=value;
02104 }
02105 
02106 static Define *isDefined(const char *name)
02107 {
02108   if (name)
02109   {
02110     Define *def;
02111     //if ((def=fileDefineCache->findDefine(g_yyFileName,name)) && !def->undef) 
02112     //  return def;
02113     if ((def=g_fileDefineDict->find(name)) && !def->undef) return def; 
02114   }
02115   return 0;
02116 }
02117 
02118 static FILE *checkAndOpenFile(const QCString &absName)
02119 {
02120   FILE *f = 0;
02121   //printf("checkAndOpenFile(%s)\n",absName.data());
02122   QFileInfo fi(absName);
02123   if (fi.exists() && fi.isFile())
02124   {
02125     // check include stack for absFileName
02126 
02127     QStack<FileState> tmpStack;
02128     g_includeStack.setAutoDelete(FALSE);
02129     FileState *fs;
02130     bool alreadyIncluded=FALSE;
02131     while ((fs=g_includeStack.pop()))
02132     {
02133       if (fs->fileName==absName) alreadyIncluded=TRUE;
02134       tmpStack.push(fs);
02135     }
02136     while ((fs=tmpStack.pop()))
02137     {
02138       g_includeStack.push(fs);
02139     }
02140     g_includeStack.setAutoDelete(TRUE);
02141 
02142     if (alreadyIncluded) return 0; 
02143 
02144     
02145     QCString filterName = getFileFilter(absName);
02146     if (!filterName.isEmpty())
02147     {
02148       QCString cmd = filterName+" \""+absName+"\"";
02149       f=portable_popen(cmd,"r");
02150       if (!f) err("Error: could not execute filter %s\n",cmd.data());
02151     }
02152     else
02153     {
02154       f=fopen(absName,"r");
02155       if (!f) err("Error: could not open file %s for reading\n",absName.data());
02156     }
02157   }
02158   return f;
02159 }
02160 
02161 static FILE *findFile(const char *fileName,bool localInclude)
02162 {
02163   //printf("** findFile(%s,%d) g_yyFileName=%s\n",fileName,localInclude,g_yyFileName.data());
02164   if (localInclude && !g_yyFileName.isEmpty())
02165   {
02166     QFileInfo fi(g_yyFileName);
02167     if (fi.exists())
02168     {
02169       QCString absName = QCString(fi.dirPath().data())+"/"+fileName;
02170       FILE *f = checkAndOpenFile(absName);
02171       if (f)
02172       {
02173         setFileName(absName);
02174         g_yyLineNr=1;
02175         return f;
02176       }
02177     }
02178   }
02179   if (g_pathList==0) 
02180   {
02181     return 0;
02182   }
02183   char *s=g_pathList->first();
02184   while (s)
02185   {
02186     QCString absName = (QCString)s+"/"+fileName;
02187     FILE *f = checkAndOpenFile(absName);
02188     if (f)
02189     {
02190       setFileName(absName);
02191       g_yyLineNr=1;
02192       return f;
02193     }
02194 
02195     s=g_pathList->next();
02196   } 
02197   return 0;
02198 }
02199 
02200 static QCString extractTrailingComment(const char *s)
02201 {
02202   if (s==0) return "";
02203   int i=strlen(s)-1;
02204   while (i>=0)
02205   {
02206     char c=s[i];
02207     switch (c)
02208     {
02209       case '/':
02210         {
02211           i--;
02212           if (i>=0 && s[i]=='*') // end of a comment block
02213           {
02214             i--;
02215             while (i>0 && !(s[i-1]=='/' && s[i]=='*')) i--;
02216             if (i==0) return s; else return &s[i-1];
02217           }
02218           else
02219           {
02220             return "";
02221           }
02222         } 
02223         break;
02224         // whitespace or line-continuation
02225       case ' ':
02226       case '\t': 
02227       case '\r':
02228       case '\n':
02229       case '\\':
02230         break;
02231       default:
02232         return "";
02233     }
02234     i--;
02235   }
02236   return "";
02237 }
02238 
02239 static int getNextChar(const QCString &expr,QCString *rest,uint &pos);
02240 static int getCurrentChar(const QCString &expr,QCString *rest,uint pos);
02241 static void unputChar(const QCString &expr,QCString *rest,uint &pos,char c);
02242 static void expandExpression(QCString &expr,QCString *rest,int pos);
02243 
02244 static QCString stringize(const QCString &s)
02245 {
02246   QCString result;
02247   uint i=0;
02248   bool inString=FALSE;
02249   bool inChar=FALSE;
02250   char c,pc;
02251   while (i<s.length())
02252   {
02253     if (!inString && !inChar)
02254     {
02255       while (i<s.length() && !inString && !inChar)
02256       {
02257         c=s.at(i++);
02258         if (c=='"')
02259         {
02260           result+="\\\"";
02261           inString=TRUE;
02262         }
02263         else if (c=='\'')
02264         {
02265           result+=c;
02266           inChar=TRUE;
02267         }
02268         else
02269         {
02270           result+=c;
02271         }
02272       }
02273     }
02274     else if (inChar)
02275     {
02276       while (i<s.length() && inChar)
02277       {
02278         c=s.at(i++);
02279         if (c=='\'')
02280         {
02281           result+='\'';
02282           inChar=FALSE;
02283         }
02284         else if (c=='\\')
02285         {
02286           result+="\\\\";
02287         }
02288         else
02289         {
02290           result+=c;
02291         }
02292       }
02293     }
02294     else
02295     {
02296       pc=0;
02297       while (i<s.length() && inString)
02298       {
02299         char c=s.at(i++);
02300         if (c=='"') 
02301         {
02302           result+="\\\"";
02303           inString= pc=='\\';
02304         }
02305         else if (c=='\\')
02306           result+="\\\\";
02307         else
02308           result+=c;
02309         pc=c;
02310       }
02311     }
02312   }
02313   //printf("stringize `%s'->`%s'\n",s.data(),result.data());
02314   return result;
02315 }
02316 
02322 static void processConcatOperators(QCString &expr)
02323 {
02324   //printf("processConcatOperators: in=`%s'\n",expr.data());
02325   QRegExp r("[ \\t\\n]*##[ \\t\\n]*"); 
02326   int l,n,i=0;
02327   if (expr.isEmpty()) return;
02328   while ((n=r.match(expr,i,&l))!=-1)
02329   {
02330     //printf("Match: `%s'\n",expr.data()+i);
02331     if (n+l+1<(int)expr.length() && expr.at(n+l)=='@' && expr.at(n+l+1)=='-')
02332     {
02333       // remove no-rescan marker after ID
02334       l+=2;
02335     }
02336     //printf("found `%s'\n",expr.mid(n,l).data());
02337     // remove the ## operator and the surrounding whitespace
02338     expr=expr.left(n)+expr.right(expr.length()-n-l);
02339     int k=n-1;
02340     while (k>=0 && isId(expr.at(k))) k--; 
02341     if (k>0 && expr.at(k)=='-' && expr.at(k-1)=='@')
02342     {
02343       // remove no-rescan marker before ID
02344       expr=expr.left(k-1)+expr.right(expr.length()-k-1);
02345       n-=2;
02346     }
02347     i=n;
02348   }
02349   //printf("processConcatOperators: out=`%s'\n",expr.data());
02350 }
02351 
02352 static void yyunput (int c,char *buf_ptr  );
02353 static void returnCharToStream(char c)
02354 {
02355   unput(c);
02356 }
02357 
02358 static inline void addTillEndOfString(const QCString &expr,QCString *rest,
02359                                        uint &pos,char term,QCString &arg)
02360 {
02361   int cc;
02362   while ((cc=getNextChar(expr,rest,pos))!=EOF)
02363   {
02364     if (cc=='\\') arg+=(char)cc,cc=getNextChar(expr,rest,pos);
02365     else if (cc==term) return;
02366     arg+=(char)cc;
02367   }
02368 }
02369 
02377 static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int &len,const Define *def,QCString &result)
02378 {
02379   //printf("replaceFunctionMacro(expr=%s,rest=%s,pos=%d,def=%s) level=%d\n",expr.data(),rest ? rest->data() : 0,pos,def->name.data(),g_level);
02380   uint j=pos;
02381   len=0;
02382   result.resize(0);
02383   int cc;
02384   while ((cc=getCurrentChar(expr,rest,j))!=EOF && cc==' ') 
02385   { 
02386     len++; 
02387     getNextChar(expr,rest,j); 
02388   }
02389   if (cc!='(') 
02390   { 
02391     unputChar(expr,rest,j,' '); 
02392     return FALSE; 
02393   }
02394   getNextChar(expr,rest,j); // eat the `(' character
02395 
02396   QDict<QCString> argTable;  // list of arguments
02397   argTable.setAutoDelete(TRUE);
02398   QCString arg;
02399   int argCount=0;
02400   bool done=FALSE;
02401   
02402   // PHASE 1: read the macro arguments
02403   if (def->nargs==0)
02404   {
02405     while ((cc=getNextChar(expr,rest,j))!=EOF)
02406     {
02407       char c = (char)cc;
02408       if (c==')') break;
02409     }
02410   }
02411   else
02412   {
02413     while (!done && (argCount<def->nargs || def->varArgs) && 
02414         ((cc=getNextChar(expr,rest,j))!=EOF)
02415           )
02416     {
02417       char c=(char)cc;
02418       if (c=='(') // argument is a function => search for matching )
02419       {
02420         int level=1;
02421         arg+=c;
02422         //char term='\0';
02423         while ((cc=getNextChar(expr,rest,j))!=EOF)
02424         {
02425           char c=(char)cc;
02426           //printf("processing %c: term=%c (%d)\n",c,term,term);
02427           if (c=='\'' || c=='\"') // skip ('s and )'s inside strings
02428           {
02429             arg+=c;
02430             addTillEndOfString(expr,rest,j,c,arg);
02431           }
02432           if (c==')')
02433           {
02434             level--;
02435             arg+=c;
02436             if (level==0) break;
02437           }
02438           else if (c=='(')
02439           {
02440             level++;
02441             arg+=c;
02442           }
02443           else
02444             arg+=c;
02445         }
02446       }
02447       else if (c==')' || c==',') // last or next argument found
02448       {
02449         if (c==',' && argCount==def->nargs-1 && def->varArgs)
02450         {
02451           arg=arg.stripWhiteSpace();
02452           arg+=',';
02453         }
02454         else
02455         {
02456           QCString argKey;
02457           argKey.sprintf("@%d",argCount++); // key name
02458           arg=arg.stripWhiteSpace();
02459           // add argument to the lookup table
02460           argTable.insert(argKey, new QCString(arg));
02461           arg.resize(0);
02462           if (c==')') // end of the argument list
02463           {
02464             done=TRUE;
02465           }
02466         }
02467       } 
02468       else if (c=='\"') // append literal strings
02469       {
02470         arg+=c; 
02471         bool found=FALSE;
02472         while (!found && (cc=getNextChar(expr,rest,j))!=EOF)
02473         {
02474           found = cc=='"';
02475           if (cc=='\\')
02476           {
02477             c=(char)cc;   
02478             arg+=c;
02479             if ((cc=getNextChar(expr,rest,j))==EOF) break;
02480           }
02481           c=(char)cc;     
02482           arg+=c;
02483         }
02484       }
02485       else if (c=='\'') // append literal characters
02486       {
02487         arg+=c;
02488         bool found=FALSE;
02489         while (!found && (cc=getNextChar(expr,rest,j))!=EOF)
02490         {
02491           found = cc=='\'';
02492           if (cc=='\\')
02493           {
02494             c=(char)cc;   
02495             arg+=c;
02496             if ((cc=getNextChar(expr,rest,j))==EOF) break;
02497           }
02498           c=(char)cc;
02499           arg+=c;
02500         }
02501       }     
02502       else // append other characters
02503       {
02504         arg+=c;
02505       }
02506     }
02507   }
02508 
02509   // PHASE 2: apply the macro function
02510   if (argCount==def->nargs || 
02511       (argCount>def->nargs && def->varArgs)) // matching parameters lists
02512   {
02513     uint k=0;
02514     // substitution of all formal arguments
02515     QCString resExpr;
02516     const QCString d=def->definition.stripWhiteSpace();
02517     //printf("Macro definition: %s\n",d.data());
02518     bool inString=FALSE;
02519     while (k<d.length())
02520     {
02521       if (d.at(k)=='@') // maybe a marker, otherwise an escaped @
02522       {
02523         if (d.at(k+1)=='@') // escaped @ => copy it (is unescaped later)
02524         {
02525           k+=2;
02526           resExpr+="@@"; // we unescape these later
02527         }
02528         else if (d.at(k+1)=='-') // no-rescan marker
02529         {
02530           k+=2;
02531           resExpr+="@-";
02532         }
02533         else // argument marker => read the argument number
02534         {
02535           QCString key="@";
02536           QCString *subst=0;
02537           bool hash=FALSE;
02538           int l=k-1;
02539           // search for ## backward
02540           if (l>=0 && d.at(l)=='"') l--;
02541           while (l>=0 && d.at(l)==' ') l--;
02542           if (l>0 && d.at(l)=='#' && d.at(l-1)=='#') hash=TRUE;
02543           k++;
02544           // scan the number
02545           while (k<d.length() && d.at(k)>='0' && d.at(k)<='9') key+=d.at(k++);
02546           if (!hash) 
02547           {
02548             // search for ## forward
02549             l=k;
02550             if (l<(int)d.length() && d.at(l)=='"') l++;
02551             while (l<(int)d.length() && d.at(l)==' ') l++;
02552             if (l<(int)d.length()-1 && d.at(l)=='#' && d.at(l+1)=='#') hash=TRUE;
02553           }
02554           //printf("request key %s result %s\n",key.data(),argTable[key]->data());
02555           if (key.length()>1 && (subst=argTable[key])) 
02556           {
02557             QCString substArg=*subst;
02558             //printf("substArg=`%s'\n",substArg.data());
02559             // only if no ## operator is before or after the argument
02560             // marker we do macro expansion.
02561             if (!hash) expandExpression(substArg,0,0);
02562             if (inString)
02563             {
02564               //printf("`%s'=stringize(`%s')\n",stringize(*subst).data(),subst->data());
02565 
02566               // if the marker is inside a string (because a # was put 
02567               // before the macro name) we must escape " and \ characters
02568               resExpr+=stringize(substArg);
02569             }
02570             else
02571             {
02572               if (hash && substArg.isEmpty())
02573               {
02574                 resExpr+="@E"; // empty argument will be remove later on
02575               }
02576               else if (g_nospaces)
02577               {
02578                 resExpr+=substArg;
02579               }
02580               else
02581               {
02582                 resExpr+=" "+substArg+" ";
02583               }
02584             }
02585           }
02586         }
02587       }
02588       else // no marker, just copy
02589       {
02590         if (!inString && d.at(k)=='\"') 
02591         {
02592           inString=TRUE; // entering a literal string
02593         }
02594         else if (inString && d.at(k)=='\"' && (d.at(k-1)!='\\' || d.at(k-2)=='\\'))
02595         {
02596           inString=FALSE; // leaving a literal string
02597         }
02598         resExpr+=d.at(k++);
02599       }
02600     }
02601     len=j-pos;
02602     result=resExpr;
02603     //printf("result after substitution `%s' expr=`%s'\n",
02604     //       result.data(),expr.mid(pos,len).data());
02605     return TRUE;
02606   }
02607   return FALSE;
02608 }
02609 
02610 
02615 static int getNextId(const QCString &expr,int p,int *l)
02616 {
02617   int n;
02618   while (p<(int)expr.length())
02619   {
02620     char c=expr.at(p++);
02621     if (isalpha(c) || c=='_') // read id
02622     {
02623       n=p-1;
02624       while (p<(int)expr.length() && isId(expr.at(p))
02625             ) p++;
02626       *l=p-n;
02627       return n; 
02628     }
02629     else if (c=='"') // skip string
02630     {
02631       char ppc=0,pc=c;
02632       if (p<(int)expr.length()) c=expr.at(p);
02633       while (p<(int)expr.length() && (c!='"' || (pc=='\\' && ppc!='\\'))) 
02634         // continue as long as no " is found, but ignoring \", but not \\"
02635       {
02636         ppc=pc;
02637         pc=c;
02638         c=expr.at(p);
02639         p++;
02640       }
02641     }
02642     else if (c=='/') // skip C Comment
02643     {
02644       char pc=c;
02645       if (p<(int)expr.length()) 
02646       {
02647         c=expr.at(++p);
02648         if (c=='*')  // Start of C comment
02649         { 
02650           while (p<(int)expr.length() && !(pc=='*' && c=='/'))
02651           {
02652             pc=c;
02653             c=expr.at(++p);
02654           }
02655           p++;
02656         }
02657       }
02658     }
02659   }
02660   return -1;
02661 }
02662 
02669 static void expandExpression(QCString &expr,QCString *rest,int pos)
02670 {
02671   //printf("expandExpression(%s,%s)\n",expr.data(),rest ? rest->data() : 0);
02672   QCString macroName;
02673   QCString expMacro;
02674   int i=pos,l,p,len;
02675   while ((p=getNextId(expr,i,&l))!=-1) // search for an macro name
02676   {
02677     bool replaced=FALSE;
02678     macroName=expr.mid(p,l);
02679     //printf("macroName %s found\n",macroName.data());
02680     if (p<2 || !(expr.at(p-2)=='@' && expr.at(p-1)=='-')) // no-rescan marker?
02681     {
02682       if (g_expandedDict->find(macroName)==0) // expand macro
02683       {
02684         Define *def=isDefined(macroName);
02685         if (def && def->nargs==-1) // simple macro
02686         {
02687           // substitute the definition of the macro
02688           //printf("macro `%s'->`%s'\n",macroName.data(),def->definition.data());
02689           if (g_nospaces)
02690           {
02691             expMacro=def->definition.stripWhiteSpace();
02692           }
02693           else
02694           {
02695             expMacro=" "+def->definition.stripWhiteSpace()+" ";
02696           }
02697           //expMacro=def->definition.stripWhiteSpace();
02698           replaced=TRUE;
02699           len=l;
02700           //printf("simple macro expansion=`%s'->`%s'\n",macroName.data(),expMacro.data());
02701         }
02702         else if (def && def->nargs>=0) // function macro
02703         {
02704           replaced=replaceFunctionMacro(expr,rest,p+l,len,def,expMacro);
02705           len+=l;
02706         }
02707 
02708         if (replaced) // expand the macro and rescan the expression
02709         {
02710             
02711           //printf("replacing `%s'->`%s'\n",expr.mid(p,len).data(),expMacro.data());
02712           QCString resultExpr=expMacro;
02713           QCString restExpr=expr.right(expr.length()-len-p);
02714           processConcatOperators(resultExpr);
02715           if (!def->nonRecursive)
02716           {
02717             g_expandedDict->insert(macroName,def);
02718             expandExpression(resultExpr,&restExpr,0);
02719             g_expandedDict->remove(macroName);
02720           }
02721           expr=expr.left(p)+resultExpr+restExpr;
02722           i=p;
02723           //printf("new expression: %s\n",expr.data());
02724         }
02725         else // move to the next macro name
02726         {
02727           //printf("moving to the next macro old=%d new=%d\n",i,p+l);
02728           i=p+l;
02729         }
02730       }
02731       else // move to the next macro name
02732       {
02733         expr=expr.left(p)+"@-"+expr.right(expr.length()-p);
02734         //printf("macro already expanded, moving to the next macro expr=%s\n",expr.data());
02735         i=p+l+2;
02736         //i=p+l;
02737       }
02738     }
02739     else // no re-scan marker found, skip the macro name
02740     {
02741       //printf("skipping marked macro\n");
02742       i=p+l;
02743     }
02744   }
02745 }
02746 
02751 QCString removeIdsAndMarkers(const char *s)
02752 {
02753   //printf("removeIdsAndMarkers(%s)\n",s);
02754   const char *p=s;
02755   char c;
02756   bool inNum=FALSE;
02757   QCString result;
02758   if (p)
02759   {
02760     while ((c=*p))
02761     {
02762       if (c=='@') // replace @@ with @ and remove @E
02763       {
02764         if (*(p+1)=='@')
02765         {
02766           result+=c; 
02767         }
02768         else if (*(p+1)=='E')
02769         {
02770           // skip
02771         }
02772         p+=2;
02773       }
02774       else if (isdigit(c)) // number
02775       {
02776         result+=c;
02777         p++;
02778         inNum=TRUE;     
02779       }
02780       else if (c=='d' && !inNum) // identifier starting with a `d'
02781       {
02782         if (strncmp(p,"defined ",8)==0 || strncmp(p,"defined(",8)==0) 
02783                    // defined keyword
02784         {
02785           p+=7; // skip defined
02786         }
02787         else
02788         {
02789           result+="0L";
02790           p++;
02791           while ((c=*p) && isId(c)) p++;
02792         }
02793       }
02794       else if ((isalpha(c) || c=='_') && !inNum) // replace identifier with 0L
02795       {
02796         result+="0L";
02797         p++;
02798         while ((c=*p) && isId(c)) p++;
02799       }
02800       else if (c=='/') // skip C comments
02801       {
02802         char pc=c;
02803         c=*++p;
02804         if (c=='*') // start of C comment
02805         { 
02806           while (*p && !(pc=='*' && c=='/')) // search end of comment
02807           {
02808             pc=c;
02809             c=*++p;
02810           }
02811           p++;
02812         }
02813         else // oops, not comment but division
02814         {
02815           result+=pc;
02816           goto nextChar;
02817         }
02818       }
02819       else 
02820       {
02821 nextChar:
02822         result+=c;
02823         char lc=tolower(c);
02824         if (!isId(lc) && lc!='.' && lc!='-' && lc!='+') inNum=FALSE;
02825         p++;
02826       }
02827     }
02828   }
02829   //printf("removeIdsAndMarkers(%s)=%s\n",s,result.data());
02830   return result;
02831 }
02832 
02837 QCString removeMarkers(const char *s)
02838 {
02839   const char *p=s;
02840   char c;
02841   QCString result;
02842   if (p)
02843   {
02844     while ((c=*p))
02845     {
02846       switch(c)
02847       {
02848         case '@': // replace @@ with @
02849           {
02850             if (*(p+1)=='@')
02851             {
02852               result+=c; 
02853             }
02854             p+=2;
02855           }
02856           break;
02857         case '/': // skip C comments
02858           {
02859             result+=c;
02860             char pc=c;
02861             c=*++p;
02862             if (c=='*') // start of C comment
02863             { 
02864               while (*p && !(pc=='*' && c=='/')) // search end of comment
02865               {
02866                 if (*p=='@' && *(p+1)=='@') 
02867                   result+=c,p++;
02868                 else 
02869                   result+=c;
02870                 pc=c;
02871                 c=*++p;
02872               }
02873               if (*p)
02874               {
02875                 result+=c;
02876                 p++;
02877               }
02878             }
02879           }
02880           break;
02881         case '"': // skip string literals
02882           {
02883             result+=c;
02884             char pc=c;
02885             c=*++p;
02886             while (*p && (c!='"' || pc=='\\')) // no end quote
02887             {
02888               result+=c;
02889               c=*++p;
02890             }
02891           }
02892           break;
02893         case '\'': // skip char literals
02894           {
02895             result+=c;
02896             char pc=c;
02897             c=*++p;
02898             while (*p && (c!='\'' || pc=='\\')) // no end quote
02899             {
02900               result+=c;
02901               c=*++p;
02902             }
02903           }
02904           break;
02905         default:
02906           {
02907             result+=c;
02908             p++;
02909           }
02910           break;
02911       }
02912     }
02913   }
02914   //printf("RemoveMarkers(%s)=%s\n",s,result.data());
02915   return result;
02916 }
02917 
02922 bool computeExpression(const QCString &expr)
02923 {
02924   QCString e=expr;
02925   expandExpression(e,0,0);
02926   //printf("after expansion `%s'\n",e.data());
02927   e = removeIdsAndMarkers(e);
02928   if (e.isEmpty()) return FALSE;
02929   //printf("parsing `%s'\n",e.data());
02930   return parseCppExpression(g_yyFileName,g_yyLineNr,e);
02931 }
02932 
02937 QCString expandMacro(const QCString &name)
02938 {
02939   QCString n=name;
02940   expandExpression(n,0,0);
02941   n=removeMarkers(n);
02942   //printf("expandMacro `%s'->`%s'\n",name.data(),n.data());
02943   return n;
02944 }
02945 
02946 Define *newDefine()
02947 {
02948   Define *def=new Define;
02949   def->name = g_defName;
02950   def->definition = g_defText.stripWhiteSpace();
02951   def->nargs = g_defArgs;
02952   def->fileName = g_yyFileName; 
02953   def->lineNr = g_yyLineNr;
02954   def->varArgs = g_defVarArgs;
02955   //printf("newDefine: `%s'->`%s'\n",def->name.data(),def->definition.data());
02956   if (!def->name.isEmpty() && Doxygen::expandAsDefinedDict[def->name])
02957   {
02958     def->isPredefined=TRUE;
02959   }
02960   return def;
02961 }
02962 
02963 void addDefine()
02964 {
02965   if (g_skip) return; // do not add this define as it is inside a 
02966                       // conditional section (cond command) that is disabled.
02967   if (!Doxygen::gatherDefines) return;
02968 
02969   //printf("addDefine %s %s\n",g_defName.data(),g_defArgsStr.data());
02970   //ArgumentList *al = new ArgumentList;
02971   //stringToArgumentList(g_defArgsStr,al);
02972   MemberDef *md=new MemberDef(
02973       g_yyFileName,g_yyLineNr,
02974       "#define",g_defName,g_defArgsStr,0,
02975       Public,Normal,FALSE,FALSE,MemberDef::Define,0,0);
02976   if (!g_defArgsStr.isEmpty())
02977   {
02978     ArgumentList *argList = new ArgumentList;
02979     //printf("addDefine() g_defName=`%s' g_defArgsStr=`%s'\n",g_defName.data(),g_defArgsStr.data());
02980     stringToArgumentList(g_defArgsStr,argList);
02981     md->setArgumentList(argList);
02982   }
02983   //printf("Setting initializer for `%s' to `%s'\n",g_defName.data(),g_defText.data());
02984   int l=g_defLitText.find('\n');
02985   if (l>0 && g_defLitText.left(l).stripWhiteSpace()=="\\")
02986   {
02987     // strip first line if it only contains a slash 
02988     g_defLitText = g_defLitText.right(g_defLitText.length()-l-1);
02989   }
02990   else if (l>0) 
02991   {
02992     // align the items on the first line with the items on the second line
02993     int k=l+1;
02994     const char *p=g_defLitText.data()+k;
02995     char c;
02996     while ((c=*p++) && (c==' ' || c=='\t')) k++;
02997     g_defLitText=g_defLitText.mid(l+1,k-l-1)+g_defLitText.stripWhiteSpace();
02998   }
02999   md->setInitializer(g_defLitText.stripWhiteSpace());
03000   
03001   md->setFileDef(g_inputFileDef);
03002   md->setDefinition("#define "+g_defName);
03003 
03004   MemberName *mn=Doxygen::functionNameSDict->find(g_defName);
03005   if (mn==0)
03006   {
03007     mn = new MemberName(g_defName);
03008     Doxygen::functionNameSDict->append(g_defName,mn);
03009   }
03010   mn->append(md);
03011   if (g_yyFileDef) g_yyFileDef->insertMember(md);
03012   
03013   //Define *d;
03014   //if ((d=defineDict[g_defName])==0) defineDict.insert(g_defName,newDefine()); 
03015 }
03016 
03017 static inline void outputChar(char c)
03018 {
03019   if (g_includeStack.isEmpty() || g_curlyCount>0) g_outputBuf->addChar(c);
03020 } 
03021 
03022 static inline void outputArray(const char *a,int len)
03023 {
03024   if (g_includeStack.isEmpty() || g_curlyCount>0) g_outputBuf->addArray(a,len);
03025 }
03026 
03027 static void readIncludeFile(const QCString &inc)
03028 {
03029   if (!Config_getBool("SEARCH_INCLUDES")) return; // do not read include files
03030   uint i=0;
03031   
03032   // find the start of the include file name
03033   while (i<inc.length() && 
03034          (inc.at(i)==' ' || inc.at(i)=='"' || inc.at(i)=='<')
03035         ) i++;
03036   uint s=i;
03037   
03038   // was it a local include?
03039   bool localInclude = s>0 && inc.at(s-1)=='"';
03040   
03041   // find the end of the include file name
03042   while (i<inc.length() && inc.at(i)!='"' && inc.at(i)!='>') i++; 
03043 
03044   if (s<inc.length() && i>s) // valid include file name found
03045   {
03046     // extract include path+name
03047     QCString incFileName=inc.mid(s,i-s).stripWhiteSpace(); 
03048 
03049     FILE *f;
03050     QCString oldFileName = g_yyFileName.copy();
03051     FileDef *oldFileDef  = g_yyFileDef;
03052     int oldLineNr        = g_yyLineNr;
03053     //printf("Searching for `%s'\n",incFileName.data());
03054     
03055     // findFile will overwrite g_yyFileDef if found
03056     if ((f=findFile(incFileName,localInclude))) // see if the include file can be found
03057     {
03058       //printf("Found include file!\n");
03059       if (Debug::isFlagSet(Debug::Preprocessor))
03060       {
03061         for (i=0;i<g_includeStack.count();i++) msg("  ");
03062         msg("#include %s: parsing...\n",incFileName.data());
03063       }
03064       if (oldFileDef) 
03065       {
03066         // add include dependency to the file in which the #include was found
03067         oldFileDef->addIncludeDependency(g_yyFileDef,incFileName,localInclude,g_isImported);
03068         // add included by dependency
03069         if (g_yyFileDef)
03070         {
03071           //printf("Adding include dependency %s->%s\n",oldFileDef->name().data(),incFileName.data());
03072           g_yyFileDef->addIncludedByDependency(oldFileDef,oldFileDef->docName(),localInclude,g_isImported);
03073         }
03074       }
03075       FileState *fs=new FileState;
03076       fs->bufState=YY_CURRENT_BUFFER;
03077       fs->lineNr=oldLineNr;
03078       fs->fileName=oldFileName;
03079       fs->filePtr=f;
03080       // push the state on the stack
03081       g_includeStack.push(fs);
03082       // set the scanner to the include file
03083 
03084       // Deal with file changes due to 
03085       // #include's within { .. } blocks
03086       QCString lineStr;
03087       lineStr.sprintf("# 1 \"%s\" 1\n",g_yyFileName.data());
03088       outputArray(lineStr.data(),lineStr.length());
03089       
03090       //fprintf(stderr,"Switching to include file %s\n",incFileName.data());
03091       preYYin=f;
03092       preYY_switch_to_buffer(preYY_create_buffer(preYYin,YY_BUF_SIZE));
03093     } 
03094     else
03095     {
03096       if (oldFileDef) 
03097       {
03098         bool ambig;
03099         FileDef *fd = findFileDef(Doxygen::inputNameDict,incFileName,ambig);
03100         //printf("findFileDef(%s)=%p\n",incFileName.data(),fd);
03101         // add include dependency to the file in which the #include was found
03102         oldFileDef->addIncludeDependency(fd,incFileName,localInclude,g_isImported);
03103         // add included by dependency
03104         if (fd)
03105         {
03106           //printf("Adding include dependency (2) %s->%s ambig=%d\n",oldFileDef->name().data(),fd->name().data(),ambig);
03107           fd->addIncludedByDependency(oldFileDef,oldFileDef->docName(),localInclude,g_isImported);
03108         }
03109       }
03110       if (Debug::isFlagSet(Debug::Preprocessor))
03111       {
03112         msg("#include %s: not found or already included! skipping...\n",incFileName.data());
03113         //printf("Error: include file %s not found\n",preYYtext);
03114       }
03115       if (g_curlyCount>0) // failed to find #include inside { ... }
03116       {
03117         warn(g_yyFileName,g_yyLineNr,"Warning: include file %s not found, perhaps you forgot to add its directory to INCLUDE_PATH?",incFileName.data());
03118       }
03119     }
03120   }
03121 }
03122 
03123 /* ----------------------------------------------------------------- */
03124 
03125 static void startCondSection(const char *sectId)
03126 {
03127   g_condStack.push(new bool(g_skip));
03128   if (Config_getList("ENABLED_SECTIONS").find(sectId)==-1)
03129   {
03130     g_skip=TRUE;
03131   }
03132 }
03133 
03134 static void endCondSection()
03135 {
03136   if (g_condStack.isEmpty())
03137   {
03138     g_skip=FALSE;
03139   }
03140   else
03141   {
03142     bool *ctx = g_condStack.pop();
03143     g_skip=*ctx;
03144   }
03145 }
03146 
03147 static QCString escapeAt(const char *text)
03148 {
03149   QCString result;
03150   if (text)
03151   {
03152     char c;
03153     const char *p=text;
03154     while ((c=*p++))
03155     {
03156       if (c=='@') result+="@@"; else result+=c;
03157     }
03158   }
03159   return result;
03160 }
03161 
03162 static char resolveTrigraph(char c)
03163 {
03164   switch (c)
03165   {
03166     case '=': return '#';
03167     case '/': return '\\';
03168     case '\'': return '^';
03169     case '(': return '[';
03170     case ')': return ']';
03171     case '!': return '|';
03172     case '<': return '{';
03173     case '>': return '}';
03174     case '-': return '~';
03175   }
03176   return '?';
03177 }
03178 
03179 /* ----------------------------------------------------------------- */
03180 
03181 #undef  YY_INPUT
03182 #define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
03183 
03184 static int yyread(char *buf,int max_size)
03185 {
03186   int len = fread( buf, 1, max_size, preYYin );
03187   if (len==0 && ferror( preYYin ))
03188   {
03189     yy_fatal_error( "input in flex scanner failed" );
03190     return len;
03191   }
03192   return filterCRLF(buf,len);
03193 }
03194 
03195 /* ----------------------------------------------------------------- */
03196 
03197 
03198 
03199 
03200 
03201 
03202 
03203 
03204 
03205 
03206 
03207 
03208 
03209 
03210 
03211 
03212 
03213 
03214 
03215 
03216 
03217 
03218 
03219 
03220 
03221 
03222 
03223 
03224 
03225 
03226 
03227 
03228 #line 3229 "<stdout>"
03229 
03230 #define INITIAL 0
03231 #define Start 1
03232 #define Command 2
03233 #define SkipCommand 3
03234 #define SkipLine 4
03235 #define CopyLine 5
03236 #define CopyString 6
03237 #define Include 7
03238 #define IncludeID 8
03239 #define EndImport 9
03240 #define DefName 10
03241 #define DefineArg 11
03242 #define DefineText 12
03243 #define SkipCPPBlock 13
03244 #define Ifdef 14
03245 #define Ifndef 15
03246 #define SkipCComment 16
03247 #define CopyCComment 17
03248 #define SkipVerbatim 18
03249 #define SkipCPPComment 19
03250 #define RemoveCComment 20
03251 #define RemoveCPPComment 21
03252 #define Guard 22
03253 #define DefinedExpr1 23
03254 #define DefinedExpr2 24
03255 #define SkipDoubleQuote 25
03256 #define SkipSingleQuote 26
03257 #define UndefName 27
03258 #define IgnoreLine 28
03259 #define FindDefineArgs 29
03260 #define ReadString 30
03261 #define CondLine 31
03262 
03263 #ifndef YY_NO_UNISTD_H
03264 /* Special case for "unistd.h", since it is non-ANSI. We include it way
03265  * down here because we want the user's section 1 to have been scanned first.
03266  * The user has a chance to override it with an option.
03267  */
03268 #include <unistd.h>
03269 #endif
03270 
03271 #ifndef YY_EXTRA_TYPE
03272 #define YY_EXTRA_TYPE void *
03273 #endif
03274 
03275 static int yy_init_globals (void );
03276 
03277 /* Macros after this point can all be overridden by user definitions in
03278  * section 1.
03279  */
03280 
03281 #ifndef YY_SKIP_YYWRAP
03282 #ifdef __cplusplus
03283 extern "C" int preYYwrap (void );
03284 #else
03285 extern int preYYwrap (void );
03286 #endif
03287 #endif
03288 
03289     static void yyunput (int c,char *buf_ptr  );
03290     
03291 #ifndef yytext_ptr
03292 static void yy_flex_strncpy (char *,yyconst char *,int );
03293 #endif
03294 
03295 #ifdef YY_NEED_STRLEN
03296 static int yy_flex_strlen (yyconst char * );
03297 #endif
03298 
03299 #ifndef YY_NO_INPUT
03300 
03301 #ifdef __cplusplus
03302 static int yyinput (void );
03303 #else
03304 static int input (void );
03305 #endif
03306 
03307 #endif
03308 
03309 /* Amount of stuff to slurp up with each read. */
03310 #ifndef YY_READ_BUF_SIZE
03311 #define YY_READ_BUF_SIZE 8192
03312 #endif
03313 
03314 /* Copy whatever the last rule matched to the standard output. */
03315 #ifndef ECHO
03316 /* This used to be an fputs(), but since the string might contain NUL's,
03317  * we now use fwrite().
03318  */
03319 #define ECHO (void) fwrite( preYYtext, preYYleng, 1, preYYout )
03320 #endif
03321 
03322 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
03323  * is returned in "result".
03324  */
03325 #ifndef YY_INPUT
03326 #define YY_INPUT(buf,result,max_size) \
03327         if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
03328                 { \
03329                 int c = '*'; \
03330                 size_t n; \
03331                 for ( n = 0; n < max_size && \
03332                              (c = getc( preYYin )) != EOF && c != '\n'; ++n ) \
03333                         buf[n] = (char) c; \
03334                 if ( c == '\n' ) \
03335                         buf[n++] = (char) c; \
03336                 if ( c == EOF && ferror( preYYin ) ) \
03337                         YY_FATAL_ERROR( "input in flex scanner failed" ); \
03338                 result = n; \
03339                 } \
03340         else \
03341                 { \
03342                 errno=0; \
03343                 while ( (result = fread(buf, 1, max_size, preYYin))==0 && ferror(preYYin)) \
03344                         { \
03345                         if( errno != EINTR) \
03346                                 { \
03347                                 YY_FATAL_ERROR( "input in flex scanner failed" ); \
03348                                 break; \
03349                                 } \
03350                         errno=0; \
03351                         clearerr(preYYin); \
03352                         } \
03353                 }\
03354 \
03355 
03356 #endif
03357 
03358 /* No semi-colon after return; correct usage is to write "yyterminate();" -
03359  * we don't want an extra ';' after the "return" because that will cause
03360  * some compilers to complain about unreachable statements.
03361  */
03362 #ifndef yyterminate
03363 #define yyterminate() return YY_NULL
03364 #endif
03365 
03366 /* Number of entries by which start-condition stack grows. */
03367 #ifndef YY_START_STACK_INCR
03368 #define YY_START_STACK_INCR 25
03369 #endif
03370 
03371 /* Report a fatal error. */
03372 #ifndef YY_FATAL_ERROR
03373 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
03374 #endif
03375 
03376 /* end tables serialization structures and prototypes */
03377 
03378 /* Default declaration of generated scanner - a define so the user can
03379  * easily add parameters.
03380  */
03381 #ifndef YY_DECL
03382 #define YY_DECL_IS_OURS 1
03383 
03384 extern int preYYlex (void);
03385 
03386 #define YY_DECL int preYYlex (void)
03387 #endif /* !YY_DECL */
03388 
03389 /* Code executed at the beginning of each rule, after preYYtext and preYYleng
03390  * have been set up.
03391  */
03392 #ifndef YY_USER_ACTION
03393 #define YY_USER_ACTION
03394 #endif
03395 
03396 /* Code executed at the end of each rule. */
03397 #ifndef YY_BREAK
03398 #define YY_BREAK break;
03399 #endif
03400 
03401 #define YY_RULE_SETUP \
03402         if ( preYYleng > 0 ) \
03403                 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
03404                                 (preYYtext[preYYleng - 1] == '\n'); \
03405         YY_USER_ACTION
03406 
03409 YY_DECL
03410 {
03411         register yy_state_type yy_current_state;
03412         register char *yy_cp, *yy_bp;
03413         register int yy_act;
03414     
03415 #line 1293 "pre.l"
03416 
03417 
03418 #line 3419 "<stdout>"
03419 
03420         if ( !(yy_init) )
03421                 {
03422                 (yy_init) = 1;
03423 
03424 #ifdef YY_USER_INIT
03425                 YY_USER_INIT;
03426 #endif
03427 
03428         /* Create the reject buffer large enough to save one state per allowed character. */
03429         if ( ! (yy_state_buf) )
03430             (yy_state_buf) = (yy_state_type *)preYYalloc(YY_STATE_BUF_SIZE  );
03431 
03432                 if ( ! (yy_start) )
03433                         (yy_start) = 1; /* first start state */
03434 
03435                 if ( ! preYYin )
03436                         preYYin = stdin;
03437 
03438                 if ( ! preYYout )
03439                         preYYout = stdout;
03440 
03441                 if ( ! YY_CURRENT_BUFFER ) {
03442                         preYYensure_buffer_stack ();
03443                         YY_CURRENT_BUFFER_LVALUE =
03444                                 preYY_create_buffer(preYYin,YY_BUF_SIZE );
03445                 }
03446 
03447                 preYY_load_buffer_state( );
03448                 }
03449 
03450         while ( 1 )             /* loops until end-of-file is reached */
03451                 {
03452                 yy_cp = (yy_c_buf_p);
03453 
03454                 /* Support of preYYtext. */
03455                 *yy_cp = (yy_hold_char);
03456 
03457                 /* yy_bp points to the position in yy_ch_buf of the start of
03458                  * the current run.
03459                  */
03460                 yy_bp = yy_cp;
03461 
03462                 yy_current_state = (yy_start);
03463                 yy_current_state += YY_AT_BOL();
03464 
03465                 (yy_state_ptr) = (yy_state_buf);
03466                 *(yy_state_ptr)++ = yy_current_state;
03467 
03468 yy_match:
03469                 do
03470                         {
03471                         register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
03472                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
03473                                 {
03474                                 yy_current_state = (int) yy_def[yy_current_state];
03475                                 if ( yy_current_state >= 1056 )
03476                                         yy_c = yy_meta[(unsigned int) yy_c];
03477                                 }
03478                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
03479                         *(yy_state_ptr)++ = yy_current_state;
03480                         ++yy_cp;
03481                         }
03482                 while ( yy_base[yy_current_state] != 4450 );
03483 
03484 yy_find_action:
03485                 yy_current_state = *--(yy_state_ptr);
03486                 (yy_lp) = yy_accept[yy_current_state];
03487 find_rule: /* we branch to this label when backing up */
03488                 for ( ; ; ) /* until we find what rule we matched */
03489                         {
03490                         if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
03491                                 {
03492                                 yy_act = yy_acclist[(yy_lp)];
03493                                 if ( yy_act & YY_TRAILING_HEAD_MASK ||
03494                                      yy_looking_for_trail_begin )
03495                                         {
03496                                         if ( yy_act == yy_looking_for_trail_begin )
03497                                                 {
03498                                                 yy_looking_for_trail_begin = 0;
03499                                                 yy_act &= ~YY_TRAILING_HEAD_MASK;
03500                                                 break;
03501                                                 }
03502                                         }
03503                                 else if ( yy_act & YY_TRAILING_MASK )
03504                                         {
03505                                         yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;
03506                                         yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;
03507                                         }
03508                                 else
03509                                         {
03510                                         (yy_full_match) = yy_cp;
03511                                         yy_full_state = (yy_state_ptr);
03512                                         yy_full_lp = (yy_lp);
03513                                         break;
03514                                         }
03515                                 ++(yy_lp);
03516                                 goto find_rule;
03517                                 }
03518                         --yy_cp;
03519                         yy_current_state = *--(yy_state_ptr);
03520                         (yy_lp) = yy_accept[yy_current_state];
03521                         }
03522 
03523                 YY_DO_BEFORE_ACTION;
03524 
03525 do_action:      /* This label is used only to access EOF actions. */
03526 
03527                 switch ( yy_act )
03528         { /* beginning of action switch */
03529 case 1:
03530 YY_RULE_SETUP
03531 #line 1295 "pre.l"
03532 
03533         YY_BREAK
03534 case 2:
03535 YY_RULE_SETUP
03536 #line 1296 "pre.l"
03537 
03538         YY_BREAK
03539 case 3:
03540 YY_RULE_SETUP
03541 #line 1297 "pre.l"
03542 
03543         YY_BREAK
03544 case 4:
03545 YY_RULE_SETUP
03546 #line 1298 "pre.l"
03547 { // Trigraph
03548                                           unput(resolveTrigraph(preYYtext[2]));
03549                                         }
03550         YY_BREAK
03551 case 5:
03552 YY_RULE_SETUP
03553 #line 1301 "pre.l"
03554 { BEGIN(Command); }
03555         YY_BREAK
03556 case 6:
03557 /* rule 6 can match eol */
03558 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
03559 (yy_c_buf_p) = yy_cp -= 1;
03560 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
03561 YY_RULE_SETUP
03562 #line 1302 "pre.l"
03563 {
03564                                           outputArray(preYYtext,preYYleng); 
03565                                           BEGIN(CopyLine); 
03566                                         }
03567         YY_BREAK
03568 case 7:
03569 /* rule 7 can match eol */
03570 YY_RULE_SETUP
03571 #line 1306 "pre.l"
03572 { // constructors?
03573                                           int i;
03574                                           for (i=preYYleng-1;i>=0;i--)
03575                                           {
03576                                             unput(preYYtext[i]);
03577                                           }
03578                                           BEGIN(CopyLine);
03579                                         }
03580         YY_BREAK
03581 case 8:
03582 /* rule 8 can match eol */
03583 YY_RULE_SETUP
03584 #line 1314 "pre.l"
03585 { // function like macro
03586                                           static bool skipFuncMacros = Config_getBool("SKIP_FUNCTION_MACROS");
03587                                           QCString name(preYYtext);
03588                                           name=name.left(name.find('(')).stripWhiteSpace();
03589 
03590                                           Define *def=0;
03591                                           if (skipFuncMacros && 
03592                                               name!="Q_PROPERTY" &&
03593                                               !(
03594                                                  (g_includeStack.isEmpty() || g_curlyCount>0) &&
03595                                                  g_macroExpansion &&
03596                                                  (def=g_fileDefineDict->find(name)) &&
03597                                                  (!g_expandOnlyPredef || def->isPredefined)
03598                                                )
03599                                              )
03600                                           {
03601                                             outputChar('\n');
03602                                             g_yyLineNr++;
03603                                           }
03604                                           else // don't skip
03605                                           {
03606                                             int i;
03607                                             for (i=preYYleng-1;i>=0;i--)
03608                                             {
03609                                               unput(preYYtext[i]);
03610                                             }
03611                                             BEGIN(CopyLine);
03612                                           }
03613                                         }
03614         YY_BREAK
03615 case 9:
03616 /* rule 9 can match eol */
03617 YY_RULE_SETUP
03618 #line 1343 "pre.l"
03619 {
03620                                           QCString text=preYYtext;
03621                                           g_yyLineNr+=text.contains('\n');
03622                                           outputArray(preYYtext,preYYleng);
03623                                         }
03624         YY_BREAK
03625 case 10:
03626 YY_RULE_SETUP
03627 #line 1348 "pre.l"
03628 { // count brackets inside the main file
03629                                           if (g_includeStack.isEmpty()) 
03630                                           {
03631                                             g_curlyCount++;
03632                                           }
03633                                           outputChar(*preYYtext);
03634                                         }
03635         YY_BREAK
03636 case 11:
03637 YY_RULE_SETUP
03638 #line 1355 "pre.l"
03639 { // count brackets inside the main file
03640                                           if (g_includeStack.isEmpty() && g_curlyCount>0) 
03641                                           {
03642                                             g_curlyCount--;
03643                                           }
03644                                           outputChar(*preYYtext);
03645                                         }
03646         YY_BREAK
03647 case 12:
03648 YY_RULE_SETUP
03649 #line 1362 "pre.l"
03650 { 
03651                                           outputArray(preYYtext,preYYleng);
03652                                         }
03653         YY_BREAK
03654 case 13:
03655 YY_RULE_SETUP
03656 #line 1365 "pre.l"
03657 { 
03658                                           outputArray(preYYtext,preYYleng);
03659                                         }
03660         YY_BREAK
03661 case 14:
03662 YY_RULE_SETUP
03663 #line 1368 "pre.l"
03664 { 
03665                                           outputArray(preYYtext,preYYleng);
03666                                         }
03667         YY_BREAK
03668 case 15:
03669 YY_RULE_SETUP
03670 #line 1371 "pre.l"
03671 {
03672                                           outputChar(*preYYtext);
03673                                           BEGIN( CopyString );
03674                                         }
03675         YY_BREAK
03676 case 16:
03677 YY_RULE_SETUP
03678 #line 1375 "pre.l"
03679 {
03680                                           outputArray(preYYtext,preYYleng);
03681                                         }
03682         YY_BREAK
03683 case 17:
03684 YY_RULE_SETUP
03685 #line 1378 "pre.l"
03686 {
03687                                           outputArray(preYYtext,preYYleng);
03688                                         }
03689         YY_BREAK
03690 case 18:
03691 YY_RULE_SETUP
03692 #line 1381 "pre.l"
03693 {
03694                                           outputChar(*preYYtext);
03695                                           BEGIN( CopyLine );
03696                                         }
03697         YY_BREAK
03698 case 19:
03699 /* rule 19 can match eol */
03700 YY_RULE_SETUP
03701 #line 1385 "pre.l"
03702 {
03703                                           Define *def=0;
03704                                           //def=g_fileDefineDict->find(preYYtext);
03705                                           //printf("Search for define %s found=%d g_includeStack.isEmpty()=%d "
03706                                           //       "g_curlyCount=%d g_macroExpansion=%d g_expandOnlyPredef=%d "
03707                                           //     "isPreDefined=%d\n",preYYtext,def ? 1 : 0,
03708                                           //     g_includeStack.isEmpty(),g_curlyCount,g_macroExpansion,g_expandOnlyPredef,
03709                                           //     def ? def->isPredefined : -1
03710                                           //    );
03711                                           if ((g_includeStack.isEmpty() || g_curlyCount>0) &&
03712                                               g_macroExpansion &&
03713                                               (def=g_fileDefineDict->find(preYYtext)) &&
03714                                               (!g_expandOnlyPredef || def->isPredefined)
03715                                              )
03716                                           {
03717                                             //printf("Found it!\n");
03718                                             g_roundCount=0;
03719                                             g_defArgsStr=preYYtext;
03720                                             if (def->nargs==-1) // no function macro
03721                                             {
03722                                               QCString result = expandMacro(g_defArgsStr);
03723                                               outputArray(result,result.length());
03724                                             }
03725                                             else // zero or more arguments
03726                                             {
03727                                               g_findDefArgContext = CopyLine;
03728                                               BEGIN(FindDefineArgs);
03729                                             }
03730                                           }
03731                                           else
03732                                           {
03733                                             outputArray(preYYtext,preYYleng);
03734                                           }
03735                                         }
03736         YY_BREAK
03737 case 20:
03738 YY_RULE_SETUP
03739 #line 1419 "pre.l"
03740 {
03741                                           Define *def=0;
03742                                           //printf("Search for define %s\n",preYYtext);
03743                                           if ((g_includeStack.isEmpty() || g_curlyCount>0) && 
03744                                               g_macroExpansion &&
03745                                               (def=g_fileDefineDict->find(preYYtext)) &&
03746                                               def->nargs==-1 &&
03747                                               (!g_expandOnlyPredef || def->isPredefined)
03748                                              )
03749                                           {
03750                                             //printf("Found it!\n");
03751                                             QCString name=preYYtext;
03752                                             QCString result=expandMacro(name); 
03753                                             //printf("result=`%s'\n",result.data());
03754                                             outputArray(result,result.length());
03755                                           }
03756                                           else
03757                                           {
03758                                             outputArray(preYYtext,preYYleng);
03759                                           }
03760                                         }
03761         YY_BREAK
03762 case 21:
03763 /* rule 21 can match eol */
03764 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
03765 (yy_c_buf_p) = yy_cp -= 1;
03766 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
03767 YY_RULE_SETUP
03768 #line 1440 "pre.l"
03769 { // strip line continuation characters
03770                                         }
03771         YY_BREAK
03772 case 22:
03773 YY_RULE_SETUP
03774 #line 1442 "pre.l"
03775 {
03776                                           outputChar(*preYYtext);
03777                                         }
03778         YY_BREAK
03779 case 23:
03780 /* rule 23 can match eol */
03781 YY_RULE_SETUP
03782 #line 1445 "pre.l"
03783 {
03784                                           outputChar('\n');
03785                                           BEGIN(Start);
03786                                           g_yyLineNr++;
03787                                         }
03788         YY_BREAK
03789 case 24:
03790 YY_RULE_SETUP
03791 #line 1450 "pre.l"
03792 {
03793                                           g_defArgsStr+='(';
03794                                           g_roundCount++;
03795                                         }
03796         YY_BREAK
03797 case 25:
03798 YY_RULE_SETUP
03799 #line 1454 "pre.l"
03800 {
03801                                           g_defArgsStr+=')';
03802                                           g_roundCount--;
03803                                           if (g_roundCount==0)
03804                                           {
03805                                             QCString result=expandMacro(g_defArgsStr);
03806                                             //printf("g_defArgsStr=`%s'->`%s'\n",g_defArgsStr.data(),result.data());
03807                                             if (g_findDefArgContext==CopyLine)
03808                                             {
03809                                               outputArray(result,result.length());
03810                                               BEGIN(g_findDefArgContext);
03811                                             }
03812                                             else // g_findDefArgContext==IncludeID
03813                                             {
03814                                               readIncludeFile(result);
03815                                               g_nospaces=FALSE;
03816                                               BEGIN(Start);
03817                                             }
03818                                           }
03819                                         }
03820         YY_BREAK
03821 /*
03822 <FindDefineArgs>")"{B}*"("              {
03823                                           g_defArgsStr+=preYYtext;
03824                                         }
03825   */
03826 case 26:
03827 YY_RULE_SETUP
03828 #line 1479 "pre.l"
03829 {
03830                                           g_defArgsStr+=preYYtext;
03831                                         }
03832         YY_BREAK
03833 case 27:
03834 YY_RULE_SETUP
03835 #line 1482 "pre.l"
03836 {
03837                                           g_defArgsStr+=*preYYtext;
03838                                           BEGIN(ReadString);
03839                                         }
03840         YY_BREAK
03841 case 28:
03842 /* rule 28 can match eol */
03843 YY_RULE_SETUP
03844 #line 1486 "pre.l"
03845 {
03846                                           g_yyLineNr++;
03847                                           outputChar('\n');
03848                                         }
03849         YY_BREAK
03850 case 29:
03851 YY_RULE_SETUP
03852 #line 1490 "pre.l"
03853 {
03854                                           g_defArgsStr+="@@";
03855                                         }
03856         YY_BREAK
03857 case 30:
03858 YY_RULE_SETUP
03859 #line 1493 "pre.l"
03860 {
03861                                           g_defArgsStr+=*preYYtext;
03862                                         }
03863         YY_BREAK
03864 case 31:
03865 YY_RULE_SETUP
03866 #line 1496 "pre.l"
03867 {
03868                                           g_defArgsStr+=*preYYtext;
03869                                           BEGIN(FindDefineArgs);
03870                                         }
03871         YY_BREAK
03872 case 32:
03873 YY_RULE_SETUP
03874 #line 1500 "pre.l"
03875 {
03876                                           g_defArgsStr+=preYYtext;
03877                                         }
03878         YY_BREAK
03879 case 33:
03880 YY_RULE_SETUP
03881 #line 1503 "pre.l"
03882 {
03883                                           g_defArgsStr+=preYYtext;
03884                                         }
03885         YY_BREAK
03886 case 34:
03887 YY_RULE_SETUP
03888 #line 1506 "pre.l"
03889 {
03890                                           g_defArgsStr+=*preYYtext;
03891                                         }
03892         YY_BREAK
03893 case 35:
03894 YY_RULE_SETUP
03895 #line 1509 "pre.l"
03896 {
03897                                           g_isImported = preYYtext[1]=='m';
03898                                           if (g_macroExpansion) 
03899                                             BEGIN(IncludeID);
03900                                         }
03901         YY_BREAK
03902 case 36:
03903 YY_RULE_SETUP
03904 #line 1514 "pre.l"
03905 { 
03906                                           g_isImported = preYYtext[1]=='m';
03907                                           char c[2];
03908                                           c[0]=preYYtext[preYYleng-1];c[1]='\0';
03909                                           g_incName=c;
03910                                           BEGIN(Include); 
03911                                         }
03912         YY_BREAK
03913 case 37:
03914 YY_RULE_SETUP
03915 #line 1521 "pre.l"
03916 { 
03917                                           //printf("!!!DefName\n"); 
03918                                           BEGIN(DefName); 
03919                                         }
03920         YY_BREAK
03921 case 38:
03922 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
03923 (yy_c_buf_p) = yy_cp = yy_bp + 5;
03924 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
03925 YY_RULE_SETUP
03926 #line 1525 "pre.l"
03927 {
03928                                           incrLevel();
03929                                           g_guardExpr.resize(0);
03930                                           BEGIN(DefinedExpr2);
03931                                         }
03932         YY_BREAK
03933 case 39:
03934 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
03935 (yy_c_buf_p) = yy_cp = yy_bp + 5;
03936 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
03937 YY_RULE_SETUP
03938 #line 1530 "pre.l"
03939 {
03940                                           //printf("Pre.l: ifdef\n");
03941                                           incrLevel();
03942                                           g_guardExpr.resize(0);
03943                                           BEGIN(DefinedExpr1);
03944                                         }
03945         YY_BREAK
03946 case 40:
03947 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
03948 (yy_c_buf_p) = yy_cp = yy_bp + 6;
03949 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
03950 YY_RULE_SETUP
03951 #line 1536 "pre.l"
03952 {
03953                                           incrLevel();
03954                                           g_guardExpr="! ";
03955                                           BEGIN(DefinedExpr2);
03956                                         }
03957         YY_BREAK
03958 case 41:
03959 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
03960 (yy_c_buf_p) = yy_cp = yy_bp + 6;
03961 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
03962 YY_RULE_SETUP
03963 #line 1541 "pre.l"
03964 {
03965                                           incrLevel();
03966                                           g_guardExpr="! ";
03967                                           BEGIN(DefinedExpr1);
03968                                         }
03969         YY_BREAK
03970 case 42:
03971 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
03972 (yy_c_buf_p) = yy_cp = yy_bp + 2;
03973 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
03974 YY_RULE_SETUP
03975 #line 1546 "pre.l"
03976 {
03977                                           incrLevel();
03978                                           g_guardExpr.resize(0);
03979                                           BEGIN(Guard);
03980                                         }
03981         YY_BREAK
03982 case 43:
03983 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
03984 (yy_c_buf_p) = yy_cp -= 1;
03985 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
03986 YY_RULE_SETUP
03987 #line 1551 "pre.l"
03988 {
03989                                           if (!otherCaseDone())
03990                                           {
03991                                             g_guardExpr.resize(0);
03992                                             BEGIN(Guard);  
03993                                           }
03994                                           else
03995                                           {
03996                                             g_ifcount=0;
03997                                             BEGIN(SkipCPPBlock);
03998                                           }
03999                                         }
04000         YY_BREAK
04001 case 44:
04002 /* rule 44 can match eol */
04003 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
04004 (yy_c_buf_p) = yy_cp = yy_bp + 4;
04005 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
04006 YY_RULE_SETUP
04007 #line 1563 "pre.l"
04008 {
04009                                           //printf("else g_levelGuard[%d]=%d\n",g_level-1,g_levelGuard[g_level-1]);
04010                                           if (otherCaseDone())
04011                                           {
04012                                             g_ifcount=0;
04013                                             BEGIN(SkipCPPBlock);
04014                                           }
04015                                           else
04016                                           {
04017                                             setCaseDone(TRUE);
04018                                             //g_levelGuard[g_level-1]=TRUE;
04019                                           } 
04020                                         }
04021         YY_BREAK
04022 case 45:
04023 YY_RULE_SETUP
04024 #line 1576 "pre.l"
04025 {
04026                                           BEGIN(UndefName);
04027                                         }
04028         YY_BREAK
04029 case 46:
04030 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
04031 (yy_c_buf_p) = yy_cp -= 1;
04032 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
04033 YY_RULE_SETUP
04034 #line 1579 "pre.l"
04035 {
04036                                           if (!otherCaseDone())
04037                                           {
04038                                             g_guardExpr.resize(0);
04039                                             BEGIN(Guard);
04040                                           }
04041                                         }
04042         YY_BREAK
04043 case 47:
04044 /* rule 47 can match eol */
04045 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
04046 (yy_c_buf_p) = yy_cp = yy_bp + 5;
04047 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
04048 YY_RULE_SETUP
04049 #line 1586 "pre.l"
04050 {
04051                                           //printf("Pre.l: #endif\n");
04052                                           decrLevel();
04053                                         }
04054         YY_BREAK
04055 case 48:
04056 /* rule 48 can match eol */
04057 YY_RULE_SETUP
04058 #line 1590 "pre.l"
04059 {
04060                                           outputChar('\n');
04061                                           BEGIN(Start);
04062                                           g_yyLineNr++;
04063                                         }
04064         YY_BREAK
04065 case 49:
04066 YY_RULE_SETUP
04067 #line 1595 "pre.l"
04068 { // unknown directive
04069                                           BEGIN(IgnoreLine);
04070                                         }
04071         YY_BREAK
04072 case 50:
04073 /* rule 50 can match eol */
04074 YY_RULE_SETUP
04075 #line 1598 "pre.l"
04076 {
04077                                           outputChar('\n');
04078                                           g_yyLineNr++;
04079                                         }
04080         YY_BREAK
04081 case 51:
04082 YY_RULE_SETUP
04083 #line 1602 "pre.l"
04084 
04085         YY_BREAK
04086 case 52:
04087 YY_RULE_SETUP
04088 #line 1603 "pre.l"
04089 
04090         YY_BREAK
04091 case 53:
04092 YY_RULE_SETUP
04093 #line 1604 "pre.l"
04094 {
04095                                           Define *def;
04096                                           if ((def=isDefined(preYYtext)) 
04097                                               /*&& !def->isPredefined*/
04098                                               && !def->nonRecursive
04099                                              )
04100                                           {
04101                                             //printf("undefining %s\n",preYYtext);
04102                                             def->undef=TRUE;
04103                                           }
04104                                           BEGIN(Start);
04105                                         }
04106         YY_BREAK
04107 case 54:
04108 /* rule 54 can match eol */
04109 YY_RULE_SETUP
04110 #line 1616 "pre.l"
04111 {
04112                                           outputChar('\n');
04113                                           g_guardExpr+=' ';
04114                                           g_yyLineNr++;
04115                                         }
04116         YY_BREAK
04117 case 55:
04118 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
04119 (yy_c_buf_p) = yy_cp = yy_bp + 7;
04120 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
04121 YY_RULE_SETUP
04122 #line 1621 "pre.l"
04123 {
04124                                           BEGIN(DefinedExpr2);
04125                                         }
04126         YY_BREAK
04127 case 56:
04128 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
04129 (yy_c_buf_p) = yy_cp = yy_bp + 7;
04130 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
04131 YY_RULE_SETUP
04132 #line 1624 "pre.l"
04133 {
04134                                           BEGIN(DefinedExpr1);
04135                                         }
04136         YY_BREAK
04137 case 57:
04138 YY_RULE_SETUP
04139 #line 1627 "pre.l"
04140 { g_guardExpr+=preYYtext; }
04141         YY_BREAK
04142 case 58:
04143 YY_RULE_SETUP
04144 #line 1628 "pre.l"
04145 { g_guardExpr+=*preYYtext; }
04146         YY_BREAK
04147 case 59:
04148 /* rule 59 can match eol */
04149 YY_RULE_SETUP
04150 #line 1629 "pre.l"
04151 {
04152                                           unput(*preYYtext);
04153                                           //printf("Guard: `%s'\n",
04154                                           //    g_guardExpr.data());
04155                                           bool guard=computeExpression(g_guardExpr);
04156                                           setCaseDone(guard);
04157                                           //printf("if g_levelGuard[%d]=%d\n",g_level-1,g_levelGuard[g_level-1]);
04158                                           if (guard)
04159                                           {
04160                                             BEGIN(Start);
04161                                           } 
04162                                           else
04163                                           {
04164                                             g_ifcount=0;
04165                                             BEGIN(SkipCPPBlock);
04166                                           }
04167                                         }
04168         YY_BREAK
04169 case 60:
04170 /* rule 60 can match eol */
04171 YY_RULE_SETUP
04172 #line 1646 "pre.l"
04173 { g_yyLineNr++; outputChar('\n'); }
04174         YY_BREAK
04175 case 61:
04176 YY_RULE_SETUP
04177 #line 1647 "pre.l"
04178 {
04179                                           if (isDefined(preYYtext))
04180                                             g_guardExpr+=" 1L ";
04181                                           else
04182                                             g_guardExpr+=" 0L ";
04183                                           g_lastGuardName=preYYtext;
04184                                           BEGIN(Guard);
04185                                         }
04186         YY_BREAK
04187 case 62:
04188 YY_RULE_SETUP
04189 #line 1655 "pre.l"
04190 {
04191                                           if (isDefined(preYYtext))
04192                                             g_guardExpr+=" 1L ";
04193                                           else
04194                                             g_guardExpr+=" 0L ";
04195                                           g_lastGuardName.resize(0);
04196                                         }
04197         YY_BREAK
04198 case 63:
04199 /* rule 63 can match eol */
04200 YY_RULE_SETUP
04201 #line 1662 "pre.l"
04202 { // should not happen, handle anyway
04203                                           g_yyLineNr++;
04204                                           g_ifcount=0;
04205                                           BEGIN(SkipCPPBlock); 
04206                                         }
04207         YY_BREAK
04208 case 64:
04209 YY_RULE_SETUP
04210 #line 1667 "pre.l"
04211 {
04212                                           BEGIN(Guard);
04213                                         }
04214         YY_BREAK
04215 case 65:
04216 YY_RULE_SETUP
04217 #line 1670 "pre.l"
04218 
04219         YY_BREAK
04220 case 66:
04221 YY_RULE_SETUP
04222 #line 1671 "pre.l"
04223 { BEGIN(SkipCommand); }
04224         YY_BREAK
04225 case 67:
04226 /* rule 67 can match eol */
04227 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
04228 (yy_c_buf_p) = yy_cp -= 1;
04229 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
04230 YY_RULE_SETUP
04231 #line 1672 "pre.l"
04232 { BEGIN(SkipLine); }
04233         YY_BREAK
04234 case 68:
04235 /* rule 68 can match eol */
04236 YY_RULE_SETUP
04237 #line 1673 "pre.l"
04238 { g_yyLineNr++; outputChar('\n'); }
04239         YY_BREAK
04240 case 69:
04241 YY_RULE_SETUP
04242 #line 1674 "pre.l"
04243 
04244         YY_BREAK
04245 case 70:
04246 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
04247 (yy_c_buf_p) = yy_cp -= 1;
04248 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
04249 YY_RULE_SETUP
04250 #line 1675 "pre.l"
04251 { 
04252                                           incrLevel();
04253                                           g_ifcount++; 
04254                                           //printf("#if... depth=%d\n",g_ifcount);
04255                                         }
04256         YY_BREAK
04257 case 71:
04258 YY_RULE_SETUP
04259 #line 1680 "pre.l"
04260 {
04261                                           //printf("Else! g_ifcount=%d otherCaseDone=%d\n",g_ifcount,otherCaseDone());
04262                                           if (g_ifcount==0 && !otherCaseDone())
04263                                           {
04264                                             setCaseDone(TRUE);
04265                                             //outputChar('\n');
04266                                             BEGIN(Start);
04267                                           }
04268                                         }
04269         YY_BREAK
04270 case 72:
04271 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
04272 (yy_c_buf_p) = yy_cp -= 1;
04273 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
04274 YY_RULE_SETUP
04275 #line 1689 "pre.l"
04276 {
04277                                           if (g_ifcount==0) 
04278                                           {
04279                                             if (!otherCaseDone())
04280                                             {
04281                                               g_guardExpr.resize(0);
04282                                               g_lastGuardName.resize(0);
04283                                               BEGIN(Guard);
04284                                             }
04285                                             else
04286                                             {
04287                                               BEGIN(SkipCPPBlock);
04288                                             }
04289                                           }
04290                                         }
04291         YY_BREAK
04292 case 73:
04293 YY_RULE_SETUP
04294 #line 1704 "pre.l"
04295 { 
04296                                           decrLevel();
04297                                           if (--g_ifcount<0)
04298                                           {
04299                                             //outputChar('\n');
04300                                             BEGIN(Start);
04301                                           }
04302                                         }
04303         YY_BREAK
04304 case 74:
04305 /* rule 74 can match eol */
04306 YY_RULE_SETUP
04307 #line 1712 "pre.l"
04308 { 
04309                                           outputChar('\n');
04310                                           g_yyLineNr++; 
04311                                           BEGIN(SkipCPPBlock);
04312                                         }
04313         YY_BREAK
04314 case 75:
04315 YY_RULE_SETUP
04316 #line 1717 "pre.l"
04317 { // unknown directive 
04318                                           BEGIN(SkipLine); 
04319                                         }
04320         YY_BREAK
04321 case 76:
04322 YY_RULE_SETUP
04323 #line 1720 "pre.l"
04324 
04325         YY_BREAK
04326 case 77:
04327 YY_RULE_SETUP
04328 #line 1721 "pre.l"
04329 
04330         YY_BREAK
04331 case 78:
04332 YY_RULE_SETUP
04333 #line 1722 "pre.l"
04334 
04335         YY_BREAK
04336 case 79:
04337 YY_RULE_SETUP
04338 #line 1723 "pre.l"
04339 {
04340                                           g_lastCPPContext=YY_START;
04341                                           BEGIN(RemoveCPPComment);
04342                                         }
04343         YY_BREAK
04344 case 80:
04345 YY_RULE_SETUP
04346 #line 1727 "pre.l"
04347 {
04348                                           g_lastCContext=YY_START;
04349                                           BEGIN(RemoveCComment);
04350                                         }
04351         YY_BREAK
04352 case 81:
04353 /* rule 81 can match eol */
04354 YY_RULE_SETUP
04355 #line 1731 "pre.l"
04356 {
04357                                           outputChar('\n');
04358                                           g_yyLineNr++;  
04359                                           BEGIN(SkipCPPBlock);
04360                                         }
04361         YY_BREAK
04362 case 82:
04363 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
04364 (yy_c_buf_p) = yy_cp -= 1;
04365 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
04366 YY_RULE_SETUP
04367 #line 1736 "pre.l"
04368 {
04369                                           g_nospaces=TRUE;
04370                                           g_roundCount=0;
04371                                           g_defArgsStr=preYYtext;
04372                                           g_findDefArgContext = IncludeID;
04373                                           BEGIN(FindDefineArgs);
04374                                         }
04375         YY_BREAK
04376 case 83:
04377 YY_RULE_SETUP
04378 #line 1743 "pre.l"
04379 {
04380                                           g_nospaces=TRUE;
04381                                           readIncludeFile(expandMacro(preYYtext));
04382                                           BEGIN(Start);
04383                                         }
04384         YY_BREAK
04385 case 84:
04386 YY_RULE_SETUP
04387 #line 1748 "pre.l"
04388 { 
04389                                           g_incName+=preYYtext;
04390                                           readIncludeFile(g_incName);
04391                                           if (g_isImported)
04392                                           {
04393                                             BEGIN(EndImport);
04394                                           }
04395                                           else
04396                                           {
04397                                             BEGIN(Start);
04398                                           }
04399                                         }
04400         YY_BREAK
04401 case 85:
04402 /* rule 85 can match eol */
04403 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
04404 (yy_c_buf_p) = yy_cp -= 1;
04405 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
04406 YY_RULE_SETUP
04407 #line 1760 "pre.l"
04408 {
04409                                           BEGIN(Start);
04410                                         }
04411         YY_BREAK
04412 case 86:
04413 /* rule 86 can match eol */
04414 YY_RULE_SETUP
04415 #line 1763 "pre.l"
04416 { 
04417                                           outputChar('\n');
04418                                           g_yyLineNr++;
04419                                         }
04420         YY_BREAK
04421 case 87:
04422 YY_RULE_SETUP
04423 #line 1767 "pre.l"
04424 {
04425                                         }
04426         YY_BREAK
04427 case 88:
04428 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
04429 (yy_c_buf_p) = yy_cp -= 1;
04430 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
04431 YY_RULE_SETUP
04432 #line 1769 "pre.l"
04433 {
04434                                           //printf("Define() `%s'\n",preYYtext);
04435                                           g_argDict = new QDict<int>(31);
04436                                           g_argDict->setAutoDelete(TRUE);
04437                                           g_defArgs = 0; 
04438                                           g_defArgsStr.resize(0);
04439                                           g_defText.resize(0);
04440                                           g_defLitText.resize(0);
04441                                           g_defName = preYYtext;
04442                                           g_defVarArgs = FALSE;
04443                                           BEGIN(DefineArg);
04444                                         }
04445         YY_BREAK
04446 case 89:
04447 YY_RULE_SETUP
04448 #line 1781 "pre.l"
04449 {
04450                                           //printf("Define `%s'\n",preYYtext);
04451                                           g_argDict = 0;
04452                                           g_defArgs = -1;
04453                                           g_defArgsStr.resize(0);
04454                                           g_defText.resize(0);
04455                                           g_defLitText.resize(0);
04456                                           g_defName = preYYtext;
04457                                           g_defVarArgs = FALSE;
04458                                           QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr;
04459                                           outputArray(tmp.data(),tmp.length());
04460                                           g_quoteArg=FALSE;
04461                                           g_insideComment=FALSE;
04462                                           BEGIN(DefineText); 
04463                                         }
04464         YY_BREAK
04465 case 90:
04466 /* rule 90 can match eol */
04467 YY_RULE_SETUP
04468 #line 1796 "pre.l"
04469 {
04470                                           g_argDict = 0;
04471                                           g_defArgs = -1;
04472                                           g_defName = preYYtext;
04473                                           g_defArgsStr.resize(0);
04474                                           g_defText.resize(0);
04475                                           g_defLitText.resize(0);
04476                                           g_defVarArgs = FALSE;
04477                                           if ( g_defName!=g_lastGuardName )
04478                                           { // define may appear in the output
04479                                             QCString tmp=(QCString)"#define "+g_defName;
04480                                             outputArray(tmp.data(),tmp.length());
04481                                             g_quoteArg=FALSE;
04482                                             g_insideComment=FALSE;
04483                                             BEGIN(DefineText);
04484                                           }
04485                                           else // define is a guard => hide
04486                                           {
04487                                             //printf("Found a guard %s\n",preYYtext);
04488                                             Define *def=g_fileDefineDict->find(g_defName);
04489                                             //if (g_includeStack.isEmpty()) 
04490                                             //{
04491                                             //  addDefine();
04492                                             //}
04493                                             if (def==0) // new define name for this file
04494                                             {
04495                                               g_fileDefineDict->insert(g_defName,newDefine());
04496                                             }
04497                                             else // name already exists
04498                                             {
04499                                               if (def->undef) // undefined name
04500                                               {
04501                                                 def->undef = FALSE;
04502                                                 def->name = g_defName;
04503                                                 def->definition = g_defText.stripWhiteSpace();
04504                                                 def->nargs = g_defArgs;
04505                                                 def->fileName = g_yyFileName.copy(); 
04506                                                 def->lineNr = g_yyLineNr;
04507                                               }
04508                                               else
04509                                               {
04510                                                 //printf("Error: define %s is defined more than once!\n",g_defName.data());
04511                                               }
04512                                             }
04513                                             g_lastGuardName.resize(0);
04514                                             BEGIN(Start);
04515                                           }
04516                                         }
04517         YY_BREAK
04518 case 91:
04519 YY_RULE_SETUP
04520 #line 1844 "pre.l"
04521 { g_defArgsStr+=preYYtext; }
04522         YY_BREAK
04523 case 92:
04524 YY_RULE_SETUP
04525 #line 1845 "pre.l"
04526 { g_defArgsStr+=preYYtext; }
04527         YY_BREAK
04528 case 93:
04529 YY_RULE_SETUP
04530 #line 1846 "pre.l"
04531 {
04532                                           g_defArgsStr+=preYYtext; 
04533                                           QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr;
04534                                           outputArray(tmp.data(),tmp.length());
04535                                           g_quoteArg=FALSE;
04536                                           g_insideComment=FALSE;
04537                                           BEGIN(DefineText);
04538                                         }
04539         YY_BREAK
04540 case 94:
04541 YY_RULE_SETUP
04542 #line 1854 "pre.l"
04543 { // Variadic macro
04544                                           g_defVarArgs = TRUE;
04545                                           g_defArgsStr+=preYYtext;
04546                                           g_argDict->insert("__VA_ARGS__",new int(g_defArgs));
04547                                           g_defArgs++;
04548                                         }
04549         YY_BREAK
04550 case 95:
04551 YY_RULE_SETUP
04552 #line 1860 "pre.l"
04553 {
04554                                           //printf("Define addArg(%s)\n",preYYtext);
04555                                           QCString argName=preYYtext;
04556                                           g_defVarArgs = preYYtext[preYYleng-1]=='.';
04557                                           if (g_defVarArgs) // strip ellipsis
04558                                           {
04559                                             argName=argName.left(argName.length()-3);
04560                                           }
04561                                           argName = argName.stripWhiteSpace();
04562                                           g_defArgsStr+=preYYtext;
04563                                           g_argDict->insert(argName,new int(g_defArgs)); 
04564                                           g_defArgs++;
04565                                         }
04566         YY_BREAK
04567 /*
04568 <DefineText>"/ **"|"/ *!"                       {
04569                                           g_defText+=preYYtext;
04570                                           g_defLitText+=preYYtext;
04571                                           g_insideComment=TRUE;
04572                                         }
04573 <DefineText>"* /"                       {
04574                                           g_defText+=preYYtext;
04575                                           g_defLitText+=preYYtext;
04576                                           g_insideComment=FALSE;
04577                                         }
04578   */
04579 case 96:
04580 YY_RULE_SETUP
04581 #line 1885 "pre.l"
04582 {
04583                                           g_defText+=preYYtext;
04584                                           g_defLitText+=preYYtext;
04585                                           g_lastCContext=YY_START;
04586                                           g_commentCount=1;
04587                                           BEGIN(CopyCComment);
04588                                         }
04589         YY_BREAK
04590 case 97:
04591 YY_RULE_SETUP
04592 #line 1892 "pre.l"
04593 {
04594                                           outputChar('/');outputChar('/');
04595                                           g_lastCPPContext=YY_START;
04596                                           g_defLitText+=' ';
04597                                           BEGIN(SkipCPPComment);
04598                                         }
04599         YY_BREAK
04600 case 98:
04601 YY_RULE_SETUP
04602 #line 1898 "pre.l"
04603 {
04604                                           if (preYYtext[0]=='/') outputChar('/');
04605                                           outputChar('*');outputChar('/');
04606                                           if (--g_commentCount<=0)
04607                                           {
04608                                             BEGIN(g_lastCContext);  
04609                                           }
04610                                         }
04611         YY_BREAK
04612 case 99:
04613 YY_RULE_SETUP
04614 #line 1906 "pre.l"
04615 {
04616                                           outputChar('/');outputChar('/');
04617                                         }
04618         YY_BREAK
04619 case 100:
04620 YY_RULE_SETUP
04621 #line 1909 "pre.l"
04622 {
04623                                           outputChar('/');outputChar('*');
04624                                           //g_commentCount++;
04625                                         }
04626         YY_BREAK
04627 case 101:
04628 YY_RULE_SETUP
04629 #line 1913 "pre.l"
04630 {
04631                                           outputArray(preYYtext,preYYleng);
04632                                         }
04633         YY_BREAK
04634 case 102:
04635 /* rule 102 can match eol */
04636 YY_RULE_SETUP
04637 #line 1916 "pre.l"
04638 {
04639                                           outputArray(preYYtext,preYYleng);
04640                                           g_yyLineNr+=QCString(preYYtext).contains('\n');
04641                                         }
04642         YY_BREAK
04643 case 103:
04644 /* rule 103 can match eol */
04645 YY_RULE_SETUP
04646 #line 1920 "pre.l"
04647 {
04648                                           outputArray(preYYtext,preYYleng);
04649                                           g_yyLineNr+=QCString(preYYtext).contains('\n');
04650                                           if (preYYtext[1]=='f')
04651                                           {
04652                                             g_blockName="f";
04653                                           }
04654                                           else
04655                                           {
04656                                             g_blockName=QCString(&preYYtext[1]).stripWhiteSpace();
04657                                           }
04658                                           BEGIN(SkipVerbatim);
04659                                         }
04660         YY_BREAK
04661 case 104:
04662 YY_RULE_SETUP
04663 #line 1933 "pre.l"
04664 { // conditional section
04665                                           g_condCtx = YY_START;
04666                                           outputArray(preYYtext,preYYleng);
04667                                           BEGIN(CondLine);
04668                                         }
04669         YY_BREAK
04670 case 105:
04671 YY_RULE_SETUP
04672 #line 1938 "pre.l"
04673 {
04674                                           startCondSection(preYYtext);
04675                                           outputArray(preYYtext,preYYleng);
04676                                           BEGIN(g_condCtx);
04677                                         }
04678         YY_BREAK
04679 case 106:
04680 /* rule 106 can match eol */
04681 #line 1944 "pre.l"
04682 case 107:
04683 /* rule 107 can match eol */
04684 YY_RULE_SETUP
04685 #line 1944 "pre.l"
04686 {
04687                                           outputArray(preYYtext,preYYleng);
04688                                           g_yyLineNr+=QCString(preYYtext).contains('\n');
04689                                           startCondSection(" ");
04690                                           if (YY_START==CondLine) BEGIN(g_condCtx);
04691                                         }
04692         YY_BREAK
04693 case 108:
04694 /* rule 108 can match eol */
04695 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
04696 (yy_c_buf_p) = yy_cp = yy_bp + 8;
04697 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
04698 YY_RULE_SETUP
04699 #line 1950 "pre.l"
04700 {
04701                                           outputArray(preYYtext,preYYleng);
04702                                           endCondSection();
04703                                         }
04704         YY_BREAK
04705 case 109:
04706 YY_RULE_SETUP
04707 #line 1954 "pre.l"
04708 { /* end of verbatim block */
04709                                           outputArray(preYYtext,preYYleng);
04710                                           if (preYYtext[1]=='f' && g_blockName=="f")
04711                                           {
04712                                             BEGIN(SkipCComment);
04713                                           }
04714                                           else if (&preYYtext[4]==g_blockName)
04715                                           {
04716                                             BEGIN(SkipCComment);
04717                                           }
04718                                         }
04719         YY_BREAK
04720 case 110:
04721 YY_RULE_SETUP
04722 #line 1965 "pre.l"
04723 {
04724                                           outputArray(preYYtext,preYYleng);
04725                                         }
04726         YY_BREAK
04727 case 111:
04728 YY_RULE_SETUP
04729 #line 1968 "pre.l"
04730 {
04731                                           outputArray(preYYtext,preYYleng);
04732                                         }
04733         YY_BREAK
04734 case 112:
04735 /* rule 112 can match eol */
04736 YY_RULE_SETUP
04737 #line 1971 "pre.l"
04738 { 
04739                                           g_yyLineNr++;
04740                                           outputChar('\n');
04741                                         }
04742         YY_BREAK
04743 case 113:
04744 YY_RULE_SETUP
04745 #line 1975 "pre.l"
04746 {
04747                                           outputChar(*preYYtext);
04748                                         }
04749         YY_BREAK
04750 case 114:
04751 /* rule 114 can match eol */
04752 YY_RULE_SETUP
04753 #line 1978 "pre.l"
04754 {
04755                                           g_defLitText+=preYYtext;
04756                                           g_defText+=escapeAt(preYYtext);
04757                                         }
04758         YY_BREAK
04759 case 115:
04760 YY_RULE_SETUP
04761 #line 1982 "pre.l"
04762 {
04763                                           g_defLitText+=preYYtext;
04764                                           g_defText+=preYYtext;
04765                                           BEGIN(g_lastCContext);
04766                                         }
04767         YY_BREAK
04768 case 116:
04769 /* rule 116 can match eol */
04770 YY_RULE_SETUP
04771 #line 1987 "pre.l"
04772 { 
04773                                           g_yyLineNr++;
04774                                           g_defLitText+=preYYtext;
04775                                           g_defText+=preYYtext;
04776                                         }
04777         YY_BREAK
04778 case 117:
04779 YY_RULE_SETUP
04780 #line 1992 "pre.l"
04781 { BEGIN(g_lastCContext); }
04782         YY_BREAK
04783 case 118:
04784 YY_RULE_SETUP
04785 #line 1993 "pre.l"
04786 
04787         YY_BREAK
04788 case 119:
04789 YY_RULE_SETUP
04790 #line 1994 "pre.l"
04791 
04792         YY_BREAK
04793 case 120:
04794 YY_RULE_SETUP
04795 #line 1995 "pre.l"
04796 
04797         YY_BREAK
04798 case 121:
04799 /* rule 121 can match eol */
04800 YY_RULE_SETUP
04801 #line 1996 "pre.l"
04802 { g_yyLineNr++; outputChar('\n'); }
04803         YY_BREAK
04804 case 122:
04805 YY_RULE_SETUP
04806 #line 1997 "pre.l"
04807 
04808         YY_BREAK
04809 case 123:
04810 YY_RULE_SETUP
04811 #line 1998 "pre.l"
04812 {
04813                                           outputArray(preYYtext,preYYleng);
04814                                         }
04815         YY_BREAK
04816 case 124:
04817 /* rule 124 can match eol */
04818 YY_RULE_SETUP
04819 #line 2001 "pre.l"
04820 {
04821                                           unput(*preYYtext);
04822                                           BEGIN(g_lastCPPContext);
04823                                         }
04824         YY_BREAK
04825 case 125:
04826 YY_RULE_SETUP
04827 #line 2005 "pre.l"
04828 {
04829                                           outputChar('/');outputChar('*');
04830                                         }
04831         YY_BREAK
04832 case 126:
04833 YY_RULE_SETUP
04834 #line 2008 "pre.l"
04835 {
04836                                           outputChar('/');outputChar('/');
04837                                         }
04838         YY_BREAK
04839 case 127:
04840 YY_RULE_SETUP
04841 #line 2011 "pre.l"
04842 {
04843                                           outputArray(preYYtext,preYYleng);
04844                                         }
04845         YY_BREAK
04846 case 128:
04847 YY_RULE_SETUP
04848 #line 2014 "pre.l"
04849 {
04850                                           outputChar(*preYYtext);
04851                                         }
04852         YY_BREAK
04853 case 129:
04854 YY_RULE_SETUP
04855 #line 2017 "pre.l"
04856 
04857         YY_BREAK
04858 case 130:
04859 YY_RULE_SETUP
04860 #line 2018 "pre.l"
04861 
04862         YY_BREAK
04863 case 131:
04864 YY_RULE_SETUP
04865 #line 2019 "pre.l"
04866 
04867         YY_BREAK
04868 case 132:
04869 YY_RULE_SETUP
04870 #line 2020 "pre.l"
04871 
04872         YY_BREAK
04873 case 133:
04874 YY_RULE_SETUP
04875 #line 2021 "pre.l"
04876 {
04877                                           g_quoteArg=TRUE;
04878                                           g_defLitText+=preYYtext;
04879                                         }
04880         YY_BREAK
04881 case 134:
04882 YY_RULE_SETUP
04883 #line 2025 "pre.l"
04884 {
04885                                           g_defLitText+=preYYtext;
04886                                           if (g_quoteArg)
04887                                           {
04888                                             g_defText+="\"";
04889                                           }
04890                                           if (g_defArgs>0)
04891                                           {
04892                                             int *n;
04893                                             if ((n=(*g_argDict)[preYYtext]))
04894                                             {
04895                                               //if (!g_quoteArg) g_defText+=' ';
04896                                               g_defText+='@';
04897                                               QCString numStr;
04898                                               numStr.sprintf("%d",*n);
04899                                               g_defText+=numStr;
04900                                               //if (!g_quoteArg) g_defText+=' ';
04901                                             }
04902                                             else
04903                                             {
04904                                               g_defText+=preYYtext;
04905                                             }
04906                                           }
04907                                           else
04908                                           {
04909                                             g_defText+=preYYtext;
04910                                           }
04911                                           if (g_quoteArg)
04912                                           {
04913                                             g_defText+="\"";
04914                                           }
04915                                           g_quoteArg=FALSE;
04916                                         }
04917         YY_BREAK
04918 case 135:
04919 YY_RULE_SETUP
04920 #line 2058 "pre.l"
04921 {
04922                                           g_defLitText+=preYYtext;
04923                                           g_defText+=preYYtext;
04924                                         }
04925         YY_BREAK
04926 case 136:
04927 /* rule 136 can match eol */
04928 YY_RULE_SETUP
04929 #line 2062 "pre.l"
04930 { 
04931                                           g_defLitText+=preYYtext;
04932                                           outputChar('\n');
04933                                           g_defText += ' '; g_yyLineNr++; 
04934                                         }
04935         YY_BREAK
04936 case 137:
04937 /* rule 137 can match eol */
04938 YY_RULE_SETUP
04939 #line 2067 "pre.l"
04940 {
04941                                           QCString comment=extractTrailingComment(g_defLitText);
04942                                           g_defLitText+=preYYtext;
04943                                           if (!comment.isEmpty())
04944                                           {
04945                                             outputArray(comment,comment.length());
04946                                             g_defLitText=g_defLitText.left(g_defLitText.length()-comment.length()-1);
04947                                           }
04948                                           outputChar('\n');
04949                                           Define *def=0;
04950                                           //printf("Define name=`%s' text=`%s' litTexti=`%s'\n",g_defName.data(),g_defText.data(),g_defLitText.data());
04951                                           if (g_includeStack.isEmpty() || g_curlyCount>0) 
04952                                           {
04953                                             addDefine();
04954                                           }
04955                                           def=g_fileDefineDict->find(g_defName);
04956                                           if (def==0) // new define
04957                                           {
04958                                             //printf("new define!\n");
04959                                             g_fileDefineDict->insert(g_defName,newDefine());
04960                                           }
04961                                           else if (def)// name already exists
04962                                           {
04963                                             //printf("existing define!\n");
04964                                             //printf("define found\n");
04965                                             if (def->undef) // undefined name
04966                                             {
04967                                               def->undef = FALSE;
04968                                               def->name = g_defName;
04969                                               def->definition = g_defText.stripWhiteSpace();
04970                                               def->nargs = g_defArgs;
04971                                               def->fileName = g_yyFileName.copy(); 
04972                                               def->lineNr = g_yyLineNr;
04973                                             }
04974                                             else
04975                                             {
04976                                               //printf("Error: define %s is defined more than once!\n",g_defName.data());
04977                                             }
04978                                           }
04979                                           delete g_argDict; g_argDict=0;
04980                                           g_yyLineNr++;
04981                                           g_lastGuardName.resize(0);
04982                                           BEGIN(Start);
04983                                         }
04984         YY_BREAK
04985 case 138:
04986 YY_RULE_SETUP
04987 #line 2111 "pre.l"
04988 { g_defText += ' '; g_defLitText+=preYYtext; }
04989         YY_BREAK
04990 case 139:
04991 YY_RULE_SETUP
04992 #line 2112 "pre.l"
04993 { g_defText += "##"; g_defLitText+=preYYtext; }
04994         YY_BREAK
04995 case 140:
04996 YY_RULE_SETUP
04997 #line 2113 "pre.l"
04998 { g_defText += "@@"; g_defLitText+=preYYtext; }
04999         YY_BREAK
05000 case 141:
05001 YY_RULE_SETUP
05002 #line 2114 "pre.l"
05003 { 
05004                                           g_defText += *preYYtext; 
05005                                           g_defLitText+=preYYtext; 
05006                                           if (!g_insideComment)
05007                                           {
05008                                             BEGIN(SkipDoubleQuote);
05009                                           }
05010                                         }
05011         YY_BREAK
05012 case 142:
05013 YY_RULE_SETUP
05014 #line 2122 "pre.l"
05015 { g_defText += *preYYtext;
05016                                           g_defLitText+=preYYtext; 
05017                                           if (!g_insideComment)
05018                                           {
05019                                             BEGIN(SkipSingleQuote);
05020                                           }
05021                                         }
05022         YY_BREAK
05023 case 143:
05024 YY_RULE_SETUP
05025 #line 2129 "pre.l"
05026 { g_defText += preYYtext; g_defLitText+=preYYtext; }
05027         YY_BREAK
05028 case 144:
05029 YY_RULE_SETUP
05030 #line 2130 "pre.l"
05031 { g_defText += preYYtext; g_defLitText+=preYYtext; }
05032         YY_BREAK
05033 case 145:
05034 YY_RULE_SETUP
05035 #line 2131 "pre.l"
05036 {
05037                                           g_defText += *preYYtext; g_defLitText+=preYYtext; 
05038                                           BEGIN(DefineText);
05039                                         }
05040         YY_BREAK
05041 case 146:
05042 YY_RULE_SETUP
05043 #line 2135 "pre.l"
05044 {
05045                                           g_defText += preYYtext; g_defLitText+=preYYtext;
05046                                         }
05047         YY_BREAK
05048 case 147:
05049 YY_RULE_SETUP
05050 #line 2138 "pre.l"
05051 {
05052                                           g_defText += *preYYtext; g_defLitText+=preYYtext;
05053                                           BEGIN(DefineText);
05054                                         }
05055         YY_BREAK
05056 case 148:
05057 YY_RULE_SETUP
05058 #line 2142 "pre.l"
05059 { g_defText += *preYYtext; g_defLitText+=preYYtext; }
05060         YY_BREAK
05061 case 149:
05062 YY_RULE_SETUP
05063 #line 2143 "pre.l"
05064 { g_defText += *preYYtext; g_defLitText+=preYYtext; }
05065         YY_BREAK
05066 case 150:
05067 YY_RULE_SETUP
05068 #line 2144 "pre.l"
05069 { g_defText += *preYYtext; g_defLitText+=preYYtext; }
05070         YY_BREAK
05071 case YY_STATE_EOF(INITIAL):
05072 case YY_STATE_EOF(Start):
05073 case YY_STATE_EOF(Command):
05074 case YY_STATE_EOF(SkipCommand):
05075 case YY_STATE_EOF(SkipLine):
05076 case YY_STATE_EOF(CopyLine):
05077 case YY_STATE_EOF(CopyString):
05078 case YY_STATE_EOF(Include):
05079 case YY_STATE_EOF(IncludeID):
05080 case YY_STATE_EOF(EndImport):
05081 case YY_STATE_EOF(DefName):
05082 case YY_STATE_EOF(DefineArg):
05083 case YY_STATE_EOF(DefineText):
05084 case YY_STATE_EOF(SkipCPPBlock):
05085 case YY_STATE_EOF(Ifdef):
05086 case YY_STATE_EOF(Ifndef):
05087 case YY_STATE_EOF(SkipCComment):
05088 case YY_STATE_EOF(CopyCComment):
05089 case YY_STATE_EOF(SkipVerbatim):
05090 case YY_STATE_EOF(SkipCPPComment):
05091 case YY_STATE_EOF(RemoveCComment):
05092 case YY_STATE_EOF(RemoveCPPComment):
05093 case YY_STATE_EOF(Guard):
05094 case YY_STATE_EOF(DefinedExpr1):
05095 case YY_STATE_EOF(DefinedExpr2):
05096 case YY_STATE_EOF(SkipDoubleQuote):
05097 case YY_STATE_EOF(SkipSingleQuote):
05098 case YY_STATE_EOF(UndefName):
05099 case YY_STATE_EOF(IgnoreLine):
05100 case YY_STATE_EOF(FindDefineArgs):
05101 case YY_STATE_EOF(ReadString):
05102 case YY_STATE_EOF(CondLine):
05103 #line 2145 "pre.l"
05104 {
05105                                           //fprintf(stderr,"End of include file\n");
05106                                           //printf("Include stack depth=%d\n",g_includeStack.count());
05107                                           if (g_includeStack.isEmpty())
05108                                           {
05109                                             //fprintf(stderr,"Terminating scanner!\n");
05110                                             yyterminate();
05111                                           }
05112                                           else
05113                                           {
05114                                             FileState *fs=g_includeStack.pop();
05115                                             //fileDefineCache->merge(g_yyFileName,fs->fileName);
05116                                             if (getFileFilter(fs->fileName.data()).isEmpty())
05117                                               fclose(fs->filePtr);
05118                                             else
05119                                               portable_pclose(fs->filePtr);
05120                                             YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER;
05121                                             preYY_switch_to_buffer(fs->bufState );
05122                                             preYY_delete_buffer(oldBuf );
05123                                             g_yyLineNr=fs->lineNr;
05124                                             setFileName(fs->fileName.copy());
05125                                             //fprintf(stderr,"######## FileName %s\n",g_yyFileName.data());
05126                                             
05127                                             // Deal with file changes due to 
05128                                             // #include's within { .. } blocks
05129                                             QCString lineStr;
05130                                             lineStr.sprintf("# %d \"%s\" 2",g_yyLineNr,g_yyFileName.data());
05131                                             outputArray(lineStr.data(),lineStr.length());
05132                                             
05133                                             delete fs; fs=0;
05134                                           }
05135                                         }
05136         YY_BREAK
05137 case 151:
05138 YY_RULE_SETUP
05139 #line 2177 "pre.l"
05140 {
05141                                           outputChar('/');outputChar('*');
05142                                           g_lastCContext=YY_START;
05143                                           g_commentCount=1;
05144                                           BEGIN(SkipCComment);
05145                                         }
05146         YY_BREAK
05147 case 152:
05148 YY_RULE_SETUP
05149 #line 2183 "pre.l"
05150 {
05151                                           outputChar('/');outputChar('/');
05152                                           g_lastCPPContext=YY_START;
05153                                           BEGIN(SkipCPPComment);
05154                                         }
05155         YY_BREAK
05156 case 153:
05157 /* rule 153 can match eol */
05158 YY_RULE_SETUP
05159 #line 2188 "pre.l"
05160 { 
05161                                           outputChar('\n');
05162                                           g_yyLineNr++; 
05163                                         }
05164         YY_BREAK
05165 case 154:
05166 YY_RULE_SETUP
05167 #line 2192 "pre.l"
05168 {
05169                                           outputChar(*preYYtext);
05170                                         }
05171         YY_BREAK
05172 case 155:
05173 YY_RULE_SETUP
05174 #line 2196 "pre.l"
05175 ECHO;
05176         YY_BREAK
05177 #line 5178 "<stdout>"
05178 
05179         case YY_END_OF_BUFFER:
05180                 {
05181                 /* Amount of text matched not including the EOB char. */
05182                 int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
05183 
05184                 /* Undo the effects of YY_DO_BEFORE_ACTION. */
05185                 *yy_cp = (yy_hold_char);
05186                 YY_RESTORE_YY_MORE_OFFSET
05187 
05188                 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
05189                         {
05190                         /* We're scanning a new file or input source.  It's
05191                          * possible that this happened because the user
05192                          * just pointed preYYin at a new source and called
05193                          * preYYlex().  If so, then we have to assure
05194                          * consistency between YY_CURRENT_BUFFER and our
05195                          * globals.  Here is the right place to do so, because
05196                          * this is the first action (other than possibly a
05197                          * back-up) that will match for the new input source.
05198                          */
05199                         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
05200                         YY_CURRENT_BUFFER_LVALUE->yy_input_file = preYYin;
05201                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
05202                         }
05203 
05204                 /* Note that here we test for yy_c_buf_p "<=" to the position
05205                  * of the first EOB in the buffer, since yy_c_buf_p will
05206                  * already have been incremented past the NUL character
05207                  * (since all states make transitions on EOB to the
05208                  * end-of-buffer state).  Contrast this with the test
05209                  * in input().
05210                  */
05211                 if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
05212                         { /* This was really a NUL. */
05213                         yy_state_type yy_next_state;
05214 
05215                         (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
05216 
05217                         yy_current_state = yy_get_previous_state(  );
05218 
05219                         /* Okay, we're now positioned to make the NUL
05220                          * transition.  We couldn't have
05221                          * yy_get_previous_state() go ahead and do it
05222                          * for us because it doesn't know how to deal
05223                          * with the possibility of jamming (and we don't
05224                          * want to build jamming into it because then it
05225                          * will run more slowly).
05226                          */
05227 
05228                         yy_next_state = yy_try_NUL_trans( yy_current_state );
05229 
05230                         yy_bp = (yytext_ptr) + YY_MORE_ADJ;
05231 
05232                         if ( yy_next_state )
05233                                 {
05234                                 /* Consume the NUL. */
05235                                 yy_cp = ++(yy_c_buf_p);
05236                                 yy_current_state = yy_next_state;
05237                                 goto yy_match;
05238                                 }
05239 
05240                         else
05241                                 {
05242                                 yy_cp = (yy_c_buf_p);
05243                                 goto yy_find_action;
05244                                 }
05245                         }
05246 
05247                 else switch ( yy_get_next_buffer(  ) )
05248                         {
05249                         case EOB_ACT_END_OF_FILE:
05250                                 {
05251                                 (yy_did_buffer_switch_on_eof) = 0;
05252 
05253                                 if ( preYYwrap( ) )
05254                                         {
05255                                         /* Note: because we've taken care in
05256                                          * yy_get_next_buffer() to have set up
05257                                          * preYYtext, we can now set up
05258                                          * yy_c_buf_p so that if some total
05259                                          * hoser (like flex itself) wants to
05260                                          * call the scanner after we return the
05261                                          * YY_NULL, it'll still work - another
05262                                          * YY_NULL will get returned.
05263                                          */
05264                                         (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
05265 
05266                                         yy_act = YY_STATE_EOF(YY_START);
05267                                         goto do_action;
05268                                         }
05269 
05270                                 else
05271                                         {
05272                                         if ( ! (yy_did_buffer_switch_on_eof) )
05273                                                 YY_NEW_FILE;
05274                                         }
05275                                 break;
05276                                 }
05277 
05278                         case EOB_ACT_CONTINUE_SCAN:
05279                                 (yy_c_buf_p) =
05280                                         (yytext_ptr) + yy_amount_of_matched_text;
05281 
05282                                 yy_current_state = yy_get_previous_state(  );
05283 
05284                                 yy_cp = (yy_c_buf_p);
05285                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
05286                                 goto yy_match;
05287 
05288                         case EOB_ACT_LAST_MATCH:
05289                                 (yy_c_buf_p) =
05290                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
05291 
05292                                 yy_current_state = yy_get_previous_state(  );
05293 
05294                                 yy_cp = (yy_c_buf_p);
05295                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
05296                                 goto yy_find_action;
05297                         }
05298                 break;
05299                 }
05300 
05301         default:
05302                 YY_FATAL_ERROR(
05303                         "fatal flex scanner internal error--no action found" );
05304         } /* end of action switch */
05305                 } /* end of scanning one token */
05306 } /* end of preYYlex */
05307 
05308 /* yy_get_next_buffer - try to read in a new buffer
05309  *
05310  * Returns a code representing an action:
05311  *      EOB_ACT_LAST_MATCH -
05312  *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
05313  *      EOB_ACT_END_OF_FILE - end of file
05314  */
05315 static int yy_get_next_buffer (void)
05316 {
05317         register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
05318         register char *source = (yytext_ptr);
05319         register int number_to_move, i;
05320         int ret_val;
05321 
05322         if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
05323                 YY_FATAL_ERROR(
05324                 "fatal flex scanner internal error--end of buffer missed" );
05325 
05326         if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
05327                 { /* Don't try to fill the buffer, so this is an EOF. */
05328                 if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
05329                         {
05330                         /* We matched a single character, the EOB, so
05331                          * treat this as a final EOF.
05332                          */
05333                         return EOB_ACT_END_OF_FILE;
05334                         }
05335 
05336                 else
05337                         {
05338                         /* We matched some text prior to the EOB, first
05339                          * process it.
05340                          */
05341                         return EOB_ACT_LAST_MATCH;
05342                         }
05343                 }
05344 
05345         /* Try to read more data. */
05346 
05347         /* First move last chars to start of buffer. */
05348         number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
05349 
05350         for ( i = 0; i < number_to_move; ++i )
05351                 *(dest++) = *(source++);
05352 
05353         if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
05354                 /* don't do the read, it's not guaranteed to return an EOF,
05355                  * just force an EOF
05356                  */
05357                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
05358 
05359         else
05360                 {
05361                         int num_to_read =
05362                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
05363 
05364                 while ( num_to_read <= 0 )
05365                         { /* Not enough room in the buffer - grow it. */
05366 
05367                         YY_FATAL_ERROR(
05368 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
05369 
05370                         }
05371 
05372                 if ( num_to_read > YY_READ_BUF_SIZE )
05373                         num_to_read = YY_READ_BUF_SIZE;
05374 
05375                 /* Read in more data. */
05376                 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
05377                         (yy_n_chars), num_to_read );
05378 
05379                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
05380                 }
05381 
05382         if ( (yy_n_chars) == 0 )
05383                 {
05384                 if ( number_to_move == YY_MORE_ADJ )
05385                         {
05386                         ret_val = EOB_ACT_END_OF_FILE;
05387                         preYYrestart(preYYin  );
05388                         }
05389 
05390                 else
05391                         {
05392                         ret_val = EOB_ACT_LAST_MATCH;
05393                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
05394                                 YY_BUFFER_EOF_PENDING;
05395                         }
05396                 }
05397 
05398         else
05399                 ret_val = EOB_ACT_CONTINUE_SCAN;
05400 
05401         (yy_n_chars) += number_to_move;
05402         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
05403         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
05404 
05405         (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
05406 
05407         return ret_val;
05408 }
05409 
05410 /* yy_get_previous_state - get the state just before the EOB char was reached */
05411 
05412     static yy_state_type yy_get_previous_state (void)
05413 {
05414         register yy_state_type yy_current_state;
05415         register char *yy_cp;
05416     
05417         yy_current_state = (yy_start);
05418         yy_current_state += YY_AT_BOL();
05419 
05420         (yy_state_ptr) = (yy_state_buf);
05421         *(yy_state_ptr)++ = yy_current_state;
05422 
05423         for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
05424                 {
05425                 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 54);
05426                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
05427                         {
05428                         yy_current_state = (int) yy_def[yy_current_state];
05429                         if ( yy_current_state >= 1056 )
05430                                 yy_c = yy_meta[(unsigned int) yy_c];
05431                         }
05432                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
05433                 *(yy_state_ptr)++ = yy_current_state;
05434                 }
05435 
05436         return yy_current_state;
05437 }
05438 
05439 /* yy_try_NUL_trans - try to make a transition on the NUL character
05440  *
05441  * synopsis
05442  *      next_state = yy_try_NUL_trans( current_state );
05443  */
05444     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
05445 {
05446         register int yy_is_jam;
05447     
05448         register YY_CHAR yy_c = 54;
05449         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
05450                 {
05451                 yy_current_state = (int) yy_def[yy_current_state];
05452                 if ( yy_current_state >= 1056 )
05453                         yy_c = yy_meta[(unsigned int) yy_c];
05454                 }
05455         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
05456         yy_is_jam = (yy_current_state == 1055);
05457         if ( ! yy_is_jam )
05458                 *(yy_state_ptr)++ = yy_current_state;
05459 
05460         return yy_is_jam ? 0 : yy_current_state;
05461 }
05462 
05463     static void yyunput (int c, register char * yy_bp )
05464 {
05465         register char *yy_cp;
05466     
05467     yy_cp = (yy_c_buf_p);
05468 
05469         /* undo effects of setting up preYYtext */
05470         *yy_cp = (yy_hold_char);
05471 
05472         if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
05473                 { /* need to shift things up to make room */
05474                 /* +2 for EOB chars. */
05475                 register int number_to_move = (yy_n_chars) + 2;
05476                 register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
05477                                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
05478                 register char *source =
05479                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
05480 
05481                 while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
05482                         *--dest = *--source;
05483 
05484                 yy_cp += (int) (dest - source);
05485                 yy_bp += (int) (dest - source);
05486                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
05487                         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
05488 
05489                 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
05490                         YY_FATAL_ERROR( "flex scanner push-back overflow" );
05491                 }
05492 
05493         *--yy_cp = (char) c;
05494 
05495         (yytext_ptr) = yy_bp;
05496         (yy_hold_char) = *yy_cp;
05497         (yy_c_buf_p) = yy_cp;
05498 }
05499 
05500 #ifndef YY_NO_INPUT
05501 #ifdef __cplusplus
05502     static int yyinput (void)
05503 #else
05504     static int input  (void)
05505 #endif
05506 
05507 {
05508         int c;
05509     
05510         *(yy_c_buf_p) = (yy_hold_char);
05511 
05512         if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
05513                 {
05514                 /* yy_c_buf_p now points to the character we want to return.
05515                  * If this occurs *before* the EOB characters, then it's a
05516                  * valid NUL; if not, then we've hit the end of the buffer.
05517                  */
05518                 if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
05519                         /* This was really a NUL. */
05520                         *(yy_c_buf_p) = '\0';
05521 
05522                 else
05523                         { /* need more input */
05524                         int offset = (yy_c_buf_p) - (yytext_ptr);
05525                         ++(yy_c_buf_p);
05526 
05527                         switch ( yy_get_next_buffer(  ) )
05528                                 {
05529                                 case EOB_ACT_LAST_MATCH:
05530                                         /* This happens because yy_g_n_b()
05531                                          * sees that we've accumulated a
05532                                          * token and flags that we need to
05533                                          * try matching the token before
05534                                          * proceeding.  But for input(),
05535                                          * there's no matching to consider.
05536                                          * So convert the EOB_ACT_LAST_MATCH
05537                                          * to EOB_ACT_END_OF_FILE.
05538                                          */
05539 
05540                                         /* Reset buffer status. */
05541                                         preYYrestart(preYYin );
05542 
05543                                         /*FALLTHROUGH*/
05544 
05545                                 case EOB_ACT_END_OF_FILE:
05546                                         {
05547                                         if ( preYYwrap( ) )
05548                                                 return 0;
05549 
05550                                         if ( ! (yy_did_buffer_switch_on_eof) )
05551                                                 YY_NEW_FILE;
05552 #ifdef __cplusplus
05553                                         return yyinput();
05554 #else
05555                                         return input();
05556 #endif
05557                                         }
05558 
05559                                 case EOB_ACT_CONTINUE_SCAN:
05560                                         (yy_c_buf_p) = (yytext_ptr) + offset;
05561                                         break;
05562                                 }
05563                         }
05564                 }
05565 
05566         c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
05567         *(yy_c_buf_p) = '\0';   /* preserve preYYtext */
05568         (yy_hold_char) = *++(yy_c_buf_p);
05569 
05570         YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
05571 
05572         return c;
05573 }
05574 #endif  /* ifndef YY_NO_INPUT */
05575 
05581     void preYYrestart  (FILE * input_file )
05582 {
05583     
05584         if ( ! YY_CURRENT_BUFFER ){
05585         preYYensure_buffer_stack ();
05586                 YY_CURRENT_BUFFER_LVALUE =
05587             preYY_create_buffer(preYYin,YY_BUF_SIZE );
05588         }
05589 
05590         preYY_init_buffer(YY_CURRENT_BUFFER,input_file );
05591         preYY_load_buffer_state( );
05592 }
05593 
05598     void preYY_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
05599 {
05600     
05601         /* TODO. We should be able to replace this entire function body
05602          * with
05603          *              preYYpop_buffer_state();
05604          *              preYYpush_buffer_state(new_buffer);
05605      */
05606         preYYensure_buffer_stack ();
05607         if ( YY_CURRENT_BUFFER == new_buffer )
05608                 return;
05609 
05610         if ( YY_CURRENT_BUFFER )
05611                 {
05612                 /* Flush out information for old buffer. */
05613                 *(yy_c_buf_p) = (yy_hold_char);
05614                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
05615                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
05616                 }
05617 
05618         YY_CURRENT_BUFFER_LVALUE = new_buffer;
05619         preYY_load_buffer_state( );
05620 
05621         /* We don't actually know whether we did this switch during
05622          * EOF (preYYwrap()) processing, but the only time this flag
05623          * is looked at is after preYYwrap() is called, so it's safe
05624          * to go ahead and always set it.
05625          */
05626         (yy_did_buffer_switch_on_eof) = 1;
05627 }
05628 
05629 static void preYY_load_buffer_state  (void)
05630 {
05631         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
05632         (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
05633         preYYin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
05634         (yy_hold_char) = *(yy_c_buf_p);
05635 }
05636 
05643     YY_BUFFER_STATE preYY_create_buffer  (FILE * file, int  size )
05644 {
05645         YY_BUFFER_STATE b;
05646     
05647         b = (YY_BUFFER_STATE) preYYalloc(sizeof( struct yy_buffer_state )  );
05648         if ( ! b )
05649                 YY_FATAL_ERROR( "out of dynamic memory in preYY_create_buffer()" );
05650 
05651         b->yy_buf_size = size;
05652 
05653         /* yy_ch_buf has to be 2 characters longer than the size given because
05654          * we need to put in 2 end-of-buffer characters.
05655          */
05656         b->yy_ch_buf = (char *) preYYalloc(b->yy_buf_size + 2  );
05657         if ( ! b->yy_ch_buf )
05658                 YY_FATAL_ERROR( "out of dynamic memory in preYY_create_buffer()" );
05659 
05660         b->yy_is_our_buffer = 1;
05661 
05662         preYY_init_buffer(b,file );
05663 
05664         return b;
05665 }
05666 
05671     void preYY_delete_buffer (YY_BUFFER_STATE  b )
05672 {
05673     
05674         if ( ! b )
05675                 return;
05676 
05677         if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
05678                 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
05679 
05680         if ( b->yy_is_our_buffer )
05681                 preYYfree((void *) b->yy_ch_buf  );
05682 
05683         preYYfree((void *) b  );
05684 }
05685 
05686 #ifndef __cplusplus
05687 extern int isatty (int );
05688 #endif /* __cplusplus */
05689     
05690 /* Initializes or reinitializes a buffer.
05691  * This function is sometimes called more than once on the same buffer,
05692  * such as during a preYYrestart() or at EOF.
05693  */
05694     static void preYY_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
05695 
05696 {
05697         int oerrno = errno;
05698     
05699         preYY_flush_buffer(b );
05700 
05701         b->yy_input_file = file;
05702         b->yy_fill_buffer = 1;
05703 
05704     /* If b is the current buffer, then preYY_init_buffer was _probably_
05705      * called from preYYrestart() or through yy_get_next_buffer.
05706      * In that case, we don't want to reset the lineno or column.
05707      */
05708     if (b != YY_CURRENT_BUFFER){
05709         b->yy_bs_lineno = 1;
05710         b->yy_bs_column = 0;
05711     }
05712 
05713         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
05714     
05715         errno = oerrno;
05716 }
05717 
05722     void preYY_flush_buffer (YY_BUFFER_STATE  b )
05723 {
05724         if ( ! b )
05725                 return;
05726 
05727         b->yy_n_chars = 0;
05728 
05729         /* We always need two end-of-buffer characters.  The first causes
05730          * a transition to the end-of-buffer state.  The second causes
05731          * a jam in that state.
05732          */
05733         b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
05734         b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
05735 
05736         b->yy_buf_pos = &b->yy_ch_buf[0];
05737 
05738         b->yy_at_bol = 1;
05739         b->yy_buffer_status = YY_BUFFER_NEW;
05740 
05741         if ( b == YY_CURRENT_BUFFER )
05742                 preYY_load_buffer_state( );
05743 }
05744 
05751 void preYYpush_buffer_state (YY_BUFFER_STATE new_buffer )
05752 {
05753         if (new_buffer == NULL)
05754                 return;
05755 
05756         preYYensure_buffer_stack();
05757 
05758         /* This block is copied from preYY_switch_to_buffer. */
05759         if ( YY_CURRENT_BUFFER )
05760                 {
05761                 /* Flush out information for old buffer. */
05762                 *(yy_c_buf_p) = (yy_hold_char);
05763                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
05764                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
05765                 }
05766 
05767         /* Only push if top exists. Otherwise, replace top. */
05768         if (YY_CURRENT_BUFFER)
05769                 (yy_buffer_stack_top)++;
05770         YY_CURRENT_BUFFER_LVALUE = new_buffer;
05771 
05772         /* copied from preYY_switch_to_buffer. */
05773         preYY_load_buffer_state( );
05774         (yy_did_buffer_switch_on_eof) = 1;
05775 }
05776 
05781 void preYYpop_buffer_state (void)
05782 {
05783         if (!YY_CURRENT_BUFFER)
05784                 return;
05785 
05786         preYY_delete_buffer(YY_CURRENT_BUFFER );
05787         YY_CURRENT_BUFFER_LVALUE = NULL;
05788         if ((yy_buffer_stack_top) > 0)
05789                 --(yy_buffer_stack_top);
05790 
05791         if (YY_CURRENT_BUFFER) {
05792                 preYY_load_buffer_state( );
05793                 (yy_did_buffer_switch_on_eof) = 1;
05794         }
05795 }
05796 
05797 /* Allocates the stack if it does not exist.
05798  *  Guarantees space for at least one push.
05799  */
05800 static void preYYensure_buffer_stack (void)
05801 {
05802         int num_to_alloc;
05803     
05804         if (!(yy_buffer_stack)) {
05805 
05806                 /* First allocation is just for 2 elements, since we don't know if this
05807                  * scanner will even need a stack. We use 2 instead of 1 to avoid an
05808                  * immediate realloc on the next call.
05809          */
05810                 num_to_alloc = 1;
05811                 (yy_buffer_stack) = (struct yy_buffer_state**)preYYalloc
05812                                                                 (num_to_alloc * sizeof(struct yy_buffer_state*)
05813                                                                 );
05814                 
05815                 memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
05816                                 
05817                 (yy_buffer_stack_max) = num_to_alloc;
05818                 (yy_buffer_stack_top) = 0;
05819                 return;
05820         }
05821 
05822         if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
05823 
05824                 /* Increase the buffer to prepare for a possible push. */
05825                 int grow_size = 8 /* arbitrary grow size */;
05826 
05827                 num_to_alloc = (yy_buffer_stack_max) + grow_size;
05828                 (yy_buffer_stack) = (struct yy_buffer_state**)preYYrealloc
05829                                                                 ((yy_buffer_stack),
05830                                                                 num_to_alloc * sizeof(struct yy_buffer_state*)
05831                                                                 );
05832 
05833                 /* zero only the new slots.*/
05834                 memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
05835                 (yy_buffer_stack_max) = num_to_alloc;
05836         }
05837 }
05838 
05845 YY_BUFFER_STATE preYY_scan_buffer  (char * base, yy_size_t  size )
05846 {
05847         YY_BUFFER_STATE b;
05848     
05849         if ( size < 2 ||
05850              base[size-2] != YY_END_OF_BUFFER_CHAR ||
05851              base[size-1] != YY_END_OF_BUFFER_CHAR )
05852                 /* They forgot to leave room for the EOB's. */
05853                 return 0;
05854 
05855         b = (YY_BUFFER_STATE) preYYalloc(sizeof( struct yy_buffer_state )  );
05856         if ( ! b )
05857                 YY_FATAL_ERROR( "out of dynamic memory in preYY_scan_buffer()" );
05858 
05859         b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
05860         b->yy_buf_pos = b->yy_ch_buf = base;
05861         b->yy_is_our_buffer = 0;
05862         b->yy_input_file = 0;
05863         b->yy_n_chars = b->yy_buf_size;
05864         b->yy_is_interactive = 0;
05865         b->yy_at_bol = 1;
05866         b->yy_fill_buffer = 0;
05867         b->yy_buffer_status = YY_BUFFER_NEW;
05868 
05869         preYY_switch_to_buffer(b  );
05870 
05871         return b;
05872 }
05873 
05882 YY_BUFFER_STATE preYY_scan_string (yyconst char * yystr )
05883 {
05884     
05885         return preYY_scan_bytes(yystr,strlen(yystr) );
05886 }
05887 
05895 YY_BUFFER_STATE preYY_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
05896 {
05897         YY_BUFFER_STATE b;
05898         char *buf;
05899         yy_size_t n;
05900         int i;
05901     
05902         /* Get memory for full buffer, including space for trailing EOB's. */
05903         n = _yybytes_len + 2;
05904         buf = (char *) preYYalloc(n  );
05905         if ( ! buf )
05906                 YY_FATAL_ERROR( "out of dynamic memory in preYY_scan_bytes()" );
05907 
05908         for ( i = 0; i < _yybytes_len; ++i )
05909                 buf[i] = yybytes[i];
05910 
05911         buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
05912 
05913         b = preYY_scan_buffer(buf,n );
05914         if ( ! b )
05915                 YY_FATAL_ERROR( "bad buffer in preYY_scan_bytes()" );
05916 
05917         /* It's okay to grow etc. this buffer, and we should throw it
05918          * away when we're done.
05919          */
05920         b->yy_is_our_buffer = 1;
05921 
05922         return b;
05923 }
05924 
05925 #ifndef YY_EXIT_FAILURE
05926 #define YY_EXIT_FAILURE 2
05927 #endif
05928 
05929 static void yy_fatal_error (yyconst char* msg )
05930 {
05931         (void) fprintf( stderr, "%s\n", msg );
05932         exit( YY_EXIT_FAILURE );
05933 }
05934 
05935 /* Redefine yyless() so it works in section 3 code. */
05936 
05937 #undef yyless
05938 #define yyless(n) \
05939         do \
05940                 { \
05941                 /* Undo effects of setting up preYYtext. */ \
05942         int yyless_macro_arg = (n); \
05943         YY_LESS_LINENO(yyless_macro_arg);\
05944                 preYYtext[preYYleng] = (yy_hold_char); \
05945                 (yy_c_buf_p) = preYYtext + yyless_macro_arg; \
05946                 (yy_hold_char) = *(yy_c_buf_p); \
05947                 *(yy_c_buf_p) = '\0'; \
05948                 preYYleng = yyless_macro_arg; \
05949                 } \
05950         while ( 0 )
05951 
05952 /* Accessor  methods (get/set functions) to struct members. */
05953 
05957 int preYYget_lineno  (void)
05958 {
05959         
05960     return preYYlineno;
05961 }
05962 
05966 FILE *preYYget_in  (void)
05967 {
05968         return preYYin;
05969 }
05970 
05974 FILE *preYYget_out  (void)
05975 {
05976         return preYYout;
05977 }
05978 
05982 int preYYget_leng  (void)
05983 {
05984         return preYYleng;
05985 }
05986 
05991 char *preYYget_text  (void)
05992 {
05993         return preYYtext;
05994 }
05995 
06000 void preYYset_lineno (int  line_number )
06001 {
06002     
06003     preYYlineno = line_number;
06004 }
06005 
06012 void preYYset_in (FILE *  in_str )
06013 {
06014         preYYin = in_str ;
06015 }
06016 
06017 void preYYset_out (FILE *  out_str )
06018 {
06019         preYYout = out_str ;
06020 }
06021 
06022 int preYYget_debug  (void)
06023 {
06024         return preYY_flex_debug;
06025 }
06026 
06027 void preYYset_debug (int  bdebug )
06028 {
06029         preYY_flex_debug = bdebug ;
06030 }
06031 
06032 static int yy_init_globals (void)
06033 {
06034         /* Initialization is the same as for the non-reentrant scanner.
06035      * This function is called from preYYlex_destroy(), so don't allocate here.
06036      */
06037 
06038     (yy_buffer_stack) = 0;
06039     (yy_buffer_stack_top) = 0;
06040     (yy_buffer_stack_max) = 0;
06041     (yy_c_buf_p) = (char *) 0;
06042     (yy_init) = 0;
06043     (yy_start) = 0;
06044 
06045     (yy_state_buf) = 0;
06046     (yy_state_ptr) = 0;
06047     (yy_full_match) = 0;
06048     (yy_lp) = 0;
06049 
06050 /* Defined in main.c */
06051 #ifdef YY_STDINIT
06052     preYYin = stdin;
06053     preYYout = stdout;
06054 #else
06055     preYYin = (FILE *) 0;
06056     preYYout = (FILE *) 0;
06057 #endif
06058 
06059     /* For future reference: Set errno on error, since we are called by
06060      * preYYlex_init()
06061      */
06062     return 0;
06063 }
06064 
06065 /* preYYlex_destroy is for both reentrant and non-reentrant scanners. */
06066 int preYYlex_destroy  (void)
06067 {
06068     
06069     /* Pop the buffer stack, destroying each element. */
06070         while(YY_CURRENT_BUFFER){
06071                 preYY_delete_buffer(YY_CURRENT_BUFFER  );
06072                 YY_CURRENT_BUFFER_LVALUE = NULL;
06073                 preYYpop_buffer_state();
06074         }
06075 
06076         /* Destroy the stack itself. */
06077         preYYfree((yy_buffer_stack) );
06078         (yy_buffer_stack) = NULL;
06079 
06080     preYYfree ( (yy_state_buf) );
06081     (yy_state_buf)  = NULL;
06082 
06083     /* Reset the globals. This is important in a non-reentrant scanner so the next time
06084      * preYYlex() is called, initialization will occur. */
06085     yy_init_globals( );
06086 
06087     return 0;
06088 }
06089 
06090 /*
06091  * Internal utility routines.
06092  */
06093 
06094 #ifndef yytext_ptr
06095 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
06096 {
06097         register int i;
06098         for ( i = 0; i < n; ++i )
06099                 s1[i] = s2[i];
06100 }
06101 #endif
06102 
06103 #ifdef YY_NEED_STRLEN
06104 static int yy_flex_strlen (yyconst char * s )
06105 {
06106         register int n;
06107         for ( n = 0; s[n]; ++n )
06108                 ;
06109 
06110         return n;
06111 }
06112 #endif
06113 
06114 void *preYYalloc (yy_size_t  size )
06115 {
06116         return (void *) malloc( size );
06117 }
06118 
06119 void *preYYrealloc  (void * ptr, yy_size_t  size )
06120 {
06121         /* The cast to (char *) in the following accommodates both
06122          * implementations that use char* generic pointers, and those
06123          * that use void* generic pointers.  It works with the latter
06124          * because both ANSI C and C++ allow castless assignment from
06125          * any pointer type to void*, and deal with argument conversions
06126          * as though doing an assignment.
06127          */
06128         return (void *) realloc( (char *) ptr, size );
06129 }
06130 
06131 void preYYfree (void * ptr )
06132 {
06133         free( (char *) ptr );   /* see preYYrealloc() for (char *) cast */
06134 }
06135 
06136 #define YYTABLES_NAME "yytables"
06137 
06138 #line 2196 "pre.l"
06139 
06140 
06141 
06142 /*@ ----------------------------------------------------------------------------
06143  */
06144 
06145 static int getNextChar(const QCString &expr,QCString *rest,uint &pos)
06146 {
06147   //printf("getNextChar(%s,%s,%d)\n",expr.data(),rest ? rest->data() : 0,pos);
06148   if (pos<expr.length())
06149   {
06150     //printf("%c=expr()\n",expr.at(pos));
06151     return expr.at(pos++);
06152   }
06153   else if (rest && !rest->isEmpty())
06154   {
06155     int cc=rest->at(0);
06156     *rest=rest->right(rest->length()-1);
06157     //printf("%c=rest\n",cc);
06158     return cc;
06159   }
06160   else
06161   {
06162     int cc=yyinput();
06163     //printf("%c=yyinput()\n",cc);
06164     return cc;
06165   }
06166 }
06167  
06168 static int getCurrentChar(const QCString &expr,QCString *rest,uint pos)
06169 {
06170   //printf("getCurrentChar(%s,%s,%d)\n",expr.data(),rest ? rest->data() : 0,pos);
06171   if (pos<expr.length())
06172   {
06173     //printf("%c=expr()\n",expr.at(pos));
06174     return expr.at(pos);
06175   }
06176   else if (rest && !rest->isEmpty())
06177   {
06178     int cc=rest->at(0);
06179     //printf("%c=rest\n",cc);
06180     return cc;
06181   }
06182   else
06183   {
06184     int cc=yyinput();
06185     returnCharToStream(cc);
06186     //unput((char)cc);
06187     //printf("%c=yyinput()\n",cc);
06188     return cc;
06189   }
06190 }
06191 
06192 static void unputChar(const QCString &expr,QCString *rest,uint &pos,char c)
06193 {
06194   //printf("unputChar(%s,%s,%d,%c)\n",expr.data(),rest ? rest->data() : 0,pos,c);
06195   if (pos<expr.length())
06196   {
06197     pos++;
06198   }
06199   else if (rest)
06200   {
06201     //printf("Prepending to rest!\n");
06202     char cs[2];cs[0]=c;cs[1]='\0';
06203     rest->prepend(cs);
06204   }
06205   else
06206   {
06207     //unput(c);
06208     returnCharToStream(c);
06209   }
06210   //printf("result: unputChar(%s,%s,%d,%c)\n",expr.data(),rest ? rest->data() : 0,pos,c);
06211 }
06212 
06213 void addSearchDir(const char *dir)
06214 {
06215   QFileInfo fi(dir);
06216   if (fi.isDir()) g_pathList->append(fi.absFilePath());
06217 } 
06218 
06219 void initPreprocessor()
06220 {
06221   g_pathList = new QStrList;
06222   addSearchDir(".");
06223   //defineNameList.setAutoDelete(TRUE);
06224   //defineNameList.clear();
06225   //defineDict.clear();
06226   //fileDefineCache = new DefineCache(1009);
06227   g_expandedDict = new DefineDict(17);
06228   g_fileDefineDict = new DefineDict(1009);
06229 }
06230 
06231 void cleanUpPreprocessor()
06232 {
06233   //delete fileDefineCache;
06234   delete g_fileDefineDict; g_fileDefineDict=0;
06235   delete g_expandedDict; g_expandedDict=0;
06236   delete g_pathList; g_pathList=0;
06237 }
06238 
06239 
06240 void preprocessFile(const char *fileName,BufStr &output)
06241 {
06242   uint orgOffset=output.curPos();
06243 
06244   g_macroExpansion = Config_getBool("MACRO_EXPANSION");
06245   g_expandOnlyPredef = Config_getBool("EXPAND_ONLY_PREDEF");
06246   g_curlyCount=0;
06247   g_nospaces=FALSE;
06248   g_outputBuf=&output;
06249   g_includeStack.setAutoDelete(TRUE);
06250   g_includeStack.clear();
06251   g_fileDefineDict->setAutoDelete(TRUE);
06252   g_fileDefineDict->clear();
06253   g_expandedDict->setAutoDelete(FALSE);
06254   g_expandedDict->clear();
06255   g_condStack.clear();
06256   g_condStack.setAutoDelete(TRUE);
06257   
06258   // add predefined macros
06259   char *defStr;
06260   QStrList &predefList = Config_getList("PREDEFINED");
06261   QStrListIterator sli(predefList);
06262   for (sli.toFirst();(defStr=sli.current());++sli)
06263   {
06264     QCString ds = defStr;
06265     int i_equals=ds.find('=');
06266     int i_obrace=ds.find('(');
06267     int i_cbrace=ds.find(')');
06268     bool nonRecursive = i_equals>0 && ds.at(i_equals-1)==':';
06269     
06270     if (i_obrace==0) continue; // no define name
06271     
06272     if (i_obrace<i_equals && i_cbrace<i_equals && 
06273         i_obrace!=-1      && i_cbrace!=-1      && 
06274         i_obrace<i_cbrace
06275        ) // predefined function macro definition
06276     {
06277       QRegExp reId("[a-z_A-Z][a-z_A-Z0-9]*"); // regexp matching an id
06278       QDict<int> argDict(17);
06279       argDict.setAutoDelete(TRUE);
06280       int i=i_obrace+1,p,l,count=0;
06281       // gather the formal arguments in a dictionary 
06282       while (i<i_cbrace && (p=reId.match(ds,i,&l)))
06283       {
06284         argDict.insert(ds.mid(p,l),new int(count++));
06285         i=p+l;
06286       }
06287       // strip definition part
06288       QCString tmp=ds.right(ds.length()-i_equals-1);
06289       QCString definition;
06290       i=0;
06291       // substitute all occurrences of formal arguments by their 
06292       // corresponding markers
06293       while ((p=reId.match(tmp,i,&l))!=-1)
06294       {
06295         if (p>i) definition+=tmp.mid(i,p-i);
06296         int *argIndex;
06297         if ((argIndex=argDict[tmp.mid(p,l)])!=0)
06298         {
06299           QCString marker;
06300           marker.sprintf(" @%d ",*argIndex);
06301           definition+=marker;
06302         }
06303         else
06304         {
06305           definition+=tmp.mid(p,l);
06306         }
06307         i=p+l;
06308       }
06309       if (i<(int)tmp.length()) definition+=tmp.mid(i,tmp.length()-i);
06310       
06311       // add define definition to the dictionary of defines for this file
06312       QCString dname = ds.left(i_obrace);
06313       if (!dname.isEmpty())
06314       {
06315         Define *def = new Define;
06316         def->name = dname;
06317         def->definition = definition; 
06318         def->nargs = count;
06319         def->isPredefined = TRUE;
06320         def->nonRecursive = nonRecursive;
06321         g_fileDefineDict->insert(def->name,def);
06322       }
06323 
06324       //printf("#define `%s' `%s' #nargs=%d\n",
06325       //  def->name.data(),def->definition.data(),def->nargs);
06326     }
06327     else if ((i_obrace==-1 || i_obrace>i_equals) &&
06328              (i_cbrace==-1 || i_cbrace>i_equals) &&
06329              !ds.isEmpty() && (int)ds.length()>i_equals
06330             ) // predefined non-function macro definition
06331     {
06332       Define *def = new Define;
06333       if (i_equals==-1) // simple define without argument
06334       {
06335         def->name = ds;
06336         def->definition = "1"; // substitute occurrences by 1 (true)
06337       }
06338       else // simple define with argument
06339       {
06340         int ine=i_equals - (nonRecursive ? 1 : 0);
06341         def->name = ds.left(ine);
06342         def->definition = ds.right(ds.length()-i_equals-1);
06343       }
06344       if (!def->name.isEmpty())
06345       {
06346         def->nargs = -1;
06347         def->isPredefined = TRUE;
06348         def->nonRecursive = nonRecursive;
06349         g_fileDefineDict->insert(def->name,def);
06350       }
06351       else
06352       {
06353         delete def;
06354       }
06355 
06356       //printf("#define `%s' `%s' #nargs=%d\n",
06357       //  def->name.data(),def->definition.data(),def->nargs);
06358     }
06359     
06360   }
06361  
06362   QCString inputFilter = getFileFilter(fileName);
06363   if (inputFilter.isEmpty())
06364   {
06365     preYYin = fopen(fileName,"r");
06366     if (!preYYin)
06367     {
06368       err("Error: could not open file %s\n",fileName);
06369       return;
06370     }
06371   }
06372   else
06373   {
06374     QCString cmd = inputFilter+" \""+fileName+"\"";
06375     Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",cmd.data());
06376     preYYin = portable_popen(cmd,"r");
06377     if (!preYYin)
06378     {
06379       err("Error: could not execute filter %s\n",cmd.data());
06380       return;
06381     }
06382   }
06383   g_yyLineNr = 1;
06384   g_level    = 0;
06385   g_ifcount  = 0;
06386   setFileName(fileName);
06387   g_inputFileDef = g_yyFileDef;
06388   BEGIN( Start );
06389   
06390   g_lastGuardName.resize(0);
06391   g_guardExpr.resize(0);
06392   
06393   preYYlex();
06394   g_lexInit=TRUE;
06395   if (inputFilter.isEmpty())
06396     fclose(preYYin);
06397   else
06398     portable_pclose(preYYin);
06399   
06400   if (Debug::isFlagSet(Debug::Preprocessor))
06401   {
06402     char *orgPos=output.data()+orgOffset;
06403     char *newPos=output.data()+output.curPos();
06404     msg("Preprocessor output (size: %d bytes):\n",newPos-orgPos);
06405     int line=1;
06406     msg("---------\n00001 ");
06407     while (orgPos<newPos) 
06408     {
06409       putchar(*orgPos);
06410       if (*orgPos=='\n') printf("%05d ",++line);
06411       orgPos++;
06412     }
06413     msg("\n---------\n");
06414   }
06415 }
06416 
06417 void preFreeScanner()
06418 {
06419 #if defined(YY_FLEX_SUBMINOR_VERSION) 
06420   if (g_lexInit)
06421   {
06422     preYYlex_destroy();
06423   }
06424 #endif
06425 }
06426 
06427 #if !defined(YY_FLEX_SUBMINOR_VERSION) 
06428 extern "C" { // some bogus code to keep the compiler happy
06429 //  int  preYYwrap() { return 1 ; }
06430   void preYYdummy() { yy_flex_realloc(0,0); } 
06431 }
06432 #endif
06433 
06434 



Generated on Mon Mar 31 10:58:42 2008 by  doxygen 1.5.1