|
|
1.1 root 1: # include "stdio.h"
2: # define U(x) x
3: # define NLSTATE yyprevious=YYNEWLINE
4: # define BEGIN yybgin = yysvec + 1 +
5: # define INITIAL 0
6: # define YYLERR yysvec
7: # define YYSTATE (yyestate-yysvec-1)
8: # define YYOPTIM 1
9: # define YYLMAX BUFSIZ
10: # define output(c) putc(c,yyout)
11: # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
12: # define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
13: # define yymore() (yymorfg=1)
14: # define ECHO fprintf(yyout, "%s",yytext)
15: # define REJECT { nstr = yyreject(); goto yyfussy;}
16: int yyleng; extern char yytext[];
17: int yymorfg;
18: extern char *yysptr, yysbuf[];
19: int yytchar;
20: FILE *yyin = {stdin}, *yyout = {stdout};
21: extern int yylineno;
22: struct yysvf {
23: struct yywork *yystoff;
24: struct yysvf *yyother;
25: int *yystops;};
26: struct yysvf *yyestate;
27: extern struct yysvf yysvec[], *yybgin;
28: static char ID[] = "@(#) ld.lex: 1.10 12/1/83";
29: #include "system.h"
30: #include <stdio.h>
31: #include <signal.h>
32: #include "bool.h"
33: #include "paths.h"
34: #include "sgs.h"
35: #include "structs.h" /* global structure definitions */
36: #include "extrns.h" /* external function definitions */
37: #include "y.tab.h" /* tokens generated by yacc */
38:
39: #if !ONEPROC || TRVEC
40: #include "tv.h"
41: #include "ldtv.h"
42: #endif
43:
44: #include "aouthdr.h"
45: #if ONEPROC
46: #include "instr.h"
47: #endif
48:
49: extern char version[]; /* ld version information */
50:
51: /*
52: * There are four start states for the lex parse:
53: *
54: * A : look for initial keyword of a ld directive
55: * MEMoREG : scan a ld directive
56: * COMA : skip a stand-alone comment
57: * COMoMR : skip a comment at the end of a directive
58: */
59:
60: #define RET1(a) {yylval.ivalue=a;moveit(1,a);return(a);}
61: #define RET2(a,b) {yylval.sptr=a;moveit(2,yylval.sptr);return(b);}
62: #define RET3(a,b) {yylval.lptr=a;moveit(3,yylval.lptr);return(b);}
63:
64:
65:
66: #define LSAVSIZE 6
67: static long lsavarea[LSAVSIZE]; /* local save area for integer tokens */
68: static int lsavndx = 0;
69: extern long *savelng();
70:
71: #define CSAVSIZE 1024
72: static char csavarea[CSAVSIZE]; /* local save area for string tokens */
73: static char *csavptr = &csavarea[0];
74: extern char *savestr();
75:
76: char inline[256]; /* global save area for the current input line */
77: char *inptr = &inline[0];
78:
79: char **argptr; /* main procedure argument list */
80: int argcnt; /* and count */
81:
82:
83: extern int in_y_exp; /* in_y_exp :
84: * TRUE : yacc is parsing assignment
85: * FALSE : yacc is not in assignment
86: *
87: * See explanation is ld.yac.
88: */
89:
90: int assigncnt; /* number of assignment slots */
91:
92:
93: #if FLEXNAMES
94: # define STRBASE 6144
95: #else
96: # define STRBASE 3072
97: #endif
98: /*eject*/
99: # define A 2
100: # define MEMoREG 4
101: # define COMA 6
102: # define COMoMR 8
103: # define YYNEWLINE 10
104: yylex(){
105: int nstr; extern int yyprevious;
106: long longint; /* local variables used in processing */
107: char *p; /* numbers and strings */
108: while((nstr = yylook()) >= 0)
109: yyfussy: switch(nstr){
110: case 0:
111: if(yywrap()) return(0); break;
112: case 1:
113: BEGIN COMA;
114: break;
115: case 2:
116: BEGIN COMoMR;
117: break;
118: case 3:
119: BEGIN A;
120: break;
121: case 4:
122: BEGIN MEMoREG;
123: break;
124: case 5:
125: ;
126: break;
127: case 6:
128: { BEGIN MEMoREG; RET1(MEMORY); }
129: break;
130: case 7:
131: { BEGIN MEMoREG; RET1(REGIONS); }
132: break;
133: case 8:
134: { BEGIN MEMoREG; RET1(TV); }
135: break;
136: case 9:
137: RET1(SECTIONS);
138: break;
139: case 10:
140: RET1(DSECT);
141: break;
142: case 11:
143: RET1(NOLOAD);
144: break;
145: case 12:
146: RET1(COPY);
147: break;
148: case 13:
149: RET1(INFO);
150: break;
151: case 14:
152: { BEGIN A; RET1(RBRACE); }
153: break;
154: case 15:
155: RET1(ORG);
156: break;
157: case 16:
158: RET1(LEN);
159: break;
160: case 17:
161: RET1(SPARE);
162: break;
163: case 18:
164: RET1(RANGE);
165: break;
166: case 19:
167: RET1(ASSIGN);
168: break;
169: case 20:
170: RET1(DOT);
171: break;
172: case 21:
173: RET1(RBRACE);
174: break;
175: case 22:
176: RET1(LBRACE);
177: break;
178: case 23:
179: RET1(RPAREN);
180: break;
181: case 24:
182: RET1(LPAREN);
183: break;
184: case 25:
185: RET1(COLON);
186: break;
187: case 26:
188: RET1(SEMICOL);
189: break;
190: case 27:
191: RET1(MINUS);
192: break;
193: case 28:
194: RET1(EQ);
195: break;
196: case 29:
197: RET1(GT);
198: break;
199: case 30:
200: RET1(COMMA);
201: break;
202: case 31:
203: RET1(AND);
204: break;
205: case 32:
206: RET1(ANDAND);
207: break;
208: case 33:
209: RET1(OR);
210: break;
211: case 34:
212: RET1(OROR);
213: break;
214: case 35:
215: RET1(EQEQ);
216: break;
217: case 36:
218: RET1(NE);
219: break;
220: case 37:
221: RET1(BNOT);
222: break;
223: case 38:
224: RET1(NOT);
225: break;
226: case 39:
227: RET1(DIV);
228: break;
229: case 40:
230: RET1(MULT);
231: break;
232: case 41:
233: RET1(PC);
234: break;
235: case 42:
236: RET1(LT);
237: break;
238: case 43:
239: RET1(GE);
240: break;
241: case 44:
242: RET1(LE);
243: break;
244: case 45:
245: RET1(LSHIFT);
246: break;
247: case 46:
248: RET1(RSHIFT);
249: break;
250: case 47:
251: RET1(PLUS);
252: break;
253: case 48:
254: RET1(PLUSEQ);
255: break;
256: case 49:
257: RET1(MINUSEQ);
258: break;
259: case 50:
260: RET1(MULTEQ);
261: break;
262: case 51:
263: RET1(DIVEQ);
264: break;
265: case 52:
266: RET1(ALIGN);
267: break;
268: case 53:
269: RET1(BLOCK);
270: break;
271: case 54:
272: RET1(GROUP);
273: break;
274: case 55:
275: RET1(PHY);
276: break;
277: case 56:
278: {
279: lineno++;
280: inptr = &inline[0];
281: }
282: break;
283: case 57:
284: {
285: *inptr++ = ' ';
286: *inptr = '\0';
287: }
288: break;
289: case 58:
290: {
291: longint = 0L;
292: for(p=yytext+1; *p != '\0'; p++) {
293: longint = longint * 8 + (*p-'0');
294: }
295: RET3(savelng(longint), LONGINT);
296: }
297: break;
298: case 59:
299: {
300: longint = 0L;
301: for(p=yytext; *p != '\0'; p++) {
302: longint = longint * 10 + (*p-'0');
303: }
304: RET3(savelng(longint), LONGINT);
305: }
306: break;
307: case 60:
308: {
309: longint = 0L;
310: for(p=yytext+2; *p != '\0'; p++) {
311: longint = longint << 4;
312: if (*p >= '0' && *p <= '9')
313: longint += *p-'0';
314: else if (*p >= 'a' && *p <= 'f')
315: longint += *p-'a'+10;
316: else longint += *p-'A'+10;
317: }
318: RET3(savelng(longint), LONGINT);
319: }
320: break;
321: case 61:
322: {
323: yyless(yyleng-2);
324: RET2(savestr(yytext), NAME);
325: }
326: break;
327: case 62:
328: {
329: if ( in_y_exp )
330: REJECT;
331: yyless(yyleng-2);
332: RET2(savestr(yytext), FILENAME);
333: }
334: break;
335: case 63:
336: {
337: RET2(savestr(yytext), NAME);
338: }
339: break;
340: case 64:
341: {
342: if ( in_y_exp )
343: REJECT;
344: RET2(savestr(yytext), FILENAME);
345: }
346: break;
347: case -1:
348: break;
349: default:
350: fprintf(yyout,"bad switch yylook %d",nstr);
351: } return(0); }
352: /* end of yylex */
353: /*eject*/
354: main(argc,argv)
355: int argc;
356: char *argv[];
357: {
358:
359: /*
360: * This is the MAIN procdure for PASS 1 of ld
361: *
362: * PASS 1 is the parsing pass:
363: * 1. The ld command line, and any specified ifiles, are
364: * scanned for good syntax.
365: * 2. Control blocks are constructed, containing the information
366: * extracted from the input.
367: * 3. If there are no errors, the control blocks are written out
368: * to a "transfer file", for reading by PASS 2.
369: * 4. If there are no errors, PASS 2 is called via a system
370: * "execl" call.
371: */
372:
373: /*
374: * Initialize PASS 1
375: */
376:
377: initpass1();
378: argptr = argv;
379: argcnt = argc;
380: if ( argcnt <= 1 )
381: {
382: fprintf( stderr, "Usage: %sld [ options ] file ...\n", SGS );
383: exit(1);
384: }
385:
386: /*
387: * Process the command-line arguments to ld
388: */
389:
390: lineno = 0;
391: curfilnm = savefn("*command line*");
392:
393: while( --argcnt )
394: if( **++argptr == '-' )
395: /*
396: * The argument is a flag
397: */
398: pflags( ++(*argptr), FALSE );
399: else {
400: /*
401: * The argument is a file name
402: */
403: BEGIN A;
404: filespec(*argptr);
405: }
406:
407: /*
408: * Perform a consistency check among the ld flags:
409: * 1. "-h" and "-X" flags
410: * 2. "-ild", "-r", and "-a" flags
411: * 3. "-r" and "-s" flags
412: * 4. "-p" and "-B" flags
413: *
414: * Assign default values to the ld flags
415: * 1. "-h" flag
416: * 2. "-a" flag
417: * 3. "-p" flag
418: */
419:
420: if( Xflag )
421: if( hflag > 0 ) {
422: if( hflag < sizeof(AOUTHDR) )
423: lderror(1, 0,NULL, "optional header size (%d bytes) is too small to contain the UNIX a.out header (%d bytes)",
424: hflag, sizeof(AOUTHDR) );
425: }
426: else
427: hflag = sizeof(AOUTHDR);
428: #if ILDOPT
429: if (ildflag) {
430: rflag = 1;
431: if (sflag) {
432: lderror (0, 0, NULL, "both -ild and -s flags are set. -s flag turned off");
433: sflag = 0;
434: }
435: }
436: #endif
437: if( rflag && sflag ) {
438: lderror(0, 0,NULL, "both -r and -s flags are set. -s flag turned off" );
439: sflag = 0;
440: }
441: if ( Bflag && (pflag > 0) && (pflag < Bflag)) {
442: lderror(0, 0, NULL, "pflag(%d) less than Bflag, set to value of Bflag(%d)\n",
443: pflag, Bflag);
444: pflag = Bflag;
445: }
446: if( ! rflag )
447: aflag = 1;
448:
449: /*
450: * Supply version information
451: */
452:
453: if( Vflag ) {
454: fprintf( stderr, "\n%sld : %s : Version %s",
455: SGSNAME, RELEASE, version );
456: if( Vflag == 2 ) {
457: #if AR16WR
458: fprintf( stderr, " : PDP 11/70-45 : " );
459: #endif
460: #if AR32WR
461: fprintf( stderr, " : VAX 11/780 : " );
462: #endif
463: #if ! AR16WR && ! AR32WR
464: #ifdef u3b
465: fprintf( stderr, " : 3B-20 : " );
466: #else
467: fprintf( stderr, " : non-DEC : ");
468: #endif
469: #endif
470: #if TS
471: fprintf( stderr, "UN*X TS" );
472: #else
473: fprintf( stderr, "UN*X" );
474: #endif
475: }
476: fprintf( stderr, "\n" );
477: }
478:
479: /*
480: * Exit if any errors were found, or if this is a "parse only"
481: * run
482: */
483:
484: if( (errlev != 0) || (cflag == 1) ) {
485: #if !ONEPROC
486: unlink( trnname );
487: #endif
488: exit(errlev);
489: }
490:
491: /*
492: * Call PASS 2
493: */
494:
495: #if ONEPROC
496: pass2();
497: }
498: #else
499: callpass2();
500:
501: unlink( trnname );
502: lderror(2, 0,NULL, "failure to load pass 2 of %sld", SGS);
503: }
504: /*eject*/
505: ldexit()
506: {
507:
508: /*
509: * PASS 1: clean up and exit after a fatal error
510: */
511:
512: signal(SIGINT, SIG_IGN);
513: signal(SIGQUIT, SIG_DFL);
514: signal(SIGTERM, SIG_IGN);
515: signal(SIGHUP, SIG_DFL);
516:
517: exit(13); /* unlucky break */
518: }
519: /*eject*/
520: #endif
521: long *
522: savelng(l)
523: long l;
524: {
525:
526: /*
527: * Copy a long token into local save area and return a pointer to it.
528: *
529: * The save area is used as a circular buffer
530: */
531:
532: lsavndx++;
533: lsavndx %= LSAVSIZE;
534: lsavarea[lsavndx] = l;
535:
536: return( &lsavarea[lsavndx] );
537: }
538:
539:
540:
541:
542: char *
543: savestr(p)
544: char *p;
545: {
546:
547: /*
548: * Copy a string into local save area and return a pointer to it
549: *
550: * The save area is used as a circular buffer
551: */
552:
553: register char *saveptr;
554:
555: if( csavptr > (csavarea + CSAVSIZE - 256) )
556: csavptr = csavarea;
557: saveptr = csavptr;
558:
559: while( *csavptr++ = *p++ );
560:
561: return( saveptr );
562: }
563:
564:
565:
566:
567: moveit(type, value)
568: int type, value;
569: {
570: register char *p;
571:
572: p = &yytext[0];
573:
574: while( *inptr++ = *p++ );
575: inptr--;
576:
577: #if DEBUG
578: if( dflag > 3 ) {
579: fprintf(stderr, "line: <%s> return: <", inline);
580: switch( type ) {
581: case 1:
582: fprintf(stderr, "%d>\n", value);
583: break;
584: case 2:
585: fprintf(stderr, "%s>\n", (char *) value);
586: break;
587: case 3:
588: fprintf(stderr, "%08lx>\n", * (long *) value);
589: break;
590: }
591: }
592: #endif
593: }
594: /*eject*/
595: initpass1()
596: {
597: register int oldmode;
598: int ldexit();
599: #if ONEPROC
600: long times();
601: #endif
602:
603: /*
604: * Set the following signals to be caught, unless ld is running in the
605: * background. In this case, leave them set at "ignore"
606: */
607:
608: if( signal(SIGINT, ldexit) == SIG_IGN )
609: signal(SIGINT, SIG_IGN);
610: if( signal(SIGHUP, ldexit) == SIG_IGN )
611: signal(SIGHUP, SIG_IGN);
612: if( signal(SIGQUIT, ldexit) == SIG_IGN )
613: signal(SIGQUIT, SIG_IGN);
614:
615:
616: #if ONEPROC
617: ttime = times(&ptimes);
618: #else
619: /*
620: * Create the "transfer file" used to pass information to PASS 2
621: */
622:
623: sprintf(trnname, "%s/%s", TMPDIR, "ldXXXXX");
624: mktemp(trnname);
625:
626: oldmode = umask( 0 );
627: if( close( creat(trnname,0644) ) == -1 ) {
628: umask( oldmode );
629: lderror(2, 0,NULL, "can't create intermediate %sld file %s",
630: SGS, trnname);
631: }
632: umask( oldmode );
633: #endif
634:
635: /*
636: * Allocate the global file name save area
637: */
638:
639: strbase = myalloc(STRBASE);
640: strnext = strbase;
641: strlimit = strbase + STRBASE;
642:
643: #if ONEPROC && (!NOSDP)
644: /*
645: * Initialize the Software Demand Paging System
646: */
647: syminit();
648: #endif
649: }
650: /*eject*/
651: #if !ONEPROC
652: callpass2()
653: {
654:
655: /*
656: * Output PASS 1 information to the "transfer file"
657: *
658: * 1. reserve space for flags and list headers
659: * 2. output lists
660: * 3. output flags and list headers
661: */
662:
663: trnfdes = fopen(trnname, "w");
664: skp_tf_hdr();
665: wrt_tf();
666: wrt_tf_hdr();
667: fclose( trnfdes );
668:
669: /*
670: * Exit, if this is a "generate transfer file run" only
671: */
672:
673: if( cflag == 2 ) {
674: fprintf( stderr, "ld transfer file name: %s\n", trnname );
675: exit(0);
676: }
677: #if DEBUG
678: if( dflag > 2 )
679: fprintf( stderr, "ld transfer file name: %s\n", trnname );
680: #endif
681:
682: /*
683: * Execute PASS 2
684: */
685:
686: execl(LD2, LD2, trnname, 0);
687:
688: }
689: /*eject*/
690: skp_tf_hdr()
691: {
692:
693: /*
694: * Reserve space for control and descriptor information collected during
695: * PASS 1
696: *
697: * This information is of fixed length, and comes at the very beginning
698: * of the transfer file
699: */
700:
701: register long length;
702:
703: length =
704: 7 * sizeof(int) + /* list sizes */
705: 13 * sizeof(char) + /* flags */
706: #if UNIX || XL
707: 1 * sizeof(char) + /* xflag */
708: #endif
709: #if ILDOPT
710: 1 * sizeof(char) + /* ildflag */
711: #endif
712: #if PAGING
713: 1 * sizeof(char) + /* Fflag */
714: #endif
715: #if PAGING
716: 1 * sizeof(char) + /* zflag */
717: #endif
718: #if COMMON
719: 2 * sizeof(char) + /* tflag and Mflag */
720: #endif
721: 3 * sizeof(int) + /* control values */
722: 3 * sizeof(short) + /* VStamp, fill and magic */
723: 128 + /* output file name */
724: 8 + /* program entry pt */
725: sizeof(TVINFO) + /* tv information */
726: 1 * sizeof(int); /* flags + counts */
727:
728: fseek( trnfdes, length, 0 );
729: }
730: /*eject*/
731: wrt_tf()
732: {
733:
734: /*
735: * Output the bulk of the information extracted from PASS 1:
736: *
737: * 1. The names of input ifiles, input *.o and archive files, and
738: * output sections
739: * 2. The data structures describing the ld directives
740: */
741:
742: MEMTYPE *outds1();
743: REGION *outds2();
744: ACTITEM *outds3(), *outds4(), *outds6();
745: TVASSIGN *outds8();
746:
747: /*
748: * 1. Output saved strings
749: */
750:
751: fwrite( strbase, 1, (strnext - strbase), trnfdes );
752:
753:
754: /*
755: * 2a. Output DEFSYM data structures
756: */
757:
758: symcnt = 0;
759: if( symlist.head ) {
760: register ACTITEM *a;
761: a = (ACTITEM *) symlist.head;
762: while( a ) {
763: a = outds3(a);
764: symcnt++;
765: }
766: }
767:
768: /*
769: * 2b. Output MEMTYPE data structures
770: */
771:
772: memcnt = 0;
773: if( memlist.head ) {
774: register MEMTYPE *m;
775: m = (MEMTYPE *) memlist.head;
776: while( m ) {
777: m = outds1(m);
778: memcnt++;
779: }
780: }
781:
782: /*
783: * 2c. Output REGION data structures
784: */
785:
786: regcnt = 0;
787: if( reglist.head ) {
788: register REGION *r;
789: r = (REGION *) reglist.head;
790: while( r ) {
791: r = outds2(r);
792: regcnt++;
793: }
794: }
795:
796: /*
797: * 2d. Output information on input *.o and archive library files
798: */
799:
800: ldfcnt = 0;
801: if( ldfilist.head ) {
802: register ACTITEM *a;
803: a = (ACTITEM *) ldfilist.head;
804: while( a ) {
805: a = outds3(a);
806: ldfcnt++;
807: }
808: }
809:
810:
811: /*
812: * 2e. Output information on output sections
813: */
814:
815: bldcnt = 0;
816: if( bldoutsc.head ) {
817: register ACTITEM *a;
818: a = (ACTITEM *) bldoutsc.head;
819: while( a ) {
820: a = outds4(a);
821: bldcnt++;
822: }
823: }
824:
825:
826: /*
827: * 2f. Output information on assignments
828: */
829:
830: expcnt = 0;
831: if( explist.head ) {
832: register ACTITEM *a;
833: a = (ACTITEM *) explist.head;
834: while( a ) {
835: a = outds6(a);
836: expcnt++;
837: }
838: }
839:
840: /*
841: * 2g. Output information on slot assignments
842: */
843:
844: tvslotcnt = 0;
845: if (tvslot1 != NULL) {
846: register TVASSIGN *s;
847: s = tvslot1;
848: while (s != NULL) {
849: s = outds8(s);
850: ++tvslotcnt;
851: }
852: }
853: }
854: /*eject*/
855: wrt_tf_hdr()
856: {
857:
858: /*
859: * Output control and descriptor information obtained during PASS 1
860: *
861: * This information is of fixed length, and comes at the very beginning
862: * of the transfer file
863: */
864:
865: int length;
866:
867: fseek( trnfdes, 0L, 0 );
868:
869: /*
870: * Output the sizes of the lists built during PASS 1
871: *
872: * 1. symbol definition/undefinition
873: * 2. MEMORY directives
874: * 3. REGIONS directives
875: * 4. input *.o and archive library files
876: * 5. output sections
877: * 6. assignment directives
878: * 7. tv slot assignment directives
879: */
880:
881: fwrite( &symcnt, sizeof(int), 1, trnfdes );
882: fwrite( &memcnt, sizeof(int), 1, trnfdes );
883: fwrite( ®cnt, sizeof(int), 1, trnfdes );
884: fwrite( &ldfcnt, sizeof(int), 1, trnfdes );
885: fwrite( &bldcnt, sizeof(int), 1, trnfdes );
886: fwrite( &expcnt, sizeof(int), 1, trnfdes );
887: fwrite(&tvslotcnt, sizeof(int), 1, trnfdes);
888:
889: /*
890: * Output the ld control flags
891: */
892:
893: fwrite( &aflag, sizeof(char), 1, trnfdes );
894: fwrite( &cflag, sizeof(char), 1, trnfdes );
895: fwrite( &dflag, sizeof(char), 1, trnfdes );
896: fwrite( &iflag, sizeof(char), 1, trnfdes );
897: fwrite( &mflag, sizeof(char), 1, trnfdes );
898: fwrite( &rflag, sizeof(char), 1, trnfdes );
899: fwrite( &sflag, sizeof(char), 1, trnfdes );
900: fwrite( &tvflag, sizeof(char), 1, trnfdes );
901: fwrite( &Hflag, sizeof(char), 1, trnfdes );
902: fwrite( &Nflag, sizeof(char), 1, trnfdes );
903: fwrite( &Sflag, sizeof(char), 1, trnfdes );
904: fwrite( &Vflag, sizeof(char), 1, trnfdes );
905: fwrite( &Xflag, sizeof(char), 1, trnfdes );
906: fwrite( &hflag, sizeof(int), 1, trnfdes );
907: fwrite( &pflag, sizeof(int), 1, trnfdes );
908: fwrite( &Bflag, sizeof(int), 1, trnfdes );
909: fwrite( &VSflag, sizeof(short), 1, trnfdes);
910: #if UNIX || XL
911: fwrite( &xflag, sizeof(char), 1, trnfdes );
912: #endif
913: #if COMMON
914: fwrite( &tflag, sizeof(char), 1, trnfdes );
915: fwrite( &Mflag, sizeof(char), 1, trnfdes );
916: #endif
917: #if PAGING
918: fwrite( &Fflag, sizeof(char), 1, trnfdes );
919: #endif
920: #if PAGING
921: fwrite( &zflag, sizeof(char), 1, trnfdes );
922: #endif
923: #if ILDOPT
924: fwrite( &ildflag, sizeof(char), 1, trnfdes );
925: #endif
926:
927: /*
928: * Output various values extracted from the parse
929: */
930:
931: fwrite( &globfill, sizeof(short), 1, trnfdes );
932: fwrite( &magic, sizeof(unsigned short), 1, trnfdes );
933:
934: fwrite( outfilnm, 128, 1, trnfdes );
935: fwrite( epsymbol, 8, 1, trnfdes );
936:
937: /* convert filename from ptr to index */
938: if (tvspec.tvinflnm != NULL)
939: tvspec.tvinflnm = (char *) ((int) tvspec.tvinflnm - (int) strbase);
940: fwrite( &tvspec, sizeof(TVINFO), 1, trnfdes );
941:
942: /*
943: * Output the size of the saved strings
944: */
945:
946: length = strnext - strbase;
947: fwrite( &length, sizeof(int), 1, trnfdes );
948: }
949: /*eject*/
950: MEMTYPE *
951: outds1(m)
952: MEMTYPE *m;
953: {
954:
955: /*
956: * Output one MEMTYPE data structure
957: */
958:
959: fwrite( m, 1, sizeof(MEMTYPE), trnfdes );
960:
961: return( m->mtnext );
962: }
963:
964:
965:
966: REGION *
967: outds2(r)
968: REGION *r;
969: {
970:
971: /*
972: * Output one REGION data structure
973: */
974:
975: fwrite( r, 1, sizeof(REGION), trnfdes );
976:
977: return( r->rgnext );
978: }
979: /*eject*/
980: ACTITEM *
981: outds3(a)
982: ACTITEM *a;
983: {
984:
985: /*
986: * Output one AILDFILE, AILDLBRY, AIADFILE, or AIDFNSYM data structure
987: *
988: * Convert a "pointer to a string" to a "index to a string"
989: */
990:
991: a->ldlbry.aiinflnm = (char *) ((int) a->ldlbry.aiinflnm - (int) strbase);
992: a->ldlbry.aifilnam = (char *) ((int) a->ldlbry.aifilnam - (int) strbase);
993:
994: fwrite( a, 1, sizeof(ACTITEM), trnfdes );
995:
996: return( a->ldlbry.ainext );
997: }
998:
999:
1000:
1001: ACTITEM *
1002: outds4(a)
1003: ACTITEM *a;
1004: {
1005:
1006: /*
1007: * Output one AIDFNSCN or AIDFNGRP data structure
1008: *
1009: * Convert a "pointer to a string" to a "index to a string"
1010: */
1011:
1012: register ACTITEM *anext, *b;
1013: ACTITEM *outds5();
1014:
1015: anext = a->dfnscn.ainext;
1016: a->dfnscn.aiinflnm = (char *) ((int) a->dfnscn.aiinflnm - (int) strbase);
1017:
1018: fwrite( a, 1, sizeof(ACTITEM), trnfdes );
1019:
1020: b = (ACTITEM *) a->dfnscn.sectspec.head;
1021: switch( a->dfnscn.aitype ) {
1022: case AIDFNSCN:
1023: while( b )
1024: switch( b->addscn.aitype ) {
1025: case AIADDSCN:
1026: b = outds5(b);
1027: break;
1028: case AIADFILE:
1029: b = outds3(b);
1030: break;
1031: case AIEVEXPR:
1032: b = outds6(b);
1033: break;
1034: }
1035: break;
1036: case AIDFNGRP:
1037: while( b )
1038: b = outds4(b);
1039: break;
1040: default:
1041: lderror(2,0,NULL,"failure dumping an AIDFNxxx data structure\n");
1042: }
1043:
1044: return( a->dfnscn.ainext );
1045: }
1046:
1047:
1048:
1049: ACTITEM *
1050: outds5(a)
1051: ACTITEM *a;
1052: {
1053:
1054: /*
1055: * Output one AIADDSCN data structure
1056: *
1057: * Convert a "pointer to a string" to a "index to a string"
1058: */
1059:
1060: a->addscn.aiinflnm = (char *) ((int) a->addscn.aiinflnm - (int) strbase);
1061: a->addscn.aiscfile = (char *) ((int) a->addscn.aiscfile - (int) strbase);
1062:
1063: fwrite( a, 1, sizeof(ACTITEM), trnfdes );
1064:
1065: return( a->addscn.ainext );
1066: }
1067:
1068:
1069:
1070: ACTITEM *
1071: outds6(a)
1072: ACTITEM *a;
1073: {
1074:
1075: /*
1076: * Output one AIEVEXPR data structure
1077: *
1078: * Convert a "pointer to a string" to a "index to a string"
1079: */
1080:
1081: a->evexpr.aiinflnm = (char *) ((int) a->evexpr.aiinflnm - (int) strbase);
1082:
1083: fwrite( a, 1, sizeof(ACTITEM), trnfdes );
1084:
1085: outds7( a->evexpr.aiexptr );
1086:
1087: return( a->evexpr.ainext );
1088: }
1089:
1090:
1091:
1092: outds7(e)
1093: ENODE *e;
1094: {
1095:
1096: /*
1097: * Output one ENODE data structure
1098: */
1099:
1100: switch( (unsigned) e->gnode.exop ) {
1101: case INT:
1102: case DOT:
1103: fwrite( e, 1, sizeof(ENODE), trnfdes );
1104: break;
1105: case NAME:
1106: fwrite( e, 1, sizeof(ENODE), trnfdes );
1107: break;
1108: default:
1109: fwrite( e, 1, sizeof(ENODE), trnfdes );
1110: if( e->gnode.exleft )
1111: outds7(e->gnode.exleft);
1112: if( e->gnode.exright )
1113: outds7(e->gnode.exright);
1114: }
1115:
1116: }
1117:
1118:
1119:
1120: TVASSIGN *
1121: outds8(s)
1122: TVASSIGN *s;
1123: {
1124:
1125: /*
1126: * Output one tv slot assignment (TVASSIGN) structure
1127: */
1128:
1129: fwrite( s, sizeof(TVASSIGN), 1, trnfdes);
1130: return( s->nxtslot );
1131: }
1132: #endif
1133: int yyvstop[] = {
1134: 0,
1135:
1136: 57,
1137: 0,
1138:
1139: 56,
1140: 0,
1141:
1142: 38,
1143: 0,
1144:
1145: 63,
1146: 64,
1147: 0,
1148:
1149: 41,
1150: 0,
1151:
1152: 31,
1153: 0,
1154:
1155: 24,
1156: 0,
1157:
1158: 23,
1159: 0,
1160:
1161: 40,
1162: 0,
1163:
1164: 47,
1165: 0,
1166:
1167: 30,
1168: 0,
1169:
1170: 27,
1171: 0,
1172:
1173: 20,
1174: 63,
1175: 64,
1176: 0,
1177:
1178: 39,
1179: 64,
1180: 0,
1181:
1182: 58,
1183: 59,
1184: 63,
1185: 64,
1186: 0,
1187:
1188: 59,
1189: 63,
1190: 64,
1191: 0,
1192:
1193: 25,
1194: 0,
1195:
1196: 26,
1197: 0,
1198:
1199: 42,
1200: 0,
1201:
1202: 28,
1203: 0,
1204:
1205: 29,
1206: 0,
1207:
1208: 63,
1209: 64,
1210: 0,
1211:
1212: 63,
1213: 64,
1214: 0,
1215:
1216: 63,
1217: 64,
1218: 0,
1219:
1220: 63,
1221: 64,
1222: 0,
1223:
1224: 63,
1225: 64,
1226: 0,
1227:
1228: 63,
1229: 64,
1230: 0,
1231:
1232: 63,
1233: 64,
1234: 0,
1235:
1236: 63,
1237: 64,
1238: 0,
1239:
1240: 63,
1241: 64,
1242: 0,
1243:
1244: 63,
1245: 64,
1246: 0,
1247:
1248: 63,
1249: 64,
1250: 0,
1251:
1252: 63,
1253: 64,
1254: 0,
1255:
1256: 63,
1257: 64,
1258: 0,
1259:
1260: 63,
1261: 64,
1262: 0,
1263:
1264: 63,
1265: 64,
1266: 0,
1267:
1268: 63,
1269: 64,
1270: 0,
1271:
1272: 22,
1273: 0,
1274:
1275: 33,
1276: 0,
1277:
1278: 21,
1279: 0,
1280:
1281: 37,
1282: 0,
1283:
1284: 39,
1285: 64,
1286: 0,
1287:
1288: 63,
1289: 64,
1290: 0,
1291:
1292: 63,
1293: 64,
1294: 0,
1295:
1296: 63,
1297: 64,
1298: 0,
1299:
1300: 63,
1301: 64,
1302: 0,
1303:
1304: 63,
1305: 64,
1306: 0,
1307:
1308: 63,
1309: 64,
1310: 0,
1311:
1312: 16,
1313: 63,
1314: 64,
1315: 0,
1316:
1317: 15,
1318: 63,
1319: 64,
1320: 0,
1321:
1322: 63,
1323: 64,
1324: 0,
1325:
1326: 17,
1327: 63,
1328: 64,
1329: 0,
1330:
1331: 14,
1332: 21,
1333: 0,
1334:
1335: 5,
1336: 0,
1337:
1338: 5,
1339: 57,
1340: 0,
1341:
1342: 5,
1343: 0,
1344:
1345: 5,
1346: 0,
1347:
1348: 36,
1349: 0,
1350:
1351: 64,
1352: 0,
1353:
1354: 32,
1355: 0,
1356:
1357: 50,
1358: 0,
1359:
1360: 48,
1361: 0,
1362:
1363: 49,
1364: 0,
1365:
1366: 64,
1367: 0,
1368:
1369: 1,
1370: 0,
1371:
1372: 64,
1373: 0,
1374:
1375: 51,
1376: 0,
1377:
1378: 58,
1379: 59,
1380: 63,
1381: 64,
1382: 0,
1383:
1384: 63,
1385: 64,
1386: 0,
1387:
1388: 45,
1389: 0,
1390:
1391: 44,
1392: 0,
1393:
1394: 35,
1395: 0,
1396:
1397: 43,
1398: 0,
1399:
1400: 46,
1401: 0,
1402:
1403: 63,
1404: 64,
1405: 0,
1406:
1407: 63,
1408: 64,
1409: 0,
1410:
1411: 63,
1412: 64,
1413: 0,
1414:
1415: 63,
1416: 64,
1417: 0,
1418:
1419: 63,
1420: 64,
1421: 0,
1422:
1423: 63,
1424: 64,
1425: 0,
1426:
1427: 63,
1428: 64,
1429: 0,
1430:
1431: 63,
1432: 64,
1433: 0,
1434:
1435: 63,
1436: 64,
1437: 0,
1438:
1439: 63,
1440: 64,
1441: 0,
1442:
1443: 63,
1444: 64,
1445: 0,
1446:
1447: 8,
1448: 63,
1449: 64,
1450: 0,
1451:
1452: 63,
1453: 64,
1454: 0,
1455:
1456: 63,
1457: 64,
1458: 0,
1459:
1460: 63,
1461: 64,
1462: 0,
1463:
1464: 63,
1465: 64,
1466: 0,
1467:
1468: 34,
1469: 0,
1470:
1471: 2,
1472: 0,
1473:
1474: 63,
1475: 64,
1476: 0,
1477:
1478: 63,
1479: 64,
1480: 0,
1481:
1482: 63,
1483: 64,
1484: 0,
1485:
1486: 63,
1487: 64,
1488: 0,
1489:
1490: 63,
1491: 64,
1492: 0,
1493:
1494: 63,
1495: 64,
1496: 0,
1497:
1498: 63,
1499: 64,
1500: 0,
1501:
1502: 63,
1503: 64,
1504: 0,
1505:
1506: 63,
1507: 64,
1508: 0,
1509:
1510: 63,
1511: 64,
1512: 0,
1513:
1514: 3,
1515: 0,
1516:
1517: 4,
1518: 0,
1519:
1520: 61,
1521: 62,
1522: 0,
1523:
1524: 62,
1525: 0,
1526:
1527: 60,
1528: 63,
1529: 64,
1530: 0,
1531:
1532: 63,
1533: 64,
1534: 0,
1535:
1536: 63,
1537: 64,
1538: 0,
1539:
1540: 63,
1541: 64,
1542: 0,
1543:
1544: 63,
1545: 64,
1546: 0,
1547:
1548: 63,
1549: 64,
1550: 0,
1551:
1552: 63,
1553: 64,
1554: 0,
1555:
1556: 63,
1557: 64,
1558: 0,
1559:
1560: 63,
1561: 64,
1562: 0,
1563:
1564: 55,
1565: 63,
1566: 64,
1567: 0,
1568:
1569: 63,
1570: 64,
1571: 0,
1572:
1573: 63,
1574: 64,
1575: 0,
1576:
1577: 63,
1578: 64,
1579: 0,
1580:
1581: 63,
1582: 64,
1583: 0,
1584:
1585: 63,
1586: 64,
1587: 0,
1588:
1589: 63,
1590: 64,
1591: 0,
1592:
1593: 63,
1594: 64,
1595: 0,
1596:
1597: 63,
1598: 64,
1599: 0,
1600:
1601: 63,
1602: 64,
1603: 0,
1604:
1605: 63,
1606: 64,
1607: 0,
1608:
1609: 63,
1610: 64,
1611: 0,
1612:
1613: 16,
1614: 63,
1615: 64,
1616: 0,
1617:
1618: 15,
1619: 63,
1620: 64,
1621: 0,
1622:
1623: 63,
1624: 64,
1625: 0,
1626:
1627: 63,
1628: 64,
1629: 0,
1630:
1631: 63,
1632: 64,
1633: 0,
1634:
1635: 63,
1636: 64,
1637: 0,
1638:
1639: 63,
1640: 64,
1641: 0,
1642:
1643: 12,
1644: 63,
1645: 64,
1646: 0,
1647:
1648: 63,
1649: 64,
1650: 0,
1651:
1652: 63,
1653: 64,
1654: 0,
1655:
1656: 13,
1657: 63,
1658: 64,
1659: 0,
1660:
1661: 63,
1662: 64,
1663: 0,
1664:
1665: 63,
1666: 64,
1667: 0,
1668:
1669: 63,
1670: 64,
1671: 0,
1672:
1673: 63,
1674: 64,
1675: 0,
1676:
1677: 63,
1678: 64,
1679: 0,
1680:
1681: 63,
1682: 64,
1683: 0,
1684:
1685: 63,
1686: 64,
1687: 0,
1688:
1689: 63,
1690: 64,
1691: 0,
1692:
1693: 63,
1694: 64,
1695: 0,
1696:
1697: 63,
1698: 64,
1699: 0,
1700:
1701: 63,
1702: 64,
1703: 0,
1704:
1705: 63,
1706: 64,
1707: 0,
1708:
1709: 63,
1710: 64,
1711: 0,
1712:
1713: 63,
1714: 64,
1715: 0,
1716:
1717: 63,
1718: 64,
1719: 0,
1720:
1721: 63,
1722: 64,
1723: 0,
1724:
1725: 63,
1726: 64,
1727: 0,
1728:
1729: 52,
1730: 63,
1731: 64,
1732: 0,
1733:
1734: 53,
1735: 63,
1736: 64,
1737: 0,
1738:
1739: 10,
1740: 63,
1741: 64,
1742: 0,
1743:
1744: 54,
1745: 63,
1746: 64,
1747: 0,
1748:
1749: 63,
1750: 64,
1751: 0,
1752:
1753: 63,
1754: 64,
1755: 0,
1756:
1757: 63,
1758: 64,
1759: 0,
1760:
1761: 63,
1762: 64,
1763: 0,
1764:
1765: 63,
1766: 64,
1767: 0,
1768:
1769: 63,
1770: 64,
1771: 0,
1772:
1773: 63,
1774: 64,
1775: 0,
1776:
1777: 18,
1778: 63,
1779: 64,
1780: 0,
1781:
1782: 17,
1783: 63,
1784: 64,
1785: 0,
1786:
1787: 63,
1788: 64,
1789: 0,
1790:
1791: 63,
1792: 64,
1793: 0,
1794:
1795: 63,
1796: 64,
1797: 0,
1798:
1799: 6,
1800: 63,
1801: 64,
1802: 0,
1803:
1804: 11,
1805: 63,
1806: 64,
1807: 0,
1808:
1809: 63,
1810: 64,
1811: 0,
1812:
1813: 63,
1814: 64,
1815: 0,
1816:
1817: 19,
1818: 63,
1819: 64,
1820: 0,
1821:
1822: 16,
1823: 63,
1824: 64,
1825: 0,
1826:
1827: 7,
1828: 63,
1829: 64,
1830: 0,
1831:
1832: 63,
1833: 64,
1834: 0,
1835:
1836: 9,
1837: 63,
1838: 64,
1839: 0,
1840: 0};
1841: # define YYTYPE int
1842: struct yywork { YYTYPE verify, advance; } yycrank[] = {
1843: 0,0, 0,0, 0,0, 0,0,
1844: 0,0, 0,0, 0,0, 0,0,
1845: 0,0, 0,0, 1,11, 1,12,
1846: 3,11, 3,12, 11,11, 0,0,
1847: 0,0, 0,0, 0,0, 0,0,
1848: 0,0, 0,0, 0,0, 0,0,
1849: 0,0, 0,0, 0,0, 0,0,
1850: 0,0, 0,0, 0,0, 0,0,
1851: 0,0, 1,11, 0,0, 3,11,
1852: 3,13, 11,11, 0,0, 3,14,
1853: 3,15, 3,16, 16,70, 3,17,
1854: 3,18, 3,19, 3,20, 3,21,
1855: 3,22, 3,23, 3,24, 3,25,
1856: 3,26, 3,26, 3,26, 3,26,
1857: 3,26, 3,26, 3,26, 3,26,
1858: 3,26, 3,27, 3,28, 3,29,
1859: 3,30, 3,31, 8,66, 9,67,
1860: 3,32, 3,33, 3,34, 3,35,
1861: 3,14, 3,14, 3,36, 3,14,
1862: 3,37, 3,14, 3,14, 3,14,
1863: 3,38, 3,39, 3,14, 3,40,
1864: 3,14, 3,41, 3,42, 3,43,
1865: 3,14, 3,14, 3,14, 3,14,
1866: 3,14, 3,14, 10,67, 13,68,
1867: 19,71, 20,72, 3,14, 22,73,
1868: 3,44, 3,45, 3,14, 3,14,
1869: 3,14, 3,14, 3,46, 3,14,
1870: 3,14, 3,14, 3,14, 3,14,
1871: 3,14, 3,14, 3,14, 3,47,
1872: 3,14, 3,14, 3,14, 3,14,
1873: 3,14, 3,14, 3,14, 3,14,
1874: 3,14, 3,14, 3,48, 3,49,
1875: 3,50, 3,51, 5,52, 25,78,
1876: 25,78, 25,78, 25,78, 25,78,
1877: 25,78, 25,78, 25,78, 25,26,
1878: 25,26, 29,80, 29,81, 30,82,
1879: 31,83, 31,84, 32,85, 33,86,
1880: 5,53, 34,87, 5,14, 5,14,
1881: 6,52, 35,88, 36,89, 37,90,
1882: 5,14, 38,91, 39,92, 5,54,
1883: 5,14, 5,14, 5,55, 40,93,
1884: 41,94, 5,56, 5,57, 5,14,
1885: 42,95, 43,96, 6,53, 25,79,
1886: 6,14, 6,14, 44,97, 45,98,
1887: 46,99, 7,64, 6,14, 47,100,
1888: 5,58, 6,54, 6,14, 6,14,
1889: 6,55, 7,65, 7,12, 6,56,
1890: 6,57, 6,14, 49,101, 5,59,
1891: 52,102, 53,85, 5,60, 54,104,
1892: 55,105, 5,61, 5,62, 56,106,
1893: 53,103, 57,107, 6,58, 25,79,
1894: 58,97, 59,109, 60,110, 61,111,
1895: 5,63, 62,112, 66,113, 58,108,
1896: 7,64, 6,59, 67,114, 69,115,
1897: 6,60, 85,118, 7,66, 6,61,
1898: 6,62, 76,116, 86,119, 7,64,
1899: 7,64, 7,64, 87,120, 88,121,
1900: 89,122, 90,123, 6,63, 91,124,
1901: 7,64, 92,125, 69,115, 93,126,
1902: 14,14, 94,127, 95,128, 97,129,
1903: 76,116, 7,64, 98,130, 99,131,
1904: 100,126, 103,132, 14,14, 14,69,
1905: 14,14, 14,14, 14,14, 14,14,
1906: 14,14, 14,14, 14,14, 14,14,
1907: 14,14, 14,14, 104,133, 105,134,
1908: 106,135, 107,136, 108,137, 109,138,
1909: 7,64, 14,14, 14,14, 14,14,
1910: 14,14, 14,14, 14,14, 14,14,
1911: 14,14, 14,14, 14,14, 14,14,
1912: 14,14, 14,14, 14,14, 14,14,
1913: 14,14, 14,14, 14,14, 14,14,
1914: 14,14, 14,14, 14,14, 14,14,
1915: 14,14, 14,14, 14,14, 110,139,
1916: 111,141, 110,140, 112,142, 14,14,
1917: 118,143, 14,14, 14,14, 14,14,
1918: 14,14, 14,14, 14,14, 14,14,
1919: 14,14, 14,14, 14,14, 14,14,
1920: 14,14, 14,14, 14,14, 14,14,
1921: 14,14, 14,14, 14,14, 14,14,
1922: 14,14, 14,14, 14,14, 14,14,
1923: 14,14, 14,14, 14,14, 24,74,
1924: 119,144, 120,145, 121,146, 122,147,
1925: 123,148, 24,75, 124,149, 125,150,
1926: 127,151, 24,74, 24,76, 24,74,
1927: 24,74, 24,74, 24,74, 24,74,
1928: 24,74, 24,74, 24,74, 24,74,
1929: 24,74, 128,152, 129,153, 130,154,
1930: 24,77, 131,155, 132,156, 133,157,
1931: 24,74, 24,74, 24,74, 24,74,
1932: 24,74, 24,74, 24,74, 24,74,
1933: 24,74, 24,74, 24,74, 24,74,
1934: 24,74, 24,74, 24,74, 24,74,
1935: 24,74, 24,74, 24,74, 24,74,
1936: 24,74, 24,74, 24,74, 24,74,
1937: 24,74, 24,74, 134,158, 135,159,
1938: 136,160, 137,161, 24,74, 138,162,
1939: 24,74, 24,74, 24,74, 24,74,
1940: 24,74, 24,74, 24,74, 24,74,
1941: 24,74, 24,74, 24,74, 24,74,
1942: 24,74, 24,74, 24,74, 24,74,
1943: 24,74, 24,74, 24,74, 24,74,
1944: 24,74, 24,74, 24,74, 24,74,
1945: 24,74, 24,74, 26,26, 26,26,
1946: 26,26, 26,26, 26,26, 26,26,
1947: 26,26, 26,26, 26,26, 26,26,
1948: 74,74, 140,163, 141,164, 142,165,
1949: 143,166, 144,167, 146,168, 147,169,
1950: 149,170, 150,171, 74,74, 74,76,
1951: 74,74, 74,74, 74,74, 74,74,
1952: 74,74, 74,74, 74,74, 74,74,
1953: 74,74, 74,74, 151,172, 152,173,
1954: 153,166, 154,167, 155,169, 156,174,
1955: 157,175, 74,74, 74,74, 74,74,
1956: 74,74, 74,74, 74,74, 74,74,
1957: 74,74, 74,74, 74,74, 74,74,
1958: 74,74, 74,74, 74,74, 74,74,
1959: 74,74, 74,74, 74,74, 74,74,
1960: 74,74, 74,74, 74,74, 74,74,
1961: 74,74, 74,74, 74,74, 158,176,
1962: 159,177, 160,178, 161,179, 74,74,
1963: 162,180, 74,74, 74,74, 74,74,
1964: 74,74, 74,74, 74,74, 74,74,
1965: 74,74, 74,74, 74,74, 74,74,
1966: 74,74, 74,74, 74,74, 74,74,
1967: 74,74, 74,74, 74,74, 74,74,
1968: 74,74, 74,74, 74,74, 74,74,
1969: 74,74, 74,74, 74,74, 78,78,
1970: 78,78, 78,78, 78,78, 78,78,
1971: 78,78, 78,78, 78,78, 78,26,
1972: 78,26, 79,117, 79,117, 79,117,
1973: 79,117, 79,117, 79,117, 79,117,
1974: 79,117, 79,117, 79,117, 163,181,
1975: 164,177, 165,178, 170,182, 171,183,
1976: 172,184, 173,185, 79,117, 79,117,
1977: 79,117, 79,117, 79,117, 79,117,
1978: 117,117, 117,117, 117,117, 117,117,
1979: 117,117, 117,117, 117,117, 117,117,
1980: 117,117, 117,117, 174,186, 175,187,
1981: 176,139, 179,186, 180,187, 181,139,
1982: 184,188, 117,117, 117,117, 117,117,
1983: 117,117, 117,117, 117,117, 185,189,
1984: 189,190, 0,0, 79,117, 79,117,
1985: 79,117, 79,117, 79,117, 79,117,
1986: 0,0, 0,0, 0,0, 0,0,
1987: 0,0, 0,0, 0,0, 0,0,
1988: 0,0, 0,0, 0,0, 0,0,
1989: 0,0, 0,0, 0,0, 0,0,
1990: 0,0, 117,117, 117,117, 117,117,
1991: 117,117, 117,117, 117,117, 0,0,
1992: 0,0};
1993: struct yysvf yysvec[] = {
1994: 0, 0, 0,
1995: yycrank+1, 0, 0,
1996: yycrank+0, yysvec+1, 0,
1997: yycrank+3, 0, 0,
1998: yycrank+0, yysvec+3, 0,
1999: yycrank+83, yysvec+3, 0,
2000: yycrank+105, yysvec+3, 0,
2001: yycrank+-176, 0, 0,
2002: yycrank+-24, yysvec+7, 0,
2003: yycrank+-25, yysvec+7, 0,
2004: yycrank+-52, yysvec+7, 0,
2005: yycrank+5, 0, yyvstop+1,
2006: yycrank+0, 0, yyvstop+3,
2007: yycrank+34, 0, yyvstop+5,
2008: yycrank+200, 0, yyvstop+7,
2009: yycrank+0, 0, yyvstop+10,
2010: yycrank+4, 0, yyvstop+12,
2011: yycrank+0, 0, yyvstop+14,
2012: yycrank+0, 0, yyvstop+16,
2013: yycrank+35, 0, yyvstop+18,
2014: yycrank+36, 0, yyvstop+20,
2015: yycrank+0, 0, yyvstop+22,
2016: yycrank+38, 0, yyvstop+24,
2017: yycrank+0, yysvec+14, yyvstop+26,
2018: yycrank+287, 0, yyvstop+30,
2019: yycrank+83, yysvec+14, yyvstop+33,
2020: yycrank+362, yysvec+14, yyvstop+38,
2021: yycrank+0, 0, yyvstop+42,
2022: yycrank+0, 0, yyvstop+44,
2023: yycrank+81, 0, yyvstop+46,
2024: yycrank+82, 0, yyvstop+48,
2025: yycrank+83, 0, yyvstop+50,
2026: yycrank+70, yysvec+14, yyvstop+52,
2027: yycrank+71, yysvec+14, yyvstop+55,
2028: yycrank+70, yysvec+14, yyvstop+58,
2029: yycrank+70, yysvec+14, yyvstop+61,
2030: yycrank+72, yysvec+14, yyvstop+64,
2031: yycrank+77, yysvec+14, yyvstop+67,
2032: yycrank+88, yysvec+14, yyvstop+70,
2033: yycrank+79, yysvec+14, yyvstop+73,
2034: yycrank+91, yysvec+14, yyvstop+76,
2035: yycrank+95, yysvec+14, yyvstop+79,
2036: yycrank+99, yysvec+14, yyvstop+82,
2037: yycrank+83, yysvec+14, yyvstop+85,
2038: yycrank+66, yysvec+14, yyvstop+88,
2039: yycrank+67, yysvec+14, yyvstop+91,
2040: yycrank+62, yysvec+14, yyvstop+94,
2041: yycrank+75, yysvec+14, yyvstop+97,
2042: yycrank+0, 0, yyvstop+100,
2043: yycrank+66, 0, yyvstop+102,
2044: yycrank+0, 0, yyvstop+104,
2045: yycrank+0, 0, yyvstop+106,
2046: yycrank+150, yysvec+24, yyvstop+108,
2047: yycrank+117, yysvec+14, yyvstop+111,
2048: yycrank+126, yysvec+14, yyvstop+114,
2049: yycrank+114, yysvec+14, yyvstop+117,
2050: yycrank+134, yysvec+14, yyvstop+120,
2051: yycrank+121, yysvec+14, yyvstop+123,
2052: yycrank+96, yysvec+14, yyvstop+126,
2053: yycrank+104, yysvec+14, yyvstop+129,
2054: yycrank+92, yysvec+14, yyvstop+133,
2055: yycrank+110, yysvec+14, yyvstop+137,
2056: yycrank+97, yysvec+14, yyvstop+140,
2057: yycrank+0, 0, yyvstop+144,
2058: yycrank+0, 0, yyvstop+147,
2059: yycrank+0, yysvec+11, yyvstop+149,
2060: yycrank+163, 0, yyvstop+152,
2061: yycrank+167, 0, yyvstop+154,
2062: yycrank+0, 0, yyvstop+156,
2063: yycrank+173, yysvec+24, yyvstop+158,
2064: yycrank+0, 0, yyvstop+160,
2065: yycrank+0, 0, yyvstop+162,
2066: yycrank+0, 0, yyvstop+164,
2067: yycrank+0, 0, yyvstop+166,
2068: yycrank+384, 0, yyvstop+168,
2069: yycrank+0, 0, yyvstop+170,
2070: yycrank+179, yysvec+24, yyvstop+172,
2071: yycrank+0, 0, yyvstop+174,
2072: yycrank+459, yysvec+14, yyvstop+176,
2073: yycrank+469, yysvec+14, yyvstop+181,
2074: yycrank+0, 0, yyvstop+184,
2075: yycrank+0, 0, yyvstop+186,
2076: yycrank+0, 0, yyvstop+188,
2077: yycrank+0, 0, yyvstop+190,
2078: yycrank+0, 0, yyvstop+192,
2079: yycrank+144, yysvec+14, yyvstop+194,
2080: yycrank+143, yysvec+14, yyvstop+197,
2081: yycrank+146, yysvec+14, yyvstop+200,
2082: yycrank+158, yysvec+14, yyvstop+203,
2083: yycrank+149, yysvec+14, yyvstop+206,
2084: yycrank+159, yysvec+14, yyvstop+209,
2085: yycrank+154, yysvec+14, yyvstop+212,
2086: yycrank+157, yysvec+14, yyvstop+215,
2087: yycrank+146, yysvec+14, yyvstop+218,
2088: yycrank+166, yysvec+14, yyvstop+221,
2089: yycrank+171, yysvec+14, yyvstop+224,
2090: yycrank+0, yysvec+14, yyvstop+227,
2091: yycrank+134, yysvec+14, yyvstop+231,
2092: yycrank+131, yysvec+14, yyvstop+234,
2093: yycrank+132, yysvec+14, yyvstop+237,
2094: yycrank+123, yysvec+14, yyvstop+240,
2095: yycrank+0, 0, yyvstop+243,
2096: yycrank+0, 0, yyvstop+245,
2097: yycrank+162, yysvec+14, yyvstop+247,
2098: yycrank+180, yysvec+14, yyvstop+250,
2099: yycrank+186, yysvec+14, yyvstop+253,
2100: yycrank+182, yysvec+14, yyvstop+256,
2101: yycrank+196, yysvec+14, yyvstop+259,
2102: yycrank+147, yysvec+14, yyvstop+262,
2103: yycrank+153, yysvec+14, yyvstop+265,
2104: yycrank+188, yysvec+14, yyvstop+268,
2105: yycrank+182, yysvec+14, yyvstop+271,
2106: yycrank+197, yysvec+14, yyvstop+274,
2107: yycrank+0, 0, yyvstop+277,
2108: yycrank+0, 0, yyvstop+279,
2109: yycrank+0, 0, yyvstop+281,
2110: yycrank+0, 0, yyvstop+284,
2111: yycrank+492, yysvec+14, yyvstop+286,
2112: yycrank+225, yysvec+14, yyvstop+290,
2113: yycrank+257, yysvec+14, yyvstop+293,
2114: yycrank+236, yysvec+14, yyvstop+296,
2115: yycrank+259, yysvec+14, yyvstop+299,
2116: yycrank+242, yysvec+14, yyvstop+302,
2117: yycrank+249, yysvec+14, yyvstop+305,
2118: yycrank+251, yysvec+14, yyvstop+308,
2119: yycrank+252, yysvec+14, yyvstop+311,
2120: yycrank+0, yysvec+14, yyvstop+314,
2121: yycrank+259, yysvec+14, yyvstop+318,
2122: yycrank+261, yysvec+14, yyvstop+321,
2123: yycrank+243, yysvec+14, yyvstop+324,
2124: yycrank+248, yysvec+14, yyvstop+327,
2125: yycrank+232, yysvec+14, yyvstop+330,
2126: yycrank+277, yysvec+14, yyvstop+333,
2127: yycrank+280, yysvec+14, yyvstop+336,
2128: yycrank+307, yysvec+14, yyvstop+339,
2129: yycrank+308, yysvec+14, yyvstop+342,
2130: yycrank+298, yysvec+14, yyvstop+345,
2131: yycrank+276, yysvec+14, yyvstop+348,
2132: yycrank+280, yysvec+14, yyvstop+351,
2133: yycrank+0, yysvec+14, yyvstop+355,
2134: yycrank+318, yysvec+14, yyvstop+359,
2135: yycrank+319, yysvec+14, yyvstop+362,
2136: yycrank+309, yysvec+14, yyvstop+365,
2137: yycrank+346, yysvec+14, yyvstop+368,
2138: yycrank+350, yysvec+14, yyvstop+371,
2139: yycrank+0, yysvec+14, yyvstop+374,
2140: yycrank+342, yysvec+14, yyvstop+378,
2141: yycrank+347, yysvec+14, yyvstop+381,
2142: yycrank+0, yysvec+14, yyvstop+384,
2143: yycrank+346, yysvec+14, yyvstop+388,
2144: yycrank+364, yysvec+14, yyvstop+391,
2145: yycrank+363, yysvec+14, yyvstop+394,
2146: yycrank+370, yysvec+14, yyvstop+397,
2147: yycrank+334, yysvec+14, yyvstop+400,
2148: yycrank+338, yysvec+14, yyvstop+403,
2149: yycrank+334, yysvec+14, yyvstop+406,
2150: yycrank+376, yysvec+14, yyvstop+409,
2151: yycrank+364, yysvec+14, yyvstop+412,
2152: yycrank+402, yysvec+14, yyvstop+415,
2153: yycrank+407, yysvec+14, yyvstop+418,
2154: yycrank+408, yysvec+14, yyvstop+421,
2155: yycrank+375, yysvec+14, yyvstop+424,
2156: yycrank+364, yysvec+14, yyvstop+427,
2157: yycrank+422, yysvec+14, yyvstop+430,
2158: yycrank+427, yysvec+14, yyvstop+433,
2159: yycrank+428, yysvec+14, yyvstop+436,
2160: yycrank+0, yysvec+14, yyvstop+439,
2161: yycrank+0, yysvec+14, yyvstop+443,
2162: yycrank+0, yysvec+14, yyvstop+447,
2163: yycrank+0, yysvec+14, yyvstop+451,
2164: yycrank+441, yysvec+14, yyvstop+455,
2165: yycrank+463, yysvec+14, yyvstop+458,
2166: yycrank+454, yysvec+14, yyvstop+461,
2167: yycrank+454, yysvec+14, yyvstop+464,
2168: yycrank+472, yysvec+14, yyvstop+467,
2169: yycrank+479, yysvec+14, yyvstop+470,
2170: yycrank+474, yysvec+14, yyvstop+473,
2171: yycrank+0, yysvec+14, yyvstop+476,
2172: yycrank+0, yysvec+14, yyvstop+480,
2173: yycrank+443, yysvec+14, yyvstop+484,
2174: yycrank+450, yysvec+14, yyvstop+487,
2175: yycrank+445, yysvec+14, yyvstop+490,
2176: yycrank+0, yysvec+14, yyvstop+493,
2177: yycrank+0, yysvec+14, yyvstop+497,
2178: yycrank+473, yysvec+14, yyvstop+501,
2179: yycrank+485, yysvec+14, yyvstop+504,
2180: yycrank+0, yysvec+14, yyvstop+507,
2181: yycrank+0, yysvec+14, yyvstop+511,
2182: yycrank+0, yysvec+14, yyvstop+515,
2183: yycrank+481, yysvec+14, yyvstop+519,
2184: yycrank+0, yysvec+14, yyvstop+522,
2185: 0, 0, 0};
2186: struct yywork *yytop = yycrank+594;
2187: struct yysvf *yybgin = yysvec+1;
2188: char yymatch[] = {
2189: 00 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
2190: 01 ,011 ,012 ,01 ,01 ,01 ,01 ,01 ,
2191: 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
2192: 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
2193: 011 ,01 ,01 ,01 ,'$' ,01 ,01 ,01 ,
2194: 01 ,01 ,01 ,01 ,01 ,01 ,'$' ,'/' ,
2195: '0' ,'1' ,'1' ,'1' ,'1' ,'1' ,'1' ,'1' ,
2196: '8' ,'8' ,01 ,01 ,01 ,01 ,01 ,01 ,
2197: 01 ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'$' ,
2198: '$' ,'$' ,'$' ,'$' ,'$' ,'$' ,'$' ,'$' ,
2199: '$' ,'$' ,'$' ,'$' ,'$' ,'$' ,'$' ,'$' ,
2200: 'X' ,'$' ,'$' ,01 ,01 ,01 ,01 ,'$' ,
2201: 01 ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'$' ,
2202: '$' ,'$' ,'$' ,'$' ,'$' ,'$' ,'$' ,'$' ,
2203: '$' ,'$' ,'$' ,'$' ,'$' ,'$' ,'$' ,'$' ,
2204: 'X' ,'$' ,'$' ,01 ,01 ,01 ,01 ,01 ,
2205: 0};
2206: char yyextra[] = {
2207: 0,0,0,0,0,0,0,0,
2208: 0,0,0,0,0,0,0,0,
2209: 0,0,0,0,0,0,0,0,
2210: 0,0,0,0,0,0,0,0,
2211: 0,0,0,0,0,0,0,0,
2212: 0,0,0,0,0,0,0,0,
2213: 0,0,0,0,0,0,0,0,
2214: 0,0,0,0,0,0,0,0,
2215: 0,0,0,0,0,0,0,0,
2216: 0};
2217: #ifndef lint
2218: static char ncform_sccsid[] = "@(#)ncform 1.6 88/02/08 SMI"; /* from S5R2 1.2 */
2219: #endif
2220:
2221: int yylineno =1;
2222: # define YYU(x) x
2223: # define NLSTATE yyprevious=YYNEWLINE
2224: char yytext[YYLMAX];
2225: struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
2226: char yysbuf[YYLMAX];
2227: char *yysptr = yysbuf;
2228: int *yyfnd;
2229: extern struct yysvf *yyestate;
2230: int yyprevious = YYNEWLINE;
2231: yylook(){
2232: register struct yysvf *yystate, **lsp;
2233: register struct yywork *yyt;
2234: struct yysvf *yyz;
2235: int yych, yyfirst;
2236: struct yywork *yyr;
2237: # ifdef LEXDEBUG
2238: int debug;
2239: # endif
2240: char *yylastch;
2241: /* start off machines */
2242: # ifdef LEXDEBUG
2243: debug = 0;
2244: # endif
2245: yyfirst=1;
2246: if (!yymorfg)
2247: yylastch = yytext;
2248: else {
2249: yymorfg=0;
2250: yylastch = yytext+yyleng;
2251: }
2252: for(;;){
2253: lsp = yylstate;
2254: yyestate = yystate = yybgin;
2255: if (yyprevious==YYNEWLINE) yystate++;
2256: for (;;){
2257: # ifdef LEXDEBUG
2258: if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
2259: # endif
2260: yyt = yystate->yystoff;
2261: if(yyt == yycrank && !yyfirst){ /* may not be any transitions */
2262: yyz = yystate->yyother;
2263: if(yyz == 0)break;
2264: if(yyz->yystoff == yycrank)break;
2265: }
2266: *yylastch++ = yych = input();
2267: yyfirst=0;
2268: tryagain:
2269: # ifdef LEXDEBUG
2270: if(debug){
2271: fprintf(yyout,"char ");
2272: allprint(yych);
2273: putchar('\n');
2274: }
2275: # endif
2276: yyr = yyt;
2277: if ( (int)yyt > (int)yycrank){
2278: yyt = yyr + yych;
2279: if (yyt <= yytop && yyt->verify+yysvec == yystate){
2280: if(yyt->advance+yysvec == YYLERR) /* error transitions */
2281: {unput(*--yylastch);break;}
2282: *lsp++ = yystate = yyt->advance+yysvec;
2283: goto contin;
2284: }
2285: }
2286: # ifdef YYOPTIM
2287: else if((int)yyt < (int)yycrank) { /* r < yycrank */
2288: yyt = yyr = yycrank+(yycrank-yyt);
2289: # ifdef LEXDEBUG
2290: if(debug)fprintf(yyout,"compressed state\n");
2291: # endif
2292: yyt = yyt + yych;
2293: if(yyt <= yytop && yyt->verify+yysvec == yystate){
2294: if(yyt->advance+yysvec == YYLERR) /* error transitions */
2295: {unput(*--yylastch);break;}
2296: *lsp++ = yystate = yyt->advance+yysvec;
2297: goto contin;
2298: }
2299: yyt = yyr + YYU(yymatch[yych]);
2300: # ifdef LEXDEBUG
2301: if(debug){
2302: fprintf(yyout,"try fall back character ");
2303: allprint(YYU(yymatch[yych]));
2304: putchar('\n');
2305: }
2306: # endif
2307: if(yyt <= yytop && yyt->verify+yysvec == yystate){
2308: if(yyt->advance+yysvec == YYLERR) /* error transition */
2309: {unput(*--yylastch);break;}
2310: *lsp++ = yystate = yyt->advance+yysvec;
2311: goto contin;
2312: }
2313: }
2314: if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
2315: # ifdef LEXDEBUG
2316: if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
2317: # endif
2318: goto tryagain;
2319: }
2320: # endif
2321: else
2322: {unput(*--yylastch);break;}
2323: contin:
2324: # ifdef LEXDEBUG
2325: if(debug){
2326: fprintf(yyout,"state %d char ",yystate-yysvec-1);
2327: allprint(yych);
2328: putchar('\n');
2329: }
2330: # endif
2331: ;
2332: }
2333: # ifdef LEXDEBUG
2334: if(debug){
2335: fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
2336: allprint(yych);
2337: putchar('\n');
2338: }
2339: # endif
2340: while (lsp-- > yylstate){
2341: *yylastch-- = 0;
2342: if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
2343: yyolsp = lsp;
2344: if(yyextra[*yyfnd]){ /* must backup */
2345: while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
2346: lsp--;
2347: unput(*yylastch--);
2348: }
2349: }
2350: yyprevious = YYU(*yylastch);
2351: yylsp = lsp;
2352: yyleng = yylastch-yytext+1;
2353: yytext[yyleng] = 0;
2354: # ifdef LEXDEBUG
2355: if(debug){
2356: fprintf(yyout,"\nmatch ");
2357: sprint(yytext);
2358: fprintf(yyout," action %d\n",*yyfnd);
2359: }
2360: # endif
2361: return(*yyfnd++);
2362: }
2363: unput(*yylastch);
2364: }
2365: if (yytext[0] == 0 /* && feof(yyin) */)
2366: {
2367: yysptr=yysbuf;
2368: return(0);
2369: }
2370: yyprevious = yytext[0] = input();
2371: if (yyprevious>0)
2372: output(yyprevious);
2373: yylastch=yytext;
2374: # ifdef LEXDEBUG
2375: if(debug)putchar('\n');
2376: # endif
2377: }
2378: }
2379: yyback(p, m)
2380: int *p;
2381: {
2382: if (p==0) return(0);
2383: while (*p)
2384: {
2385: if (*p++ == m)
2386: return(1);
2387: }
2388: return(0);
2389: }
2390: /* the following are only used in the lex library */
2391: yyinput(){
2392: return(input());
2393: }
2394: yyoutput(c)
2395: int c; {
2396: output(c);
2397: }
2398: yyunput(c)
2399: int c; {
2400: unput(c);
2401: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.