|
|
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.