Fri Aug 24 02:22:11 2007

Asterisk developer's documentation


ast_expr2f.c

Go to the documentation of this file.
00001 #line 2 "ast_expr2f.c"
00002 
00003 #line 4 "ast_expr2f.c"
00004 
00005 #define  YY_INT_ALIGNED short int
00006 
00007 /* A lexical scanner generated by flex */
00008 
00009 #define FLEX_SCANNER
00010 #define YY_FLEX_MAJOR_VERSION 2
00011 #define YY_FLEX_MINOR_VERSION 5
00012 #define YY_FLEX_SUBMINOR_VERSION 31
00013 #if YY_FLEX_SUBMINOR_VERSION > 0
00014 #define FLEX_BETA
00015 #endif
00016 
00017 /* First, we deal with  platform-specific or compiler-specific issues. */
00018 
00019 /* begin standard C headers. */
00020 #include <stdio.h>
00021 #include <string.h>
00022 #include <errno.h>
00023 #include <stdlib.h>
00024 
00025 /* end standard C headers. */
00026 
00027 /* flex integer type definitions */
00028 
00029 #ifndef FLEXINT_H
00030 #define FLEXINT_H
00031 
00032 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
00033 
00034 #if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
00035 #include <inttypes.h>
00036 typedef int8_t flex_int8_t;
00037 typedef uint8_t flex_uint8_t;
00038 typedef int16_t flex_int16_t;
00039 typedef uint16_t flex_uint16_t;
00040 typedef int32_t flex_int32_t;
00041 typedef uint32_t flex_uint32_t;
00042 #else
00043 typedef signed char flex_int8_t;
00044 typedef short int flex_int16_t;
00045 typedef int flex_int32_t;
00046 typedef unsigned char flex_uint8_t; 
00047 typedef unsigned short int flex_uint16_t;
00048 typedef unsigned int flex_uint32_t;
00049 #endif /* ! C99 */
00050 
00051 /* Limits of integral types. */
00052 #ifndef INT8_MIN
00053 #define INT8_MIN               (-128)
00054 #endif
00055 #ifndef INT16_MIN
00056 #define INT16_MIN              (-32767-1)
00057 #endif
00058 #ifndef INT32_MIN
00059 #define INT32_MIN              (-2147483647-1)
00060 #endif
00061 #ifndef INT8_MAX
00062 #define INT8_MAX               (127)
00063 #endif
00064 #ifndef INT16_MAX
00065 #define INT16_MAX              (32767)
00066 #endif
00067 #ifndef INT32_MAX
00068 #define INT32_MAX              (2147483647)
00069 #endif
00070 #ifndef UINT8_MAX
00071 #define UINT8_MAX              (255U)
00072 #endif
00073 #ifndef UINT16_MAX
00074 #define UINT16_MAX             (65535U)
00075 #endif
00076 #ifndef UINT32_MAX
00077 #define UINT32_MAX             (4294967295U)
00078 #endif
00079 
00080 #endif /* ! FLEXINT_H */
00081 
00082 #ifdef __cplusplus
00083 
00084 /* The "const" storage-class-modifier is valid. */
00085 #define YY_USE_CONST
00086 
00087 #else /* ! __cplusplus */
00088 
00089 #if __STDC__
00090 
00091 #define YY_USE_CONST
00092 
00093 #endif   /* __STDC__ */
00094 #endif   /* ! __cplusplus */
00095 
00096 #ifdef YY_USE_CONST
00097 #define yyconst const
00098 #else
00099 #define yyconst
00100 #endif
00101 
00102 /* Returned upon end-of-file. */
00103 #define YY_NULL 0
00104 
00105 /* Promotes a possibly negative, possibly signed char to an unsigned
00106  * integer for use as an array index.  If the signed char is negative,
00107  * we want to instead treat it as an 8-bit unsigned char, hence the
00108  * double cast.
00109  */
00110 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
00111 
00112 /* An opaque pointer. */
00113 #ifndef YY_TYPEDEF_YY_SCANNER_T
00114 #define YY_TYPEDEF_YY_SCANNER_T
00115 typedef void* yyscan_t;
00116 #endif
00117 
00118 /* For convenience, these vars (plus the bison vars far below)
00119    are macros in the reentrant scanner. */
00120 #define yyin yyg->yyin_r
00121 #define yyout yyg->yyout_r
00122 #define yyextra yyg->yyextra_r
00123 #define yyleng yyg->yyleng_r
00124 #define yytext yyg->yytext_r
00125 #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
00126 #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
00127 #define yy_flex_debug yyg->yy_flex_debug_r
00128 
00129 int ast_yylex_init (yyscan_t* scanner);
00130 
00131 /* Enter a start condition.  This macro really ought to take a parameter,
00132  * but we do it the disgusting crufty way forced on us by the ()-less
00133  * definition of BEGIN.
00134  */
00135 #define BEGIN yyg->yy_start = 1 + 2 *
00136 
00137 /* Translate the current start state into a value that can be later handed
00138  * to BEGIN to return to the state.  The YYSTATE alias is for lex
00139  * compatibility.
00140  */
00141 #define YY_START ((yyg->yy_start - 1) / 2)
00142 #define YYSTATE YY_START
00143 
00144 /* Action number for EOF rule of a given start state. */
00145 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
00146 
00147 /* Special action meaning "start processing a new file". */
00148 #define YY_NEW_FILE ast_yyrestart(yyin ,yyscanner )
00149 
00150 #define YY_END_OF_BUFFER_CHAR 0
00151 
00152 /* Size of default input buffer. */
00153 #ifndef YY_BUF_SIZE
00154 #define YY_BUF_SIZE 16384
00155 #endif
00156 
00157 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
00158 #define YY_TYPEDEF_YY_BUFFER_STATE
00159 typedef struct yy_buffer_state *YY_BUFFER_STATE;
00160 #endif
00161 
00162 #define EOB_ACT_CONTINUE_SCAN 0
00163 #define EOB_ACT_END_OF_FILE 1
00164 #define EOB_ACT_LAST_MATCH 2
00165 
00166     #define YY_LESS_LINENO(n)
00167     
00168 /* Return all but the first "n" matched characters back to the input stream. */
00169 #define yyless(n) \
00170    do \
00171       { \
00172       /* Undo effects of setting up yytext. */ \
00173         int yyless_macro_arg = (n); \
00174         YY_LESS_LINENO(yyless_macro_arg);\
00175       *yy_cp = yyg->yy_hold_char; \
00176       YY_RESTORE_YY_MORE_OFFSET \
00177       yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
00178       YY_DO_BEFORE_ACTION; /* set up yytext again */ \
00179       } \
00180    while ( 0 )
00181 
00182 #define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
00183 
00184 /* The following is because we cannot portably get our hands on size_t
00185  * (without autoconf's help, which isn't available because we want
00186  * flex-generated scanners to compile on their own).
00187  */
00188 
00189 #ifndef YY_TYPEDEF_YY_SIZE_T
00190 #define YY_TYPEDEF_YY_SIZE_T
00191 typedef unsigned int yy_size_t;
00192 #endif
00193 
00194 #ifndef YY_STRUCT_YY_BUFFER_STATE
00195 #define YY_STRUCT_YY_BUFFER_STATE
00196 struct yy_buffer_state
00197    {
00198    FILE *yy_input_file;
00199 
00200    char *yy_ch_buf;     /* input buffer */
00201    char *yy_buf_pos;    /* current position in input buffer */
00202 
00203    /* Size of input buffer in bytes, not including room for EOB
00204     * characters.
00205     */
00206    yy_size_t yy_buf_size;
00207 
00208    /* Number of characters read into yy_ch_buf, not including EOB
00209     * characters.
00210     */
00211    int yy_n_chars;
00212 
00213    /* Whether we "own" the buffer - i.e., we know we created it,
00214     * and can realloc() it to grow it, and should free() it to
00215     * delete it.
00216     */
00217    int yy_is_our_buffer;
00218 
00219    /* Whether this is an "interactive" input source; if so, and
00220     * if we're using stdio for input, then we want to use getc()
00221     * instead of fread(), to make sure we stop fetching input after
00222     * each newline.
00223     */
00224    int yy_is_interactive;
00225 
00226    /* Whether we're considered to be at the beginning of a line.
00227     * If so, '^' rules will be active on the next match, otherwise
00228     * not.
00229     */
00230    int yy_at_bol;
00231 
00232     int yy_bs_lineno; /**< The line count. */
00233     int yy_bs_column; /**< The column count. */
00234     
00235    /* Whether to try to fill the input buffer when we reach the
00236     * end of it.
00237     */
00238    int yy_fill_buffer;
00239 
00240    int yy_buffer_status;
00241 
00242 #define YY_BUFFER_NEW 0
00243 #define YY_BUFFER_NORMAL 1
00244    /* When an EOF's been seen but there's still some text to process
00245     * then we mark the buffer as YY_EOF_PENDING, to indicate that we
00246     * shouldn't try reading from the input source any more.  We might
00247     * still have a bunch of tokens to match, though, because of
00248     * possible backing-up.
00249     *
00250     * When we actually see the EOF, we change the status to "new"
00251     * (via ast_yyrestart()), so that the user can continue scanning by
00252     * just pointing yyin at a new input file.
00253     */
00254 #define YY_BUFFER_EOF_PENDING 2
00255 
00256    };
00257 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
00258 
00259 /* We provide macros for accessing buffer states in case in the
00260  * future we want to put the buffer states in a more general
00261  * "scanner state".
00262  *
00263  * Returns the top of the stack, or NULL.
00264  */
00265 #define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
00266                           ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
00267                           : NULL)
00268 
00269 /* Same as previous macro, but useful when we know that the buffer stack is not
00270  * NULL or when we need an lvalue. For internal use only.
00271  */
00272 #define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
00273 
00274 void ast_yyrestart (FILE *input_file ,yyscan_t yyscanner );
00275 void ast_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
00276 YY_BUFFER_STATE ast_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner );
00277 void ast_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
00278 void ast_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
00279 void ast_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
00280 void ast_yypop_buffer_state (yyscan_t yyscanner );
00281 
00282 static void ast_yyensure_buffer_stack (yyscan_t yyscanner );
00283 static void ast_yy_load_buffer_state (yyscan_t yyscanner );
00284 static void ast_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );
00285 
00286 #define YY_FLUSH_BUFFER ast_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
00287 
00288 YY_BUFFER_STATE ast_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
00289 YY_BUFFER_STATE ast_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
00290 YY_BUFFER_STATE ast_yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
00291 
00292 void *ast_yyalloc (yy_size_t ,yyscan_t yyscanner );
00293 void *ast_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
00294 void ast_yyfree (void * ,yyscan_t yyscanner );
00295 
00296 #define yy_new_buffer ast_yy_create_buffer
00297 
00298 #define yy_set_interactive(is_interactive) \
00299    { \
00300    if ( ! YY_CURRENT_BUFFER ){ \
00301         ast_yyensure_buffer_stack (yyscanner); \
00302       YY_CURRENT_BUFFER_LVALUE =    \
00303             ast_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
00304    } \
00305    YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
00306    }
00307 
00308 #define yy_set_bol(at_bol) \
00309    { \
00310    if ( ! YY_CURRENT_BUFFER ){\
00311         ast_yyensure_buffer_stack (yyscanner); \
00312       YY_CURRENT_BUFFER_LVALUE =    \
00313             ast_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
00314    } \
00315    YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
00316    }
00317 
00318 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
00319 
00320 /* Begin user sect3 */
00321 
00322 #define ast_yywrap(n) 1
00323 #define YY_SKIP_YYWRAP
00324 
00325 typedef char YY_CHAR;
00326 
00327 typedef int yy_state_type;
00328 
00329 #define yytext_ptr yytext_r
00330 static yyconst flex_int16_t yy_nxt[][128] =
00331     {
00332     {
00333         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
00334         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
00335         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
00336         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
00337         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
00338         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
00339         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
00340         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
00341         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
00342         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
00343 
00344         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
00345         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
00346         0,    0,    0,    0,    0,    0,    0,    0
00347     },
00348 
00349     {
00350         7,    8,    8,    8,    8,    8,    8,    8,    8,    9,
00351        10,    8,    8,    9,    8,    8,    8,    8,    8,    8,
00352         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
00353         8,    8,    9,   11,   12,   13,   14,   15,   16,   13,
00354        17,   18,   19,   20,   13,   21,   13,   22,   23,   23,
00355        23,   23,   23,   23,   23,   23,   23,   23,   24,   13,
00356        25,   26,   27,   28,   13,   13,   13,   13,   13,   13,
00357 
00358        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
00359        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
00360        13,    8,   13,    8,   13,   13,    8,   13,   13,   13,
00361        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
00362        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
00363        13,   13,   13,    8,   29,    8,    8,    8
00364     },
00365 
00366     {
00367         7,    8,    8,    8,    8,    8,    8,    8,    8,    9,
00368        10,    8,    8,    9,    8,    8,    8,    8,    8,    8,
00369         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
00370         8,    8,    9,   11,   12,   13,   14,   15,   16,   13,
00371 
00372        17,   18,   19,   20,   13,   21,   13,   22,   23,   23,
00373        23,   23,   23,   23,   23,   23,   23,   23,   24,   13,
00374        25,   26,   27,   28,   13,   13,   13,   13,   13,   13,
00375        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
00376        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
00377        13,    8,   13,    8,   13,   13,    8,   13,   13,   13,
00378        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
00379        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
00380        13,   13,   13,    8,   29,    8,    8,    8
00381     },
00382 
00383     {
00384         7,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00385 
00386        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00387        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00388        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00389        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00390        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00391        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00392        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00393        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00394        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00395        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00396 
00397        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00398        30,   30,   30,   31,   30,   32,   30,   30
00399     },
00400 
00401     {
00402         7,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00403        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00404        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00405        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00406        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00407        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00408        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00409        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00410 
00411        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00412        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00413        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00414        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
00415        30,   30,   30,   31,   30,   32,   30,   30
00416     },
00417 
00418     {
00419         7,   33,   33,   33,   33,   33,   33,   33,   33,   34,
00420        34,   33,   33,   34,   33,   33,   33,   33,   33,   33,
00421        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
00422        33,   33,   34,   34,   33,   33,   35,   34,   34,   33,
00423        34,   34,   34,   34,   33,   34,   33,   34,   33,   33,
00424 
00425        33,   33,   33,   33,   33,   33,   33,   33,   34,   33,
00426        34,   34,   34,   34,   33,   33,   33,   33,   33,   33,
00427        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
00428        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
00429        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
00430        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
00431        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
00432        33,   33,   33,   33,   34,   33,   33,   33
00433     },
00434 
00435     {
00436         7,   33,   33,   33,   33,   33,   33,   33,   33,   34,
00437        34,   33,   33,   34,   33,   33,   33,   33,   33,   33,
00438 
00439        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
00440        33,   33,   34,   34,   33,   33,   35,   34,   34,   33,
00441        34,   34,   34,   34,   33,   34,   33,   34,   33,   33,
00442        33,   33,   33,   33,   33,   33,   33,   33,   34,   33,
00443        34,   34,   34,   34,   33,   33,   33,   33,   33,   33,
00444        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
00445        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
00446        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
00447        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
00448        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
00449 
00450        33,   33,   33,   33,   34,   33,   33,   33
00451     },
00452 
00453     {
00454        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
00455        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
00456        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
00457        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
00458        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
00459        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
00460        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
00461        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
00462        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
00463 
00464        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
00465        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
00466        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
00467        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7
00468     },
00469 
00470     {
00471         7,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
00472        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
00473        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
00474        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
00475        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
00476        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
00477 
00478        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
00479        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
00480        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
00481        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
00482        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
00483        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
00484        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8
00485     },
00486 
00487     {
00488         7,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
00489        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
00490        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
00491 
00492        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
00493        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
00494        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
00495        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
00496        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
00497        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
00498        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
00499        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
00500        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
00501        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9
00502 
00503     },
00504 
00505     {
00506         7,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
00507       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
00508       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
00509       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
00510       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
00511       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
00512       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
00513       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
00514       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
00515       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
00516 
00517       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
00518       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
00519       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10
00520     },
00521 
00522     {
00523         7,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
00524       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
00525       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
00526       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
00527       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
00528       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
00529       -11,   36,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
00530 
00531       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
00532       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
00533       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
00534       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
00535       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
00536       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11
00537     },
00538 
00539     {
00540         7,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00541        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00542        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00543        37,   37,   37,   37,   38,   37,   37,   37,   37,   37,
00544 
00545        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00546        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00547        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00548        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00549        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00550        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00551        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00552        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00553        37,   37,   37,   37,   37,   37,   37,   37
00554     },
00555 
00556     {
00557         7,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,
00558 
00559       -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,
00560       -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,
00561       -13,  -13,  -13,  -13,  -13,   39,   39,  -13,  -13,   39,
00562       -13,  -13,  -13,  -13,   39,  -13,   39,  -13,   39,   39,
00563        39,   39,   39,   39,   39,   39,   39,   39,  -13,   39,
00564       -13,  -13,  -13,  -13,   39,   39,   39,   39,   39,   39,
00565        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
00566        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
00567        39,  -13,   39,  -13,   39,   39,  -13,   39,   39,   39,
00568        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
00569 
00570        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
00571        39,   39,   39,  -13,  -13,  -13,  -13,  -13
00572     },
00573 
00574     {
00575         7,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,
00576       -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,
00577       -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,
00578       -14,  -14,  -14,  -14,  -14,   39,   39,  -14,  -14,   39,
00579       -14,  -14,  -14,  -14,   39,  -14,   39,  -14,   39,   39,
00580        39,   39,   39,   39,   39,   39,   39,   39,  -14,   39,
00581       -14,  -14,  -14,  -14,   39,   39,   39,   39,   39,   39,
00582        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
00583 
00584        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
00585        39,  -14,   39,  -14,   39,   39,  -14,   39,   39,   39,
00586        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
00587        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
00588        39,   39,   39,   40,  -14,  -14,  -14,  -14
00589     },
00590 
00591     {
00592         7,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
00593       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
00594       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
00595       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
00596       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
00597 
00598       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
00599       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
00600       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
00601       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
00602       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
00603       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
00604       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
00605       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15
00606     },
00607 
00608     {
00609         7,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
00610       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
00611 
00612       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
00613       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,   41,  -16,
00614       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
00615       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
00616       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
00617       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
00618       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
00619       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
00620       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
00621       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
00622 
00623       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16
00624     },
00625 
00626     {
00627         7,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
00628       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
00629       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
00630       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
00631       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
00632       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
00633       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
00634       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
00635       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
00636 
00637       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
00638       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
00639       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
00640       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17
00641     },
00642 
00643     {
00644         7,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
00645       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
00646       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
00647       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
00648       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
00649       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
00650 
00651       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
00652       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
00653       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
00654       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
00655       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
00656       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
00657       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18
00658     },
00659 
00660     {
00661         7,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
00662       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
00663       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
00664 
00665       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
00666       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
00667       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
00668       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
00669       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
00670       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
00671       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
00672       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
00673       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
00674       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19
00675 
00676     },
00677 
00678     {
00679         7,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
00680       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
00681       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
00682       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
00683       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
00684       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
00685       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
00686       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
00687       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
00688       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
00689 
00690       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
00691       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
00692       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20
00693     },
00694 
00695     {
00696         7,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
00697       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
00698       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
00699       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
00700       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
00701       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
00702       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
00703 
00704       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
00705       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
00706       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
00707       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
00708       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
00709       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21
00710     },
00711 
00712     {
00713         7,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
00714       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
00715       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
00716       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
00717 
00718       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
00719       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
00720       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
00721       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
00722       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
00723       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
00724       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
00725       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
00726       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22
00727     },
00728 
00729     {
00730         7,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,
00731 
00732       -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,
00733       -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,
00734       -23,  -23,  -23,  -23,  -23,   39,   39,  -23,  -23,   39,
00735       -23,  -23,  -23,  -23,   39,  -23,   39,  -23,   42,   42,
00736        42,   42,   42,   42,   42,   42,   42,   42,  -23,   39,
00737       -23,  -23,  -23,  -23,   39,   39,   39,   39,   39,   39,
00738        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
00739        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
00740        39,  -23,   39,  -23,   39,   39,  -23,   39,   39,   39,
00741        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
00742 
00743        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
00744        39,   39,   39,  -23,  -23,  -23,  -23,  -23
00745     },
00746 
00747     {
00748         7,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
00749       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
00750       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
00751       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
00752       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
00753       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,   43,  -24,
00754       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
00755       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
00756 
00757       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
00758       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
00759       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
00760       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
00761       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24
00762     },
00763 
00764     {
00765         7,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
00766       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
00767       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
00768       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
00769       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
00770 
00771       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
00772       -25,   44,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
00773       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
00774       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
00775       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
00776       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
00777       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
00778       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25
00779     },
00780 
00781     {
00782         7,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
00783       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
00784 
00785       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
00786       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
00787       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
00788       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
00789       -26,   45,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
00790       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
00791       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
00792       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
00793       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
00794       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
00795 
00796       -26,  -26,  -26,  -26,  -26,  -26,   46,  -26
00797     },
00798 
00799     {
00800         7,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
00801       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
00802       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
00803       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
00804       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
00805       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
00806       -27,   47,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
00807       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
00808       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
00809 
00810       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
00811       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
00812       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
00813       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27
00814     },
00815 
00816     {
00817         7,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
00818       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
00819       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
00820       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
00821       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
00822       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
00823 
00824       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
00825       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
00826       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
00827       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
00828       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
00829       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
00830       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28
00831     },
00832 
00833     {
00834         7,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
00835       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
00836       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
00837 
00838       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
00839       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
00840       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
00841       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
00842       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
00843       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
00844       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
00845       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
00846       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
00847       -29,  -29,  -29,  -29,   48,  -29,  -29,  -29
00848 
00849     },
00850 
00851     {
00852         7,   49,   49,   49,   49,   49,   49,   49,   49,   49,
00853        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
00854        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
00855        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
00856        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
00857        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
00858        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
00859        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
00860        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
00861        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
00862 
00863        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
00864        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
00865        49,   49,   49,   50,   49,   51,   49,   49
00866     },
00867 
00868     {
00869         7,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
00870       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
00871       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
00872       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
00873       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
00874       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
00875       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
00876 
00877       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
00878       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
00879       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
00880       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
00881       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
00882       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31
00883     },
00884 
00885     {
00886         7,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
00887       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
00888       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
00889       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
00890 
00891       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
00892       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
00893       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
00894       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
00895       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
00896       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
00897       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
00898       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
00899       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32
00900     },
00901 
00902     {
00903         7,   52,   52,   52,   52,   52,   52,   52,   52,  -33,
00904 
00905       -33,   52,   52,  -33,   52,   52,   52,   52,   52,   52,
00906        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
00907        52,   52,  -33,  -33,   52,   52,  -33,  -33,  -33,   52,
00908       -33,  -33,  -33,  -33,   52,  -33,   52,  -33,   52,   52,
00909        52,   52,   52,   52,   52,   52,   52,   52,  -33,   52,
00910       -33,  -33,  -33,  -33,   52,   52,   52,   52,   52,   52,
00911        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
00912        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
00913        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
00914        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
00915 
00916        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
00917        52,   52,   52,   52,  -33,   52,   52,   52
00918     },
00919 
00920     {
00921         7,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
00922       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
00923       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
00924       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
00925       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
00926       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
00927       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
00928       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
00929 
00930       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
00931       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
00932       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
00933       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
00934       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34
00935     },
00936 
00937     {
00938         7,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
00939       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
00940       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
00941       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
00942       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
00943 
00944       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
00945       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
00946       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
00947       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
00948       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
00949       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
00950       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
00951       -35,  -35,  -35,   53,  -35,  -35,  -35,  -35
00952     },
00953 
00954     {
00955         7,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
00956       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
00957 
00958       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
00959       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
00960       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
00961       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
00962       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
00963       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
00964       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
00965       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
00966       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
00967       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
00968 
00969       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36
00970     },
00971 
00972     {
00973         7,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00974        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00975        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00976        37,   37,   37,   37,   38,   37,   37,   37,   37,   37,
00977        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00978        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00979        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00980        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00981        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00982 
00983        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00984        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00985        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00986        37,   37,   37,   37,   37,   37,   37,   37
00987     },
00988 
00989     {
00990         7,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
00991       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
00992       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
00993       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
00994       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
00995       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
00996 
00997       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
00998       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
00999       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
01000       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
01001       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
01002       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
01003       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38
01004     },
01005 
01006     {
01007         7,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
01008       -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
01009       -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
01010 
01011       -39,  -39,  -39,  -39,  -39,   39,   39,  -39,  -39,   39,
01012       -39,  -39,  -39,  -39,   39,  -39,   39,  -39,   39,   39,
01013        39,   39,   39,   39,   39,   39,   39,   39,  -39,   39,
01014       -39,  -39,  -39,  -39,   39,   39,   39,   39,   39,   39,
01015        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
01016        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
01017        39,  -39,   39,  -39,   39,   39,  -39,   39,   39,   39,
01018        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
01019        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
01020        39,   39,   39,  -39,  -39,  -39,  -39,  -39
01021 
01022     },
01023 
01024     {
01025         7,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
01026       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
01027       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
01028       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
01029       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
01030       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
01031       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
01032       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
01033       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
01034       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
01035 
01036       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
01037       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
01038       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40
01039     },
01040 
01041     {
01042         7,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
01043       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
01044       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
01045       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
01046       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
01047       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
01048       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
01049 
01050       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
01051       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
01052       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
01053       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
01054       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
01055       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41
01056     },
01057 
01058     {
01059         7,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
01060       -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
01061       -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
01062       -42,  -42,  -42,  -42,  -42,   39,   39,  -42,  -42,   39,
01063 
01064       -42,  -42,  -42,  -42,   39,  -42,   39,  -42,   42,   42,
01065        42,   42,   42,   42,   42,   42,   42,   42,  -42,   39,
01066       -42,  -42,  -42,  -42,   39,   39,   39,   39,   39,   39,
01067        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
01068        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
01069        39,  -42,   39,  -42,   39,   39,  -42,   39,   39,   39,
01070        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
01071        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
01072        39,   39,   39,  -42,  -42,  -42,  -42,  -42
01073     },
01074 
01075     {
01076         7,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
01077 
01078       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
01079       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
01080       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
01081       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
01082       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
01083       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
01084       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
01085       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
01086       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
01087       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
01088 
01089       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
01090       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43
01091     },
01092 
01093     {
01094         7,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
01095       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
01096       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
01097       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
01098       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
01099       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
01100       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
01101       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
01102 
01103       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
01104       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
01105       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
01106       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
01107       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44
01108     },
01109 
01110     {
01111         7,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
01112       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
01113       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
01114       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
01115       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
01116 
01117       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
01118       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
01119       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
01120       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
01121       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
01122       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
01123       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
01124       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45
01125     },
01126 
01127     {
01128         7,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
01129       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
01130 
01131       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
01132       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
01133       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
01134       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
01135       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
01136       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
01137       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
01138       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
01139       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
01140       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
01141 
01142       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46
01143     },
01144 
01145     {
01146         7,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
01147       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
01148       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
01149       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
01150       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
01151       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
01152       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
01153       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
01154       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
01155 
01156       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
01157       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
01158       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
01159       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47
01160     },
01161 
01162     {
01163         7,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
01164       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
01165       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
01166       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
01167       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
01168       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
01169 
01170       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
01171       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
01172       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
01173       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
01174       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
01175       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
01176       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48
01177     },
01178 
01179     {
01180         7,   49,   49,   49,   49,   49,   49,   49,   49,   49,
01181        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
01182        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
01183 
01184        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
01185        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
01186        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
01187        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
01188        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
01189        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
01190        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
01191        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
01192        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
01193        49,   49,   49,   50,   49,   51,   49,   49
01194 
01195     },
01196 
01197     {
01198         7,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
01199       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
01200       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
01201       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
01202       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
01203       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
01204       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
01205       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
01206       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
01207       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
01208 
01209       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
01210       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
01211       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50
01212     },
01213 
01214     {
01215         7,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
01216       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
01217       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
01218       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
01219       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
01220       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
01221       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
01222 
01223       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
01224       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
01225       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
01226       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
01227       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
01228       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51
01229     },
01230 
01231     {
01232         7,   52,   52,   52,   52,   52,   52,   52,   52,  -52,
01233       -52,   52,   52,  -52,   52,   52,   52,   52,   52,   52,
01234        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
01235        52,   52,  -52,  -52,   52,   52,  -52,  -52,  -52,   52,
01236 
01237       -52,  -52,  -52,  -52,   52,  -52,   52,  -52,   52,   52,
01238        52,   52,   52,   52,   52,   52,   52,   52,  -52,   52,
01239       -52,  -52,  -52,  -52,   52,   52,   52,   52,   52,   52,
01240        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
01241        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
01242        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
01243        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
01244        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
01245        52,   52,   52,   52,  -52,   52,   52,   52
01246     },
01247 
01248     {
01249         7,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
01250 
01251       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
01252       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
01253       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
01254       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
01255       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
01256       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
01257       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
01258       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
01259       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
01260       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
01261 
01262       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
01263       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53
01264     },
01265 
01266     } ;
01267 
01268 static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
01269 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  ,yyscan_t yyscanner);
01270 static int yy_get_next_buffer (yyscan_t yyscanner );
01271 static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
01272 
01273 /* Done after the current pattern has been matched and before the
01274  * corresponding action - sets up yytext.
01275  */
01276 #define YY_DO_BEFORE_ACTION \
01277    yyg->yytext_ptr = yy_bp; \
01278    yyg->yytext_ptr -= yyg->yy_more_len; \
01279    yyleng = (size_t) (yy_cp - yyg->yytext_ptr); \
01280    yyg->yy_hold_char = *yy_cp; \
01281    *yy_cp = '\0'; \
01282    yyg->yy_c_buf_p = yy_cp;
01283 
01284 #define YY_NUM_RULES 35
01285 #define YY_END_OF_BUFFER 36
01286 /* This struct is not used in this scanner,
01287    but its presence is necessary. */
01288 struct yy_trans_info
01289    {
01290    flex_int32_t yy_verify;
01291    flex_int32_t yy_nxt;
01292    };
01293 static yyconst flex_int16_t yy_accept[54] =
01294     {   0,
01295         0,    0,    0,    0,   32,   32,   36,   35,   25,   27,
01296        19,   35,   29,   29,   17,    2,   22,   23,   15,   13,
01297        14,   16,   28,   20,    9,    3,    8,   18,    1,   35,
01298        31,   30,   32,   33,   33,   12,    0,   26,   29,   24,
01299         5,   28,   21,   11,    6,    7,   10,    4,    0,   31,
01300        30,   32,   34
01301     } ;
01302 
01303 static yyconst yy_state_type yy_NUL_trans[54] =
01304     {   0,
01305         8,    8,   30,   30,   33,   33,    0,    0,    0,    0,
01306         0,   37,    0,    0,    0,    0,    0,    0,    0,    0,
01307         0,    0,    0,    0,    0,    0,    0,    0,    0,   49,
01308         0,    0,   52,    0,    0,    0,   37,    0,    0,    0,
01309         0,    0,    0,    0,    0,    0,    0,    0,   49,    0,
01310         0,   52,    0
01311     } ;
01312 
01313 /* The intent behind this definition is that it'll catch
01314  * any uses of REJECT which flex missed.
01315  */
01316 #define REJECT reject_used_but_not_detected
01317 #define yymore() (yyg->yy_more_flag = 1)
01318 #define YY_MORE_ADJ yyg->yy_more_len
01319 #define YY_RESTORE_YY_MORE_OFFSET
01320 #line 1 "ast_expr2.fl"
01321 #line 2 "ast_expr2.fl"
01322 /*
01323  * Asterisk -- An open source telephony toolkit.
01324  *
01325  * Copyright (C) 1999 - 2006, Digium, Inc.
01326  *
01327  * Mark Spencer <markster@digium.com>
01328  *
01329  * See http://www.asterisk.org for more information about
01330  * the Asterisk project. Please do not directly contact
01331  * any of the maintainers of this project for assistance;
01332  * the project provides a web site, mailing lists and IRC
01333  * channels for your use.
01334  *
01335  * This program is free software, distributed under the terms of
01336  * the GNU General Public License Version 2. See the LICENSE file
01337  * at the top of the source tree.
01338  */
01339 
01340 /*! \file
01341  *
01342  * \brief Dialplan Expression Lexical Scanner
01343  */
01344 
01345 #include "asterisk.h"
01346 
01347 #ifndef STANDALONE
01348 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
01349 #endif
01350 
01351 #include <sys/types.h>
01352 #include <stdio.h>
01353 #include <stdlib.h>
01354 #include <string.h>
01355 #include <locale.h>
01356 #include <ctype.h>
01357 #if !defined(SOLARIS) && !defined(__CYGWIN__)
01358 /* #include <err.h> */
01359 #else
01360 #define quad_t int64_t
01361 #endif
01362 #include <errno.h>
01363 #include <regex.h>
01364 #include <limits.h>
01365 
01366 #include "asterisk/ast_expr.h"
01367 #include "asterisk/logger.h"
01368 #include "asterisk/strings.h"
01369 
01370 enum valtype {
01371    AST_EXPR_integer, AST_EXPR_numeric_string, AST_EXPR_string
01372 } ;
01373 
01374 struct val {
01375    enum valtype type;
01376    union {
01377       char *s;
01378       quad_t i;
01379    } u;
01380 } ;
01381 
01382 #include "ast_expr2.h" /* the o/p of the bison on ast_expr2.y */
01383 
01384 #define SET_COLUMNS  do {     \
01385    yylloc_param->first_column = (int)(yyg->yytext_r - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf); \
01386    yylloc_param->last_column += yyleng - 1; \
01387    yylloc_param->first_line = yylloc_param->last_line = 1; \
01388    } while (0)
01389 
01390 #define SET_STRING   do {     \
01391    yylval_param->val = calloc(1, sizeof(struct val)); \
01392    yylval_param->val->type = AST_EXPR_string;      \
01393    yylval_param->val->u.s = strdup(yytext);     \
01394    } while (0)
01395 
01396 #define SET_NUMERIC_STRING do {  \
01397    yylval_param->val = calloc(1, sizeof(struct val)); \
01398    yylval_param->val->type = AST_EXPR_numeric_string; \
01399    yylval_param->val->u.s = strdup(yytext);  \
01400    } while (0)
01401 
01402 struct parse_io
01403 {
01404    char *string;
01405    struct val *val;
01406    yyscan_t scanner;
01407 };
01408  
01409 void ast_yyset_column(int column_no, yyscan_t yyscanner);
01410 int ast_yyget_column(yyscan_t yyscanner);
01411 static int curlycount = 0;
01412 static char *expr2_token_subst(char *mess);
01413 
01414 #line 1415 "ast_expr2f.c"
01415 
01416 #define INITIAL 0
01417 #define var 1
01418 #define trail 2
01419 
01420 #ifndef YY_NO_UNISTD_H
01421 /* Special case for "unistd.h", since it is non-ANSI. We include it way
01422  * down here because we want the user's section 1 to have been scanned first.
01423  * The user has a chance to override it with an option.
01424  */
01425 #include <unistd.h>
01426 #endif
01427 
01428 #ifndef YY_EXTRA_TYPE
01429 #define YY_EXTRA_TYPE void *
01430 #endif
01431 
01432 /* Holds the entire state of the reentrant scanner. */
01433 struct yyguts_t
01434     {
01435 
01436     /* User-defined. Not touched by flex. */
01437     YY_EXTRA_TYPE yyextra_r;
01438 
01439     /* The rest are the same as the globals declared in the non-reentrant scanner. */
01440     FILE *yyin_r, *yyout_r;
01441     size_t yy_buffer_stack_top; /**< index of top of stack. */
01442     size_t yy_buffer_stack_max; /**< capacity of stack. */
01443     YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
01444     char yy_hold_char;
01445     int yy_n_chars;
01446     int yyleng_r;
01447     char *yy_c_buf_p;
01448     int yy_init;
01449     int yy_start;
01450     int yy_did_buffer_switch_on_eof;
01451     int yy_start_stack_ptr;
01452     int yy_start_stack_depth;
01453     int *yy_start_stack;
01454     yy_state_type yy_last_accepting_state;
01455     char* yy_last_accepting_cpos;
01456 
01457     int yylineno_r;
01458     int yy_flex_debug_r;
01459 
01460     char *yytext_r;
01461     int yy_more_flag;
01462     int yy_more_len;
01463 
01464     YYSTYPE * yylval_r;
01465 
01466     YYLTYPE * yylloc_r;
01467 
01468     }; /* end struct yyguts_t */
01469 
01470 static int yy_init_globals (yyscan_t yyscanner );
01471 
01472     /* This must go here because YYSTYPE and YYLTYPE are included
01473      * from bison output in section 1.*/
01474     #    define yylval yyg->yylval_r
01475     
01476     #    define yylloc yyg->yylloc_r
01477     
01478 /* Accessor methods to globals.
01479    These are made visible to non-reentrant scanners for convenience. */
01480 
01481 int ast_yylex_destroy (yyscan_t yyscanner );
01482 
01483 int ast_yyget_debug (yyscan_t yyscanner );
01484 
01485 void ast_yyset_debug (int debug_flag ,yyscan_t yyscanner );
01486 
01487 YY_EXTRA_TYPE ast_yyget_extra (yyscan_t yyscanner );
01488 
01489 void ast_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
01490 
01491 FILE *ast_yyget_in (yyscan_t yyscanner );
01492 
01493 void ast_yyset_in  (FILE * in_str ,yyscan_t yyscanner );
01494 
01495 FILE *ast_yyget_out (yyscan_t yyscanner );
01496 
01497 void ast_yyset_out  (FILE * out_str ,yyscan_t yyscanner );
01498 
01499 int ast_yyget_leng (yyscan_t yyscanner );
01500 
01501 char *ast_yyget_text (yyscan_t yyscanner );
01502 
01503 int ast_yyget_lineno (yyscan_t yyscanner );
01504 
01505 void ast_yyset_lineno (int line_number ,yyscan_t yyscanner );
01506 
01507 YYSTYPE * ast_yyget_lval (yyscan_t yyscanner );
01508 
01509 void ast_yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
01510 
01511        YYLTYPE *ast_yyget_lloc (yyscan_t yyscanner );
01512     
01513         void ast_yyset_lloc (YYLTYPE * yylloc_param ,yyscan_t yyscanner );
01514     
01515 /* Macros after this point can all be overridden by user definitions in
01516  * section 1.
01517  */
01518 
01519 #ifndef YY_SKIP_YYWRAP
01520 #ifdef __cplusplus
01521 extern "C" int ast_yywrap (yyscan_t yyscanner );
01522 #else
01523 extern int ast_yywrap (yyscan_t yyscanner );
01524 #endif
01525 #endif
01526 
01527     static void yyunput (int c,char *buf_ptr  ,yyscan_t yyscanner);
01528     
01529 #ifndef yytext_ptr
01530 static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
01531 #endif
01532 
01533 #ifdef YY_NEED_STRLEN
01534 static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
01535 #endif
01536 
01537 #ifndef YY_NO_INPUT
01538 
01539 #ifdef __cplusplus
01540 static int yyinput (yyscan_t yyscanner );
01541 #else
01542 static int input (yyscan_t yyscanner );
01543 #endif
01544 
01545 #endif
01546 
01547 /* Amount of stuff to slurp up with each read. */
01548 #ifndef YY_READ_BUF_SIZE
01549 #define YY_READ_BUF_SIZE 8192
01550 #endif
01551 
01552 /* Copy whatever the last rule matched to the standard output. */
01553 #ifndef ECHO
01554 /* This used to be an fputs(), but since the string might contain NUL's,
01555  * we now use fwrite().
01556  */
01557 #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
01558 #endif
01559 
01560 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
01561  * is returned in "result".
01562  */
01563 #ifndef YY_INPUT
01564 #define YY_INPUT(buf,result,max_size) \
01565    errno=0; \
01566    while ( (result = read( fileno(yyin), (char *) buf, max_size )) < 0 ) \
01567    { \
01568       if( errno != EINTR) \
01569       { \
01570          YY_FATAL_ERROR( "input in flex scanner failed" ); \
01571          break; \
01572       } \
01573       errno=0; \
01574       clearerr(yyin); \
01575    }\
01576 \
01577 
01578 #endif
01579 
01580 /* No semi-colon after return; correct usage is to write "yyterminate();" -
01581  * we don't want an extra ';' after the "return" because that will cause
01582  * some compilers to complain about unreachable statements.
01583  */
01584 #ifndef yyterminate
01585 #define yyterminate() return YY_NULL
01586 #endif
01587 
01588 /* Number of entries by which start-condition stack grows. */
01589 #ifndef YY_START_STACK_INCR
01590 #define YY_START_STACK_INCR 25
01591 #endif
01592 
01593 /* Report a fatal error. */
01594 #ifndef YY_FATAL_ERROR
01595 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
01596 #endif
01597 
01598 /* end tables serialization structures and prototypes */
01599 
01600 /* Default declaration of generated scanner - a define so the user can
01601  * easily add parameters.
01602  */
01603 #ifndef YY_DECL
01604 #define YY_DECL_IS_OURS 1
01605 
01606 extern int ast_yylex \
01607                (YYSTYPE * yylval_param,YYLTYPE * yylloc_param ,yyscan_t yyscanner);
01608 
01609 #define YY_DECL int ast_yylex \
01610                (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner)
01611 #endif /* !YY_DECL */
01612 
01613 /* Code executed at the beginning of each rule, after yytext and yyleng
01614  * have been set up.
01615  */
01616 #ifndef YY_USER_ACTION
01617 #define YY_USER_ACTION
01618 #endif
01619 
01620 /* Code executed at the end of each rule. */
01621 #ifndef YY_BREAK
01622 #define YY_BREAK break;
01623 #endif
01624 
01625 #define YY_RULE_SETUP \
01626    YY_USER_ACTION
01627 
01628 /*!
01629  * \brief The main scanner function which does all the work.
01630  */
01631 YY_DECL
01632 {
01633    register yy_state_type yy_current_state;
01634    register char *yy_cp, *yy_bp;
01635    register int yy_act;
01636     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
01637 
01638 #line 104 "ast_expr2.fl"
01639 
01640 
01641 #line 1641 "ast_expr2f.c"
01642 
01643     yylval = yylval_param;
01644 
01645     yylloc = yylloc_param;
01646 
01647    if ( yyg->yy_init )
01648       {
01649       yyg->yy_init = 0;
01650 
01651 #ifdef YY_USER_INIT
01652       YY_USER_INIT;
01653 #endif
01654 
01655       if ( ! yyg->yy_start )
01656          yyg->yy_start = 1;   /* first start state */
01657 
01658       if ( ! yyin )
01659          yyin = stdin;
01660 
01661       if ( ! yyout )
01662          yyout = stdout;
01663 
01664       if ( ! YY_CURRENT_BUFFER ) {
01665          ast_yyensure_buffer_stack (yyscanner);
01666          YY_CURRENT_BUFFER_LVALUE =
01667             ast_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
01668       }
01669 
01670       ast_yy_load_buffer_state(yyscanner );
01671       }
01672 
01673    while ( 1 )    /* loops until end-of-file is reached */
01674       {
01675       yyg->yy_more_len = 0;
01676       if ( yyg->yy_more_flag )
01677          {
01678          yyg->yy_more_len = yyg->yy_c_buf_p - yyg->yytext_ptr;
01679          yyg->yy_more_flag = 0;
01680          }
01681       yy_cp = yyg->yy_c_buf_p;
01682 
01683       /* Support of yytext. */
01684       *yy_cp = yyg->yy_hold_char;
01685 
01686       /* yy_bp points to the position in yy_ch_buf of the start of
01687        * the current run.
01688        */
01689       yy_bp = yy_cp;
01690 
01691       yy_current_state = yyg->yy_start;
01692 yy_match:
01693       while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 )
01694          {
01695          if ( yy_accept[yy_current_state] )
01696             {
01697             yyg->yy_last_accepting_state = yy_current_state;
01698             yyg->yy_last_accepting_cpos = yy_cp;
01699             }
01700 
01701          ++yy_cp;
01702          }
01703 
01704       yy_current_state = -yy_current_state;
01705 
01706 yy_find_action:
01707       yy_act = yy_accept[yy_current_state];
01708 
01709       YY_DO_BEFORE_ACTION;
01710 
01711 do_action:  /* This label is used only to access EOF actions. */
01712 
01713       switch ( yy_act )
01714    { /* beginning of action switch */
01715          case 0: /* must back up */
01716          /* undo the effects of YY_DO_BEFORE_ACTION */
01717          *yy_cp = yyg->yy_hold_char;
01718          yy_cp = yyg->yy_last_accepting_cpos + 1;
01719          yy_current_state = yyg->yy_last_accepting_state;
01720          goto yy_find_action;
01721 
01722 case 1:
01723 YY_RULE_SETUP
01724 #line 106 "ast_expr2.fl"
01725 { SET_COLUMNS; SET_STRING; return TOK_OR;}
01726    YY_BREAK
01727 case 2:
01728 YY_RULE_SETUP
01729 #line 107 "ast_expr2.fl"
01730 { SET_COLUMNS; SET_STRING; return TOK_AND;}
01731    YY_BREAK
01732 case 3:
01733 YY_RULE_SETUP
01734 #line 108 "ast_expr2.fl"
01735 { SET_COLUMNS; SET_STRING; return TOK_EQ;}
01736    YY_BREAK
01737 case 4:
01738 YY_RULE_SETUP
01739 #line 109 "ast_expr2.fl"
01740 { SET_COLUMNS; SET_STRING; return TOK_OR;}
01741    YY_BREAK
01742 case 5:
01743 YY_RULE_SETUP
01744 #line 110 "ast_expr2.fl"
01745 { SET_COLUMNS; SET_STRING; return TOK_AND;}
01746    YY_BREAK
01747 case 6:
01748 YY_RULE_SETUP
01749 #line 111 "ast_expr2.fl"
01750 { SET_COLUMNS; SET_STRING; return TOK_EQ;}
01751    YY_BREAK
01752 case 7:
01753 YY_RULE_SETUP
01754 #line 112 "ast_expr2.fl"
01755 { SET_COLUMNS; SET_STRING; return TOK_EQTILDE;}
01756    YY_BREAK
01757 case 8:
01758 YY_RULE_SETUP
01759 #line 113 "ast_expr2.fl"
01760 { SET_COLUMNS; SET_STRING; return TOK_GT;}
01761    YY_BREAK
01762 case 9:
01763 YY_RULE_SETUP
01764 #line 114 "ast_expr2.fl"
01765 { SET_COLUMNS; SET_STRING; return TOK_LT;}
01766    YY_BREAK
01767 case 10:
01768 YY_RULE_SETUP
01769 #line 115 "ast_expr2.fl"
01770 { SET_COLUMNS; SET_STRING; return TOK_GE;}
01771    YY_BREAK
01772 case 11:
01773 YY_RULE_SETUP
01774 #line 116 "ast_expr2.fl"
01775 { SET_COLUMNS; SET_STRING; return TOK_LE;}
01776    YY_BREAK
01777 case 12:
01778 YY_RULE_SETUP
01779 #line 117 "ast_expr2.fl"
01780 { SET_COLUMNS; SET_STRING; return TOK_NE;}
01781    YY_BREAK
01782 case 13:
01783 YY_RULE_SETUP
01784 #line 118 "ast_expr2.fl"
01785 { SET_COLUMNS; SET_STRING; return TOK_PLUS;}
01786    YY_BREAK
01787 case 14:
01788 YY_RULE_SETUP
01789 #line 119 "ast_expr2.fl"
01790 { SET_COLUMNS; SET_STRING; return TOK_MINUS;}
01791    YY_BREAK
01792 case 15:
01793 YY_RULE_SETUP
01794 #line 120 "ast_expr2.fl"
01795 { SET_COLUMNS; SET_STRING; return TOK_MULT;}
01796    YY_BREAK
01797 case 16:
01798 YY_RULE_SETUP
01799 #line 121 "ast_expr2.fl"
01800 { SET_COLUMNS; SET_STRING; return TOK_DIV;}
01801    YY_BREAK
01802 case 17:
01803 YY_RULE_SETUP
01804 #line 122 "ast_expr2.fl"
01805 { SET_COLUMNS; SET_STRING; return TOK_MOD;}
01806    YY_BREAK
01807 case 18:
01808 YY_RULE_SETUP
01809 #line 123 "ast_expr2.fl"
01810 { SET_COLUMNS; SET_STRING; return TOK_COND;}
01811    YY_BREAK
01812 case 19:
01813 YY_RULE_SETUP
01814 #line 124 "ast_expr2.fl"
01815 { SET_COLUMNS; SET_STRING; return TOK_COMPL;}
01816    YY_BREAK
01817 case 20:
01818 YY_RULE_SETUP
01819 #line 125 "ast_expr2.fl"
01820 { SET_COLUMNS; SET_STRING; return TOK_COLON;}
01821    YY_BREAK
01822 case 21:
01823 YY_RULE_SETUP
01824 #line 126 "ast_expr2.fl"
01825 { SET_COLUMNS; SET_STRING; return TOK_COLONCOLON;}
01826    YY_BREAK
01827 case 22:
01828 YY_RULE_SETUP
01829 #line 127 "ast_expr2.fl"
01830 { SET_COLUMNS; SET_STRING; return TOK_LP;}
01831    YY_BREAK
01832 case 23:
01833 YY_RULE_SETUP
01834 #line 128 "ast_expr2.fl"
01835 { SET_COLUMNS; SET_STRING; return TOK_RP;}
01836    YY_BREAK
01837 case 24:
01838 YY_RULE_SETUP
01839 #line 129 "ast_expr2.fl"
01840 {
01841       /* gather the contents of ${} expressions, with trailing stuff,
01842        * into a single TOKEN.
01843        * They are much more complex now than they used to be
01844        */
01845       curlycount = 0;
01846       BEGIN(var);
01847       yymore();
01848    }
01849    YY_BREAK
01850 case 25:
01851 YY_RULE_SETUP
01852 #line 139 "ast_expr2.fl"
01853 {}
01854    YY_BREAK
01855 case 26:
01856 /* rule 26 can match eol */
01857 YY_RULE_SETUP
01858 #line 140 "ast_expr2.fl"
01859 {SET_COLUMNS; SET_STRING; return TOKEN;}
01860    YY_BREAK
01861 case 27:
01862 /* rule 27 can match eol */
01863 YY_RULE_SETUP
01864 #line 142 "ast_expr2.fl"
01865 {/* what to do with eol */}
01866    YY_BREAK
01867 case 28:
01868 YY_RULE_SETUP
01869 #line 143 "ast_expr2.fl"
01870 {
01871       SET_COLUMNS;
01872       /* the original behavior of the expression parser was
01873        * to bring in numbers as a numeric string
01874        */
01875       SET_NUMERIC_STRING;
01876       return TOKEN;
01877    }
01878    YY_BREAK
01879 case 29:
01880 YY_RULE_SETUP
01881 #line 152 "ast_expr2.fl"
01882 {
01883       SET_COLUMNS;
01884       SET_STRING;
01885       return TOKEN;
01886    }
01887    YY_BREAK
01888 case 30:
01889 /* rule 30 can match eol */
01890 YY_RULE_SETUP
01891 #line 159 "ast_expr2.fl"
01892 {
01893       curlycount--;
01894       if (curlycount < 0) {
01895          BEGIN(trail);
01896          yymore();
01897       } else {
01898          yymore();
01899       }
01900    }
01901    YY_BREAK
01902 case 31:
01903 /* rule 31 can match eol */
01904 YY_RULE_SETUP
01905 #line 169 "ast_expr2.fl"
01906 {
01907       curlycount++;
01908       yymore();
01909    }
01910    YY_BREAK
01911 case 32:
01912 YY_RULE_SETUP
01913 #line 175 "ast_expr2.fl"
01914 {
01915       BEGIN(0);
01916       SET_COLUMNS;
01917       SET_STRING;
01918       return TOKEN;
01919    }
01920    YY_BREAK
01921 case 33:
01922 /* rule 33 can match eol */
01923 YY_RULE_SETUP
01924 #line 182 "ast_expr2.fl"
01925 {
01926       char c = yytext[yyleng-1];
01927       BEGIN(0);
01928       unput(c);
01929       SET_COLUMNS;
01930       SET_STRING;
01931       return TOKEN;
01932    }
01933    YY_BREAK
01934 case 34:
01935 YY_RULE_SETUP
01936 #line 191 "ast_expr2.fl"
01937 {
01938       curlycount = 0;
01939       BEGIN(var);
01940       yymore();
01941    }
01942    YY_BREAK
01943 case YY_STATE_EOF(trail):
01944 #line 197 "ast_expr2.fl"
01945 {
01946       BEGIN(0);
01947       SET_COLUMNS;
01948       SET_STRING;
01949       return TOKEN;
01950       /*actually, if an expr is only a variable ref, this could happen a LOT */
01951    }
01952    YY_BREAK
01953 case 35:
01954 YY_RULE_SETUP
01955 #line 205 "ast_expr2.fl"
01956 ECHO;
01957    YY_BREAK
01958 #line 1958 "ast_expr2f.c"
01959 case YY_STATE_EOF(INITIAL):
01960 case YY_STATE_EOF(var):
01961    yyterminate();
01962 
01963    case YY_END_OF_BUFFER:
01964       {
01965       /* Amount of text matched not including the EOB char. */
01966       int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;
01967 
01968       /* Undo the effects of YY_DO_BEFORE_ACTION. */
01969       *yy_cp = yyg->yy_hold_char;
01970       YY_RESTORE_YY_MORE_OFFSET
01971 
01972       if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
01973          {
01974          /* We're scanning a new file or input source.  It's
01975           * possible that this happened because the user
01976           * just pointed yyin at a new source and called
01977           * ast_yylex().  If so, then we have to assure
01978           * consistency between YY_CURRENT_BUFFER and our
01979           * globals.  Here is the right place to do so, because
01980           * this is the first action (other than possibly a
01981           * back-up) that will match for the new input source.
01982           */
01983          yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
01984          YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
01985          YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
01986          }
01987 
01988       /* Note that here we test for yy_c_buf_p "<=" to the position
01989        * of the first EOB in the buffer, since yy_c_buf_p will
01990        * already have been incremented past the NUL character
01991        * (since all states make transitions on EOB to the
01992        * end-of-buffer state).  Contrast this with the test
01993        * in input().
01994        */
01995       if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
01996          { /* This was really a NUL. */
01997          yy_state_type yy_next_state;
01998 
01999          yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
02000 
02001          yy_current_state = yy_get_previous_state( yyscanner );
02002 
02003          /* Okay, we're now positioned to make the NUL
02004           * transition.  We couldn't have
02005           * yy_get_previous_state() go ahead and do it
02006           * for us because it doesn't know how to deal
02007           * with the possibility of jamming (and we don't
02008           * want to build jamming into it because then it
02009           * will run more slowly).
02010           */
02011 
02012          yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);
02013 
02014          yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
02015 
02016          if ( yy_next_state )
02017             {
02018             /* Consume the NUL. */
02019             yy_cp = ++yyg->yy_c_buf_p;
02020             yy_current_state = yy_next_state;
02021             goto yy_match;
02022             }
02023 
02024          else
02025             {
02026             yy_cp = yyg->yy_c_buf_p;
02027             goto yy_find_action;
02028             }
02029          }
02030 
02031       else switch ( yy_get_next_buffer( yyscanner ) )
02032          {
02033          case EOB_ACT_END_OF_FILE:
02034             {
02035             yyg->yy_did_buffer_switch_on_eof = 0;
02036 
02037             if ( ast_yywrap(yyscanner ) )
02038                {
02039                /* Note: because we've taken care in
02040                 * yy_get_next_buffer() to have set up
02041                 * yytext, we can now set up
02042                 * yy_c_buf_p so that if some total
02043                 * hoser (like flex itself) wants to
02044                 * call the scanner after we return the
02045                 * YY_NULL, it'll still work - another
02046                 * YY_NULL will get returned.
02047                 */
02048                yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;
02049 
02050                yy_act = YY_STATE_EOF(YY_START);
02051                goto do_action;
02052                }
02053 
02054             else
02055                {
02056                if ( ! yyg->yy_did_buffer_switch_on_eof )
02057                   YY_NEW_FILE;
02058                }
02059             break;
02060             }
02061 
02062          case EOB_ACT_CONTINUE_SCAN:
02063             yyg->yy_c_buf_p =
02064                yyg->yytext_ptr + yy_amount_of_matched_text;
02065 
02066             yy_current_state = yy_get_previous_state( yyscanner );
02067 
02068             yy_cp = yyg->yy_c_buf_p;
02069             yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
02070             goto yy_match;
02071 
02072          case EOB_ACT_LAST_MATCH:
02073             yyg->yy_c_buf_p =
02074             &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];
02075 
02076             yy_current_state = yy_get_previous_state( yyscanner );
02077 
02078             yy_cp = yyg->yy_c_buf_p;
02079             yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
02080             goto yy_find_action;
02081          }
02082       break;
02083       }
02084 
02085    default:
02086       YY_FATAL_ERROR(
02087          "fatal flex scanner internal error--no action found" );
02088    } /* end of action switch */
02089       } /* end of scanning one token */
02090 } /* end of ast_yylex */
02091 
02092 /* yy_get_next_buffer - try to read in a new buffer
02093  *
02094  * Returns a code representing an action:
02095  * EOB_ACT_LAST_MATCH -
02096  * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
02097  * EOB_ACT_END_OF_FILE - end of file
02098  */
02099 static int yy_get_next_buffer (yyscan_t yyscanner)
02100 {
02101     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02102    register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
02103    register char *source = yyg->yytext_ptr;
02104    register int number_to_move, i;
02105    int ret_val;
02106 
02107    if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
02108       YY_FATAL_ERROR(
02109       "fatal flex scanner internal error--end of buffer missed" );
02110 
02111    if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
02112       { /* Don't try to fill the buffer, so this is an EOF. */
02113       if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
02114          {
02115          /* We matched a single character, the EOB, so
02116           * treat this as a final EOF.
02117           */
02118          return EOB_ACT_END_OF_FILE;
02119          }
02120 
02121       else
02122          {
02123          /* We matched some text prior to the EOB, first
02124           * process it.
02125           */
02126          return EOB_ACT_LAST_MATCH;
02127          }
02128       }
02129 
02130    /* Try to read more data. */
02131 
02132    /* First move last chars to start of buffer. */
02133    number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
02134 
02135    for ( i = 0; i < number_to_move; ++i )
02136       *(dest++) = *(source++);
02137 
02138    if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
02139       /* don't do the read, it's not guaranteed to return an EOF,
02140        * just force an EOF
02141        */
02142       YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;
02143 
02144    else
02145       {
02146          int num_to_read =
02147          YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
02148 
02149       while ( num_to_read <= 0 )
02150          { /* Not enough room in the buffer - grow it. */
02151 
02152          /* just a shorter name for the current buffer */
02153          YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
02154 
02155          int yy_c_buf_p_offset =
02156             (int) (yyg->yy_c_buf_p - b->yy_ch_buf);
02157 
02158          if ( b->yy_is_our_buffer )
02159             {
02160             int new_size = b->yy_buf_size * 2;
02161 
02162             if ( new_size <= 0 )
02163                b->yy_buf_size += b->yy_buf_size / 8;
02164             else
02165                b->yy_buf_size *= 2;
02166 
02167             b->yy_ch_buf = (char *)
02168                /* Include room in for 2 EOB chars. */
02169                ast_yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner );
02170             }
02171          else
02172             /* Can't grow it, we don't own it. */
02173             b->yy_ch_buf = 0;
02174 
02175          if ( ! b->yy_ch_buf )
02176             YY_FATAL_ERROR(
02177             "fatal error - scanner input buffer overflow" );
02178 
02179          yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
02180 
02181          num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
02182                   number_to_move - 1;
02183 
02184          }
02185 
02186       if ( num_to_read > YY_READ_BUF_SIZE )
02187          num_to_read = YY_READ_BUF_SIZE;
02188 
02189       /* Read in more data. */
02190       YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
02191          yyg->yy_n_chars, num_to_read );
02192 
02193       YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
02194       }
02195 
02196    if ( yyg->yy_n_chars == 0 )
02197       {
02198       if ( number_to_move == YY_MORE_ADJ )
02199          {
02200          ret_val = EOB_ACT_END_OF_FILE;
02201          ast_yyrestart(yyin  ,yyscanner);
02202          }
02203 
02204       else
02205          {
02206          ret_val = EOB_ACT_LAST_MATCH;
02207          YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
02208             YY_BUFFER_EOF_PENDING;
02209          }
02210       }
02211 
02212    else
02213       ret_val = EOB_ACT_CONTINUE_SCAN;
02214 
02215    yyg->yy_n_chars += number_to_move;
02216    YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
02217    YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
02218 
02219    yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
02220 
02221    return ret_val;
02222 }
02223 
02224 /* yy_get_previous_state - get the state just before the EOB char was reached */
02225 
02226     static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
02227 {
02228    register yy_state_type yy_current_state;
02229    register char *yy_cp;
02230     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02231 
02232    yy_current_state = yyg->yy_start;
02233 
02234    for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
02235       {
02236       if ( *yy_cp )
02237          {
02238          yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)];
02239          }
02240       else
02241          yy_current_state = yy_NUL_trans[yy_current_state];
02242       if ( yy_accept[yy_current_state] )
02243          {
02244          yyg->yy_last_accepting_state = yy_current_state;
02245          yyg->yy_last_accepting_cpos = yy_cp;
02246          }
02247       }
02248 
02249    return yy_current_state;
02250 }
02251 
02252 /* yy_try_NUL_trans - try to make a transition on the NUL character
02253  *
02254  * synopsis
02255  * next_state = yy_try_NUL_trans( current_state );
02256  */
02257     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state , yyscan_t yyscanner)
02258 {
02259    register int yy_is_jam;
02260     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02261    register char *yy_cp = yyg->yy_c_buf_p;
02262 
02263    yy_current_state = yy_NUL_trans[yy_current_state];
02264    yy_is_jam = (yy_current_state == 0);
02265 
02266    if ( ! yy_is_jam )
02267       {
02268       if ( yy_accept[yy_current_state] )
02269          {
02270          yyg->yy_last_accepting_state = yy_current_state;
02271          yyg->yy_last_accepting_cpos = yy_cp;
02272          }
02273       }
02274 
02275    return yy_is_jam ? 0 : yy_current_state;
02276 }
02277 
02278     static void yyunput (int c, register char * yy_bp , yyscan_t yyscanner)
02279 {
02280    register char *yy_cp;
02281     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02282 
02283     yy_cp = yyg->yy_c_buf_p;
02284 
02285    /* undo effects of setting up yytext */
02286    *yy_cp = yyg->yy_hold_char;
02287 
02288    if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
02289       { /* need to shift things up to make room */
02290       /* +2 for EOB chars. */
02291       register int number_to_move = yyg->yy_n_chars + 2;
02292       register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
02293                YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
02294       register char *source =
02295             &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
02296 
02297       while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
02298          *--dest = *--source;
02299 
02300       yy_cp += (int) (dest - source);
02301       yy_bp += (int) (dest - source);
02302       YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
02303          yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
02304 
02305       if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
02306          YY_FATAL_ERROR( "flex scanner push-back overflow" );
02307       }
02308 
02309    *--yy_cp = (char) c;
02310 
02311    yyg->yytext_ptr = yy_bp;
02312    yyg->yy_hold_char = *yy_cp;
02313    yyg->yy_c_buf_p = yy_cp;
02314 }
02315 
02316 #ifndef YY_NO_INPUT
02317 #ifdef __cplusplus
02318     static int yyinput (yyscan_t yyscanner)
02319 #else
02320     static int input  (yyscan_t yyscanner)
02321 #endif
02322 
02323 {
02324    int c;
02325     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02326 
02327    *yyg->yy_c_buf_p = yyg->yy_hold_char;
02328 
02329    if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
02330       {
02331       /* yy_c_buf_p now points to the character we want to return.
02332        * If this occurs *before* the EOB characters, then it's a
02333        * valid NUL; if not, then we've hit the end of the buffer.
02334        */
02335       if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
02336          /* This was really a NUL. */
02337          *yyg->yy_c_buf_p = '\0';
02338 
02339       else
02340          { /* need more input */
02341          int offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
02342          ++yyg->yy_c_buf_p;
02343 
02344          switch ( yy_get_next_buffer( yyscanner ) )
02345             {
02346             case EOB_ACT_LAST_MATCH:
02347                /* This happens because yy_g_n_b()
02348                 * sees that we've accumulated a
02349                 * token and flags that we need to
02350                 * try matching the token before
02351                 * proceeding.  But for input(),
02352                 * there's no matching to consider.
02353                 * So convert the EOB_ACT_LAST_MATCH
02354                 * to EOB_ACT_END_OF_FILE.
02355                 */
02356 
02357                /* Reset buffer status. */
02358                ast_yyrestart(yyin ,yyscanner);
02359 
02360                /*FALLTHROUGH*/
02361 
02362             case EOB_ACT_END_OF_FILE:
02363                {
02364                if ( ast_yywrap(yyscanner ) )
02365                   return EOF;
02366 
02367                if ( ! yyg->yy_did_buffer_switch_on_eof )
02368                   YY_NEW_FILE;
02369 #ifdef __cplusplus
02370                return yyinput(yyscanner);
02371 #else
02372                return input(yyscanner);
02373 #endif
02374                }
02375 
02376             case EOB_ACT_CONTINUE_SCAN:
02377                yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
02378                break;
02379             }
02380          }
02381       }
02382 
02383    c = *(unsigned char *) yyg->yy_c_buf_p;   /* cast for 8-bit char's */
02384    *yyg->yy_c_buf_p = '\0';   /* preserve yytext */
02385    yyg->yy_hold_char = *++yyg->yy_c_buf_p;
02386 
02387    return c;
02388 }
02389 #endif   /* ifndef YY_NO_INPUT */
02390 
02391 /*!
02392  * \brief Immediately switch to a different input stream.
02393  * \param input_file A readable stream.
02394  * \param yyscanner The scanner object.
02395  * \note This function does not reset the start condition to \c INITIAL .
02396  */
02397     void ast_yyrestart  (FILE * input_file , yyscan_t yyscanner)
02398 {
02399     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02400 
02401    if ( ! YY_CURRENT_BUFFER ){
02402         ast_yyensure_buffer_stack (yyscanner);
02403       YY_CURRENT_BUFFER_LVALUE =
02404             ast_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
02405    }
02406 
02407    ast_yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
02408    ast_yy_load_buffer_state(yyscanner );
02409 }
02410 
02411 /*!
02412  * \brief Switch to a different input buffer.
02413  * \param new_buffer The new input buffer.
02414  * \param yyscanner The scanner object.
02415  */
02416     void ast_yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer , yyscan_t yyscanner)
02417 {
02418     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02419 
02420    /* TODO. We should be able to replace this entire function body
02421     * with
02422     *    ast_yypop_buffer_state();
02423     *    ast_yypush_buffer_state(new_buffer);
02424      */
02425    ast_yyensure_buffer_stack (yyscanner);
02426    if ( YY_CURRENT_BUFFER == new_buffer )
02427       return;
02428 
02429    if ( YY_CURRENT_BUFFER )
02430       {
02431       /* Flush out information for old buffer. */
02432       *yyg->yy_c_buf_p = yyg->yy_hold_char;
02433       YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
02434       YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
02435       }
02436 
02437    YY_CURRENT_BUFFER_LVALUE = new_buffer;
02438    ast_yy_load_buffer_state(yyscanner );
02439 
02440    /* We don't actually know whether we did this switch during
02441     * EOF (ast_yywrap()) processing, but the only time this flag
02442     * is looked at is after ast_yywrap() is called, so it's safe
02443     * to go ahead and always set it.
02444     */
02445    yyg->yy_did_buffer_switch_on_eof = 1;
02446 }
02447 
02448 static void ast_yy_load_buffer_state  (yyscan_t yyscanner)
02449 {
02450     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02451    yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
02452    yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
02453    yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
02454    yyg->yy_hold_char = *yyg->yy_c_buf_p;
02455 }
02456 
02457 /*!
02458  * \brief Allocate and initialize an input buffer state.
02459  * \param file A readable stream.
02460  * \param size The character buffer size in bytes. When in doubt, use \c YY_BUF_SIZE.
02461  * \param yyscanner The scanner object.
02462  * \return the allocated buffer state.
02463  */
02464     YY_BUFFER_STATE ast_yy_create_buffer  (FILE * file, int  size , yyscan_t yyscanner)
02465 {
02466    YY_BUFFER_STATE b;
02467     
02468    b = (YY_BUFFER_STATE) ast_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
02469    if ( ! b )
02470       YY_FATAL_ERROR( "out of dynamic memory in ast_yy_create_buffer()" );
02471 
02472    b->yy_buf_size = size;
02473 
02474    /* yy_ch_buf has to be 2 characters longer than the size given because
02475     * we need to put in 2 end-of-buffer characters.
02476     */
02477    b->yy_ch_buf = (char *) ast_yyalloc(b->yy_buf_size + 2 ,yyscanner );
02478    if ( ! b->yy_ch_buf )
02479       YY_FATAL_ERROR( "out of dynamic memory in ast_yy_create_buffer()" );
02480 
02481    b->yy_is_our_buffer = 1;
02482 
02483    ast_yy_init_buffer(b,file ,yyscanner);
02484 
02485    return b;
02486 }
02487 
02488 /*!
02489  * \brief Destroy the buffer.
02490  * \param b a buffer created with ast_yy_create_buffer()
02491  * \param yyscanner The scanner object.
02492  */
02493     void ast_yy_delete_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
02494 {
02495     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02496 
02497    if ( ! b )
02498       return;
02499 
02500    if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
02501       YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
02502 
02503    if ( b->yy_is_our_buffer )
02504       ast_yyfree((void *) b->yy_ch_buf ,yyscanner );
02505 
02506    ast_yyfree((void *) b ,yyscanner );
02507 }
02508 
02509 #ifndef __cplusplus
02510 extern int isatty (int );
02511 #endif /* __cplusplus */
02512     
02513 /* Initializes or reinitializes a buffer.
02514  * This function is sometimes called more than once on the same buffer,
02515  * such as during a ast_yyrestart() or at EOF.
02516  */
02517     static void ast_yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file , yyscan_t yyscanner)
02518 
02519 {
02520    int oerrno = errno;
02521     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02522 
02523    ast_yy_flush_buffer(b ,yyscanner);
02524 
02525    b->yy_input_file = file;
02526    b->yy_fill_buffer = 1;
02527 
02528     /* If b is the current buffer, then ast_yy_init_buffer was _probably_
02529      * called from ast_yyrestart() or through yy_get_next_buffer.
02530      * In that case, we don't want to reset the lineno or column.
02531      */
02532     if (b != YY_CURRENT_BUFFER){
02533         b->yy_bs_lineno = 1;
02534         b->yy_bs_column = 0;
02535     }
02536 
02537         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
02538     
02539    errno = oerrno;
02540 }
02541 
02542 /*!
02543  * \brief Discard all buffered characters. On the next scan, YY_INPUT will be called.
02544  * \param b the buffer state to be flushed, usually \c YY_CURRENT_BUFFER.
02545  * \param yyscanner The scanner object.
02546  */
02547     void ast_yy_flush_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
02548 {
02549     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02550    if ( ! b )
02551       return;
02552 
02553    b->yy_n_chars = 0;
02554 
02555    /* We always need two end-of-buffer characters.  The first causes
02556     * a transition to the end-of-buffer state.  The second causes
02557     * a jam in that state.
02558     */
02559    b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
02560    b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
02561 
02562    b->yy_buf_pos = &b->yy_ch_buf[0];
02563 
02564    b->yy_at_bol = 1;
02565    b->yy_buffer_status = YY_BUFFER_NEW;
02566 
02567    if ( b == YY_CURRENT_BUFFER )
02568       ast_yy_load_buffer_state(yyscanner );
02569 }
02570 
02571 /*!
02572  * \brief Pushes the new state onto the stack. The new state becomes
02573  *  the current state. This function will allocate the stack if necessary.
02574  *  \param new_buffer The new state.
02575  *  \param yyscanner The scanner object.
02576  */
02577 void ast_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
02578 {
02579     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02580    if (new_buffer == NULL)
02581       return;
02582 
02583    ast_yyensure_buffer_stack(yyscanner);
02584 
02585    /* This block is copied from ast_yy_switch_to_buffer. */
02586    if ( YY_CURRENT_BUFFER )
02587       {
02588       /* Flush out information for old buffer. */
02589       *yyg->yy_c_buf_p = yyg->yy_hold_char;
02590       YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
02591       YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
02592       }
02593 
02594    /* Only push if top exists. Otherwise, replace top. */
02595    if (YY_CURRENT_BUFFER)
02596       yyg->yy_buffer_stack_top++;
02597    YY_CURRENT_BUFFER_LVALUE = new_buffer;
02598 
02599    /* copied from ast_yy_switch_to_buffer. */
02600    ast_yy_load_buffer_state(yyscanner );
02601    yyg->yy_did_buffer_switch_on_eof = 1;
02602 }
02603 
02604 /*!
02605  * \brief Removes and deletes the top of the stack, if present.
02606  *  The next element becomes the new top.
02607  *  \param yyscanner The scanner object.
02608  */
02609 void ast_yypop_buffer_state (yyscan_t yyscanner)
02610 {
02611     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02612    if (!YY_CURRENT_BUFFER)
02613       return;
02614 
02615    ast_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner);
02616    YY_CURRENT_BUFFER_LVALUE = NULL;
02617    if (yyg->yy_buffer_stack_top > 0)
02618       --yyg->yy_buffer_stack_top;
02619 
02620    if (YY_CURRENT_BUFFER) {
02621       ast_yy_load_buffer_state(yyscanner );
02622       yyg->yy_did_buffer_switch_on_eof = 1;
02623    }
02624 }
02625 
02626 /*!
02627  * \brief Allocates the stack if it does not exist Guarantees space for at least one push.
02628  */
02629 static void ast_yyensure_buffer_stack (yyscan_t yyscanner)
02630 {
02631    int num_to_alloc;
02632     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02633 
02634    if (!yyg->yy_buffer_stack) {
02635 
02636       /* First allocation is just for 2 elements, since we don't know if this
02637        * scanner will even need a stack. We use 2 instead of 1 to avoid an
02638        * immediate realloc on the next call.
02639          */
02640       num_to_alloc = 1;
02641       yyg->yy_buffer_stack = (struct yy_buffer_state**)ast_yyalloc
02642                         (num_to_alloc * sizeof(struct yy_buffer_state*)
02643                         , yyscanner);
02644       
02645       memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
02646             
02647       yyg->yy_buffer_stack_max = num_to_alloc;
02648       yyg->yy_buffer_stack_top = 0;
02649       return;
02650    }
02651 
02652    if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
02653 
02654       /* Increase the buffer to prepare for a possible push. */
02655       int grow_size = 8 /* arbitrary grow size */;
02656 
02657       num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
02658       yyg->yy_buffer_stack = (struct yy_buffer_state**)ast_yyrealloc
02659                         (yyg->yy_buffer_stack,
02660                         num_to_alloc * sizeof(struct yy_buffer_state*)
02661                         , yyscanner);
02662 
02663       /* zero only the new slots.*/
02664       memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
02665       yyg->yy_buffer_stack_max = num_to_alloc;
02666    }
02667 }
02668 
02669 /*!
02670  * \brief Setup the input buffer state to scan directly from a user-specified character buffer.
02671  * \param base the character buffer
02672  * \param size the size in bytes of the character buffer
02673  * \param yyscanner The scanner object.
02674  * \return the newly allocated buffer state object. 
02675  */
02676 YY_BUFFER_STATE ast_yy_scan_buffer  (char * base, yy_size_t  size , yyscan_t yyscanner)
02677 {
02678    YY_BUFFER_STATE b;
02679     
02680    if ( size < 2 ||
02681         base[size-2] != YY_END_OF_BUFFER_CHAR ||
02682         base[size-1] != YY_END_OF_BUFFER_CHAR )
02683       /* They forgot to leave room for the EOB's. */
02684       return 0;
02685 
02686    b = (YY_BUFFER_STATE) ast_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
02687    if ( ! b )
02688       YY_FATAL_ERROR( "out of dynamic memory in ast_yy_scan_buffer()" );
02689 
02690    b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
02691    b->yy_buf_pos = b->yy_ch_buf = base;
02692    b->yy_is_our_buffer = 0;
02693    b->yy_input_file = 0;
02694    b->yy_n_chars = b->yy_buf_size;
02695    b->yy_is_interactive = 0;
02696    b->yy_at_bol = 1;
02697    b->yy_fill_buffer = 0;
02698    b->yy_buffer_status = YY_BUFFER_NEW;
02699 
02700    ast_yy_switch_to_buffer(b ,yyscanner );
02701 
02702    return b;
02703 }
02704 
02705 /*!
02706  * \brief Setup the input buffer state to scan a string. The next call to ast_yylex() will
02707  * scan from a \e copy of \a str.
02708  * \param yy_str a NUL-terminated string to scan
02709  * \param yyscanner The scanner object.
02710  * \return the newly allocated buffer state object.
02711  * \note If you want to scan bytes that may contain NUL values, then use
02712  *       ast_yy_scan_bytes() instead.
02713  */
02714 YY_BUFFER_STATE ast_yy_scan_string (yyconst char * yy_str , yyscan_t yyscanner)
02715 {
02716     
02717    return ast_yy_scan_bytes(yy_str,strlen(yy_str) ,yyscanner);
02718 }
02719 
02720 /*!
02721  * \brief Setup the input buffer state to scan the given bytes. The next call to ast_yylex() will
02722  * scan from a @e copy of @a bytes.
02723  * \param bytes the byte buffer to scan
02724  * \param len the number of bytes in the buffer pointed to by @a bytes.
02725  * \param yyscanner The scanner object.
02726  * \return the newly allocated buffer state object.
02727  */
02728 YY_BUFFER_STATE ast_yy_scan_bytes  (yyconst char * bytes, int  len , yyscan_t yyscanner)
02729 {
02730    YY_BUFFER_STATE b;
02731    char *buf;
02732    yy_size_t n;
02733    int i;
02734     
02735    /* Get memory for full buffer, including space for trailing EOB's. */
02736    n = len + 2;
02737    buf = (char *) ast_yyalloc(n ,yyscanner );
02738    if ( ! buf )
02739       YY_FATAL_ERROR( "out of dynamic memory in ast_yy_scan_bytes()" );
02740 
02741    for ( i = 0; i < len; ++i )
02742       buf[i] = bytes[i];
02743 
02744    buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
02745 
02746    b = ast_yy_scan_buffer(buf,n ,yyscanner);
02747    if ( ! b )
02748       YY_FATAL_ERROR( "bad buffer in ast_yy_scan_bytes()" );
02749 
02750    /* It's okay to grow etc. this buffer, and we should throw it
02751     * away when we're done.
02752     */
02753    b->yy_is_our_buffer = 1;
02754 
02755    return b;
02756 }
02757 
02758 #ifndef YY_EXIT_FAILURE
02759 #define YY_EXIT_FAILURE 2
02760 #endif
02761 
02762 static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
02763 {
02764       (void) fprintf( stderr, "%s\n", msg );
02765    exit( YY_EXIT_FAILURE );
02766 }
02767 
02768 /* Redefine yyless() so it works in section 3 code. */
02769 
02770 #undef yyless
02771 #define yyless(n) \
02772    do \
02773       { \
02774       /* Undo effects of setting up yytext. */ \
02775         int yyless_macro_arg = (n); \
02776         YY_LESS_LINENO(yyless_macro_arg);\
02777       yytext[yyleng] = yyg->yy_hold_char; \
02778       yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
02779       yyg->yy_hold_char = *yyg->yy_c_buf_p; \
02780       *yyg->yy_c_buf_p = '\0'; \
02781       yyleng = yyless_macro_arg; \
02782       } \
02783    while ( 0 )
02784 
02785 /* Accessor  methods (get/set functions) to struct members. */
02786 
02787 /*!
02788  * \brief Get the user-defined data for this scanner.
02789  * \param yyscanner The scanner object.
02790  */
02791 YY_EXTRA_TYPE ast_yyget_extra  (yyscan_t yyscanner)
02792 {
02793     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02794     return yyextra;
02795 }
02796 
02797 /*!
02798  * \brief Get the current line number.
02799  * \param yyscanner The scanner object.
02800  */
02801 int ast_yyget_lineno  (yyscan_t yyscanner)
02802 {
02803     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02804     
02805         if (! YY_CURRENT_BUFFER)
02806             return 0;
02807     
02808     return yylineno;
02809 }
02810 
02811 /*! 
02812  * \brief Get the current column number.
02813  * \param yyscanner The scanner object.
02814  */
02815 int ast_yyget_column  (yyscan_t yyscanner)
02816 {
02817     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02818     
02819         if (! YY_CURRENT_BUFFER)
02820             return 0;
02821     
02822     return yycolumn;
02823 }
02824 
02825 /*!
02826  * \brief Get the input stream.
02827  * \param yyscanner The scanner object.
02828  */
02829 FILE *ast_yyget_in  (yyscan_t yyscanner)
02830 {
02831     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02832     return yyin;
02833 }
02834 
02835 /*!
02836  * \brief Get the output stream.
02837  * \param yyscanner The scanner object.
02838  */
02839 FILE *ast_yyget_out  (yyscan_t yyscanner)
02840 {
02841     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02842     return yyout;
02843 }
02844 
02845 /*!
02846  * \brief Get the length of the current token.
02847  * \param yyscanner The scanner object.
02848  */
02849 int ast_yyget_leng  (yyscan_t yyscanner)
02850 {
02851     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02852     return yyleng;
02853 }
02854 
02855 /** Get the current token.
02856  * \param yyscanner The scanner object.
02857  */
02858 
02859 char *ast_yyget_text  (yyscan_t yyscanner)
02860 {
02861     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02862     return yytext;
02863 }
02864 
02865 /*!
02866  * \brief Set the user-defined data. This data is never touched by the scanner.
02867  * \param user_defined The data to be associated with this scanner.
02868  * \param yyscanner The scanner object.
02869  */
02870 void ast_yyset_extra (YY_EXTRA_TYPE  user_defined , yyscan_t yyscanner)
02871 {
02872     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02873     yyextra = user_defined ;
02874 }
02875 
02876 /*! 
02877  * \brief Set the current line number.
02878  * \param line_number
02879  * \param yyscanner The scanner object.
02880  */
02881 void ast_yyset_lineno (int  line_number , yyscan_t yyscanner)
02882 {
02883     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02884 
02885         /* lineno is only valid if an input buffer exists. */
02886         if (! YY_CURRENT_BUFFER )
02887            yy_fatal_error( "ast_yyset_lineno called with no buffer" , yyscanner); 
02888     
02889     yylineno = line_number;
02890 }
02891 
02892 /*!
02893  * \brief Set the current column.
02894  * \param column_no
02895  * \param yyscanner The scanner object.
02896  */
02897 void ast_yyset_column (int  column_no , yyscan_t yyscanner)
02898 {
02899     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02900 
02901         /* column is only valid if an input buffer exists. */
02902         if (! YY_CURRENT_BUFFER )
02903            yy_fatal_error( "ast_yyset_column called with no buffer" , yyscanner); 
02904     
02905     yycolumn = column_no;
02906 }
02907 
02908 /*!
02909  * \brief Set the input stream. This does not discard the current input buffer.
02910  * \param in_str A readable stream.
02911  * \param yyscanner The scanner object.
02912  * \see ast_yy_switch_to_buffer
02913  */
02914 void ast_yyset_in (FILE *  in_str , yyscan_t yyscanner)
02915 {
02916     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02917     yyin = in_str ;
02918 }
02919 
02920 void ast_yyset_out (FILE *  out_str , yyscan_t yyscanner)
02921 {
02922     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02923     yyout = out_str ;
02924 }
02925 
02926 int ast_yyget_debug  (yyscan_t yyscanner)
02927 {
02928     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02929     return yy_flex_debug;
02930 }
02931 
02932 void ast_yyset_debug (int  bdebug , yyscan_t yyscanner)
02933 {
02934     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02935     yy_flex_debug = bdebug ;
02936 }
02937 
02938 /* Accessor methods for yylval and yylloc */
02939 
02940 YYSTYPE * ast_yyget_lval  (yyscan_t yyscanner)
02941 {
02942     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02943     return yylval;
02944 }
02945 
02946 void ast_yyset_lval (YYSTYPE *  yylval_param , yyscan_t yyscanner)
02947 {
02948     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02949     yylval = yylval_param;
02950 }
02951 
02952 YYLTYPE *ast_yyget_lloc  (yyscan_t yyscanner)
02953 {
02954     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02955     return yylloc;
02956 }
02957     
02958 void ast_yyset_lloc (YYLTYPE *  yylloc_param , yyscan_t yyscanner)
02959 {
02960     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02961     yylloc = yylloc_param;
02962 }
02963     
02964 static int yy_init_globals (yyscan_t yyscanner)
02965 {
02966     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02967     /* Initialization is the same as for the non-reentrant scanner.
02968        This function is called once per scanner lifetime. */
02969 
02970     yyg->yy_buffer_stack = 0;
02971     yyg->yy_buffer_stack_top = 0;
02972     yyg->yy_buffer_stack_max = 0;
02973     yyg->yy_c_buf_p = (char *) 0;
02974     yyg->yy_init = 1;
02975     yyg->yy_start = 0;
02976     yyg->yy_start_stack_ptr = 0;
02977     yyg->yy_start_stack_depth = 0;
02978     yyg->yy_start_stack = (int *) 0;
02979 
02980 /* Defined in main.c */
02981 #ifdef YY_STDINIT
02982     yyin = stdin;
02983     yyout = stdout;
02984 #else
02985     yyin = (FILE *) 0;
02986     yyout = (FILE *) 0;
02987 #endif
02988 
02989     /* For future reference: Set errno on error, since we are called by
02990      * ast_yylex_init()
02991      */
02992     return 0;
02993 }
02994 
02995 /* User-visible API */
02996 
02997 /* ast_yylex_init is special because it creates the scanner itself, so it is
02998  * the ONLY reentrant function that doesn't take the scanner as the last argument.
02999  * That's why we explicitly handle the declaration, instead of using our macros.
03000  */
03001 
03002 int ast_yylex_init(yyscan_t* ptr_yy_globals)
03003 
03004 {
03005     if (ptr_yy_globals == NULL){
03006         errno = EINVAL;
03007         return 1;
03008     }
03009 
03010     *ptr_yy_globals = (yyscan_t) ast_yyalloc ( sizeof( struct yyguts_t ), NULL );
03011 
03012     if (*ptr_yy_globals == NULL){
03013         errno = ENOMEM;
03014         return 1;
03015     }
03016 
03017     memset(*ptr_yy_globals,0,sizeof(struct yyguts_t));
03018 
03019     return yy_init_globals ( *ptr_yy_globals );
03020 }
03021 
03022 /* ast_yylex_destroy is for both reentrant and non-reentrant scanners. */
03023 int ast_yylex_destroy  (yyscan_t yyscanner)
03024 {
03025     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
03026 
03027     /* Pop the buffer stack, destroying each element. */
03028    while(YY_CURRENT_BUFFER){
03029       ast_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
03030       YY_CURRENT_BUFFER_LVALUE = NULL;
03031       ast_yypop_buffer_state(yyscanner);
03032    }
03033 
03034    /* Destroy the stack itself. */
03035    ast_yyfree(yyg->yy_buffer_stack ,yyscanner);
03036    yyg->yy_buffer_stack = NULL;
03037 
03038     /* Destroy the start condition stack. */
03039         ast_yyfree(yyg->yy_start_stack ,yyscanner );
03040         yyg->yy_start_stack = NULL;
03041 
03042     /* Destroy the main struct (reentrant only). */
03043     ast_yyfree ( yyscanner , yyscanner );
03044     return 0;
03045 }
03046 
03047 /*
03048  * Internal utility routines.
03049  */
03050 
03051 #ifndef yytext_ptr
03052 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
03053 {
03054    register int i;
03055     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
03056    for ( i = 0; i < n; ++i )
03057       s1[i] = s2[i];
03058 }
03059 #endif
03060 
03061 #ifdef YY_NEED_STRLEN
03062 static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
03063 {
03064    register int n;
03065     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
03066    for ( n = 0; s[n]; ++n )
03067       ;
03068 
03069    return n;
03070 }
03071 #endif
03072 
03073 void *ast_yyalloc (yy_size_t  size , yyscan_t yyscanner)
03074 {
03075    return (void *) malloc( size );
03076 }
03077 
03078 void *ast_yyrealloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
03079 {
03080    /* The cast to (char *) in the following accommodates both
03081     * implementations that use char* generic pointers, and those
03082     * that use void* generic pointers.  It works with the latter
03083     * because both ANSI C and C++ allow castless assignment from
03084     * any pointer type to void*, and deal with argument conversions
03085     * as though doing an assignment.
03086     */
03087    return (void *) realloc( (char *) ptr, size );
03088 }
03089 
03090 void ast_yyfree (void * ptr , yyscan_t yyscanner)
03091 {
03092    free( (char *) ptr );   /* see ast_yyrealloc() for (char *) cast */
03093 }
03094 
03095 #define YYTABLES_NAME "yytables"
03096 
03097 #undef YY_NEW_FILE
03098 #undef YY_FLUSH_BUFFER
03099 #undef yy_set_bol
03100 #undef yy_new_buffer
03101 #undef yy_set_interactive
03102 #undef yytext_ptr
03103 #undef YY_DO_BEFORE_ACTION
03104 
03105 #ifdef YY_DECL_IS_OURS
03106 #undef YY_DECL_IS_OURS
03107 #undef YY_DECL
03108 #endif
03109 #line 205 "ast_expr2.fl"
03110 
03111 
03112 
03113 /* I'm putting the interface routine to the whole parse here in the flexer input file
03114    mainly because of all the flexer initialization that has to be done. Shouldn't matter
03115    where it is, as long as it's somewhere. I didn't want to define a prototype for the
03116    ast_yy_scan_string in the .y file, because then, I'd have to define YY_BUFFER_STATE there...
03117    UGH! that would be inappropriate. */
03118 
03119 int ast_yyparse(void *); /* need to/should define this prototype for the call to yyparse */
03120 int ast_yyerror(const char *, YYLTYPE *, struct parse_io *); /* likewise */
03121 
03122 int ast_expr(char *expr, char *buf, int length)
03123 {
03124    struct parse_io io;
03125    int return_value = 0;
03126    
03127    memset(&io, 0, sizeof(io));
03128    io.string = expr;  /* to pass to the error routine */
03129    
03130    ast_yylex_init(&io.scanner);
03131    
03132    ast_yy_scan_string(expr, io.scanner);
03133    
03134    ast_yyparse ((void *) &io);
03135 
03136    ast_yylex_destroy(io.scanner);
03137 
03138    if (!io.val) {
03139       if (length > 1) {
03140          strcpy(buf, "0");
03141          return_value = 1;
03142       }
03143    } else {
03144       if (io.val->type == AST_EXPR_integer) {
03145          int res_length;
03146 
03147          res_length = snprintf(buf, length, "%ld", (long int) io.val->u.i);
03148          return_value = (res_length <= length) ? res_length : length;
03149       } else {
03150 #if defined(STANDALONE) || defined(LOW_MEMORY) || defined(STANDALONE_AEL)
03151          strncpy(buf, io.val->u.s, length - 1);
03152 #else /* !STANDALONE && !LOW_MEMORY */
03153          ast_copy_string(buf, io.val->u.s, length);
03154 #endif /* STANDALONE || LOW_MEMORY */
03155          return_value = strlen(buf);
03156          free(io.val->u.s);
03157       }
03158       free(io.val);
03159    }
03160    return return_value;
03161 }
03162 
03163 
03164 char extra_error_message[4095];
03165 int extra_error_message_supplied = 0;
03166 void  ast_expr_register_extra_error_info(char *message);
03167 void  ast_expr_clear_extra_error_info(void);
03168 
03169 void  ast_expr_register_extra_error_info(char *message)
03170 {
03171        extra_error_message_supplied=1;
03172        strcpy(extra_error_message, message);
03173 }
03174 
03175 void  ast_expr_clear_extra_error_info(void)
03176 {
03177        extra_error_message_supplied=0;
03178        extra_error_message[0] = 0;
03179 }
03180 
03181 static char *expr2_token_equivs1[] = 
03182 {
03183    "TOKEN",
03184    "TOK_COND",
03185    "TOK_COLONCOLON",
03186    "TOK_OR",
03187    "TOK_AND",
03188    "TOK_EQ",
03189    "TOK_GT",
03190    "TOK_LT",
03191    "TOK_GE",
03192    "TOK_LE",
03193    "TOK_NE",
03194    "TOK_PLUS",
03195    "TOK_MINUS",
03196    "TOK_MULT",
03197    "TOK_DIV",
03198    "TOK_MOD",
03199    "TOK_COMPL",
03200    "TOK_COLON",
03201    "TOK_EQTILDE",
03202    "TOK_RP",
03203    "TOK_LP"
03204 };
03205 
03206 static char *expr2_token_equivs2[] = 
03207 {
03208    "<token>",
03209    "?",
03210    "::",
03211    "|",
03212    "&",
03213    "=",
03214    ">",
03215    "<",
03216    ">=",
03217    "<=",
03218    "!=",
03219    "+",
03220    "-",
03221    "*",
03222    "/",
03223    "%",
03224    "!",
03225    ":",
03226    "=~",
03227    ")",
03228    "("
03229 };
03230 
03231 
03232 static char *expr2_token_subst(char *mess)
03233 {
03234    /* calc a length, malloc, fill, and return; yyerror had better free it! */
03235    int len=0,i;
03236    char *p;
03237    char *res, *s,*t;
03238    int expr2_token_equivs_entries = sizeof(expr2_token_equivs1)/sizeof(char*);
03239 
03240    for (p=mess; *p; p++) {
03241       for (i=0; i<expr2_token_equivs_entries; i++) {
03242          if ( strncmp(p,expr2_token_equivs1[i],strlen(expr2_token_equivs1[i])) == 0 )
03243          {
03244             len+=strlen(expr2_token_equivs2[i])+2;
03245             p += strlen(expr2_token_equivs1[i])-1;
03246             break;
03247          }
03248       }
03249       len++;
03250    }
03251    res = (char*)malloc(len+1);
03252    res[0] = 0;
03253    s = res;
03254    for (p=mess; *p;) {
03255       int found = 0;
03256       for (i=0; i<expr2_token_equivs_entries; i++) {
03257          if ( strncmp(p,expr2_token_equivs1[i],strlen(expr2_token_equivs1[i])) == 0 ) {
03258             *s++ = '\'';
03259             for (t=expr2_token_equivs2[i]; *t;) {
03260                *s++ = *t++;
03261             }
03262             *s++ = '\'';
03263             p += strlen(expr2_token_equivs1[i]);
03264             found = 1;
03265             break;
03266          }
03267       }
03268       if( !found )
03269          *s++ = *p++;
03270    }
03271    *s++ = 0;
03272    return res;
03273 }
03274 
03275 int ast_yyerror (const char *s,  yyltype *loc, struct parse_io *parseio )
03276 {  
03277    struct yyguts_t * yyg = (struct yyguts_t*)(parseio->scanner);
03278    char spacebuf[8000]; /* best safe than sorry */
03279    char spacebuf2[8000]; /* best safe than sorry */
03280    int i=0;
03281    char *s2 = expr2_token_subst((char *)s);
03282    spacebuf[0] = 0;
03283    
03284    for(i=0;i< (int)(yytext - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf);i++) spacebuf2[i] = ' ';  /* uh... assuming yyg is defined, then I can use the yycolumn macro,
03285                                                                         which is the same thing as... get this:
03286                                        yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]->yy_bs_column
03287                                        I was tempted to just use yy_buf_pos in the STATE, but..., well:
03288                                           a. the yy_buf_pos is the current position in the buffer, which
03289                                              may not relate to the entire string/buffer because of the
03290                                              buffering.
03291                                           b. but, analysis of the situation is that when you use the
03292                                              ast_yy_scan_string func, it creates a single buffer the size of
03293                                              string, so the two would be the same... 
03294                                        so, in the end, the yycolumn macro is available, shorter, therefore easier. */
03295    spacebuf2[i++]='^';
03296    spacebuf2[i]= 0;
03297 
03298 #ifdef STANDALONE3
03299    /* easier to read in the standalone version */
03300    printf("ast_yyerror(): %s syntax error: %s; Input:\n%s\n%s\n",  
03301          (extra_error_message_supplied?extra_error_message:""), s2, parseio->string,spacebuf2);
03302 #else
03303    ast_log(LOG_WARNING,"ast_yyerror(): %s syntax error: %s; Input:\n%s\n%s\n",  
03304          (extra_error_message_supplied?extra_error_message:""), s2, parseio->string,spacebuf2);
03305 #endif
03306 #ifndef STANDALONE
03307    ast_log(LOG_WARNING,"If you have questions, please refer to doc/channelvariables.txt in the asterisk source.\n");
03308 #endif
03309    free(s2);
03310    return(0);
03311 }
03312 

Generated on Fri Aug 24 02:22:11 2007 for Asterisk - the Open Source PBX by  doxygen 1.5.1