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 }