chiark / gitweb /
Import upstream version 5.3.
[mup] / mup / mup / lex.c
1 /* A lexical scanner generated by flex */
2
3 /* Scanner skeleton version:
4  * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
5  */
6
7 #define FLEX_SCANNER
8 #define YY_FLEX_MAJOR_VERSION 2
9 #define YY_FLEX_MINOR_VERSION 5
10
11 #include <stdio.h>
12
13
14 /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
15 #ifdef c_plusplus
16 #ifndef __cplusplus
17 #define __cplusplus
18 #endif
19 #endif
20
21
22 #ifdef __cplusplus
23
24 #include <stdlib.h>
25 #include <unistd.h>
26
27 /* Use prototypes in function declarations. */
28 #define YY_USE_PROTOS
29
30 /* The "const" storage-class-modifier is valid. */
31 #define YY_USE_CONST
32
33 #else   /* ! __cplusplus */
34
35 #if __STDC__
36
37 #define YY_USE_PROTOS
38 #define YY_USE_CONST
39
40 #endif  /* __STDC__ */
41 #endif  /* ! __cplusplus */
42
43 #ifdef __TURBOC__
44  #pragma warn -rch
45  #pragma warn -use
46 #include <io.h>
47 #include <stdlib.h>
48 #define YY_USE_CONST
49 #define YY_USE_PROTOS
50 #endif
51
52 #ifdef YY_USE_CONST
53 #define yyconst const
54 #else
55 #define yyconst
56 #endif
57
58
59 #ifdef YY_USE_PROTOS
60 #define YY_PROTO(proto) proto
61 #else
62 #define YY_PROTO(proto) ()
63 #endif
64
65 /* Returned upon end-of-file. */
66 #define YY_NULL 0
67
68 /* Promotes a possibly negative, possibly signed char to an unsigned
69  * integer for use as an array index.  If the signed char is negative,
70  * we want to instead treat it as an 8-bit unsigned char, hence the
71  * double cast.
72  */
73 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
74
75 /* Enter a start condition.  This macro really ought to take a parameter,
76  * but we do it the disgusting crufty way forced on us by the ()-less
77  * definition of BEGIN.
78  */
79 #define BEGIN yy_start = 1 + 2 *
80
81 /* Translate the current start state into a value that can be later handed
82  * to BEGIN to return to the state.  The YYSTATE alias is for lex
83  * compatibility.
84  */
85 #define YY_START ((yy_start - 1) / 2)
86 #define YYSTATE YY_START
87
88 /* Action number for EOF rule of a given start state. */
89 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
90
91 /* Special action meaning "start processing a new file". */
92 #define YY_NEW_FILE yyrestart( yyin )
93
94 #define YY_END_OF_BUFFER_CHAR 0
95
96 /* Size of default input buffer. */
97 #define YY_BUF_SIZE 16384
98
99 typedef struct yy_buffer_state *YY_BUFFER_STATE;
100
101 extern int yyleng;
102 extern FILE *yyin, *yyout;
103
104 #define EOB_ACT_CONTINUE_SCAN 0
105 #define EOB_ACT_END_OF_FILE 1
106 #define EOB_ACT_LAST_MATCH 2
107
108 /* The funky do-while in the following #define is used to turn the definition
109  * int a single C statement (which needs a semi-colon terminator).  This
110  * avoids problems with code like:
111  *
112  *      if ( condition_holds )
113  *              yyless( 5 );
114  *      else
115  *              do_something_else();
116  *
117  * Prior to using the do-while the compiler would get upset at the
118  * "else" because it interpreted the "if" statement as being all
119  * done when it reached the ';' after the yyless() call.
120  */
121
122 /* Return all but the first 'n' matched characters back to the input stream. */
123
124 #define yyless(n) \
125         do \
126                 { \
127                 /* Undo effects of setting up yytext. */ \
128                 *yy_cp = yy_hold_char; \
129                 YY_RESTORE_YY_MORE_OFFSET \
130                 yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
131                 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
132                 } \
133         while ( 0 )
134
135 #define unput(c) yyunput( c, yytext_ptr )
136
137 /* The following is because we cannot portably get our hands on size_t
138  * (without autoconf's help, which isn't available because we want
139  * flex-generated scanners to compile on their own).
140  */
141 typedef unsigned int yy_size_t;
142
143
144 struct yy_buffer_state
145         {
146         FILE *yy_input_file;
147
148         char *yy_ch_buf;                /* input buffer */
149         char *yy_buf_pos;               /* current position in input buffer */
150
151         /* Size of input buffer in bytes, not including room for EOB
152          * characters.
153          */
154         yy_size_t yy_buf_size;
155
156         /* Number of characters read into yy_ch_buf, not including EOB
157          * characters.
158          */
159         int yy_n_chars;
160
161         /* Whether we "own" the buffer - i.e., we know we created it,
162          * and can realloc() it to grow it, and should free() it to
163          * delete it.
164          */
165         int yy_is_our_buffer;
166
167         /* Whether this is an "interactive" input source; if so, and
168          * if we're using stdio for input, then we want to use getc()
169          * instead of fread(), to make sure we stop fetching input after
170          * each newline.
171          */
172         int yy_is_interactive;
173
174         /* Whether we're considered to be at the beginning of a line.
175          * If so, '^' rules will be active on the next match, otherwise
176          * not.
177          */
178         int yy_at_bol;
179
180         /* Whether to try to fill the input buffer when we reach the
181          * end of it.
182          */
183         int yy_fill_buffer;
184
185         int yy_buffer_status;
186 #define YY_BUFFER_NEW 0
187 #define YY_BUFFER_NORMAL 1
188         /* When an EOF's been seen but there's still some text to process
189          * then we mark the buffer as YY_EOF_PENDING, to indicate that we
190          * shouldn't try reading from the input source any more.  We might
191          * still have a bunch of tokens to match, though, because of
192          * possible backing-up.
193          *
194          * When we actually see the EOF, we change the status to "new"
195          * (via yyrestart()), so that the user can continue scanning by
196          * just pointing yyin at a new input file.
197          */
198 #define YY_BUFFER_EOF_PENDING 2
199         };
200
201 static YY_BUFFER_STATE yy_current_buffer = 0;
202
203 /* We provide macros for accessing buffer states in case in the
204  * future we want to put the buffer states in a more general
205  * "scanner state".
206  */
207 #define YY_CURRENT_BUFFER yy_current_buffer
208
209
210 /* yy_hold_char holds the character lost when yytext is formed. */
211 static char yy_hold_char;
212
213 static int yy_n_chars;          /* number of characters read into yy_ch_buf */
214
215
216 int yyleng;
217
218 /* Points to current character in buffer. */
219 static char *yy_c_buf_p = (char *) 0;
220 static int yy_init = 1;         /* whether we need to initialize */
221 static int yy_start = 0;        /* start state number */
222
223 /* Flag which is used to allow yywrap()'s to do buffer switches
224  * instead of setting up a fresh yyin.  A bit of a hack ...
225  */
226 static int yy_did_buffer_switch_on_eof;
227
228 void yyrestart YY_PROTO(( FILE *input_file ));
229
230 void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
231 void yy_load_buffer_state YY_PROTO(( void ));
232 YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
233 void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
234 void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
235 void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
236 #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
237
238 YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
239 YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
240 YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
241
242 static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
243 static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
244 static void yy_flex_free YY_PROTO(( void * ));
245
246 #define yy_new_buffer yy_create_buffer
247
248 #define yy_set_interactive(is_interactive) \
249         { \
250         if ( ! yy_current_buffer ) \
251                 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
252         yy_current_buffer->yy_is_interactive = is_interactive; \
253         }
254
255 #define yy_set_bol(at_bol) \
256         { \
257         if ( ! yy_current_buffer ) \
258                 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
259         yy_current_buffer->yy_at_bol = at_bol; \
260         }
261
262 #define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
263
264 typedef unsigned char YY_CHAR;
265 FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
266 typedef int yy_state_type;
267 extern char yytext[];
268
269
270 static yy_state_type yy_get_previous_state YY_PROTO(( void ));
271 static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
272 static int yy_get_next_buffer YY_PROTO(( void ));
273 static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
274
275 /* Done after the current pattern has been matched and before the
276  * corresponding action - sets up yytext.
277  */
278 #define YY_DO_BEFORE_ACTION \
279         yytext_ptr = yy_bp; \
280         yyleng = (int) (yy_cp - yy_bp); \
281         yy_hold_char = *yy_cp; \
282         *yy_cp = '\0'; \
283         if ( yyleng + yy_more_offset >= YYLMAX ) \
284                 YY_FATAL_ERROR( "token too large, exceeds YYLMAX" ); \
285         yy_flex_strncpy( &yytext[yy_more_offset], yytext_ptr, yyleng + 1 ); \
286         yyleng += yy_more_offset; \
287         yy_prev_more_offset = yy_more_offset; \
288         yy_more_offset = 0; \
289         yy_c_buf_p = yy_cp;
290
291 #define YY_NUM_RULES 311
292 #define YY_END_OF_BUFFER 312
293 static yyconst short int yy_accept[1176] =
294     {   0,
295         0,    0,    0,    0,    0,    0,  312,  310,  309,   45,
296        43,  308,   54,   55,   99,  100,  306,   52,   53,  279,
297        58,   47,   57,   91,  145,   40,   40,   40,   46,   42,
298       259,   41,  258,   90,  304,   48,  310,   49,   86,  310,
299       310,   98,   98,   98,   98,   98,   98,   98,  103,  103,
300       103,  103,  103,   94,  101,  103,  103,  103,   95,   96,
301       103,   97,  103,  103,  102,   50,   51,   87,  298,  296,
302       296,  285,  285,  285,  293,  293,  285,  298,  285,  295,
303       298,  298,  298,  285,  311,   56,   44,  106,  306,  280,
304       265,   40,    0,    0,  260,  261,  304,    0,  307,    0,
305
306       264,  105,    0,    0,    0,    0,    0,    0,    0,    0,
307         0,    0,    0,   81,    0,    0,    0,    0,    0,    0,
308         0,    0,  210,    0,    0,    0,    0,    0,    0,    0,
309         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
310         0,    0,    0,    0,    0,   63,   64,  281,    0,    0,
311         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
312         0,  266,  267,    0,  144,    0,    0,    0,    0,    0,
313         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
314         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
315         0,    0,    0,  133,    0,    0,   76,    0,    0,    0,
316
317         0,    0,    0,    0,    0,  291,  283,  293,    0,  286,
318       288,  290,  289,  287,  295,    0,    0,    0,  284,    0,
319        56,   92,   93,    0,    0,    0,  305,    0,    0,   75,
320        80,    0,   16,    0,  111,    0,    0,    0,    0,    0,
321         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
322         0,    0,    0,    0,   59,    0,  146,    0,    0,    0,
323         0,   14,    0,    0,    0,    0,    0,  273,   83,    0,
324         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
325         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
326         0,  228,    0,    0,    0,    0,   78,  122,    0,    0,
327
328        22,    0,    0,    0,    0,   20,    0,    0,    0,    0,
329         0,    0,  121,    0,    0,    0,    0,    0,   85,    0,
330         0,    0,    0,    0,   18,    0,    0,    0,    0,    0,
331         0,  119,    0,    0,    0,    0,    0,    1,  104,    0,
332         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
333         0,  180,    0,   65,  275,    0,    0,   32,    0,    0,
334         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
335         0,    0,    0,  292,    0,    0,    0,    0,    0,    0,
336       253,    0,    0,    0,    0,    0,    0,  256,    0,    0,
337         0,    0,    2,    0,    0,    0,    0,    0,    0,    0,
338
339         0,    0,    0,  245,    0,    0,    0,    0,    0,    0,
340         0,    0,   62,    0,  162,    0,    0,   77,  257,    0,
341       302,    0,    0,    0,   82,    0,    0,  205,  238,    0,
342         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
343         0,    0,    4,    0,    0,    0,  136,    0,    0,  132,
344         0,    0,    0,    0,    0,  278,    0,  123,    0,    0,
345         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
346         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
347         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
348         0,  277,    0,    0,    0,  157,    0,    0,   68,    0,
349
350         0,    0,    0,    0,    0,    0,  229,    0,   34,    0,
351         0,    0,    0,    0,    0,    0,    0,    0,    0,  174,
352       129,    0,  127,   71,    0,    0,    0,  282,    0,   72,
353         0,    0,    0,    0,    0,    0,    0,    0,   73,    0,
354        36,    0,    0,    0,    0,  214,  221,    0,  135,    0,
355         0,  270,    0,    0,    0,    0,  134,    0,    0,    0,
356         0,    0,    0,    0,    0,    0,    0,  303,    0,    0,
357         0,    0,    0,    0,   60,    0,   37,    0,    0,    0,
358         0,    0,    0,    0,    0,    0,    0,    0,  235,    0,
359         0,  204,    0,    0,   23,    0,    0,    0,   21,    0,
360
361        38,    0,    0,    0,    0,    0,    0,    0,    0,    0,
362         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
363       268,    0,    0,    0,  216,    0,    0,  139,    0,    0,
364         0,    0,    0,    0,    0,    0,  137,  193,   25,    0,
365        79,   84,    0,   26,    0,    0,    0,    0,    0,  254,
366         5,    0,   24,    0,    0,    0,    0,  209,  246,    0,
367         0,   27,    0,    0,   61,    0,  297,    0,    0,    0,
368         0,    0,    0,    0,  219,    0,    0,    0,    0,    0,
369         0,    0,    0,   33,    0,    0,  138,    0,    0,  147,
370         0,    0,  131,  112,    0,  154,    0,    0,  130,    0,
371
372       117,    0,  124,    0,    0,    0,    0,   29,    0,    0,
373         0,    0,    0,    0,    0,   28,    0,    0,    0,    0,
374       211,    0,    0,    0,  236,    0,    0,  203,  107,    0,
375       128,    0,    0,  269,    0,    0,    0,    0,    0,    0,
376       276,    0,    0,    0,    0,    0,    0,    0,    0,    0,
377         0,    0,    0,    0,    0,  274,    0,    0,    0,  141,
378         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
379         0,    0,    0,    0,  148,    0,    0,    0,    0,    0,
380         0,    0,    0,  248,    0,    0,    0,    0,    0,    0,
381       247,    0,    0,    0,    0,    0,    0,    0,    0,    0,
382
383         0,   74,    0,    9,    0,   35,    0,  222,    0,    0,
384       215,    7,    0,    0,  263,    0,    0,   89,    0,    0,
385         0,    0,  262,    0,    0,   88,  163,    0,    0,  272,
386         0,    0,    0,   31,    0,    0,    0,    0,    0,  220,
387         0,   30,    0,    0,    0,  301,    0,    0,    0,    0,
388         0,    0,    0,    0,  233,    0,    0,    0,  109,    0,
389         0,    0,    0,    0,    0,  153,  190,    0,    0,    0,
390         0,    0,    0,    0,  218,    0,   19,    0,    0,    0,
391         0,    0,  166,    0,    0,    0,  118,    0,    0,    0,
392         0,    0,    0,  251,    0,    0,    0,    0,  194,    0,
393
394         0,    0,    0,    0,    0,    0,  249,  300,    0,  231,
395       149,    0,    0,    0,    0,  271,    0,    0,  255,  223,
396         0,    0,    0,    0,    3,    0,    0,    0,    0,    0,
397         0,    0,  299,    0,  165,    0,    0,    0,    0,    0,
398         0,    0,    0,  168,    0,    0,    0,    0,    0,    0,
399         0,  301,    0,  116,    0,    0,    0,    0,    0,    0,
400         0,    0,    0,    0,    0,  108,    0,    0,    0,    0,
401         0,  189,    0,  202,    0,   11,    0,    0,  217,  207,
402         0,    0,    0,  213,    0,    0,    0,    0,    0,    0,
403       159,  171,  152,    0,  160,    0,  158,    0,    0,    0,
404
405         0,  182,    0,    0,  300,  150,    0,    0,    0,  294,
406         0,    0,   17,    0,  196,  230,    0,    0,  185,    0,
407       234,  161,  164,    0,   67,  299,  299,    0,    0,   66,
408       125,    0,  170,    0,    0,    0,    0,  192,    0,    0,
409         0,    8,    0,    0,  142,  208,    0,    0,    0,    0,
410         0,    0,    0,  110,    0,  151,  237,    0,  173,  227,
411         0,  201,    0,  143,    0,    0,  120,    0,  114,    0,
412         0,    0,    0,    0,    0,    0,  183,    0,    0,  184,
413       197,  232,    0,  294,  294,  294,  224,    0,    6,  225,
414         0,    0,   70,   15,   69,    0,  239,    0,    0,  179,
415
416         0,  206,   39,    0,    0,  187,    0,  240,  155,    0,
417         0,    0,   10,  175,  200,    0,  140,    0,  115,    0,
418         0,    0,    0,  172,  191,    0,    0,    0,    0,    0,
419         0,  212,    0,    0,    0,  126,   12,  199,    0,  243,
420       242,    0,    0,    0,  113,  169,  177,  188,  195,  156,
421       181,  198,  226,  186,   13,  250,    0,    0,    0,  252,
422         0,  176,    0,    0,    0,  167,  178,    0,    0,    0,
423         0,  241,    0,  244,    0
424     } ;
425
426 static yyconst int yy_ec[256] =
427     {   0,
428         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
429         1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
430         1,    1,    1,    1,    1,    5,    1,    1,    1,    1,
431         1,    2,    6,    7,    8,    1,    9,   10,   11,   12,
432        13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
433        23,   24,   23,   23,   23,   25,   23,   26,   27,   28,
434        29,   30,   31,    1,   32,   32,   32,   32,   32,   32,
435        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
436        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
437        34,   35,   36,   37,   38,   39,   40,   41,   42,   43,
438
439        44,   45,   46,   47,   48,   49,   50,   51,   52,   53,
440        54,   55,   56,   57,   58,   59,   60,   61,   62,   63,
441        64,   65,   66,   67,   68,   69,    1,    1,    1,    1,
442         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
443         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
444         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
445         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
446         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
447         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
448         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
449
450         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
451         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
452         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
453         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
454         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
455         1,    1,    1,    1,    1
456     } ;
457
458 static yyconst int yy_meta[70] =
459     {   0,
460         1,    2,    3,    4,    1,    1,    4,    1,    1,    1,
461         1,    1,    5,    1,    1,    1,    1,    1,    1,    6,
462         6,    6,    6,    6,    6,    1,    1,    1,    1,    1,
463         1,    6,    7,    1,    1,    1,    1,    7,    8,    9,
464         9,    9,    9,    9,    9,   10,   10,   10,   10,   10,
465        10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
466        10,   10,   10,   10,   10,    1,    1,    1,    1
467     } ;
468
469 static yyconst short int yy_base[1184] =
470     {   0,
471         0,    0,   69,    0, 1446, 1445, 1451, 1454, 1454, 1454,
472      1447, 1454, 1454, 1454, 1454, 1439, 1437, 1454, 1454, 1454,
473      1454, 1454, 1454, 1454,  120,  120,  127,  133, 1454, 1454,
474      1419, 1454, 1416, 1454,  139, 1454,  163, 1454, 1454,    0,
475       166,  133,  151,  166,  181,  129,  176, 1388,  188,  130,
476      1384, 1399,  199,  200,  215,  148,  211, 1454,  230,  229,
477       242,  126,  247,  209, 1389, 1454, 1454, 1454, 1454, 1454,
478      1454, 1412, 1454, 1430,  286,  292,  168, 1410,  243,  298,
479      1394, 1384, 1389, 1368, 1427, 1454, 1454, 1454, 1422, 1454,
480      1454,  304,  230, 1375, 1454, 1454,  318,  300, 1454, 1428,
481
482      1454,    0,  265,  176, 1376, 1386,  153, 1388, 1381, 1386,
483       275,  241, 1371, 1454,  294, 1384, 1372, 1369, 1368, 1366,
484      1362, 1374, 1454,  227, 1373,  302, 1358, 1364, 1369,  312,
485       126, 1353, 1359, 1359, 1352, 1366, 1367,  298, 1349,  281,
486      1362,  314, 1354,  307, 1361, 1454, 1454,  188,  158, 1363,
487      1344, 1337,  319,  321, 1347, 1342, 1349,  335,  326, 1337,
488       325, 1454, 1454, 1334, 1454,  323, 1343, 1335, 1334, 1345,
489      1347,  342,  344, 1333, 1349,  332, 1340, 1341,  347, 1340,
490       340, 1326,  356, 1344, 1318,  357, 1327,  363, 1333, 1329,
491      1338, 1325,  362, 1322,  364,  372, 1454, 1322, 1317, 1326,
492
493      1331,  355, 1328,  322, 1317, 1454, 1454,  402,    0, 1454,
494      1454, 1454, 1454, 1454,  411, 1325, 1326, 1324, 1454, 1360,
495      1454, 1454, 1454, 1322,  407,  416, 1454, 1304, 1305, 1454,
496      1309, 1311, 1309, 1307,  371, 1301, 1306, 1303, 1294, 1313,
497      1311, 1303,  386, 1308, 1309, 1304, 1307, 1289, 1290, 1304,
498      1300, 1292, 1286, 1284, 1454, 1280, 1454, 1293, 1298,  393,
499      1286, 1289, 1277, 1287, 1275, 1280, 1280, 1288, 1454, 1286,
500       409, 1277, 1287, 1269, 1286, 1266, 1265, 1270, 1280, 1278,
501      1260, 1274, 1275, 1256, 1272, 1271, 1271,  401, 1265, 1261,
502      1252, 1454, 1266, 1266, 1249, 1267, 1454, 1247, 1261, 1256,
503
504      1249, 1244, 1253, 1235, 1251, 1244, 1245, 1237,  403,  412,
505      1234, 1250, 1252, 1252, 1244, 1246, 1232, 1238, 1454, 1243,
506      1246, 1241, 1244,  400, 1238, 1242, 1233, 1221, 1220, 1225,
507      1231,  398, 1232, 1231, 1215, 1226, 1221, 1454, 1454, 1220,
508      1213, 1212, 1224, 1209, 1211, 1208, 1207, 1218, 1210, 1208,
509      1205, 1197, 1204, 1454, 1454, 1213, 1205,  242, 1202, 1213,
510      1209, 1193, 1207, 1198, 1201, 1206, 1200, 1193, 1181, 1187,
511      1199, 1195, 1182,    0, 1192, 1191, 1185, 1196, 1192, 1178,
512      1454, 1170, 1189, 1173, 1172, 1186, 1170, 1454, 1170, 1165,
513      1182, 1175, 1176, 1171, 1182, 1167, 1177,  415, 1175, 1174,
514
515      1173, 1173, 1164, 1454, 1160, 1165, 1170, 1167, 1166, 1169,
516      1155, 1165, 1454, 1153, 1454, 1147, 1160, 1454, 1454, 1155,
517      1454, 1162, 1148,  318, 1454, 1160, 1140, 1454, 1153, 1153,
518      1154, 1151,  415, 1139, 1142,  418, 1148, 1149, 1145, 1145,
519      1128, 1129, 1454, 1138, 1134, 1126, 1131, 1131, 1137, 1454,
520      1138, 1122, 1125, 1117, 1122, 1454, 1118, 1454, 1126, 1131,
521      1108, 1127, 1130, 1127, 1124, 1120, 1122, 1104, 1120, 1106,
522      1111,  419,  419, 1102, 1109, 1113, 1107, 1098, 1112, 1097,
523      1101, 1096, 1094, 1092, 1106, 1109, 1089, 1107, 1106,  429,
524      1086, 1454, 1100, 1099, 1098, 1454, 1094, 1096, 1454, 1099,
525
526      1093,  417, 1091, 1082, 1088, 1077,  379, 1089, 1454, 1092,
527      1073, 1079, 1084, 1070, 1068, 1085, 1084, 1080, 1079, 1454,
528      1454, 1078, 1454, 1454, 1077, 1067, 1074, 1454, 1067, 1063,
529      1076, 1057, 1061, 1067, 1058, 1068, 1046,  421, 1055, 1064,
530      1454, 1048, 1066, 1048, 1052, 1454, 1454, 1059, 1454, 1051,
531      1044, 1057, 1055, 1045, 1053, 1053, 1454, 1052, 1037, 1049,
532      1033, 1043, 1042, 1046, 1030, 1030, 1043, 1454, 1039, 1026,
533      1028,  434, 1025, 1034, 1454, 1023,  443, 1035, 1034, 1020,
534      1029, 1016, 1027, 1071, 1014, 1028, 1029, 1024, 1046, 1025,
535      1026, 1454, 1008, 1006, 1454, 1003, 1010, 1003, 1454, 1003,
536
537      1454, 1007, 1005, 1011, 1002,  998, 1010,  996, 1008, 1000,
538       991, 1009,  985, 1007, 1002,  997,  996,  995,  984,  984,
539      1454,  197,  998,  995, 1454,  998,  995,  984,  992,  977,
540       969,  974,  972,  973,  975,  964,  975, 1454,  431,  972,
541      1454, 1454,  972,  433,  980,  976,  962,  963,  972, 1454,
542      1454,  966, 1454,  961,  962,  972, 1013, 1454, 1454,  966,
543       962, 1454,  960,  951, 1454,  966, 1454,  965,  951,  954,
544       958,  946,  964,  950, 1454,  951,  947,  936,  942,  945,
545       957,  943,  949,  456,  935,  943, 1454,  944,  948, 1454,
546       933,  941,  488, 1454,  986, 1454,  929,  932,  490,  926,
547
548      1454,  936,  925,  924,  941,  928,  928,  956,  916,  932,
549       916,  934,  926,  929,  912,  948,  929,  920,  927,  477,
550      1454,  922,  919,  910, 1454,  909,  891, 1454,  453,  890,
551      1454,  884,  893, 1454,  873,  887,  873,  865,  129,  285,
552      1454,  338,  450,  440,  441,  455,  451,  435,  458,  449,
553       448,  464,  449,  456,  453, 1454,  465,  457,  455, 1454,
554       459,  468,  476,  480,  463,  471,  473,  486,  487,  484,
555       476,  476,  483,  492,  491,  481,  482,  484,  491,  481,
556       493,  496,  489,  519,  543,  497,  507,  508,  495,  511,
557      1454,  512,  498,  500,  516,  504,  518,  519,  509,  514,
558
559       523,  513,  517, 1454,  521, 1454,  530, 1454,  527,  514,
560      1454, 1454,  515,  572, 1454,  526,  530, 1454,  577,  533,
561       528,  580, 1454,  532,  536, 1454, 1454,  532,  527, 1454,
562       541,  540,  545, 1454,  542,  532,  548,  542,  550, 1454,
563       536, 1454,  541,  555,  545,  581,  597,  550,  567,  557,
564       569,  565,  563,  570,  575,  566,  564,  563, 1454,  580,
565       585,  583,  570,  575,  566, 1454, 1454,  573,  588,  591,
566       577,  583,  596,  587, 1454,  599, 1454,  585,  597,  595,
567       607,  604, 1454,  596,  598,  593, 1454,  612,  602,  598,
568       613,  602,  614, 1454,  606,  617,  621,  607, 1454,  606,
569
570       616,  606,  622,  608,  620,  611, 1454,  650,  632, 1454,
571      1454,  633,  677,  634,  626, 1454,  641,  642, 1454, 1454,
572       642,  643,  646,  634, 1454,  639,  636,  630,  636,  637,
573       637,  654,  691,  655, 1454,  640,  657,  656,  640,  661,
574       655,  705,  654, 1454,  664,  674,  662,  676,  677,  682,
575       679,  710,  734, 1454,  683,  683,  680,  689,  685,  674,
576       686,  696,  688,  687,  690, 1454,  694,  692,  696,  708,
577       694, 1454,  707, 1454,  708, 1454,  699,  710, 1454, 1454,
578       703,  700,  709, 1454,  702,  719,  723,  716,  705,  720,
579      1454, 1454, 1454,  723, 1454,  717, 1454,  710,  711,  723,
580
581       731, 1454,  720,  730,  755, 1454,  738,  780,  782,  787,
582       729,  737, 1454,  750, 1454, 1454,  738,  753, 1454,  751,
583      1454, 1454, 1454,  741, 1454, 1454,  796,  756,  744, 1454,
584      1454,  751, 1454,  739,  802,  754,  763, 1454,  763,  753,
585       753, 1454,  778,    0, 1454, 1454,  770,  778,  766,  782,
586       774,  765,  791, 1454,  768, 1454, 1454,  774, 1454, 1454,
587       776, 1454,  781, 1454,  778,  785, 1454,  792, 1454,  783,
588       788,  791,  795,  786,  801,  802, 1454,  793,  794, 1454,
589      1454, 1454,  847,  849, 1454,  851, 1454,  797, 1454, 1454,
590       812,  809, 1454, 1454, 1454,  814, 1454,    0,  811, 1454,
591
592       800, 1454, 1454,  803,  856, 1454,  812,  821, 1454,  808,
593       824,  816, 1454, 1454, 1454,  830, 1454,  811, 1454,  813,
594       829,  815,  822, 1454, 1454,  823,  824,  815,  837,  825,
595       830, 1454,  877,  832,  828, 1454, 1454, 1454,  847,  843,
596      1454,  835,  844,  839, 1454, 1454, 1454, 1454, 1454, 1454,
597      1454, 1454, 1454, 1454, 1454, 1454,  848,  841,  854, 1454,
598       851, 1454,  853,  849,  846, 1454, 1454,  848,  852,  837,
599       851, 1454,  839, 1454, 1454,  903,  908,  918,  927,  930,
600       938,  945,  955
601     } ;
602
603 static yyconst short int yy_def[1184] =
604     {   0,
605      1175,    1, 1175,    3, 1176, 1176, 1175, 1175, 1175, 1175,
606      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
607      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
608      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1177,
609      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
610      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
611      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
612      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
613      1175, 1175, 1175, 1175, 1178, 1175, 1175, 1175, 1175, 1175,
614      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
615
616      1175, 1177, 1175, 1179, 1175, 1175, 1175, 1175, 1175, 1175,
617      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
618      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
619      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
620      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
621      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
622      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
623      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
624      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
625      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
626
627      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1180, 1175,
628      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1178,
629      1175, 1175, 1175, 1175, 1175, 1179, 1175, 1175, 1175, 1175,
630      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
631      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
632      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
633      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
634      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
635      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
636      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
637
638      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
639      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
640      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
641      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
642      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
643      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
644      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
645      1175, 1175, 1175, 1180, 1175, 1175, 1175, 1175, 1175, 1175,
646      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
647      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
648
649      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
650      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
651      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
652      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
653      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
654      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
655      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
656      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
657      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
658      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
659
660      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
661      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
662      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
663      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
664      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
665      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
666      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
667      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
668      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
669      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
670
671      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
672      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
673      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
674      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
675      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
676      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
677      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
678      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
679      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
680      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
681
682      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
683      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
684      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
685      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
686      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
687      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
688      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
689      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
690      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
691      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
692
693      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
694      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
695      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
696      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
697      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
698      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
699      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
700      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
701      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
702      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
703
704      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
705      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
706      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
707      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
708      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
709      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
710      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
711      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
712      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
713      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
714
715      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1181,
716      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
717      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
718      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
719      1175, 1175, 1175, 1182, 1175, 1175, 1175, 1175, 1175, 1175,
720      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
721      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
722      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
723      1175, 1175, 1175, 1175, 1175, 1181, 1175, 1175, 1175, 1175,
724      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1183, 1175, 1175,
725
726      1175, 1175, 1175, 1175, 1182, 1175, 1175, 1175, 1175, 1175,
727      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
728      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
729      1175, 1175, 1183, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
730      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
731      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
732      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
733      1175, 1175, 1175, 1175,    0, 1175, 1175, 1175, 1175, 1175,
734      1175, 1175, 1175
735     } ;
736
737 static yyconst short int yy_nxt[1524] =
738     {   0,
739         8,    9,   10,   11,   12,   13,   14,   15,    8,   16,
740        17,   18,   19,   20,   21,   22,   23,   24,   25,   26,
741        27,   26,   26,   26,   28,   29,   30,   31,   32,   33,
742        34,   35,   35,   36,   37,   38,   39,   40,   41,   42,
743        43,   44,   45,   46,   47,   48,   49,   50,   51,   52,
744        53,   54,   55,   56,   57,   58,   59,   60,   61,   62,
745        63,   64,   65,   58,   58,   66,    8,   67,   68,   69,
746        70,   71,   69,   69,   72,   69,   69,   73,   74,   69,
747        73,   73,   73,   73,   73,   73,   73,   73,   75,   76,
748        76,   76,   76,   76,   73,   69,   77,   78,   79,   73,
749
750        80,   80,   69,   69,   69,   73,   69,   69,   69,   69,
751        69,   81,   82,   69,   69,   69,   69,   69,   69,   69,
752        69,   69,   69,   69,   69,   69,   69,   83,   69,   69,
753        69,   69,   69,   69,   69,   84,   69,   73,   90,   92,
754        92,   92,   92,   92,   92,   93,   92,   92,   92,   92,
755        92,   92,   92,   92,   92,   92,   92,   92,   97,   97,
756        97,   97,   97,   97,   98,   99,  100,  103,  862,  134,
757        97,   97,   91,  105,  148,  106,   97,  225,  196,  135,
758       197,  136,  149,  107,  265,  108,  137,  266,  150,  168,
759       111,   94,  109,  110,  112,  210,  211,  104,  104,  288,
760
761       169,  113,  114,  230,  115,  118,  170,  116,  171,  119,
762       117,  231,  120,  121,  227,  101,  122,  123,  289,  124,
763       127,  128,  125,  138,  129,  126,  139,  143,  130,  140,
764       286,  144,  141,  162,  131,  145,  753,  132,  153,  157,
765       287,  146,  154,  158,  133,  147,  155,  159,  202,  163,
766       172,  222,  160,  223,  173,  203,  204,  174,  164,  161,
767       754,  175,  156,  509,  176,  165,  103,  177,  166,  178,
768       183,  213,  214,  179,  167,  184,  185,  180,  252,  186,
769       237,  191,  187,  181,  182,  192,  253,  188,  198,  193,
770       189,  238,  190,  510,  199,  194,  104,  104,  195,  239,
771
772       200,   98,   99,  100,  201,  208,  208,  208,  208,  208,
773       208,  208,  208,  208,  208,  208,  208,  215,  215,  215,
774       215,  215,  215,   92,   92,   92,   92,   92,   92,  215,
775       215,  235,  236,  276,  277,  215,  863,   97,   97,   97,
776        97,   97,   97,  273,  241,  255,  283,  242,  209,   97,
777        97,  261,  243,  279,  274,   97,  244,  284,  256,  293,
778       257,  280,  568,  262,  371,  295,  296,  281,  305,  263,
779       569,  294,  264,  297,  302,  308,  311,  303,  306,  298,
780       372,  312,  309,  318,  319,  864,  324,  320,  328,  329,
781       337,  338,  321,  332,  322,  340,  344,  333,  323,  304,
782
783       325,  334,  348,  359,  335,  354,  349,  360,  225,  341,
784       345,  368,  355,  356,  361,  369,  346,  225,  385,  362,
785       357,  208,  208,  208,  208,  208,  208,  386,  387,  363,
786       215,  215,  215,  215,  215,  215,  651,  395,  652,  477,
787       411,  486,  215,  215,  396,  227,  412,  440,  215,  422,
788       460,  441,  423,  462,  227,  487,  424,  478,  547,  576,
789       461,  580,  613,  614,  548,  615,  463,  645,  634,  464,
790       635,  677,  577,  706,  646,  581,  616,  806,  720,  678,
791       617,  707,  711,  773,  712,  769,  636,  774,  770,  814,
792       775,  822,  852,  865,  866,  867,  868,  853,  869,  870,
793
794       871,  872,  873,  874,  713,  875,  876,  807,  846,  846,
795       854,  877,  878,  879,  880,  815,  881,  823,  882,  883,
796       884,  887,  888,  885,  889,  890,  891,  892,  893,  894,
797       895,  896,  897,  899,  898,  900,  901,  886,  902,  903,
798       904,  905,  906,  907,  785,  816,  817,  824,  825,  909,
799       910,  911,  912,  913,  914,  915,  818,  916,  826,  917,
800       918,  919,  920,  921,  922,  923,  924,  925,  926,  927,
801       928,  929,  930,  814,  908,  908,  931,  932,  819,  934,
802       935,  822,  936,  937,  938,  939,  940,  941,  942,  943,
803       944,  945,  946,  947,  948,  949,  950,  951,  953,  815,
804
805       952,  952,  952,  952,  952,  952,  954,  823,  933,  933,
806       955,  956,  952,  952,  957,  958,  959,  960,  952,  961,
807       963,  964,  965,  966,  967,  968,  969,  970,  971,  816,
808       817,  972,  962,  973,  974,  975,  976,  824,  825,  977,
809       818,  978,  979,  980,  981,  982,  983,  984,  826,  985,
810       986,  987,  988,  989,  990,  991,  992,  993,  994,  995,
811       996,  997,  998,  999, 1000, 1001, 1002, 1003, 1004, 1005,
812      1005, 1005, 1005, 1005, 1005, 1006, 1007, 1011, 1008, 1008,
813      1012, 1005, 1005, 1013, 1014, 1015, 1016, 1005, 1009, 1017,
814      1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1028, 1029,
815
816      1030, 1031, 1026, 1032, 1033, 1034, 1035, 1036, 1010, 1010,
817      1027, 1027, 1027, 1027, 1027, 1027, 1037, 1038, 1039, 1040,
818      1041, 1042, 1027, 1027, 1043, 1045, 1046, 1047, 1027,  952,
819       952,  952,  952,  952,  952,  953, 1048, 1049, 1050, 1051,
820      1044,  952,  952, 1052, 1053, 1054, 1055,  952, 1056, 1057,
821      1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067,
822      1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077,
823      1078, 1079, 1080, 1081, 1005, 1005, 1005, 1005, 1005, 1005,
824      1082, 1008, 1008, 1083, 1083, 1087, 1005, 1005, 1084, 1084,
825      1088, 1009, 1005, 1089, 1090, 1091, 1092, 1093, 1094, 1085,
826
827      1095, 1096, 1097, 1035, 1099, 1100, 1101, 1026, 1098, 1102,
828      1103, 1010, 1010, 1010, 1010, 1027, 1027, 1027, 1027, 1027,
829      1027, 1104, 1106, 1107, 1108, 1109, 1110, 1027, 1027, 1111,
830      1112, 1113, 1114, 1027, 1115, 1116, 1117, 1118, 1119, 1120,
831      1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1083, 1083,
832      1084, 1084, 1084, 1084, 1129, 1130, 1131, 1132, 1134, 1135,
833      1136, 1085, 1137, 1085, 1138, 1139, 1140, 1141, 1142, 1143,
834      1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1010, 1010,
835      1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161,
836      1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171,
837
838      1172, 1173, 1174,   85,   85,   85,   85,   85,   85,   85,
839        85,   85,   85,  102,  102,  861,  102,  102,  220,  220,
840       220,  220,  220,  220,  220,  220,  220,  220,  226,  860,
841       859,  858,  226,  226,  226,  374,  857,  856,  374, 1086,
842      1086,  855, 1086, 1086, 1086, 1105, 1105,  851,  850, 1105,
843      1105, 1105, 1105, 1105, 1105, 1133, 1133,  849,  848, 1133,
844      1133, 1133, 1133, 1133, 1133,  847,  845,  844,  843,  842,
845       841,  840,  839,  838,  837,  836,  835,  834,  833,  832,
846       831,  830,  829,  828,  827,  821,  820,  819,  813,  812,
847       811,  810,  809,  808,  805,  804,  803,  802,  801,  800,
848
849       799,  798,  797,  796,  795,  794,  793,  792,  791,  790,
850       789,  788,  787,  786,  785,  784,  783,  782,  781,  780,
851       779,  778,  777,  776,  772,  771,  768,  767,  766,  765,
852       764,  763,  762,  761,  760,  759,  758,  757,  756,  755,
853       752,  751,  750,  749,  748,  747,  746,  745,  744,  743,
854       742,  741,  740,  739,  738,  737,  736,  735,  734,  733,
855       732,  731,  730,  729,  728,  727,  726,  725,  724,  723,
856       722,  721,  720,  719,  718,  717,  716,  715,  714,  710,
857       709,  708,  705,  704,  703,  702,  701,  700,  699,  698,
858       697,  696,  695,  694,  693,  692,  691,  690,  689,  688,
859
860       687,  686,  685,  684,  683,  682,  681,  680,  679,  676,
861       675,  674,  673,  672,  671,  670,  669,  668,  667,  666,
862       665,  664,  663,  662,  661,  660,  659,  658,  657,  656,
863       655,  654,  653,  650,  649,  648,  647,  644,  643,  642,
864       641,  640,  639,  638,  637,  633,  632,  631,  630,  629,
865       628,  627,  626,  625,  624,  623,  622,  621,  620,  619,
866       618,  612,  611,  610,  609,  608,  607,  606,  605,  604,
867       603,  602,  601,  600,  599,  598,  597,  596,  595,  594,
868       593,  592,  591,  590,  589,  588,  587,  586,  585,  584,
869       583,  582,  579,  578,  575,  574,  573,  572,  571,  570,
870
871       567,  566,  565,  564,  563,  562,  561,  560,  559,  558,
872       557,  556,  555,  554,  553,  552,  551,  550,  549,  546,
873       545,  544,  543,  542,  541,  540,  539,  538,  537,  536,
874       535,  534,  533,  532,  531,  530,  529,  528,  527,  526,
875       525,  524,  523,  522,  521,  520,  519,  518,  517,  516,
876       515,  514,  513,  512,  511,  508,  507,  506,  505,  504,
877       503,  502,  501,  500,  499,  498,  497,  496,  495,  494,
878       493,  492,  491,  490,  489,  488,  485,  484,  483,  482,
879       481,  480,  479,  476,  475,  474,  473,  472,  471,  470,
880       469,  468,  467,  466,  465,  459,  458,  457,  456,  455,
881
882       454,  453,  452,  451,  450,  449,  448,  447,  446,  445,
883       444,  443,  442,  286,  439,  438,  437,  436,  435,  434,
884       433,  432,  431,  430,  429,  428,  427,  426,  425,  421,
885       420,  419,  418,  417,  416,  415,  414,  413,  410,  409,
886       408,  407,  406,  405,  404,  403,  402,  401,  400,  399,
887       398,  397,  394,  393,  392,  391,  390,  389,  388,  384,
888       383,  382,  381,  380,  379,  378,  221,  377,  376,  375,
889       373,  370,  367,  366,  365,  364,  358,  353,  352,  351,
890       350,  347,  343,  342,  339,  336,  331,  330,  327,  326,
891       317,  316,  315,  314,  313,  310,  307,  301,  300,  299,
892
893       292,  291,  290,  285,  282,  278,  275,  272,  271,  270,
894       269,  268,  267,  260,  259,  258,  254,  251,  250,  249,
895       248,  247,  246,  245,  240,  234,  233,  232,  229,  228,
896        99,  224,   89,  221,  219,  218,  217,  216,  212,  207,
897       206,  205,  152,  151,  142,   96,   95,   89,   88,   87,
898      1175,   86,   86,    7, 1175, 1175, 1175, 1175, 1175, 1175,
899      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
900      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
901      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
902      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
903
904      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
905      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
906      1175, 1175, 1175
907     } ;
908
909 static yyconst short int yy_chk[1524] =
910     {   0,
911         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
912         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
913         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
914         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
915         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
916         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
917         1,    1,    1,    1,    1,    1,    1,    1,    1,    3,
918         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
919         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
920         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
921
922         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
923         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
924         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
925         3,    3,    3,    3,    3,    3,    3,    3,   25,   26,
926        26,   26,   26,   26,   26,   27,   27,   27,   27,   27,
927        27,   27,   28,   28,   28,   28,   28,   28,   35,   35,
928        35,   35,   35,   35,   37,   37,   37,   41,  739,   46,
929        35,   35,   25,   42,   50,   42,   35,  104,   62,   46,
930        62,   46,   50,   42,  131,   42,   46,  131,   50,   56,
931        43,   28,   42,   42,   43,   77,   77,   41,   41,  149,
932
933        56,   43,   43,  107,   43,   44,   56,   43,   56,   44,
934        43,  107,   44,   44,  104,   37,   44,   44,  149,   44,
935        45,   45,   44,   47,   45,   44,   47,   49,   45,   47,
936       148,   49,   47,   55,   45,   49,  622,   45,   53,   54,
937       148,   49,   53,   54,   45,   49,   53,   54,   64,   55,
938        57,   93,   54,   93,   57,   64,   64,   57,   55,   54,
939       622,   57,   53,  358,   57,   55,  103,   57,   55,   59,
940        60,   79,   79,   59,   55,   60,   60,   59,  124,   60,
941       112,   61,   60,   59,   59,   61,  124,   60,   63,   61,
942        60,  112,   60,  358,   63,   61,  103,  103,   61,  112,
943
944        63,   98,   98,   98,   63,   75,   75,   75,   75,   75,
945        75,   76,   76,   76,   76,   76,   76,   80,   80,   80,
946        80,   80,   80,   92,   92,   92,   92,   92,   92,   80,
947        80,  111,  111,  140,  140,   80,  740,   97,   97,   97,
948        97,   97,   97,  138,  115,  126,  144,  115,   75,   97,
949        97,  130,  115,  142,  138,   97,  115,  144,  126,  153,
950       126,  142,  424,  130,  204,  154,  154,  142,  159,  130,
951       424,  153,  130,  154,  158,  161,  166,  158,  159,  154,
952       204,  166,  161,  172,  172,  742,  173,  172,  176,  176,
953       181,  181,  172,  179,  172,  183,  186,  179,  172,  158,
954
955       173,  179,  188,  195,  179,  193,  188,  195,  225,  183,
956       186,  202,  193,  193,  196,  202,  186,  226,  235,  196,
957       193,  208,  208,  208,  208,  208,  208,  235,  235,  196,
958       215,  215,  215,  215,  215,  215,  507,  243,  507,  324,
959       260,  332,  215,  215,  243,  225,  260,  288,  215,  271,
960       309,  288,  271,  310,  226,  332,  271,  324,  398,  433,
961       309,  436,  472,  472,  398,  473,  310,  502,  490,  310,
962       490,  538,  433,  572,  502,  436,  473,  684,  720,  538,
963       473,  572,  577,  644,  577,  639,  490,  644,  639,  693,
964       644,  699,  729,  743,  744,  745,  746,  729,  747,  748,
965
966       749,  750,  751,  752,  577,  753,  754,  684,  720,  720,
967       729,  755,  757,  758,  759,  693,  761,  699,  762,  763,
968       764,  765,  766,  764,  767,  768,  769,  770,  771,  772,
969       773,  774,  775,  776,  775,  777,  778,  764,  779,  780,
970       781,  782,  783,  784,  785,  693,  693,  699,  699,  786,
971       787,  788,  789,  790,  792,  793,  693,  794,  699,  795,
972       796,  797,  798,  799,  800,  801,  802,  803,  805,  807,
973       809,  810,  813,  814,  785,  785,  816,  817,  819,  820,
974       821,  822,  824,  825,  828,  829,  831,  832,  833,  835,
975       836,  837,  838,  839,  841,  843,  844,  845,  847,  814,
976
977       846,  846,  846,  846,  846,  846,  848,  822,  819,  819,
978       849,  850,  846,  846,  851,  852,  853,  854,  846,  855,
979       856,  857,  858,  860,  861,  862,  863,  864,  865,  814,
980       814,  868,  855,  869,  870,  871,  872,  822,  822,  873,
981       814,  874,  876,  878,  879,  880,  881,  882,  822,  884,
982       885,  886,  888,  889,  890,  891,  892,  893,  895,  896,
983       897,  898,  900,  901,  902,  903,  904,  905,  906,  908,
984       908,  908,  908,  908,  908,  909,  912,  914,  913,  913,
985       915,  908,  908,  917,  918,  921,  922,  908,  913,  923,
986       924,  926,  927,  928,  929,  930,  931,  932,  934,  936,
987
988       937,  938,  933,  939,  940,  941,  942,  943,  913,  913,
989       933,  933,  933,  933,  933,  933,  945,  946,  947,  948,
990       949,  950,  933,  933,  951,  955,  956,  957,  933,  952,
991       952,  952,  952,  952,  952,  953,  958,  959,  960,  961,
992       953,  952,  952,  962,  963,  964,  965,  952,  967,  968,
993       969,  970,  971,  973,  975,  977,  978,  981,  982,  983,
994       985,  986,  987,  988,  989,  990,  994,  996,  998,  999,
995      1000, 1001, 1003, 1004, 1005, 1005, 1005, 1005, 1005, 1005,
996      1007, 1008, 1008, 1009, 1009, 1011, 1005, 1005, 1010, 1010,
997      1012, 1008, 1005, 1014, 1017, 1018, 1020, 1024, 1028, 1010,
998
999      1029, 1032, 1034, 1035, 1036, 1037, 1039, 1027, 1035, 1040,
1000      1041, 1008, 1008, 1009, 1009, 1027, 1027, 1027, 1027, 1027,
1001      1027, 1043, 1047, 1048, 1049, 1050, 1051, 1027, 1027, 1052,
1002      1053, 1055, 1058, 1027, 1061, 1063, 1065, 1066, 1068, 1070,
1003      1071, 1072, 1073, 1074, 1075, 1076, 1078, 1079, 1083, 1083,
1004      1084, 1084, 1086, 1086, 1088, 1091, 1092, 1096, 1099, 1101,
1005      1104, 1084, 1105, 1086, 1107, 1108, 1110, 1111, 1112, 1116,
1006      1118, 1120, 1121, 1122, 1123, 1126, 1127, 1128, 1083, 1083,
1007      1129, 1130, 1131, 1133, 1134, 1135, 1139, 1140, 1142, 1143,
1008      1144, 1157, 1158, 1159, 1161, 1163, 1164, 1165, 1168, 1169,
1009
1010      1170, 1171, 1173, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
1011      1176, 1176, 1176, 1177, 1177,  738, 1177, 1177, 1178, 1178,
1012      1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1179,  737,
1013       736,  735, 1179, 1179, 1179, 1180,  733,  732, 1180, 1181,
1014      1181,  730, 1181, 1181, 1181, 1182, 1182,  727,  726, 1182,
1015      1182, 1182, 1182, 1182, 1182, 1183, 1183,  724,  723, 1183,
1016      1183, 1183, 1183, 1183, 1183,  722,  719,  718,  717,  716,
1017       715,  714,  713,  712,  711,  710,  709,  708,  707,  706,
1018       705,  704,  703,  702,  700,  698,  697,  695,  692,  691,
1019       689,  688,  686,  685,  683,  682,  681,  680,  679,  678,
1020
1021       677,  676,  674,  673,  672,  671,  670,  669,  668,  666,
1022       664,  663,  661,  660,  657,  656,  655,  654,  652,  649,
1023       648,  647,  646,  645,  643,  640,  637,  636,  635,  634,
1024       633,  632,  631,  630,  629,  628,  627,  626,  624,  623,
1025       620,  619,  618,  617,  616,  615,  614,  613,  612,  611,
1026       610,  609,  608,  607,  606,  605,  604,  603,  602,  600,
1027       598,  597,  596,  594,  593,  591,  590,  589,  588,  587,
1028       586,  585,  584,  583,  582,  581,  580,  579,  578,  576,
1029       574,  573,  571,  570,  569,  567,  566,  565,  564,  563,
1030       562,  561,  560,  559,  558,  556,  555,  554,  553,  552,
1031
1032       551,  550,  548,  545,  544,  543,  542,  540,  539,  537,
1033       536,  535,  534,  533,  532,  531,  530,  529,  527,  526,
1034       525,  522,  519,  518,  517,  516,  515,  514,  513,  512,
1035       511,  510,  508,  506,  505,  504,  503,  501,  500,  498,
1036       497,  495,  494,  493,  491,  489,  488,  487,  486,  485,
1037       484,  483,  482,  481,  480,  479,  478,  477,  476,  475,
1038       474,  471,  470,  469,  468,  467,  466,  465,  464,  463,
1039       462,  461,  460,  459,  457,  455,  454,  453,  452,  451,
1040       449,  448,  447,  446,  445,  444,  442,  441,  440,  439,
1041       438,  437,  435,  434,  432,  431,  430,  429,  427,  426,
1042
1043       423,  422,  420,  417,  416,  414,  412,  411,  410,  409,
1044       408,  407,  406,  405,  403,  402,  401,  400,  399,  397,
1045       396,  395,  394,  393,  392,  391,  390,  389,  387,  386,
1046       385,  384,  383,  382,  380,  379,  378,  377,  376,  375,
1047       373,  372,  371,  370,  369,  368,  367,  366,  365,  364,
1048       363,  362,  361,  360,  359,  357,  356,  353,  352,  351,
1049       350,  349,  348,  347,  346,  345,  344,  343,  342,  341,
1050       340,  337,  336,  335,  334,  333,  331,  330,  329,  328,
1051       327,  326,  325,  323,  322,  321,  320,  318,  317,  316,
1052       315,  314,  313,  312,  311,  308,  307,  306,  305,  304,
1053
1054       303,  302,  301,  300,  299,  298,  296,  295,  294,  293,
1055       291,  290,  289,  287,  286,  285,  284,  283,  282,  281,
1056       280,  279,  278,  277,  276,  275,  274,  273,  272,  270,
1057       268,  267,  266,  265,  264,  263,  262,  261,  259,  258,
1058       256,  254,  253,  252,  251,  250,  249,  248,  247,  246,
1059       245,  244,  242,  241,  240,  239,  238,  237,  236,  234,
1060       233,  232,  231,  229,  228,  224,  220,  218,  217,  216,
1061       205,  203,  201,  200,  199,  198,  194,  192,  191,  190,
1062       189,  187,  185,  184,  182,  180,  178,  177,  175,  174,
1063       171,  170,  169,  168,  167,  164,  160,  157,  156,  155,
1064
1065       152,  151,  150,  145,  143,  141,  139,  137,  136,  135,
1066       134,  133,  132,  129,  128,  127,  125,  122,  121,  120,
1067       119,  118,  117,  116,  113,  110,  109,  108,  106,  105,
1068       100,   94,   89,   85,   84,   83,   82,   81,   78,   74,
1069        72,   65,   52,   51,   48,   33,   31,   17,   16,   11,
1070         7,    6,    5, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
1071      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
1072      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
1073      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
1074      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
1075
1076      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
1077      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
1078      1175, 1175, 1175
1079     } ;
1080
1081 static yy_state_type yy_last_accepting_state;
1082 static char *yy_last_accepting_cpos;
1083
1084 /* The intent behind this definition is that it'll catch
1085  * any uses of REJECT which flex missed.
1086  */
1087 #define REJECT reject_used_but_not_detected
1088 static int yy_more_offset = 0;
1089 static int yy_prev_more_offset = 0;
1090 #define yymore() (yy_more_offset = yy_flex_strlen( yytext ))
1091 #define YY_NEED_STRLEN
1092 #define YY_MORE_ADJ 0
1093 #define YY_RESTORE_YY_MORE_OFFSET \
1094         { \
1095         yy_more_offset = yy_prev_more_offset; \
1096         yyleng -= yy_more_offset; \
1097         }
1098 #ifndef YYLMAX
1099 #define YYLMAX 8192
1100 #endif
1101
1102 char yytext[YYLMAX];
1103 char *yytext_ptr;
1104 #line 1 "lex.l"
1105 #define INITIAL 0
1106 #line 3 "lex.l"
1107
1108 /* Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
1109  * 2005, 2006 by Arkkra Enterprises */
1110 /* All rights reserved */
1111
1112 /* lexer for music publication program. Recognizes and returns all the
1113  * tokens needed by yacc. */
1114
1115 #include <errno.h>
1116 #include "rational.h"
1117 #include "ytab.h"
1118 #include "defines.h"
1119 #include "structs.h"
1120 #include "globals.h"
1121
1122
1123 /* In order to reduce the number of terminal symbols so yacc wouldn't blow
1124  * up, we mapped several similar tokens to the same return code. The
1125  * yylval variable is then used to say which specific one of the set
1126  * was actually in the input. Bison doesn't have the number of tokens
1127  * restriction, but grouping related tokens is still useful. */
1128 extern YYSTYPE yylval;
1129
1130
1131 #define YY_INPUT(buf,result,max_size) \
1132         { \
1133                 int c = getc(yyin); \
1134                 if (c == '\n') { \
1135                         Last_was_newline = YES; \
1136                         yylineno += not_in_mac(1); \
1137                 } \
1138                 else { \
1139                         Last_was_newline = NO; \
1140                 } \
1141                 if (c == EOF || c == 0) { \
1142                          result = YY_NULL; \
1143                 } else { \
1144                         buf[0] = c; \
1145                         result = 1; \
1146                 } \
1147         } \
1148
1149 /* list of Flex buffers for includes/macros */
1150 struct Lexbuffer {
1151         YY_BUFFER_STATE buff;
1152         struct Lexbuffer *next;
1153 };
1154 static struct Lexbuffer *Lexlist;
1155
1156 /* We add a newline at end of input, to avoid cryptic error message
1157  * if user didn't end the file with a newline. */
1158 static YY_BUFFER_STATE Eof_newline = 0;
1159
1160 /* The compressed form of an "if" clause is stored here,
1161  * then passed to a mini-parser. */
1162 unsigned char Ifclause_buff[1024];
1163 int If_length;                  /* how much of Ifclause_buffer is used */
1164 static void add_ifclause P((int token));
1165 static void addnum_ifclause P((int value));
1166 static void addnumstr_ifclause P((char *numtoken));
1167 extern void set_ifclause_buffer P((unsigned char * buffer, int length));
1168 extern int ifparse P((void));
1169 static void bad_input P((char *where));
1170
1171 int yylineno;
1172
1173
1174 static int If_count = 0;        /* how many if, ifdef, and ifndef constructs in progress */
1175 static int If_errs;             /* to try to deduce missing 'then' */
1176 static int Escapedquotes = 0;
1177 static int Raw_string = NO;     /* YES if doing raw string (not expanding
1178                                  * any non-ASCII into Mup escapes) */
1179
1180 static int get_a_param P((char *macname));
1181 static void skipwhite P((void));
1182 static void to_eol P((void));
1183 static int skip2else P((void));
1184 static int oddbs P((void));
1185 static void embedquotes P((void));
1186 static void xpand_non_ascii P((void));
1187 static void ignore P((void));
1188 #define IF_CLAUSE 1
1189 #define STRING 2
1190
1191
1192 /* Macros after this point can all be overridden by user definitions in
1193  * section 1.
1194  */
1195
1196 #ifndef YY_SKIP_YYWRAP
1197 #ifdef __cplusplus
1198 extern "C" int yywrap YY_PROTO(( void ));
1199 #else
1200 extern int yywrap YY_PROTO(( void ));
1201 #endif
1202 #endif
1203
1204 #ifndef YY_NO_UNPUT
1205 static void yyunput YY_PROTO(( int c, char *buf_ptr ));
1206 #endif
1207
1208 #ifndef yytext_ptr
1209 static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
1210 #endif
1211
1212 #ifdef YY_NEED_STRLEN
1213 static int yy_flex_strlen YY_PROTO(( yyconst char * ));
1214 #endif
1215
1216 #ifndef YY_NO_INPUT
1217 #ifdef __cplusplus
1218 static int yyinput YY_PROTO(( void ));
1219 #else
1220 static int input YY_PROTO(( void ));
1221 #endif
1222 #endif
1223
1224 #if YY_STACK_USED
1225 static int yy_start_stack_ptr = 0;
1226 static int yy_start_stack_depth = 0;
1227 static int *yy_start_stack = 0;
1228 #ifndef YY_NO_PUSH_STATE
1229 static void yy_push_state YY_PROTO(( int new_state ));
1230 #endif
1231 #ifndef YY_NO_POP_STATE
1232 static void yy_pop_state YY_PROTO(( void ));
1233 #endif
1234 #ifndef YY_NO_TOP_STATE
1235 static int yy_top_state YY_PROTO(( void ));
1236 #endif
1237
1238 #else
1239 #define YY_NO_PUSH_STATE 1
1240 #define YY_NO_POP_STATE 1
1241 #define YY_NO_TOP_STATE 1
1242 #endif
1243
1244 #ifdef YY_MALLOC_DECL
1245 YY_MALLOC_DECL
1246 #else
1247 #if __STDC__
1248 #ifndef __cplusplus
1249 #include <stdlib.h>
1250 #endif
1251 #else
1252 /* Just try to get by without declaring the routines.  This will fail
1253  * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
1254  * or sizeof(void*) != sizeof(int).
1255  */
1256 #endif
1257 #endif
1258
1259 /* Amount of stuff to slurp up with each read. */
1260 #ifndef YY_READ_BUF_SIZE
1261 #define YY_READ_BUF_SIZE 8192
1262 #endif
1263
1264 /* Copy whatever the last rule matched to the standard output. */
1265
1266 #ifndef ECHO
1267 /* This used to be an fputs(), but since the string might contain NUL's,
1268  * we now use fwrite().
1269  */
1270 #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
1271 #endif
1272
1273 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
1274  * is returned in "result".
1275  */
1276 #ifndef YY_INPUT
1277 #define YY_INPUT(buf,result,max_size) \
1278         if ( yy_current_buffer->yy_is_interactive ) \
1279                 { \
1280                 int c = '*', n; \
1281                 for ( n = 0; n < max_size && \
1282                              (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
1283                         buf[n] = (char) c; \
1284                 if ( c == '\n' ) \
1285                         buf[n++] = (char) c; \
1286                 if ( c == EOF && ferror( yyin ) ) \
1287                         YY_FATAL_ERROR( "input in flex scanner failed" ); \
1288                 result = n; \
1289                 } \
1290         else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
1291                   && ferror( yyin ) ) \
1292                 YY_FATAL_ERROR( "input in flex scanner failed" );
1293 #endif
1294
1295 /* No semi-colon after return; correct usage is to write "yyterminate();" -
1296  * we don't want an extra ';' after the "return" because that will cause
1297  * some compilers to complain about unreachable statements.
1298  */
1299 #ifndef yyterminate
1300 #define yyterminate() return YY_NULL
1301 #endif
1302
1303 /* Number of entries by which start-condition stack grows. */
1304 #ifndef YY_START_STACK_INCR
1305 #define YY_START_STACK_INCR 25
1306 #endif
1307
1308 /* Report a fatal error. */
1309 #ifndef YY_FATAL_ERROR
1310 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
1311 #endif
1312
1313 /* Default declaration of generated scanner - a define so the user can
1314  * easily add parameters.
1315  */
1316 #ifndef YY_DECL
1317 #define YY_DECL int yylex YY_PROTO(( void ))
1318 #endif
1319
1320 /* Code executed at the beginning of each rule, after yytext and yyleng
1321  * have been set up.
1322  */
1323 #ifndef YY_USER_ACTION
1324 #define YY_USER_ACTION
1325 #endif
1326
1327 /* Code executed at the end of each rule. */
1328 #ifndef YY_BREAK
1329 #define YY_BREAK break;
1330 #endif
1331
1332 #define YY_RULE_SETUP \
1333         YY_USER_ACTION
1334
1335 YY_DECL
1336         {
1337         register yy_state_type yy_current_state;
1338         register char *yy_cp, *yy_bp;
1339         register int yy_act;
1340
1341 #line 91 "lex.l"
1342
1343
1344
1345         if ( yy_init )
1346                 {
1347                 yy_init = 0;
1348
1349 #ifdef YY_USER_INIT
1350                 YY_USER_INIT;
1351 #endif
1352
1353                 if ( ! yy_start )
1354                         yy_start = 1;   /* first start state */
1355
1356                 if ( ! yyin )
1357                         yyin = stdin;
1358
1359                 if ( ! yyout )
1360                         yyout = stdout;
1361
1362                 if ( ! yy_current_buffer )
1363                         yy_current_buffer =
1364                                 yy_create_buffer( yyin, YY_BUF_SIZE );
1365
1366                 yy_load_buffer_state();
1367                 }
1368
1369         while ( 1 )             /* loops until end-of-file is reached */
1370                 {
1371                 yy_cp = yy_c_buf_p;
1372
1373                 /* Support of yytext. */
1374                 *yy_cp = yy_hold_char;
1375
1376                 /* yy_bp points to the position in yy_ch_buf of the start of
1377                  * the current run.
1378                  */
1379                 yy_bp = yy_cp;
1380
1381                 yy_current_state = yy_start;
1382 yy_match:
1383                 do
1384                         {
1385                         register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
1386                         if ( yy_accept[yy_current_state] )
1387                                 {
1388                                 yy_last_accepting_state = yy_current_state;
1389                                 yy_last_accepting_cpos = yy_cp;
1390                                 }
1391                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1392                                 {
1393                                 yy_current_state = (int) yy_def[yy_current_state];
1394                                 if ( yy_current_state >= 1176 )
1395                                         yy_c = yy_meta[(unsigned int) yy_c];
1396                                 }
1397                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1398                         ++yy_cp;
1399                         }
1400                 while ( yy_base[yy_current_state] != 1454 );
1401
1402 yy_find_action:
1403                 yy_act = yy_accept[yy_current_state];
1404                 if ( yy_act == 0 )
1405                         { /* have to back up */
1406                         yy_cp = yy_last_accepting_cpos;
1407                         yy_current_state = yy_last_accepting_state;
1408                         yy_act = yy_accept[yy_current_state];
1409                         }
1410
1411                 YY_DO_BEFORE_ACTION;
1412
1413
1414 do_action:      /* This label is used only to access EOF actions. */
1415
1416
1417                 switch ( yy_act )
1418         { /* beginning of action switch */
1419                         case 0: /* must back up */
1420                         /* undo the effects of YY_DO_BEFORE_ACTION */
1421                         *yy_cp = yy_hold_char;
1422                         yy_cp = yy_last_accepting_cpos;
1423                         yy_current_state = yy_last_accepting_state;
1424                         goto yy_find_action;
1425
1426 case 1:
1427 YY_RULE_SETUP
1428 #line 93 "lex.l"
1429 { yylval.intval = FONT_TR; return(T_FONT); }
1430         YY_BREAK
1431 case 2:
1432 YY_RULE_SETUP
1433 #line 94 "lex.l"
1434 { yylval.intval = FONT_TB; return(T_FONT); }
1435         YY_BREAK
1436 case 3:
1437 YY_RULE_SETUP
1438 #line 95 "lex.l"
1439 { yylval.intval = FONT_TX; return(T_FONT); }
1440         YY_BREAK
1441 case 4:
1442 YY_RULE_SETUP
1443 #line 96 "lex.l"
1444 { yylval.intval = FONT_TI; return(T_FONT); }
1445         YY_BREAK
1446 case 5:
1447 YY_RULE_SETUP
1448 #line 98 "lex.l"
1449 { yylval.intval = BASE_TIMES; return(T_FFAMILY); }
1450         YY_BREAK
1451 case 6:
1452 YY_RULE_SETUP
1453 #line 99 "lex.l"
1454 { yylval.intval = BASE_AVANTGARDE; return(T_FFAMILY); }
1455         YY_BREAK
1456 case 7:
1457 YY_RULE_SETUP
1458 #line 100 "lex.l"
1459 { yylval.intval = BASE_COURIER; return(T_FFAMILY); }
1460         YY_BREAK
1461 case 8:
1462 YY_RULE_SETUP
1463 #line 101 "lex.l"
1464 { yylval.intval = BASE_HELVETICA; return(T_FFAMILY); }
1465         YY_BREAK
1466 case 9:
1467 YY_RULE_SETUP
1468 #line 102 "lex.l"
1469 { yylval.intval = BASE_BOOKMAN; return(T_FFAMILY); }
1470         YY_BREAK
1471 case 10:
1472 YY_RULE_SETUP
1473 #line 103 "lex.l"
1474 { yylval.intval = BASE_NEWCENTURY; return(T_FFAMILY); }
1475         YY_BREAK
1476 case 11:
1477 YY_RULE_SETUP
1478 #line 104 "lex.l"
1479 { yylval.intval = BASE_PALATINO; return(T_FFAMILY); }
1480         YY_BREAK
1481 case 12:
1482 YY_RULE_SETUP
1483 #line 106 "lex.l"
1484 {
1485                         /* set up include using filename with quotes stripped */
1486                         yytext[yyleng - 1] = '\0';
1487                         includefile(strchr(yytext, '"') + 1);
1488                 }
1489         YY_BREAK
1490 case 13:
1491 YY_RULE_SETUP
1492 #line 112 "lex.l"
1493 {
1494                         yytext[yyleng - 1] = '\0';
1495                         parse_font_file(strchr(yytext, '"') + 1);
1496                 }
1497         YY_BREAK
1498 case 14:
1499 #line 118 "lex.l"
1500 case 15:
1501 YY_RULE_SETUP
1502 #line 118 "lex.l"
1503 { yylval.intval = DIMINISHED; return(T_XPOS_INT); }
1504         YY_BREAK
1505 case 16:
1506 #line 120 "lex.l"
1507 case 17:
1508 YY_RULE_SETUP
1509 #line 120 "lex.l"
1510 { yylval.intval = AUGMENTED; return(T_XPOS_INT); }
1511         YY_BREAK
1512 case 18:
1513 #line 122 "lex.l"
1514 case 19:
1515 YY_RULE_SETUP
1516 #line 122 "lex.l"
1517 { yylval.intval = PERFECT; return(T_XPOS_INT); }
1518         YY_BREAK
1519 case 20:
1520 #line 124 "lex.l"
1521 case 21:
1522 YY_RULE_SETUP
1523 #line 124 "lex.l"
1524 { yylval.intval = MINOR; return(T_XPOS_INT); }
1525         YY_BREAK
1526 case 22:
1527 #line 126 "lex.l"
1528 case 23:
1529 YY_RULE_SETUP
1530 #line 126 "lex.l"
1531 { yylval.intval = MAJOR; return(T_XPOS_INT); }
1532         YY_BREAK
1533 case 24:
1534 YY_RULE_SETUP
1535 #line 128 "lex.l"
1536 return(T_TITLE);
1537         YY_BREAK
1538 case 25:
1539 YY_RULE_SETUP
1540 #line 130 "lex.l"
1541 return(T_SCORE);
1542         YY_BREAK
1543 case 26:
1544 YY_RULE_SETUP
1545 #line 131 "lex.l"
1546 return(T_STAFF);
1547         YY_BREAK
1548 case 27:
1549 YY_RULE_SETUP
1550 #line 132 "lex.l"
1551 return(T_VOICE);
1552         YY_BREAK
1553 case 28:
1554 YY_RULE_SETUP
1555 #line 133 "lex.l"
1556 { yylval.intval = C_HEADER; return(T_BLOCKHEAD); }
1557         YY_BREAK
1558 case 29:
1559 YY_RULE_SETUP
1560 #line 134 "lex.l"
1561 { yylval.intval = C_FOOTER; return(T_BLOCKHEAD); }
1562         YY_BREAK
1563 case 30:
1564 YY_RULE_SETUP
1565 #line 135 "lex.l"
1566 { yylval.intval = C_HEAD2; return(T_BLOCKHEAD); }
1567         YY_BREAK
1568 case 31:
1569 YY_RULE_SETUP
1570 #line 136 "lex.l"
1571 { yylval.intval = C_FOOT2; return(T_BLOCKHEAD); }
1572         YY_BREAK
1573 case 32:
1574 YY_RULE_SETUP
1575 #line 137 "lex.l"
1576 { yylval.intval = C_TOP; return(T_BLOCKHEAD); }
1577         YY_BREAK
1578 case 33:
1579 YY_RULE_SETUP
1580 #line 138 "lex.l"
1581 { yylval.intval = C_BOT; return(T_BLOCKHEAD); }
1582         YY_BREAK
1583 case 34:
1584 YY_RULE_SETUP
1585 #line 139 "lex.l"
1586 { yylval.intval = C_TOP2; return(T_BLOCKHEAD); }
1587         YY_BREAK
1588 case 35:
1589 YY_RULE_SETUP
1590 #line 140 "lex.l"
1591 { yylval.intval = C_BOT2; return(T_BLOCKHEAD); }
1592         YY_BREAK
1593 case 36:
1594 YY_RULE_SETUP
1595 #line 141 "lex.l"
1596 { yylval.intval = C_BLOCK; return(T_BLOCKHEAD); }
1597         YY_BREAK
1598 case 37:
1599 YY_RULE_SETUP
1600 #line 142 "lex.l"
1601 return(T_GRIDS);
1602         YY_BREAK
1603 case 38:
1604 YY_RULE_SETUP
1605 #line 143 "lex.l"
1606 return(T_MUSIC);
1607         YY_BREAK
1608 case 39:
1609 YY_RULE_SETUP
1610 #line 144 "lex.l"
1611 return(T_HEADSHAPES);
1612         YY_BREAK
1613 case 40:
1614 YY_RULE_SETUP
1615 #line 146 "lex.l"
1616 return(T_NUMBER);
1617         YY_BREAK
1618 case 41:
1619 YY_RULE_SETUP
1620 #line 148 "lex.l"
1621 return(T_EQUAL);
1622         YY_BREAK
1623 case 42:
1624 YY_RULE_SETUP
1625 #line 149 "lex.l"
1626 return(T_SEMICOLON);
1627         YY_BREAK
1628 case 43:
1629 #line 151 "lex.l"
1630 case 44:
1631 #line 152 "lex.l"
1632 case 45:
1633 YY_RULE_SETUP
1634 #line 152 "lex.l"
1635 return(T_NEWLINE);
1636         YY_BREAK
1637 case 46:
1638 YY_RULE_SETUP
1639 #line 153 "lex.l"
1640 return(T_COLON);
1641         YY_BREAK
1642 case 47:
1643 YY_RULE_SETUP
1644 #line 154 "lex.l"
1645 return(T_COMMA);
1646         YY_BREAK
1647 case 48:
1648 YY_RULE_SETUP
1649 #line 155 "lex.l"
1650 return(T_LBRACKET);
1651         YY_BREAK
1652 case 49:
1653 YY_RULE_SETUP
1654 #line 156 "lex.l"
1655 return(T_RBRACKET);
1656         YY_BREAK
1657 case 50:
1658 YY_RULE_SETUP
1659 #line 157 "lex.l"
1660 return(T_LBRACE);
1661         YY_BREAK
1662 case 51:
1663 YY_RULE_SETUP
1664 #line 158 "lex.l"
1665 return(T_RBRACE);
1666         YY_BREAK
1667 case 52:
1668 YY_RULE_SETUP
1669 #line 159 "lex.l"
1670 return(T_LPAREN);
1671         YY_BREAK
1672 case 53:
1673 YY_RULE_SETUP
1674 #line 160 "lex.l"
1675 return(T_RPAREN);
1676         YY_BREAK
1677 case 54:
1678 YY_RULE_SETUP
1679 #line 161 "lex.l"
1680 return(T_EXCLAM);
1681         YY_BREAK
1682 case 55:
1683 YY_RULE_SETUP
1684 #line 163 "lex.l"
1685 { BEGIN STRING; yymore(); }
1686         YY_BREAK
1687 case 56:
1688 YY_RULE_SETUP
1689 #line 164 "lex.l"
1690 {
1691                         /* string: handle embedded backslashed quotes */
1692                         if (yytext[yyleng-2] == '\\' && oddbs() == YES) {
1693                                 Escapedquotes++;
1694                                 yymore();
1695                         }
1696                         else {
1697                                 embedquotes();
1698                                 BEGIN 0;
1699                                 xpand_non_ascii();
1700                                 if (yyleng > YYLMAX) {
1701                                         l_ufatal(Curr_filename, yylineno,
1702                                                         "text string too long");
1703                                 }
1704                                 return(T_STRING);
1705                         }
1706                 }
1707         YY_BREAK
1708 case 57:
1709 YY_RULE_SETUP
1710 #line 182 "lex.l"
1711 return(T_DASH);
1712         YY_BREAK
1713 case 58:
1714 YY_RULE_SETUP
1715 #line 183 "lex.l"
1716 return(T_PLUS);
1717         YY_BREAK
1718 case 59:
1719 YY_RULE_SETUP
1720 #line 185 "lex.l"
1721 return(T_CUE);
1722         YY_BREAK
1723 case 60:
1724 YY_RULE_SETUP
1725 #line 186 "lex.l"
1726 return(T_GRACE);
1727         YY_BREAK
1728 case 61:
1729 YY_RULE_SETUP
1730 #line 187 "lex.l"
1731 return(T_XNOTE);
1732         YY_BREAK
1733 case 62:
1734 YY_RULE_SETUP
1735 #line 188 "lex.l"
1736 return(T_DIAM);
1737         YY_BREAK
1738 case 63:
1739 YY_RULE_SETUP
1740 #line 189 "lex.l"
1741 return(T_HO);
1742         YY_BREAK
1743 case 64:
1744 YY_RULE_SETUP
1745 #line 190 "lex.l"
1746 return(T_HS);
1747         YY_BREAK
1748 case 65:
1749 YY_RULE_SETUP
1750 #line 191 "lex.l"
1751 { yylval.intval = L_NORMAL; return(T_TIE); }
1752         YY_BREAK
1753 case 66:
1754 YY_RULE_SETUP
1755 #line 192 "lex.l"
1756 { yylval.intval = L_DOTTED; return(T_TIE); }
1757         YY_BREAK
1758 case 67:
1759 YY_RULE_SETUP
1760 #line 193 "lex.l"
1761 { yylval.intval = L_DASHED; return(T_TIE); }
1762         YY_BREAK
1763 case 68:
1764 YY_RULE_SETUP
1765 #line 194 "lex.l"
1766 { yylval.intval = L_NORMAL; return(T_SLUR); }
1767         YY_BREAK
1768 case 69:
1769 YY_RULE_SETUP
1770 #line 195 "lex.l"
1771 { yylval.intval = L_DOTTED; return(T_SLUR); }
1772         YY_BREAK
1773 case 70:
1774 YY_RULE_SETUP
1775 #line 196 "lex.l"
1776 { yylval.intval = L_DASHED; return(T_SLUR); }
1777         YY_BREAK
1778 case 71:
1779 YY_RULE_SETUP
1780 #line 197 "lex.l"
1781 return(T_WITH);
1782         YY_BREAK
1783 case 72:
1784 YY_RULE_SETUP
1785 #line 198 "lex.l"
1786 { yylval.intval = PL_ABOVE; return(T_PLACE); }
1787         YY_BREAK
1788 case 73:
1789 YY_RULE_SETUP
1790 #line 199 "lex.l"
1791 { yylval.intval = PL_BELOW; return(T_PLACE); }
1792         YY_BREAK
1793 case 74:
1794 YY_RULE_SETUP
1795 #line 200 "lex.l"
1796 { yylval.intval = PL_BETWEEN; return(T_PLACE); }
1797         YY_BREAK
1798 case 75:
1799 YY_RULE_SETUP
1800 #line 201 "lex.l"
1801 return(T_ALL);
1802         YY_BREAK
1803 case 76:
1804 YY_RULE_SETUP
1805 #line 202 "lex.l"
1806 return(T_UP);
1807         YY_BREAK
1808 case 77:
1809 YY_RULE_SETUP
1810 #line 203 "lex.l"
1811 return(T_DOWN);
1812         YY_BREAK
1813 case 78:
1814 YY_RULE_SETUP
1815 #line 204 "lex.l"
1816 return(T_LEN);
1817         YY_BREAK
1818 case 79:
1819 YY_RULE_SETUP
1820 #line 205 "lex.l"
1821 return(T_SLASHMARK);
1822         YY_BREAK
1823 case 80:
1824 YY_RULE_SETUP
1825 #line 206 "lex.l"
1826 return(T_ALT);
1827         YY_BREAK
1828 case 81:
1829 YY_RULE_SETUP
1830 #line 207 "lex.l"
1831 return(T_BM);
1832         YY_BREAK
1833 case 82:
1834 YY_RULE_SETUP
1835 #line 208 "lex.l"
1836 return(T_ESBM);
1837         YY_BREAK
1838 case 83:
1839 YY_RULE_SETUP
1840 #line 209 "lex.l"
1841 return(T_EBM);
1842         YY_BREAK
1843 case 84:
1844 YY_RULE_SETUP
1845 #line 210 "lex.l"
1846 return(T_SLOPE);
1847         YY_BREAK
1848 case 85:
1849 YY_RULE_SETUP
1850 #line 211 "lex.l"
1851 { yylval.intval = PAD; return(T_PAD); }
1852         YY_BREAK
1853 case 86:
1854 YY_RULE_SETUP
1855 #line 213 "lex.l"
1856 return(T_HAT);
1857         YY_BREAK
1858 case 87:
1859 YY_RULE_SETUP
1860 #line 214 "lex.l"
1861 { yylval.intval = L_NORMAL; return(T_TILDE); }
1862         YY_BREAK
1863 case 88:
1864 YY_RULE_SETUP
1865 #line 215 "lex.l"
1866 { yylval.intval = L_DOTTED; return(T_TILDE); }
1867         YY_BREAK
1868 case 89:
1869 YY_RULE_SETUP
1870 #line 216 "lex.l"
1871 { yylval.intval = L_DASHED; return(T_TILDE); }
1872         YY_BREAK
1873 case 90:
1874 YY_RULE_SETUP
1875 #line 217 "lex.l"
1876 return(T_QUESTION);
1877         YY_BREAK
1878 case 91:
1879 YY_RULE_SETUP
1880 #line 219 "lex.l"
1881 return(T_DOT);
1882         YY_BREAK
1883 case 92:
1884 YY_RULE_SETUP
1885 #line 220 "lex.l"
1886 { yylval.intval = 2; return(T_MULTIWHOLE); }
1887         YY_BREAK
1888 case 93:
1889 YY_RULE_SETUP
1890 #line 221 "lex.l"
1891 { yylval.intval = 4; return(T_MULTIWHOLE); }
1892         YY_BREAK
1893 case 94:
1894 YY_RULE_SETUP
1895 #line 223 "lex.l"
1896 return(T_LET_M);
1897         YY_BREAK
1898 case 95:
1899 YY_RULE_SETUP
1900 #line 224 "lex.l"
1901 return(T_LET_R);
1902         YY_BREAK
1903 case 96:
1904 YY_RULE_SETUP
1905 #line 225 "lex.l"
1906 return(T_LET_S);
1907         YY_BREAK
1908 case 97:
1909 YY_RULE_SETUP
1910 #line 226 "lex.l"
1911 return(T_LET_U);
1912         YY_BREAK
1913 case 98:
1914 YY_RULE_SETUP
1915 #line 227 "lex.l"
1916 return(T_PITCH);
1917         YY_BREAK
1918 case 99:
1919 YY_RULE_SETUP
1920 #line 228 "lex.l"
1921 return(T_SHARP);
1922         YY_BREAK
1923 case 100:
1924 YY_RULE_SETUP
1925 #line 229 "lex.l"
1926 return(T_AMPERSAND);
1927         YY_BREAK
1928 case 101:
1929 YY_RULE_SETUP
1930 #line 230 "lex.l"
1931 return(T_LET_N);
1932         YY_BREAK
1933 case 102:
1934 YY_RULE_SETUP
1935 #line 231 "lex.l"
1936 return(T_LET_X);
1937         YY_BREAK
1938 case 103:
1939 YY_RULE_SETUP
1940 #line 232 "lex.l"
1941 return(T_LETTER);       /* all letters not used for something special */
1942         YY_BREAK
1943 case 104:
1944 YY_RULE_SETUP
1945 #line 233 "lex.l"
1946 return(T_RPT);
1947         YY_BREAK
1948 case 105:
1949 YY_RULE_SETUP
1950 #line 234 "lex.l"
1951 return(T_LVAR); /* multi-character location variable names */
1952         YY_BREAK
1953 case 106:
1954 YY_RULE_SETUP
1955 #line 235 "lex.l"
1956 return(T_DBLFLAT);
1957         YY_BREAK
1958 case 107:
1959 YY_RULE_SETUP
1960 #line 237 "lex.l"
1961 return(T_LYRICS);
1962         YY_BREAK
1963 case 108:
1964 YY_RULE_SETUP
1965 #line 239 "lex.l"
1966 { yylval.intval = NO; return(T_SCOREFEED); }
1967         YY_BREAK
1968 case 109:
1969 YY_RULE_SETUP
1970 #line 240 "lex.l"
1971 { yylval.intval = YES; return(T_SCOREFEED); }
1972         YY_BREAK
1973 case 110:
1974 YY_RULE_SETUP
1975 #line 242 "lex.l"
1976 return(T_MULTIREST);
1977         YY_BREAK
1978 case 111:
1979 YY_RULE_SETUP
1980 #line 244 "lex.l"
1981 { yylval.intval = SINGLEBAR; return(T_BARTYPE); }
1982         YY_BREAK
1983 case 112:
1984 YY_RULE_SETUP
1985 #line 245 "lex.l"
1986 { yylval.intval = DOUBLEBAR; return(T_BARTYPE); }
1987         YY_BREAK
1988 case 113:
1989 YY_RULE_SETUP
1990 #line 246 "lex.l"
1991 { yylval.intval = REPEATSTART; return(T_BARTYPE); }
1992         YY_BREAK
1993 case 114:
1994 YY_RULE_SETUP
1995 #line 247 "lex.l"
1996 { yylval.intval = REPEATEND; return(T_BARTYPE); }
1997         YY_BREAK
1998 case 115:
1999 YY_RULE_SETUP
2000 #line 248 "lex.l"
2001 { yylval.intval = REPEATBOTH; return(T_BARTYPE); }
2002         YY_BREAK
2003 case 116:
2004 YY_RULE_SETUP
2005 #line 249 "lex.l"
2006 { yylval.intval = INVISBAR; return(T_BARTYPE); }
2007         YY_BREAK
2008 case 117:
2009 YY_RULE_SETUP
2010 #line 250 "lex.l"
2011 { yylval.intval = ENDBAR; return(T_BARTYPE); }
2012         YY_BREAK
2013 case 118:
2014 YY_RULE_SETUP
2015 #line 251 "lex.l"
2016 { yylval.intval = RESTART; return(T_BARTYPE); }
2017         YY_BREAK
2018 case 119:
2019 #line 254 "lex.l"
2020 case 120:
2021 YY_RULE_SETUP
2022 #line 254 "lex.l"
2023 return(T_REHEARSAL);
2024         YY_BREAK
2025 case 121:
2026 YY_RULE_SETUP
2027 #line 255 "lex.l"
2028 return(T_NUM);
2029         YY_BREAK
2030 case 122:
2031 YY_RULE_SETUP
2032 #line 256 "lex.l"
2033 return(T_LET);
2034         YY_BREAK
2035 case 123:
2036 YY_RULE_SETUP
2037 #line 257 "lex.l"
2038 return(T_MNUM);
2039         YY_BREAK
2040 case 124:
2041 YY_RULE_SETUP
2042 #line 259 "lex.l"
2043 return(T_ENDING);
2044         YY_BREAK
2045 case 125:
2046 YY_RULE_SETUP
2047 #line 260 "lex.l"
2048 return(T_ENDENDING);
2049         YY_BREAK
2050 case 126:
2051 YY_RULE_SETUP
2052 #line 262 "lex.l"
2053 return(T_HIDECHANGES);
2054         YY_BREAK
2055 case 127:
2056 YY_RULE_SETUP
2057 #line 264 "lex.l"
2058 { yylval.intval = L_WIDE; return(T_LINETYPE); }
2059         YY_BREAK
2060 case 128:
2061 YY_RULE_SETUP
2062 #line 265 "lex.l"
2063 { yylval.intval = L_MEDIUM; return(T_LINETYPE); }
2064         YY_BREAK
2065 case 129:
2066 YY_RULE_SETUP
2067 #line 266 "lex.l"
2068 { yylval.intval = L_WAVY; return(T_LINETYPE); }
2069         YY_BREAK
2070 case 130:
2071 YY_RULE_SETUP
2072 #line 267 "lex.l"
2073 { yylval.intval = L_DOTTED; return(T_LINETYPE); }
2074         YY_BREAK
2075 case 131:
2076 YY_RULE_SETUP
2077 #line 268 "lex.l"
2078 { yylval.intval = L_DASHED; return(T_LINETYPE); }
2079         YY_BREAK
2080 case 132:
2081 YY_RULE_SETUP
2082 #line 270 "lex.l"
2083 return(T_LINE);
2084         YY_BREAK
2085 case 133:
2086 YY_RULE_SETUP
2087 #line 271 "lex.l"
2088 return(T_TO);
2089         YY_BREAK
2090 case 134:
2091 YY_RULE_SETUP
2092 #line 272 "lex.l"
2093 return(T_CURVE);
2094         YY_BREAK
2095 case 135:
2096 YY_RULE_SETUP
2097 #line 273 "lex.l"
2098 return(T_BULGE);
2099         YY_BREAK
2100 case 136:
2101 YY_RULE_SETUP
2102 #line 275 "lex.l"
2103 { yylval.intval = J_LEFT; return(T_PRINTTYPE); }
2104         YY_BREAK
2105 case 137:
2106 YY_RULE_SETUP
2107 #line 276 "lex.l"
2108 { yylval.intval = J_RIGHT; return(T_PRINTTYPE); }
2109         YY_BREAK
2110 case 138:
2111 YY_RULE_SETUP
2112 #line 277 "lex.l"
2113 { yylval.intval = J_CENTER; return(T_PRINTTYPE); }
2114         YY_BREAK
2115 case 139:
2116 YY_RULE_SETUP
2117 #line 278 "lex.l"
2118 { yylval.intval = J_NONE; return(T_PRINTTYPE); }
2119         YY_BREAK
2120 case 140:
2121 YY_RULE_SETUP
2122 #line 279 "lex.l"
2123 { return(T_POSTSCRIPT); }
2124         YY_BREAK
2125 case 141:
2126 YY_RULE_SETUP
2127 #line 280 "lex.l"
2128 { yylval.intval = J_RAGPARA; return(T_PARATYPE); }
2129         YY_BREAK
2130 case 142:
2131 YY_RULE_SETUP
2132 #line 281 "lex.l"
2133 { yylval.intval = J_JUSTPARA; return(T_PARATYPE); }
2134         YY_BREAK
2135 case 143:
2136 YY_RULE_SETUP
2137 #line 282 "lex.l"
2138 return(T_PARAGRAPH);
2139         YY_BREAK
2140 case 144:
2141 YY_RULE_SETUP
2142 #line 283 "lex.l"
2143 return(T_NL); 
2144         YY_BREAK
2145 case 145:
2146 YY_RULE_SETUP
2147 #line 285 "lex.l"
2148 return(T_SLASH);
2149         YY_BREAK
2150 case 146:
2151 YY_RULE_SETUP
2152 #line 286 "lex.l"
2153 return(T_CUT);
2154         YY_BREAK
2155 case 147:
2156 YY_RULE_SETUP
2157 #line 287 "lex.l"
2158 return(T_COMMON);
2159         YY_BREAK
2160 case 148:
2161 YY_RULE_SETUP
2162 #line 289 "lex.l"
2163 { yylval.intval = NUMSTAFF; return(T_NUMVAR); }
2164         YY_BREAK
2165 case 149:
2166 YY_RULE_SETUP
2167 #line 290 "lex.l"
2168 { yylval.intval = VSCHEME; return(T_VVAR); }
2169         YY_BREAK
2170 case 150:
2171 YY_RULE_SETUP
2172 #line 291 "lex.l"
2173 { yylval.intval = VCOMBINE; return(T_VCOMBINE); }
2174         YY_BREAK
2175 case 151:
2176 YY_RULE_SETUP
2177 #line 292 "lex.l"
2178 { yylval.intval = VC_NOOVERLAP; return(T_VCOMBVAL); }
2179         YY_BREAK
2180 case 152:
2181 YY_RULE_SETUP
2182 #line 293 "lex.l"
2183 { yylval.intval = VC_SHAREONE; return(T_VCOMBVAL); }
2184         YY_BREAK
2185 case 153:
2186 YY_RULE_SETUP
2187 #line 294 "lex.l"
2188 { yylval.intval = VC_OVERLAP; return(T_VCOMBVAL); }
2189         YY_BREAK
2190 case 154:
2191 YY_RULE_SETUP
2192 #line 295 "lex.l"
2193 { yylval.intval = DEFOCT; return(T_NUMVAR); }
2194         YY_BREAK
2195 case 155:
2196 YY_RULE_SETUP
2197 #line 296 "lex.l"
2198 { yylval.intval = LYRICSSIZE; return(T_NUMVAR); }
2199         YY_BREAK
2200 case 156:
2201 YY_RULE_SETUP
2202 #line 297 "lex.l"
2203 { yylval.intval = SYLPOSITION; return(T_NUMVAR); }
2204         YY_BREAK
2205 case 157:
2206 YY_RULE_SETUP
2207 #line 298 "lex.l"
2208 { yylval.intval = SIZE; return(T_NUMVAR); }
2209         YY_BREAK
2210 case 158:
2211 YY_RULE_SETUP
2212 #line 299 "lex.l"
2213 { yylval.intval = MINSTSEP; return(T_NUMVAR); }
2214         YY_BREAK
2215 case 159:
2216 YY_RULE_SETUP
2217 #line 300 "lex.l"
2218 { yylval.intval = MINSCPAD; return(T_SCOREPAD); }
2219         YY_BREAK
2220 case 160:
2221 YY_RULE_SETUP
2222 #line 301 "lex.l"
2223 { yylval.intval = STAFFPAD; return(T_NUMVAR); }
2224         YY_BREAK
2225 case 161:
2226 YY_RULE_SETUP
2227 #line 302 "lex.l"
2228 { yylval.intval = CHORDDIST; return(T_NUMVAR); }
2229         YY_BREAK
2230 case 162:
2231 YY_RULE_SETUP
2232 #line 303 "lex.l"
2233 { yylval.intval = DIST; return(T_NUMVAR); }
2234         YY_BREAK
2235 case 163:
2236 YY_RULE_SETUP
2237 #line 304 "lex.l"
2238 { yylval.intval = DYNDIST; return(T_NUMVAR); }
2239         YY_BREAK
2240 case 164:
2241 YY_RULE_SETUP
2242 #line 305 "lex.l"
2243 {
2244                         l_yyerror(Curr_filename, yylineno,
2245                                 "'crescdist' has been renamed 'dyndist'");
2246                         yylval.intval = DYNDIST;
2247                         return(T_NUMVAR);
2248                 }
2249         YY_BREAK
2250 case 165:
2251 YY_RULE_SETUP
2252 #line 311 "lex.l"
2253 { yylval.intval = DIVISION; return(T_NUMVAR); }
2254         YY_BREAK
2255 case 166:
2256 YY_RULE_SETUP
2257 #line 312 "lex.l"
2258 { yylval.intval = RELEASE; return(T_NUMVAR); }
2259         YY_BREAK
2260 case 167:
2261 YY_RULE_SETUP
2262 #line 313 "lex.l"
2263 { yylval.intval = PANELSPERPAGE; return(T_NUMVAR); }
2264         YY_BREAK
2265 case 168:
2266 YY_RULE_SETUP
2267 #line 314 "lex.l"
2268 { yylval.intval = GRIDFRET; return(T_NUMVAR); }
2269         YY_BREAK
2270 case 169:
2271 YY_RULE_SETUP
2272 #line 315 "lex.l"
2273 { yylval.intval = RESTCOMBINE; return(T_NUMVAR); }
2274         YY_BREAK
2275 case 170:
2276 YY_RULE_SETUP
2277 #line 316 "lex.l"
2278 { yylval.intval = FIRSTPAGE; return(T_NUMVAR); }
2279         YY_BREAK
2280 case 171:
2281 YY_RULE_SETUP
2282 #line 317 "lex.l"
2283 { yylval.intval = MINSCSEP; return(T_SCORESEP); }
2284         YY_BREAK
2285 case 172:
2286 YY_RULE_SETUP
2287 #line 318 "lex.l"
2288 { yylval.intval = STAFFLINES; return(T_STAFFLINES); }
2289         YY_BREAK
2290 case 173:
2291 YY_RULE_SETUP
2292 #line 319 "lex.l"
2293 { yylval.intval = ONTHELINE; return(T_YESNOVAR); }
2294         YY_BREAK
2295 case 174:
2296 YY_RULE_SETUP
2297 #line 320 "lex.l"
2298 { yylval.intval = WARN; return(T_YESNOVAR); }
2299         YY_BREAK
2300 case 175:
2301 YY_RULE_SETUP
2302 #line 321 "lex.l"
2303 { yylval.intval = NUMBERMRPT; return(T_YESNOVAR); }
2304         YY_BREAK
2305 case 176:
2306 YY_RULE_SETUP
2307 #line 322 "lex.l"
2308 { yylval.intval = PRINTMULTNUM; return(T_YESNOVAR); }
2309         YY_BREAK
2310 case 177:
2311 YY_RULE_SETUP
2312 #line 323 "lex.l"
2313 { yylval.intval = RESTSYMMULT; return(T_YESNOVAR); }
2314         YY_BREAK
2315 case 178:
2316 YY_RULE_SETUP
2317 #line 324 "lex.l"
2318 { yylval.intval = GRIDSWHEREUSED; return(T_YESNOVAR); }
2319         YY_BREAK
2320 case 179:
2321 YY_RULE_SETUP
2322 #line 325 "lex.l"
2323 { yylval.intval = GRIDSATEND; return(T_YESNOVAR); }
2324         YY_BREAK
2325 case 180:
2326 YY_RULE_SETUP
2327 #line 326 "lex.l"
2328 return(T_TAB);
2329         YY_BREAK
2330 case 181:
2331 YY_RULE_SETUP
2332 #line 327 "lex.l"
2333 { yylval.intval = TABWHITEBOX; return(T_YESNOVAR); }
2334         YY_BREAK
2335 case 182:
2336 YY_RULE_SETUP
2337 #line 328 "lex.l"
2338 { yylval.intval = TIMEUNIT; return(T_TIMEUNIT); }
2339         YY_BREAK
2340 case 183:
2341 YY_RULE_SETUP
2342 #line 329 "lex.l"
2343 { yylval.intval = SWINGUNIT; return(T_SWINGUNIT); }
2344         YY_BREAK
2345 case 184:
2346 YY_RULE_SETUP
2347 #line 330 "lex.l"
2348 { yylval.intval = TOPMARGIN; return(T_FNUMVAR); }
2349         YY_BREAK
2350 case 185:
2351 YY_RULE_SETUP
2352 #line 331 "lex.l"
2353 { yylval.intval = BOTMARGIN; return(T_FNUMVAR); }
2354         YY_BREAK
2355 case 186:
2356 YY_RULE_SETUP
2357 #line 332 "lex.l"
2358 { yylval.intval = BOTMARGIN; return(T_FNUMVAR); }
2359         YY_BREAK
2360 case 187:
2361 YY_RULE_SETUP
2362 #line 333 "lex.l"
2363 { yylval.intval = LEFTMARGIN; return(T_FNUMVAR); }
2364         YY_BREAK
2365 case 188:
2366 YY_RULE_SETUP
2367 #line 334 "lex.l"
2368 { yylval.intval = RIGHTMARGIN; return(T_FNUMVAR); }
2369         YY_BREAK
2370 case 189:
2371 YY_RULE_SETUP
2372 #line 335 "lex.l"
2373 { yylval.intval = PACKFACT; return(T_FNUMVAR); }
2374         YY_BREAK
2375 case 190:
2376 YY_RULE_SETUP
2377 #line 336 "lex.l"
2378 { yylval.intval = PACKEXP; return(T_FNUMVAR); }
2379         YY_BREAK
2380 case 191:
2381 YY_RULE_SETUP
2382 #line 337 "lex.l"
2383 { yylval.intval = STAFFSCALE; return(T_FNUMVAR); }
2384         YY_BREAK
2385 case 192:
2386 YY_RULE_SETUP
2387 #line 338 "lex.l"
2388 { yylval.intval = GRIDSCALE; return(T_FNUMVAR); }
2389         YY_BREAK
2390 case 193:
2391 YY_RULE_SETUP
2392 #line 339 "lex.l"
2393 { yylval.intval = SCALE_FACTOR; return(T_FNUMVAR); }
2394         YY_BREAK
2395 case 194:
2396 YY_RULE_SETUP
2397 #line 340 "lex.l"
2398 { yylval.intval = STEMLEN; return(T_FNUMVAR); }
2399         YY_BREAK
2400 case 195:
2401 YY_RULE_SETUP
2402 #line 341 "lex.l"
2403 { yylval.intval = STEMSHORTEN; return(T_FNUMVAR); }
2404         YY_BREAK
2405 case 196:
2406 YY_RULE_SETUP
2407 #line 342 "lex.l"
2408 { yylval.intval = BEAMSLOPE; return(T_2FNUMVAR); }
2409         YY_BREAK
2410 case 197:
2411 YY_RULE_SETUP
2412 #line 343 "lex.l"
2413 { yylval.intval = TRANSPOSITION; return(T_TRANSPOSE); }
2414         YY_BREAK
2415 case 198:
2416 YY_RULE_SETUP
2417 #line 344 "lex.l"
2418 { yylval.intval = ADDTRANSPOSITION; return(T_TRANSPOSE); }
2419         YY_BREAK
2420 case 199:
2421 YY_RULE_SETUP
2422 #line 345 "lex.l"
2423 { yylval.intval = LYRICSALIGN; return(T_FNUMVAR); }
2424         YY_BREAK
2425 case 200:
2426 YY_RULE_SETUP
2427 #line 346 "lex.l"
2428 { yylval.intval = PAGEHEIGHT; return(T_FNUMVAR); }
2429         YY_BREAK
2430 case 201:
2431 YY_RULE_SETUP
2432 #line 347 "lex.l"
2433 { yylval.intval = PAGEWIDTH; return(T_FNUMVAR); }
2434         YY_BREAK
2435 case 202:
2436 YY_RULE_SETUP
2437 #line 348 "lex.l"
2438 { return(T_PSVAR); }
2439         YY_BREAK
2440 case 203:
2441 YY_RULE_SETUP
2442 #line 349 "lex.l"
2443 { yylval.intval = PS_LETTER; return(T_PAGESIZE); }
2444         YY_BREAK
2445 case 204:
2446 YY_RULE_SETUP
2447 #line 350 "lex.l"
2448 { yylval.intval = PS_LEGAL; return(T_PAGESIZE); }
2449         YY_BREAK
2450 case 205:
2451 YY_RULE_SETUP
2452 #line 351 "lex.l"
2453 { yylval.intval = PS_FLSA; return(T_PAGESIZE); }
2454         YY_BREAK
2455 case 206:
2456 YY_RULE_SETUP
2457 #line 352 "lex.l"
2458 { yylval.intval = PS_HALFLETTER; return(T_PAGESIZE); }
2459         YY_BREAK
2460 case 207:
2461 YY_RULE_SETUP
2462 #line 353 "lex.l"
2463 { yylval.intval = O_PORTRAIT; return(T_ORIENTATION); }
2464         YY_BREAK
2465 case 208:
2466 YY_RULE_SETUP
2467 #line 354 "lex.l"
2468 { yylval.intval = O_LANDSCAPE; return(T_ORIENTATION); }
2469         YY_BREAK
2470 case 209:
2471 YY_RULE_SETUP
2472 #line 355 "lex.l"
2473 { yylval.intval = UNITS; return(T_UNITS); }
2474         YY_BREAK
2475 case 210:
2476 YY_RULE_SETUP
2477 #line 356 "lex.l"
2478 { yylval.intval = CM; return(T_UNITTYPE); }
2479         YY_BREAK
2480 case 211:
2481 YY_RULE_SETUP
2482 #line 357 "lex.l"
2483 { yylval.intval = INCHES; return(T_UNITTYPE); }
2484         YY_BREAK
2485 case 212:
2486 YY_RULE_SETUP
2487 #line 359 "lex.l"
2488 { yylval.intval = ENDINGSTYLE; return(T_ENDSTYLE); }
2489         YY_BREAK
2490 case 213:
2491 YY_RULE_SETUP
2492 #line 360 "lex.l"
2493 { yylval.intval = REHSTYLE; return(T_REH_STYLE); }
2494         YY_BREAK
2495 case 214:
2496 YY_RULE_SETUP
2497 #line 361 "lex.l"
2498 { yylval.intval = RS_BOXED; return(T_REHTYPE); }
2499         YY_BREAK
2500 case 215:
2501 YY_RULE_SETUP
2502 #line 362 "lex.l"
2503 { yylval.intval = RS_CIRCLED; return(T_REHTYPE); }
2504         YY_BREAK
2505 case 216:
2506 YY_RULE_SETUP
2507 #line 363 "lex.l"
2508 { yylval.intval = RS_PLAIN; return(T_REHTYPE); }
2509         YY_BREAK
2510 case 217:
2511 YY_RULE_SETUP
2512 #line 364 "lex.l"
2513 { yylval.intval = PEDSTYLE; return(T_PEDSTYLE); }
2514         YY_BREAK
2515 case 218:
2516 YY_RULE_SETUP
2517 #line 365 "lex.l"
2518 return(T_PEDSTAR);
2519         YY_BREAK
2520 case 219:
2521 YY_RULE_SETUP
2522 #line 366 "lex.l"
2523 { yylval.intval = ENDING_BARRED; return(T_ENDTYPE); }
2524         YY_BREAK
2525 case 220:
2526 YY_RULE_SETUP
2527 #line 367 "lex.l"
2528 { yylval.intval = ENDING_GROUPED; return(T_ENDTYPE); }
2529         YY_BREAK
2530 case 221:
2531 YY_RULE_SETUP
2532 #line 369 "lex.l"
2533 { yylval.intval = BRACELIST; return(T_RANGELISTVAR); }
2534         YY_BREAK
2535 case 222:
2536 YY_RULE_SETUP
2537 #line 370 "lex.l"
2538 { yylval.intval = BRACKLIST; return(T_RANGELISTVAR); }
2539         YY_BREAK
2540 case 223:
2541 YY_RULE_SETUP
2542 #line 371 "lex.l"
2543 { yylval.intval = BARSTLIST; return(T_BARSTLISTVAR); }
2544         YY_BREAK
2545 case 224:
2546 YY_RULE_SETUP
2547 #line 372 "lex.l"
2548 { yylval.intval = PL_ABOVE; return(T_ORDER); }
2549         YY_BREAK
2550 case 225:
2551 YY_RULE_SETUP
2552 #line 373 "lex.l"
2553 { yylval.intval = PL_BELOW; return(T_ORDER); }
2554         YY_BREAK
2555 case 226:
2556 YY_RULE_SETUP
2557 #line 374 "lex.l"
2558 { yylval.intval = PL_BETWEEN; return(T_ORDER); }
2559         YY_BREAK
2560 case 227:
2561 YY_RULE_SETUP
2562 #line 375 "lex.l"
2563 return(T_OTHERTEXT);
2564         YY_BREAK
2565 case 228:
2566 YY_RULE_SETUP
2567 #line 376 "lex.l"
2568 { yylval.intval = SHARPS; return(T_KEY); }
2569         YY_BREAK
2570 case 229:
2571 YY_RULE_SETUP
2572 #line 377 "lex.l"
2573 { yylval.intval = TIME; return(T_TIME); }
2574         YY_BREAK
2575 case 230:
2576 YY_RULE_SETUP
2577 #line 378 "lex.l"
2578 { yylval.intval = BEAMSTLIST; return(T_RATNUMLISTVAR); }
2579         YY_BREAK
2580 case 231:
2581 YY_RULE_SETUP
2582 #line 379 "lex.l"
2583 { yylval.intval = VISIBLE; return(T_VISVAR); }
2584         YY_BREAK
2585 case 232:
2586 YY_RULE_SETUP
2587 #line 380 "lex.l"
2588 { return(T_WHEREUSED); }
2589         YY_BREAK
2590 case 233:
2591 YY_RULE_SETUP
2592 #line 381 "lex.l"
2593 { yylval.intval = MEASNUM; return(T_YESNOVAR); }
2594         YY_BREAK
2595 case 234:
2596 YY_RULE_SETUP
2597 #line 382 "lex.l"
2598 { yylval.intval = CANCELKEY; return(T_YESNOVAR); }
2599         YY_BREAK
2600 case 235:
2601 YY_RULE_SETUP
2602 #line 383 "lex.l"
2603 { yylval.intval = LABEL; return(T_STRVAR); }
2604         YY_BREAK
2605 case 236:
2606 YY_RULE_SETUP
2607 #line 384 "lex.l"
2608 { yylval.intval = LABEL2; return(T_STRVAR); }
2609         YY_BREAK
2610 case 237:
2611 YY_RULE_SETUP
2612 #line 385 "lex.l"
2613 { yylval.intval = NOTEHEADS; return(T_STRVAR); }
2614         YY_BREAK
2615 case 238:
2616 YY_RULE_SETUP
2617 #line 386 "lex.l"
2618 { yylval.intval = FONT; return(T_FONTVAR); }
2619         YY_BREAK
2620 case 239:
2621 YY_RULE_SETUP
2622 #line 387 "lex.l"
2623 { yylval.intval = FONTFAMILY; return(T_FAMILY); }
2624         YY_BREAK
2625 case 240:
2626 YY_RULE_SETUP
2627 #line 388 "lex.l"
2628 { yylval.intval = LYRICSFONT; return(T_FONTVAR); }
2629         YY_BREAK
2630 case 241:
2631 YY_RULE_SETUP
2632 #line 389 "lex.l"
2633 { yylval.intval = LYRICSFAMILY; return(T_FAMILY); }
2634         YY_BREAK
2635 case 242:
2636 YY_RULE_SETUP
2637 #line 390 "lex.l"
2638 { yylval.intval = MEASNUMSIZE; return(T_NUMVAR); }
2639         YY_BREAK
2640 case 243:
2641 YY_RULE_SETUP
2642 #line 391 "lex.l"
2643 { yylval.intval = MEASNUMFONT; return(T_FONTVAR); }
2644         YY_BREAK
2645 case 244:
2646 YY_RULE_SETUP
2647 #line 392 "lex.l"
2648 { yylval.intval = MEASNUMFAMILY; return(T_FAMILY); }
2649         YY_BREAK
2650 case 245:
2651 YY_RULE_SETUP
2652 #line 393 "lex.l"
2653 { yylval.intval = CLEF; return(T_CLEFVAR); }
2654         YY_BREAK
2655 case 246:
2656 YY_RULE_SETUP
2657 #line 394 "lex.l"
2658 { return(T_UNSET); }
2659         YY_BREAK
2660 case 247:
2661 YY_RULE_SETUP
2662 #line 396 "lex.l"
2663 { yylval.intval = TREBLE_8A; return(T_CLEF); }
2664         YY_BREAK
2665 case 248:
2666 YY_RULE_SETUP
2667 #line 397 "lex.l"
2668 { yylval.intval = TREBLE; return(T_CLEF); }
2669         YY_BREAK
2670 case 249:
2671 YY_RULE_SETUP
2672 #line 398 "lex.l"
2673 { yylval.intval = TREBLE_8; return(T_CLEF); }
2674         YY_BREAK
2675 case 250:
2676 YY_RULE_SETUP
2677 #line 399 "lex.l"
2678 { yylval.intval = FRENCHVIOLIN; return(T_CLEF); }
2679         YY_BREAK
2680 case 251:
2681 YY_RULE_SETUP
2682 #line 400 "lex.l"
2683 { yylval.intval = SOPRANO; return(T_CLEF); }
2684         YY_BREAK
2685 case 252:
2686 YY_RULE_SETUP
2687 #line 401 "lex.l"
2688 { yylval.intval = MEZZOSOPRANO; return(T_CLEF); }
2689         YY_BREAK
2690 case 253:
2691 YY_RULE_SETUP
2692 #line 402 "lex.l"
2693 { yylval.intval = ALTO; return(T_CLEF); }
2694         YY_BREAK
2695 case 254:
2696 YY_RULE_SETUP
2697 #line 403 "lex.l"
2698 { yylval.intval = TENOR; return(T_CLEF); }
2699         YY_BREAK
2700 case 255:
2701 YY_RULE_SETUP
2702 #line 404 "lex.l"
2703 { yylval.intval = BARITONE; return(T_CLEF); }
2704         YY_BREAK
2705 case 256:
2706 YY_RULE_SETUP
2707 #line 405 "lex.l"
2708 { yylval.intval = BASS; return(T_CLEF); }
2709         YY_BREAK
2710 case 257:
2711 YY_RULE_SETUP
2712 #line 406 "lex.l"
2713 { return(T_DRUM); }
2714         YY_BREAK
2715 case 258:
2716 YY_RULE_SETUP
2717 #line 408 "lex.l"
2718 return(T_R_ANGLE);
2719         YY_BREAK
2720 case 259:
2721 YY_RULE_SETUP
2722 #line 409 "lex.l"
2723 { yylval.intval = L_NORMAL; return(T_L_ANGLE); }
2724         YY_BREAK
2725 case 260:
2726 YY_RULE_SETUP
2727 #line 410 "lex.l"
2728 { return(T_L_DBLANGLE); }
2729         YY_BREAK
2730 case 261:
2731 YY_RULE_SETUP
2732 #line 411 "lex.l"
2733 { return(T_R_DBLANGLE); }
2734         YY_BREAK
2735 case 262:
2736 YY_RULE_SETUP
2737 #line 412 "lex.l"
2738 { yylval.intval = L_DOTTED; return(T_L_ANGLE); }
2739         YY_BREAK
2740 case 263:
2741 YY_RULE_SETUP
2742 #line 413 "lex.l"
2743 { yylval.intval = L_DASHED; return(T_L_ANGLE); }
2744         YY_BREAK
2745 case 264:
2746 YY_RULE_SETUP
2747 #line 414 "lex.l"
2748 { yylval.intval = IN_DOWNWARD; return(T_NOWHERE_SLIDE); }
2749         YY_BREAK
2750 case 265:
2751 YY_RULE_SETUP
2752 #line 415 "lex.l"
2753 { yylval.intval = IN_UPWARD; return(T_NOWHERE_SLIDE); }
2754         YY_BREAK
2755 case 266:
2756 YY_RULE_SETUP
2757 #line 416 "lex.l"
2758 { yylval.intval = OUT_UPWARD; return(T_NOWHERE_SLIDE); }
2759         YY_BREAK
2760 case 267:
2761 YY_RULE_SETUP
2762 #line 417 "lex.l"
2763 { yylval.intval = OUT_DOWNWARD; return(T_NOWHERE_SLIDE); }
2764         YY_BREAK
2765 case 268:
2766 YY_RULE_SETUP
2767 #line 419 "lex.l"
2768 return(T_PEDAL);
2769         YY_BREAK
2770 case 269:
2771 YY_RULE_SETUP
2772 #line 420 "lex.l"
2773 return(T_MUSSYM);
2774         YY_BREAK
2775 case 270:
2776 YY_RULE_SETUP
2777 #line 421 "lex.l"
2778 { yylval.intval = TM_CHORD; return(T_MODIFIER); }
2779         YY_BREAK
2780 case 271:
2781 YY_RULE_SETUP
2782 #line 422 "lex.l"
2783 { yylval.intval = TM_ANALYSIS; return(T_MODIFIER); }
2784         YY_BREAK
2785 case 272:
2786 YY_RULE_SETUP
2787 #line 423 "lex.l"
2788 { yylval.intval = TM_FIGBASS; return(T_MODIFIER); }
2789         YY_BREAK
2790 case 273:
2791 YY_RULE_SETUP
2792 #line 424 "lex.l"
2793 { yylval.intval = TM_DYN; return(T_MODIFIER); }
2794         YY_BREAK
2795 case 274:
2796 YY_RULE_SETUP
2797 #line 425 "lex.l"
2798 return(T_PHRASE);
2799         YY_BREAK
2800 case 275:
2801 YY_RULE_SETUP
2802 #line 426 "lex.l"
2803 return(T_TIL);
2804         YY_BREAK
2805 case 276:
2806 YY_RULE_SETUP
2807 #line 427 "lex.l"
2808 return(T_OCTAVE);
2809         YY_BREAK
2810 case 277:
2811 YY_RULE_SETUP
2812 #line 428 "lex.l"
2813 return(T_ROLL);
2814         YY_BREAK
2815 case 278:
2816 YY_RULE_SETUP
2817 #line 429 "lex.l"
2818 return(T_MIDI);
2819         YY_BREAK
2820 case 279:
2821 YY_RULE_SETUP
2822 #line 431 "lex.l"
2823 return(T_STAR);
2824         YY_BREAK
2825 case 280:
2826 YY_RULE_SETUP
2827 #line 433 "lex.l"
2828 to_eol();
2829         YY_BREAK
2830 case 281:
2831 YY_RULE_SETUP
2832 #line 435 "lex.l"
2833 {
2834                                 If_length = 0;
2835                                 If_errs = 0;
2836                                 BEGIN IF_CLAUSE;
2837                         }
2838         YY_BREAK
2839 case 282:
2840 YY_RULE_SETUP
2841 #line 440 "lex.l"
2842 {
2843                                 /* End of 'if' clause'. Set back to the
2844                                  * normal lexer. Call the mini-paser on
2845                                  * the compressed form of the clause we
2846                                  * have just gotten
2847                                  */
2848                                 BEGIN 0;
2849                                 set_ifclause_buffer(Ifclause_buff, If_length);
2850                                 if (ifparse() == YES) {
2851                                         If_count++;
2852                                 }
2853                                 else {
2854                                         /* skip ifdef-ed part */
2855                                         if (skip2else() == YES) {
2856                                                 /* found an else */
2857                                                 If_count++;
2858                                         }
2859                                         /* if found an endif instead,
2860                                          * we just continue */
2861                                 }
2862                         }
2863         YY_BREAK
2864 case 283:
2865 YY_RULE_SETUP
2866 #line 461 "lex.l"
2867 { add_ifclause('a'); }
2868         YY_BREAK
2869 case 284:
2870 YY_RULE_SETUP
2871 #line 462 "lex.l"
2872 { add_ifclause('o'); }
2873         YY_BREAK
2874 case 285:
2875 YY_RULE_SETUP
2876 #line 463 "lex.l"
2877 { add_ifclause(yytext[0]); }
2878         YY_BREAK
2879 case 286:
2880 YY_RULE_SETUP
2881 #line 464 "lex.l"
2882 { add_ifclause('l'); }
2883         YY_BREAK
2884 case 287:
2885 YY_RULE_SETUP
2886 #line 465 "lex.l"
2887 { add_ifclause('r'); }
2888         YY_BREAK
2889 case 288:
2890 YY_RULE_SETUP
2891 #line 466 "lex.l"
2892 { add_ifclause('L'); }
2893         YY_BREAK
2894 case 289:
2895 YY_RULE_SETUP
2896 #line 467 "lex.l"
2897 { add_ifclause('G'); }
2898         YY_BREAK
2899 case 290:
2900 YY_RULE_SETUP
2901 #line 468 "lex.l"
2902 { add_ifclause('E'); }
2903         YY_BREAK
2904 case 291:
2905 YY_RULE_SETUP
2906 #line 469 "lex.l"
2907 { add_ifclause('N'); }
2908         YY_BREAK
2909 case 292:
2910 #line 471 "lex.l"
2911 case 293:
2912 YY_RULE_SETUP
2913 #line 471 "lex.l"
2914 { addnumstr_ifclause(yytext); }
2915         YY_BREAK
2916 case 294:
2917 YY_RULE_SETUP
2918 #line 472 "lex.l"
2919 {
2920                                 char * macname;
2921                                 int parens;
2922                                 int m;
2923
2924                                 for (parens = m = 0; m < yyleng; m++) {
2925                                         if (yytext[m] == '(') {
2926                                                 parens++;
2927                                         } else if (yytext[m] == ')') {
2928                                                 parens--;
2929                                         }
2930                                 }
2931                                 if (parens != 0) {
2932                                         yyerror("unmatched parentheses around target of 'defined'");
2933                                 }
2934                                 macname = yytext + 7 + strspn(yytext + 7, "( \t\n");
2935                                 strtok(macname, " \t\n)");
2936                                 add_ifclause(is_defined(macname, YES) ? 'T' : 'F');
2937                         }
2938         YY_BREAK
2939 case 295:
2940 YY_RULE_SETUP
2941 #line 492 "lex.l"
2942 {
2943                                         if (is_defined(yytext, YES) != 0) {
2944                                                 call_macro(yytext);
2945                                         }
2946                                         else {
2947                                                 addnumstr_ifclause("0");
2948                                         }
2949                                 }
2950         YY_BREAK
2951 case 296:
2952 YY_RULE_SETUP
2953 #line 500 "lex.l"
2954 ;
2955         YY_BREAK
2956 case 297:
2957 YY_RULE_SETUP
2958 #line 501 "lex.l"
2959 {
2960                                 yyerror("Missing 'then' for 'if' clause");
2961                                 BEGIN 0;
2962                         }
2963         YY_BREAK
2964 case 298:
2965 YY_RULE_SETUP
2966 #line 505 "lex.l"
2967 {
2968                                 bad_input("'if' clause");
2969                                 /* User forgetting or misspelling 'then' can
2970                                  * quickly cause hundreds of errors,
2971                                  * so bail out if we suspect that.
2972                                  * The actual number of errors to bail out on
2973                                  * is arbitrary. */
2974                                 if (++If_errs > 20) {
2975                                         ufatal("Too many errors in 'if' clause. Maybe missing 'then'?");
2976                                 }
2977                         }
2978         YY_BREAK
2979 case 299:
2980 YY_RULE_SETUP
2981 #line 517 "lex.l"
2982 define_macro(yytext + 7);
2983         YY_BREAK
2984 case 300:
2985 YY_RULE_SETUP
2986 #line 519 "lex.l"
2987 undef_macro(yytext + 6);
2988         YY_BREAK
2989 case 301:
2990 YY_RULE_SETUP
2991 #line 521 "lex.l"
2992 {
2993                                         int result;
2994
2995                                         /* do ifdef or ifndef as appropriate */
2996                                         if (yytext[2] == 'n') {
2997                                                 result = ! is_defined(yytext + 7
2998                                                         + strspn(yytext + 7, " \t"), NO);
2999                                         }
3000                                         else {
3001                                                 result = is_defined(yytext + 6
3002                                                         + strspn(yytext + 6, " \t"), NO);
3003                                         }
3004
3005                                         if (result) {
3006                                                 /* do stuff till else or endif */
3007                                                 If_count++;
3008                                         }
3009                                         else {
3010                                                 /* skip ifdef-ed part */
3011                                                 if (skip2else() == YES) {
3012                                                         /* found an else */
3013                                                         If_count++;
3014                                                 }
3015                                                 /* if found an endif instead,
3016                                                  * we just continue */
3017                                         }
3018                                 }
3019         YY_BREAK
3020 case 302:
3021 YY_RULE_SETUP
3022 #line 549 "lex.l"
3023 {
3024                                         if (If_count < 1) {
3025                                                 yyerror("else without ifdef");
3026                                         }
3027                                         else {
3028                                                 If_count--;
3029                                                 if (skip2else() == YES) {
3030                                                         yyerror("else without ifdef");
3031                                                 }
3032                                         }
3033                                 }
3034         YY_BREAK
3035 case 303:
3036 YY_RULE_SETUP
3037 #line 561 "lex.l"
3038 {
3039                                         if (If_count < 1) {
3040                                                 yyerror("endif without ifdef");
3041                                         }
3042                                         else {
3043                                                 If_count--;
3044                                         }
3045                                 }
3046         YY_BREAK
3047 case 304:
3048 YY_RULE_SETUP
3049 #line 570 "lex.l"
3050 call_macro(yytext);
3051         YY_BREAK
3052 case 305:
3053 YY_RULE_SETUP
3054 #line 571 "lex.l"
3055 {
3056                                 if (isspace(yytext[1]) ||
3057                                                 isspace(yytext[yyleng-2])) {
3058                                         yyerror("spaces not allowed inside ` ` marks");
3059                                 }
3060                                 else {
3061                                         /* We only need the leading ` to tell
3062                                          * it is a quoted macro parm,
3063                                          * and it's easier to deal with later
3064                                          * if there is no trailing `
3065                                          * so strip off the trailing. */
3066                                         yytext[yyleng - 1] = '\0';
3067                                         call_macro(yytext);
3068                                 }
3069                         }
3070         YY_BREAK
3071 case 306:
3072 YY_RULE_SETUP
3073 #line 587 "lex.l"
3074 { yylval.intval = strlen(yytext); return(T_TICKS); }
3075         YY_BREAK
3076 case 307:
3077 YY_RULE_SETUP
3078 #line 589 "lex.l"
3079 {
3080                         /* ignore backslashed newlines;
3081                          * allow white space after backslash */
3082                         ignore();
3083                 }
3084         YY_BREAK
3085 case 308:
3086 YY_RULE_SETUP
3087 #line 595 "lex.l"
3088 {
3089                                 /* in case we get control-Z from DOS */
3090                                 ignore();
3091                         }
3092         YY_BREAK
3093 case 309:
3094 YY_RULE_SETUP
3095 #line 600 "lex.l"
3096 {
3097                                 /* ignore extra white space */
3098                                 ignore();
3099                         }
3100         YY_BREAK
3101 case 310:
3102 YY_RULE_SETUP
3103 #line 604 "lex.l"
3104 {
3105                         bad_input("input");
3106                 }
3107         YY_BREAK
3108 case YY_STATE_EOF(INITIAL):
3109 case YY_STATE_EOF(IF_CLAUSE):
3110 case YY_STATE_EOF(STRING):
3111 #line 608 "lex.l"
3112 {
3113                         /* In case user used an editor or other tool to
3114                          * create the input file which may leave the final
3115                          * line without a newline, add a newline to the
3116                          * input. If there was already a newline, an extra
3117                          * one should never hurt. Adding it can prevent
3118                          * cryptic message about error at token '' */
3119                         if (Eof_newline == 0) {
3120                                 Eof_newline = yy_scan_string("\n");
3121                         }
3122                         else {
3123                                 yy_delete_buffer(Eof_newline);
3124                                 return(0);
3125                         }
3126                 }
3127         YY_BREAK
3128 case 311:
3129 YY_RULE_SETUP
3130 #line 625 "lex.l"
3131 ECHO;
3132         YY_BREAK
3133
3134         case YY_END_OF_BUFFER:
3135                 {
3136                 /* Amount of text matched not including the EOB char. */
3137                 int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
3138
3139                 /* Undo the effects of YY_DO_BEFORE_ACTION. */
3140                 *yy_cp = yy_hold_char;
3141                 YY_RESTORE_YY_MORE_OFFSET
3142
3143                 if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
3144                         {
3145                         /* We're scanning a new file or input source.  It's
3146                          * possible that this happened because the user
3147                          * just pointed yyin at a new source and called
3148                          * yylex().  If so, then we have to assure
3149                          * consistency between yy_current_buffer and our
3150                          * globals.  Here is the right place to do so, because
3151                          * this is the first action (other than possibly a
3152                          * back-up) that will match for the new input source.
3153                          */
3154                         yy_n_chars = yy_current_buffer->yy_n_chars;
3155                         yy_current_buffer->yy_input_file = yyin;
3156                         yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
3157                         }
3158
3159                 /* Note that here we test for yy_c_buf_p "<=" to the position
3160                  * of the first EOB in the buffer, since yy_c_buf_p will
3161                  * already have been incremented past the NUL character
3162                  * (since all states make transitions on EOB to the
3163                  * end-of-buffer state).  Contrast this with the test
3164                  * in input().
3165                  */
3166                 if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
3167                         { /* This was really a NUL. */
3168                         yy_state_type yy_next_state;
3169
3170                         yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
3171
3172                         yy_current_state = yy_get_previous_state();
3173
3174                         /* Okay, we're now positioned to make the NUL
3175                          * transition.  We couldn't have
3176                          * yy_get_previous_state() go ahead and do it
3177                          * for us because it doesn't know how to deal
3178                          * with the possibility of jamming (and we don't
3179                          * want to build jamming into it because then it
3180                          * will run more slowly).
3181                          */
3182
3183                         yy_next_state = yy_try_NUL_trans( yy_current_state );
3184
3185                         yy_bp = yytext_ptr + YY_MORE_ADJ;
3186
3187                         if ( yy_next_state )
3188                                 {
3189                                 /* Consume the NUL. */
3190                                 yy_cp = ++yy_c_buf_p;
3191                                 yy_current_state = yy_next_state;
3192                                 goto yy_match;
3193                                 }
3194
3195                         else
3196                                 {
3197                                 yy_cp = yy_c_buf_p;
3198                                 goto yy_find_action;
3199                                 }
3200                         }
3201
3202                 else switch ( yy_get_next_buffer() )
3203                         {
3204                         case EOB_ACT_END_OF_FILE:
3205                                 {
3206                                 yy_did_buffer_switch_on_eof = 0;
3207
3208                                 if ( yywrap() )
3209                                         {
3210                                         /* Note: because we've taken care in
3211                                          * yy_get_next_buffer() to have set up
3212                                          * yytext, we can now set up
3213                                          * yy_c_buf_p so that if some total
3214                                          * hoser (like flex itself) wants to
3215                                          * call the scanner after we return the
3216                                          * YY_NULL, it'll still work - another
3217                                          * YY_NULL will get returned.
3218                                          */
3219                                         yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
3220
3221                                         yy_act = YY_STATE_EOF(YY_START);
3222                                         goto do_action;
3223                                         }
3224
3225                                 else
3226                                         {
3227                                         if ( ! yy_did_buffer_switch_on_eof )
3228                                                 YY_NEW_FILE;
3229                                         }
3230                                 break;
3231                                 }
3232
3233                         case EOB_ACT_CONTINUE_SCAN:
3234                                 yy_c_buf_p =
3235                                         yytext_ptr + yy_amount_of_matched_text;
3236
3237                                 yy_current_state = yy_get_previous_state();
3238
3239                                 yy_cp = yy_c_buf_p;
3240                                 yy_bp = yytext_ptr + YY_MORE_ADJ;
3241                                 goto yy_match;
3242
3243                         case EOB_ACT_LAST_MATCH:
3244                                 yy_c_buf_p =
3245                                 &yy_current_buffer->yy_ch_buf[yy_n_chars];
3246
3247                                 yy_current_state = yy_get_previous_state();
3248
3249                                 yy_cp = yy_c_buf_p;
3250                                 yy_bp = yytext_ptr + YY_MORE_ADJ;
3251                                 goto yy_find_action;
3252                         }
3253                 break;
3254                 }
3255
3256         default:
3257                 YY_FATAL_ERROR(
3258                         "fatal flex scanner internal error--no action found" );
3259         } /* end of action switch */
3260                 } /* end of scanning one token */
3261         } /* end of yylex */
3262
3263
3264 /* yy_get_next_buffer - try to read in a new buffer
3265  *
3266  * Returns a code representing an action:
3267  *      EOB_ACT_LAST_MATCH -
3268  *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
3269  *      EOB_ACT_END_OF_FILE - end of file
3270  */
3271
3272 static int yy_get_next_buffer()
3273         {
3274         register char *dest = yy_current_buffer->yy_ch_buf;
3275         register char *source = yytext_ptr;
3276         register int number_to_move, i;
3277         int ret_val;
3278
3279         if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
3280                 YY_FATAL_ERROR(
3281                 "fatal flex scanner internal error--end of buffer missed" );
3282
3283         if ( yy_current_buffer->yy_fill_buffer == 0 )
3284                 { /* Don't try to fill the buffer, so this is an EOF. */
3285                 if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
3286                         {
3287                         /* We matched a single character, the EOB, so
3288                          * treat this as a final EOF.
3289                          */
3290                         return EOB_ACT_END_OF_FILE;
3291                         }
3292
3293                 else
3294                         {
3295                         /* We matched some text prior to the EOB, first
3296                          * process it.
3297                          */
3298                         return EOB_ACT_LAST_MATCH;
3299                         }
3300                 }
3301
3302         /* Try to read more data. */
3303
3304         /* First move last chars to start of buffer. */
3305         number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
3306
3307         for ( i = 0; i < number_to_move; ++i )
3308                 *(dest++) = *(source++);
3309
3310         if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
3311                 /* don't do the read, it's not guaranteed to return an EOF,
3312                  * just force an EOF
3313                  */
3314                 yy_current_buffer->yy_n_chars = yy_n_chars = 0;
3315
3316         else
3317                 {
3318                 int num_to_read =
3319                         yy_current_buffer->yy_buf_size - number_to_move - 1;
3320
3321                 while ( num_to_read <= 0 )
3322                         { /* Not enough room in the buffer - grow it. */
3323 #ifdef YY_USES_REJECT
3324                         YY_FATAL_ERROR(
3325 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
3326 #else
3327
3328                         /* just a shorter name for the current buffer */
3329                         YY_BUFFER_STATE b = yy_current_buffer;
3330
3331                         int yy_c_buf_p_offset =
3332                                 (int) (yy_c_buf_p - b->yy_ch_buf);
3333
3334                         if ( b->yy_is_our_buffer )
3335                                 {
3336                                 int new_size = b->yy_buf_size * 2;
3337
3338                                 if ( new_size <= 0 )
3339                                         b->yy_buf_size += b->yy_buf_size / 8;
3340                                 else
3341                                         b->yy_buf_size *= 2;
3342
3343                                 b->yy_ch_buf = (char *)
3344                                         /* Include room in for 2 EOB chars. */
3345                                         yy_flex_realloc( (void *) b->yy_ch_buf,
3346                                                          b->yy_buf_size + 2 );
3347                                 }
3348                         else
3349                                 /* Can't grow it, we don't own it. */
3350                                 b->yy_ch_buf = 0;
3351
3352                         if ( ! b->yy_ch_buf )
3353                                 YY_FATAL_ERROR(
3354                                 "fatal error - scanner input buffer overflow" );
3355
3356                         yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
3357
3358                         num_to_read = yy_current_buffer->yy_buf_size -
3359                                                 number_to_move - 1;
3360 #endif
3361                         }
3362
3363                 if ( num_to_read > YY_READ_BUF_SIZE )
3364                         num_to_read = YY_READ_BUF_SIZE;
3365
3366                 /* Read in more data. */
3367                 YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
3368                         yy_n_chars, num_to_read );
3369
3370                 yy_current_buffer->yy_n_chars = yy_n_chars;
3371                 }
3372
3373         if ( yy_n_chars == 0 )
3374                 {
3375                 if ( number_to_move == YY_MORE_ADJ )
3376                         {
3377                         ret_val = EOB_ACT_END_OF_FILE;
3378                         yyrestart( yyin );
3379                         }
3380
3381                 else
3382                         {
3383                         ret_val = EOB_ACT_LAST_MATCH;
3384                         yy_current_buffer->yy_buffer_status =
3385                                 YY_BUFFER_EOF_PENDING;
3386                         }
3387                 }
3388
3389         else
3390                 ret_val = EOB_ACT_CONTINUE_SCAN;
3391
3392         yy_n_chars += number_to_move;
3393         yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
3394         yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
3395
3396         yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
3397
3398         return ret_val;
3399         }
3400
3401
3402 /* yy_get_previous_state - get the state just before the EOB char was reached */
3403
3404 static yy_state_type yy_get_previous_state()
3405         {
3406         register yy_state_type yy_current_state;
3407         register char *yy_cp;
3408
3409         yy_current_state = yy_start;
3410
3411         for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
3412                 {
3413                 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
3414                 if ( yy_accept[yy_current_state] )
3415                         {
3416                         yy_last_accepting_state = yy_current_state;
3417                         yy_last_accepting_cpos = yy_cp;
3418                         }
3419                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3420                         {
3421                         yy_current_state = (int) yy_def[yy_current_state];
3422                         if ( yy_current_state >= 1176 )
3423                                 yy_c = yy_meta[(unsigned int) yy_c];
3424                         }
3425                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3426                 }
3427
3428         return yy_current_state;
3429         }
3430
3431
3432 /* yy_try_NUL_trans - try to make a transition on the NUL character
3433  *
3434  * synopsis
3435  *      next_state = yy_try_NUL_trans( current_state );
3436  */
3437
3438 #ifdef YY_USE_PROTOS
3439 static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
3440 #else
3441 static yy_state_type yy_try_NUL_trans( yy_current_state )
3442 yy_state_type yy_current_state;
3443 #endif
3444         {
3445         register int yy_is_jam;
3446         register char *yy_cp = yy_c_buf_p;
3447
3448         register YY_CHAR yy_c = 1;
3449         if ( yy_accept[yy_current_state] )
3450                 {
3451                 yy_last_accepting_state = yy_current_state;
3452                 yy_last_accepting_cpos = yy_cp;
3453                 }
3454         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3455                 {
3456                 yy_current_state = (int) yy_def[yy_current_state];
3457                 if ( yy_current_state >= 1176 )
3458                         yy_c = yy_meta[(unsigned int) yy_c];
3459                 }
3460         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3461         yy_is_jam = (yy_current_state == 1175);
3462
3463         return yy_is_jam ? 0 : yy_current_state;
3464         }
3465
3466
3467 #ifndef YY_NO_UNPUT
3468 #ifdef YY_USE_PROTOS
3469 static void yyunput( int c, register char *yy_bp )
3470 #else
3471 static void yyunput( c, yy_bp )
3472 int c;
3473 register char *yy_bp;
3474 #endif
3475         {
3476         register char *yy_cp = yy_c_buf_p;
3477
3478         /* undo effects of setting up yytext */
3479         *yy_cp = yy_hold_char;
3480
3481         if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
3482                 { /* need to shift things up to make room */
3483                 /* +2 for EOB chars. */
3484                 register int number_to_move = yy_n_chars + 2;
3485                 register char *dest = &yy_current_buffer->yy_ch_buf[
3486                                         yy_current_buffer->yy_buf_size + 2];
3487                 register char *source =
3488                                 &yy_current_buffer->yy_ch_buf[number_to_move];
3489
3490                 while ( source > yy_current_buffer->yy_ch_buf )
3491                         *--dest = *--source;
3492
3493                 yy_cp += (int) (dest - source);
3494                 yy_bp += (int) (dest - source);
3495                 yy_current_buffer->yy_n_chars =
3496                         yy_n_chars = yy_current_buffer->yy_buf_size;
3497
3498                 if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
3499                         YY_FATAL_ERROR( "flex scanner push-back overflow" );
3500                 }
3501
3502         *--yy_cp = (char) c;
3503
3504
3505         yytext_ptr = yy_bp;
3506         yy_hold_char = *yy_cp;
3507         yy_c_buf_p = yy_cp;
3508         }
3509 #endif  /* ifndef YY_NO_UNPUT */
3510
3511
3512 #ifdef __cplusplus
3513 static int yyinput()
3514 #else
3515 static int input()
3516 #endif
3517         {
3518         int c;
3519
3520         *yy_c_buf_p = yy_hold_char;
3521
3522         if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
3523                 {
3524                 /* yy_c_buf_p now points to the character we want to return.
3525                  * If this occurs *before* the EOB characters, then it's a
3526                  * valid NUL; if not, then we've hit the end of the buffer.
3527                  */
3528                 if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
3529                         /* This was really a NUL. */
3530                         *yy_c_buf_p = '\0';
3531
3532                 else
3533                         { /* need more input */
3534                         int offset = yy_c_buf_p - yytext_ptr;
3535                         ++yy_c_buf_p;
3536
3537                         switch ( yy_get_next_buffer() )
3538                                 {
3539                                 case EOB_ACT_LAST_MATCH:
3540                                         /* This happens because yy_g_n_b()
3541                                          * sees that we've accumulated a
3542                                          * token and flags that we need to
3543                                          * try matching the token before
3544                                          * proceeding.  But for input(),
3545                                          * there's no matching to consider.
3546                                          * So convert the EOB_ACT_LAST_MATCH
3547                                          * to EOB_ACT_END_OF_FILE.
3548                                          */
3549
3550                                         /* Reset buffer status. */
3551                                         yyrestart( yyin );
3552
3553                                         /* fall through */
3554
3555                                 case EOB_ACT_END_OF_FILE:
3556                                         {
3557                                         if ( yywrap() )
3558                                                 return EOF;
3559
3560                                         if ( ! yy_did_buffer_switch_on_eof )
3561                                                 YY_NEW_FILE;
3562 #ifdef __cplusplus
3563                                         return yyinput();
3564 #else
3565                                         return input();
3566 #endif
3567                                         }
3568
3569                                 case EOB_ACT_CONTINUE_SCAN:
3570                                         yy_c_buf_p = yytext_ptr + offset;
3571                                         break;
3572                                 }
3573                         }
3574                 }
3575
3576         c = *(unsigned char *) yy_c_buf_p;      /* cast for 8-bit char's */
3577         *yy_c_buf_p = '\0';     /* preserve yytext */
3578         yy_hold_char = *++yy_c_buf_p;
3579
3580
3581         return c;
3582         }
3583
3584
3585 #ifdef YY_USE_PROTOS
3586 void yyrestart( FILE *input_file )
3587 #else
3588 void yyrestart( input_file )
3589 FILE *input_file;
3590 #endif
3591         {
3592         if ( ! yy_current_buffer )
3593                 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
3594
3595         yy_init_buffer( yy_current_buffer, input_file );
3596         yy_load_buffer_state();
3597         }
3598
3599
3600 #ifdef YY_USE_PROTOS
3601 void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
3602 #else
3603 void yy_switch_to_buffer( new_buffer )
3604 YY_BUFFER_STATE new_buffer;
3605 #endif
3606         {
3607         if ( yy_current_buffer == new_buffer )
3608                 return;
3609
3610         if ( yy_current_buffer )
3611                 {
3612                 /* Flush out information for old buffer. */
3613                 *yy_c_buf_p = yy_hold_char;
3614                 yy_current_buffer->yy_buf_pos = yy_c_buf_p;
3615                 yy_current_buffer->yy_n_chars = yy_n_chars;
3616                 }
3617
3618         yy_current_buffer = new_buffer;
3619         yy_load_buffer_state();
3620
3621         /* We don't actually know whether we did this switch during
3622          * EOF (yywrap()) processing, but the only time this flag
3623          * is looked at is after yywrap() is called, so it's safe
3624          * to go ahead and always set it.
3625          */
3626         yy_did_buffer_switch_on_eof = 1;
3627         }
3628
3629
3630 #ifdef YY_USE_PROTOS
3631 void yy_load_buffer_state( void )
3632 #else
3633 void yy_load_buffer_state()
3634 #endif
3635         {
3636         yy_n_chars = yy_current_buffer->yy_n_chars;
3637         yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
3638         yyin = yy_current_buffer->yy_input_file;
3639         yy_hold_char = *yy_c_buf_p;
3640         }
3641
3642
3643 #ifdef YY_USE_PROTOS
3644 YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
3645 #else
3646 YY_BUFFER_STATE yy_create_buffer( file, size )
3647 FILE *file;
3648 int size;
3649 #endif
3650         {
3651         YY_BUFFER_STATE b;
3652
3653         b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
3654         if ( ! b )
3655                 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3656
3657         b->yy_buf_size = size;
3658
3659         /* yy_ch_buf has to be 2 characters longer than the size given because
3660          * we need to put in 2 end-of-buffer characters.
3661          */
3662         b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
3663         if ( ! b->yy_ch_buf )
3664                 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3665
3666         b->yy_is_our_buffer = 1;
3667
3668         yy_init_buffer( b, file );
3669
3670         return b;
3671         }
3672
3673
3674 #ifdef YY_USE_PROTOS
3675 void yy_delete_buffer( YY_BUFFER_STATE b )
3676 #else
3677 void yy_delete_buffer( b )
3678 YY_BUFFER_STATE b;
3679 #endif
3680         {
3681         if ( ! b )
3682                 return;
3683
3684         if ( b == yy_current_buffer )
3685                 yy_current_buffer = (YY_BUFFER_STATE) 0;
3686
3687         if ( b->yy_is_our_buffer )
3688                 yy_flex_free( (void *) b->yy_ch_buf );
3689
3690         yy_flex_free( (void *) b );
3691         }
3692
3693
3694 #ifndef YY_ALWAYS_INTERACTIVE
3695 #ifndef YY_NEVER_INTERACTIVE
3696 extern int isatty YY_PROTO(( int ));
3697 #endif
3698 #endif
3699
3700 #ifdef YY_USE_PROTOS
3701 void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
3702 #else
3703 void yy_init_buffer( b, file )
3704 YY_BUFFER_STATE b;
3705 FILE *file;
3706 #endif
3707
3708
3709         {
3710         yy_flush_buffer( b );
3711
3712         b->yy_input_file = file;
3713         b->yy_fill_buffer = 1;
3714
3715 #if YY_ALWAYS_INTERACTIVE
3716         b->yy_is_interactive = 1;
3717 #else
3718 #if YY_NEVER_INTERACTIVE
3719         b->yy_is_interactive = 0;
3720 #else
3721         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
3722 #endif
3723 #endif
3724         }
3725
3726
3727 #ifdef YY_USE_PROTOS
3728 void yy_flush_buffer( YY_BUFFER_STATE b )
3729 #else
3730 void yy_flush_buffer( b )
3731 YY_BUFFER_STATE b;
3732 #endif
3733
3734         {
3735         if ( ! b )
3736                 return;
3737
3738         b->yy_n_chars = 0;
3739
3740         /* We always need two end-of-buffer characters.  The first causes
3741          * a transition to the end-of-buffer state.  The second causes
3742          * a jam in that state.
3743          */
3744         b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
3745         b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
3746
3747         b->yy_buf_pos = &b->yy_ch_buf[0];
3748
3749         b->yy_at_bol = 1;
3750         b->yy_buffer_status = YY_BUFFER_NEW;
3751
3752         if ( b == yy_current_buffer )
3753                 yy_load_buffer_state();
3754         }
3755
3756
3757 #ifndef YY_NO_SCAN_BUFFER
3758 #ifdef YY_USE_PROTOS
3759 YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
3760 #else
3761 YY_BUFFER_STATE yy_scan_buffer( base, size )
3762 char *base;
3763 yy_size_t size;
3764 #endif
3765         {
3766         YY_BUFFER_STATE b;
3767
3768         if ( size < 2 ||
3769              base[size-2] != YY_END_OF_BUFFER_CHAR ||
3770              base[size-1] != YY_END_OF_BUFFER_CHAR )
3771                 /* They forgot to leave room for the EOB's. */
3772                 return 0;
3773
3774         b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
3775         if ( ! b )
3776                 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
3777
3778         b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
3779         b->yy_buf_pos = b->yy_ch_buf = base;
3780         b->yy_is_our_buffer = 0;
3781         b->yy_input_file = 0;
3782         b->yy_n_chars = b->yy_buf_size;
3783         b->yy_is_interactive = 0;
3784         b->yy_at_bol = 1;
3785         b->yy_fill_buffer = 0;
3786         b->yy_buffer_status = YY_BUFFER_NEW;
3787
3788         yy_switch_to_buffer( b );
3789
3790         return b;
3791         }
3792 #endif
3793
3794
3795 #ifndef YY_NO_SCAN_STRING
3796 #ifdef YY_USE_PROTOS
3797 YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
3798 #else
3799 YY_BUFFER_STATE yy_scan_string( yy_str )
3800 yyconst char *yy_str;
3801 #endif
3802         {
3803         int len;
3804         for ( len = 0; yy_str[len]; ++len )
3805                 ;
3806
3807         return yy_scan_bytes( yy_str, len );
3808         }
3809 #endif
3810
3811
3812 #ifndef YY_NO_SCAN_BYTES
3813 #ifdef YY_USE_PROTOS
3814 YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
3815 #else
3816 YY_BUFFER_STATE yy_scan_bytes( bytes, len )
3817 yyconst char *bytes;
3818 int len;
3819 #endif
3820         {
3821         YY_BUFFER_STATE b;
3822         char *buf;
3823         yy_size_t n;
3824         int i;
3825
3826         /* Get memory for full buffer, including space for trailing EOB's. */
3827         n = len + 2;
3828         buf = (char *) yy_flex_alloc( n );
3829         if ( ! buf )
3830                 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
3831
3832         for ( i = 0; i < len; ++i )
3833                 buf[i] = bytes[i];
3834
3835         buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
3836
3837         b = yy_scan_buffer( buf, n );
3838         if ( ! b )
3839                 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
3840
3841         /* It's okay to grow etc. this buffer, and we should throw it
3842          * away when we're done.
3843          */
3844         b->yy_is_our_buffer = 1;
3845
3846         return b;
3847         }
3848 #endif
3849
3850
3851 #ifndef YY_NO_PUSH_STATE
3852 #ifdef YY_USE_PROTOS
3853 static void yy_push_state( int new_state )
3854 #else
3855 static void yy_push_state( new_state )
3856 int new_state;
3857 #endif
3858         {
3859         if ( yy_start_stack_ptr >= yy_start_stack_depth )
3860                 {
3861                 yy_size_t new_size;
3862
3863                 yy_start_stack_depth += YY_START_STACK_INCR;
3864                 new_size = yy_start_stack_depth * sizeof( int );
3865
3866                 if ( ! yy_start_stack )
3867                         yy_start_stack = (int *) yy_flex_alloc( new_size );
3868
3869                 else
3870                         yy_start_stack = (int *) yy_flex_realloc(
3871                                         (void *) yy_start_stack, new_size );
3872
3873                 if ( ! yy_start_stack )
3874                         YY_FATAL_ERROR(
3875                         "out of memory expanding start-condition stack" );
3876                 }
3877
3878         yy_start_stack[yy_start_stack_ptr++] = YY_START;
3879
3880         BEGIN(new_state);
3881         }
3882 #endif
3883
3884
3885 #ifndef YY_NO_POP_STATE
3886 static void yy_pop_state()
3887         {
3888         if ( --yy_start_stack_ptr < 0 )
3889                 YY_FATAL_ERROR( "start-condition stack underflow" );
3890
3891         BEGIN(yy_start_stack[yy_start_stack_ptr]);
3892         }
3893 #endif
3894
3895
3896 #ifndef YY_NO_TOP_STATE
3897 static int yy_top_state()
3898         {
3899         return yy_start_stack[yy_start_stack_ptr - 1];
3900         }
3901 #endif
3902
3903 #ifndef YY_EXIT_FAILURE
3904 #define YY_EXIT_FAILURE 2
3905 #endif
3906
3907 #ifdef YY_USE_PROTOS
3908 static void yy_fatal_error( yyconst char msg[] )
3909 #else
3910 static void yy_fatal_error( msg )
3911 char msg[];
3912 #endif
3913         {
3914         (void) fprintf( stderr, "%s\n", msg );
3915         exit( YY_EXIT_FAILURE );
3916         }
3917
3918
3919
3920 /* Redefine yyless() so it works in section 3 code. */
3921
3922 #undef yyless
3923 #define yyless(n) \
3924         do \
3925                 { \
3926                 /* Undo effects of setting up yytext. */ \
3927                 yytext[yyleng] = yy_hold_char; \
3928                 yy_c_buf_p = yytext + n; \
3929                 yy_hold_char = *yy_c_buf_p; \
3930                 *yy_c_buf_p = '\0'; \
3931                 yyleng = n; \
3932                 } \
3933         while ( 0 )
3934
3935
3936 /* Internal utility routines. */
3937
3938 #ifndef yytext_ptr
3939 #ifdef YY_USE_PROTOS
3940 static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
3941 #else
3942 static void yy_flex_strncpy( s1, s2, n )
3943 char *s1;
3944 yyconst char *s2;
3945 int n;
3946 #endif
3947         {
3948         register int i;
3949         for ( i = 0; i < n; ++i )
3950                 s1[i] = s2[i];
3951         }
3952 #endif
3953
3954 #ifdef YY_NEED_STRLEN
3955 #ifdef YY_USE_PROTOS
3956 static int yy_flex_strlen( yyconst char *s )
3957 #else
3958 static int yy_flex_strlen( s )
3959 yyconst char *s;
3960 #endif
3961         {
3962         register int n;
3963         for ( n = 0; s[n]; ++n )
3964                 ;
3965
3966         return n;
3967         }
3968 #endif
3969
3970
3971 #ifdef YY_USE_PROTOS
3972 static void *yy_flex_alloc( yy_size_t size )
3973 #else
3974 static void *yy_flex_alloc( size )
3975 yy_size_t size;
3976 #endif
3977         {
3978         return (void *) malloc( size );
3979         }
3980
3981 #ifdef YY_USE_PROTOS
3982 static void *yy_flex_realloc( void *ptr, yy_size_t size )
3983 #else
3984 static void *yy_flex_realloc( ptr, size )
3985 void *ptr;
3986 yy_size_t size;
3987 #endif
3988         {
3989         /* The cast to (char *) in the following accommodates both
3990          * implementations that use char* generic pointers, and those
3991          * that use void* generic pointers.  It works with the latter
3992          * because both ANSI C and C++ allow castless assignment from
3993          * any pointer type to void*, and deal with argument conversions
3994          * as though doing an assignment.
3995          */
3996         return (void *) realloc( (char *) ptr, size );
3997         }
3998
3999 #ifdef YY_USE_PROTOS
4000 static void yy_flex_free( void *ptr )
4001 #else
4002 static void yy_flex_free( ptr )
4003 void *ptr;
4004 #endif
4005         {
4006         free( ptr );
4007         }
4008
4009 #if YY_MAIN
4010 int main()
4011         {
4012         yylex();
4013         return 0;
4014         }
4015 #endif
4016 #line 625 "lex.l"
4017
4018 \f
4019
4020 /* comments go to end of line. This can be done with a simple
4021  * lex pattern, but when taken with all the other patterns, lex blows
4022  * up because of too many right contexts. So we do this special case
4023  * with this function.
4024  */
4025
4026 static void
4027 to_eol()
4028
4029 {
4030         while ((yytext[yyleng] = input()) != '\n' && yytext[yyleng] != 0 &&
4031                                         yytext[yyleng] != EOF) {
4032                 if (++yyleng >= YYLMAX) {
4033                         l_ufatal(Curr_filename, yylineno, "input line too long");
4034                 }
4035                 if (yytext[yyleng-1] == '\r') {
4036                         /* If the \r is by itself, treat like a newline */
4037                         char c;
4038                         if ((c = input()) == '\n') {
4039                                 yytext[--yyleng] = '\n';
4040                                 break;
4041                         }
4042                         else if (c != 0) {
4043                                 unput(c);
4044                         }
4045                 }
4046         }
4047
4048         if (yytext[yyleng] ==  0 || yytext[yyleng] == EOF) {
4049                 return;
4050         }
4051         else {
4052                 if (yyleng > 0 && yytext[yyleng - 1] == '\\') {
4053                         /* if backslashed newline, replace with real newline
4054                          * and continue */
4055                         yytext[--yyleng] = '\n';
4056                         to_eol();
4057                 }
4058                 /* handle DOS style backslashed \r\n */
4059                 else if (yyleng > 1 && yytext[yyleng - 1] == '\r'
4060                                                 && yytext[yyleng - 2] == '\\') {
4061                         yytext[yyleng - 2] = '\r';
4062                         yytext[--yyleng] = '\n';
4063                         to_eol();
4064                 }
4065
4066                 /* put newline back onto input stream */
4067                 unput('\n');
4068         }
4069
4070         yytext[yyleng] = '\0';
4071
4072         if (Preproc == YES && Ppcomments == YES) {
4073                 printf("%s", yytext);
4074         }
4075 }
4076 \f
4077
4078 /* Save macro text in specified file.
4079  * @ is used to mark end of macro definition.
4080  * Returns YES if there appeared to be any references to
4081  * macro parameters to be quoted.
4082  * (See the comment above the QS_ #defines in macros.c for more details.) */
4083
4084 int
4085 save_macro(file)
4086
4087 FILE *file;     /* put macro text into this file */
4088
4089 {
4090         int c;                          /* character read from macro */
4091         int num_backslashes = 0;
4092         int has_quoted_parameters = NO;
4093
4094
4095         while ((c = input()) != 0 && c != EOF) {
4096                 if (c == '@') {
4097                         /* if had a backslash before it, use real @ */
4098                         if (num_backslashes == 1) {
4099                                 putc(c, file);
4100                                 num_backslashes = 0;
4101                         }
4102                         else {  
4103                                 /* reached end of macro definition */
4104                                 return(has_quoted_parameters);
4105                         }
4106                 }
4107                 else {
4108                         if (c == '\\') {
4109                                 num_backslashes++;
4110                                 if (num_backslashes == 2) {
4111                                         putc(c, file);
4112                                         num_backslashes = 0;
4113                                 }
4114                         }
4115                         else {
4116                                 if (num_backslashes == 1) {
4117                                         putc('\\', file);
4118                                 }
4119                                 putc(c, file);
4120                                 num_backslashes = 0;
4121                                 if (c == '`') {
4122                                         has_quoted_parameters = YES;
4123                                 }
4124                         }
4125                 }
4126         }
4127
4128         yyerror("unterminated macro");
4129         return(has_quoted_parameters);
4130 }
4131 \f
4132
4133 /* collect the parameter names on the definition of a macro with parameters */
4134
4135 void
4136 get_parameters(macname)
4137
4138 char *macname;          /* name of macro being defined */
4139
4140 {
4141         while (get_a_param(macname) == YES) {
4142                 ;
4143         }
4144 }
4145
4146 static int
4147 get_a_param(macname)
4148
4149 char *macname;
4150
4151 {
4152         int c;          /* input character */
4153         int index;      /* into name buffer */
4154
4155
4156         /* skip leading white space */
4157         skipwhite();
4158
4159         /* collect macro-like parameter names (upper case, digits, or
4160          * underscore, starting with upper case), delimited by comma
4161          * and ended by close parenthesis. */
4162         while ((c = input()) != '\0' && c != EOF) {
4163                 if (isupper(c)) {
4164                         yytext[0] = c;
4165                         index = 1;
4166                         while ((c = input()) != '\0' && c != EOF) {
4167                                 if (isupper(c) || isdigit(c) || c == '_') {
4168                                         yytext[index++] = c;
4169                                 }
4170                                 else  {
4171                                         /* found end of parameter name */
4172                                         unput(c);
4173                                         yytext[index] = '\0';
4174                                         add_parameter(macname, yytext);
4175
4176                                         /* skip white space */
4177                                         skipwhite();
4178
4179                                         /* next better be , or ) */
4180                                         if ((c = input()) != ',' && c != ')') {
4181                                                 l_yyerror(Curr_filename, yylineno,
4182                                                         "unexpected character '%c' in parameter list for macro %s",
4183                                                         c, macname);
4184                                                 return(NO);
4185                                         }
4186                                         if (c == ')') {
4187                                                 /* return to input so we can
4188                                                  * read on next call to know
4189                                                  * we are at end of list */
4190                                                 unput(c);
4191                                         }
4192                                         return(YES);
4193                                 }
4194                         }
4195                 }
4196                 else if (c == ')') {
4197                         /* end of parameter list */
4198                         return(NO);
4199                 }
4200                 else {
4201                         l_yyerror(Curr_filename, yylineno,
4202                                 "illegal macro parameter name starting at character '%c'", c);
4203                         return(NO);
4204                 }
4205         }
4206         yyerror("unexpected end-of-file in macro parameter list");
4207         return(NO);
4208 }
4209 \f
4210
4211 /* Read input, skipping any white space. White space is space, tab, return,
4212  * backslashed return, newline, or backslashed newline.
4213  * Backslashed anything else will leave the backslash in the input
4214  * without the thing that followed it.
4215  */
4216
4217  
4218 static void
4219 skipwhite()
4220
4221 {
4222         int c;
4223
4224         while ((c = input()) != '\0' && c != EOF) {
4225                 if (c == ' ' || c == '\t' || c == '\n' || c == '\r') {
4226                         continue;
4227                 }
4228
4229                 if (c == '\\') {
4230                         if ((c = input()) == '\n' || c == '\r' ) {
4231                                 /* backslashed newline/return is white space */
4232                                 continue;
4233                         }
4234                         else {
4235                                 unput('\\');
4236                                 return;
4237                         }
4238                 }
4239                 /* non-space. Stuff back into input and return */
4240                 unput(c);
4241                 return;
4242         }
4243 }
4244
4245 \f
4246
4247 /* collect arguments to a call to a macro with parameters */
4248
4249 int
4250 get_mac_arguments(macname, num_args)
4251
4252 char *macname;          /* name of the macro, to use in error messages */
4253 int num_args;           /* number of arguments expected */
4254
4255 {
4256         int c;          /* input character */
4257         char *argbuff;  /* for storing argument */
4258         int n;          /* number of arguments collected so far */
4259
4260
4261         /* first skip any white space before the opening parenthesis */
4262         skipwhite();
4263
4264         /* next thing better be open parenthesis */
4265         if ((c = input()) != '(') {
4266
4267                 l_yyerror(Curr_filename, yylineno,
4268                         "macro %s has parameters, but has no '(' on call",
4269                         macname);
4270
4271                 /* Trying to parse anything more in this file might be
4272                  * almost hopeless. But we'll try just skipping to end of
4273                  * the line and returning failure and hope for the best. */
4274                 while (((c = input()) != '\0') && (c != EOF) &&
4275                                                 (c != '\n') && (c != '\r')) {
4276                         ;
4277                 }
4278                 return(NO);
4279         }
4280
4281         /* init to no argument collected. Space will be malloc-ed when needed */
4282         argbuff = (char *) 0;
4283         n = 0;
4284
4285         /* Now collect arguments. Read and process input
4286          * one character at a time */
4287         while ((c = input()) != '\0' && c != EOF) {
4288                 switch (c) {
4289                 case '\\':
4290                         /* something that has been escaped with a backslash.
4291                          * Get the next character and do appropriate escape. */
4292                         switch (c = input()) {
4293                         default:
4294                                 /* some unexpected backslashed thing */
4295                                 l_warning(Curr_filename, yylineno,
4296                                         "dubious escape \\%c in argument %d of macro %s",
4297                                         c, n+1, macname);
4298                                 /* fall through to use the literal, to be
4299                                  * sort of consistent with how C handles
4300                                  * such dubious escapes */
4301                                 /*FALLTHRU*/
4302
4303                         case ',':       /* would normally mean end of argument */
4304                         case ')':       /* would normally mean end of argument list */
4305                         case '\\':      /* user wants a real backslash */
4306                                 /* escaped to allow literal, so copy the
4307                                  * character without backslash to buffer */
4308                                 argbuff = add2argbuff(argbuff, c);
4309                                 break;
4310
4311                         case '\n':
4312                                 /* user wanted to put a newline in the input
4313                                  * to make it look better, but doesn't really
4314                                  * want a newline here in the argument text,
4315                                  * so just skip over this character */
4316                                 break;
4317
4318                         case '\r':
4319                                 /* If by itself, treat like newline.
4320                                  * If immediately followed by a newline,
4321                                  * treat the pair like newline.
4322                                  */
4323                                 if ((c = input()) != '\n') {
4324                                         /* Followed by something other than
4325                                          * newline, so push back into input.
4326                                          */
4327                                         if (c != EOF) {
4328                                                 unput(c);
4329                                         }
4330                                 }
4331                                 break;
4332                         case '\0':
4333                                 l_yyerror(Curr_filename, yylineno,
4334                                         "unexpected end of file in macro %s argument %d",
4335                                         macname, n + 1);
4336                                 return(NO);
4337                         }
4338                         break;
4339
4340                 case ',':
4341                         /* This marks the end of an argument.
4342                          * Process this argument, then reset for next one */
4343                         if (++n <= num_args) {
4344                                 set_parm_value(macname, argbuff, n);
4345                         }
4346                         else {
4347                                 /* discard this one. It's extra. But wait
4348                                  * to print error until we find the ),
4349                                  * so if they have lots of extras we only
4350                                  * print one message */
4351                                 if (argbuff != (char *) 0) {
4352                                         FREE(argbuff);
4353                                 }
4354                         }
4355
4356                         /* reset for next argument */
4357                         argbuff = (char *) 0;
4358                         break;
4359
4360                 case ')':
4361                         /* this marks end of arguments. Save the last one
4362                          * collected and signal success */
4363                         if (++n == num_args) {
4364                                 /* good. got exactly the right number of
4365                                  * arguments. Save the last one and
4366                                  * declare victory */
4367                                 set_parm_value(macname, argbuff, n);
4368                                 return(YES);
4369                         }
4370                         else {
4371                                 l_yyerror(Curr_filename, yylineno,
4372                                         "too %s arguments to macro %s (expected %d, got %d)",
4373                                         ((n < num_args) ? "few" : "many"),
4374                                         macname, num_args, n);
4375                         }
4376                         return(NO);
4377
4378                 default:
4379                         /* ordinary character. Save it away */
4380                         argbuff = add2argbuff(argbuff, c);
4381                         break;
4382                 }
4383         }
4384
4385         l_yyerror(Curr_filename, yylineno, "unexpected end of file in call to %s macro",
4386                 macname);
4387         return(NO);
4388 }
4389 \f
4390
4391 /* skip input until find an else or endif. If find else, return YES, if find
4392  * endif or end of file, return NO */
4393 /* It probably would be possible to get lex to do this pattern matching with
4394  * appropriate start conditions, but it seems like too much trouble to figure
4395  * that out. Just need to look for 2 simple patterns, so do simple state
4396  * machine */
4397
4398 typedef enum { STATE_NONE, STATE_E, STATE_EL, STATE_ELS, STATE_EN,
4399                 STATE_END, STATE_ENDI, STATE_I, STATE_IF, STATE_IFD,
4400                 STATE_IFDE } STATE;
4401
4402 static int
4403 skip2else()
4404
4405 {
4406         int c;                          /* char read from input */
4407         STATE state = STATE_NONE;
4408         int escaped;            /* true if got odd number of backslashes */
4409         int saved_ppcomments;   /* saved value of Ppcomments */
4410
4411
4412         /* When skipping stuff in if/else, we don't want anything to come
4413          * out when using -E -C. Since this function can call to_eol(),
4414          * we have to convince it -C isn't on even if it is. */
4415         saved_ppcomments = Ppcomments;
4416         Ppcomments = NO;
4417
4418         /* read characters. Based on current character and state, go into
4419          * new state if appropriate. */
4420         while ((c = input()) != 0 && c != EOF) {
4421
4422                 switch (c) {
4423
4424                 case 'e':
4425                         if (state == STATE_ELS) {
4426                                 YY_FLUSH_BUFFER;
4427                                 Ppcomments = saved_ppcomments;
4428                                 return(YES);
4429                         }
4430                         else if (state == STATE_IFD) {
4431                                 state = STATE_IFDE;
4432                         }
4433                         else {
4434                                 state = STATE_E;
4435                         }
4436                         break;
4437
4438                 case 'l':
4439                         state = (state == STATE_E ? STATE_EL : STATE_NONE);
4440                         break;
4441
4442                 case 's':
4443                         state = (state == STATE_EL ? STATE_ELS : STATE_NONE);
4444                         break;
4445
4446                 case 'n':
4447                         if (state == STATE_E) {
4448                                 state = STATE_EN;
4449                         }
4450                         else if (state == STATE_IF) {
4451                                 /* for ifndef. Treat this like ifdef. There is
4452                                  * a tiny bug here in that user could input
4453                                  * ifnnndef and we would interpret that as
4454                                  * ifndef. However, since if we're in this
4455                                  * function, we are skipping stuff that is
4456                                  * ifdef-ed out, who cares if we miss some
4457                                  * off-the-wall syntax error? */
4458                                 ;
4459                         }
4460                         else {
4461                                 state = STATE_NONE;
4462                         }
4463                         break;
4464
4465                 case 'd':
4466                         if (state == STATE_EN) {
4467                                 state = STATE_END;
4468                         }
4469                         else if (state == STATE_IF) {
4470                                 state = STATE_IFD;
4471                         }
4472                         else {
4473                                 state = STATE_NONE;
4474                         }
4475                         break;
4476
4477                 case 'i':
4478                         state = (state == STATE_END ? STATE_ENDI : STATE_I);
4479                         break;
4480
4481                 case 'f':
4482                         if (state == STATE_ENDI) {
4483                                 YY_FLUSH_BUFFER;
4484                                 Ppcomments = saved_ppcomments;
4485                                 return(NO);
4486                         }
4487                         else if (state == STATE_I) {
4488                                 state = STATE_IF;
4489                         }
4490                         else if (state == STATE_IFDE) {
4491                                 if (skip2else() == YES) {
4492                                         if (skip2else() == YES) {
4493                                                 yyerror("else without ifdef");
4494                                         }
4495                                 }
4496                         }
4497                         else {
4498                                 state = STATE_NONE;
4499                         }
4500                         break;
4501
4502                 case '/':
4503                         if ((c = input()) == '/') {
4504                                 /* Skip past comments, in case they happen to
4505                                  * contain 'else' or 'endif'
4506                                  * that could confuse us. */
4507                                 to_eol();
4508                         }
4509                         else if (c != 0 && c != EOF) {
4510                                 unput(c);
4511                         }
4512                         state = STATE_NONE;
4513                         break;
4514
4515                 case '"':
4516                         /* Skip strings, in case they happen to contain
4517                          * 'else' or 'endif' that could confuse us. */
4518                         escaped = 0;
4519                         while ((c = input()) != 0 && c != EOF) {
4520                                 if (c == '"' && ! escaped) {
4521                                         break;
4522                                 }
4523                                 if (c == '\\') {
4524                                         escaped ^= 1;
4525                                 }
4526                                 else {
4527                                         escaped = 0;
4528                                 }
4529                         }
4530                         state = STATE_NONE;
4531                         break;
4532                 default:
4533                         if (state == STATE_IF) {
4534                                 /* skip to else or endif */
4535                                 if (skip2else() == YES) {
4536                                         /* if was an else, need to continue
4537                                          * to the endif */
4538                                         if (skip2else() == YES) {
4539                                                 yyerror("else without ifdef");
4540                                         }
4541                                 }
4542                         }
4543                         state = STATE_NONE;
4544                         break;
4545                 }
4546         }
4547
4548         /* end of file */
4549         yyerror("unexpected end-of-file: missing endif");
4550         return(NO);
4551 }
4552 \f
4553
4554 /* at the very end, verify all if, ifdef, and ifndef clauses are closed */
4555
4556 void
4557 chk_ifdefs()
4558
4559 {
4560         if (If_count != 0) {
4561                 yyerror("missing endif");
4562         }
4563 }
4564 \f
4565
4566 /* check if there is an odd number of backslashes starting before the final
4567  * double quote. If so, return YES--the last backslash applies to the double
4568  * quote. Otherwise return NO, because the backslash was itself backslashed
4569  * which means user wants to end string with a backslash */
4570
4571 static int
4572 oddbs()
4573
4574 {
4575         int i;
4576         int bscount = 0;        /* count of backslashes */
4577
4578         for (i = yyleng - 2; i >= 0; i--) {
4579                 if (yytext[i] == '\\') {
4580                         bscount++;
4581                 }
4582                 else {
4583                         break;
4584                 }
4585         }
4586         return ((bscount & 1) ? YES: NO);
4587 }
4588 \f
4589
4590 /* Flex has the (documented) limitation that you can't change the value
4591  * of yyleng in the same rule action as you use yymore. So when there is
4592  * an escaped double quote mark inside a string, we can't remove it and
4593  * also use yymore in the same rule. So we collect the whole string,
4594  * including their embedded quote marks and their backslashes,
4595  * then call this function which moves the characters back to get rid of
4596  * the backslashes, and adjusts yyleng appropriately.
4597  */
4598
4599 static void
4600 embedquotes()
4601
4602 {
4603         int i;
4604         int moveback;
4605
4606         if (Escapedquotes < 1) {
4607                 /* No escaped quote found, so nothing to do here */
4608                 return;
4609         }
4610
4611         moveback = 0;
4612         for (i = 1; i < yyleng; i++) {
4613                 /* if there is a quote inside the string,
4614                  * it must have been escaped */
4615                 if (yytext[i] == '"' && yytext[i-1] == '\\' && i < yyleng - 1) {
4616                         moveback++;
4617                 }
4618                 /* If we have come across one or more embedded quotes,
4619                  * move bytes to the left one position for each quote,
4620                  * which gets rid of the backslashes. */
4621                 if (moveback > 0) {
4622                         yytext[i-moveback] = yytext[i];
4623                 }
4624         }
4625         yytext[i-moveback] = '\0';
4626         yyleng -= Escapedquotes;
4627         Escapedquotes = 0;
4628                 
4629 }
4630 \f
4631
4632 /* Mapping of Latin-1 non-ASCII characters to their Mup names. If Mup
4633  * doesn't support the value, or the value is undefined in Latin-1,
4634  * value in this table is 0. */
4635 static char *latin1_to_mup_name[] = {
4636         /* 128 */       0,
4637         /* 129 */       0,
4638         /* 130 */       0,
4639         /* 131 */       0,
4640         /* 132 */       0,
4641         /* 133 */       0,
4642         /* 134 */       0,
4643         /* 135 */       0,
4644         /* 136 */       0,
4645         /* 137 */       0,
4646         /* 138 */       0,
4647         /* 139 */       0,
4648         /* 140 */       0,
4649         /* 141 */       0,
4650         /* 142 */       0,
4651         /* 143 */       0,
4652         /* 144 */       0,
4653         /* 145 */       0,
4654         /* 146 */       0,
4655         /* 147 */       0,
4656         /* 148 */       0,
4657         /* 149 */       0,
4658         /* 150 */       0,
4659         /* 151 */       0,
4660         /* 152 */       0,
4661         /* 153 */       0,
4662         /* 154 */       0,
4663         /* 155 */       0,
4664         /* 156 */       0,
4665         /* 157 */       0,
4666         /* 158 */       0,
4667         /* 159 */       0,
4668         /* 160 */       0,
4669         /* 161 */       "exclamdown",
4670         /* 162 */       0,
4671         /* 163 */       "sterling",
4672         /* 164 */       0,
4673         /* 165 */       "yen",
4674         /* 166 */       0,
4675         /* 167 */       0,
4676         /* 168 */       "dieresis",
4677         /* 169 */       "copyright",
4678         /* 170 */       "ordfeminine",
4679         /* 171 */       "<<",
4680         /* 172 */       0,
4681         /* 173 */       "emdash",
4682         /* 174 */       0,
4683         /* 175 */       "macron",
4684         /* 176 */       "ring",
4685         /* 177 */       0,
4686         /* 178 */       0,
4687         /* 179 */       0,
4688         /* 180 */       "acute",
4689         /* 181 */       0,
4690         /* 182 */       0,
4691         /* 183 */       0,
4692         /* 184 */       "cedilla",
4693         /* 185 */       0,
4694         /* 186 */       0,
4695         /* 187 */       ">>",
4696         /* 188 */       0,
4697         /* 189 */       0,
4698         /* 190 */       0,
4699         /* 191 */       "questiondown",
4700         /* 192 */       "A`",
4701         /* 193 */       "A'",
4702         /* 194 */       "A^",
4703         /* 195 */       "A~",
4704         /* 196 */       "A:",
4705         /* 197 */       "Ao",
4706         /* 198 */       "AE",
4707         /* 199 */       "C,",
4708         /* 200 */       "E`",
4709         /* 201 */       "E'",
4710         /* 202 */       "E^",
4711         /* 203 */       "E:",
4712         /* 204 */       "I`",
4713         /* 205 */       "I'",
4714         /* 206 */       "I^",
4715         /* 207 */       "I:",
4716         /* 208 */       0,
4717         /* 209 */       0,
4718         /* 210 */       "N~",
4719         /* 211 */       "O`",
4720         /* 212 */       "O'",
4721         /* 213 */       "O^",
4722         /* 214 */       "O~",
4723         /* 215 */       "O:",
4724         /* 216 */       "U`",
4725         /* 217 */       "U'",
4726         /* 218 */       "U^",
4727         /* 219 */       "U:",
4728         /* 220 */       0,
4729         /* 221 */       0,
4730         /* 222 */       0,
4731         /* 223 */       0,
4732         /* 224 */       "a`",
4733         /* 225 */       "a'",
4734         /* 226 */       "a^",
4735         /* 227 */       "a~",
4736         /* 228 */       "a:",
4737         /* 229 */       "ao",
4738         /* 230 */       "ae",
4739         /* 231 */       "c,",
4740         /* 232 */       "e`",
4741         /* 233 */       "e'",
4742         /* 234 */       "e^",
4743         /* 235 */       "e:",
4744         /* 236 */       "i`",
4745         /* 237 */       "i'",
4746         /* 238 */       "i^",
4747         /* 239 */       "i:",
4748         /* 240 */       0,
4749         /* 241 */       "n~",
4750         /* 242 */       "o`",
4751         /* 243 */       "o'",
4752         /* 244 */       "o^",
4753         /* 245 */       "o~",
4754         /* 246 */       "o:",
4755         /* 247 */       0,
4756         /* 248 */       "o/",
4757         /* 249 */       "u`",
4758         /* 250 */       "u'",
4759         /* 251 */       "u^",
4760         /* 252 */       "u:",
4761         /* 253 */       0,
4762         /* 254 */       0,
4763         /* 255 */       "y:"
4764 };
4765
4766 /* This function goes through the string currently in yytext, and if it finds
4767  * any non-ASCII characters that can be transformed into the non-ASCII
4768  * characters that Mup supports through the \(....) escape mechanism,
4769  * it replaces them with the appropriate escape strings.
4770  * This functionality probably logically belongs in fix_string(),
4771  * but for historical reasons, that function is not allowed
4772  * to increase the length of a string,
4773  * so it's easier to do this step separately.
4774  */
4775
4776 static void
4777 xpand_non_ascii()
4778 {
4779         int index;                      /* walk through yytext */
4780         int start;                      /* index of first non-ascii */
4781         int value;                      /* value of a character */
4782         char *replacement;              /* Mup's name for the non_ascii */
4783         static char *tmp_buff = 0;      /* for expanded version */
4784         int tmp_index;                  /* index into tmp_buff */
4785
4786         if (Raw_string == YES) {
4787                 /* Collecting a string for something like raw PostScript,
4788                  * that shouldn't be converted. */
4789                 return;
4790         }
4791
4792         /* see if any non-ascii */
4793         for (index = 0; index < yyleng; index++) {
4794                 if (yytext[index] & 0x80) {
4795                         break;
4796                 }
4797         }
4798
4799         if (index == yyleng) {
4800                 /* no non-ascii in current string, so leave it as is */
4801                 return;
4802         }
4803
4804         /* If we don't have a buffer yet, allocate it. If an input file
4805          * has no non-ascii in it at all, we'll never get here, and no
4806          * memory will be wasted on a buffer we don't need. If we do get
4807          * here, chances are there will be lots more non-ascii, so we
4808          * keep the buffer around, rather than constantly doing malloc/free. */
4809         if (tmp_buff == 0) {
4810                 MALLOCA(char, tmp_buff, YYLMAX);
4811         }
4812
4813         /* only need to rewrite the part of the string
4814          * beyond the first non-ascii, so remember where we are now */
4815         start = index;
4816
4817         /* walk through, converting non-ascii to their Mup names */
4818         for (tmp_index = 0; index < yyleng; index++) {
4819
4820                 if (yytext[index] & 0x80) {
4821                         /* Look up replacement. The replacement table
4822                          * only contains entries for 128-255,
4823                          * so adjust the value of the non-ascii character
4824                          * to get the appropriate array offset. */
4825                         value = ((int)(yytext[index])) & 0xff;
4826                         replacement = latin1_to_mup_name[value - 128];
4827
4828                         if (replacement == (char *) 0) {
4829                                 /* Apparently user is able to input a
4830                                  * character that Mup doesn't support... */
4831                                 l_yyerror(Curr_filename, yylineno,
4832                                         "unsupported non-ASCII character (0x%x) in string",
4833                                         yytext[index] & 0xff);
4834                         }
4835                         else {
4836                                 (void) sprintf(tmp_buff + tmp_index, "\\(%s)",
4837                                                                 replacement);
4838                                 tmp_index += strlen(replacement) + 3;
4839                         }
4840                 }
4841                 else {
4842                         /* normal ASCII character; copy as is */
4843                         tmp_buff[tmp_index++] = yytext[index];
4844                 }
4845         }
4846
4847         /* Now we can copy the expanded string back into yytext and update
4848          * yyleng so that all later code will think the user typed in the
4849          * expanded version themselves. */
4850         (void) strncpy(yytext + start, tmp_buff, tmp_index);
4851         yyleng = start + tmp_index;
4852         yytext[yyleng] = '\0';
4853 }
4854 \f
4855
4856 /* push a character back into input. This allows another C file to
4857  * access the unput macro */
4858
4859 void
4860 pushback(c)
4861
4862 int c;
4863
4864 {
4865         unput(c);
4866 }
4867 \f
4868
4869 /* this function will do nothing unless the "preprocessor only" flag is on,
4870  * in which case it will print the current token
4871  */
4872
4873 static void
4874 ignore()
4875
4876 {
4877         if (Preproc == YES) {
4878                 printf("%s", yytext);
4879         }
4880 }
4881 \f
4882
4883 /* When collecting raw PostScript, we don't want to convert non-ASCII to
4884  * Mup escapes. These functions turn the raw processing on and off. */
4885
4886 void
4887 begin_raw()
4888 {
4889         Raw_string = YES;
4890 }
4891
4892 void
4893 end_raw()
4894 {
4895         Raw_string = NO;
4896 }
4897 \f
4898
4899 /* Create a new flex buffer for the given input file and switch to it */
4900
4901 void
4902 new_lexbuff(file)
4903
4904 FILE * file;
4905
4906 {
4907         struct Lexbuffer *newbuff;
4908
4909         if (Lexlist == 0) {
4910                 MALLOC(Lexbuffer, newbuff, 1);
4911                 newbuff->next = 0;
4912                 newbuff->buff = YY_CURRENT_BUFFER;
4913                 Lexlist = newbuff;
4914         }
4915
4916         MALLOC(Lexbuffer, newbuff, 1);
4917         newbuff->next = Lexlist;
4918         Lexlist = newbuff;
4919         newbuff->buff = yy_create_buffer(file, YY_BUF_SIZE);
4920         yy_switch_to_buffer(newbuff->buff);
4921 }
4922
4923 /* Switch back to previous flex buffer on the stack */
4924
4925 void
4926 del_lexbuff()
4927
4928 {
4929         struct Lexbuffer *nextbuff;
4930
4931         if (Lexlist == 0) {
4932                 pfatal("attempt to pop from empty lex buffer stack");
4933         }
4934         nextbuff = Lexlist->next;
4935         yy_delete_buffer(Lexlist->buff);
4936         FREE(Lexlist);
4937         Lexlist = nextbuff;
4938         yy_switch_to_buffer(nextbuff->buff);
4939 }
4940 \f
4941
4942 /* The contents of an "if clause" is stored in compressed form in
4943  * Ifclause_buff, and eventually passed to a mini-parser. This function
4944  * add tokens to the buffer. Compressed format:
4945  *      input           compressed token
4946  *    -------------------------------------
4947  *      (               (
4948  *      )               )
4949  *      !               !
4950  *      ~               ~
4951  *      *               *
4952  *      /               /
4953  *      %               %
4954  *      +               +
4955  *      -               -
4956  *      <<              l
4957  *      >>              r
4958  *      <               <
4959  *      >               >
4960  *      <=              L
4961  *      >=              G
4962  *      ==              E
4963  *      !=              N
4964  *      &               &
4965  *      ^               ^
4966  *      |               |
4967  *      &&              a
4968  *      ||              o
4969  *      ?               ?
4970  *      :               :
4971  *      defined(X)      T or F depending on whether X is defined or not
4972  *      literal number  # followed by 4 bytes in MSB order
4973  *      macro name      # followed by macro's value as 4 bytes in MSB order
4974  */
4975
4976 static void
4977 add_ifclause(token)
4978
4979 int token;
4980
4981 {
4982         if (If_length >= sizeof(Ifclause_buff)) {
4983                 ufatal("Sorry, 'if' clause is too complex");
4984         }
4985         Ifclause_buff[If_length++] = (unsigned char) (token & 0xff);
4986 }
4987
4988 /* We store numbers in the if-clause compressed form as '#' followed by
4989  * 4 bytes in MSB order.
4990  */
4991
4992
4993 static void
4994 addnum_ifclause(value)
4995
4996 int value;
4997
4998 {
4999         int shift;
5000
5001         add_ifclause('#');
5002         for (shift = 24; shift >= 0; shift -= 8) {
5003                 add_ifclause((value >> shift) & 0xff);
5004         }
5005 }
5006
5007
5008 /* Add number in ASCII. Convert to value and add */
5009
5010 static void
5011 addnumstr_ifclause(numtoken)
5012
5013 char *numtoken;
5014
5015 {
5016         int value;
5017         char *end_p;
5018
5019 #ifdef ERANGE
5020         errno = 0;
5021 #endif
5022         value = strtol(numtoken, &end_p, 0);
5023         if (*end_p != '\0') {
5024                 /* Lexer shouldn't allow unparsable number,
5025                  * so if strtol didn't get to end, must be too big */
5026                 yyerror("bad number (probably out of range)");
5027         }
5028 #ifdef ERANGE
5029         /* Additional range check assuming strtol sets this properly
5030          * on all systems. */
5031         else if (errno == ERANGE) {
5032                 yyerror("number is out of range");
5033         }
5034 #endif
5035
5036         addnum_ifclause(value);
5037 }
5038 \f
5039
5040 /* Give error message for invalid input character, as actual character
5041  * if printable, otherwise as hex value. */
5042
5043 static void
5044 bad_input(where)
5045
5046 char *where;            /* describes where the bad input was found */
5047
5048 {
5049         if (isgraph(yytext[0])) {
5050                 l_yyerror(Curr_filename, yylineno,
5051                         "invalid character in %s: '%c'",
5052                         where, yytext[0]);
5053         }
5054         else {
5055                 l_yyerror(Curr_filename, yylineno,
5056                         "invalid character in %s: 0x%x",
5057                         where, (int) yytext[0]);
5058         }
5059 }