Asterisk - The Open Source Telephony Project  18.5.0
ael_lex.c
Go to the documentation of this file.
1 #define ASTMM_LIBC ASTMM_REDIRECT
2 #include "asterisk.h"
3 
4 #line 2 "ael_lex.c"
5 
6 #line 4 "ael_lex.c"
7 
8 #define YY_INT_ALIGNED short int
9 
10 /* A lexical scanner generated by flex */
11 
12 #define FLEX_SCANNER
13 #define YY_FLEX_MAJOR_VERSION 2
14 #define YY_FLEX_MINOR_VERSION 5
15 #define YY_FLEX_SUBMINOR_VERSION 35
16 #if YY_FLEX_SUBMINOR_VERSION > 0
17 #define FLEX_BETA
18 #endif
19 
20 /* First, we deal with platform-specific or compiler-specific issues. */
21 
22 /* begin standard C headers. */
23 #include <stdio.h>
24 #include <string.h>
25 #include <errno.h>
26 #include <stdlib.h>
27 
28 /* end standard C headers. */
29 
30 /* flex integer type definitions */
31 
32 #ifndef FLEXINT_H
33 #define FLEXINT_H
34 
35 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
36 
37 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
38 
39 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
40  * if you want the limit (max/min) macros for int types.
41  */
42 #ifndef __STDC_LIMIT_MACROS
43 #define __STDC_LIMIT_MACROS 1
44 #endif
45 
46 #include <inttypes.h>
47 typedef int8_t flex_int8_t;
48 typedef uint8_t flex_uint8_t;
49 typedef int16_t flex_int16_t;
50 typedef uint16_t flex_uint16_t;
51 typedef int32_t flex_int32_t;
52 typedef uint32_t flex_uint32_t;
53 #else
54 typedef signed char flex_int8_t;
55 typedef short int flex_int16_t;
56 typedef int flex_int32_t;
57 typedef unsigned char flex_uint8_t;
58 typedef unsigned short int flex_uint16_t;
59 typedef unsigned int flex_uint32_t;
60 
61 /* Limits of integral types. */
62 #ifndef INT8_MIN
63 #define INT8_MIN (-128)
64 #endif
65 #ifndef INT16_MIN
66 #define INT16_MIN (-32767-1)
67 #endif
68 #ifndef INT32_MIN
69 #define INT32_MIN (-2147483647-1)
70 #endif
71 #ifndef INT8_MAX
72 #define INT8_MAX (127)
73 #endif
74 #ifndef INT16_MAX
75 #define INT16_MAX (32767)
76 #endif
77 #ifndef INT32_MAX
78 #define INT32_MAX (2147483647)
79 #endif
80 #ifndef UINT8_MAX
81 #define UINT8_MAX (255U)
82 #endif
83 #ifndef UINT16_MAX
84 #define UINT16_MAX (65535U)
85 #endif
86 #ifndef UINT32_MAX
87 #define UINT32_MAX (4294967295U)
88 #endif
89 
90 #endif /* ! C99 */
91 
92 #endif /* ! FLEXINT_H */
93 
94 #ifdef __cplusplus
95 
96 /* The "const" storage-class-modifier is valid. */
97 #define YY_USE_CONST
98 
99 #else /* ! __cplusplus */
100 
101 /* C99 requires __STDC__ to be defined as 1. */
102 #if defined (__STDC__)
103 
104 #define YY_USE_CONST
105 
106 #endif /* defined (__STDC__) */
107 #endif /* ! __cplusplus */
108 
109 #ifdef YY_USE_CONST
110 #define yyconst const
111 #else
112 #define yyconst
113 #endif
114 
115 /* Returned upon end-of-file. */
116 #define YY_NULL 0
117 
118 /* Promotes a possibly negative, possibly signed char to an unsigned
119  * integer for use as an array index. If the signed char is negative,
120  * we want to instead treat it as an 8-bit unsigned char, hence the
121  * double cast.
122  */
123 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
124 
125 /* An opaque pointer. */
126 #ifndef YY_TYPEDEF_YY_SCANNER_T
127 #define YY_TYPEDEF_YY_SCANNER_T
128 typedef void* yyscan_t;
129 #endif
130 
131 /* For convenience, these vars (plus the bison vars far below)
132  are macros in the reentrant scanner. */
133 #define yyin yyg->yyin_r
134 #define yyout yyg->yyout_r
135 #define yyextra yyg->yyextra_r
136 #define yyleng yyg->yyleng_r
137 #define yytext yyg->yytext_r
138 #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
139 #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
140 #define yy_flex_debug yyg->yy_flex_debug_r
141 
142 /* Enter a start condition. This macro really ought to take a parameter,
143  * but we do it the disgusting crufty way forced on us by the ()-less
144  * definition of BEGIN.
145  */
146 #define BEGIN yyg->yy_start = 1 + 2 *
147 
148 /* Translate the current start state into a value that can be later handed
149  * to BEGIN to return to the state. The YYSTATE alias is for lex
150  * compatibility.
151  */
152 #define YY_START ((yyg->yy_start - 1) / 2)
153 #define YYSTATE YY_START
154 
155 /* Action number for EOF rule of a given start state. */
156 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
157 
158 /* Special action meaning "start processing a new file". */
159 #define YY_NEW_FILE ael_yyrestart(yyin ,yyscanner )
160 
161 #define YY_END_OF_BUFFER_CHAR 0
162 
163 /* Size of default input buffer. */
164 #ifndef YY_BUF_SIZE
165 #ifdef __ia64__
166 /* On IA-64, the buffer size is 16k, not 8k.
167  * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
168  * Ditto for the __ia64__ case accordingly.
169  */
170 #define YY_BUF_SIZE 32768
171 #else
172 #define YY_BUF_SIZE 16384
173 #endif /* __ia64__ */
174 #endif
175 
176 /* The state buf must be large enough to hold one state per character in the main buffer.
177  */
178 #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
179 
180 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
181 #define YY_TYPEDEF_YY_BUFFER_STATE
183 #endif
184 
185 #define EOB_ACT_CONTINUE_SCAN 0
186 #define EOB_ACT_END_OF_FILE 1
187 #define EOB_ACT_LAST_MATCH 2
188 
189  #define YY_LESS_LINENO(n)
190 
191 /* Return all but the first "n" matched characters back to the input stream. */
192 #define yyless(n) \
193  do \
194  { \
195  /* Undo effects of setting up yytext. */ \
196  int yyless_macro_arg = (n); \
197  YY_LESS_LINENO(yyless_macro_arg);\
198  *yy_cp = yyg->yy_hold_char; \
199  YY_RESTORE_YY_MORE_OFFSET \
200  yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
201  YY_DO_BEFORE_ACTION; /* set up yytext again */ \
202  } \
203  while ( 0 )
204 
205 #define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
206 
207 #ifndef YY_TYPEDEF_YY_SIZE_T
208 #define YY_TYPEDEF_YY_SIZE_T
209 typedef size_t yy_size_t;
210 #endif
211 
212 #ifndef YY_STRUCT_YY_BUFFER_STATE
213 #define YY_STRUCT_YY_BUFFER_STATE
214 struct yy_buffer_state
215  {
216  FILE *yy_input_file;
217 
218  char *yy_ch_buf; /* input buffer */
219  char *yy_buf_pos; /* current position in input buffer */
220 
221  /* Size of input buffer in bytes, not including room for EOB
222  * characters.
223  */
225 
226  /* Number of characters read into yy_ch_buf, not including EOB
227  * characters.
228  */
229  int yy_n_chars;
230 
231  /* Whether we "own" the buffer - i.e., we know we created it,
232  * and can realloc() it to grow it, and should free() it to
233  * delete it.
234  */
235  int yy_is_our_buffer;
236 
237  /* Whether this is an "interactive" input source; if so, and
238  * if we're using stdio for input, then we want to use getc()
239  * instead of fread(), to make sure we stop fetching input after
240  * each newline.
241  */
242  int yy_is_interactive;
243 
244  /* Whether we're considered to be at the beginning of a line.
245  * If so, '^' rules will be active on the next match, otherwise
246  * not.
247  */
248  int yy_at_bol;
249 
250  int yy_bs_lineno; /**< The line count. */
251  int yy_bs_column; /**< The column count. */
252 
253  /* Whether to try to fill the input buffer when we reach the
254  * end of it.
255  */
256  int yy_fill_buffer;
257 
258  int yy_buffer_status;
259 
260 #define YY_BUFFER_NEW 0
261 #define YY_BUFFER_NORMAL 1
262  /* When an EOF's been seen but there's still some text to process
263  * then we mark the buffer as YY_EOF_PENDING, to indicate that we
264  * shouldn't try reading from the input source any more. We might
265  * still have a bunch of tokens to match, though, because of
266  * possible backing-up.
267  *
268  * When we actually see the EOF, we change the status to "new"
269  * (via ael_yyrestart()), so that the user can continue scanning by
270  * just pointing yyin at a new input file.
271  */
272 #define YY_BUFFER_EOF_PENDING 2
273 
274  };
275 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
276 
277 /* We provide macros for accessing buffer states in case in the
278  * future we want to put the buffer states in a more general
279  * "scanner state".
280  *
281  * Returns the top of the stack, or NULL.
282  */
283 #define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
284  ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
285  : NULL)
286 
287 /* Same as previous macro, but useful when we know that the buffer stack is not
288  * NULL or when we need an lvalue. For internal use only.
289  */
290 #define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
291 
292 void ael_yyrestart (FILE *input_file ,yyscan_t yyscanner );
293 void ael_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
294 YY_BUFFER_STATE ael_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner );
295 void ael_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
296 void ael_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
297 void ael_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
298 void ael_yypop_buffer_state (yyscan_t yyscanner );
299 
300 static void ael_yyensure_buffer_stack (yyscan_t yyscanner );
301 static void ael_yy_load_buffer_state (yyscan_t yyscanner );
302 static void ael_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );
303 
304 #define YY_FLUSH_BUFFER ael_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
305 
306 YY_BUFFER_STATE ael_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
307 YY_BUFFER_STATE ael_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
308 YY_BUFFER_STATE ael_yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
309 
310 void *ael_yyalloc (yy_size_t ,yyscan_t yyscanner );
311 void *ael_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
312 void ael_yyfree (void * ,yyscan_t yyscanner );
313 
314 #define yy_new_buffer ael_yy_create_buffer
315 
316 #define yy_set_interactive(is_interactive) \
317  { \
318  if ( ! YY_CURRENT_BUFFER ){ \
319  ael_yyensure_buffer_stack (yyscanner); \
320  YY_CURRENT_BUFFER_LVALUE = \
321  ael_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
322  } \
323  YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
324  }
325 
326 #define yy_set_bol(at_bol) \
327  { \
328  if ( ! YY_CURRENT_BUFFER ){\
329  ael_yyensure_buffer_stack (yyscanner); \
330  YY_CURRENT_BUFFER_LVALUE = \
331  ael_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
332  } \
333  YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
334  }
335 
336 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
337 
338 /* Begin user sect3 */
339 
340 #define ael_yywrap(n) 1
341 #define YY_SKIP_YYWRAP
342 
343 typedef unsigned char YY_CHAR;
344 
345 typedef int yy_state_type;
346 
347 #define yytext_ptr yytext_r
348 
349 static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
350 static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner);
351 static int yy_get_next_buffer (yyscan_t yyscanner );
352 static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
353 
354 /* Done after the current pattern has been matched and before the
355  * corresponding action - sets up yytext.
356  */
357 #define YY_DO_BEFORE_ACTION \
358  yyg->yytext_ptr = yy_bp; \
359  yyg->yytext_ptr -= yyg->yy_more_len; \
360  yyleng = (size_t) (yy_cp - yyg->yytext_ptr); \
361  yyg->yy_hold_char = *yy_cp; \
362  *yy_cp = '\0'; \
363  yyg->yy_c_buf_p = yy_cp;
364 
365 #define YY_NUM_RULES 76
366 #define YY_END_OF_BUFFER 77
367 /* This struct is not used in this scanner,
368  but its presence is necessary. */
369 struct yy_trans_info
370  {
371  flex_int32_t yy_verify;
373  };
375  { 0,
376  0, 0, 0, 0, 0, 0, 0, 0, 43, 43,
377  0, 0, 0, 0, 0, 0, 77, 75, 50, 48,
378  49, 51, 51, 51, 9, 3, 4, 7, 51, 8,
379  5, 6, 12, 75, 51, 51, 51, 51, 51, 51,
380  51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
381  1, 10, 2, 75, 65, 64, 75, 66, 75, 71,
382  72, 73, 75, 75, 67, 68, 69, 75, 70, 43,
383  44, 45, 75, 59, 60, 75, 58, 57, 52, 52,
384  57, 53, 75, 62, 63, 75, 61, 50, 49, 0,
385  51, 42, 13, 11, 0, 0, 0, 0, 0, 0,
386 
387  0, 0, 0, 0, 0, 0, 22, 0, 0, 0,
388  0, 0, 0, 0, 0, 0, 0, 0, 65, 64,
389  0, 66, 65, 64, 66, 0, 71, 72, 73, 0,
390  71, 72, 73, 0, 67, 68, 69, 0, 70, 67,
391  68, 69, 70, 43, 44, 45, 46, 45, 47, 0,
392  59, 60, 0, 58, 59, 60, 58, 56, 55, 54,
393  0, 62, 63, 0, 61, 62, 63, 61, 0, 13,
394  0, 0, 0, 0, 0, 0, 0, 0, 0, 33,
395  0, 0, 0, 51, 0, 0, 0, 0, 0, 0,
396  0, 0, 0, 0, 0, 0, 0, 0, 35, 0,
397 
398  0, 0, 27, 0, 0, 0, 28, 26, 0, 0,
399  0, 29, 0, 0, 0, 0, 0, 0, 0, 0,
400  0, 0, 31, 38, 0, 0, 0, 0, 0, 0,
401  0, 0, 0, 19, 17, 0, 0, 0, 0, 0,
402  34, 0, 0, 0, 0, 0, 0, 16, 0, 23,
403  0, 0, 0, 24, 0, 30, 21, 0, 0, 14,
404  0, 36, 0, 18, 0, 0, 37, 0, 51, 0,
405  15, 32, 0, 0, 41, 25, 39, 0, 40, 20,
406  0, 0, 74, 0
407  } ;
408 
410  { 0,
411  1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
412  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
413  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
414  1, 4, 5, 6, 7, 8, 1, 9, 5, 10,
415  11, 12, 5, 13, 5, 5, 14, 5, 5, 5,
416  5, 5, 5, 5, 5, 5, 5, 15, 16, 5,
417  17, 18, 1, 19, 5, 5, 5, 5, 5, 5,
418  5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
419  5, 5, 5, 20, 5, 5, 5, 5, 5, 5,
420  21, 22, 23, 1, 5, 1, 24, 25, 26, 27,
421 
422  28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
423  38, 39, 5, 40, 41, 42, 43, 5, 44, 45,
424  5, 5, 46, 47, 48, 1, 1, 49, 49, 49,
425  49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
426  49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
427  49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
428  49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
429  49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
430  49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
431  49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
432 
433  49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
434  49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
435  49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
436  49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
437  49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
438  49, 49, 49, 49, 49
439  } ;
440 
442  { 0,
443  1, 1, 2, 1, 3, 4, 3, 3, 1, 1,
444  1, 5, 1, 3, 1, 1, 1, 3, 1, 3,
445  3, 1, 3, 3, 3, 3, 3, 3, 3, 3,
446  3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
447  3, 3, 3, 3, 3, 1, 1, 1, 1
448  } ;
449 
451  { 0,
452  0, 0, 40, 43, 82, 121, 160, 199, 55, 56,
453  60, 74, 247, 296, 90, 104, 432, 1023, 429, 1023,
454  426, 1023, 397, 31, 1023, 1023, 1023, 1023, 43, 1023,
455  1023, 410, 1023, 0, 401, 382, 36, 389, 34, 378,
456  38, 380, 80, 368, 372, 385, 381, 66, 357, 369,
457  1023, 1023, 1023, 138, 1023, 1023, 143, 1023, 336, 1023,
458  1023, 1023, 375, 414, 1023, 1023, 1023, 453, 1023, 396,
459  1023, 104, 177, 1023, 1023, 182, 1023, 1023, 1023, 78,
460  0, 1023, 231, 1023, 1023, 262, 1023, 393, 390, 356,
461  1023, 1023, 0, 1023, 348, 360, 92, 350, 354, 337,
462 
463  333, 333, 333, 334, 329, 333, 344, 326, 335, 320,
464  327, 322, 299, 303, 93, 302, 301, 280, 1023, 1023,
465  314, 1023, 328, 344, 358, 492, 1023, 1023, 1023, 531,
466  570, 609, 648, 687, 1023, 1023, 1023, 726, 1023, 765,
467  804, 843, 882, 329, 1023, 143, 1023, 144, 1023, 392,
468  1023, 1023, 397, 1023, 431, 436, 470, 1023, 1023, 1023,
469  475, 1023, 1023, 484, 1023, 514, 523, 553, 305, 0,
470  288, 305, 299, 297, 280, 297, 292, 287, 289, 0,
471  291, 276, 250, 257, 250, 252, 247, 258, 241, 238,
472  251, 248, 232, 232, 236, 235, 228, 233, 0, 234,
473 
474  113, 218, 0, 217, 209, 220, 0, 0, 207, 200,
475  196, 0, 203, 199, 208, 197, 189, 193, 206, 203,
476  186, 203, 0, 0, 181, 187, 184, 192, 190, 181,
477  187, 186, 186, 0, 0, 171, 171, 160, 164, 166,
478  0, 169, 169, 152, 147, 143, 149, 0, 138, 0,
479  139, 149, 138, 0, 140, 0, 135, 134, 109, 0,
480  112, 0, 111, 0, 105, 80, 0, 82, 61, 76,
481  0, 0, 46, 30, 0, 0, 0, 170, 0, 0,
482  0, 50, 1023, 1023, 930, 935, 940, 945, 950, 955,
483  960, 965, 970, 975, 980, 985, 989, 994, 999, 1004,
484 
485  1009, 1012, 1017
486  } ;
487 
489  { 0,
490  284, 1, 285, 285, 286, 286, 287, 287, 288, 288,
491  289, 289, 290, 290, 291, 291, 284, 284, 284, 284,
492  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
493  284, 284, 284, 292, 284, 284, 284, 284, 284, 284,
494  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
495  284, 284, 284, 293, 284, 284, 293, 284, 294, 284,
496  284, 284, 294, 295, 284, 284, 284, 295, 284, 296,
497  284, 297, 298, 284, 284, 298, 284, 284, 284, 284,
498  299, 284, 300, 284, 284, 300, 284, 284, 284, 284,
499  284, 284, 301, 284, 284, 284, 284, 284, 284, 284,
500 
501  284, 284, 284, 284, 284, 284, 302, 284, 284, 284,
502  284, 284, 284, 284, 284, 284, 284, 293, 284, 284,
503  293, 284, 293, 293, 293, 294, 284, 284, 284, 294,
504  294, 294, 294, 295, 284, 284, 284, 295, 284, 295,
505  295, 295, 295, 296, 284, 297, 284, 297, 284, 298,
506  284, 284, 298, 284, 298, 298, 298, 284, 284, 284,
507  300, 284, 284, 300, 284, 300, 300, 300, 284, 301,
508  284, 284, 284, 284, 284, 284, 284, 284, 284, 302,
509  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
510  284, 284, 284, 284, 284, 284, 284, 284, 302, 284,
511 
512  284, 284, 302, 284, 284, 284, 302, 302, 284, 284,
513  284, 302, 284, 284, 284, 284, 284, 284, 284, 284,
514  284, 284, 302, 302, 284, 284, 284, 284, 284, 284,
515  284, 284, 284, 302, 302, 284, 284, 284, 284, 284,
516  302, 284, 284, 284, 284, 284, 284, 302, 284, 302,
517  284, 284, 284, 302, 284, 302, 302, 284, 284, 302,
518  284, 302, 284, 302, 284, 284, 302, 284, 284, 284,
519  302, 302, 284, 284, 302, 302, 302, 284, 302, 302,
520  303, 303, 284, 0, 284, 284, 284, 284, 284, 284,
521  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
522 
523  284, 284, 284
524  } ;
525 
527  { 0,
528  18, 19, 20, 21, 22, 22, 23, 24, 25, 26,
529  27, 22, 28, 29, 30, 31, 32, 22, 33, 22,
530  22, 34, 22, 35, 36, 37, 38, 39, 40, 41,
531  42, 43, 44, 22, 45, 46, 22, 22, 47, 48,
532  49, 22, 22, 50, 22, 51, 52, 53, 22, 55,
533  56, 91, 55, 56, 92, 283, 93, 71, 71, 97,
534  55, 57, 58, 55, 57, 58, 72, 72, 100, 74,
535  75, 280, 104, 98, 101, 105, 91, 278, 102, 278,
536  74, 76, 75, 74, 75, 55, 279, 58, 55, 114,
537  58, 60, 61, 115, 74, 76, 75, 62, 158, 84,
538 
539  85, 277, 60, 63, 61, 74, 147, 77, 107, 108,
540  84, 86, 87, 84, 85, 148, 109, 149, 276, 74,
541  275, 77, 192, 159, 84, 86, 87, 60, 274, 61,
542  60, 61, 173, 174, 193, 84, 62, 85, 273, 272,
543  225, 60, 63, 61, 226, 147, 147, 119, 120, 84,
544  271, 85, 123, 124, 284, 148, 284, 284, 119, 121,
545  122, 270, 269, 123, 121, 125, 60, 268, 61, 65,
546  66, 278, 67, 278, 267, 281, 266, 265, 264, 263,
547  65, 68, 69, 119, 262, 122, 151, 152, 123, 261,
548  125, 155, 156, 260, 259, 258, 257, 151, 153, 152,
549 
550  256, 255, 155, 153, 156, 65, 254, 69, 65, 66,
551  253, 67, 252, 251, 250, 249, 248, 247, 246, 65,
552  68, 69, 151, 245, 154, 244, 243, 155, 242, 157,
553  241, 240, 239, 238, 237, 236, 235, 234, 233, 232,
554  162, 163, 231, 230, 65, 229, 69, 78, 78, 78,
555  78, 162, 164, 165, 80, 78, 78, 78, 228, 78,
556  227, 78, 78, 78, 224, 78, 223, 222, 81, 221,
557  220, 166, 167, 219, 218, 217, 162, 216, 163, 215,
558  214, 213, 166, 164, 168, 212, 211, 210, 209, 119,
559  120, 208, 78, 78, 78, 82, 78, 78, 78, 78,
560 
561  119, 121, 122, 80, 78, 78, 78, 166, 78, 167,
562  78, 78, 78, 207, 78, 206, 205, 81, 204, 203,
563  202, 201, 200, 123, 124, 119, 199, 122, 198, 197,
564  196, 145, 195, 194, 123, 121, 125, 119, 120, 191,
565  190, 78, 78, 78, 82, 127, 128, 189, 119, 121,
566  122, 129, 188, 119, 120, 187, 127, 130, 128, 123,
567  186, 125, 185, 184, 119, 121, 122, 119, 120, 183,
568  182, 181, 180, 119, 179, 122, 178, 177, 119, 121,
569  122, 127, 176, 128, 131, 132, 175, 172, 171, 119,
570  133, 122, 169, 89, 88, 131, 130, 132, 145, 117,
571 
572  116, 151, 152, 119, 113, 122, 155, 156, 112, 111,
573  110, 106, 151, 153, 152, 103, 99, 155, 153, 156,
574  131, 96, 132, 135, 136, 95, 137, 94, 90, 89,
575  88, 284, 284, 284, 135, 138, 139, 151, 284, 154,
576  151, 152, 155, 284, 157, 151, 152, 284, 284, 284,
577  284, 151, 153, 152, 284, 284, 151, 153, 152, 135,
578  284, 139, 140, 141, 284, 142, 284, 284, 284, 284,
579  284, 284, 284, 140, 138, 143, 151, 284, 154, 151,
580  152, 151, 284, 154, 162, 163, 284, 284, 284, 284,
581  151, 153, 152, 166, 167, 162, 164, 165, 140, 284,
582 
583  143, 127, 128, 284, 166, 164, 168, 129, 284, 284,
584  284, 284, 127, 130, 128, 151, 284, 154, 284, 284,
585  162, 284, 163, 162, 163, 284, 284, 284, 284, 166,
586  284, 167, 162, 163, 162, 164, 165, 127, 284, 128,
587  131, 132, 284, 162, 164, 165, 133, 284, 284, 284,
588  284, 131, 130, 132, 284, 284, 284, 284, 284, 162,
589  284, 163, 162, 163, 284, 284, 284, 284, 162, 284,
590  163, 284, 284, 162, 164, 165, 131, 284, 132, 127,
591  128, 284, 284, 284, 284, 129, 284, 284, 284, 284,
592  127, 130, 128, 284, 284, 284, 284, 284, 162, 284,
593 
594  163, 284, 284, 284, 284, 284, 284, 284, 284, 284,
595  284, 284, 284, 284, 284, 127, 284, 128, 127, 128,
596  284, 284, 284, 284, 129, 284, 284, 284, 284, 127,
597  130, 128, 284, 284, 284, 284, 284, 284, 284, 284,
598  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
599  284, 284, 284, 284, 127, 284, 128, 127, 128, 284,
600  284, 284, 284, 129, 284, 284, 284, 284, 127, 130,
601  128, 284, 284, 284, 284, 284, 284, 284, 284, 284,
602  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
603  284, 284, 284, 127, 284, 128, 135, 136, 284, 137,
604 
605  284, 284, 284, 284, 284, 284, 284, 135, 138, 139,
606  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
607  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
608  284, 284, 135, 284, 139, 140, 141, 284, 142, 284,
609  284, 284, 284, 284, 284, 284, 140, 138, 143, 284,
610  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
611  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
612  284, 140, 284, 143, 135, 136, 284, 137, 284, 284,
613  284, 284, 284, 284, 284, 135, 138, 139, 284, 284,
614  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
615 
616  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
617  135, 284, 139, 135, 136, 284, 137, 284, 284, 284,
618  284, 284, 284, 284, 135, 138, 139, 284, 284, 284,
619  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
620  284, 284, 284, 284, 284, 284, 284, 284, 284, 135,
621  284, 139, 135, 136, 284, 137, 284, 284, 284, 284,
622  284, 284, 284, 135, 138, 139, 284, 284, 284, 284,
623  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
624  284, 284, 284, 284, 284, 284, 284, 284, 135, 284,
625  139, 135, 136, 284, 137, 284, 284, 284, 284, 284,
626 
627  284, 284, 135, 138, 139, 284, 284, 284, 284, 284,
628  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
629  284, 284, 284, 284, 284, 284, 284, 135, 284, 139,
630  54, 54, 54, 54, 54, 59, 59, 59, 59, 59,
631  64, 64, 64, 64, 64, 70, 70, 70, 70, 70,
632  73, 73, 73, 73, 73, 79, 79, 79, 79, 79,
633  83, 83, 83, 83, 83, 91, 284, 91, 91, 91,
634  118, 118, 118, 118, 118, 126, 126, 126, 126, 126,
635  134, 134, 134, 134, 134, 144, 144, 144, 144, 146,
636  146, 146, 146, 146, 150, 150, 150, 150, 150, 160,
637 
638  284, 160, 160, 160, 161, 161, 161, 161, 161, 170,
639  284, 170, 170, 170, 91, 91, 91, 282, 282, 282,
640  284, 282, 17, 284, 284, 284, 284, 284, 284, 284,
641  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
642  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
643  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
644  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
645  284, 284
646  } ;
647 
649  { 0,
650  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
651  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
652  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
653  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
654  1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
655  3, 24, 4, 4, 29, 282, 29, 9, 10, 37,
656  3, 3, 3, 4, 4, 4, 9, 10, 39, 11,
657  11, 274, 41, 37, 39, 41, 24, 270, 39, 270,
658  11, 11, 11, 12, 12, 3, 273, 3, 4, 48,
659  4, 5, 5, 48, 12, 12, 12, 5, 80, 15,
660 
661  15, 269, 5, 5, 5, 11, 72, 11, 43, 43,
662  15, 15, 15, 16, 16, 72, 43, 72, 268, 12,
663  266, 12, 115, 80, 16, 16, 16, 5, 265, 5,
664  6, 6, 97, 97, 115, 15, 6, 15, 263, 261,
665  201, 6, 6, 6, 201, 146, 148, 54, 54, 16,
666  259, 16, 57, 57, 146, 148, 146, 148, 54, 54,
667  54, 258, 257, 57, 57, 57, 6, 255, 6, 7,
668  7, 278, 7, 278, 253, 278, 252, 251, 249, 247,
669  7, 7, 7, 54, 246, 54, 73, 73, 57, 245,
670  57, 76, 76, 244, 243, 242, 240, 73, 73, 73,
671 
672  239, 238, 76, 76, 76, 7, 237, 7, 8, 8,
673  236, 8, 233, 232, 231, 230, 229, 228, 227, 8,
674  8, 8, 73, 226, 73, 225, 222, 76, 221, 76,
675  220, 219, 218, 217, 216, 215, 214, 213, 211, 210,
676  83, 83, 209, 206, 8, 205, 8, 13, 13, 13,
677  13, 83, 83, 83, 13, 13, 13, 13, 204, 13,
678  202, 13, 13, 13, 200, 13, 198, 197, 13, 196,
679  195, 86, 86, 194, 193, 192, 83, 191, 83, 190,
680  189, 188, 86, 86, 86, 187, 186, 185, 184, 118,
681  118, 183, 13, 13, 13, 13, 14, 14, 14, 14,
682 
683  118, 118, 118, 14, 14, 14, 14, 86, 14, 86,
684  14, 14, 14, 182, 14, 181, 179, 14, 178, 177,
685  176, 175, 174, 121, 121, 118, 173, 118, 172, 171,
686  169, 144, 117, 116, 121, 121, 121, 123, 123, 114,
687  113, 14, 14, 14, 14, 59, 59, 112, 123, 123,
688  123, 59, 111, 124, 124, 110, 59, 59, 59, 121,
689  109, 121, 108, 107, 124, 124, 124, 125, 125, 106,
690  105, 104, 103, 123, 102, 123, 101, 100, 125, 125,
691  125, 59, 99, 59, 63, 63, 98, 96, 95, 124,
692  63, 124, 90, 89, 88, 63, 63, 63, 70, 50,
693 
694  49, 150, 150, 125, 47, 125, 153, 153, 46, 45,
695  44, 42, 150, 150, 150, 40, 38, 153, 153, 153,
696  63, 36, 63, 64, 64, 35, 64, 32, 23, 21,
697  19, 17, 0, 0, 64, 64, 64, 150, 0, 150,
698  155, 155, 153, 0, 153, 156, 156, 0, 0, 0,
699  0, 155, 155, 155, 0, 0, 156, 156, 156, 64,
700  0, 64, 68, 68, 0, 68, 0, 0, 0, 0,
701  0, 0, 0, 68, 68, 68, 155, 0, 155, 157,
702  157, 156, 0, 156, 161, 161, 0, 0, 0, 0,
703  157, 157, 157, 164, 164, 161, 161, 161, 68, 0,
704 
705  68, 126, 126, 0, 164, 164, 164, 126, 0, 0,
706  0, 0, 126, 126, 126, 157, 0, 157, 0, 0,
707  161, 0, 161, 166, 166, 0, 0, 0, 0, 164,
708  0, 164, 167, 167, 166, 166, 166, 126, 0, 126,
709  130, 130, 0, 167, 167, 167, 130, 0, 0, 0,
710  0, 130, 130, 130, 0, 0, 0, 0, 0, 166,
711  0, 166, 168, 168, 0, 0, 0, 0, 167, 0,
712  167, 0, 0, 168, 168, 168, 130, 0, 130, 131,
713  131, 0, 0, 0, 0, 131, 0, 0, 0, 0,
714  131, 131, 131, 0, 0, 0, 0, 0, 168, 0,
715 
716  168, 0, 0, 0, 0, 0, 0, 0, 0, 0,
717  0, 0, 0, 0, 0, 131, 0, 131, 132, 132,
718  0, 0, 0, 0, 132, 0, 0, 0, 0, 132,
719  132, 132, 0, 0, 0, 0, 0, 0, 0, 0,
720  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
721  0, 0, 0, 0, 132, 0, 132, 133, 133, 0,
722  0, 0, 0, 133, 0, 0, 0, 0, 133, 133,
723  133, 0, 0, 0, 0, 0, 0, 0, 0, 0,
724  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
725  0, 0, 0, 133, 0, 133, 134, 134, 0, 134,
726 
727  0, 0, 0, 0, 0, 0, 0, 134, 134, 134,
728  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
729  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
730  0, 0, 134, 0, 134, 138, 138, 0, 138, 0,
731  0, 0, 0, 0, 0, 0, 138, 138, 138, 0,
732  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
733  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
734  0, 138, 0, 138, 140, 140, 0, 140, 0, 0,
735  0, 0, 0, 0, 0, 140, 140, 140, 0, 0,
736  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
737 
738  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
739  140, 0, 140, 141, 141, 0, 141, 0, 0, 0,
740  0, 0, 0, 0, 141, 141, 141, 0, 0, 0,
741  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
742  0, 0, 0, 0, 0, 0, 0, 0, 0, 141,
743  0, 141, 142, 142, 0, 142, 0, 0, 0, 0,
744  0, 0, 0, 142, 142, 142, 0, 0, 0, 0,
745  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
746  0, 0, 0, 0, 0, 0, 0, 0, 142, 0,
747  142, 143, 143, 0, 143, 0, 0, 0, 0, 0,
748 
749  0, 0, 143, 143, 143, 0, 0, 0, 0, 0,
750  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
751  0, 0, 0, 0, 0, 0, 0, 143, 0, 143,
752  285, 285, 285, 285, 285, 286, 286, 286, 286, 286,
753  287, 287, 287, 287, 287, 288, 288, 288, 288, 288,
754  289, 289, 289, 289, 289, 290, 290, 290, 290, 290,
755  291, 291, 291, 291, 291, 292, 0, 292, 292, 292,
756  293, 293, 293, 293, 293, 294, 294, 294, 294, 294,
757  295, 295, 295, 295, 295, 296, 296, 296, 296, 297,
758  297, 297, 297, 297, 298, 298, 298, 298, 298, 299,
759 
760  0, 299, 299, 299, 300, 300, 300, 300, 300, 301,
761  0, 301, 301, 301, 302, 302, 302, 303, 303, 303,
762  0, 303, 284, 284, 284, 284, 284, 284, 284, 284,
763  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
764  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
765  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
766  284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
767  284, 284
768  } ;
769 
770 /* The intent behind this definition is that it'll catch
771  * any uses of REJECT which flex missed.
772  */
773 #define REJECT reject_used_but_not_detected
774 #define yymore() (yyg->yy_more_flag = 1)
775 #define YY_MORE_ADJ yyg->yy_more_len
776 #define YY_RESTORE_YY_MORE_OFFSET
777 #line 1 "ael.flex"
778 /*
779  * Asterisk -- An open source telephony toolkit.
780  *
781  * Copyright (C) 2006, Digium, Inc.
782  *
783  * Steve Murphy <[email protected]>
784  *
785  * See http://www.asterisk.org for more information about
786  * the Asterisk project. Please do not directly contact
787  * any of the maintainers of this project for assistance;
788  * the project provides a web site, mailing lists and IRC
789  * channels for your use.
790  *
791  * This program is free software, distributed under the terms of
792  * the GNU General Public License Version 2. See the LICENSE file
793  * at the top of the source tree.
794  */
795 /*! \file
796  *
797  * \brief Flex scanner description of tokens used in AEL2 .
798  *
799  */
800 /*
801  * Start with flex options:
802  *
803  * %x describes the contexts we have: paren, semic and argg, plus INITIAL
804  */
805 
806 /* prefix used for various globally-visible functions and variables.
807  * This renames also ael_yywrap, but since we do not use it, we just
808  * add option noyywrap to remove it.
809  */
810 /* I specify this option to suppress flex generating code with ECHO
811  in it. This generates compiler warnings in some systems; We've
812  seen the fwrite generate Unused variable warnings with 4.1.2 gcc.
813  Some systems have tweaked flex ECHO macro to keep the compiler
814  happy. To keep the warning message from getting output, I added
815  a default rule at the end of the patterns section */
816 /* ael_yyfree normally just frees its arg. It can be null sometimes,
817  which some systems will complain about, so, we'll define our own version */
818 /* batch gives a bit more performance if we are using it in
819  * a non-interactive mode. We probably don't care much.
820  */
821 /* outfile is the filename to be used instead of lex.yy.c */
822 /*
823  * These are not supported in flex 2.5.4, but we need them
824  * at the moment:
825  * reentrant produces a thread-safe parser. Not 100% sure that
826  * we require it, though.
827  * bison-bridge passes an additional yylval argument to ael_yylex().
828  * bison-locations is probably not needed.
829  */
830 #line 71 "ael.flex"
831 #include "asterisk.h"
832 
833 #include <sys/types.h>
834 #include <sys/stat.h>
835 #include <unistd.h>
836 #include <glob.h>
837 
838 #if !defined(GLOB_ABORTED)
839 #define GLOB_ABORTED GLOB_ABEND
840 #endif
841 #if !defined(GLOB_BRACE)
842 #define GLOB_BRACE 0
843 #endif
844 #if !defined(GLOB_NOMAGIC)
845 #define GLOB_NOMAGIC 0
846 #endif
847 
848 #include "asterisk/logger.h"
849 #include "asterisk/utils.h"
850 #include "asterisk/lock.h"
851 #include "asterisk/hashtab.h"
852 #include "ael/ael.tab.h"
853 #include "asterisk/ael_structs.h"
854 
855 /*
856  * A stack to keep track of matching brackets ( [ { } ] )
857  */
858 static char pbcstack[400]; /* XXX missing size checks */
859 static int pbcpos = 0;
860 static void pbcpush(char x);
861 static int pbcpop(char x);
862 static int parencount = 0;
863 
864 /*
865  * A similar stack to keep track of matching brackets ( [ { } ] ) in word tokens surrounded by ${ ... }
866  */
867 static char pbcstack2[400]; /* XXX missing size checks */
868 static int pbcpos2 = 0;
869 static void pbcpush2(char x);
870 static int pbcpop2(char x);
871 static int parencount2 = 0;
872 
873 /*
874  * A similar stack to keep track of matching brackets ( [ { } ] ) in word tokens surrounded by $[ ... ]
875  */
876 static char pbcstack3[400]; /* XXX missing size checks */
877 static int pbcpos3 = 0;
878 static void pbcpush3(char x);
879 static int pbcpop3(char x);
880 static int parencount3 = 0;
881 
882 
883 /*
884  * current line, column and filename, updated as we read the input.
885  */
886 static int my_lineno = 1; /* current line in the source */
887 static int my_col = 1; /* current column in the source */
888 char *my_file = 0; /* used also in the bison code */
889 char *prev_word; /* XXX document it */
890 
891 #define MAX_INCLUDE_DEPTH 50
892 
893 /*
894  * flex is not too smart, and generates global functions
895  * without prototypes so the compiler may complain.
896  * To avoid that, we declare the prototypes here,
897  * even though these functions are not used.
898  */
899 int ael_yyget_column (yyscan_t yyscanner);
900 void ael_yyset_column (int column_no , yyscan_t yyscanner);
901 
902 int ael_yyparse (struct parse_io *);
903 
904 /*
905  * A stack to process include files.
906  * As we switch into the new file we need to store the previous
907  * state to restore it later.
908  */
909 struct stackelement {
910  char *fname;
911  int lineno;
912  int colno;
913  glob_t globbuf; /* the current globbuf */
914  int globbuf_pos; /* where we are in the current globbuf */
915  YY_BUFFER_STATE bufstate;
916 };
917 
919 static int include_stack_index = 0;
920 static void setup_filestack(char *fnamebuf, int fnamebuf_siz, glob_t *globbuf, int globpos, yyscan_t xscan, int create);
921 
922 /*
923  * if we use the @n feature of bison, we must supply the start/end
924  * location of tokens in the structure pointed by yylloc.
925  * Simple tokens are just assumed to be on the same line, so
926  * the line number is constant, and the column is incremented
927  * by the length of the token.
928  */
929 #ifdef FLEX_BETA /* set for 2.5.33 */
930 
931 /* compute the total number of lines and columns in the text
932  * passed as argument.
933  */
934 static void pbcwhere(const char *text, int *line, int *col )
935 {
936  int loc_line = *line;
937  int loc_col = *col;
938  char c;
939  while ( (c = *text++) ) {
940  if ( c == '\t' ) {
941  loc_col += 8 - (loc_col % 8);
942  } else if ( c == '\n' ) {
943  loc_line++;
944  loc_col = 1;
945  } else
946  loc_col++;
947  }
948  *line = loc_line;
949  *col = loc_col;
950 }
951 
952 #define STORE_POS do { \
953  yylloc->first_line = yylloc->last_line = my_lineno; \
954  yylloc->first_column=my_col; \
955  yylloc->last_column=my_col+yyleng-1; \
956  my_col+=yyleng; \
957  } while (0)
958 
959 #define STORE_LOC do { \
960  yylloc->first_line = my_lineno; \
961  yylloc->first_column=my_col; \
962  pbcwhere(yytext, &my_lineno, &my_col); \
963  yylloc->last_line = my_lineno; \
964  yylloc->last_column = my_col - 1; \
965  } while (0)
966 #else
967 #define STORE_POS
968 #define STORE_LOC
969 #endif
970 #line 963 "ael_lex.c"
971 
972 #define INITIAL 0
973 #define paren 1
974 #define semic 2
975 #define argg 3
976 #define comment 4
977 #define curlystate 5
978 #define wordstate 6
979 #define brackstate 7
980 
981 #ifndef YY_NO_UNISTD_H
982 /* Special case for "unistd.h", since it is non-ANSI. We include it way
983  * down here because we want the user's section 1 to have been scanned first.
984  * The user has a chance to override it with an option.
985  */
986 #include <unistd.h>
987 #endif
988 
989 #ifndef YY_EXTRA_TYPE
990 #define YY_EXTRA_TYPE void *
991 #endif
992 
993 /* Holds the entire state of the reentrant scanner. */
994 struct yyguts_t
995  {
996 
997  /* User-defined. Not touched by flex. */
998  YY_EXTRA_TYPE yyextra_r;
999 
1000  /* The rest are the same as the globals declared in the non-reentrant scanner. */
1001  FILE *yyin_r, *yyout_r;
1002  size_t yy_buffer_stack_top; /**< index of top of stack. */
1003  size_t yy_buffer_stack_max; /**< capacity of stack. */
1004  YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
1005  char yy_hold_char;
1006  int yy_n_chars;
1007  int yyleng_r;
1008  char *yy_c_buf_p;
1009  int yy_init;
1010  int yy_start;
1011  int yy_did_buffer_switch_on_eof;
1012  int yy_start_stack_ptr;
1013  int yy_start_stack_depth;
1014  int *yy_start_stack;
1015  yy_state_type yy_last_accepting_state;
1016  char* yy_last_accepting_cpos;
1017 
1018  int yylineno_r;
1019  int yy_flex_debug_r;
1020 
1021  char *yytext_r;
1022  int yy_more_flag;
1023  int yy_more_len;
1024 
1025  YYSTYPE * yylval_r;
1026 
1027  YYLTYPE * yylloc_r;
1028 
1029  }; /* end struct yyguts_t */
1030 
1031 static int yy_init_globals (yyscan_t yyscanner );
1032 
1033  /* This must go here because YYSTYPE and YYLTYPE are included
1034  * from bison output in section 1.*/
1035  # define yylval yyg->yylval_r
1036 
1037  # define yylloc yyg->yylloc_r
1038 
1039 int ael_yylex_init (yyscan_t* scanner);
1040 
1041 int ael_yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
1042 
1043 /* Accessor methods to globals.
1044  These are made visible to non-reentrant scanners for convenience. */
1045 
1046 int ael_yylex_destroy (yyscan_t yyscanner );
1047 
1048 int ael_yyget_debug (yyscan_t yyscanner );
1049 
1050 void ael_yyset_debug (int debug_flag ,yyscan_t yyscanner );
1051 
1053 
1054 void ael_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
1055 
1056 FILE *ael_yyget_in (yyscan_t yyscanner );
1057 
1058 void ael_yyset_in (FILE * in_str ,yyscan_t yyscanner );
1059 
1060 FILE *ael_yyget_out (yyscan_t yyscanner );
1061 
1062 void ael_yyset_out (FILE * out_str ,yyscan_t yyscanner );
1063 
1064 int ael_yyget_leng (yyscan_t yyscanner );
1065 
1066 char *ael_yyget_text (yyscan_t yyscanner );
1067 
1068 int ael_yyget_lineno (yyscan_t yyscanner );
1069 
1070 void ael_yyset_lineno (int line_number ,yyscan_t yyscanner );
1071 
1072 YYSTYPE * ael_yyget_lval (yyscan_t yyscanner );
1073 
1074 void ael_yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
1075 
1076  YYLTYPE *ael_yyget_lloc (yyscan_t yyscanner );
1077 
1078  void ael_yyset_lloc (YYLTYPE * yylloc_param ,yyscan_t yyscanner );
1079 
1080 /* Macros after this point can all be overridden by user definitions in
1081  * section 1.
1082  */
1083 
1084 #ifndef YY_SKIP_YYWRAP
1085 #ifdef __cplusplus
1086 extern "C" int ael_yywrap (yyscan_t yyscanner );
1087 #else
1088 extern int ael_yywrap (yyscan_t yyscanner );
1089 #endif
1090 #endif
1091 
1092  static void yyunput (int c,char *buf_ptr ,yyscan_t yyscanner);
1093 
1094 #ifndef yytext_ptr
1095 static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
1096 #endif
1097 
1098 #ifdef YY_NEED_STRLEN
1099 static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
1100 #endif
1101 
1102 #ifndef YY_NO_INPUT
1103 
1104 #ifdef __cplusplus
1105 static int yyinput (yyscan_t yyscanner );
1106 #else
1107 static int input (yyscan_t yyscanner );
1108 #endif
1109 
1110 #endif
1111 
1112 /* Amount of stuff to slurp up with each read. */
1113 #ifndef YY_READ_BUF_SIZE
1114 #ifdef __ia64__
1115 /* On IA-64, the buffer size is 16k, not 8k */
1116 #define YY_READ_BUF_SIZE 16384
1117 #else
1118 #define YY_READ_BUF_SIZE 8192
1119 #endif /* __ia64__ */
1120 #endif
1121 
1122 /* Copy whatever the last rule matched to the standard output. */
1123 #ifndef ECHO
1124 /* This used to be an fputs(), but since the string might contain NUL's,
1125  * we now use fwrite().
1126  */
1127 #define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
1128 #endif
1129 
1130 /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
1131  * is returned in "result".
1132  */
1133 #ifndef YY_INPUT
1134 #define YY_INPUT(buf,result,max_size) \
1135  if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
1136  { \
1137  int c = '*'; \
1138  size_t n; \
1139  for ( n = 0; n < max_size && \
1140  (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
1141  buf[n] = (char) c; \
1142  if ( c == '\n' ) \
1143  buf[n++] = (char) c; \
1144  if ( c == EOF && ferror( yyin ) ) \
1145  YY_FATAL_ERROR( "input in flex scanner failed" ); \
1146  result = n; \
1147  } \
1148  else \
1149  { \
1150  errno=0; \
1151  while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
1152  { \
1153  if( errno != EINTR) \
1154  { \
1155  YY_FATAL_ERROR( "input in flex scanner failed" ); \
1156  break; \
1157  } \
1158  errno=0; \
1159  clearerr(yyin); \
1160  } \
1161  }\
1162 \
1163 
1164 #endif
1165 
1166 /* No semi-colon after return; correct usage is to write "yyterminate();" -
1167  * we don't want an extra ';' after the "return" because that will cause
1168  * some compilers to complain about unreachable statements.
1169  */
1170 #ifndef yyterminate
1171 #define yyterminate() return YY_NULL
1172 #endif
1173 
1174 /* Number of entries by which start-condition stack grows. */
1175 #ifndef YY_START_STACK_INCR
1176 #define YY_START_STACK_INCR 25
1177 #endif
1178 
1179 /* Report a fatal error. */
1180 #ifndef YY_FATAL_ERROR
1181 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
1182 #endif
1183 
1184 /* end tables serialization structures and prototypes */
1185 
1186 /* Default declaration of generated scanner - a define so the user can
1187  * easily add parameters.
1188  */
1189 #ifndef YY_DECL
1190 #define YY_DECL_IS_OURS 1
1191 
1192 extern int ael_yylex \
1193  (YYSTYPE * yylval_param,YYLTYPE * yylloc_param ,yyscan_t yyscanner);
1194 
1195 #define YY_DECL int ael_yylex \
1196  (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner)
1197 #endif /* !YY_DECL */
1198 
1199 /* Code executed at the beginning of each rule, after yytext and yyleng
1200  * have been set up.
1201  */
1202 #ifndef YY_USER_ACTION
1203 #define YY_USER_ACTION
1204 #endif
1205 
1206 /* Code executed at the end of each rule. */
1207 #ifndef YY_BREAK
1208 #define YY_BREAK break;
1209 #endif
1210 
1211 #define YY_RULE_SETUP \
1212  YY_USER_ACTION
1213 
1214 /** The main scanner function which does all the work.
1215  */
1216 YY_DECL
1218  register yy_state_type yy_current_state;
1219  register char *yy_cp, *yy_bp;
1220  register int yy_act;
1221  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
1222 
1223 #line 217 "ael.flex"
1224 
1225 
1226 #line 1219 "ael_lex.c"
1227 
1228  yylval = yylval_param;
1229 
1230  yylloc = yylloc_param;
1231 
1232  if ( !yyg->yy_init )
1233  {
1234  yyg->yy_init = 1;
1235 
1236 #ifdef YY_USER_INIT
1237  YY_USER_INIT;
1238 #endif
1239 
1240  if ( ! yyg->yy_start )
1241  yyg->yy_start = 1; /* first start state */
1242 
1243  if ( ! yyin )
1244  yyin = stdin;
1245 
1246  if ( ! yyout )
1247  yyout = stdout;
1248 
1249  if ( ! YY_CURRENT_BUFFER ) {
1250  ael_yyensure_buffer_stack (yyscanner);
1253  }
1254 
1255  ael_yy_load_buffer_state(yyscanner );
1256  }
1257 
1258  while ( 1 ) /* loops until end-of-file is reached */
1259  {
1260  yyg->yy_more_len = 0;
1261  if ( yyg->yy_more_flag )
1262  {
1263  yyg->yy_more_len = yyg->yy_c_buf_p - yyg->yytext_ptr;
1264  yyg->yy_more_flag = 0;
1265  }
1266  yy_cp = yyg->yy_c_buf_p;
1267 
1268  /* Support of yytext. */
1269  *yy_cp = yyg->yy_hold_char;
1270 
1271  /* yy_bp points to the position in yy_ch_buf of the start of
1272  * the current run.
1273  */
1274  yy_bp = yy_cp;
1275 
1276  yy_current_state = yyg->yy_start;
1277 yy_match:
1278  do
1279  {
1280  register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
1281  if ( yy_accept[yy_current_state] )
1282  {
1283  yyg->yy_last_accepting_state = yy_current_state;
1285  }
1286  while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1287  {
1288  yy_current_state = (int) yy_def[yy_current_state];
1289  if ( yy_current_state >= 285 )
1290  yy_c = yy_meta[(unsigned int) yy_c];
1291  }
1292  yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1293  ++yy_cp;
1294  }
1295  while ( yy_current_state != 284 );
1296  yy_cp = yyg->yy_last_accepting_cpos;
1297  yy_current_state = yyg->yy_last_accepting_state;
1298 
1299 yy_find_action:
1300  yy_act = yy_accept[yy_current_state];
1301 
1303 
1304 do_action: /* This label is used only to access EOF actions. */
1305 
1306  switch ( yy_act )
1307  { /* beginning of action switch */
1308  case 0: /* must back up */
1309  /* undo the effects of YY_DO_BEFORE_ACTION */
1310  *yy_cp = yyg->yy_hold_char;
1311  yy_cp = yyg->yy_last_accepting_cpos;
1312  yy_current_state = yyg->yy_last_accepting_state;
1313  goto yy_find_action;
1314 
1315 case 1:
1317 #line 219 "ael.flex"
1318 { STORE_POS; return LC;}
1319  YY_BREAK
1320 case 2:
1322 #line 220 "ael.flex"
1323 { STORE_POS; return RC;}
1324  YY_BREAK
1325 case 3:
1327 #line 221 "ael.flex"
1328 { STORE_POS; return LP;}
1329  YY_BREAK
1330 case 4:
1332 #line 222 "ael.flex"
1333 { STORE_POS; return RP;}
1334  YY_BREAK
1335 case 5:
1337 #line 223 "ael.flex"
1338 { STORE_POS; return SEMI;}
1339  YY_BREAK
1340 case 6:
1342 #line 224 "ael.flex"
1343 { STORE_POS; return EQ;}
1344  YY_BREAK
1345 case 7:
1347 #line 225 "ael.flex"
1348 { STORE_POS; return COMMA;}
1349  YY_BREAK
1350 case 8:
1352 #line 226 "ael.flex"
1353 { STORE_POS; return COLON;}
1354  YY_BREAK
1355 case 9:
1357 #line 227 "ael.flex"
1358 { STORE_POS; return AMPER;}
1359  YY_BREAK
1360 case 10:
1362 #line 228 "ael.flex"
1363 { STORE_POS; return BAR;}
1364  YY_BREAK
1365 case 11:
1367 #line 229 "ael.flex"
1368 { STORE_POS; return EXTENMARK;}
1369  YY_BREAK
1370 case 12:
1372 #line 230 "ael.flex"
1373 { STORE_POS; return AT;}
1374  YY_BREAK
1375 case 13:
1377 #line 231 "ael.flex"
1378 {/*comment*/}
1379  YY_BREAK
1380 case 14:
1382 #line 232 "ael.flex"
1383 { STORE_POS; return KW_CONTEXT;}
1384  YY_BREAK
1385 case 15:
1387 #line 233 "ael.flex"
1388 { STORE_POS; return KW_ABSTRACT;}
1389  YY_BREAK
1390 case 16:
1392 #line 234 "ael.flex"
1393 { STORE_POS; return KW_EXTEND;}
1394  YY_BREAK
1395 case 17:
1397 #line 235 "ael.flex"
1398 { STORE_POS; return KW_MACRO;};
1399  YY_BREAK
1400 case 18:
1402 #line 236 "ael.flex"
1403 { STORE_POS; return KW_GLOBALS;}
1404  YY_BREAK
1405 case 19:
1407 #line 237 "ael.flex"
1408 { STORE_POS; return KW_LOCAL;}
1409  YY_BREAK
1410 case 20:
1412 #line 238 "ael.flex"
1413 { STORE_POS; return KW_IGNOREPAT;}
1414  YY_BREAK
1415 case 21:
1417 #line 239 "ael.flex"
1418 { STORE_POS; return KW_SWITCH;}
1419  YY_BREAK
1420 case 22:
1422 #line 240 "ael.flex"
1423 { STORE_POS; return KW_IF;}
1424  YY_BREAK
1425 case 23:
1427 #line 241 "ael.flex"
1428 { STORE_POS; return KW_IFTIME;}
1429  YY_BREAK
1430 case 24:
1432 #line 242 "ael.flex"
1433 { STORE_POS; return KW_RANDOM;}
1434  YY_BREAK
1435 case 25:
1437 #line 243 "ael.flex"
1438 { STORE_POS; return KW_REGEXTEN;}
1439  YY_BREAK
1440 case 26:
1442 #line 244 "ael.flex"
1443 { STORE_POS; return KW_HINT;}
1444  YY_BREAK
1445 case 27:
1447 #line 245 "ael.flex"
1448 { STORE_POS; return KW_ELSE;}
1449  YY_BREAK
1450 case 28:
1452 #line 246 "ael.flex"
1453 { STORE_POS; return KW_GOTO;}
1454  YY_BREAK
1455 case 29:
1457 #line 247 "ael.flex"
1458 { STORE_POS; return KW_JUMP;}
1459  YY_BREAK
1460 case 30:
1462 #line 248 "ael.flex"
1463 { STORE_POS; return KW_RETURN;}
1464  YY_BREAK
1465 case 31:
1467 #line 249 "ael.flex"
1468 { STORE_POS; return KW_BREAK;}
1469  YY_BREAK
1470 case 32:
1472 #line 250 "ael.flex"
1473 { STORE_POS; return KW_CONTINUE;}
1474  YY_BREAK
1475 case 33:
1477 #line 251 "ael.flex"
1478 { STORE_POS; return KW_FOR;}
1479  YY_BREAK
1480 case 34:
1482 #line 252 "ael.flex"
1483 { STORE_POS; return KW_WHILE;}
1484  YY_BREAK
1485 case 35:
1487 #line 253 "ael.flex"
1488 { STORE_POS; return KW_CASE;}
1489  YY_BREAK
1490 case 36:
1492 #line 254 "ael.flex"
1493 { STORE_POS; return KW_DEFAULT;}
1494  YY_BREAK
1495 case 37:
1497 #line 255 "ael.flex"
1498 { STORE_POS; return KW_PATTERN;}
1499  YY_BREAK
1500 case 38:
1502 #line 256 "ael.flex"
1503 { STORE_POS; return KW_CATCH;}
1504  YY_BREAK
1505 case 39:
1507 #line 257 "ael.flex"
1508 { STORE_POS; return KW_SWITCHES;}
1509  YY_BREAK
1510 case 40:
1512 #line 258 "ael.flex"
1513 { STORE_POS; return KW_ESWITCHES;}
1514  YY_BREAK
1515 case 41:
1517 #line 259 "ael.flex"
1518 { STORE_POS; return KW_INCLUDES;}
1519  YY_BREAK
1520 case 42:
1522 #line 260 "ael.flex"
1523 { BEGIN(comment); my_col += 2; }
1524  YY_BREAK
1525 case 43:
1527 #line 262 "ael.flex"
1528 { my_col += yyleng; }
1529  YY_BREAK
1530 case 44:
1531 /* rule 44 can match eol */
1533 #line 263 "ael.flex"
1534 { ++my_lineno; my_col=1;}
1535  YY_BREAK
1536 case 45:
1538 #line 264 "ael.flex"
1539 { my_col += yyleng; }
1540  YY_BREAK
1541 case 46:
1542 /* rule 46 can match eol */
1544 #line 265 "ael.flex"
1545 { ++my_lineno; my_col=1;}
1546  YY_BREAK
1547 case 47:
1549 #line 266 "ael.flex"
1550 { my_col += 2; BEGIN(INITIAL); } /* the nice thing about comments is that you know exactly what ends them */
1551  YY_BREAK
1552 case 48:
1553 /* rule 48 can match eol */
1555 #line 268 "ael.flex"
1556 { my_lineno++; my_col = 1; }
1557  YY_BREAK
1558 case 49:
1560 #line 269 "ael.flex"
1561 { my_col += yyleng; }
1562  YY_BREAK
1563 case 50:
1565 #line 270 "ael.flex"
1566 { my_col += (yyleng*8)-(my_col%8); }
1567  YY_BREAK
1568 case 51:
1570 #line 272 "ael.flex"
1571 {
1572  /* boy did I open a can of worms when I changed the lexical token "word".
1573  all the above keywords can be used as a beginning to a "word".-
1574  before, a "word" would match a longer sequence than the above
1575  keywords, and all would be well. But now "word" is a single char
1576  and feeds into a statemachine sort of sequence from there on. So...
1577  I added the {KEYWORD}? to the beginning of the word match sequence */
1578 
1579  if (!strcmp(yytext,"${")) {
1580  parencount2 = 0;
1581  pbcpos2 = 0;
1582  pbcpush2('{'); /* push '{' so the last pcbpop (parencount2 = -1) will succeed */
1583  BEGIN(curlystate);
1584  yymore();
1585  } else if (!strcmp(yytext,"$[")) {
1586  parencount3 = 0;
1587  pbcpos3 = 0;
1588  pbcpush3('['); /* push '[' so the last pcbpop (parencount3 = -1) will succeed */
1589  BEGIN(brackstate);
1590  yymore();
1591  } else {
1592  BEGIN(wordstate);
1593  yymore();
1594  }
1595  }
1596  YY_BREAK
1597 case 52:
1599 #line 298 "ael.flex"
1600 { yymore(); /* Keep going */ }
1601  YY_BREAK
1602 case 53:
1604 #line 299 "ael.flex"
1605 { yymore(); /* Keep going */ }
1606  YY_BREAK
1607 case 54:
1609 #line 300 "ael.flex"
1610 { yymore(); /* Keep Going */ }
1611  YY_BREAK
1612 case 55:
1614 #line 301 "ael.flex"
1615 { /* the beginning of a ${} construct. prepare and pop into curlystate */
1616  parencount2 = 0;
1617  pbcpos2 = 0;
1618  pbcpush2('{'); /* push '{' so the last pcbpop (parencount2 = -1) will succeed */
1619  BEGIN(curlystate);
1620  yymore();
1621  }
1622  YY_BREAK
1623 case 56:
1625 #line 308 "ael.flex"
1626 { /* the beginning of a $[] construct. prepare and pop into brackstate */
1627  parencount3 = 0;
1628  pbcpos3 = 0;
1629  pbcpush3('['); /* push '[' so the last pcbpop (parencount3 = -1) will succeed */
1630  BEGIN(brackstate);
1631  yymore();
1632  }
1633  YY_BREAK
1634 case 57:
1635 /* rule 57 can match eol */
1637 #line 315 "ael.flex"
1638 {
1639  /* a non-word constituent char, like a space, tab, curly, paren, etc */
1640  char c = yytext[yyleng-1];
1641  STORE_POS;
1642  yylval->str = malloc(yyleng);
1643  strncpy(yylval->str, yytext, yyleng);
1644  yylval->str[yyleng-1] = 0;
1645  unput(c); /* put this ending char back in the stream */
1646  BEGIN(0);
1647  return word;
1648  }
1649  YY_BREAK
1650 case 58:
1651 /* rule 58 can match eol */
1653 #line 328 "ael.flex"
1654 {
1655  if ( pbcpop2('}') ) { /* error */
1656  STORE_LOC;
1657  ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched ')' in expression: %s !\n", my_file, my_lineno, my_col, yytext);
1658  BEGIN(0);
1659  yylval->str = malloc(yyleng+1);
1660  strncpy(yylval->str, yytext, yyleng);
1661  yylval->str[yyleng] = 0;
1662  return word;
1663  }
1664  parencount2--;
1665  if ( parencount2 >= 0) {
1666  yymore();
1667  } else {
1668  BEGIN(wordstate); /* Finished with the current ${} construct. Return to word gathering state */
1669  yymore();
1670  }
1671  }
1672  YY_BREAK
1673 case 59:
1674 /* rule 59 can match eol */
1676 #line 347 "ael.flex"
1677 {
1678  char c = yytext[yyleng-1];
1679  if (c == '{')
1680  parencount2++;
1681  pbcpush2(c);
1682  yymore();
1683  }
1684  YY_BREAK
1685 case 60:
1686 /* rule 60 can match eol */
1688 #line 355 "ael.flex"
1689 {
1690  char c = yytext[yyleng-1];
1691  if ( pbcpop2(c)) { /* error */
1692  STORE_LOC;
1693  ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched '%c' in expression!\n",
1694  my_file, my_lineno, my_col, c);
1695  BEGIN(0);
1696  yylval->str = malloc(yyleng+1);
1697  strncpy(yylval->str, yytext, yyleng);
1698  yylval->str[yyleng] = 0;
1699  return word;
1700  }
1701  yymore();
1702  }
1703  YY_BREAK
1704 case 61:
1705 /* rule 61 can match eol */
1707 #line 371 "ael.flex"
1708 {
1709  if ( pbcpop3(']') ) { /* error */
1710  STORE_LOC;
1711  ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched ')' in expression: %s !\n", my_file, my_lineno, my_col, yytext);
1712  BEGIN(0);
1713  yylval->str = malloc(yyleng+1);
1714  strncpy(yylval->str, yytext, yyleng);
1715  yylval->str[yyleng] = 0;
1716  return word;
1717  }
1718  parencount3--;
1719  if ( parencount3 >= 0) {
1720  yymore();
1721  } else {
1722  BEGIN(wordstate); /* Finished with the current ${} construct. Return to word gathering state */
1723  yymore();
1724  }
1725  }
1726  YY_BREAK
1727 case 62:
1728 /* rule 62 can match eol */
1730 #line 390 "ael.flex"
1731 {
1732  char c = yytext[yyleng-1];
1733  if (c == '[')
1734  parencount3++;
1735  pbcpush3(c);
1736  yymore();
1737  }
1738  YY_BREAK
1739 case 63:
1740 /* rule 63 can match eol */
1742 #line 398 "ael.flex"
1743 {
1744  char c = yytext[yyleng-1];
1745  if ( pbcpop3(c)) { /* error */
1746  STORE_LOC;
1747  ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched '%c' in expression!\n",
1748  my_file, my_lineno, my_col, c);
1749  BEGIN(0);
1750  yylval->str = malloc(yyleng+1);
1751  strncpy(yylval->str, yytext, yyleng);
1752  yylval->str[yyleng] = 0;
1753  return word;
1754  }
1755  yymore();
1756  }
1757  YY_BREAK
1758 /*
1759  * context used for arguments of if_head, random_head, switch_head,
1760  * for (last statement), while (XXX why not iftime_head ?).
1761  * End with the matching parentheses.
1762  * A comma at the top level is valid here, unlike in argg where it
1763  * is an argument separator so it must be returned as a token.
1764  */
1765 case 64:
1766 /* rule 64 can match eol */
1768 #line 421 "ael.flex"
1769 {
1770  if ( pbcpop(')') ) { /* error */
1771  STORE_LOC;
1772  ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched ')' in expression: %s !\n", my_file, my_lineno, my_col, yytext);
1773  BEGIN(0);
1774  yylval->str = malloc(yyleng+1);
1775  strncpy(yylval->str, yytext, yyleng);
1776  yylval->str[yyleng] = 0;
1777  prev_word = 0;
1778  return word;
1779  }
1780  parencount--;
1781  if ( parencount >= 0) {
1782  yymore();
1783  } else {
1784  STORE_LOC;
1785  yylval->str = malloc(yyleng);
1786  strncpy(yylval->str, yytext, yyleng);
1787  yylval->str[yyleng-1] = 0;
1788  unput(')');
1789  BEGIN(0);
1790  return word;
1791  }
1792  }
1793  YY_BREAK
1794 case 65:
1795 /* rule 65 can match eol */
1797 #line 446 "ael.flex"
1798 {
1799  char c = yytext[yyleng-1];
1800  if (c == '(')
1801  parencount++;
1802  pbcpush(c);
1803  yymore();
1804  }
1805  YY_BREAK
1806 case 66:
1807 /* rule 66 can match eol */
1809 #line 454 "ael.flex"
1810 {
1811  char c = yytext[yyleng-1];
1812  if ( pbcpop(c)) { /* error */
1813  STORE_LOC;
1814  ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched '%c' in expression!\n",
1815  my_file, my_lineno, my_col, c);
1816  BEGIN(0);
1817  yylval->str = malloc(yyleng+1);
1818  strncpy(yylval->str, yytext, yyleng);
1819  yylval->str[yyleng] = 0;
1820  return word;
1821  }
1822  yymore();
1823  }
1824  YY_BREAK
1825 /*
1826  * handlers for arguments to a macro or application calls.
1827  * We enter this context when we find the initial '(' and
1828  * stay here until we close all matching parentheses,
1829  * and find the comma (argument separator) or the closing ')'
1830  * of the (external) call, which happens when parencount == 0
1831  * before the decrement.
1832  */
1833 case 67:
1834 /* rule 67 can match eol */
1836 #line 478 "ael.flex"
1837 {
1838  char c = yytext[yyleng-1];
1839  if (c == '(')
1840  parencount++;
1841  pbcpush(c);
1842  yymore();
1843  }
1844  YY_BREAK
1845 case 68:
1846 /* rule 68 can match eol */
1848 #line 486 "ael.flex"
1849 {
1850  if ( pbcpop(')') ) { /* error */
1851  STORE_LOC;
1852  ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched ')' in expression!\n", my_file, my_lineno, my_col);
1853  BEGIN(0);
1854  yylval->str = malloc(yyleng+1);
1855  strncpy(yylval->str, yytext, yyleng);
1856  yylval->str[yyleng] = 0;
1857  return word;
1858  }
1859 
1860  parencount--;
1861  if( parencount >= 0){
1862  yymore();
1863  } else {
1864  STORE_LOC;
1865  BEGIN(0);
1866  if ( !strcmp(yytext, ")") )
1867  return RP;
1868  yylval->str = malloc(yyleng);
1869  strncpy(yylval->str, yytext, yyleng);
1870  yylval->str[yyleng-1] = '\0'; /* trim trailing ')' */
1871  unput(')');
1872  return word;
1873  }
1874  }
1875  YY_BREAK
1876 case 69:
1877 /* rule 69 can match eol */
1879 #line 513 "ael.flex"
1880 {
1881  if( parencount != 0) { /* ast_log(LOG_NOTICE,"Folding in a comma!\n"); */
1882  yymore();
1883  } else {
1884  STORE_LOC;
1885  if( !strcmp(yytext,"," ) )
1886  return COMMA;
1887  yylval->str = malloc(yyleng);
1888  strncpy(yylval->str, yytext, yyleng);
1889  yylval->str[yyleng-1] = '\0'; /* trim trailing ',' */
1890  unput(',');
1891  return word;
1892  }
1893  }
1894  YY_BREAK
1895 case 70:
1896 /* rule 70 can match eol */
1898 #line 528 "ael.flex"
1899 {
1900  char c = yytext[yyleng-1];
1901  if ( pbcpop(c) ) { /* error */
1902  STORE_LOC;
1903  ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched '%c' in expression!\n", my_file, my_lineno, my_col, c);
1904  BEGIN(0);
1905  yylval->str = malloc(yyleng+1);
1906  strncpy(yylval->str, yytext, yyleng);
1907  yylval->str[yyleng] = '\0';
1908  return word;
1909  }
1910  yymore();
1911  }
1912  YY_BREAK
1913 /*
1914  * context used to find tokens in the right hand side of assignments,
1915  * or in the first and second operand of a 'for'. As above, match
1916  * commas and use ';' as a separator (hence return it as a separate token).
1917  */
1918 case 71:
1919 /* rule 71 can match eol */
1921 #line 547 "ael.flex"
1922 {
1923  char c = yytext[yyleng-1];
1924  yymore();
1925  pbcpush(c);
1926  }
1927  YY_BREAK
1928 case 72:
1929 /* rule 72 can match eol */
1931 #line 553 "ael.flex"
1932 {
1933  char c = yytext[yyleng-1];
1934  if ( pbcpop(c) ) { /* error */
1935  STORE_LOC;
1936  ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched '%c' in expression!\n", my_file, my_lineno, my_col, c);
1937  BEGIN(0);
1938  yylval->str = malloc(yyleng+1);
1939  strncpy(yylval->str, yytext, yyleng);
1940  yylval->str[yyleng] = '\0';
1941  return word;
1942  }
1943  yymore();
1944  }
1945  YY_BREAK
1946 case 73:
1947 /* rule 73 can match eol */
1949 #line 567 "ael.flex"
1950 {
1951  STORE_LOC;
1952  yylval->str = malloc(yyleng);
1953  strncpy(yylval->str, yytext, yyleng);
1954  yylval->str[yyleng-1] = '\0'; /* trim trailing ';' */
1955  unput(';');
1956  BEGIN(0);
1957  return word;
1958  }
1959  YY_BREAK
1960 case 74:
1961 /* rule 74 can match eol */
1963 #line 577 "ael.flex"
1964 {
1965  char fnamebuf[1024],*p1,*p2;
1966  int glob_ret;
1967  glob_t globbuf; /* the current globbuf */
1968  int globbuf_pos = -1; /* where we are in the current globbuf */
1969  globbuf.gl_offs = 0; /* initialize it to silence gcc */
1970 
1971  p1 = strchr(yytext,'"');
1972  p2 = strrchr(yytext,'"');
1974  ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Includes nested too deeply! Wow!!! How did you do that?\n", my_file, my_lineno, my_col);
1975  } else if ( (int)(p2-p1) > sizeof(fnamebuf) - 1 ) {
1976  ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Filename is incredibly way too long (%d chars!). Inclusion ignored!\n", my_file, my_lineno, my_col, yyleng - 10);
1977  } else {
1978  strncpy(fnamebuf, p1+1, p2-p1-1);
1979  fnamebuf[p2-p1-1] = 0;
1980  if (fnamebuf[0] != '/') {
1981  char fnamebuf2[1024];
1982  snprintf(fnamebuf2,sizeof(fnamebuf2), "%s/%s", (char *)ast_config_AST_CONFIG_DIR, fnamebuf);
1983  ast_copy_string(fnamebuf,fnamebuf2,sizeof(fnamebuf));
1984  }
1985 #ifdef SOLARIS
1986  glob_ret = glob(fnamebuf, GLOB_NOCHECK, NULL, &globbuf);
1987 #else
1988  glob_ret = glob(fnamebuf, GLOB_NOMAGIC|GLOB_BRACE, NULL, &globbuf);
1989 #endif
1990  if (glob_ret == GLOB_NOSPACE) {
1992  "Glob Expansion of pattern '%s' failed: Not enough memory\n", fnamebuf);
1993  } else if (glob_ret == GLOB_ABORTED) {
1995  "Glob Expansion of pattern '%s' failed: Read error\n", fnamebuf);
1996  } else if (glob_ret == GLOB_NOMATCH) {
1998  "Glob Expansion of pattern '%s' failed: No matches!\n", fnamebuf);
1999  } else {
2000  globbuf_pos = 0;
2001  }
2002  }
2003  if (globbuf_pos > -1) {
2004  setup_filestack(fnamebuf, sizeof(fnamebuf), &globbuf, 0, yyscanner, 1);
2005  }
2006  }
2007  YY_BREAK
2008 case YY_STATE_EOF(INITIAL):
2009 case YY_STATE_EOF(paren):
2010 case YY_STATE_EOF(semic):
2011 case YY_STATE_EOF(argg):
2012 case YY_STATE_EOF(comment):
2013 case YY_STATE_EOF(curlystate):
2014 case YY_STATE_EOF(wordstate):
2015 case YY_STATE_EOF(brackstate):
2016 #line 622 "ael.flex"
2017 {
2018  char fnamebuf[2048];
2019  if (include_stack_index > 0 && include_stack[include_stack_index-1].globbuf_pos < include_stack[include_stack_index-1].globbuf.gl_pathc-1) {
2022  setup_filestack(fnamebuf, sizeof(fnamebuf), &include_stack[include_stack_index-1].globbuf, include_stack[include_stack_index-1].globbuf_pos, yyscanner, 0);
2023  /* finish this */
2024 
2025  } else {
2026  if (include_stack[include_stack_index].fname) {
2029  }
2030  if (my_file) {
2031  free(my_file);
2032  my_file = 0;
2033  }
2034  if ( --include_stack_index < 0 ) {
2035  yyterminate();
2036  } else {
2037  globfree(&include_stack[include_stack_index].globbuf);
2039 
2045  }
2046  }
2047  }
2048  YY_BREAK
2049 case 75:
2050 /* rule 75 can match eol */
2052 #line 654 "ael.flex"
2053 { /* default rule */ ast_log(LOG_ERROR,"Unhandled char(s): %s\n", yytext); }
2054  YY_BREAK
2055 case 76:
2057 #line 656 "ael.flex"
2058 YY_FATAL_ERROR( "flex scanner jammed" );
2059  YY_BREAK
2060 #line 2053 "ael_lex.c"
2061 
2062  case YY_END_OF_BUFFER:
2063  {
2064  /* Amount of text matched not including the EOB char. */
2065  int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;
2066 
2067  /* Undo the effects of YY_DO_BEFORE_ACTION. */
2068  *yy_cp = yyg->yy_hold_char;
2070 
2071  if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
2072  {
2073  /* We're scanning a new file or input source. It's
2074  * possible that this happened because the user
2075  * just pointed yyin at a new source and called
2076  * ael_yylex(). If so, then we have to assure
2077  * consistency between YY_CURRENT_BUFFER and our
2078  * globals. Here is the right place to do so, because
2079  * this is the first action (other than possibly a
2080  * back-up) that will match for the new input source.
2081  */
2082  yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
2083  YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
2084  YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
2085  }
2086 
2087  /* Note that here we test for yy_c_buf_p "<=" to the position
2088  * of the first EOB in the buffer, since yy_c_buf_p will
2089  * already have been incremented past the NUL character
2090  * (since all states make transitions on EOB to the
2091  * end-of-buffer state). Contrast this with the test
2092  * in input().
2093  */
2094  if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
2095  { /* This was really a NUL. */
2096  yy_state_type yy_next_state;
2097 
2098  yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
2099 
2100  yy_current_state = yy_get_previous_state( yyscanner );
2101 
2102  /* Okay, we're now positioned to make the NUL
2103  * transition. We couldn't have
2104  * yy_get_previous_state() go ahead and do it
2105  * for us because it doesn't know how to deal
2106  * with the possibility of jamming (and we don't
2107  * want to build jamming into it because then it
2108  * will run more slowly).
2109  */
2110 
2111  yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);
2112 
2113  yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
2114 
2115  if ( yy_next_state )
2116  {
2117  /* Consume the NUL. */
2118  yy_cp = ++yyg->yy_c_buf_p;
2119  yy_current_state = yy_next_state;
2120  goto yy_match;
2121  }
2122 
2123  else
2124  {
2125  yy_cp = yyg->yy_last_accepting_cpos;
2126  yy_current_state = yyg->yy_last_accepting_state;
2127  goto yy_find_action;
2128  }
2129  }
2130 
2131  else switch ( yy_get_next_buffer( yyscanner ) )
2132  {
2133  case EOB_ACT_END_OF_FILE:
2134  {
2135  yyg->yy_did_buffer_switch_on_eof = 0;
2136 
2137  if ( ael_yywrap(yyscanner ) )
2138  {
2139  /* Note: because we've taken care in
2140  * yy_get_next_buffer() to have set up
2141  * yytext, we can now set up
2142  * yy_c_buf_p so that if some total
2143  * hoser (like flex itself) wants to
2144  * call the scanner after we return the
2145  * YY_NULL, it'll still work - another
2146  * YY_NULL will get returned.
2147  */
2148  yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;
2149 
2150  yy_act = YY_STATE_EOF(YY_START);
2151  goto do_action;
2152  }
2153 
2154  else
2155  {
2156  if ( ! yyg->yy_did_buffer_switch_on_eof )
2157  YY_NEW_FILE;
2158  }
2159  break;
2160  }
2161 
2162  case EOB_ACT_CONTINUE_SCAN:
2163  yyg->yy_c_buf_p =
2164  yyg->yytext_ptr + yy_amount_of_matched_text;
2165 
2166  yy_current_state = yy_get_previous_state( yyscanner );
2167 
2168  yy_cp = yyg->yy_c_buf_p;
2169  yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
2170  goto yy_match;
2171 
2172  case EOB_ACT_LAST_MATCH:
2173  yyg->yy_c_buf_p =
2174  &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];
2175 
2176  yy_current_state = yy_get_previous_state( yyscanner );
2177 
2178  yy_cp = yyg->yy_c_buf_p;
2179  yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
2180  goto yy_find_action;
2181  }
2182  break;
2183  }
2184 
2185  default:
2187  "fatal flex scanner internal error--no action found" );
2188  } /* end of action switch */
2189  } /* end of scanning one token */
2190 } /* end of ael_yylex */
2191 
2192 /* yy_get_next_buffer - try to read in a new buffer
2193  *
2194  * Returns a code representing an action:
2195  * EOB_ACT_LAST_MATCH -
2196  * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
2197  * EOB_ACT_END_OF_FILE - end of file
2198  */
2199 static int yy_get_next_buffer (yyscan_t yyscanner)
2200 {
2201  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2202  register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
2203  register char *source = yyg->yytext_ptr;
2204  register int number_to_move, i;
2205  int ret_val;
2206 
2207  if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
2209  "fatal flex scanner internal error--end of buffer missed" );
2210 
2211  if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
2212  { /* Don't try to fill the buffer, so this is an EOF. */
2213  if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
2214  {
2215  /* We matched a single character, the EOB, so
2216  * treat this as a final EOF.
2217  */
2218  return EOB_ACT_END_OF_FILE;
2219  }
2220 
2221  else
2222  {
2223  /* We matched some text prior to the EOB, first
2224  * process it.
2225  */
2226  return EOB_ACT_LAST_MATCH;
2227  }
2228  }
2229 
2230  /* Try to read more data. */
2231 
2232  /* First move last chars to start of buffer. */
2233  number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
2234 
2235  for ( i = 0; i < number_to_move; ++i )
2236  *(dest++) = *(source++);
2237 
2238  if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
2239  /* don't do the read, it's not guaranteed to return an EOF,
2240  * just force an EOF
2241  */
2242  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;
2243 
2244  else
2245  {
2246  int num_to_read =
2247  YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
2248 
2249  while ( num_to_read <= 0 )
2250  { /* Not enough room in the buffer - grow it. */
2251 
2252  /* just a shorter name for the current buffer */
2253  YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
2254 
2255  int yy_c_buf_p_offset =
2256  (int) (yyg->yy_c_buf_p - b->yy_ch_buf);
2257 
2258  if ( b->yy_is_our_buffer )
2259  {
2260  int new_size = b->yy_buf_size * 2;
2261 
2262  if ( new_size <= 0 )
2263  b->yy_buf_size += b->yy_buf_size / 8;
2264  else
2265  b->yy_buf_size *= 2;
2266 
2267  b->yy_ch_buf = (char *)
2268  /* Include room in for 2 EOB chars. */
2269  ael_yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner );
2270  }
2271  else
2272  /* Can't grow it, we don't own it. */
2273  b->yy_ch_buf = 0;
2274 
2275  if ( ! b->yy_ch_buf )
2277  "fatal error - scanner input buffer overflow" );
2278 
2279  yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
2280 
2281  num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
2282  number_to_move - 1;
2283 
2284  }
2285 
2286  if ( num_to_read > YY_READ_BUF_SIZE )
2287  num_to_read = YY_READ_BUF_SIZE;
2288 
2289  /* Read in more data. */
2290  YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
2291  yyg->yy_n_chars, (size_t) num_to_read );
2292 
2293  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
2294  }
2295 
2296  if ( yyg->yy_n_chars == 0 )
2297  {
2298  if ( number_to_move == YY_MORE_ADJ )
2299  {
2300  ret_val = EOB_ACT_END_OF_FILE;
2301  ael_yyrestart(yyin ,yyscanner);
2302  }
2303 
2304  else
2305  {
2306  ret_val = EOB_ACT_LAST_MATCH;
2307  YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
2309  }
2310  }
2311 
2312  else
2313  ret_val = EOB_ACT_CONTINUE_SCAN;
2314 
2315  if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
2316  /* Extend the array by 50%, plus the number we really need. */
2317  yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
2318  YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) ael_yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
2319  if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
2320  YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
2321  }
2322 
2323  yyg->yy_n_chars += number_to_move;
2326 
2327  yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
2328 
2329  return ret_val;
2330 }
2331 
2332 /* yy_get_previous_state - get the state just before the EOB char was reached */
2333 
2335 {
2336  register yy_state_type yy_current_state;
2337  register char *yy_cp;
2338  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2339 
2340  yy_current_state = yyg->yy_start;
2341 
2342  for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
2343  {
2344  register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
2345  if ( yy_accept[yy_current_state] )
2346  {
2347  yyg->yy_last_accepting_state = yy_current_state;
2349  }
2350  while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2351  {
2352  yy_current_state = (int) yy_def[yy_current_state];
2353  if ( yy_current_state >= 285 )
2354  yy_c = yy_meta[(unsigned int) yy_c];
2355  }
2356  yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2357  }
2358 
2359  return yy_current_state;
2360 }
2361 
2362 /* yy_try_NUL_trans - try to make a transition on the NUL character
2363  *
2364  * synopsis
2365  * next_state = yy_try_NUL_trans( current_state );
2366  */
2367  static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner)
2368 {
2369  register int yy_is_jam;
2370  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
2371  register char *yy_cp = yyg->yy_c_buf_p;
2372 
2373  register YY_CHAR yy_c = 1;
2374  if ( yy_accept[yy_current_state] )
2375  {
2376  yyg->yy_last_accepting_state = yy_current_state;
2378  }
2379  while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2380  {
2381  yy_current_state = (int) yy_def[yy_current_state];
2382  if ( yy_current_state >= 285 )
2383  yy_c = yy_meta[(unsigned int) yy_c];
2384  }
2385  yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2386  yy_is_jam = (yy_current_state == 284);
2387 
2388  return yy_is_jam ? 0 : yy_current_state;
2389 }
2390 
2391  static void yyunput (int c, register char * yy_bp , yyscan_t yyscanner)
2392 {
2393  register char *yy_cp;
2394  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2395 
2396  yy_cp = yyg->yy_c_buf_p;
2397 
2398  /* undo effects of setting up yytext */
2399  *yy_cp = yyg->yy_hold_char;
2400 
2401  if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
2402  { /* need to shift things up to make room */
2403  /* +2 for EOB chars. */
2404  register int number_to_move = yyg->yy_n_chars + 2;
2405  register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
2406  YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
2407  register char *source =
2408  &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
2409 
2410  while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
2411  *--dest = *--source;
2412 
2413  yy_cp += (int) (dest - source);
2414  yy_bp += (int) (dest - source);
2415  YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
2416  yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
2417 
2418  if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
2419  YY_FATAL_ERROR( "flex scanner push-back overflow" );
2420  }
2421 
2422  *--yy_cp = (char) c;
2423 
2424  yyg->yytext_ptr = yy_bp;
2425  yyg->yy_hold_char = *yy_cp;
2426  yyg->yy_c_buf_p = yy_cp;
2427 }
2428 
2429 #ifndef YY_NO_INPUT
2430 #ifdef __cplusplus
2431  static int yyinput (yyscan_t yyscanner)
2432 #else
2433  static int input (yyscan_t yyscanner)
2434 #endif
2435 
2436 {
2437  int c;
2438  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2439 
2440  *yyg->yy_c_buf_p = yyg->yy_hold_char;
2441 
2442  if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
2443  {
2444  /* yy_c_buf_p now points to the character we want to return.
2445  * If this occurs *before* the EOB characters, then it's a
2446  * valid NUL; if not, then we've hit the end of the buffer.
2447  */
2448  if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
2449  /* This was really a NUL. */
2450  *yyg->yy_c_buf_p = '\0';
2451 
2452  else
2453  { /* need more input */
2454  int offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
2455  ++yyg->yy_c_buf_p;
2456 
2457  switch ( yy_get_next_buffer( yyscanner ) )
2458  {
2459  case EOB_ACT_LAST_MATCH:
2460  /* This happens because yy_g_n_b()
2461  * sees that we've accumulated a
2462  * token and flags that we need to
2463  * try matching the token before
2464  * proceeding. But for input(),
2465  * there's no matching to consider.
2466  * So convert the EOB_ACT_LAST_MATCH
2467  * to EOB_ACT_END_OF_FILE.
2468  */
2469 
2470  /* Reset buffer status. */
2471  ael_yyrestart(yyin ,yyscanner);
2472 
2473  /*FALLTHROUGH*/
2474 
2475  case EOB_ACT_END_OF_FILE:
2476  {
2477  if ( ael_yywrap(yyscanner ) )
2478  return EOF;
2479 
2480  if ( ! yyg->yy_did_buffer_switch_on_eof )
2481  YY_NEW_FILE;
2482 #ifdef __cplusplus
2483  return yyinput(yyscanner);
2484 #else
2485  return input(yyscanner);
2486 #endif
2487  }
2488 
2489  case EOB_ACT_CONTINUE_SCAN:
2490  yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
2491  break;
2492  }
2493  }
2494  }
2495 
2496  c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */
2497  *yyg->yy_c_buf_p = '\0'; /* preserve yytext */
2498  yyg->yy_hold_char = *++yyg->yy_c_buf_p;
2499 
2500  return c;
2501 }
2502 #endif /* ifndef YY_NO_INPUT */
2503 
2504 /** Immediately switch to a different input stream.
2505  * @param input_file A readable stream.
2506  * @param yyscanner The scanner object.
2507  * @note This function does not reset the start condition to @c INITIAL .
2508  */
2509  void ael_yyrestart (FILE * input_file , yyscan_t yyscanner)
2510 {
2511  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2512 
2513  if ( ! YY_CURRENT_BUFFER ){
2514  ael_yyensure_buffer_stack (yyscanner);
2517  }
2518 
2519  ael_yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
2520  ael_yy_load_buffer_state(yyscanner );
2521 }
2522 
2523 /** Switch to a different input buffer.
2524  * @param new_buffer The new input buffer.
2525  * @param yyscanner The scanner object.
2526  */
2527  void ael_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
2528 {
2529  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2530 
2531  /* TODO. We should be able to replace this entire function body
2532  * with
2533  * ael_yypop_buffer_state();
2534  * ael_yypush_buffer_state(new_buffer);
2535  */
2536  ael_yyensure_buffer_stack (yyscanner);
2537  if ( YY_CURRENT_BUFFER == new_buffer )
2538  return;
2539 
2540  if ( YY_CURRENT_BUFFER )
2541  {
2542  /* Flush out information for old buffer. */
2543  *yyg->yy_c_buf_p = yyg->yy_hold_char;
2544  YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
2545  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
2546  }
2547 
2548  YY_CURRENT_BUFFER_LVALUE = new_buffer;
2549  ael_yy_load_buffer_state(yyscanner );
2550 
2551  /* We don't actually know whether we did this switch during
2552  * EOF (ael_yywrap()) processing, but the only time this flag
2553  * is looked at is after ael_yywrap() is called, so it's safe
2554  * to go ahead and always set it.
2555  */
2556  yyg->yy_did_buffer_switch_on_eof = 1;
2557 }
2558 
2559 static void ael_yy_load_buffer_state (yyscan_t yyscanner)
2560 {
2561  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2562  yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
2563  yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
2564  yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
2565  yyg->yy_hold_char = *yyg->yy_c_buf_p;
2566 }
2567 
2568 /** Allocate and initialize an input buffer state.
2569  * @param file A readable stream.
2570  * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
2571  * @param yyscanner The scanner object.
2572  * @return the allocated buffer state.
2573  */
2574  YY_BUFFER_STATE ael_yy_create_buffer (FILE * file, int size , yyscan_t yyscanner)
2575 {
2576  YY_BUFFER_STATE b;
2577 
2578  b = (YY_BUFFER_STATE) ael_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
2579  if ( ! b )
2580  YY_FATAL_ERROR( "out of dynamic memory in ael_yy_create_buffer()" );
2581 
2582  b->yy_buf_size = size;
2583 
2584  /* yy_ch_buf has to be 2 characters longer than the size given because
2585  * we need to put in 2 end-of-buffer characters.
2586  */
2587  b->yy_ch_buf = (char *) ael_yyalloc(b->yy_buf_size + 2 ,yyscanner );
2588  if ( ! b->yy_ch_buf )
2589  YY_FATAL_ERROR( "out of dynamic memory in ael_yy_create_buffer()" );
2590 
2591  b->yy_is_our_buffer = 1;
2592 
2593  ael_yy_init_buffer(b,file ,yyscanner);
2594 
2595  return b;
2596 }
2597 
2598 /** Destroy the buffer.
2599  * @param b a buffer created with ael_yy_create_buffer()
2600  * @param yyscanner The scanner object.
2601  */
2602  void ael_yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
2603 {
2604  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2605 
2606  if ( ! b )
2607  return;
2608 
2609  if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
2611 
2612  if ( b->yy_is_our_buffer )
2613  ael_yyfree((void *) b->yy_ch_buf ,yyscanner );
2614 
2615  ael_yyfree((void *) b ,yyscanner );
2616 }
2617 
2618 #ifndef __cplusplus
2619 extern int isatty (int );
2620 #endif /* __cplusplus */
2621 
2622 /* Initializes or reinitializes a buffer.
2623  * This function is sometimes called more than once on the same buffer,
2624  * such as during a ael_yyrestart() or at EOF.
2625  */
2626  static void ael_yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner)
2627 
2628 {
2629  int oerrno = errno;
2630  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2631 
2632  ael_yy_flush_buffer(b ,yyscanner);
2633 
2634  b->yy_input_file = file;
2635  b->yy_fill_buffer = 1;
2636 
2637  /* If b is the current buffer, then ael_yy_init_buffer was _probably_
2638  * called from ael_yyrestart() or through yy_get_next_buffer.
2639  * In that case, we don't want to reset the lineno or column.
2640  */
2641  if (b != YY_CURRENT_BUFFER){
2642  b->yy_bs_lineno = 1;
2643  b->yy_bs_column = 0;
2644  }
2645 
2646  b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
2647 
2648  errno = oerrno;
2649 }
2650 
2651 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
2652  * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
2653  * @param yyscanner The scanner object.
2654  */
2655  void ael_yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
2656 {
2657  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2658  if ( ! b )
2659  return;
2660 
2661  b->yy_n_chars = 0;
2662 
2663  /* We always need two end-of-buffer characters. The first causes
2664  * a transition to the end-of-buffer state. The second causes
2665  * a jam in that state.
2666  */
2669 
2670  b->yy_buf_pos = &b->yy_ch_buf[0];
2671 
2672  b->yy_at_bol = 1;
2674 
2675  if ( b == YY_CURRENT_BUFFER )
2676  ael_yy_load_buffer_state(yyscanner );
2677 }
2678 
2679 /** Pushes the new state onto the stack. The new state becomes
2680  * the current state. This function will allocate the stack
2681  * if necessary.
2682  * @param new_buffer The new state.
2683  * @param yyscanner The scanner object.
2684  */
2685 void ael_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
2686 {
2687  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2688  if (new_buffer == NULL)
2689  return;
2690 
2691  ael_yyensure_buffer_stack(yyscanner);
2692 
2693  /* This block is copied from ael_yy_switch_to_buffer. */
2694  if ( YY_CURRENT_BUFFER )
2695  {
2696  /* Flush out information for old buffer. */
2697  *yyg->yy_c_buf_p = yyg->yy_hold_char;
2698  YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
2699  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
2700  }
2701 
2702  /* Only push if top exists. Otherwise, replace top. */
2703  if (YY_CURRENT_BUFFER)
2704  yyg->yy_buffer_stack_top++;
2705  YY_CURRENT_BUFFER_LVALUE = new_buffer;
2706 
2707  /* copied from ael_yy_switch_to_buffer. */
2708  ael_yy_load_buffer_state(yyscanner );
2709  yyg->yy_did_buffer_switch_on_eof = 1;
2710 }
2711 
2712 /** Removes and deletes the top of the stack, if present.
2713  * The next element becomes the new top.
2714  * @param yyscanner The scanner object.
2715  */
2717 {
2718  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2719  if (!YY_CURRENT_BUFFER)
2720  return;
2721 
2724  if (yyg->yy_buffer_stack_top > 0)
2725  --yyg->yy_buffer_stack_top;
2726 
2727  if (YY_CURRENT_BUFFER) {
2728  ael_yy_load_buffer_state(yyscanner );
2729  yyg->yy_did_buffer_switch_on_eof = 1;
2730  }
2731 }
2732 
2733 /* Allocates the stack if it does not exist.
2734  * Guarantees space for at least one push.
2735  */
2736 static void ael_yyensure_buffer_stack (yyscan_t yyscanner)
2737 {
2738  int num_to_alloc;
2739  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2740 
2741  if (!yyg->yy_buffer_stack) {
2742 
2743  /* First allocation is just for 2 elements, since we don't know if this
2744  * scanner will even need a stack. We use 2 instead of 1 to avoid an
2745  * immediate realloc on the next call.
2746  */
2747  num_to_alloc = 1;
2749  (num_to_alloc * sizeof(struct yy_buffer_state*)
2750  , yyscanner);
2751  if ( ! yyg->yy_buffer_stack )
2752  YY_FATAL_ERROR( "out of dynamic memory in ael_yyensure_buffer_stack()" );
2753 
2754  memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
2755 
2756  yyg->yy_buffer_stack_max = num_to_alloc;
2757  yyg->yy_buffer_stack_top = 0;
2758  return;
2759  }
2760 
2761  if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
2762 
2763  /* Increase the buffer to prepare for a possible push. */
2764  int grow_size = 8 /* arbitrary grow size */;
2765 
2766  num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
2768  (yyg->yy_buffer_stack,
2769  num_to_alloc * sizeof(struct yy_buffer_state*)
2770  , yyscanner);
2771  if ( ! yyg->yy_buffer_stack )
2772  YY_FATAL_ERROR( "out of dynamic memory in ael_yyensure_buffer_stack()" );
2773 
2774  /* zero only the new slots.*/
2775  memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
2776  yyg->yy_buffer_stack_max = num_to_alloc;
2777  }
2778 }
2779 
2780 /** Setup the input buffer state to scan directly from a user-specified character buffer.
2781  * @param base the character buffer
2782  * @param size the size in bytes of the character buffer
2783  * @param yyscanner The scanner object.
2784  * @return the newly allocated buffer state object.
2785  */
2786 YY_BUFFER_STATE ael_yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner)
2787 {
2788  YY_BUFFER_STATE b;
2789 
2790  if ( size < 2 ||
2791  base[size-2] != YY_END_OF_BUFFER_CHAR ||
2792  base[size-1] != YY_END_OF_BUFFER_CHAR )
2793  /* They forgot to leave room for the EOB's. */
2794  return 0;
2795 
2796  b = (YY_BUFFER_STATE) ael_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
2797  if ( ! b )
2798  YY_FATAL_ERROR( "out of dynamic memory in ael_yy_scan_buffer()" );
2799 
2800  b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
2801  b->yy_buf_pos = b->yy_ch_buf = base;
2802  b->yy_is_our_buffer = 0;
2803  b->yy_input_file = 0;
2804  b->yy_n_chars = b->yy_buf_size;
2805  b->yy_is_interactive = 0;
2806  b->yy_at_bol = 1;
2807  b->yy_fill_buffer = 0;
2809 
2810  ael_yy_switch_to_buffer(b ,yyscanner );
2811 
2812  return b;
2813 }
2814 
2815 /** Setup the input buffer state to scan a string. The next call to ael_yylex() will
2816  * scan from a @e copy of @a str.
2817  * @param yystr a NUL-terminated string to scan
2818  * @param yyscanner The scanner object.
2819  * @return the newly allocated buffer state object.
2820  * @note If you want to scan bytes that may contain NUL values, then use
2821  * ael_yy_scan_bytes() instead.
2822  */
2823 YY_BUFFER_STATE ael_yy_scan_string (yyconst char * yystr , yyscan_t yyscanner)
2824 {
2825 
2826  return ael_yy_scan_bytes(yystr,strlen(yystr) ,yyscanner);
2827 }
2828 
2829 /** Setup the input buffer state to scan the given bytes. The next call to ael_yylex() will
2830  * scan from a @e copy of @a bytes.
2831  * @param yybytes the byte buffer to scan
2832  * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
2833  * @param yyscanner The scanner object.
2834  * @return the newly allocated buffer state object.
2835  */
2836 YY_BUFFER_STATE ael_yy_scan_bytes (yyconst char * yybytes, int _yybytes_len , yyscan_t yyscanner)
2837 {
2838  YY_BUFFER_STATE b;
2839  char *buf;
2840  yy_size_t n;
2841  int i;
2842 
2843  /* Get memory for full buffer, including space for trailing EOB's. */
2844  n = _yybytes_len + 2;
2845  buf = (char *) ael_yyalloc(n ,yyscanner );
2846  if ( ! buf )
2847  YY_FATAL_ERROR( "out of dynamic memory in ael_yy_scan_bytes()" );
2848 
2849  for ( i = 0; i < _yybytes_len; ++i )
2850  buf[i] = yybytes[i];
2851 
2852  buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
2853 
2854  b = ael_yy_scan_buffer(buf,n ,yyscanner);
2855  if ( ! b )
2856  YY_FATAL_ERROR( "bad buffer in ael_yy_scan_bytes()" );
2857 
2858  /* It's okay to grow etc. this buffer, and we should throw it
2859  * away when we're done.
2860  */
2861  b->yy_is_our_buffer = 1;
2862 
2863  return b;
2864 }
2865 
2866 #ifndef YY_EXIT_FAILURE
2867 #define YY_EXIT_FAILURE 2
2868 #endif
2869 
2870 static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
2871 {
2872  (void) fprintf( stderr, "%s\n", msg );
2873  exit( YY_EXIT_FAILURE );
2874 }
2875 
2876 /* Redefine yyless() so it works in section 3 code. */
2877 
2878 #undef yyless
2879 #define yyless(n) \
2880  do \
2881  { \
2882  /* Undo effects of setting up yytext. */ \
2883  int yyless_macro_arg = (n); \
2884  YY_LESS_LINENO(yyless_macro_arg);\
2885  yytext[yyleng] = yyg->yy_hold_char; \
2886  yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
2887  yyg->yy_hold_char = *yyg->yy_c_buf_p; \
2888  *yyg->yy_c_buf_p = '\0'; \
2889  yyleng = yyless_macro_arg; \
2890  } \
2891  while ( 0 )
2892 
2893 /* Accessor methods (get/set functions) to struct members. */
2894 
2895 /** Get the user-defined data for this scanner.
2896  * @param yyscanner The scanner object.
2897  */
2899 {
2900  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2901  return yyextra;
2902 }
2903 
2904 /** Get the current line number.
2905  * @param yyscanner The scanner object.
2906  */
2908 {
2909  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2910 
2911  if (! YY_CURRENT_BUFFER)
2912  return 0;
2913 
2914  return yylineno;
2915 }
2916 
2917 /** Get the current column number.
2918  * @param yyscanner The scanner object.
2919  */
2921 {
2922  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2923 
2924  if (! YY_CURRENT_BUFFER)
2925  return 0;
2926 
2927  return yycolumn;
2928 }
2929 
2930 /** Get the input stream.
2931  * @param yyscanner The scanner object.
2932  */
2933 FILE *ael_yyget_in (yyscan_t yyscanner)
2934 {
2935  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2936  return yyin;
2937 }
2938 
2939 /** Get the output stream.
2940  * @param yyscanner The scanner object.
2941  */
2942 FILE *ael_yyget_out (yyscan_t yyscanner)
2943 {
2944  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2945  return yyout;
2946 }
2947 
2948 /** Get the length of the current token.
2949  * @param yyscanner The scanner object.
2950  */
2951 int ael_yyget_leng (yyscan_t yyscanner)
2952 {
2953  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2954  return yyleng;
2955 }
2956 
2957 /** Get the current token.
2958  * @param yyscanner The scanner object.
2959  */
2960 
2961 char *ael_yyget_text (yyscan_t yyscanner)
2962 {
2963  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2964  return yytext;
2965 }
2966 
2967 /** Set the user-defined data. This data is never touched by the scanner.
2968  * @param user_defined The data to be associated with this scanner.
2969  * @param yyscanner The scanner object.
2970  */
2971 void ael_yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner)
2972 {
2973  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2974  yyextra = user_defined ;
2975 }
2976 
2977 /** Set the current line number.
2978  * @param line_number
2979  * @param yyscanner The scanner object.
2980  */
2981 void ael_yyset_lineno (int line_number , yyscan_t yyscanner)
2982 {
2983  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2984 
2985  /* lineno is only valid if an input buffer exists. */
2986  if (! YY_CURRENT_BUFFER )
2987  yy_fatal_error( "ael_yyset_lineno called with no buffer" , yyscanner);
2988 
2989  yylineno = line_number;
2990 }
2991 
2992 /** Set the current column.
2993  * @param line_number
2994  * @param yyscanner The scanner object.
2995  */
2996 void ael_yyset_column (int column_no , yyscan_t yyscanner)
2997 {
2998  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2999 
3000  /* column is only valid if an input buffer exists. */
3001  if (! YY_CURRENT_BUFFER )
3002  yy_fatal_error( "ael_yyset_column called with no buffer" , yyscanner);
3003 
3004  yycolumn = column_no;
3005 }
3006 
3007 /** Set the input stream. This does not discard the current
3008  * input buffer.
3009  * @param in_str A readable stream.
3010  * @param yyscanner The scanner object.
3011  * @see ael_yy_switch_to_buffer
3012  */
3013 void ael_yyset_in (FILE * in_str , yyscan_t yyscanner)
3014 {
3015  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3016  yyin = in_str ;
3017 }
3018 
3019 void ael_yyset_out (FILE * out_str , yyscan_t yyscanner)
3020 {
3021  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3022  yyout = out_str ;
3023 }
3024 
3025 int ael_yyget_debug (yyscan_t yyscanner)
3026 {
3027  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3028  return yy_flex_debug;
3029 }
3030 
3031 void ael_yyset_debug (int bdebug , yyscan_t yyscanner)
3032 {
3033  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3034  yy_flex_debug = bdebug ;
3035 }
3036 
3037 /* Accessor methods for yylval and yylloc */
3038 
3040 {
3041  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3042  return yylval;
3043 }
3044 
3045 void ael_yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner)
3046 {
3047  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3048  yylval = yylval_param;
3049 }
3050 
3052 {
3053  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3054  return yylloc;
3055 }
3056 
3057 void ael_yyset_lloc (YYLTYPE * yylloc_param , yyscan_t yyscanner)
3058 {
3059  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3060  yylloc = yylloc_param;
3061 }
3062 
3063 /* User-visible API */
3064 
3065 /* ael_yylex_init is special because it creates the scanner itself, so it is
3066  * the ONLY reentrant function that doesn't take the scanner as the last argument.
3067  * That's why we explicitly handle the declaration, instead of using our macros.
3068  */
3069 
3070 int ael_yylex_init(yyscan_t* ptr_yy_globals)
3071 
3072 {
3073  if (ptr_yy_globals == NULL){
3074  errno = EINVAL;
3075  return 1;
3076  }
3077 
3078  *ptr_yy_globals = (yyscan_t) ael_yyalloc ( sizeof( struct yyguts_t ), NULL );
3079 
3080  if (*ptr_yy_globals == NULL){
3081  errno = ENOMEM;
3082  return 1;
3083  }
3084 
3085  /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
3086  memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
3087 
3088  return yy_init_globals ( *ptr_yy_globals );
3089 }
3090 
3091 /* ael_yylex_init_extra has the same functionality as ael_yylex_init, but follows the
3092  * convention of taking the scanner as the last argument. Note however, that
3093  * this is a *pointer* to a scanner, as it will be allocated by this call (and
3094  * is the reason, too, why this function also must handle its own declaration).
3095  * The user defined value in the first argument will be available to ael_yyalloc in
3096  * the yyextra field.
3097  */
3098 
3099 int ael_yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )
3100 
3101 {
3102  struct yyguts_t dummy_yyguts;
3103 
3104  ael_yyset_extra (yy_user_defined, &dummy_yyguts);
3105 
3106  if (ptr_yy_globals == NULL){
3107  errno = EINVAL;
3108  return 1;
3109  }
3110 
3111  *ptr_yy_globals = (yyscan_t) ael_yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
3112 
3113  if (*ptr_yy_globals == NULL){
3114  errno = ENOMEM;
3115  return 1;
3116  }
3117 
3118  /* By setting to 0xAA, we expose bugs in
3119  yy_init_globals. Leave at 0x00 for releases. */
3120  memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
3121 
3122  ael_yyset_extra (yy_user_defined, *ptr_yy_globals);
3123 
3124  return yy_init_globals ( *ptr_yy_globals );
3125 }
3126 
3127 static int yy_init_globals (yyscan_t yyscanner)
3128 {
3129  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3130  /* Initialization is the same as for the non-reentrant scanner.
3131  * This function is called from ael_yylex_destroy(), so don't allocate here.
3132  */
3133 
3134  yyg->yy_buffer_stack = 0;
3135  yyg->yy_buffer_stack_top = 0;
3136  yyg->yy_buffer_stack_max = 0;
3137  yyg->yy_c_buf_p = (char *) 0;
3138  yyg->yy_init = 0;
3139  yyg->yy_start = 0;
3140 
3141  yyg->yy_start_stack_ptr = 0;
3142  yyg->yy_start_stack_depth = 0;
3143  yyg->yy_start_stack = NULL;
3144 
3145 /* Defined in main.c */
3146 #ifdef YY_STDINIT
3147  yyin = stdin;
3148  yyout = stdout;
3149 #else
3150  yyin = (FILE *) 0;
3151  yyout = (FILE *) 0;
3152 #endif
3153 
3154  /* For future reference: Set errno on error, since we are called by
3155  * ael_yylex_init()
3156  */
3157  return 0;
3158 }
3159 
3160 /* ael_yylex_destroy is for both reentrant and non-reentrant scanners. */
3162 {
3163  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3164 
3165  /* Pop the buffer stack, destroying each element. */
3166  while(YY_CURRENT_BUFFER){
3169  ael_yypop_buffer_state(yyscanner);
3170  }
3171 
3172  /* Destroy the stack itself. */
3173  ael_yyfree(yyg->yy_buffer_stack ,yyscanner);
3174  yyg->yy_buffer_stack = NULL;
3175 
3176  /* Destroy the start condition stack. */
3177  ael_yyfree(yyg->yy_start_stack ,yyscanner );
3178  yyg->yy_start_stack = NULL;
3179 
3180  /* Reset the globals. This is important in a non-reentrant scanner so the next time
3181  * ael_yylex() is called, initialization will occur. */
3182  yy_init_globals( yyscanner);
3183 
3184  /* Destroy the main struct (reentrant only). */
3185  ael_yyfree ( yyscanner , yyscanner );
3186  yyscanner = NULL;
3187  return 0;
3188 }
3189 
3190 /*
3191  * Internal utility routines.
3192  */
3193 
3194 #ifndef yytext_ptr
3195 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
3196 {
3197  register int i;
3198  for ( i = 0; i < n; ++i )
3199  s1[i] = s2[i];
3200 }
3201 #endif
3202 
3203 #ifdef YY_NEED_STRLEN
3204 static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
3205 {
3206  register int n;
3207  for ( n = 0; s[n]; ++n )
3208  ;
3209 
3210  return n;
3211 }
3212 #endif
3213 
3214 void *ael_yyalloc (yy_size_t size , yyscan_t yyscanner)
3215 {
3216  return (void *) malloc( size );
3217 }
3218 
3219 void *ael_yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner)
3220 {
3221  /* The cast to (char *) in the following accommodates both
3222  * implementations that use char* generic pointers, and those
3223  * that use void* generic pointers. It works with the latter
3224  * because both ANSI C and C++ allow castless assignment from
3225  * any pointer type to void*, and deal with argument conversions
3226  * as though doing an assignment.
3227  */
3228  return (void *) realloc( (char *) ptr, size );
3229 }
3230 
3231 #define YYTABLES_NAME "yytables"
3232 
3233 #line 656 "ael.flex"
3234 
3235 
3236 
3237 static void pbcpush(char x)
3238 {
3239  pbcstack[pbcpos++] = x;
3240 }
3241 
3242 void ael_yyfree(void *ptr, yyscan_t yyscanner)
3243 {
3244  if (ptr)
3245  free( (char*) ptr );
3246 }
3247 
3248 static int pbcpop(char x)
3249 {
3250  if ( ( x == ')' && pbcstack[pbcpos-1] == '(' )
3251  || ( x == ']' && pbcstack[pbcpos-1] == '[' )
3252  || ( x == '}' && pbcstack[pbcpos-1] == '{' )) {
3253  pbcpos--;
3254  return 0;
3255  }
3256  return 1; /* error */
3257 }
3258 
3259 static void pbcpush2(char x)
3260 {
3261  pbcstack2[pbcpos2++] = x;
3262 }
3263 
3264 static int pbcpop2(char x)
3265 {
3266  if ( ( x == ')' && pbcstack2[pbcpos2-1] == '(' )
3267  || ( x == ']' && pbcstack2[pbcpos2-1] == '[' )
3268  || ( x == '}' && pbcstack2[pbcpos2-1] == '{' )) {
3269  pbcpos2--;
3270  return 0;
3271  }
3272  return 1; /* error */
3273 }
3274 
3275 static void pbcpush3(char x)
3276 {
3277  pbcstack3[pbcpos3++] = x;
3278 }
3279 
3280 static int pbcpop3(char x)
3281 {
3282  if ( ( x == ')' && pbcstack3[pbcpos3-1] == '(' )
3283  || ( x == ']' && pbcstack3[pbcpos3-1] == '[' )
3284  || ( x == '}' && pbcstack3[pbcpos3-1] == '{' )) {
3285  pbcpos3--;
3286  return 0;
3287  }
3288  return 1; /* error */
3289 }
3290 
3291 static int c_prevword(void)
3292 {
3293  char *c = prev_word;
3294  if (c == NULL)
3295  return 0;
3296  while ( *c ) {
3297  switch (*c) {
3298  case '{':
3299  case '[':
3300  case '(':
3301  pbcpush(*c);
3302  break;
3303  case '}':
3304  case ']':
3305  case ')':
3306  if (pbcpop(*c))
3307  return 1;
3308  break;
3309  }
3310  c++;
3311  }
3312  return 0;
3313 }
3314 
3315 
3316 /*
3317  * The following three functions, reset_*, are used in the bison
3318  * code to switch context. As a consequence, we need to
3319  * declare them global and add a prototype so that the
3320  * compiler does not complain.
3321  *
3322  * NOTE: yyg is declared because it is used in the BEGIN macros,
3323  * though that should be hidden as the macro changes
3324  * depending on the flex options that we use - in particular,
3325  * %reentrant changes the way the macro is declared;
3326  * without %reentrant, BEGIN uses yystart instead of yyg
3327  */
3328 
3329 void reset_parencount(yyscan_t yyscanner );
3330 void reset_parencount(yyscan_t yyscanner )
3331 {
3332  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3333  parencount = 0;
3334  pbcpos = 0;
3335  pbcpush('('); /* push '(' so the last pcbpop (parencount= -1) will succeed */
3336  c_prevword();
3337  BEGIN(paren);
3338 }
3339 
3340 void reset_semicount(yyscan_t yyscanner );
3341 void reset_semicount(yyscan_t yyscanner )
3342 {
3343  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3344  pbcpos = 0;
3345  BEGIN(semic);
3346 }
3347 
3348 void reset_argcount(yyscan_t yyscanner );
3349 void reset_argcount(yyscan_t yyscanner )
3350 {
3351  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3352  parencount = 0;
3353  pbcpos = 0;
3354  pbcpush('('); /* push '(' so the last pcbpop (parencount= -1) will succeed */
3355  c_prevword();
3356  BEGIN(argg);
3357 }
3358 
3359 /* used elsewhere, but some local vars */
3360 struct pval *ael2_parse(char *filename, int *errors)
3361 {
3362  struct pval *pvalue;
3363  struct parse_io *io;
3364  char *buffer;
3365  struct stat stats;
3366  FILE *fin;
3367 
3368  /* extern int ael_yydebug; */
3369 
3370  io = calloc(sizeof(struct parse_io),1);
3371  /* reset the global counters */
3372  prev_word = 0;
3373  my_lineno = 1;
3375  my_col = 0;
3376  /* ael_yydebug = 1; */
3377  ael_yylex_init(&io->scanner);
3378  fin = fopen(filename,"r");
3379  if ( !fin ) {
3380  ast_log(LOG_ERROR,"File %s could not be opened\n", filename);
3381  *errors = 1;
3382  return 0;
3383  }
3384  if (my_file)
3385  free(my_file);
3386  my_file = strdup(filename);
3387  if (stat(filename, &stats)) {
3388  ast_log(LOG_WARNING, "failed to populate stats from file '%s'\n", filename);
3389  }
3390  buffer = (char*)malloc(stats.st_size+2);
3391  if (fread(buffer, 1, stats.st_size, fin) != stats.st_size) {
3392  ast_log(LOG_ERROR, "fread() failed: %s\n", strerror(errno));
3393  }
3394  buffer[stats.st_size]=0;
3395  fclose(fin);
3396 
3397  ael_yy_scan_string (buffer ,io->scanner);
3398  ael_yyset_lineno(1 , io->scanner);
3399 
3400  /* ael_yyset_in (fin , io->scanner); OLD WAY */
3401 
3402  ael_yyparse(io);
3403 
3404 
3405  pvalue = io->pval;
3406  *errors = io->syntax_error_count;
3407 
3409  free(buffer);
3410  free(io);
3411 
3412  return pvalue;
3413 }
3414 
3415 static void setup_filestack(char *fnamebuf2, int fnamebuf_siz, glob_t *globbuf, int globpos, yyscan_t yyscanner, int create)
3416 {
3417  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3418  int error, i;
3419  FILE *in1;
3420  char fnamebuf[2048];
3421 
3422  if (globbuf && globbuf->gl_pathv && globbuf->gl_pathc > 0)
3423 #if defined(STANDALONE) || defined(LOW_MEMORY) || defined(STANDALONE_AEL)
3424  strncpy(fnamebuf, globbuf->gl_pathv[globpos], fnamebuf_siz);
3425 #else
3426  ast_copy_string(fnamebuf, globbuf->gl_pathv[globpos], fnamebuf_siz);
3427 #endif
3428  else {
3429  ast_log(LOG_ERROR,"Include file name not present!\n");
3430  return;
3431  }
3432  for (i=0; i<include_stack_index; i++) {
3433  if ( !strcmp(fnamebuf,include_stack[i].fname )) {
3434  ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Nice Try!!! But %s has already been included (perhaps by another file), and would cause an infinite loop of file inclusions!!! Include directive ignored\n",
3435  my_file, my_lineno, my_col, fnamebuf);
3436  break;
3437  }
3438  }
3439  error = 1;
3440  if (i == include_stack_index)
3441  error = 0; /* we can use this file */
3442  if ( !error ) { /* valid file name */
3443  /* relative vs. absolute */
3444  if (fnamebuf[0] != '/')
3445  snprintf(fnamebuf2, fnamebuf_siz, "%s/%s", ast_config_AST_CONFIG_DIR, fnamebuf);
3446  else
3447 #if defined(STANDALONE) || defined(LOW_MEMORY) || defined(STANDALONE_AEL)
3448  strncpy(fnamebuf2, fnamebuf, fnamebuf_siz);
3449 #else
3450  ast_copy_string(fnamebuf2, fnamebuf, fnamebuf_siz);
3451 #endif
3452  in1 = fopen( fnamebuf2, "r" );
3453 
3454  if ( ! in1 ) {
3455  ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Couldn't find the include file: %s; ignoring the Include directive!\n", my_file, my_lineno, my_col, fnamebuf2);
3456  } else {
3457  char *buffer;
3458  struct stat stats;
3459  if (stat(fnamebuf2, &stats)) {
3460  ast_log(LOG_WARNING, "Failed to populate stats from file '%s'\n", fnamebuf2);
3461  }
3462  buffer = (char*)malloc(stats.st_size+1);
3463  if (fread(buffer, 1, stats.st_size, in1) != stats.st_size) {
3464  ast_log(LOG_ERROR, "fread() failed: %s\n", strerror(errno));
3465  }
3466  buffer[stats.st_size] = 0;
3467  ast_debug(1, " --Read in included file %s, %d chars\n",fnamebuf2, (int)stats.st_size);
3468  fclose(in1);
3469  if (include_stack[include_stack_index].fname) {
3470  free(include_stack[include_stack_index].fname);
3472  }
3476  if (my_file)
3477  free(my_file);
3478  my_file = strdup(fnamebuf2);
3479  if (create)
3481 
3483 
3485  if (create)
3486  include_stack_index++;
3487  ael_yy_switch_to_buffer(ael_yy_scan_string (buffer ,yyscanner),yyscanner);
3488  free(buffer);
3489  my_lineno = 1;
3490  my_col = 1;
3491  BEGIN(INITIAL);
3492  }
3493  }
3494 }
Definition: ael.tab.c:167
int isatty(int)
struct yy_buffer_state * YY_BUFFER_STATE
Definition: ael_lex.c:182
Definition: ael.tab.c:165
static int parencount
Definition: ael_lex.c:862
#define YY_RULE_SETUP
Definition: ael_lex.c:1211
struct pval * ael2_parse(char *filename, int *errors)
Definition: ael_lex.c:3360
#define YY_SC_TO_UI(c)
Definition: ael_lex.c:123
char yy_hold_char
Definition: ast_expr2f.c:641
static yyconst flex_int16_t yy_chk[1073]
Definition: ael_lex.c:648
Asterisk locking-related definitions:
Asterisk main include file. File version handling, generic pbx functions.
static int pbcpop(char x)
Definition: ael_lex.c:3248
int lineno
Definition: ael_lex.c:911
#define YY_MORE_ADJ
Definition: ael_lex.c:775
void * ael_yyalloc(yy_size_t, yyscan_t yyscanner)
Definition: ael_lex.c:3214
FILE * ael_yyget_in(yyscan_t yyscanner)
Definition: ael_lex.c:2933
Definition: ael.tab.c:168
#define STORE_POS
Definition: ael_lex.c:952
YY_BUFFER_STATE ael_yy_scan_buffer(char *base, yy_size_t size, yyscan_t yyscanner)
Definition: ael_lex.c:2786
void ael_yyrestart(FILE *input_file, yyscan_t yyscanner)
Definition: ael_lex.c:2509
short int16_t
Definition: db.h:59
#define realloc(a, b)
Definition: astmm.h:163
char * yy_c_buf_p
Definition: ast_expr2f.c:644
YY_BUFFER_STATE bufstate
Definition: ael_lex.c:915
#define semic
Definition: ael_lex.c:974
struct pval * pval
Definition: ael_structs.h:77
int ael_yyget_lineno(yyscan_t yyscanner)
Definition: ael_lex.c:2907
Definition: ael.tab.c:170
glob_t globbuf
Definition: ael_lex.c:913
char buf[BUFSIZE]
Definition: eagi_proxy.c:66
#define YY_CURRENT_BUFFER_LVALUE
Definition: ael_lex.c:290
Definition: ael.tab.c:166
#define YY_END_OF_BUFFER_CHAR
Definition: ael_lex.c:161
Definition: ael.tab.c:173
#define BEGIN
Definition: ael_lex.c:146
FILE * ael_yyget_out(yyscan_t yyscanner)
Definition: ael_lex.c:2942
struct yyguts_t * yyg
Definition: ael_lex.c:1221
#define LOG_WARNING
Definition: logger.h:274
char * yy_ch_buf
Definition: ast_expr2f.c:218
void ael_yyfree(void *, yyscan_t yyscanner)
Definition: ael_lex.c:3242
void * ael_yyrealloc(void *, yy_size_t, yyscan_t yyscanner)
Definition: ael_lex.c:3219
int yy_state_type
Definition: ael_lex.c:345
void ael_yyset_debug(int debug_flag, yyscan_t yyscanner)
Definition: ael_lex.c:3031
Generic (perhaps overly so) hashtable implementation Hash Table support in Asterisk.
Definition: ael.tab.c:171
int ael_yyget_debug(yyscan_t yyscanner)
Definition: ael_lex.c:3025
static yy_state_type yy_get_previous_state(yyscan_t yyscanner)
Definition: ael_lex.c:2334
char * ael_yyget_text(yyscan_t yyscanner)
Definition: ael_lex.c:2961
void ael_yypop_buffer_state(yyscan_t yyscanner)
Definition: ael_lex.c:2716
char * my_file
Definition: ael_lex.c:888
#define EOB_ACT_CONTINUE_SCAN
Definition: ael_lex.c:185
YY_EXTRA_TYPE ael_yyget_extra(yyscan_t yyscanner)
Definition: ael_lex.c:2898
#define STORE_LOC
Definition: ael_lex.c:959
#define EOB_ACT_LAST_MATCH
Definition: ael_lex.c:187
#define ael_yywrap(n)
Definition: ael_lex.c:340
#define INITIAL
Definition: ael_lex.c:972
#define YY_EXTRA_TYPE
Definition: ael_lex.c:990
static int my_col
Definition: ael_lex.c:887
static void pbcpush2(char x)
Definition: ael_lex.c:3259
static struct stackelement include_stack[MAX_INCLUDE_DEPTH]
Definition: ael_lex.c:918
void ael_yyset_extra(YY_EXTRA_TYPE user_defined, yyscan_t yyscanner)
Definition: ael_lex.c:2971
static void yy_fatal_error(yyconst char msg[], yyscan_t yyscanner)
static struct test_val c
static int yy_init_globals(yyscan_t yyscanner)
Definition: ael_lex.c:3127
char * text
Definition: app_queue.c:1508
void ael_yyset_lloc(YYLTYPE *yylloc_param, yyscan_t yyscanner)
Definition: ael_lex.c:3057
yyscan_t scanner
Definition: ael_structs.h:78
signed char flex_int8_t
Definition: ael_lex.c:54
#define YY_RESTORE_YY_MORE_OFFSET
Definition: ael_lex.c:776
#define NULL
Definition: resample.c:96
int ael_yyget_leng(yyscan_t yyscanner)
Definition: ael_lex.c:2951
yy_size_t yy_buf_size
Definition: ast_expr2f.c:224
YY_BUFFER_STATE ael_yy_create_buffer(FILE *file, int size, yyscan_t yyscanner)
Definition: ael_lex.c:2574
YY_BUFFER_STATE * yy_buffer_stack
Definition: ast_expr2f.c:640
int yy_start_stack_depth
Definition: ast_expr2f.c:649
void ael_yy_switch_to_buffer(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner)
Definition: ael_lex.c:2527
int yy_init
Definition: ast_expr2f.c:645
static int parencount2
Definition: ael_lex.c:871
#define calloc(a, b)
Definition: astmm.h:157
YYLTYPE * ael_yyget_lloc(yyscan_t yyscanner)
Definition: ael_lex.c:3051
#define YY_END_OF_BUFFER
Definition: ael_lex.c:366
void ael_yy_flush_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner)
Definition: ael_lex.c:2655
unsigned char flex_uint8_t
Definition: ael_lex.c:57
Utility functions.
#define YY_CURRENT_BUFFER
Definition: ael_lex.c:283
static yyconst flex_int16_t yy_nxt[1073]
Definition: ael_lex.c:526
YY_BUFFER_STATE ael_yy_scan_string(yyconst char *yy_str, yyscan_t yyscanner)
Definition: ael_lex.c:2823
int * yy_start_stack
Definition: ast_expr2f.c:650
#define yylineno
Definition: ael_lex.c:138
#define YY_NEW_FILE
Definition: ael_lex.c:159
void * yyscan_t
Definition: ael_lex.c:128
static yyconst flex_int16_t yy_def[304]
Definition: ael_lex.c:488
#define YY_START
Definition: ael_lex.c:152
void reset_semicount(yyscan_t yyscanner)
Definition: ael_lex.c:3341
#define yytext
Definition: ael_lex.c:137
char * malloc()
register char * yy_bp
Definition: ael_lex.c:1219
int yy_start
Definition: ast_expr2f.c:646
Definition: ael.tab.c:172
#define ast_debug(level,...)
Log a DEBUG message.
Definition: logger.h:452
#define ast_log
Definition: astobj2.c:42
#define unput(c)
Definition: ael_lex.c:205
int ael_yylex_init(yyscan_t *scanner)
Definition: ael_lex.c:3070
static void setup_filestack(char *fnamebuf, int fnamebuf_siz, glob_t *globbuf, int globpos, yyscan_t xscan, int create)
Definition: ael_lex.c:3415
void free()
#define YY_STATE_EOF(state)
Definition: ael_lex.c:156
#define yyterminate()
Definition: ael_lex.c:1171
static yyconst flex_int32_t yy_meta[50]
Definition: ael_lex.c:441
#define argg
Definition: ael_lex.c:975
#define YY_DECL
Definition: ael_lex.c:1195
short int flex_int16_t
Definition: ael_lex.c:55
#define yycolumn
Definition: ael_lex.c:139
#define YY_BUFFER_NORMAL
Definition: ael_lex.c:261
static void ael_yy_load_buffer_state(yyscan_t yyscanner)
Definition: ael_lex.c:2559
static struct io_context * io
Definition: chan_ooh323.c:401
void ael_yyset_out(FILE *out_str, yyscan_t yyscanner)
Definition: ael_lex.c:3019
#define EOB_ACT_END_OF_FILE
Definition: ael_lex.c:186
void ael_yyset_lineno(int line_number, yyscan_t yyscanner)
Definition: ael_lex.c:2981
char * filename
Definition: pval.h:55
Definition: ael.tab.c:169
static int include_stack_index
Definition: ael_lex.c:919
register int yy_act
Definition: ael_lex.c:1220
static int pbcpop3(char x)
Definition: ael_lex.c:3280
int yy_start_stack_ptr
Definition: ast_expr2f.c:648
static void pbcpush(char x)
Definition: ael_lex.c:3237
static int pbcpop2(char x)
Definition: ael_lex.c:3264
void reset_parencount(yyscan_t yyscanner)
Definition: ael_lex.c:3330
#define GLOB_BRACE
Definition: ael_lex.c:842
#define YY_BUFFER_NEW
Definition: ael_lex.c:260
int syntax_error_count
Definition: ael_structs.h:79
register char * yy_cp
Definition: ael_lex.c:1219
void reset_argcount(yyscan_t yyscanner)
Definition: ael_lex.c:3349
Definition: pval.h:48
static char pbcstack[400]
Definition: ael_lex.c:858
int yy_did_buffer_switch_on_eof
Definition: ast_expr2f.c:647
YYSTYPE * ael_yyget_lval(yyscan_t yyscanner)
Definition: ael_lex.c:3039
unsigned short int flex_uint16_t
Definition: ael_lex.c:58
void ael_yy_delete_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner)
Definition: ael_lex.c:2602
int yy_state_type
Definition: ast_expr2f.c:345
static void pbcwhere(const char *text, int *line, int *col)
Definition: ael_lex.c:934
static int parencount3
Definition: ael_lex.c:880
int ael_yyget_column(yyscan_t yyscanner)
Definition: ael_lex.c:2920
static int pbcpos
Definition: ael_lex.c:859
static char pbcstack3[400]
Definition: ael_lex.c:876
static int my_lineno
Definition: ael_lex.c:886
int yy_more_flag
Definition: ast_expr2f.c:658
void ael_yyset_column(int column_no, yyscan_t yyscanner)
Definition: ael_lex.c:2996
#define YY_INPUT(buf, result, max_size)
Definition: ael_lex.c:1134
#define LOG_ERROR
Definition: logger.h:285
Definition: ael.tab.c:164
static int pbcpos2
Definition: ael_lex.c:868
#define yylloc
Definition: ael_lex.c:1037
const char * ast_config_AST_CONFIG_DIR
Definition: options.c:151
static yyconst flex_int16_t yy_base[304]
Definition: ael_lex.c:450
int yy_n_chars
Definition: ast_expr2f.c:642
#define yylval
Definition: ael_lex.c:1035
void ael_yypush_buffer_state(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner)
Definition: ael_lex.c:2685
static int len(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t buflen)
int errno
#define comment
Definition: ael_lex.c:976
char * yy_last_accepting_cpos
Definition: ast_expr2f.c:652
static void yyunput(int c, char *buf_ptr, yyscan_t yyscanner)
#define yyin
Definition: ael_lex.c:133
#define brackstate
Definition: ael_lex.c:979
#define yy_flex_debug
Definition: ael_lex.c:140
size_t yy_size_t
Definition: ael_lex.c:209
#define GLOB_NOMAGIC
Definition: ael_lex.c:845
static int pbcpos3
Definition: ael_lex.c:877
int ael_yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, yyscan_t yyscanner)
#define GLOB_ABORTED
Definition: ael_lex.c:839
char * prev_word
Definition: ael_lex.c:889
void ael_yyset_in(FILE *in_str, yyscan_t yyscanner)
Definition: ael_lex.c:3013
Structures for AEL - the Asterisk extension language.
static int yy_get_next_buffer(yyscan_t yyscanner)
Definition: ael_lex.c:2199
unsigned char YY_CHAR
Definition: ast_expr2f.c:343
int flex_int32_t
Definition: ael_lex.c:56
#define YY_READ_BUF_SIZE
Definition: ael_lex.c:1118
static int c_prevword(void)
Definition: ael_lex.c:3291
static yy_state_type yy_try_NUL_trans(yy_state_type current_state, yyscan_t yyscanner)
Definition: ael_lex.c:2367
Support for logging to various files, console and syslog Configuration in file logger.conf.
unsigned int flex_uint32_t
Definition: ael_lex.c:59
char * fname
Definition: ael_lex.c:910
static void ael_yy_init_buffer(YY_BUFFER_STATE b, FILE *file, yyscan_t yyscanner)
Definition: ael_lex.c:2626
#define YY_BUF_SIZE
Definition: ael_lex.c:172
int ael_yyparse(struct parse_io *)
YY_BUFFER_STATE ael_yy_scan_bytes(yyconst char *bytes, int len, yyscan_t yyscanner)
Definition: ael_lex.c:2836
#define wordstate
Definition: ael_lex.c:978
static int input(yyscan_t yyscanner)
Definition: ael_lex.c:2433
short int flex_int16_t
Definition: ast_expr2f.c:55
int flex_int32_t
Definition: ast_expr2f.c:56
#define YY_BUFFER_EOF_PENDING
Definition: ael_lex.c:272
void ast_copy_string(char *dst, const char *src, size_t size)
Size-limited null-terminating string copy.
Definition: strings.h:401
static char pbcstack2[400]
Definition: ael_lex.c:867
#define S_OR(a, b)
returns the equivalent of logic or for strings: first one if not empty, otherwise second one...
Definition: strings.h:79
void * yyscan_t
Definition: ael_structs.h:71
#define MAX_INCLUDE_DEPTH
Definition: ael_lex.c:891
void ael_yyset_lval(YYSTYPE *yylval_param, yyscan_t yyscanner)
Definition: ael_lex.c:3045
static yyconst flex_int16_t yy_accept[285]
Definition: ael_lex.c:374
int globbuf_pos
Definition: ael_lex.c:914
#define YY_BREAK
Definition: ael_lex.c:1208
unsigned char YY_CHAR
Definition: ael_lex.c:343
int yy_more_len
Definition: ast_expr2f.c:659
static struct test_val b
int error(const char *format,...)
Definition: utils/frame.c:999
size_t yy_buffer_stack_max
Definition: ast_expr2f.c:639
Definition: ael.tab.c:178
#define YY_DO_BEFORE_ACTION
Definition: ael_lex.c:357
#define yymore()
Definition: ael_lex.c:774
int int32_t
Definition: db.h:60
int ael_yylex_init_extra(YY_EXTRA_TYPE user_defined, yyscan_t *scanner)
Definition: ael_lex.c:3099
__signed char int8_t
Definition: db.h:58
#define yyconst
Definition: ael_lex.c:112
#define strdup(a)
Definition: astmm.h:165
size_t yy_size_t
Definition: ast_expr2f.c:209
static void ael_yyensure_buffer_stack(yyscan_t yyscanner)
Definition: ael_lex.c:2736
yy_state_type yy_last_accepting_state
Definition: ast_expr2f.c:651
Definition: ael.tab.c:163
#define yyleng
Definition: ael_lex.c:136
#define paren
Definition: ael_lex.c:973
#define YY_FATAL_ERROR(msg)
Definition: ael_lex.c:1181
size_t yy_buffer_stack_top
Definition: ast_expr2f.c:638
static void pbcpush3(char x)
Definition: ael_lex.c:3275
static yyconst flex_int32_t yy_ec[256]
Definition: ael_lex.c:409
#define curlystate
Definition: ael_lex.c:977
#define YY_EXIT_FAILURE
Definition: ael_lex.c:2867
char * yy_buf_pos
Definition: ast_expr2f.c:219
short word
int ael_yylex_destroy(yyscan_t yyscanner)
Definition: ael_lex.c:3161
#define yyout
Definition: ael_lex.c:134
#define yyextra
Definition: ael_lex.c:135
FILE * yy_input_file
Definition: ast_expr2f.c:216