Imported Upstream version 3.3.1
[debian/amanda] / oldrecover-src / uscan.c
1
2 #line 3 "uscan.c"
3
4 #define  YY_INT_ALIGNED short int
5
6 /* A lexical scanner generated by flex */
7
8 #define FLEX_SCANNER
9 #define YY_FLEX_MAJOR_VERSION 2
10 #define YY_FLEX_MINOR_VERSION 5
11 #define YY_FLEX_SUBMINOR_VERSION 35
12 #if YY_FLEX_SUBMINOR_VERSION > 0
13 #define FLEX_BETA
14 #endif
15
16 /* First, we deal with  platform-specific or compiler-specific issues. */
17
18 /* begin standard C headers. */
19 #include <stdio.h>
20 #include <string.h>
21 #include <errno.h>
22 #include <stdlib.h>
23
24 /* end standard C headers. */
25
26 /* flex integer type definitions */
27
28 #ifndef FLEXINT_H
29 #define FLEXINT_H
30
31 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
32
33 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
34
35 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
36  * if you want the limit (max/min) macros for int types. 
37  */
38 #ifndef __STDC_LIMIT_MACROS
39 #define __STDC_LIMIT_MACROS 1
40 #endif
41
42 #include <inttypes.h>
43 typedef int8_t flex_int8_t;
44 typedef uint8_t flex_uint8_t;
45 typedef int16_t flex_int16_t;
46 typedef uint16_t flex_uint16_t;
47 typedef int32_t flex_int32_t;
48 typedef uint32_t flex_uint32_t;
49 #else
50 typedef signed char flex_int8_t;
51 typedef short int flex_int16_t;
52 typedef int flex_int32_t;
53 typedef unsigned char flex_uint8_t; 
54 typedef unsigned short int flex_uint16_t;
55 typedef unsigned int flex_uint32_t;
56 #endif /* ! C99 */
57
58 /* Limits of integral types. */
59 #ifndef INT8_MIN
60 #define INT8_MIN               (-128)
61 #endif
62 #ifndef INT16_MIN
63 #define INT16_MIN              (-32767-1)
64 #endif
65 #ifndef INT32_MIN
66 #define INT32_MIN              (-2147483647-1)
67 #endif
68 #ifndef INT8_MAX
69 #define INT8_MAX               (127)
70 #endif
71 #ifndef INT16_MAX
72 #define INT16_MAX              (32767)
73 #endif
74 #ifndef INT32_MAX
75 #define INT32_MAX              (2147483647)
76 #endif
77 #ifndef UINT8_MAX
78 #define UINT8_MAX              (255U)
79 #endif
80 #ifndef UINT16_MAX
81 #define UINT16_MAX             (65535U)
82 #endif
83 #ifndef UINT32_MAX
84 #define UINT32_MAX             (4294967295U)
85 #endif
86
87 #endif /* ! FLEXINT_H */
88
89 #ifdef __cplusplus
90
91 /* The "const" storage-class-modifier is valid. */
92 #define YY_USE_CONST
93
94 #else   /* ! __cplusplus */
95
96 /* C99 requires __STDC__ to be defined as 1. */
97 #if defined (__STDC__)
98
99 #define YY_USE_CONST
100
101 #endif  /* defined (__STDC__) */
102 #endif  /* ! __cplusplus */
103
104 #ifdef YY_USE_CONST
105 #define yyconst const
106 #else
107 #define yyconst
108 #endif
109
110 /* Returned upon end-of-file. */
111 #define YY_NULL 0
112
113 /* Promotes a possibly negative, possibly signed char to an unsigned
114  * integer for use as an array index.  If the signed char is negative,
115  * we want to instead treat it as an 8-bit unsigned char, hence the
116  * double cast.
117  */
118 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
119
120 /* Enter a start condition.  This macro really ought to take a parameter,
121  * but we do it the disgusting crufty way forced on us by the ()-less
122  * definition of BEGIN.
123  */
124 #define BEGIN (yy_start) = 1 + 2 *
125
126 /* Translate the current start state into a value that can be later handed
127  * to BEGIN to return to the state.  The YYSTATE alias is for lex
128  * compatibility.
129  */
130 #define YY_START (((yy_start) - 1) / 2)
131 #define YYSTATE YY_START
132
133 /* Action number for EOF rule of a given start state. */
134 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
135
136 /* Special action meaning "start processing a new file". */
137 #define YY_NEW_FILE yyrestart(yyin  )
138
139 #define YY_END_OF_BUFFER_CHAR 0
140
141 /* Size of default input buffer. */
142 #ifndef YY_BUF_SIZE
143 #define YY_BUF_SIZE 16384
144 #endif
145
146 /* The state buf must be large enough to hold one state per character in the main buffer.
147  */
148 #define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
149
150 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
151 #define YY_TYPEDEF_YY_BUFFER_STATE
152 typedef struct yy_buffer_state *YY_BUFFER_STATE;
153 #endif
154
155 extern int yyleng;
156
157 extern FILE *yyin, *yyout;
158
159 #define EOB_ACT_CONTINUE_SCAN 0
160 #define EOB_ACT_END_OF_FILE 1
161 #define EOB_ACT_LAST_MATCH 2
162
163     #define YY_LESS_LINENO(n)
164     
165 /* Return all but the first "n" matched characters back to the input stream. */
166 #define yyless(n) \
167         do \
168                 { \
169                 /* Undo effects of setting up yytext. */ \
170         int yyless_macro_arg = (n); \
171         YY_LESS_LINENO(yyless_macro_arg);\
172                 *yy_cp = (yy_hold_char); \
173                 YY_RESTORE_YY_MORE_OFFSET \
174                 (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
175                 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
176                 } \
177         while ( 0 )
178
179 #define unput(c) yyunput( c, (yytext_ptr)  )
180
181 #ifndef YY_TYPEDEF_YY_SIZE_T
182 #define YY_TYPEDEF_YY_SIZE_T
183 typedef size_t yy_size_t;
184 #endif
185
186 #ifndef YY_STRUCT_YY_BUFFER_STATE
187 #define YY_STRUCT_YY_BUFFER_STATE
188 struct yy_buffer_state
189         {
190         FILE *yy_input_file;
191
192         char *yy_ch_buf;                /* input buffer */
193         char *yy_buf_pos;               /* current position in input buffer */
194
195         /* Size of input buffer in bytes, not including room for EOB
196          * characters.
197          */
198         yy_size_t yy_buf_size;
199
200         /* Number of characters read into yy_ch_buf, not including EOB
201          * characters.
202          */
203         int yy_n_chars;
204
205         /* Whether we "own" the buffer - i.e., we know we created it,
206          * and can realloc() it to grow it, and should free() it to
207          * delete it.
208          */
209         int yy_is_our_buffer;
210
211         /* Whether this is an "interactive" input source; if so, and
212          * if we're using stdio for input, then we want to use getc()
213          * instead of fread(), to make sure we stop fetching input after
214          * each newline.
215          */
216         int yy_is_interactive;
217
218         /* Whether we're considered to be at the beginning of a line.
219          * If so, '^' rules will be active on the next match, otherwise
220          * not.
221          */
222         int yy_at_bol;
223
224     int yy_bs_lineno; /**< The line count. */
225     int yy_bs_column; /**< The column count. */
226     
227         /* Whether to try to fill the input buffer when we reach the
228          * end of it.
229          */
230         int yy_fill_buffer;
231
232         int yy_buffer_status;
233
234 #define YY_BUFFER_NEW 0
235 #define YY_BUFFER_NORMAL 1
236         /* When an EOF's been seen but there's still some text to process
237          * then we mark the buffer as YY_EOF_PENDING, to indicate that we
238          * shouldn't try reading from the input source any more.  We might
239          * still have a bunch of tokens to match, though, because of
240          * possible backing-up.
241          *
242          * When we actually see the EOF, we change the status to "new"
243          * (via yyrestart()), so that the user can continue scanning by
244          * just pointing yyin at a new input file.
245          */
246 #define YY_BUFFER_EOF_PENDING 2
247
248         };
249 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
250
251 /* Stack of input buffers. */
252 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
253 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
254 static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
255
256 /* We provide macros for accessing buffer states in case in the
257  * future we want to put the buffer states in a more general
258  * "scanner state".
259  *
260  * Returns the top of the stack, or NULL.
261  */
262 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
263                           ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
264                           : NULL)
265
266 /* Same as previous macro, but useful when we know that the buffer stack is not
267  * NULL or when we need an lvalue. For internal use only.
268  */
269 #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
270
271 /* yy_hold_char holds the character lost when yytext is formed. */
272 static char yy_hold_char;
273 static int yy_n_chars;          /* number of characters read into yy_ch_buf */
274 int yyleng;
275
276 /* Points to current character in buffer. */
277 static char *yy_c_buf_p = (char *) 0;
278 static int yy_init = 0;         /* whether we need to initialize */
279 static int yy_start = 0;        /* start state number */
280
281 /* Flag which is used to allow yywrap()'s to do buffer switches
282  * instead of setting up a fresh yyin.  A bit of a hack ...
283  */
284 static int yy_did_buffer_switch_on_eof;
285
286 void yyrestart (FILE *input_file  );
287 void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
288 YY_BUFFER_STATE yy_create_buffer (FILE *file,int size  );
289 void yy_delete_buffer (YY_BUFFER_STATE b  );
290 void yy_flush_buffer (YY_BUFFER_STATE b  );
291 void yypush_buffer_state (YY_BUFFER_STATE new_buffer  );
292 void yypop_buffer_state (void );
293
294 static void yyensure_buffer_stack (void );
295 static void yy_load_buffer_state (void );
296 static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
297
298 #define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
299
300 YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
301 YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
302 YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len  );
303
304 void *yyalloc (yy_size_t  );
305 void *yyrealloc (void *,yy_size_t  );
306 void yyfree (void *  );
307
308 #define yy_new_buffer yy_create_buffer
309
310 #define yy_set_interactive(is_interactive) \
311         { \
312         if ( ! YY_CURRENT_BUFFER ){ \
313         yyensure_buffer_stack (); \
314                 YY_CURRENT_BUFFER_LVALUE =    \
315             yy_create_buffer(yyin,YY_BUF_SIZE ); \
316         } \
317         YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
318         }
319
320 #define yy_set_bol(at_bol) \
321         { \
322         if ( ! YY_CURRENT_BUFFER ){\
323         yyensure_buffer_stack (); \
324                 YY_CURRENT_BUFFER_LVALUE =    \
325             yy_create_buffer(yyin,YY_BUF_SIZE ); \
326         } \
327         YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
328         }
329
330 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
331
332 /* Begin user sect3 */
333
334 typedef unsigned char YY_CHAR;
335
336 FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
337
338 typedef int yy_state_type;
339
340 extern int yylineno;
341
342 int yylineno = 1;
343
344 extern char *yytext;
345 #define yytext_ptr yytext
346
347 static yy_state_type yy_get_previous_state (void );
348 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
349 static int yy_get_next_buffer (void );
350 static void yy_fatal_error (yyconst char msg[]  );
351
352 /* Done after the current pattern has been matched and before the
353  * corresponding action - sets up yytext.
354  */
355 #define YY_DO_BEFORE_ACTION \
356         (yytext_ptr) = yy_bp; \
357         yyleng = (size_t) (yy_cp - yy_bp); \
358         (yy_hold_char) = *yy_cp; \
359         *yy_cp = '\0'; \
360         (yy_c_buf_p) = yy_cp;
361
362 #define YY_NUM_RULES 40
363 #define YY_END_OF_BUFFER 41
364 /* This struct is not used in this scanner,
365    but its presence is necessary. */
366 struct yy_trans_info
367         {
368         flex_int32_t yy_verify;
369         flex_int32_t yy_nxt;
370         };
371 static yyconst flex_int16_t yy_accept[131] =
372     {   0,
373         0,    0,    0,    0,   41,   40,   39,   38,   34,   38,
374        38,   22,   38,   38,   38,   38,   38,   38,   38,   38,
375        38,   38,   38,   35,   37,   40,   39,   38,   38,   38,
376        38,   38,    8,   38,   38,   38,   38,   38,   38,   38,
377        38,   13,   38,   38,   38,   38,   38,   38,   35,   36,
378        38,   38,   38,   14,    9,   38,   38,   38,   38,   38,
379        38,   23,   38,   38,   38,   19,   38,   38,   26,   27,
380        29,   38,   38,   15,   38,   38,   11,   38,   21,   38,
381        16,   24,   28,   10,   38,   38,   38,   38,   30,   31,
382        20,   38,   38,   38,   38,   38,   38,   38,   38,   38,
383
384        38,   38,   17,   38,   38,   38,   38,   38,   38,   38,
385        38,   38,   38,   18,   25,   12,   38,   38,    5,    4,
386         3,    6,    7,   38,    2,    1,   33,   38,   32,    0
387     } ;
388
389 static yyconst flex_int32_t yy_ec[256] =
390     {   0,
391         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
392         2,    2,    2,    1,    1,    1,    1,    1,    1,    1,
393         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
394         1,    2,    4,    5,    4,    4,    4,    4,    4,    4,
395         4,    4,    4,    4,    6,    4,    4,    7,    7,    7,
396         7,    7,    7,    7,    7,    7,    7,    4,    4,    4,
397         4,    4,    8,    4,    4,    4,    4,    4,    4,    4,
398         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
399         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
400         4,    9,    4,    4,    4,    4,   10,   11,   12,   13,
401
402        14,    4,    4,   15,   16,    4,   17,   18,   19,    4,
403        20,   21,   22,   23,   24,   25,   26,    4,   27,   28,
404        29,    4,    4,    4,    4,    4,    1,    4,    4,    4,
405         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
406         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
407         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
408         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
409         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
410         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
411         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
412
413         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
414         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
415         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
416         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
417         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
418         4,    4,    4,    4,    4
419     } ;
420
421 static yyconst flex_int32_t yy_meta[30] =
422     {   0,
423         1,    1,    2,    3,    4,    3,    3,    3,    5,    3,
424         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
425         3,    3,    3,    3,    3,    3,    3,    3,    3
426     } ;
427
428 static yyconst flex_int16_t yy_base[135] =
429     {   0,
430         0,    0,   25,   26,  161,  162,   30,    0,  162,  154,
431        30,    0,  146,   25,  144,  129,   25,   28,  136,  128,
432       128,   28,  143,    0,  162,    0,   43,    0,   44,  145,
433        47,  138,  122,  135,  130,   32,  129,  122,  132,  120,
434       116,    0,  129,  128,  124,  114,  127,  114,    0,  162,
435       129,   49,   52,  107,    0,  124,  119,  107,  108,  109,
436       104,    0,  103,  114,  112,    0,  100,   47,    0,    0,
437       117,  116,  115,    0,   98,   95,    0,  109,    0,   98,
438        48,    0,    0,    0,   54,   97,   96,  105,  107,   61,
439         0,   99,  100,   88,   94,   89,   83,   83,   82,   92,
440
441        83,   96,   74,   76,   71,   75,   74,   83,   79,   70,
442        80,   79,   67,    0,    0,    0,   72,   58,    0,    0,
443         0,    0,    0,   64,    0,    0,   69,   62,   58,  162,
444        76,   79,   84,   87
445     } ;
446
447 static yyconst flex_int16_t yy_def[135] =
448     {   0,
449       130,    1,  131,  131,  130,  130,  130,  132,  130,  132,
450       132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
451       132,  132,  132,  133,  130,  134,  130,  132,  132,  132,
452       132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
453       132,  132,  132,  132,  132,  132,  132,  132,  133,  130,
454       132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
455       132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
456       132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
457       132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
458       132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
459
460       132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
461       132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
462       132,  132,  132,  132,  132,  132,  132,  132,  132,    0,
463       130,  130,  130,  130
464     } ;
465
466 static yyconst flex_int16_t yy_nxt[192] =
467     {   0,
468         6,    7,    7,    8,    9,   10,   11,   12,    8,   13,
469         8,   14,   15,   16,   17,    8,    8,   18,   19,    8,
470        20,   21,    8,   22,   23,    8,    8,    8,    8,   25,
471        25,   27,   27,   26,   26,   30,   31,   33,   37,   39,
472        38,   46,   34,   40,   27,   27,   47,   58,   41,   51,
473        52,   42,   30,   31,   72,   52,   59,   73,   53,   85,
474        95,   86,   96,   97,  129,   87,  102,   90,  129,   98,
475       127,   88,  124,  113,  128,  127,   24,   24,   24,   24,
476        24,   28,  126,   28,   49,   49,   49,   50,  125,   50,
477        50,   50,  123,  122,  121,  120,  119,  118,  117,  116,
478
479       115,  114,  113,  112,  111,  110,  109,  108,  107,  106,
480       105,  104,  103,   89,  101,  100,   99,   94,   93,   92,
481        91,   90,   89,   71,   84,   83,   82,   81,   80,   79,
482        78,   77,   76,   75,   74,   71,   70,   69,   68,   67,
483        66,   65,   64,   63,   62,   61,   60,   57,   56,   55,
484        54,   53,   48,   45,   44,   43,   36,   35,   32,   29,
485       130,    5,  130,  130,  130,  130,  130,  130,  130,  130,
486       130,  130,  130,  130,  130,  130,  130,  130,  130,  130,
487       130,  130,  130,  130,  130,  130,  130,  130,  130,  130,
488       130
489
490     } ;
491
492 static yyconst flex_int16_t yy_chk[192] =
493     {   0,
494         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
495         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
496         1,    1,    1,    1,    1,    1,    1,    1,    1,    3,
497         4,    7,    7,    3,    4,   11,   11,   14,   17,   18,
498        17,   22,   14,   18,   27,   27,   22,   36,   18,   29,
499        29,   18,   31,   31,   52,   52,   36,   53,   53,   68,
500        81,   68,   81,   85,  129,   68,   90,   90,  128,   85,
501       124,   68,  113,  113,  127,  127,  131,  131,  131,  131,
502       131,  132,  118,  132,  133,  133,  133,  134,  117,  134,
503       134,  134,  112,  111,  110,  109,  108,  107,  106,  105,
504
505       104,  103,  102,  101,  100,   99,   98,   97,   96,   95,
506        94,   93,   92,   89,   88,   87,   86,   80,   78,   76,
507        75,   73,   72,   71,   67,   65,   64,   63,   61,   60,
508        59,   58,   57,   56,   54,   51,   48,   47,   46,   45,
509        44,   43,   41,   40,   39,   38,   37,   35,   34,   33,
510        32,   30,   23,   21,   20,   19,   16,   15,   13,   10,
511         5,  130,  130,  130,  130,  130,  130,  130,  130,  130,
512       130,  130,  130,  130,  130,  130,  130,  130,  130,  130,
513       130,  130,  130,  130,  130,  130,  130,  130,  130,  130,
514       130
515
516     } ;
517
518 static yy_state_type yy_last_accepting_state;
519 static char *yy_last_accepting_cpos;
520
521 extern int yy_flex_debug;
522 int yy_flex_debug = 0;
523
524 /* The intent behind this definition is that it'll catch
525  * any uses of REJECT which flex missed.
526  */
527 #define REJECT reject_used_but_not_detected
528 #define yymore() yymore_used_but_not_detected
529 #define YY_MORE_ADJ 0
530 #define YY_RESTORE_YY_MORE_OFFSET
531 char *yytext;
532 #line 1 "uscan.l"
533 /*
534  * amanda, the advanced maryland automatic network disk archiver
535  * Copyright (c) 1991-2000 University of Maryland at College Park
536  * All Rights Reserved.
537  *
538  * Permission to use, copy, modify, distribute, and sell this software and its
539  * documentation for any purpose is hereby granted without fee, provided that
540  * the above copyright notice appear in all copies and that both that
541  * copyright notice and this permission notice appear in supporting
542  * documentation, and that the name of U.M. not be used in advertising or
543  * publicity pertaining to distribution of the software without specific,
544  * written prior permission.  U.M. makes no representations about the
545  * suitability of this software for any purpose.  It is provided "as is"
546  * without express or implied warranty.
547  *
548  * U.M. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
549  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL U.M.
550  * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
551  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
552  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
553  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
554  *
555  * Authors: the Amanda Development Team.  Its members are listed in a
556  * file named AUTHORS, in the root directory of this distribution.
557  */
558 /*
559  * $Id: uscan.l,v 1.3 2006/07/05 11:15:56 martinea Exp $
560  *
561  * lexer for amrecover interactive language
562  */
563 #line 32 "uscan.l"
564 #include "amanda.h"
565 #include "uparse.h"
566
567 /*
568  * We redefine this here to prevent compiler warning about ignoring fwrite
569  * return value...
570  */
571 #undef ECHO
572 #define ECHO do {                                               \
573                 if (fwrite(yytext, (size_t)yyleng, 1, yyout) <= 0) {    \
574                     yyerror("ECHO failure");                    \
575                 }                                               \
576         } while (0)
577
578 #define YY_NO_UNPUT
579
580 #define DATE_ALLOC_SIZE         sizeof("YYYY-MM-DD-HH-MM-SS")   /* includes null */
581
582 #define YY_DECL int yylex()
583 extern int yylex(void);
584
585 extern void     yyerror(char *s);
586 extern int      yyparse(void);
587 static int      ll_parse_date(int type, char *text);
588 int             process_line(char *line);
589
590 #line 62 "uscan.l"
591 static char *string_buf = NULL;
592 #line 593 "uscan.c"
593
594 #define INITIAL 0
595 #define quotedpath 1
596
597 #ifndef YY_NO_UNISTD_H
598 /* Special case for "unistd.h", since it is non-ANSI. We include it way
599  * down here because we want the user's section 1 to have been scanned first.
600  * The user has a chance to override it with an option.
601  */
602 #include <unistd.h>
603 #endif
604
605 #ifndef YY_EXTRA_TYPE
606 #define YY_EXTRA_TYPE void *
607 #endif
608
609 static int yy_init_globals (void );
610
611 /* Accessor methods to globals.
612    These are made visible to non-reentrant scanners for convenience. */
613
614 int yylex_destroy (void );
615
616 int yyget_debug (void );
617
618 void yyset_debug (int debug_flag  );
619
620 YY_EXTRA_TYPE yyget_extra (void );
621
622 void yyset_extra (YY_EXTRA_TYPE user_defined  );
623
624 FILE *yyget_in (void );
625
626 void yyset_in  (FILE * in_str  );
627
628 FILE *yyget_out (void );
629
630 void yyset_out  (FILE * out_str  );
631
632 int yyget_leng (void );
633
634 char *yyget_text (void );
635
636 int yyget_lineno (void );
637
638 void yyset_lineno (int line_number  );
639
640 /* Macros after this point can all be overridden by user definitions in
641  * section 1.
642  */
643
644 #ifndef YY_SKIP_YYWRAP
645 #ifdef __cplusplus
646 extern "C" int yywrap (void );
647 #else
648 extern int yywrap (void );
649 #endif
650 #endif
651
652     static void yyunput (int c,char *buf_ptr  );
653     
654 #ifndef yytext_ptr
655 static void yy_flex_strncpy (char *,yyconst char *,int );
656 #endif
657
658 #ifdef YY_NEED_STRLEN
659 static int yy_flex_strlen (yyconst char * );
660 #endif
661
662 #ifndef YY_NO_INPUT
663
664 #ifdef __cplusplus
665 static int yyinput (void );
666 #else
667 static int input (void );
668 #endif
669
670 #endif
671
672 /* Amount of stuff to slurp up with each read. */
673 #ifndef YY_READ_BUF_SIZE
674 #define YY_READ_BUF_SIZE 8192
675 #endif
676
677 /* Copy whatever the last rule matched to the standard output. */
678 #ifndef ECHO
679 /* This used to be an fputs(), but since the string might contain NUL's,
680  * we now use fwrite().
681  */
682 #define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
683 #endif
684
685 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
686  * is returned in "result".
687  */
688 #ifndef YY_INPUT
689 #define YY_INPUT(buf,result,max_size) \
690         if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
691                 { \
692                 int c = '*'; \
693                 unsigned n; \
694                 for ( n = 0; n < max_size && \
695                              (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
696                         buf[n] = (char) c; \
697                 if ( c == '\n' ) \
698                         buf[n++] = (char) c; \
699                 if ( c == EOF && ferror( yyin ) ) \
700                         YY_FATAL_ERROR( "input in flex scanner failed" ); \
701                 result = n; \
702                 } \
703         else \
704                 { \
705                 errno=0; \
706                 while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
707                         { \
708                         if( errno != EINTR) \
709                                 { \
710                                 YY_FATAL_ERROR( "input in flex scanner failed" ); \
711                                 break; \
712                                 } \
713                         errno=0; \
714                         clearerr(yyin); \
715                         } \
716                 }\
717 \
718
719 #endif
720
721 /* No semi-colon after return; correct usage is to write "yyterminate();" -
722  * we don't want an extra ';' after the "return" because that will cause
723  * some compilers to complain about unreachable statements.
724  */
725 #ifndef yyterminate
726 #define yyterminate() return YY_NULL
727 #endif
728
729 /* Number of entries by which start-condition stack grows. */
730 #ifndef YY_START_STACK_INCR
731 #define YY_START_STACK_INCR 25
732 #endif
733
734 /* Report a fatal error. */
735 #ifndef YY_FATAL_ERROR
736 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
737 #endif
738
739 /* end tables serialization structures and prototypes */
740
741 /* Default declaration of generated scanner - a define so the user can
742  * easily add parameters.
743  */
744 #ifndef YY_DECL
745 #define YY_DECL_IS_OURS 1
746
747 extern int yylex (void);
748
749 #define YY_DECL int yylex (void)
750 #endif /* !YY_DECL */
751
752 /* Code executed at the beginning of each rule, after yytext and yyleng
753  * have been set up.
754  */
755 #ifndef YY_USER_ACTION
756 #define YY_USER_ACTION
757 #endif
758
759 /* Code executed at the end of each rule. */
760 #ifndef YY_BREAK
761 #define YY_BREAK break;
762 #endif
763
764 #define YY_RULE_SETUP \
765         YY_USER_ACTION
766
767 /** The main scanner function which does all the work.
768  */
769 YY_DECL
770 {
771         register yy_state_type yy_current_state;
772         register char *yy_cp, *yy_bp;
773         register int yy_act;
774     
775 #line 65 "uscan.l"
776
777
778
779     /* literal keyword tokens */
780
781
782 #line 783 "uscan.c"
783
784         if ( !(yy_init) )
785                 {
786                 (yy_init) = 1;
787
788 #ifdef YY_USER_INIT
789                 YY_USER_INIT;
790 #endif
791
792                 if ( ! (yy_start) )
793                         (yy_start) = 1; /* first start state */
794
795                 if ( ! yyin )
796                         yyin = stdin;
797
798                 if ( ! yyout )
799                         yyout = stdout;
800
801                 if ( ! YY_CURRENT_BUFFER ) {
802                         yyensure_buffer_stack ();
803                         YY_CURRENT_BUFFER_LVALUE =
804                                 yy_create_buffer(yyin,YY_BUF_SIZE );
805                 }
806
807                 yy_load_buffer_state( );
808                 }
809
810         while ( 1 )             /* loops until end-of-file is reached */
811                 {
812                 yy_cp = (yy_c_buf_p);
813
814                 /* Support of yytext. */
815                 *yy_cp = (yy_hold_char);
816
817                 /* yy_bp points to the position in yy_ch_buf of the start of
818                  * the current run.
819                  */
820                 yy_bp = yy_cp;
821
822                 yy_current_state = (yy_start);
823 yy_match:
824                 do
825                         {
826                         register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
827                         if ( yy_accept[yy_current_state] )
828                                 {
829                                 (yy_last_accepting_state) = yy_current_state;
830                                 (yy_last_accepting_cpos) = yy_cp;
831                                 }
832                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
833                                 {
834                                 yy_current_state = (int) yy_def[yy_current_state];
835                                 if ( yy_current_state >= 131 )
836                                         yy_c = yy_meta[(unsigned int) yy_c];
837                                 }
838                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
839                         ++yy_cp;
840                         }
841                 while ( yy_base[yy_current_state] != 162 );
842
843 yy_find_action:
844                 yy_act = yy_accept[yy_current_state];
845                 if ( yy_act == 0 )
846                         { /* have to back up */
847                         yy_cp = (yy_last_accepting_cpos);
848                         yy_current_state = (yy_last_accepting_state);
849                         yy_act = yy_accept[yy_current_state];
850                         }
851
852                 YY_DO_BEFORE_ACTION;
853
854 do_action:      /* This label is used only to access EOF actions. */
855
856                 switch ( yy_act )
857         { /* beginning of action switch */
858                         case 0: /* must back up */
859                         /* undo the effects of YY_DO_BEFORE_ACTION */
860                         *yy_cp = (yy_hold_char);
861                         yy_cp = (yy_last_accepting_cpos);
862                         yy_current_state = (yy_last_accepting_state);
863                         goto yy_find_action;
864
865 case 1:
866 YY_RULE_SETUP
867 #line 71 "uscan.l"
868 { return LISTHOST; }
869         YY_BREAK
870 case 2:
871 YY_RULE_SETUP
872 #line 72 "uscan.l"
873 { return LISTDISK; }
874         YY_BREAK
875 case 3:
876 YY_RULE_SETUP
877 #line 73 "uscan.l"
878 { return SETHOST; }
879         YY_BREAK
880 case 4:
881 YY_RULE_SETUP
882 #line 74 "uscan.l"
883 { return SETDISK; }
884         YY_BREAK
885 case 5:
886 YY_RULE_SETUP
887 #line 75 "uscan.l"
888 { return SETDATE; }
889         YY_BREAK
890 case 6:
891 YY_RULE_SETUP
892 #line 76 "uscan.l"
893 { return SETMODE; }
894         YY_BREAK
895 case 7:
896 YY_RULE_SETUP
897 #line 77 "uscan.l"
898 { return SETTAPE; }
899         YY_BREAK
900 case 8:
901 YY_RULE_SETUP
902 #line 78 "uscan.l"
903 { return CD; }
904         YY_BREAK
905 case 9:
906 YY_RULE_SETUP
907 #line 79 "uscan.l"
908 { return CDX; }
909         YY_BREAK
910 case 10:
911 YY_RULE_SETUP
912 #line 80 "uscan.l"
913 { return QUIT; }
914         YY_BREAK
915 case 11:
916 YY_RULE_SETUP
917 #line 81 "uscan.l"
918 { return QUIT; }
919         YY_BREAK
920 case 12:
921 YY_RULE_SETUP
922 #line 82 "uscan.l"
923 { return DHIST; }
924         YY_BREAK
925 case 13:
926 YY_RULE_SETUP
927 #line 83 "uscan.l"
928 { return LS; }
929         YY_BREAK
930 case 14:
931 YY_RULE_SETUP
932 #line 84 "uscan.l"
933 { return ADD; }
934         YY_BREAK
935 case 15:
936 YY_RULE_SETUP
937 #line 85 "uscan.l"
938 { return ADDX; }
939         YY_BREAK
940 case 16:
941 YY_RULE_SETUP
942 #line 86 "uscan.l"
943 { return LIST; }
944         YY_BREAK
945 case 17:
946 YY_RULE_SETUP
947 #line 87 "uscan.l"
948 { return DELETE; }
949         YY_BREAK
950 case 18:
951 YY_RULE_SETUP
952 #line 88 "uscan.l"
953 { return DELETEX; }
954         YY_BREAK
955 case 19:
956 YY_RULE_SETUP
957 #line 89 "uscan.l"
958 { return PWD; }
959         YY_BREAK
960 case 20:
961 YY_RULE_SETUP
962 #line 90 "uscan.l"
963 { return CLEAR; }
964         YY_BREAK
965 case 21:
966 YY_RULE_SETUP
967 #line 91 "uscan.l"
968 { return HELP; }
969         YY_BREAK
970 case 22:
971 YY_RULE_SETUP
972 #line 92 "uscan.l"
973 { return HELP; }
974         YY_BREAK
975 case 23:
976 YY_RULE_SETUP
977 #line 93 "uscan.l"
978 { return LCD; }
979         YY_BREAK
980 case 24:
981 YY_RULE_SETUP
982 #line 94 "uscan.l"
983 { return LPWD; }
984         YY_BREAK
985 case 25:
986 YY_RULE_SETUP
987 #line 95 "uscan.l"
988 { return EXTRACT; }
989         YY_BREAK
990 case 26:
991 YY_RULE_SETUP
992 #line 96 "uscan.l"
993 { return SMB; }
994         YY_BREAK
995 case 27:
996 YY_RULE_SETUP
997 #line 97 "uscan.l"
998 { return TAR; }
999         YY_BREAK
1000 case 28:
1001 YY_RULE_SETUP
1002 #line 98 "uscan.l"
1003 { return MODE; }
1004         YY_BREAK
1005
1006     /* dates */
1007
1008 case 29:
1009 YY_RULE_SETUP
1010 #line 104 "uscan.l"
1011 { return ll_parse_date(1, yytext); }
1012         YY_BREAK
1013 case 30:
1014 YY_RULE_SETUP
1015 #line 105 "uscan.l"
1016 { return ll_parse_date(2, yytext); }
1017         YY_BREAK
1018 case 31:
1019 YY_RULE_SETUP
1020 #line 106 "uscan.l"
1021 { return ll_parse_date(3, yytext); }
1022         YY_BREAK
1023 case 32:
1024 YY_RULE_SETUP
1025 #line 107 "uscan.l"
1026 { return ll_parse_date(4, yytext); }
1027         YY_BREAK
1028 case 33:
1029 YY_RULE_SETUP
1030 #line 108 "uscan.l"
1031 { return ll_parse_date(5, yytext); }
1032         YY_BREAK
1033
1034     /* quoted file names */
1035
1036 case 34:
1037 YY_RULE_SETUP
1038 #line 114 "uscan.l"
1039 {
1040     if(string_buf != NULL) {
1041         g_printf("ERROR:string_buf != NULL: %s\n",string_buf);
1042     }
1043     BEGIN(quotedpath);
1044     strappend(string_buf, yytext);
1045 }
1046         YY_BREAK
1047 case 35:
1048 /* rule 35 can match eol */
1049 YY_RULE_SETUP
1050 #line 122 "uscan.l"
1051 {
1052     strappend(string_buf, yytext);
1053 }
1054         YY_BREAK
1055 case 36:
1056 YY_RULE_SETUP
1057 #line 126 "uscan.l"
1058 {
1059     /* escaped character (including quote) */
1060     strappend(string_buf, yytext);
1061 }
1062         YY_BREAK
1063 case 37:
1064 YY_RULE_SETUP
1065 #line 131 "uscan.l"
1066 { /* saw closing quote - all done */
1067     strappend(string_buf, yytext);
1068     yylval.strval = string_buf;
1069     string_buf = NULL;
1070     BEGIN(INITIAL);
1071     return PATH;
1072 }
1073         YY_BREAK
1074
1075     /* file names */
1076
1077 case 38:
1078 YY_RULE_SETUP
1079 #line 143 "uscan.l"
1080 {
1081     yylval.strval = stralloc(yytext);
1082     return PATH;
1083 }
1084         YY_BREAK
1085
1086     /* whitespace */
1087
1088 case 39:
1089 /* rule 39 can match eol */
1090 YY_RULE_SETUP
1091 #line 152 "uscan.l"
1092 ;     /* whitespace */
1093         YY_BREAK
1094
1095     /* anything else */
1096     /* everything should have been handled by now, so this rule is disabled */
1097
1098
1099 #if 0
1100 .       { yyerror("invalid character"); }
1101 #endif
1102
1103 case 40:
1104 YY_RULE_SETUP
1105 #line 165 "uscan.l"
1106 ECHO;
1107         YY_BREAK
1108 #line 1109 "uscan.c"
1109 case YY_STATE_EOF(INITIAL):
1110 case YY_STATE_EOF(quotedpath):
1111         yyterminate();
1112
1113         case YY_END_OF_BUFFER:
1114                 {
1115                 /* Amount of text matched not including the EOB char. */
1116                 int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
1117
1118                 /* Undo the effects of YY_DO_BEFORE_ACTION. */
1119                 *yy_cp = (yy_hold_char);
1120                 YY_RESTORE_YY_MORE_OFFSET
1121
1122                 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
1123                         {
1124                         /* We're scanning a new file or input source.  It's
1125                          * possible that this happened because the user
1126                          * just pointed yyin at a new source and called
1127                          * yylex().  If so, then we have to assure
1128                          * consistency between YY_CURRENT_BUFFER and our
1129                          * globals.  Here is the right place to do so, because
1130                          * this is the first action (other than possibly a
1131                          * back-up) that will match for the new input source.
1132                          */
1133                         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
1134                         YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
1135                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
1136                         }
1137
1138                 /* Note that here we test for yy_c_buf_p "<=" to the position
1139                  * of the first EOB in the buffer, since yy_c_buf_p will
1140                  * already have been incremented past the NUL character
1141                  * (since all states make transitions on EOB to the
1142                  * end-of-buffer state).  Contrast this with the test
1143                  * in input().
1144                  */
1145                 if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
1146                         { /* This was really a NUL. */
1147                         yy_state_type yy_next_state;
1148
1149                         (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
1150
1151                         yy_current_state = yy_get_previous_state(  );
1152
1153                         /* Okay, we're now positioned to make the NUL
1154                          * transition.  We couldn't have
1155                          * yy_get_previous_state() go ahead and do it
1156                          * for us because it doesn't know how to deal
1157                          * with the possibility of jamming (and we don't
1158                          * want to build jamming into it because then it
1159                          * will run more slowly).
1160                          */
1161
1162                         yy_next_state = yy_try_NUL_trans( yy_current_state );
1163
1164                         yy_bp = (yytext_ptr) + YY_MORE_ADJ;
1165
1166                         if ( yy_next_state )
1167                                 {
1168                                 /* Consume the NUL. */
1169                                 yy_cp = ++(yy_c_buf_p);
1170                                 yy_current_state = yy_next_state;
1171                                 goto yy_match;
1172                                 }
1173
1174                         else
1175                                 {
1176                                 yy_cp = (yy_c_buf_p);
1177                                 goto yy_find_action;
1178                                 }
1179                         }
1180
1181                 else switch ( yy_get_next_buffer(  ) )
1182                         {
1183                         case EOB_ACT_END_OF_FILE:
1184                                 {
1185                                 (yy_did_buffer_switch_on_eof) = 0;
1186
1187                                 if ( yywrap( ) )
1188                                         {
1189                                         /* Note: because we've taken care in
1190                                          * yy_get_next_buffer() to have set up
1191                                          * yytext, we can now set up
1192                                          * yy_c_buf_p so that if some total
1193                                          * hoser (like flex itself) wants to
1194                                          * call the scanner after we return the
1195                                          * YY_NULL, it'll still work - another
1196                                          * YY_NULL will get returned.
1197                                          */
1198                                         (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
1199
1200                                         yy_act = YY_STATE_EOF(YY_START);
1201                                         goto do_action;
1202                                         }
1203
1204                                 else
1205                                         {
1206                                         if ( ! (yy_did_buffer_switch_on_eof) )
1207                                                 YY_NEW_FILE;
1208                                         }
1209                                 break;
1210                                 }
1211
1212                         case EOB_ACT_CONTINUE_SCAN:
1213                                 (yy_c_buf_p) =
1214                                         (yytext_ptr) + yy_amount_of_matched_text;
1215
1216                                 yy_current_state = yy_get_previous_state(  );
1217
1218                                 yy_cp = (yy_c_buf_p);
1219                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
1220                                 goto yy_match;
1221
1222                         case EOB_ACT_LAST_MATCH:
1223                                 (yy_c_buf_p) =
1224                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
1225
1226                                 yy_current_state = yy_get_previous_state(  );
1227
1228                                 yy_cp = (yy_c_buf_p);
1229                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
1230                                 goto yy_find_action;
1231                         }
1232                 break;
1233                 }
1234
1235         default:
1236                 YY_FATAL_ERROR(
1237                         "fatal flex scanner internal error--no action found" );
1238         } /* end of action switch */
1239                 } /* end of scanning one token */
1240 } /* end of yylex */
1241
1242 /* yy_get_next_buffer - try to read in a new buffer
1243  *
1244  * Returns a code representing an action:
1245  *      EOB_ACT_LAST_MATCH -
1246  *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
1247  *      EOB_ACT_END_OF_FILE - end of file
1248  */
1249 static int yy_get_next_buffer (void)
1250 {
1251         register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
1252         register char *source = (yytext_ptr);
1253         register int number_to_move, i;
1254         int ret_val;
1255
1256         if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
1257                 YY_FATAL_ERROR(
1258                 "fatal flex scanner internal error--end of buffer missed" );
1259
1260         if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
1261                 { /* Don't try to fill the buffer, so this is an EOF. */
1262                 if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
1263                         {
1264                         /* We matched a single character, the EOB, so
1265                          * treat this as a final EOF.
1266                          */
1267                         return EOB_ACT_END_OF_FILE;
1268                         }
1269
1270                 else
1271                         {
1272                         /* We matched some text prior to the EOB, first
1273                          * process it.
1274                          */
1275                         return EOB_ACT_LAST_MATCH;
1276                         }
1277                 }
1278
1279         /* Try to read more data. */
1280
1281         /* First move last chars to start of buffer. */
1282         number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
1283
1284         for ( i = 0; i < number_to_move; ++i )
1285                 *(dest++) = *(source++);
1286
1287         if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
1288                 /* don't do the read, it's not guaranteed to return an EOF,
1289                  * just force an EOF
1290                  */
1291                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
1292
1293         else
1294                 {
1295                         int num_to_read =
1296                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
1297
1298                 while ( num_to_read <= 0 )
1299                         { /* Not enough room in the buffer - grow it. */
1300
1301                         /* just a shorter name for the current buffer */
1302                         YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
1303
1304                         int yy_c_buf_p_offset =
1305                                 (int) ((yy_c_buf_p) - b->yy_ch_buf);
1306
1307                         if ( b->yy_is_our_buffer )
1308                                 {
1309                                 int new_size = b->yy_buf_size * 2;
1310
1311                                 if ( new_size <= 0 )
1312                                         b->yy_buf_size += b->yy_buf_size / 8;
1313                                 else
1314                                         b->yy_buf_size *= 2;
1315
1316                                 b->yy_ch_buf = (char *)
1317                                         /* Include room in for 2 EOB chars. */
1318                                         yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
1319                                 }
1320                         else
1321                                 /* Can't grow it, we don't own it. */
1322                                 b->yy_ch_buf = 0;
1323
1324                         if ( ! b->yy_ch_buf )
1325                                 YY_FATAL_ERROR(
1326                                 "fatal error - scanner input buffer overflow" );
1327
1328                         (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
1329
1330                         num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
1331                                                 number_to_move - 1;
1332
1333                         }
1334
1335                 if ( num_to_read > YY_READ_BUF_SIZE )
1336                         num_to_read = YY_READ_BUF_SIZE;
1337
1338                 /* Read in more data. */
1339                 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
1340                         (yy_n_chars), (size_t) num_to_read );
1341
1342                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
1343                 }
1344
1345         if ( (yy_n_chars) == 0 )
1346                 {
1347                 if ( number_to_move == YY_MORE_ADJ )
1348                         {
1349                         ret_val = EOB_ACT_END_OF_FILE;
1350                         yyrestart(yyin  );
1351                         }
1352
1353                 else
1354                         {
1355                         ret_val = EOB_ACT_LAST_MATCH;
1356                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
1357                                 YY_BUFFER_EOF_PENDING;
1358                         }
1359                 }
1360
1361         else
1362                 ret_val = EOB_ACT_CONTINUE_SCAN;
1363
1364         if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
1365                 /* Extend the array by 50%, plus the number we really need. */
1366                 yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
1367                 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
1368                 if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
1369                         YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
1370         }
1371
1372         (yy_n_chars) += number_to_move;
1373         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
1374         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
1375
1376         (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
1377
1378         return ret_val;
1379 }
1380
1381 /* yy_get_previous_state - get the state just before the EOB char was reached */
1382
1383     static yy_state_type yy_get_previous_state (void)
1384 {
1385         register yy_state_type yy_current_state;
1386         register char *yy_cp;
1387     
1388         yy_current_state = (yy_start);
1389
1390         for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
1391                 {
1392                 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
1393                 if ( yy_accept[yy_current_state] )
1394                         {
1395                         (yy_last_accepting_state) = yy_current_state;
1396                         (yy_last_accepting_cpos) = yy_cp;
1397                         }
1398                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1399                         {
1400                         yy_current_state = (int) yy_def[yy_current_state];
1401                         if ( yy_current_state >= 131 )
1402                                 yy_c = yy_meta[(unsigned int) yy_c];
1403                         }
1404                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1405                 }
1406
1407         return yy_current_state;
1408 }
1409
1410 /* yy_try_NUL_trans - try to make a transition on the NUL character
1411  *
1412  * synopsis
1413  *      next_state = yy_try_NUL_trans( current_state );
1414  */
1415     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
1416 {
1417         register int yy_is_jam;
1418         register char *yy_cp = (yy_c_buf_p);
1419
1420         register YY_CHAR yy_c = 1;
1421         if ( yy_accept[yy_current_state] )
1422                 {
1423                 (yy_last_accepting_state) = yy_current_state;
1424                 (yy_last_accepting_cpos) = yy_cp;
1425                 }
1426         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1427                 {
1428                 yy_current_state = (int) yy_def[yy_current_state];
1429                 if ( yy_current_state >= 131 )
1430                         yy_c = yy_meta[(unsigned int) yy_c];
1431                 }
1432         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1433         yy_is_jam = (yy_current_state == 130);
1434
1435         return yy_is_jam ? 0 : yy_current_state;
1436 }
1437
1438     static void yyunput (int c, register char * yy_bp )
1439 {
1440         register char *yy_cp;
1441     
1442     yy_cp = (yy_c_buf_p);
1443
1444         /* undo effects of setting up yytext */
1445         *yy_cp = (yy_hold_char);
1446
1447         if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
1448                 { /* need to shift things up to make room */
1449                 /* +2 for EOB chars. */
1450                 register int number_to_move = (yy_n_chars) + 2;
1451                 register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
1452                                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
1453                 register char *source =
1454                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
1455
1456                 while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
1457                         *--dest = *--source;
1458
1459                 yy_cp += (int) (dest - source);
1460                 yy_bp += (int) (dest - source);
1461                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
1462                         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
1463
1464                 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
1465                         YY_FATAL_ERROR( "flex scanner push-back overflow" );
1466                 }
1467
1468         *--yy_cp = (char) c;
1469
1470         (yytext_ptr) = yy_bp;
1471         (yy_hold_char) = *yy_cp;
1472         (yy_c_buf_p) = yy_cp;
1473 }
1474
1475 #ifndef YY_NO_INPUT
1476 #ifdef __cplusplus
1477     static int yyinput (void)
1478 #else
1479     static int input  (void)
1480 #endif
1481
1482 {
1483         int c;
1484     
1485         *(yy_c_buf_p) = (yy_hold_char);
1486
1487         if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
1488                 {
1489                 /* yy_c_buf_p now points to the character we want to return.
1490                  * If this occurs *before* the EOB characters, then it's a
1491                  * valid NUL; if not, then we've hit the end of the buffer.
1492                  */
1493                 if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
1494                         /* This was really a NUL. */
1495                         *(yy_c_buf_p) = '\0';
1496
1497                 else
1498                         { /* need more input */
1499                         int offset = (yy_c_buf_p) - (yytext_ptr);
1500                         ++(yy_c_buf_p);
1501
1502                         switch ( yy_get_next_buffer(  ) )
1503                                 {
1504                                 case EOB_ACT_LAST_MATCH:
1505                                         /* This happens because yy_g_n_b()
1506                                          * sees that we've accumulated a
1507                                          * token and flags that we need to
1508                                          * try matching the token before
1509                                          * proceeding.  But for input(),
1510                                          * there's no matching to consider.
1511                                          * So convert the EOB_ACT_LAST_MATCH
1512                                          * to EOB_ACT_END_OF_FILE.
1513                                          */
1514
1515                                         /* Reset buffer status. */
1516                                         yyrestart(yyin );
1517
1518                                         /*FALLTHROUGH*/
1519
1520                                 case EOB_ACT_END_OF_FILE:
1521                                         {
1522                                         if ( yywrap( ) )
1523                                                 return EOF;
1524
1525                                         if ( ! (yy_did_buffer_switch_on_eof) )
1526                                                 YY_NEW_FILE;
1527 #ifdef __cplusplus
1528                                         return yyinput();
1529 #else
1530                                         return input();
1531 #endif
1532                                         }
1533
1534                                 case EOB_ACT_CONTINUE_SCAN:
1535                                         (yy_c_buf_p) = (yytext_ptr) + offset;
1536                                         break;
1537                                 }
1538                         }
1539                 }
1540
1541         c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
1542         *(yy_c_buf_p) = '\0';   /* preserve yytext */
1543         (yy_hold_char) = *++(yy_c_buf_p);
1544
1545         return c;
1546 }
1547 #endif  /* ifndef YY_NO_INPUT */
1548
1549 /** Immediately switch to a different input stream.
1550  * @param input_file A readable stream.
1551  * 
1552  * @note This function does not reset the start condition to @c INITIAL .
1553  */
1554     void yyrestart  (FILE * input_file )
1555 {
1556     
1557         if ( ! YY_CURRENT_BUFFER ){
1558         yyensure_buffer_stack ();
1559                 YY_CURRENT_BUFFER_LVALUE =
1560             yy_create_buffer(yyin,YY_BUF_SIZE );
1561         }
1562
1563         yy_init_buffer(YY_CURRENT_BUFFER,input_file );
1564         yy_load_buffer_state( );
1565 }
1566
1567 /** Switch to a different input buffer.
1568  * @param new_buffer The new input buffer.
1569  * 
1570  */
1571     void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
1572 {
1573     
1574         /* TODO. We should be able to replace this entire function body
1575          * with
1576          *              yypop_buffer_state();
1577          *              yypush_buffer_state(new_buffer);
1578      */
1579         yyensure_buffer_stack ();
1580         if ( YY_CURRENT_BUFFER == new_buffer )
1581                 return;
1582
1583         if ( YY_CURRENT_BUFFER )
1584                 {
1585                 /* Flush out information for old buffer. */
1586                 *(yy_c_buf_p) = (yy_hold_char);
1587                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
1588                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
1589                 }
1590
1591         YY_CURRENT_BUFFER_LVALUE = new_buffer;
1592         yy_load_buffer_state( );
1593
1594         /* We don't actually know whether we did this switch during
1595          * EOF (yywrap()) processing, but the only time this flag
1596          * is looked at is after yywrap() is called, so it's safe
1597          * to go ahead and always set it.
1598          */
1599         (yy_did_buffer_switch_on_eof) = 1;
1600 }
1601
1602 static void yy_load_buffer_state  (void)
1603 {
1604         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
1605         (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
1606         yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
1607         (yy_hold_char) = *(yy_c_buf_p);
1608 }
1609
1610 /** Allocate and initialize an input buffer state.
1611  * @param file A readable stream.
1612  * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
1613  * 
1614  * @return the allocated buffer state.
1615  */
1616     YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
1617 {
1618         YY_BUFFER_STATE b;
1619     
1620         b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
1621         if ( ! b )
1622                 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
1623
1624         b->yy_buf_size = size;
1625
1626         /* yy_ch_buf has to be 2 characters longer than the size given because
1627          * we need to put in 2 end-of-buffer characters.
1628          */
1629         b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2  );
1630         if ( ! b->yy_ch_buf )
1631                 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
1632
1633         b->yy_is_our_buffer = 1;
1634
1635         yy_init_buffer(b,file );
1636
1637         return b;
1638 }
1639
1640 /** Destroy the buffer.
1641  * @param b a buffer created with yy_create_buffer()
1642  * 
1643  */
1644     void yy_delete_buffer (YY_BUFFER_STATE  b )
1645 {
1646     
1647         if ( ! b )
1648                 return;
1649
1650         if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
1651                 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
1652
1653         if ( b->yy_is_our_buffer )
1654                 yyfree((void *) b->yy_ch_buf  );
1655
1656         yyfree((void *) b  );
1657 }
1658
1659 #ifndef __cplusplus
1660 extern int isatty (int );
1661 #endif /* __cplusplus */
1662     
1663 /* Initializes or reinitializes a buffer.
1664  * This function is sometimes called more than once on the same buffer,
1665  * such as during a yyrestart() or at EOF.
1666  */
1667     static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
1668
1669 {
1670         int oerrno = errno;
1671     
1672         yy_flush_buffer(b );
1673
1674         b->yy_input_file = file;
1675         b->yy_fill_buffer = 1;
1676
1677     /* If b is the current buffer, then yy_init_buffer was _probably_
1678      * called from yyrestart() or through yy_get_next_buffer.
1679      * In that case, we don't want to reset the lineno or column.
1680      */
1681     if (b != YY_CURRENT_BUFFER){
1682         b->yy_bs_lineno = 1;
1683         b->yy_bs_column = 0;
1684     }
1685
1686         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
1687     
1688         errno = oerrno;
1689 }
1690
1691 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
1692  * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
1693  * 
1694  */
1695     void yy_flush_buffer (YY_BUFFER_STATE  b )
1696 {
1697         if ( ! b )
1698                 return;
1699
1700         b->yy_n_chars = 0;
1701
1702         /* We always need two end-of-buffer characters.  The first causes
1703          * a transition to the end-of-buffer state.  The second causes
1704          * a jam in that state.
1705          */
1706         b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
1707         b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
1708
1709         b->yy_buf_pos = &b->yy_ch_buf[0];
1710
1711         b->yy_at_bol = 1;
1712         b->yy_buffer_status = YY_BUFFER_NEW;
1713
1714         if ( b == YY_CURRENT_BUFFER )
1715                 yy_load_buffer_state( );
1716 }
1717
1718 /** Pushes the new state onto the stack. The new state becomes
1719  *  the current state. This function will allocate the stack
1720  *  if necessary.
1721  *  @param new_buffer The new state.
1722  *  
1723  */
1724 void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
1725 {
1726         if (new_buffer == NULL)
1727                 return;
1728
1729         yyensure_buffer_stack();
1730
1731         /* This block is copied from yy_switch_to_buffer. */
1732         if ( YY_CURRENT_BUFFER )
1733                 {
1734                 /* Flush out information for old buffer. */
1735                 *(yy_c_buf_p) = (yy_hold_char);
1736                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
1737                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
1738                 }
1739
1740         /* Only push if top exists. Otherwise, replace top. */
1741         if (YY_CURRENT_BUFFER)
1742                 (yy_buffer_stack_top)++;
1743         YY_CURRENT_BUFFER_LVALUE = new_buffer;
1744
1745         /* copied from yy_switch_to_buffer. */
1746         yy_load_buffer_state( );
1747         (yy_did_buffer_switch_on_eof) = 1;
1748 }
1749
1750 /** Removes and deletes the top of the stack, if present.
1751  *  The next element becomes the new top.
1752  *  
1753  */
1754 void yypop_buffer_state (void)
1755 {
1756         if (!YY_CURRENT_BUFFER)
1757                 return;
1758
1759         yy_delete_buffer(YY_CURRENT_BUFFER );
1760         YY_CURRENT_BUFFER_LVALUE = NULL;
1761         if ((yy_buffer_stack_top) > 0)
1762                 --(yy_buffer_stack_top);
1763
1764         if (YY_CURRENT_BUFFER) {
1765                 yy_load_buffer_state( );
1766                 (yy_did_buffer_switch_on_eof) = 1;
1767         }
1768 }
1769
1770 /* Allocates the stack if it does not exist.
1771  *  Guarantees space for at least one push.
1772  */
1773 static void yyensure_buffer_stack (void)
1774 {
1775         int num_to_alloc;
1776     
1777         if (!(yy_buffer_stack)) {
1778
1779                 /* First allocation is just for 2 elements, since we don't know if this
1780                  * scanner will even need a stack. We use 2 instead of 1 to avoid an
1781                  * immediate realloc on the next call.
1782          */
1783                 num_to_alloc = 1;
1784                 (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
1785                                                                 (num_to_alloc * sizeof(struct yy_buffer_state*)
1786                                                                 );
1787                 if ( ! (yy_buffer_stack) )
1788                         YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
1789                                                                   
1790                 memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
1791                                 
1792                 (yy_buffer_stack_max) = num_to_alloc;
1793                 (yy_buffer_stack_top) = 0;
1794                 return;
1795         }
1796
1797         if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
1798
1799                 /* Increase the buffer to prepare for a possible push. */
1800                 int grow_size = 8 /* arbitrary grow size */;
1801
1802                 num_to_alloc = (yy_buffer_stack_max) + grow_size;
1803                 (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
1804                                                                 ((yy_buffer_stack),
1805                                                                 num_to_alloc * sizeof(struct yy_buffer_state*)
1806                                                                 );
1807                 if ( ! (yy_buffer_stack) )
1808                         YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
1809
1810                 /* zero only the new slots.*/
1811                 memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
1812                 (yy_buffer_stack_max) = num_to_alloc;
1813         }
1814 }
1815
1816 /** Setup the input buffer state to scan directly from a user-specified character buffer.
1817  * @param base the character buffer
1818  * @param size the size in bytes of the character buffer
1819  * 
1820  * @return the newly allocated buffer state object. 
1821  */
1822 YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
1823 {
1824         YY_BUFFER_STATE b;
1825     
1826         if ( size < 2 ||
1827              base[size-2] != YY_END_OF_BUFFER_CHAR ||
1828              base[size-1] != YY_END_OF_BUFFER_CHAR )
1829                 /* They forgot to leave room for the EOB's. */
1830                 return 0;
1831
1832         b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
1833         if ( ! b )
1834                 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
1835
1836         b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
1837         b->yy_buf_pos = b->yy_ch_buf = base;
1838         b->yy_is_our_buffer = 0;
1839         b->yy_input_file = 0;
1840         b->yy_n_chars = b->yy_buf_size;
1841         b->yy_is_interactive = 0;
1842         b->yy_at_bol = 1;
1843         b->yy_fill_buffer = 0;
1844         b->yy_buffer_status = YY_BUFFER_NEW;
1845
1846         yy_switch_to_buffer(b  );
1847
1848         return b;
1849 }
1850
1851 /** Setup the input buffer state to scan a string. The next call to yylex() will
1852  * scan from a @e copy of @a str.
1853  * @param yystr a NUL-terminated string to scan
1854  * 
1855  * @return the newly allocated buffer state object.
1856  * @note If you want to scan bytes that may contain NUL values, then use
1857  *       yy_scan_bytes() instead.
1858  */
1859 YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
1860 {
1861     
1862         return yy_scan_bytes(yystr,strlen(yystr) );
1863 }
1864
1865 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
1866  * scan from a @e copy of @a bytes.
1867  * @param bytes the byte buffer to scan
1868  * @param len the number of bytes in the buffer pointed to by @a bytes.
1869  * 
1870  * @return the newly allocated buffer state object.
1871  */
1872 YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
1873 {
1874         YY_BUFFER_STATE b;
1875         char *buf;
1876         yy_size_t n;
1877         int i;
1878     
1879         /* Get memory for full buffer, including space for trailing EOB's. */
1880         n = _yybytes_len + 2;
1881         buf = (char *) yyalloc(n  );
1882         if ( ! buf )
1883                 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
1884
1885         for ( i = 0; i < _yybytes_len; ++i )
1886                 buf[i] = yybytes[i];
1887
1888         buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
1889
1890         b = yy_scan_buffer(buf,n );
1891         if ( ! b )
1892                 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
1893
1894         /* It's okay to grow etc. this buffer, and we should throw it
1895          * away when we're done.
1896          */
1897         b->yy_is_our_buffer = 1;
1898
1899         return b;
1900 }
1901
1902 #ifndef YY_EXIT_FAILURE
1903 #define YY_EXIT_FAILURE 2
1904 #endif
1905
1906 static void yy_fatal_error (yyconst char* msg )
1907 {
1908         (void) fprintf( stderr, "%s\n", msg );
1909         exit( YY_EXIT_FAILURE );
1910 }
1911
1912 /* Redefine yyless() so it works in section 3 code. */
1913
1914 #undef yyless
1915 #define yyless(n) \
1916         do \
1917                 { \
1918                 /* Undo effects of setting up yytext. */ \
1919         int yyless_macro_arg = (n); \
1920         YY_LESS_LINENO(yyless_macro_arg);\
1921                 yytext[yyleng] = (yy_hold_char); \
1922                 (yy_c_buf_p) = yytext + yyless_macro_arg; \
1923                 (yy_hold_char) = *(yy_c_buf_p); \
1924                 *(yy_c_buf_p) = '\0'; \
1925                 yyleng = yyless_macro_arg; \
1926                 } \
1927         while ( 0 )
1928
1929 /* Accessor  methods (get/set functions) to struct members. */
1930
1931 /** Get the current line number.
1932  * 
1933  */
1934 int yyget_lineno  (void)
1935 {
1936         
1937     return yylineno;
1938 }
1939
1940 /** Get the input stream.
1941  * 
1942  */
1943 FILE *yyget_in  (void)
1944 {
1945         return yyin;
1946 }
1947
1948 /** Get the output stream.
1949  * 
1950  */
1951 FILE *yyget_out  (void)
1952 {
1953         return yyout;
1954 }
1955
1956 /** Get the length of the current token.
1957  * 
1958  */
1959 int yyget_leng  (void)
1960 {
1961         return yyleng;
1962 }
1963
1964 /** Get the current token.
1965  * 
1966  */
1967
1968 char *yyget_text  (void)
1969 {
1970         return yytext;
1971 }
1972
1973 /** Set the current line number.
1974  * @param line_number
1975  * 
1976  */
1977 void yyset_lineno (int  line_number )
1978 {
1979     
1980     yylineno = line_number;
1981 }
1982
1983 /** Set the input stream. This does not discard the current
1984  * input buffer.
1985  * @param in_str A readable stream.
1986  * 
1987  * @see yy_switch_to_buffer
1988  */
1989 void yyset_in (FILE *  in_str )
1990 {
1991         yyin = in_str ;
1992 }
1993
1994 void yyset_out (FILE *  out_str )
1995 {
1996         yyout = out_str ;
1997 }
1998
1999 int yyget_debug  (void)
2000 {
2001         return yy_flex_debug;
2002 }
2003
2004 void yyset_debug (int  bdebug )
2005 {
2006         yy_flex_debug = bdebug ;
2007 }
2008
2009 static int yy_init_globals (void)
2010 {
2011         /* Initialization is the same as for the non-reentrant scanner.
2012      * This function is called from yylex_destroy(), so don't allocate here.
2013      */
2014
2015     (yy_buffer_stack) = 0;
2016     (yy_buffer_stack_top) = 0;
2017     (yy_buffer_stack_max) = 0;
2018     (yy_c_buf_p) = (char *) 0;
2019     (yy_init) = 0;
2020     (yy_start) = 0;
2021
2022 /* Defined in main.c */
2023 #ifdef YY_STDINIT
2024     yyin = stdin;
2025     yyout = stdout;
2026 #else
2027     yyin = (FILE *) 0;
2028     yyout = (FILE *) 0;
2029 #endif
2030
2031     /* For future reference: Set errno on error, since we are called by
2032      * yylex_init()
2033      */
2034     return 0;
2035 }
2036
2037 /* yylex_destroy is for both reentrant and non-reentrant scanners. */
2038 int yylex_destroy  (void)
2039 {
2040     
2041     /* Pop the buffer stack, destroying each element. */
2042         while(YY_CURRENT_BUFFER){
2043                 yy_delete_buffer(YY_CURRENT_BUFFER  );
2044                 YY_CURRENT_BUFFER_LVALUE = NULL;
2045                 yypop_buffer_state();
2046         }
2047
2048         /* Destroy the stack itself. */
2049         yyfree((yy_buffer_stack) );
2050         (yy_buffer_stack) = NULL;
2051
2052     /* Reset the globals. This is important in a non-reentrant scanner so the next time
2053      * yylex() is called, initialization will occur. */
2054     yy_init_globals( );
2055
2056     return 0;
2057 }
2058
2059 /*
2060  * Internal utility routines.
2061  */
2062
2063 #ifndef yytext_ptr
2064 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
2065 {
2066         register int i;
2067         for ( i = 0; i < n; ++i )
2068                 s1[i] = s2[i];
2069 }
2070 #endif
2071
2072 #ifdef YY_NEED_STRLEN
2073 static int yy_flex_strlen (yyconst char * s )
2074 {
2075         register int n;
2076         for ( n = 0; s[n]; ++n )
2077                 ;
2078
2079         return n;
2080 }
2081 #endif
2082
2083 void *yyalloc (yy_size_t  size )
2084 {
2085         return (void *) malloc( size );
2086 }
2087
2088 void *yyrealloc  (void * ptr, yy_size_t  size )
2089 {
2090         /* The cast to (char *) in the following accommodates both
2091          * implementations that use char* generic pointers, and those
2092          * that use void* generic pointers.  It works with the latter
2093          * because both ANSI C and C++ allow castless assignment from
2094          * any pointer type to void*, and deal with argument conversions
2095          * as though doing an assignment.
2096          */
2097         return (void *) realloc( (char *) ptr, size );
2098 }
2099
2100 void yyfree (void * ptr )
2101 {
2102         free( (char *) ptr );   /* see yyrealloc() for (char *) cast */
2103 }
2104
2105 #define YYTABLES_NAME "yytables"
2106
2107 #line 165 "uscan.l"
2108
2109
2110
2111 int
2112 process_line(
2113     char *      line)
2114 {
2115     YY_BUFFER_STATE b;
2116     int result;
2117
2118     b = yy_scan_string(line);           /* tell lex to scan lineread */
2119     result = yyparse();                 /* parse lineread and act */
2120     yy_delete_buffer(b);
2121     return result;
2122 }
2123
2124 static int
2125 ll_parse_date(
2126     int         type,
2127     char *      text)
2128 {
2129     time_t now;
2130     struct tm *t;
2131     int y=2000, m=0, d=1, h=0, mi=0, s=0;
2132     int ret;
2133
2134     now = time((time_t *)NULL);
2135     t = localtime(&now);
2136     if (t) {
2137         y = 1900+t->tm_year;
2138         m = t->tm_mon+1;
2139         d = t->tm_mday;
2140     }
2141     switch(type) {
2142     case 1:
2143         if (sscanf(text, "---%d", &d) != 1) {
2144             yyerror("invalid date");
2145         }
2146         break;
2147     case 2:
2148         if (sscanf(text, "--%d-%d", &m, &d) != 2) {
2149             yyerror("invalid date");
2150         }
2151         break;
2152     case 3:
2153         if (sscanf(text, "%d-%d-%d", &y, &m, &d) != 3) {
2154             yyerror("invalid date");        
2155         }
2156         break;
2157     case 4:
2158         if (sscanf(text, "%d-%d-%d-%d-%d-%d", &y, &m, &d, &h, &mi, &s) != 6) {
2159             yyerror("invalid date");
2160         }
2161         break;
2162     case 5:
2163         if (sscanf(text, "%d-%d-%d-%d-%d", &y, &m, &d, &h, &mi) != 5) {
2164             yyerror("invalid date");
2165         }
2166         break;
2167     }
2168
2169     ret = PATH;                         /* cause a parse error */
2170     if(y < 70) {
2171         y += 2000;
2172     } else if(y < 100) {
2173         y += 1900;
2174     }
2175     if(y < 1000 || y > 9999) {
2176         yyerror("invalid year");
2177     } else if(m < 1 || m > 12) {
2178         yyerror("invalid month");
2179     } else if(d < 1 || d > 31) {
2180         yyerror("invalid day");
2181     } else if(h < 0 || h > 24) {
2182         yyerror("invalid hour");
2183     } else if(mi < 0 || mi > 59) {
2184         yyerror("invalid minute");
2185     } else if(s < 0 || s > 59) {
2186         yyerror("invalid second");
2187     } else if(type < 4) {
2188         yylval.strval = alloc(DATE_ALLOC_SIZE);
2189         g_snprintf(yylval.strval, DATE_ALLOC_SIZE, "%04d-%02d-%02d", y, m, d);
2190         ret = DATE;
2191     } else {
2192         yylval.strval = alloc(DATE_ALLOC_SIZE);
2193         g_snprintf(yylval.strval, DATE_ALLOC_SIZE, "%04d-%02d-%02d-%02d-%02d-%02d", y, m, d, h, mi, s);
2194         ret = DATE;
2195     }
2196     return ret;
2197 }
2198
2199 int
2200 yywrap(void)
2201 {
2202   return 1;
2203 }
2204