1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <inttypes.h>
4 # define U(x) x
5 # define NLSTATE yyprevious=YYNEWLINE
6 # define BEGIN yybgin = yysvec + 1 +
7 # define INITIAL 0
8 # define YYLERR yysvec
9 # define YYSTATE (yyestate-yysvec-1)
10 # define YYOPTIM 1
11 # ifndef YYLMAX
12 # define YYLMAX BUFSIZ
13 # endif
14 #ifndef __cplusplus
15 # define output(c) (void)putc(c,yyout)
16 #else
17 # define lex_output(c) (void)putc(c,yyout)
18 #endif
19 
20 #if defined(__cplusplus) || defined(__STDC__)
21 
22 #if defined(__cplusplus) && defined(__EXTERN_C__)
23 extern "C" {
24 #endif
25 	int yyback(int *, int);
26 	int yyinput(void);
27 	int yylook(void);
28 	void yyoutput(int);
29 	int yyracc(int);
30 	int yyreject(void);
31 	void yyunput(int);
32 	int yylex(void);
33 #ifdef YYLEX_E
34 	void yywoutput(wchar_t);
35 	wchar_t yywinput(void);
36 	void yywunput(wchar_t);
37 #endif
38 #ifndef yyless
39 	int yyless(int);
40 #endif
41 #ifndef yywrap
42 	int yywrap(void);
43 #endif
44 #ifdef LEXDEBUG
45 	void allprint(char);
46 	void sprint(char *);
47 #endif
48 #if defined(__cplusplus) && defined(__EXTERN_C__)
49 }
50 #endif
51 
52 #ifdef __cplusplus
53 extern "C" {
54 #endif
55 	void exit(int);
56 #ifdef __cplusplus
57 }
58 #endif
59 
60 #endif
61 # define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
62 # define yymore() (yymorfg=1)
63 #ifndef __cplusplus
64 # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
65 #else
66 # define lex_input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
67 #endif
68 #define ECHO fprintf(yyout, "%s",yytext)
69 # define REJECT { nstr = yyreject(); goto yyfussy;}
70 int yyleng;
71 #define YYISARRAY
72 char yytext[YYLMAX];
73 int yymorfg;
74 extern char *yysptr, yysbuf[];
75 int yytchar;
76 FILE *yyin = {stdin}, *yyout = {stdout};
77 extern int yylineno;
78 struct yysvf {
79 	struct yywork *yystoff;
80 	struct yysvf *yyother;
81 	int *yystops;};
82 struct yysvf *yyestate;
83 extern struct yysvf yysvec[], *yybgin;
84 
85 # line 3 "poolcfg.l"
86 /*
87  * CDDL HEADER START
88  *
89  * The contents of this file are subject to the terms of the
90  * Common Development and Distribution License, Version 1.0 only
91  * (the "License").  You may not use this file except in compliance
92  * with the License.
93  *
94  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
95  * or http://www.opensolaris.org/os/licensing.
96  * See the License for the specific language governing permissions
97  * and limitations under the License.
98  *
99  * When distributing Covered Code, include this CDDL HEADER in each
100  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
101  * If applicable, add the following below this CDDL HEADER, with the
102  * fields enclosed by brackets "[]" replaced with your own identifying
103  * information: Portions Copyright [yyyy] [name of copyright owner]
104  *
105  * CDDL HEADER END
106  *
107  * Copyright 2003 Sun Microsystems, Inc.  All rights reserved.
108  * Use is subject to license terms.
109  */
110 
111 #pragma ident	"%Z%%M%	%I%	%E% SMI"
112 #pragma       error_messages(off, E_STATEMENT_NOT_REACHED)
113 
114 
115 # line 31 "poolcfg.l"
116 /*
117  * poolcfg.l
118  *
119  * Overview
120  * poolcfg.l implements a lexer for the poolcfg(1) utility.The lexer uses
121  * the token definitions generated by YACC in the file poolcfg_Grammar.h.
122  * To make token recognition simpler, the lexer uses a separate state for
123  * each of the different data types supported by poolcfg(1).
124  *
125  * States
126  * Lex provides the ability to minimise conflict between qualifying regexps
127  * by providing states. A regexp that is qualified by a state will only be
128  * used when the state is entered (using the BEGIN <state> command). (The
129  * exception to this rule, is that rules defined in the default state are
130  * available in all states.)
131  *
132  * poolcfg.l makes use of type states, one for each of the poolcfg(1)
133  * supported data types:
134  *
135  * ISTATE => int64_t
136  * USTATE => uint64_t
137  * BSTATE => uchar_t
138  * SSTATE => const char *
139  * DSTATE => double
140  *
141  * and a further state, CPUSTATE, to indicate the difference between matching
142  * a valid "name" (i.e. id) for a cpu and a valid name for other components of
143  * libpool.
144  *
145  * When a token indicating a variable declaration is matched, the corresponding
146  * state is saved in the state variable. Once the assignment ('=') token is
147  * matched, the stored state is entered and the additional state specific
148  * matching regular expressions become available. Once a state specific
149  * token is matched, the default state is restored.
150  *
151  */
152 #include <stdlib.h>
153 #include <sys/types.h>
154 #include <assert.h>
155 #include <string.h>
156 #include <errno.h>
157 #include <libintl.h>
158 
159 #include <pool.h>
160 #include "utils.h"
161 #include "poolcfg.h"
162 #include "poolcfg_grammar.h"
163 
164 static int lex_lineno = 1;		/* line-number for error reporting */
165 static int state = INITIAL;		/* state to be used */
166 extern void yyerror(char *s);
167 extern int dofile;			/* are we processing a file? */
168 # define ISTATE 2
169 # define USTATE 4
170 # define BSTATE 6
171 # define SSTATE 8
172 # define DSTATE 10
173 # define CPUSTATE 12
174 # define YYNEWLINE 10
175 int yylex(){
176 int nstr; extern int yyprevious;
177 #ifdef __cplusplus
178 /* to avoid CC and lint complaining yyfussy not being used ...*/
179 static int __lex_hack = 0;
180 if (__lex_hack) goto yyfussy;
181 #endif
182 while((nstr = yylook()) >= 0)
183 yyfussy: switch(nstr){
184 case 0:
185 if(yywrap()) return(0); break;
186 case 1:
187 
188 # line 93 "poolcfg.l"
189 		lex_lineno++;
190 break;
191 case 2:
192 
193 # line 95 "poolcfg.l"
194 		;
195 break;
196 case 3:
197 
198 # line 97 "poolcfg.l"
199 		;
200 break;
201 case 4:
202 
203 # line 99 "poolcfg.l"
204 		{ return PCC_INFO; }
205 break;
206 case 5:
207 
208 # line 101 "poolcfg.l"
209 		{ return PCC_CREATE; }
210 break;
211 case 6:
212 
213 # line 103 "poolcfg.l"
214 		{ return PCC_DESTROY; }
215 break;
216 case 7:
217 
218 # line 105 "poolcfg.l"
219 		{ return PCC_MODIFY; }
220 break;
221 case 8:
222 
223 # line 107 "poolcfg.l"
224 	{ return PCC_ASSOC; }
225 break;
226 case 9:
227 
228 # line 109 "poolcfg.l"
229 	{
230 				BEGIN USTATE;
231 				return PCC_TRANSFER;
232 			}
233 break;
234 case 10:
235 
236 # line 114 "poolcfg.l"
237 	{ return PCC_DISC; }
238 break;
239 case 11:
240 
241 # line 116 "poolcfg.l"
242 		{ return PCC_RENAME; }
243 break;
244 case 12:
245 
246 # line 118 "poolcfg.l"
247 		{ return PCK_TO; }
248 break;
249 case 13:
250 
251 # line 120 "poolcfg.l"
252 		{ return PCK_FROM; }
253 break;
254 case 14:
255 
256 # line 122 "poolcfg.l"
257 		{
258 				state=ISTATE;
259 				return PCT_INT;
260 			}
261 break;
262 case 15:
263 
264 # line 127 "poolcfg.l"
265 		{
266 				state=USTATE;
267 				return PCT_UINT;
268 			}
269 break;
270 case 16:
271 
272 # line 132 "poolcfg.l"
273 		{
274 				state=BSTATE;
275 				return PCT_BOOLEAN;
276 			}
277 break;
278 case 17:
279 
280 # line 137 "poolcfg.l"
281 		{
282 				state=SSTATE;
283 				return PCT_STRING;
284 			}
285 break;
286 case 18:
287 
288 # line 142 "poolcfg.l"
289 		{
290 				state=DSTATE;
291 				return PCT_FLOAT;
292 			}
293 break;
294 case 19:
295 
296 # line 147 "poolcfg.l"
297 		{
298 				BEGIN CPUSTATE;
299 				return PCE_CPU;
300 			}
301 break;
302 case 20:
303 
304 # line 152 "poolcfg.l"
305 		{ return PCE_PSET; }
306 break;
307 case 21:
308 
309 # line 154 "poolcfg.l"
310 		{ return PCE_POOL; }
311 break;
312 case 22:
313 
314 # line 156 "poolcfg.l"
315 		{ return PCE_SYSTEM; }
316 break;
317 case 23:
318 
319 # line 158 "poolcfg.l"
320 		{ return PCK_OPENLST; }
321 break;
322 case 24:
323 
324 # line 160 "poolcfg.l"
325 		{ return PCK_CLOSELST; }
326 break;
327 case 25:
328 
329 # line 162 "poolcfg.l"
330 		{
331    				 BEGIN state;
332 				 return PCK_ASSIGN;
333 			}
334 break;
335 case 26:
336 
337 # line 167 "poolcfg.l"
338 		{ return PCK_SEPLST; }
339 break;
340 case 27:
341 
342 # line 169 "poolcfg.l"
343 		{ return PCK_UNDEF; }
344 break;
345 case 28:
346 
347 # line 171 "poolcfg.l"
348 {
349 				yylval.ival = strtoll(yytext, NULL, 0);
350 				if (errno == EINVAL || errno == ERANGE) {
351 					yyerror(gettext("Invalid value"));
352 					exit(E_ERROR);
353 				}
354 				BEGIN INITIAL;
355 				return PCV_VAL_INT;
356 			}
357 break;
358 case 29:
359 
360 # line 181 "poolcfg.l"
361 	{
362 				yylval.uval = strtoull(yytext, NULL, 0);
363 				if (errno == EINVAL || errno == ERANGE) {
364 					yyerror(gettext("Invalid value"));
365 					exit(E_ERROR);
366 				}
367 				BEGIN INITIAL;
368 				return PCV_VAL_UINT;
369 			}
370 break;
371 case 30:
372 
373 # line 192 "poolcfg.l"
374 {
375 				if (strcmp(yytext, "true") == 0)
376 					yylval.bval = 1;
377 				else
378 					yylval.bval = 0;
379 				BEGIN INITIAL;
380 				return PCV_VAL_BOOLEAN;
381 			}
382 break;
383 case 31:
384 
385 # line 201 "poolcfg.l"
386 {
387 				if((yylval.sval = strdup(yytext+1)) == NULL) {
388 					yyerror(gettext("Out of memory"));
389 					exit(E_ERROR);
390 				}
391 				if (yylval.sval[yyleng-2] =='"')
392 					yylval.sval[yyleng-2] = 0;
393 				BEGIN INITIAL;
394 				return PCV_VAL_STRING;
395 			}
396 break;
397 case 32:
398 
399 # line 212 "poolcfg.l"
400 {
401 				yylval.dval = strtod(yytext, (char **)NULL);
402 				if (errno == EINVAL || errno == ERANGE) {
403 					yyerror(gettext("Invalid value"));
404 					exit(E_ERROR);
405 				}
406 				BEGIN INITIAL;
407 				return PCV_VAL_FLOAT;
408 			}
409 break;
410 case 33:
411 
412 # line 222 "poolcfg.l"
413 {
414 				if ((yylval.sval = strdup(yytext)) == NULL) {
415 					yyerror(gettext("Out of memory"));
416 					exit(E_ERROR);
417 				}
418  				return PCV_SYMBOL;
419 			}
420 break;
421 case 34:
422 
423 # line 230 "poolcfg.l"
424 {
425 				if ((yylval.sval = strdup(yytext)) == NULL) {
426 					yyerror(gettext("Out of memory"));
427 					exit(E_ERROR);
428 				}
429 				BEGIN INITIAL;
430  				return PCV_SYMBOL;
431 			}
432 break;
433 case 35:
434 
435 # line 238 "poolcfg.l"
436 		{
437 				yyerror(gettext("Illegal character"));
438 				exit(E_ERROR);
439 			}
440 break;
441 case -1:
442 break;
443 default:
444 (void)fprintf(yyout,"bad switch yylook %d",nstr);
445 } return(0); }
446 /* end of yylex */
447 
448 # line 244 "poolcfg.l"
449 
450 void
451 yyerror(char *s)
452 {
453 	if (dofile == PO_TRUE) {
454 		if (yytext[0] == '\0') {
455 			(void) warn(gettext("line %d, %s, token expected\n"),
456 			    lex_lineno, s);
457 			return;
458 		}
459 		(void) warn(gettext("line %d, %s at '%s'\n"), lex_lineno, s,
460 		    yytext);
461 	} else {
462 		if (yytext[0] == '\0') {
463 			(void) warn(gettext("%s, token expected\n"), s);
464 			return;
465 		}
466 		(void) warn(gettext("%s at '%s'\n"), s, yytext);
467 	}
468 }
469 
470 int yyvstop[] = {
471 0,
472 
473 35,
474 0,
475 
476 2,
477 35,
478 0,
479 
480 1,
481 0,
482 
483 3,
484 35,
485 0,
486 
487 23,
488 35,
489 0,
490 
491 24,
492 35,
493 0,
494 
495 26,
496 35,
497 0,
498 
499 25,
500 35,
501 0,
502 
503 33,
504 35,
505 0,
506 
507 33,
508 35,
509 0,
510 
511 33,
512 35,
513 0,
514 
515 33,
516 35,
517 0,
518 
519 33,
520 35,
521 0,
522 
523 33,
524 35,
525 0,
526 
527 33,
528 35,
529 0,
530 
531 33,
532 35,
533 0,
534 
535 33,
536 35,
537 0,
538 
539 33,
540 35,
541 0,
542 
543 33,
544 35,
545 0,
546 
547 33,
548 35,
549 0,
550 
551 33,
552 35,
553 0,
554 
555 27,
556 35,
557 0,
558 
559 35,
560 0,
561 
562 28,
563 35,
564 0,
565 
566 29,
567 35,
568 0,
569 
570 33,
571 35,
572 0,
573 
574 33,
575 35,
576 0,
577 
578 35,
579 0,
580 
581 35,
582 0,
583 
584 32,
585 35,
586 0,
587 
588 34,
589 35,
590 0,
591 
592 2,
593 0,
594 
595 3,
596 0,
597 
598 33,
599 0,
600 
601 33,
602 0,
603 
604 33,
605 0,
606 
607 33,
608 0,
609 
610 33,
611 0,
612 
613 33,
614 0,
615 
616 33,
617 0,
618 
619 33,
620 0,
621 
622 33,
623 0,
624 
625 33,
626 0,
627 
628 33,
629 0,
630 
631 33,
632 0,
633 
634 33,
635 0,
636 
637 33,
638 0,
639 
640 33,
641 0,
642 
643 33,
644 0,
645 
646 12,
647 33,
648 0,
649 
650 33,
651 0,
652 
653 33,
654 0,
655 
656 28,
657 0,
658 
659 29,
660 0,
661 
662 33,
663 0,
664 
665 33,
666 0,
667 
668 31,
669 0,
670 
671 32,
672 0,
673 
674 32,
675 0,
676 
677 34,
678 0,
679 
680 33,
681 0,
682 
683 33,
684 0,
685 
686 19,
687 33,
688 0,
689 
690 33,
691 0,
692 
693 33,
694 0,
695 
696 33,
697 0,
698 
699 33,
700 0,
701 
702 33,
703 0,
704 
705 33,
706 0,
707 
708 14,
709 33,
710 0,
711 
712 33,
713 0,
714 
715 33,
716 0,
717 
718 33,
719 0,
720 
721 33,
722 0,
723 
724 33,
725 0,
726 
727 33,
728 0,
729 
730 33,
731 0,
732 
733 33,
734 0,
735 
736 33,
737 0,
738 
739 33,
740 0,
741 
742 33,
743 0,
744 
745 33,
746 0,
747 
748 33,
749 0,
750 
751 33,
752 0,
753 
754 33,
755 0,
756 
757 33,
758 0,
759 
760 13,
761 33,
762 0,
763 
764 4,
765 33,
766 0,
767 
768 33,
769 0,
770 
771 21,
772 33,
773 0,
774 
775 20,
776 33,
777 0,
778 
779 33,
780 0,
781 
782 33,
783 0,
784 
785 33,
786 0,
787 
788 33,
789 0,
790 
791 15,
792 33,
793 0,
794 
795 33,
796 0,
797 
798 30,
799 33,
800 0,
801 
802 32,
803 0,
804 
805 33,
806 0,
807 
808 33,
809 0,
810 
811 33,
812 0,
813 
814 33,
815 0,
816 
817 33,
818 0,
819 
820 18,
821 33,
822 0,
823 
824 33,
825 0,
826 
827 33,
828 0,
829 
830 33,
831 0,
832 
833 33,
834 0,
835 
836 33,
837 0,
838 
839 33,
840 0,
841 
842 33,
843 0,
844 
845 5,
846 33,
847 0,
848 
849 33,
850 0,
851 
852 33,
853 0,
854 
855 7,
856 33,
857 0,
858 
859 11,
860 33,
861 0,
862 
863 17,
864 33,
865 0,
866 
867 22,
868 33,
869 0,
870 
871 33,
872 0,
873 
874 33,
875 0,
876 
877 16,
878 33,
879 0,
880 
881 6,
882 33,
883 0,
884 
885 33,
886 0,
887 
888 33,
889 0,
890 
891 33,
892 0,
893 
894 10,
895 33,
896 0,
897 
898 9,
899 33,
900 0,
901 
902 8,
903 33,
904 0,
905 0};
906 # define YYTYPE unsigned char
907 struct yywork { YYTYPE verify, advance; } yycrank[] = {
908 0,0,	0,0,	1,15,	0,0,
909 0,0,	0,0,	0,0,	0,0,
910 0,0,	0,0,	1,16,	1,17,
911 47,0,	0,0,	16,46,	0,0,
912 0,0,	0,0,	0,0,	0,0,
913 0,0,	0,0,	0,0,	0,0,
914 0,0,	0,0,	0,0,	0,0,
915 0,0,	0,0,	0,0,	0,0,
916 0,0,	0,0,	0,0,	1,15,
917 1,18,	16,46,	0,0,	0,0,
918 0,0,	1,19,	1,20,	0,0,
919 1,15,	1,15,	1,15,	0,0,
920 0,0,	1,15,	0,0,	0,0,
921 0,0,	0,0,	0,0,	0,0,
922 0,0,	0,0,	2,18,	0,0,
923 1,21,	0,0,	1,22,	2,19,
924 2,20,	0,0,	1,23,	0,0,
925 0,0,	0,0,	1,23,	37,67,
926 37,67,	37,67,	37,67,	37,67,
927 37,67,	37,67,	37,67,	37,67,
928 37,67,	3,18,	2,21,	0,0,
929 2,22,	0,0,	3,19,	3,20,
930 0,0,	0,0,	0,0,	3,37,
931 0,0,	0,0,	3,38,	0,0,
932 0,0,	0,0,	1,24,	1,25,
933 1,26,	1,27,	58,87,	1,28,
934 27,53,	3,21,	1,29,	3,22,
935 27,54,	32,61,	1,30,	35,66,
936 29,57,	1,31,	25,50,	1,32,
937 1,33,	1,34,	1,35,	24,49,
938 2,24,	2,25,	2,26,	2,27,
939 26,51,	2,28,	26,52,	1,36,
940 2,29,	30,58,	28,55,	34,64,
941 2,30,	49,77,	34,65,	2,31,
942 28,56,	2,32,	2,33,	2,34,
943 2,35,	50,78,	33,62,	3,24,
944 3,25,	3,26,	3,27,	33,63,
945 3,28,	2,36,	31,59,	3,29,
946 51,79,	52,80,	31,60,	3,30,
947 40,69,	53,81,	3,31,	54,82,
948 3,32,	3,33,	3,34,	3,35,
949 4,18,	41,64,	55,83,	40,55,
950 41,70,	4,19,	4,20,	56,84,
951 3,36,	40,56,	4,37,	57,85,
952 59,88,	4,38,	60,89,	61,90,
953 62,91,	63,92,	65,93,	66,94,
954 69,95,	70,93,	5,18,	73,97,
955 4,21,	57,86,	4,22,	5,19,
956 5,20,	77,98,	78,99,	80,100,
957 81,101,	82,102,	83,103,	5,39,
958 84,104,	85,105,	87,106,	88,107,
959 89,108,	70,96,	90,109,	91,110,
960 92,111,	6,18,	5,21,	93,112,
961 5,22,	94,113,	6,19,	6,20,
962 95,114,	96,115,	98,118,	73,97,
963 99,119,	100,120,	6,39,	101,121,
964 102,122,	103,123,	4,24,	4,25,
965 4,26,	4,27,	106,124,	4,28,
966 109,125,	6,21,	4,29,	6,22,
967 110,126,	111,127,	4,30,	112,128,
968 114,115,	4,31,	118,129,	4,32,
969 4,33,	4,34,	4,35,	119,130,
970 5,24,	5,25,	5,26,	5,27,
971 120,131,	5,28,	121,132,	4,36,
972 5,29,	122,133,	124,134,	125,135,
973 5,30,	126,136,	127,137,	5,31,
974 128,138,	5,32,	5,33,	5,34,
975 5,35,	129,139,	130,140,	6,24,
976 6,25,	6,26,	6,27,	7,18,
977 6,28,	5,36,	132,141,	6,29,
978 7,19,	7,20,	133,142,	6,30,
979 138,143,	139,144,	6,31,	142,145,
980 6,32,	6,33,	6,34,	6,35,
981 143,146,	144,147,	0,0,	0,0,
982 0,0,	8,18,	0,0,	7,21,
983 6,36,	7,22,	8,19,	8,20,
984 39,68,	39,68,	39,68,	39,68,
985 39,68,	39,68,	39,68,	39,68,
986 39,68,	39,68,	0,0,	0,0,
987 0,0,	0,0,	0,0,	9,42,
988 9,18,	8,21,	0,0,	8,22,
989 0,0,	9,19,	9,20,	43,73,
990 43,73,	43,73,	43,73,	43,73,
991 43,73,	43,73,	43,73,	43,73,
992 43,73,	7,24,	7,25,	7,26,
993 7,27,	0,0,	7,40,	0,0,
994 9,21,	7,29,	9,22,	0,0,
995 0,0,	7,30,	0,0,	0,0,
996 7,31,	0,0,	7,32,	7,33,
997 7,41,	7,35,	0,0,	8,24,
998 8,25,	8,26,	8,27,	0,0,
999 8,40,	0,0,	7,36,	8,29,
1000 0,0,	0,0,	0,0,	8,30,
1001 18,47,	0,0,	8,31,	0,0,
1002 8,32,	8,33,	8,41,	8,35,
1003 18,47,	18,0,	9,24,	9,25,
1004 9,26,	9,27,	0,0,	9,28,
1005 8,36,	0,0,	9,29,	0,0,
1006 0,0,	0,0,	9,30,	0,0,
1007 0,0,	9,31,	0,0,	9,32,
1008 9,33,	9,34,	9,35,	10,42,
1009 10,18,	18,47,	0,0,	0,0,
1010 0,0,	10,19,	10,20,	9,36,
1011 0,0,	0,0,	18,47,	18,47,
1012 18,47,	0,0,	0,0,	18,47,
1013 0,0,	0,0,	0,0,	0,0,
1014 0,0,	0,0,	11,18,	0,0,
1015 10,21,	0,0,	10,22,	11,19,
1016 11,20,	0,0,	0,0,	0,0,
1017 18,47,	11,43,	0,0,	11,44,
1018 18,47,	0,0,	0,0,	0,0,
1019 0,0,	0,0,	0,0,	0,0,
1020 0,0,	12,18,	11,21,	0,0,
1021 11,22,	0,0,	12,19,	12,20,
1022 0,0,	0,0,	0,0,	0,0,
1023 12,43,	0,0,	12,44,	0,0,
1024 0,0,	0,0,	10,24,	10,25,
1025 10,26,	10,27,	0,0,	10,28,
1026 0,0,	12,21,	10,29,	12,22,
1027 0,0,	0,0,	10,30,	0,0,
1028 0,0,	10,31,	0,0,	10,32,
1029 10,33,	10,34,	10,35,	0,0,
1030 11,24,	11,25,	11,26,	11,27,
1031 0,0,	11,28,	0,0,	10,36,
1032 11,29,	0,0,	0,0,	0,0,
1033 11,30,	0,0,	0,0,	11,31,
1034 0,0,	11,32,	11,33,	11,34,
1035 11,35,	0,0,	0,0,	12,24,
1036 12,25,	12,26,	12,27,	0,0,
1037 12,28,	11,36,	0,0,	12,29,
1038 0,0,	0,0,	0,0,	12,30,
1039 0,0,	0,0,	12,31,	0,0,
1040 12,32,	12,33,	12,34,	12,35,
1041 13,18,	0,0,	0,0,	0,0,
1042 0,0,	13,19,	13,20,	42,71,
1043 12,36,	0,0,	0,0,	0,0,
1044 0,0,	13,45,	0,0,	42,71,
1045 42,72,	0,0,	0,0,	0,0,
1046 0,0,	0,0,	14,18,	0,0,
1047 13,21,	0,0,	13,22,	14,19,
1048 14,20,	0,0,	0,0,	0,0,
1049 0,0,	0,0,	0,0,	14,45,
1050 0,0,	0,0,	0,0,	0,0,
1051 42,72,	0,0,	0,0,	0,0,
1052 0,0,	0,0,	14,21,	0,0,
1053 14,22,	42,71,	42,71,	42,71,
1054 0,0,	0,0,	42,71,	0,0,
1055 0,0,	0,0,	0,0,	0,0,
1056 0,0,	0,0,	13,24,	13,25,
1057 13,26,	13,27,	0,0,	13,28,
1058 0,0,	0,0,	13,29,	42,71,
1059 0,0,	0,0,	13,30,	42,71,
1060 0,0,	13,31,	0,0,	13,32,
1061 13,33,	13,34,	13,35,	0,0,
1062 14,24,	14,25,	14,26,	14,27,
1063 0,0,	14,28,	0,0,	13,36,
1064 14,29,	0,0,	0,0,	0,0,
1065 14,30,	0,0,	0,0,	14,31,
1066 0,0,	14,32,	14,33,	14,34,
1067 14,35,	0,0,	0,0,	0,0,
1068 0,0,	0,0,	23,48,	23,48,
1069 23,48,	14,36,	23,48,	23,48,
1070 23,48,	23,48,	23,48,	23,48,
1071 23,48,	23,48,	23,48,	23,48,
1072 0,0,	0,0,	0,0,	0,0,
1073 0,0,	0,0,	0,0,	23,48,
1074 23,48,	23,48,	23,48,	23,48,
1075 23,48,	23,48,	23,48,	23,48,
1076 23,48,	23,48,	23,48,	23,48,
1077 23,48,	23,48,	23,48,	23,48,
1078 23,48,	23,48,	23,48,	23,48,
1079 23,48,	23,48,	23,48,	23,48,
1080 23,48,	0,0,	0,0,	0,0,
1081 0,0,	23,48,	0,0,	23,48,
1082 23,48,	23,48,	23,48,	23,48,
1083 23,48,	23,48,	23,48,	23,48,
1084 23,48,	23,48,	23,48,	23,48,
1085 23,48,	23,48,	23,48,	23,48,
1086 23,48,	23,48,	23,48,	23,48,
1087 23,48,	23,48,	23,48,	23,48,
1088 23,48,	44,74,	0,0,	44,75,
1089 44,75,	44,75,	44,75,	44,75,
1090 44,75,	44,75,	44,75,	44,75,
1091 44,75,	45,76,	45,76,	45,76,
1092 45,76,	45,76,	45,76,	45,76,
1093 45,76,	45,76,	45,76,	97,116,
1094 0,0,	97,116,	0,0,	0,0,
1095 97,117,	97,117,	97,117,	97,117,
1096 97,117,	97,117,	97,117,	97,117,
1097 97,117,	97,117,	116,117,	116,117,
1098 116,117,	116,117,	116,117,	116,117,
1099 116,117,	116,117,	116,117,	116,117,
1100 0,0};
1101 struct yysvf yysvec[] = {
1102 0,	0,	0,
1103 yycrank+-1,	0,		0,
1104 yycrank+-23,	yysvec+1,	0,
1105 yycrank+-46,	yysvec+1,	0,
1106 yycrank+-129,	yysvec+1,	0,
1107 yycrank+-151,	yysvec+1,	0,
1108 yycrank+-174,	yysvec+1,	0,
1109 yycrank+-240,	yysvec+1,	0,
1110 yycrank+-262,	yysvec+1,	0,
1111 yycrank+-285,	yysvec+1,	0,
1112 yycrank+-369,	yysvec+1,	0,
1113 yycrank+-391,	yysvec+1,	0,
1114 yycrank+-414,	yysvec+1,	0,
1115 yycrank+-497,	yysvec+1,	0,
1116 yycrank+-519,	yysvec+1,	0,
1117 yycrank+0,	0,		yyvstop+1,
1118 yycrank+5,	0,		yyvstop+3,
1119 yycrank+0,	0,		yyvstop+6,
1120 yycrank+-371,	0,		yyvstop+8,
1121 yycrank+0,	0,		yyvstop+11,
1122 yycrank+0,	0,		yyvstop+14,
1123 yycrank+0,	0,		yyvstop+17,
1124 yycrank+0,	0,		yyvstop+20,
1125 yycrank+598,	0,		yyvstop+23,
1126 yycrank+4,	yysvec+23,	yyvstop+26,
1127 yycrank+3,	yysvec+23,	yyvstop+29,
1128 yycrank+12,	yysvec+23,	yyvstop+32,
1129 yycrank+3,	yysvec+23,	yyvstop+35,
1130 yycrank+22,	yysvec+23,	yyvstop+38,
1131 yycrank+2,	yysvec+23,	yyvstop+41,
1132 yycrank+18,	yysvec+23,	yyvstop+44,
1133 yycrank+39,	yysvec+23,	yyvstop+47,
1134 yycrank+8,	yysvec+23,	yyvstop+50,
1135 yycrank+26,	yysvec+23,	yyvstop+53,
1136 yycrank+20,	yysvec+23,	yyvstop+56,
1137 yycrank+6,	yysvec+23,	yyvstop+59,
1138 yycrank+0,	0,		yyvstop+62,
1139 yycrank+23,	0,		yyvstop+65,
1140 yycrank+0,	yysvec+37,	yyvstop+67,
1141 yycrank+256,	0,		yyvstop+70,
1142 yycrank+59,	yysvec+23,	yyvstop+73,
1143 yycrank+54,	yysvec+23,	yyvstop+76,
1144 yycrank+-538,	0,		yyvstop+79,
1145 yycrank+279,	0,		yyvstop+81,
1146 yycrank+675,	0,		yyvstop+83,
1147 yycrank+685,	0,		yyvstop+86,
1148 yycrank+0,	yysvec+16,	yyvstop+89,
1149 yycrank+-2,	yysvec+18,	yyvstop+91,
1150 yycrank+0,	yysvec+23,	yyvstop+93,
1151 yycrank+18,	yysvec+23,	yyvstop+95,
1152 yycrank+30,	yysvec+23,	yyvstop+97,
1153 yycrank+35,	yysvec+23,	yyvstop+99,
1154 yycrank+52,	yysvec+23,	yyvstop+101,
1155 yycrank+42,	yysvec+23,	yyvstop+103,
1156 yycrank+44,	yysvec+23,	yyvstop+105,
1157 yycrank+55,	yysvec+23,	yyvstop+107,
1158 yycrank+60,	yysvec+23,	yyvstop+109,
1159 yycrank+73,	yysvec+23,	yyvstop+111,
1160 yycrank+2,	yysvec+23,	yyvstop+113,
1161 yycrank+65,	yysvec+23,	yyvstop+115,
1162 yycrank+77,	yysvec+23,	yyvstop+117,
1163 yycrank+69,	yysvec+23,	yyvstop+119,
1164 yycrank+66,	yysvec+23,	yyvstop+121,
1165 yycrank+66,	yysvec+23,	yyvstop+123,
1166 yycrank+0,	yysvec+23,	yyvstop+125,
1167 yycrank+85,	yysvec+23,	yyvstop+128,
1168 yycrank+73,	yysvec+23,	yyvstop+130,
1169 yycrank+0,	yysvec+37,	yyvstop+132,
1170 yycrank+0,	yysvec+39,	yyvstop+134,
1171 yycrank+76,	yysvec+23,	yyvstop+136,
1172 yycrank+88,	yysvec+23,	yyvstop+138,
1173 yycrank+0,	yysvec+42,	0,
1174 yycrank+0,	0,		yyvstop+140,
1175 yycrank+118,	yysvec+43,	yyvstop+142,
1176 yycrank+0,	yysvec+43,	0,
1177 yycrank+0,	yysvec+44,	yyvstop+144,
1178 yycrank+0,	yysvec+45,	yyvstop+146,
1179 yycrank+82,	yysvec+23,	yyvstop+148,
1180 yycrank+86,	yysvec+23,	yyvstop+150,
1181 yycrank+0,	yysvec+23,	yyvstop+152,
1182 yycrank+98,	yysvec+23,	yyvstop+155,
1183 yycrank+80,	yysvec+23,	yyvstop+157,
1184 yycrank+98,	yysvec+23,	yyvstop+159,
1185 yycrank+101,	yysvec+23,	yyvstop+161,
1186 yycrank+91,	yysvec+23,	yyvstop+163,
1187 yycrank+90,	yysvec+23,	yyvstop+165,
1188 yycrank+0,	yysvec+23,	yyvstop+167,
1189 yycrank+97,	yysvec+23,	yyvstop+170,
1190 yycrank+95,	yysvec+23,	yyvstop+172,
1191 yycrank+88,	yysvec+23,	yyvstop+174,
1192 yycrank+109,	yysvec+23,	yyvstop+176,
1193 yycrank+102,	yysvec+23,	yyvstop+178,
1194 yycrank+92,	yysvec+23,	yyvstop+180,
1195 yycrank+101,	yysvec+23,	yyvstop+182,
1196 yycrank+97,	yysvec+23,	yyvstop+184,
1197 yycrank+101,	yysvec+23,	yyvstop+186,
1198 yycrank+116,	yysvec+23,	yyvstop+188,
1199 yycrank+700,	0,		0,
1200 yycrank+119,	yysvec+23,	yyvstop+190,
1201 yycrank+119,	yysvec+23,	yyvstop+192,
1202 yycrank+105,	yysvec+23,	yyvstop+194,
1203 yycrank+109,	yysvec+23,	yyvstop+196,
1204 yycrank+113,	yysvec+23,	yyvstop+198,
1205 yycrank+109,	yysvec+23,	yyvstop+200,
1206 yycrank+0,	yysvec+23,	yyvstop+202,
1207 yycrank+0,	yysvec+23,	yyvstop+205,
1208 yycrank+128,	yysvec+23,	yyvstop+208,
1209 yycrank+0,	yysvec+23,	yyvstop+210,
1210 yycrank+0,	yysvec+23,	yyvstop+213,
1211 yycrank+123,	yysvec+23,	yyvstop+216,
1212 yycrank+126,	yysvec+23,	yyvstop+218,
1213 yycrank+136,	yysvec+23,	yyvstop+220,
1214 yycrank+124,	yysvec+23,	yyvstop+222,
1215 yycrank+0,	yysvec+23,	yyvstop+224,
1216 yycrank+139,	yysvec+23,	yyvstop+227,
1217 yycrank+0,	yysvec+23,	yyvstop+229,
1218 yycrank+710,	0,		0,
1219 yycrank+0,	yysvec+116,	yyvstop+232,
1220 yycrank+137,	yysvec+23,	yyvstop+234,
1221 yycrank+150,	yysvec+23,	yyvstop+236,
1222 yycrank+151,	yysvec+23,	yyvstop+238,
1223 yycrank+143,	yysvec+23,	yyvstop+240,
1224 yycrank+139,	yysvec+23,	yyvstop+242,
1225 yycrank+0,	yysvec+23,	yyvstop+244,
1226 yycrank+137,	yysvec+23,	yyvstop+247,
1227 yycrank+158,	yysvec+23,	yyvstop+249,
1228 yycrank+158,	yysvec+23,	yyvstop+251,
1229 yycrank+153,	yysvec+23,	yyvstop+253,
1230 yycrank+162,	yysvec+23,	yyvstop+255,
1231 yycrank+172,	yysvec+23,	yyvstop+257,
1232 yycrank+160,	yysvec+23,	yyvstop+259,
1233 yycrank+0,	yysvec+23,	yyvstop+261,
1234 yycrank+157,	yysvec+23,	yyvstop+264,
1235 yycrank+181,	yysvec+23,	yyvstop+266,
1236 yycrank+0,	yysvec+23,	yyvstop+268,
1237 yycrank+0,	yysvec+23,	yyvstop+271,
1238 yycrank+0,	yysvec+23,	yyvstop+274,
1239 yycrank+0,	yysvec+23,	yyvstop+277,
1240 yycrank+183,	yysvec+23,	yyvstop+280,
1241 yycrank+169,	yysvec+23,	yyvstop+282,
1242 yycrank+0,	yysvec+23,	yyvstop+284,
1243 yycrank+0,	yysvec+23,	yyvstop+287,
1244 yycrank+173,	yysvec+23,	yyvstop+290,
1245 yycrank+178,	yysvec+23,	yyvstop+292,
1246 yycrank+192,	yysvec+23,	yyvstop+294,
1247 yycrank+0,	yysvec+23,	yyvstop+296,
1248 yycrank+0,	yysvec+23,	yyvstop+299,
1249 yycrank+0,	yysvec+23,	yyvstop+302,
1250 0,	0,	0};
1251 struct yywork *yytop = yycrank+767;
1252 struct yysvf *yybgin = yysvec+1;
1253 char yymatch[] = {
1254   0,   1,   1,   1,   1,   1,   1,   1,
1255   1,   9,  10,   1,   1,   1,   1,   1,
1256   1,   1,   1,   1,   1,   1,   1,   1,
1257   1,   1,   1,   1,   1,   1,   1,   1,
1258   9,   1,  34,   1,   1,   1,   1,   1,
1259   1,   1,   1,  43,  44,  45,  44,   1,
1260  48,  48,  48,  48,  48,  48,  48,  48,
1261  48,  48,   1,   1,   1,   1,   1,   1,
1262   1,  65,  65,  65,  65,  69,  65,  65,
1263  65,  65,  65,  65,  65,  65,  65,  65,
1264  65,  65,  65,  65,  65,  65,  65,  65,
1265  65,  65,  65,   1,   1,   1,   1,  44,
1266   1,  65,  65,  65,  65,  69,  65,  65,
1267  65,  65,  65,  65,  65,  65,  65,  65,
1268  65,  65,  65,  65,  65,  65,  65,  65,
1269  65,  65,  65,   1,   1,   1,   1,   1,
1270   1,   1,   1,   1,   1,   1,   1,   1,
1271   1,   1,   1,   1,   1,   1,   1,   1,
1272   1,   1,   1,   1,   1,   1,   1,   1,
1273   1,   1,   1,   1,   1,   1,   1,   1,
1274   1,   1,   1,   1,   1,   1,   1,   1,
1275   1,   1,   1,   1,   1,   1,   1,   1,
1276   1,   1,   1,   1,   1,   1,   1,   1,
1277   1,   1,   1,   1,   1,   1,   1,   1,
1278   1,   1,   1,   1,   1,   1,   1,   1,
1279   1,   1,   1,   1,   1,   1,   1,   1,
1280   1,   1,   1,   1,   1,   1,   1,   1,
1281   1,   1,   1,   1,   1,   1,   1,   1,
1282   1,   1,   1,   1,   1,   1,   1,   1,
1283   1,   1,   1,   1,   1,   1,   1,   1,
1284   1,   1,   1,   1,   1,   1,   1,   1,
1285   1,   1,   1,   1,   1,   1,   1,   1,
1286 0};
1287 char yyextra[] = {
1288 0,0,0,0,0,0,0,0,
1289 0,0,0,0,0,0,0,0,
1290 0,0,0,0,0,0,0,0,
1291 0,0,0,0,0,0,0,0,
1292 0,0,0,0,0,0,0,0,
1293 0};
1294 /*
1295  * CDDL HEADER START
1296  *
1297  * The contents of this file are subject to the terms of the
1298  * Common Development and Distribution License, Version 1.0 only
1299  * (the "License").  You may not use this file except in compliance
1300  * with the License.
1301  *
1302  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1303  * or http://www.opensolaris.org/os/licensing.
1304  * See the License for the specific language governing permissions
1305  * and limitations under the License.
1306  *
1307  * When distributing Covered Code, include this CDDL HEADER in each
1308  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1309  * If applicable, add the following below this CDDL HEADER, with the
1310  * fields enclosed by brackets "[]" replaced with your own identifying
1311  * information: Portions Copyright [yyyy] [name of copyright owner]
1312  *
1313  * CDDL HEADER END
1314  */
1315 
1316 /*	Copyright (c) 1989 AT&T	*/
1317 /*	  All Rights Reserved  	*/
1318 
1319 #pragma ident	"%Z%%M%	%I%	%E% SMI"
1320 
1321 int yylineno =1;
1322 # define YYU(x) x
1323 # define NLSTATE yyprevious=YYNEWLINE
1324 struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
1325 char yysbuf[YYLMAX];
1326 char *yysptr = yysbuf;
1327 int *yyfnd;
1328 extern struct yysvf *yyestate;
1329 int yyprevious = YYNEWLINE;
1330 #if defined(__cplusplus) || defined(__STDC__)
1331 int yylook(void)
1332 #else
1333 yylook()
1334 #endif
1335 {
1336 	register struct yysvf *yystate, **lsp;
1337 	register struct yywork *yyt;
1338 	struct yysvf *yyz;
1339 	int yych, yyfirst;
1340 	struct yywork *yyr;
1341 # ifdef LEXDEBUG
1342 	int debug;
1343 # endif
1344 	char *yylastch;
1345 	/* start off machines */
1346 # ifdef LEXDEBUG
1347 	debug = 0;
1348 # endif
1349 	yyfirst=1;
1350 	if (!yymorfg)
1351 		yylastch = yytext;
1352 	else {
1353 		yymorfg=0;
1354 		yylastch = yytext+yyleng;
1355 		}
1356 	for(;;){
1357 		lsp = yylstate;
1358 		yyestate = yystate = yybgin;
1359 		if (yyprevious==YYNEWLINE) yystate++;
1360 		for (;;){
1361 # ifdef LEXDEBUG
1362 			if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
1363 # endif
1364 			yyt = yystate->yystoff;
1365 			if(yyt == yycrank && !yyfirst){  /* may not be any transitions */
1366 				yyz = yystate->yyother;
1367 				if(yyz == 0)break;
1368 				if(yyz->yystoff == yycrank)break;
1369 				}
1370 #ifndef __cplusplus
1371 			*yylastch++ = yych = input();
1372 #else
1373 			*yylastch++ = yych = lex_input();
1374 #endif
1375 #ifdef YYISARRAY
1376 			if(yylastch > &yytext[YYLMAX]) {
1377 				fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
1378 				exit(1);
1379 			}
1380 #else
1381 			if (yylastch >= &yytext[ yytextsz ]) {
1382 				int	x = yylastch - yytext;
1383 
1384 				yytextsz += YYTEXTSZINC;
1385 				if (yytext == yy_tbuf) {
1386 				    yytext = (char *) malloc(yytextsz);
1387 				    memcpy(yytext, yy_tbuf, sizeof (yy_tbuf));
1388 				}
1389 				else
1390 				    yytext = (char *) realloc(yytext, yytextsz);
1391 				if (!yytext) {
1392 				    fprintf(yyout,
1393 					"Cannot realloc yytext\n");
1394 				    exit(1);
1395 				}
1396 				yylastch = yytext + x;
1397 			}
1398 #endif
1399 			yyfirst=0;
1400 		tryagain:
1401 # ifdef LEXDEBUG
1402 			if(debug){
1403 				fprintf(yyout,"char ");
1404 				allprint(yych);
1405 				putchar('\n');
1406 				}
1407 # endif
1408 			yyr = yyt;
1409 			if ( (uintptr_t)yyt > (uintptr_t)yycrank){
1410 				yyt = yyr + yych;
1411 				if (yyt <= yytop && yyt->verify+yysvec == yystate){
1412 					if(yyt->advance+yysvec == YYLERR)	/* error transitions */
1413 						{unput(*--yylastch);break;}
1414 					*lsp++ = yystate = yyt->advance+yysvec;
1415 					if(lsp > &yylstate[YYLMAX]) {
1416 						fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
1417 						exit(1);
1418 					}
1419 					goto contin;
1420 					}
1421 				}
1422 # ifdef YYOPTIM
1423 			else if((uintptr_t)yyt < (uintptr_t)yycrank) {	/* r < yycrank */
1424 				yyt = yyr = yycrank+(yycrank-yyt);
1425 # ifdef LEXDEBUG
1426 				if(debug)fprintf(yyout,"compressed state\n");
1427 # endif
1428 				yyt = yyt + yych;
1429 				if(yyt <= yytop && yyt->verify+yysvec == yystate){
1430 					if(yyt->advance+yysvec == YYLERR)	/* error transitions */
1431 						{unput(*--yylastch);break;}
1432 					*lsp++ = yystate = yyt->advance+yysvec;
1433 					if(lsp > &yylstate[YYLMAX]) {
1434 						fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
1435 						exit(1);
1436 					}
1437 					goto contin;
1438 					}
1439 				yyt = yyr + YYU(yymatch[yych]);
1440 # ifdef LEXDEBUG
1441 				if(debug){
1442 					fprintf(yyout,"try fall back character ");
1443 					allprint(YYU(yymatch[yych]));
1444 					putchar('\n');
1445 					}
1446 # endif
1447 				if(yyt <= yytop && yyt->verify+yysvec == yystate){
1448 					if(yyt->advance+yysvec == YYLERR)	/* error transition */
1449 						{unput(*--yylastch);break;}
1450 					*lsp++ = yystate = yyt->advance+yysvec;
1451 					if(lsp > &yylstate[YYLMAX]) {
1452 						fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
1453 						exit(1);
1454 					}
1455 					goto contin;
1456 					}
1457 				}
1458 			if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
1459 # ifdef LEXDEBUG
1460 				if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
1461 # endif
1462 				goto tryagain;
1463 				}
1464 # endif
1465 			else
1466 				{unput(*--yylastch);break;}
1467 		contin:
1468 # ifdef LEXDEBUG
1469 			if(debug){
1470 				fprintf(yyout,"state %d char ",yystate-yysvec-1);
1471 				allprint(yych);
1472 				putchar('\n');
1473 				}
1474 # endif
1475 			;
1476 			}
1477 # ifdef LEXDEBUG
1478 		if(debug){
1479 			fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
1480 			allprint(yych);
1481 			putchar('\n');
1482 			}
1483 # endif
1484 		while (lsp-- > yylstate){
1485 			*yylastch-- = 0;
1486 			if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
1487 				yyolsp = lsp;
1488 				if(yyextra[*yyfnd]){		/* must backup */
1489 					while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
1490 						lsp--;
1491 						unput(*yylastch--);
1492 						}
1493 					}
1494 				yyprevious = YYU(*yylastch);
1495 				yylsp = lsp;
1496 				yyleng = yylastch-yytext+1;
1497 				yytext[yyleng] = 0;
1498 # ifdef LEXDEBUG
1499 				if(debug){
1500 					fprintf(yyout,"\nmatch ");
1501 					sprint(yytext);
1502 					fprintf(yyout," action %d\n",*yyfnd);
1503 					}
1504 # endif
1505 				return(*yyfnd++);
1506 				}
1507 			unput(*yylastch);
1508 			}
1509 		if (yytext[0] == 0  /* && feof(yyin) */)
1510 			{
1511 			yysptr=yysbuf;
1512 			return(0);
1513 			}
1514 #ifndef __cplusplus
1515 		yyprevious = yytext[0] = input();
1516 		if (yyprevious>0)
1517 			output(yyprevious);
1518 #else
1519 		yyprevious = yytext[0] = lex_input();
1520 		if (yyprevious>0)
1521 			lex_output(yyprevious);
1522 #endif
1523 		yylastch=yytext;
1524 # ifdef LEXDEBUG
1525 		if(debug)putchar('\n');
1526 # endif
1527 		}
1528 	}
1529 #if defined(__cplusplus) || defined(__STDC__)
1530 int yyback(int *p, int m)
1531 #else
1532 yyback(p, m)
1533 	int *p;
1534 #endif
1535 {
1536 	if (p==0) return(0);
1537 	while (*p) {
1538 		if (*p++ == m)
1539 			return(1);
1540 	}
1541 	return(0);
1542 }
1543 	/* the following are only used in the lex library */
1544 #if defined(__cplusplus) || defined(__STDC__)
1545 int yyinput(void)
1546 #else
1547 yyinput()
1548 #endif
1549 {
1550 #ifndef __cplusplus
1551 	return(input());
1552 #else
1553 	return(lex_input());
1554 #endif
1555 	}
1556 #if defined(__cplusplus) || defined(__STDC__)
1557 void yyoutput(int c)
1558 #else
1559 yyoutput(c)
1560   int c;
1561 #endif
1562 {
1563 #ifndef __cplusplus
1564 	output(c);
1565 #else
1566 	lex_output(c);
1567 #endif
1568 	}
1569 #if defined(__cplusplus) || defined(__STDC__)
1570 void yyunput(int c)
1571 #else
1572 yyunput(c)
1573    int c;
1574 #endif
1575 {
1576 	unput(c);
1577 	}
1578