|
|
1.1 ! root 1: /* ptabs.c */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/pepsy/RCS/ptabs.c,v 7.2 90/07/27 08:49:29 mrose Exp $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/pepsy/RCS/ptabs.c,v 7.2 90/07/27 08:49:29 mrose Exp $ ! 9: * ! 10: * ! 11: * $Log: ptabs.c,v $ ! 12: * Revision 7.2 90/07/27 08:49:29 mrose ! 13: * update ! 14: * ! 15: * Revision 7.1 90/07/09 14:53:16 mrose ! 16: * sync ! 17: * ! 18: */ ! 19: ! 20: /* ! 21: * NOTICE ! 22: * ! 23: * Acquisition, use, and distribution of this module and related ! 24: * materials are subject to the restrictions of a license agreement. ! 25: * Consult the Preface in the User's Manual for the full terms of ! 26: * this agreement. ! 27: * ! 28: */ ! 29: ! 30: ! 31: #include <stdio.h> ! 32: #include "pepsydefs.h" ! 33: #include "pass2.h" ! 34: #include "mine.h" ! 35: ! 36: extern FILE *fptab; ! 37: extern char *c_tag(), *c_class(); ! 38: extern char *ec_tag(), *ec_class(), *pec_class(); ! 39: extern char *strip_last(); ! 40: extern char *str_yp_code[]; ! 41: extern char *get_val(), *get_comp(), *strp2name(); ! 42: extern s_table *lookup_list(), *get_offset(); ! 43: extern YP tprnt_loop(); ! 44: ! 45: extern char *concat(); ! 46: extern char *my_strcat(); ! 47: ! 48: /* ! 49: extern int explicit; ! 50: */ ! 51: ! 52: static int cons_type = 0; ! 53: ! 54: s_table *ptr; ! 55: s_table *save_ptr; ! 56: ! 57: #define WORDSIZE 20 ! 58: ! 59: /* ! 60: * Marshall's three extra conditions for changing the printing output ! 61: */ ! 62: static int mrose1; /* if NamedType */ ! 63: static int mrose2; /* !mrose1 && -h && DefinedType */ ! 64: static int mrose3; /* (mrose1 || !mrose2) && TAG && (OPTIONAL|DEFAULT) */ ! 65: ! 66: /* ! 67: * table printe a type. generate tables for the printing of a type ! 68: */ ! 69: tprnt_typ(yp, id, type) ! 70: YP yp; ! 71: char *id; ! 72: char *type; ! 73: { ! 74: char *t, *f; ! 75: char *p1; ! 76: char *s1, *s2, *s3; ! 77: char *s; ! 78: s_table *ptr1, *ptr2; ! 79: YP y; ! 80: ! 81: if (yp->yp_code < 0 || yp->yp_code > YP_REAL) ! 82: ferrd(1, "tdec_typ: unimplemented type %d\n", yp->yp_code); ! 83: ! 84: if (yp == NULL) { ! 85: ferr(0, "tprnt_typ:NULL arguement\n"); ! 86: return; ! 87: } ! 88: ! 89: if (yp->yp_flags & YP_ID) ! 90: mrose1 = 1; ! 91: else ! 92: mrose1 = 0; ! 93: ! 94: if (!mrose1 && hflag && yp->yp_code == YP_IDEFINED) ! 95: mrose2 = 1; ! 96: else ! 97: mrose2 = 0; ! 98: ! 99: if ((mrose1 || !mrose2) && yp->yp_flags & YP_TAG ! 100: && yp->yp_flags & (YP_OPTIONAL|YP_DEFAULT)) ! 101: mrose3 = 1; ! 102: else ! 103: mrose3 = 0; ! 104: ! 105: if (yp->yp_flags & YP_TAG && !(yp->yp_flags & YP_IMPLICIT)) { ! 106: prte_enoff("ETAG", yp); ! 107: } ! 108: if (type) ! 109: t = type; ! 110: else ! 111: t = my_strcat("struct ", modsym(mymodule, id, "type")); ! 112: f = yp->yp_varexp; ! 113: switch (yp->yp_code) { ! 114: ! 115: case YP_UNDF: ! 116: ferr(1, "tprnt_typ:Undefined type\n"); ! 117: ! 118: case YP_BOOL: ! 119: p1 = "BOOLEAN"; ! 120: if (yp->yp_varexp) { ! 121: } else ! 122: t = NULL; ! 123: break; ! 124: ! 125: /* This needs to be fixed up in the action generating area */ ! 126: case YP_INTLIST: ! 127: ! 128: case YP_INT: ! 129: ! 130: case YP_ENUMLIST: ! 131: p1 = "INTEGER"; ! 132: if (yp->yp_varexp) { ! 133: } else ! 134: t = NULL; ! 135: break; ! 136: ! 137: case YP_REAL: ! 138: p1 = "REALTYPE"; ! 139: if (yp->yp_varexp) { ! 140: } else ! 141: t = NULL; ! 142: break; ! 143: ! 144: ! 145: case YP_BIT: ! 146: case YP_BITLIST: ! 147: if (yp->yp_varexp) { ! 148: p1 = "BITSTRING"; ! 149: break; ! 150: } ! 151: t = NULL; ! 152: p1 = NULL; ! 153: (void) fprintf(fptab, "\t{ SBITSTRING, 0, %s, %s, NULL },\n", ! 154: c_tag(yp), c_class(yp)); ! 155: break; ! 156: ! 157: case YP_OCT: ! 158: if (yp->yp_varexp) { ! 159: p1 = "OCTETSTRING"; ! 160: break; ! 161: } ! 162: t = NULL; ! 163: p1 = NULL; ! 164: prte_noff("SOCTETSTRING", yp); ! 165: break; ! 166: ! 167: case YP_OID: ! 168: if (yp->yp_varexp) { ! 169: p1 = "OBJID"; ! 170: break; ! 171: } ! 172: t = NULL; ! 173: p1 = NULL; ! 174: prte_noff("SOBJID", yp); ! 175: break; ! 176: ! 177: case YP_SEQ: ! 178: case YP_SET: ! 179: case YP_ANY: ! 180: /* ! 181: * if (cons_type) p1 = "CONS_ANY"; else ! 182: */ ! 183: if (yp->yp_varexp) { ! 184: p1 = "ANY"; ! 185: break; ! 186: } ! 187: t = NULL; ! 188: p1 = NULL; ! 189: prte_noff("SANY", yp); ! 190: break; ! 191: ! 192: case YP_NULL: ! 193: p1 = "T_NULL"; ! 194: t = NULL; ! 195: break; ! 196: ! 197: case YP_IDEFINED: ! 198: p1 = NULL; ! 199: pr_deftyp(yp, t, f); ! 200: if (yp->yp_flags & YP_DEFAULT) ! 201: gdflt(yp, G_DEC); ! 202: break; ! 203: ! 204: case YP_SEQLIST: ! 205: p1 = NULL; ! 206: /* support for -h flag */ ! 207: cons_type++; ! 208: save_ptr = ptr; ! 209: if (yp->yp_varexp == NULL && type != NULL) ! 210: ferr(1, "tprnt_typ:YP_SEQLIST:NULL varexp pointer\n"); ! 211: if (type != NULL) ! 212: prte_off("SEQ_START", yp, t, f); ! 213: else ! 214: prte_noff("SEQ_START", yp); ! 215: ! 216: if (yp->yp_flags & YP_DEFAULT) ! 217: gdflt(yp, G_DEC); ! 218: if (y = yp->yp_type) { ! 219: if (type) { ! 220: if (yp->yp_declexp == NULL) ! 221: ferr(1, "tprnt_typ:YP_SEQLIST:no declexp\n"); ! 222: yp->yp_structname = my_strcat("struct ", yp->yp_declexp); ! 223: } else ! 224: yp->yp_structname = t; ! 225: if (optfield(y)) { ! 226: (void) fprintf(fptab, ! 227: "\t{ OPTL, OFFSET(%s, optionals), 0, 0, NULL },\n", ! 228: yp->yp_structname); ! 229: } ! 230: tprnt_loop(y, id, yp->yp_structname); ! 231: } ! 232: (void) fprintf(fptab, "\t{ PE_END, 0, 0, 0, NULL },\n"); ! 233: ptr = save_ptr; ! 234: cons_type--; ! 235: break; ! 236: ! 237: case YP_SETLIST: ! 238: p1 = NULL; ! 239: /* support for -h flag */ ! 240: cons_type++; ! 241: if (yp->yp_varexp == NULL && type != NULL) ! 242: ferr(1, "tprnt_typ:YP_SETLIST:NULL varexp pointer\n"); ! 243: if (type != NULL) ! 244: prte_off("SET_START", yp, t, f); ! 245: else ! 246: prte_noff("SET_START", yp); ! 247: ! 248: if (yp->yp_flags & YP_DEFAULT) ! 249: ddflt(yp); ! 250: if (y = yp->yp_type) { ! 251: if (type) { ! 252: if (yp->yp_declexp == NULL) ! 253: ferr(1, "tprnt_typ:YP_SETLIST:no declexp\n"); ! 254: yp->yp_structname = my_strcat("struct ", yp->yp_declexp); ! 255: } else ! 256: yp->yp_structname = t; ! 257: if (optfield(y)) { ! 258: (void) fprintf(fptab, ! 259: "\t{ OPTL, OFFSET(%s, optionals), 0, 0, NULL },\n", ! 260: yp->yp_structname); ! 261: } ! 262: tprnt_loop(y, id, yp->yp_structname); ! 263: } ! 264: (void) fprintf(fptab, "\t{ PE_END, 0, 0, 0, NULL },\n"); ! 265: ptr = save_ptr; ! 266: cons_type--; ! 267: break; ! 268: ! 269: case YP_SEQTYPE: /* What is the difference ?? */ ! 270: p1 = NULL; ! 271: cons_type++; ! 272: save_ptr = ptr; ! 273: if (type != NULL) ! 274: prte_off("SEQOF_START", yp, t, f); ! 275: else ! 276: prte_noff("SEQOF_START", yp); ! 277: if (yp->yp_flags & YP_DEFAULT) ! 278: gdflt(yp, G_DEC); ! 279: ! 280: if (y = yp->yp_type) { ! 281: if (type) { ! 282: if (yp->yp_declexp == NULL) ! 283: ferr(1, "tprnt_typ:YP_SEQTYPE:no declexp\n"); ! 284: yp->yp_structname = my_strcat("struct ", yp->yp_declexp); ! 285: } else ! 286: yp->yp_structname = t; ! 287: tprnt_loop(y, id, yp->yp_structname); ! 288: } ! 289: if (yp->yp_structname != NULL) ! 290: (void) fprintf(fptab, ! 291: "\t{ PE_END, OFFSET(%s, next), 0, 0, NULL },\n", ! 292: yp->yp_structname); ! 293: else ! 294: (void) fprintf(fptab, "\t{ PE_END, 0, 0, 0, NULL },\n"); ! 295: ptr = save_ptr; ! 296: cons_type--; ! 297: break; ! 298: ! 299: case YP_SETTYPE: ! 300: p1 = NULL; ! 301: cons_type++; ! 302: save_ptr = ptr; ! 303: if (type != NULL) ! 304: prte_off("SETOF_START", yp, t, f); ! 305: else ! 306: prte_noff("SETOF_START", yp); ! 307: ! 308: if (yp->yp_flags & YP_DEFAULT) ! 309: gdflt(yp, G_DEC); ! 310: ! 311: if (y = yp->yp_type) { ! 312: if (type) { ! 313: if (yp->yp_declexp == NULL) ! 314: ferr(1, "tprnt_typ:YP_SETTYPE:no declexp\n"); ! 315: yp->yp_structname = my_strcat("struct ", yp->yp_declexp); ! 316: } else ! 317: yp->yp_structname = t; ! 318: tprnt_loop(y, id, yp->yp_structname); ! 319: } ! 320: if (yp->yp_structname != NULL) ! 321: (void) fprintf(fptab, ! 322: "\t{ PE_END, OFFSET(%s, next), 0, 0, NULL },\n", ! 323: yp->yp_structname); ! 324: else ! 325: (void) fprintf(fptab, "\t{ PE_END, 0, 0, 0, NULL },\n"); ! 326: ptr = save_ptr; ! 327: cons_type--; ! 328: break; ! 329: ! 330: case YP_CHOICE: ! 331: p1 = NULL; ! 332: /* support for -h flag */ ! 333: if (hflag && (y = yp->yp_type) && !y->yp_next) { ! 334: tprnt_typ(y, id, yp->yp_structname); ! 335: break; ! 336: } ! 337: cons_type++; ! 338: save_ptr = ptr; ! 339: /* Generates an unused tags field - so beware */ ! 340: if (type != NULL) ! 341: prte_off("CHOICE_START", yp, t, f); ! 342: else ! 343: prte_noff("CHOICE_START", yp); ! 344: ! 345: if (yp->yp_flags & YP_DEFAULT) ! 346: gdflt(yp, G_DEC); ! 347: if (y = yp->yp_type) { ! 348: if ((yp->yp_flags & YP_ID) && yp->yp_id) ! 349: (void) fprintf(fptab, ! 350: "\t{ SCTRL, OFFSET(%s, offset), 0, 0, \"%s\" },\n", ! 351: yp->yp_structname, yp->yp_id); ! 352: else ! 353: (void) fprintf(fptab, ! 354: "\t{ SCTRL, OFFSET(%s, offset), 0, 0, NULL },\n", ! 355: yp->yp_structname); ! 356: if (type) { ! 357: if (yp->yp_declexp == NULL) ! 358: ferr(1, "tprnt_typ:YP_CHOICE:no declexp\n"); ! 359: yp->yp_structname = my_strcat("struct ", yp->yp_declexp); ! 360: } else ! 361: yp->yp_structname = t; ! 362: tprnt_loop(y, id, yp->yp_structname); ! 363: } ! 364: (void) fprintf(fptab, "\t{ PE_END, 0, 0, 0, NULL },\n"); ! 365: ptr = save_ptr; ! 366: cons_type--; ! 367: break; ! 368: ! 369: default: ! 370: ferrd(1, "tprnt_typ: yp_code = %d not implemented\n", yp->yp_code); ! 371: } ! 372: ! 373: if (p1 != NULL) { ! 374: if (t != NULL) ! 375: prte_off(p1, yp, t, f); ! 376: else ! 377: prte_noff(p1, yp); ! 378: ! 379: if (yp->yp_flags & YP_DEFAULT) ! 380: gdflt(yp, G_DEC); ! 381: } ! 382: ! 383: ! 384: } ! 385: ! 386: static int fflags[] = { ! 387: 0, 1, 2, 2, 3, 3, 4, 5, 16, 16, 16, 17, 17, 17, ! 388: 0, -1, 7,}; ! 389: ! 390: /* ! 391: * generate tables for printing a contructed type ! 392: */ ! 393: YP ! 394: tprnt_loop(yp, id, type) ! 395: YP yp; ! 396: char *id; ! 397: char *type; ! 398: { ! 399: for (; yp != NULL; yp = yp->yp_next) { ! 400: tprnt_typ(yp, id, type); ! 401: } ! 402: } ! 403: ! 404: ! 405: ddflt(yp) ! 406: YP yp; ! 407: { ! 408: switch (yp->yp_code) { ! 409: case YP_BOOL: ! 410: case YP_INT: ! 411: case YP_INTLIST: ! 412: (void) fprintf(fptab, "\t{DFLT_B, %d, 0, 0 },\n", ! 413: yp->yp_default->yv_number); ! 414: break; ! 415: case YP_BIT: ! 416: case YP_BITLIST: ! 417: case YP_OCT: ! 418: case YP_NULL: ! 419: case YP_SEQ: ! 420: case YP_SEQTYPE: ! 421: case YP_SEQLIST: ! 422: case YP_SET: ! 423: case YP_SETTYPE: ! 424: case YP_SETLIST: ! 425: case YP_CHOICE: ! 426: case YP_ANY: ! 427: case YP_OID: ! 428: case YP_IDEFINED: ! 429: case YP_ENUMLIST: ! 430: case YP_REAL: ! 431: (void) fprintf(fptab, "\t{DFLT_B, 0, 0, 0 },\n"); ! 432: break; ! 433: ! 434: default: ! 435: ferr(1, "ddflt:unknown type %d\n", yp->yp_code); ! 436: } ! 437: ! 438: } ! 439: ! 440: /* ! 441: * print a Non offset table entry ! 442: */ ! 443: prte_noff(type, yp) ! 444: char *type; ! 445: YP yp; ! 446: { ! 447: char *tag; ! 448: char *flags; ! 449: char *typename; ! 450: char buf1[BUFSIZ]; ! 451: ! 452: tag = c_tag(yp); ! 453: flags = c_class(yp); ! 454: if (mrose3) { /* need to append FL_PRTAG flag */ ! 455: strncpy(buf1, flags, BUFSIZ); ! 456: strncat(buf1, "|FL_PRTAG", BUFSIZ); ! 457: flags = buf1; ! 458: } ! 459: if (mrose1) ! 460: typename = yp->yp_id; ! 461: else if (mrose2) ! 462: typename = yp->yp_identifier; ! 463: else ! 464: typename = (char *)0; ! 465: if (typename) ! 466: (void) fprintf(fptab, "\t{ %s, 0, %s, %s, \"%s\" },\n", ! 467: type, tag, flags, typename); ! 468: else ! 469: (void) fprintf(fptab, "\t{ %s, 0, %s, %s, NULL},\n", ! 470: type, tag, flags); ! 471: } ! 472: ! 473: /* ! 474: * print a Non offset table entry for an ETAG - special case ! 475: */ ! 476: prte_enoff(type, yp) ! 477: char *type; ! 478: YP yp; ! 479: { ! 480: char *tag; ! 481: char *flags; ! 482: char *typename; ! 483: char buf1[BUFSIZ]; ! 484: ! 485: tag = ec_tag(yp); ! 486: flags = ec_class(yp); ! 487: if (mrose3) { /* need to append FL_PRTAG flag */ ! 488: strncpy(buf1, flags, BUFSIZ); ! 489: strncat(buf1, "|FL_PRTAG", BUFSIZ); ! 490: flags = buf1; ! 491: mrose3 = 0; /* don't want the next tag */ ! 492: } ! 493: if (mrose1) { ! 494: typename = yp->yp_id; ! 495: mrose1 = 0; ! 496: } else if (mrose2) { ! 497: typename = yp->yp_identifier; ! 498: mrose2 = 0; ! 499: } else ! 500: typename = NULL; ! 501: if (typename) ! 502: (void) fprintf(fptab, "\t{ %s, 0, %s, %s, \"%s\" },\n", ! 503: type, tag, flags, typename); ! 504: else ! 505: (void) fprintf(fptab, "\t{ %s, 0, %s, %s, NULL },\n", ! 506: type, tag, flags); ! 507: } ! 508: ! 509: /* ! 510: * print an offset table entry ! 511: */ ! 512: prte_off(type, yp, t, f) ! 513: char *type; ! 514: YP yp; ! 515: char *t, *f; ! 516: { ! 517: char *tag; ! 518: char *flags; ! 519: char *typename; ! 520: char buf1[BUFSIZ]; ! 521: ! 522: tag = c_tag(yp); ! 523: flags = c_class(yp); ! 524: if (mrose3) { /* need to append FL_PRTAG flag */ ! 525: strncpy(buf1, flags, BUFSIZ); ! 526: strncat(buf1, "|FL_PRTAG", BUFSIZ); ! 527: flags = buf1; ! 528: } ! 529: if (mrose1) ! 530: typename = yp->yp_id; ! 531: else if (mrose2) ! 532: typename = yp->yp_identifier; ! 533: else ! 534: typename = (char *)0; ! 535: if (typename) ! 536: (void) fprintf(fptab, "\t{ %s, OFFSET(%s, %s), %s, %s, \"%s\" },\n", ! 537: type, t, f, tag, flags, typename); ! 538: else ! 539: (void) fprintf(fptab, "\t{ %s, OFFSET(%s, %s), %s, %s, NULL},\n", ! 540: type, t, f, tag, flags); ! 541: } ! 542: ! 543: /* ! 544: * handle the very complex task of defined types. ! 545: * Basically generating object calls ! 546: */ ! 547: pr_deftyp(yp, t, f) ! 548: YP yp; ! 549: char *t; ! 550: char *f; ! 551: { ! 552: /* Predefined Universal Type */ ! 553: struct univ_typ *p, *univtyp(); ! 554: ! 555: if ((p = univtyp(yp->yp_identifier))) { ! 556: if (p->univ_flags & UNF_EXTMOD) { ! 557: yp->yp_module = p->univ_mod; ! 558: goto do_obj; ! 559: } ! 560: prte_univt(p, yp, t, f); ! 561: return; ! 562: } ! 563: ! 564: do_obj: ! 565: if (yp->yp_flags & YP_TAG && yp->yp_flags & YP_IMPLICIT) ! 566: prte_noff("IMP_OBJ", yp); ! 567: if (yp->yp_parm) { ! 568: ferr(1, "tenc_typ:YP_IDEFINED:yp_parm found\n"); ! 569: } ! 570: prte_obj(yp, t, f); ! 571: } ! 572: ! 573: /* ! 574: * print an offset table entry for an OBJECT type entry ! 575: */ ! 576: prte_obj(yp, t, f) ! 577: YP yp; ! 578: char *t, *f; ! 579: { ! 580: char *type; ! 581: char *obj; ! 582: char *flags; ! 583: char *typename; ! 584: char *off; ! 585: char buf1[BUFSIZ]; ! 586: char buf2[BUFSIZ]; ! 587: int extflag; ! 588: ! 589: #if 1 ! 590: if (yp->yp_module == NULL || strcmp(yp->yp_module, mymodule) == 0) { ! 591: if (f) ! 592: type = "OBJECT"; ! 593: else ! 594: type = "SOBJECT"; ! 595: obj = proc_name(yp->yp_identifier, 0); ! 596: extflag = 0; ! 597: } else { ! 598: if (f) ! 599: type = "EXTOBJ"; ! 600: else ! 601: type = "SEXTOBJ"; ! 602: obj = strp2name(yp->yp_identifier, yp->yp_module); ! 603: extflag = 1; ! 604: } ! 605: #else ! 606: if (f) ! 607: type = "OBJECT"; ! 608: else ! 609: type = "SOBJECT"; ! 610: obj = proc_name(yp->yp_identifier, 0); ! 611: #endif ! 612: flags = c_class(yp); ! 613: if (mrose3) { /* need to append FL_PRTAG flag */ ! 614: strncpy(buf1, flags, BUFSIZ); ! 615: strncat(buf1, "|FL_PRTAG", BUFSIZ); ! 616: flags = buf1; ! 617: } ! 618: if (mrose1) ! 619: typename = yp->yp_id; ! 620: else if (mrose2) ! 621: typename = yp->yp_identifier; ! 622: else ! 623: typename = (char *)0; ! 624: if (f) { ! 625: sprintf(buf2, "OFFSET(%s, %s)", t, f); ! 626: off = buf2; ! 627: } else ! 628: off = "0"; ! 629: if (typename) ! 630: (void) fprintf(fptab, "\t{ %s, %s, _Z%s, %s, \"%s\" },\n", ! 631: type, off, obj, flags, typename); ! 632: else ! 633: (void) fprintf(fptab, "\t{ %s, %s, _Z%s, %s, NULL},\n", ! 634: type, off, obj, flags); ! 635: if (extflag) ! 636: (void) fprintf(fptab, "\t{ EXTMOD, %d, 0, 0, NULL },\n", ! 637: gen_modref(yp->yp_module)); ! 638: } ! 639: ! 640: /* ! 641: * print an table entry for Universal type with the given entry ! 642: */ ! 643: prte_univt(p, yp, t, f) ! 644: struct univ_typ *p; ! 645: YP yp; ! 646: char *t, *f; ! 647: { ! 648: char *type; ! 649: int tag; ! 650: int class; ! 651: char *flags; ! 652: char *typename; ! 653: char *off; ! 654: char buf1[BUFSIZ]; ! 655: char buf2[BUFSIZ]; ! 656: char buf3[BUFSIZ]; ! 657: ! 658: if (f == NULL) { ! 659: sprintf(buf3, "S%s", p->univ_tab); ! 660: type = buf3; ! 661: } else ! 662: type = p->univ_tab; ! 663: ! 664: if (yp->yp_flags & YP_TAG && yp->yp_flags & YP_IMPLICIT) { ! 665: tag = yp->yp_tag->yt_value->yv_number; ! 666: class = yp->yp_tag->yt_class; ! 667: } else { ! 668: tag = p->univ_id; ! 669: class = p->univ_class; ! 670: } ! 671: ! 672: strncpy(buf1, c_flags(yp, class), BUFSIZ); ! 673: #if 0 ! 674: sprintf(buf1, "%d", class); ! 675: #endif ! 676: flags = buf1; ! 677: if (mrose3) { /* need to append FL_PRTAG flag */ ! 678: strncat(buf1, "|FL_PRTAG", BUFSIZ); ! 679: } ! 680: if (mrose1) ! 681: typename = yp->yp_id; ! 682: else if (mrose2) ! 683: typename = yp->yp_identifier; ! 684: else ! 685: typename = (char *)0; ! 686: if (f) { ! 687: sprintf(buf2, "OFFSET(%s, %s)", t, f); ! 688: off = buf2; ! 689: } else ! 690: off = "0"; ! 691: if (typename) ! 692: (void) fprintf(fptab, "\t{ %s, %s, %d, %s, \"%s\" },\n", ! 693: type, off, tag, flags, typename); ! 694: else ! 695: (void) fprintf(fptab, "\t{ %s, %s, %d, %s, NULL},\n", ! 696: type, off, tag, flags); ! 697: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.