|
|
1.1 ! root 1: /* ! 2: * h/cc0.h ! 3: * Definitions for the C compiler parser (cc0) ! 4: * and the C compiler preprocessor (cpp). ! 5: * Includes the definitions of the reserved words, ! 6: * the built-in types, and so forth. ! 7: */ ! 8: ! 9: #define CC0_H CC0_H ! 10: ! 11: #include <stdio.h> ! 12: #include <setjmp.h> ! 13: #ifdef vax ! 14: #include "INC$LIB:mch.h" ! 15: #include "INC$LIB:host.h" ! 16: #include "INC$LIB:ops.h" ! 17: #include "INC$LIB:var.h" ! 18: #include "INC$LIB:varmch.h" ! 19: #include "INC$LIB:cc0mch.h" ! 20: #include "INC$LIB:stream.h" ! 21: #include "INC$LIB:cppmch.h" ! 22: #else ! 23: #include "mch.h" ! 24: #include "host.h" ! 25: #include "ops.h" ! 26: #include "var.h" ! 27: #include "varmch.h" ! 28: #include "cc0mch.h" ! 29: #include "stream.h" ! 30: #include "cppmch.h" ! 31: #endif ! 32: ! 33: /* ! 34: * Define the sizes of the tables in the parser. ! 35: * These can be changed to just about anything. ! 36: */ ! 37: #define NHASH 67 /* Hash buckets */ ! 38: #define NDIRS 32 /* Number of include directories */ ! 39: #define NLEV 32 /* Nesting level of cpp constructs */ ! 40: #if _I386 ! 41: #define NDLEV 256 /* DSTACK size */ ! 42: #define NDBUF 4096 /* Size of the define buffer */ ! 43: #else ! 44: #define NDLEV 128 /* DSTACK size */ ! 45: #define NDBUF 1024 /* Size of the define buffer */ ! 46: #endif ! 47: #define ARG0 0200 /* Base of formals in define bodies */ ! 48: #define SET0 (ARG0+NARGS) /* Base of hide set indices in text */ ! 49: /* High parity characters are accepted in strings, but otherwise forbidden */ ! 50: /* because they conflict with this scheme for packing macro formals and hide */ ! 51: /* sets into the least space and overhead I can manage */ ! 52: ! 53: /* ! 54: * cpp keywords and macro classes. ! 55: * these hide at a distinct level ! 56: * in the symbol table. ! 57: */ ! 58: #define XUSER 0 /* User macro */ ! 59: #define XUSERA 1 /* User macro with arguments */ ! 60: #define XUFILE 2 /* Macro __FILE__ */ ! 61: #define XULINE 3 /* Macro __LINE__ */ ! 62: #define XUDATE 4 /* Macro __DATE__ */ ! 63: #define XUTIME 5 /* Macro __TIME__ */ ! 64: #define XUSTDC 6 /* Macro __STDC__ */ ! 65: #define XUBASE 7 /* Macro __BASE_FILE__ */ ! 66: #define XDEFINED 8 /* User macro defined() */ ! 67: #define XDEFINE 9 /* #define */ ! 68: #define XINCLUDE 10 /* #include */ ! 69: #define XUNDEF 11 /* #undef */ ! 70: #define XLINE 12 /* #line */ ! 71: #define XASSERT 13 /* #assert */ ! 72: #define XERROR 14 /* #error */ ! 73: #define XPRAGMA 15 /* #pragma */ ! 74: #define XIF 20 /* #if is the first conditional */ ! 75: #define XIFDEF 21 /* #ifdef */ ! 76: #define XIFNDEF 22 /* #ifndef */ ! 77: #define XELSE 23 /* #else */ ! 78: #define XELIF 24 /* #elif */ ! 79: #define XENDIF 25 /* #endif */ ! 80: #define XIDENT 26 /* #ident */ ! 81: ! 82: /* ! 83: * Tokens. ! 84: * Character classes. ! 85: * Other things that are C compiler parser specific. ! 86: * By convention, these begin at 100 decimal. ! 87: */ ! 88: #define DOT 100 /* . */ ! 89: #define ARROW 101 /* -> */ ! 90: #define SEMI 102 /* ; */ ! 91: #define SHARP 103 /* # */ ! 92: #define JUNK 104 /* Junk character */ ! 93: #define SKIP 105 /* Whitespace */ ! 94: #define LBRACE 106 /* { */ ! 95: #define RBRACE 107 /* } */ ! 96: #define LBRACK 108 /* [ */ ! 97: #define RBRACK 109 /* ] */ ! 98: #define LPAREN 110 /* ( */ ! 99: #define RPAREN 111 /* ) */ ! 100: #define ID 112 /* All identifiers */ ! 101: #define CON 113 /* Constants */ ! 102: #define QUOTE 114 /* ' */ ! 103: #define STRING 115 /* " */ ! 104: #define HIGH0 116 /* High parity junk, 0200..0237 */ ! 105: #define HIGH1 117 /* High parity junk, 0240..0277 */ ! 106: #define HIGH2 118 /* High parity junk, 0300..0337 */ ! 107: #define HIGH3 119 /* High parity junk, 0340..0377 */ ! 108: #define BACKDIV 120 /* Back slash */ ! 109: ! 110: /* ! 111: * Types. ! 112: * Classes. ! 113: * Do not change these unless you update the tables in "gcandt.c". ! 114: */ ! 115: #define INT 150 /* int */ ! 116: #define CHAR 151 /* char */ ! 117: #define FLOAT 152 /* float */ ! 118: #define DOUBLE 153 /* double */ ! 119: #define VOID 154 /* void */ ! 120: #define STRUCT 155 /* struct */ ! 121: #define UNION 156 /* union */ ! 122: #define ENUM 157 /* enum */ ! 123: #define LONG 158 /* long */ ! 124: #define SHORT 159 /* short */ ! 125: #define UNSIGNED 160 /* unsigned */ ! 126: #define EXTERN 161 /* extern */ ! 127: #define STATIC 162 /* static */ ! 128: #define REGISTER 163 /* register */ ! 129: #define TYPEDEF 164 /* typedef */ ! 130: #define AUTO 165 /* auto */ ! 131: #define CONST 166 /* const */ ! 132: #define VOLATILE 167 /* volatile */ ! 133: #define SIGNED 168 /* signed */ ! 134: ! 135: /* ! 136: * Other C reserved words. ! 137: * These are in no particular order at all. ! 138: */ ! 139: #define DEFAULT 180 /* default */ ! 140: #define DO 181 /* do */ ! 141: #define ELSE 182 /* else */ ! 142: #define GOTO 183 /* goto */ ! 143: #define IF 184 /* if */ ! 144: #define RETURN 185 /* return */ ! 145: #define SWITCH 186 /* switch */ ! 146: #define CONTINUE 187 /* continue */ ! 147: #define FOR 188 /* for */ ! 148: #define WHILE 189 /* while */ ! 149: #define BREAK 190 /* break */ ! 150: #define CASE 191 /* case */ ! 151: ! 152: /* MWC proprietary keywords */ ! 153: #define READONLY 200 /* readonly */ ! 154: #define ALIEN 201 /* Other language interface */ ! 155: ! 156: /* ! 157: * Types. ! 158: */ ! 159: #define T_NONE 0 /* No type (yet) */ ! 160: #define T_CHAR 1 /* Char */ ! 161: #define T_UCHAR 2 /* Unsigned char */ ! 162: #define T_SHORT 3 /* Short */ ! 163: #define T_USHORT 4 /* Unsigned short */ ! 164: #define T_INT 5 /* Int */ ! 165: #define T_UINT 6 /* Unsigned int */ ! 166: #define T_PTR 7 /* Pointer */ ! 167: #define T_LONG 8 /* Long */ ! 168: #define T_ULONG 9 /* Unsigned long */ ! 169: #define T_FLOAT 10 /* Float */ ! 170: #define T_DOUBLE 11 /* Double */ ! 171: #define T_VOID 12 /* Void */ ! 172: #define T_STRUCT 13 /* Struct */ ! 173: #define T_FSTRUCT 14 /* Forward struct reference */ ! 174: #define T_UNION 15 /* Union */ ! 175: #define T_FUNION 16 /* Forward union reference */ ! 176: #define T_ENUM 17 /* Enumeration */ ! 177: #define T_FENUM 18 /* Forward enumeration reference */ ! 178: #define T_LDOUBLE 19 /* Long double, should follow double NB */ ! 179: ! 180: #define sgn2uns(t) ((t)+1) /* signed to unsigned */ ! 181: #define uns2sgn(t) ((t)-1) /* unsigned to signed */ ! 182: ! 183: /* ! 184: * Storage classes. ! 185: */ ! 186: #define C_NONE 0 /* No class */ ! 187: #define C_AUTO 1 /* Auto */ ! 188: #define C_SIN 2 /* Static internal */ ! 189: #define C_SEX 3 /* Static external */ ! 190: #define C_GDEF 4 /* Global def. */ ! 191: #define C_GREF 5 /* Global ref. */ ! 192: #define C_ARG 6 /* Argument */ ! 193: #define C_CXT 7 /* Contextual */ ! 194: #define C_LAB 8 /* Label */ ! 195: #define C_FREF 9 /* Forward ref. label */ ! 196: #define C_KEY 10 /* Keyword */ ! 197: #define C_TYPE 11 /* Typedef name */ ! 198: #define C_REG 12 /* Register */ ! 199: #define C_STAG 13 /* Structure tag */ ! 200: #define C_UTAG 14 /* Union tag */ ! 201: #define C_ETAG 15 /* Enumeration tag */ ! 202: #define C_MOS 16 /* Member of structure */ ! 203: #define C_MOU 17 /* Member of union */ ! 204: #define C_MOE 18 /* Member of enumeration */ ! 205: #define C_PAUTO 19 /* Parametric auto */ ! 206: #define C_PREG 20 /* Parametric register */ ! 207: ! 208: /* ! 209: * Dimensions. ! 210: * A list of these begins at the "s_dp" of a symbol ! 211: * and at the "e_dp" of an expression tree node. ! 212: */ ! 213: typedef struct dim { ! 214: struct dim *d_dp; /* Link */ ! 215: short d_type; /* Type */ ! 216: sizeof_t d_bound; /* Array bound */ ! 217: } DIM; ! 218: ! 219: #define D_PTR 0 /* Pointer */ ! 220: #define D_FUNC 1 /* Function returning */ ! 221: #define D_ARRAY 2 /* Array */ ! 222: #define D_MOSAR 3 /* MOS array */ ! 223: #define D_CONST 4 /* const modifier */ ! 224: #define D_VOLATILE 5 /* volatile modifier */ ! 225: ! 226: /* ! 227: * An INFO structure keeps track of structure elements, ! 228: * union elements and enumeration constants. ! 229: * It is pointed to by the INFO links of symbols and expressions. ! 230: * The reference count only considers symbol usages. ! 231: */ ! 232: typedef struct { ! 233: short i_refc; /* Reference count */ ! 234: short i_nsp; /* Number of symbols */ ! 235: union { ! 236: sizeof_t i_data0; ! 237: int i_data1; ! 238: } i_data; ! 239: struct sym *i_sp[]; /* The symbols */ ! 240: } INFO; ! 241: ! 242: #define i_size i_data.i_data0 /* Structure or union size */ ! 243: #define i_type i_data.i_data1 /* Base type of an enumeration */ ! 244: ! 245: /* ! 246: * Symbol. ! 247: * Symbols are kept in a hash table. ! 248: * Each bucket has the keywords on the front. ! 249: */ ! 250: ! 251: typedef struct symbol SYM; ! 252: typedef struct token TOK; ! 253: struct symbol { ! 254: SYM *s_sp; /* Link */ ! 255: int s_slevel; /* Symbol table level */ ! 256: ival_t s_value; /* Value */ ! 257: int s_dline; /* Decl. line number */ ! 258: char s_level; /* Block level */ ! 259: char s_flag; /* Flag */ ! 260: char s_width; /* Field width */ ! 261: char s_offset; /* Bit offset */ ! 262: char s_seg; /* Segment */ ! 263: char s_class; /* Class */ ! 264: char s_type; /* Type */ ! 265: DIM *s_dp; /* Dimensions */ ! 266: INFO *s_ip; /* Info */ ! 267: char *s_id; /* Name string */ ! 268: }; ! 269: ! 270: /* Keyword symbols occupy less space */ ! 271: typedef struct { ! 272: SYM *s_sp; ! 273: int s_slevel; ! 274: ival_t s_value; ! 275: } KEYSYM; ! 276: ! 277: /* Preprocessor symbols take a little more space */ ! 278: typedef struct { ! 279: SYM *s_sp; ! 280: int s_slevel; ! 281: ival_t s_value; ! 282: int s_narg; ! 283: #if ANSI_STUPID ! 284: TOK *s_targs; ! 285: #endif ! 286: char s_body[]; ! 287: } CPPSYM; ! 288: ! 289: /* C symbol s_flag values */ ! 290: #define S_RONLY 01 /* Readonly */ ! 291: #define S_ALIEN 02 /* Other language */ ! 292: #define S_USED 04 /* Used */ ! 293: #define S_TAG 010 /* Tag present */ ! 294: #define S_INIT 020 /* Initialized */ ! 295: #define S_SYMB 040 /* Written to debug table */ ! 296: ! 297: /* Disjunct symbol table levels */ ! 298: #define SL_CPP -2 /* Cpp tokens */ ! 299: #define SL_KEY -1 /* C keywords and ops */ ! 300: #define SL_VAR 0 /* Normal symbols */ ! 301: #define SL_LAB 1 /* Labels */ ! 302: #define SL_TAG 2 /* Tags */ ! 303: #define SL_MOS 3 /* Members of structures, and up */ ! 304: ! 305: /* Lexical scope levels */ ! 306: #define LL_EXT 0 /* Externals */ ! 307: #define LL_ARG 1 /* Parameters */ ! 308: #define LL_AUTO 2 /* Automatics, and up */ ! 309: ! 310: /* ! 311: * All tokens are hashed. ! 312: * Each unique token is the head of a list of symbol buckets. ! 313: */ ! 314: struct token { ! 315: TOK *t_tp; ! 316: SYM *t_sym; ! 317: char t_id[]; ! 318: }; ! 319: ! 320: /* ! 321: * Macro expansion stack. ! 322: */ ! 323: typedef struct { ! 324: char ds_type; /* Type of stack item */ ! 325: char ds_char; /* Ungotten char or temp */ ! 326: char *ds_ptr; /* Pointer to string */ ! 327: } DSTACK; ! 328: ! 329: #define DS_FILE 0 /* Dstack is at source file level */ ! 330: #define DS_UNGET 1 /* Dstack is ungotten character */ ! 331: #define DS_FUNGET 2 /* Dstack is ungotten file character */ ! 332: #define DS_STRNG 3 /* Dstack is normal string to read */ ! 333: #define DS_PARAM 4 /* Dstack is parameter to be expanded */ ! 334: #define DS_SHARP 5 /* Dstack is parameter to stringize */ ! 335: #define DS_SHARP2 6 /* Dstack is parameter to glue */ ! 336: #define DS_DPUTP 7 /* Dstack is pushed dputp pointer */ ! 337: #define DS_NAME 8 /* Dstack is pushed name of macro */ ! 338: #define DS_IEOF 9 /* Dstack is internal end of file */ ! 339: #define DS_UFILE 10 /* Dstack is __FILE__ to expand */ ! 340: ! 341: /* ! 342: * Macro hide set structure. ! 343: */ ! 344: typedef struct hideset HIDESET; ! 345: typedef struct hidemem HIDEMEM; ! 346: struct hideset { ! 347: HIDESET *h_next_set; ! 348: HIDEMEM *h_this_set; ! 349: }; ! 350: struct hidemem { ! 351: HIDEMEM *h_next_mem; ! 352: TOK *h_this_mem; ! 353: }; ! 354: ! 355: /* ! 356: * Conditional stack. ! 357: * One of these is allocated when a #if* line ! 358: * is encountered to store the state of the ! 359: * conditional block until the matching #endif ! 360: * is found. ! 361: */ ! 362: typedef struct { ! 363: int c_op; /* Last operator seen in block */ ! 364: int c_state; /* Has any block been true */ ! 365: } CSTACK; ! 366: ! 367: /* ! 368: * Include pushdown stack entry. ! 369: * One of these is allocated when a #include line ! 370: * is encountered to hold the file name, the line number ! 371: * and the FILE pointer of the old source file. ! 372: */ ! 373: typedef struct { ! 374: FILE *i_fp; /* Saved FILE pointer */ ! 375: int i_line; /* Saved line */ ! 376: TOK *i_file; /* Saved file name */ ! 377: CSTACK *i_cstackp; /* Saved conditional stack state */ ! 378: } ISTACK; ! 379: ! 380: /* ! 381: * These structures keep track of the labels and constants for switches. ! 382: * It is used by code in the statement reader "stat.c". ! 383: */ ! 384: typedef struct { ! 385: int sc_lab; /* Label number */ ! 386: ival_t sc_val; /* Value */ ! 387: } SCASE; ! 388: ! 389: typedef struct { ! 390: int sb_ncase; /* # of cases */ ! 391: int sb_dlab; /* Default label */ ! 392: SCASE sb_case[]; /* Adjustable array */ ! 393: } SBLOCK; ! 394: ! 395: /* ! 396: * Tree nodes. ! 397: * All tree nodes are the same size. ! 398: * A node of any type may be changed into a node of any other type. ! 399: * The madness with the defines and the dots is just niceness ! 400: * in the wake of wishing to compile under both Bell and UCB structure rules. ! 401: */ ! 402: typedef struct tree TREE; ! 403: struct tree ! 404: { ! 405: short t_op; /* Opcode */ ! 406: short t_type; /* Internal type (T_) */ ! 407: DIM *t_dp; /* DIM list */ ! 408: INFO *t_ip; /* INFO if aggregate */ ! 409: union { ! 410: struct { ! 411: TREE *t_xlp; ! 412: union { ! 413: TREE *t_xrp; ! 414: struct { ! 415: char t_xfw; ! 416: char t_xfb; ! 417: } t_1; ! 418: } t_2; ! 419: } t_3; ! 420: ival_t t_xival; ! 421: lval_t t_xlval; ! 422: dval_t t_xdval; ! 423: sizeof_t t_xzval; ! 424: struct { ! 425: sizeof_t t_xoffs; ! 426: int t_xseg; ! 427: union { ! 428: int t_xlab; ! 429: SYM *t_xsp; ! 430: } t_4; ! 431: } t_5; ! 432: short t_xreg; ! 433: } t_6; ! 434: }; ! 435: ! 436: #define t_lp t_6.t_3.t_xlp /* Left link */ ! 437: #define t_rp t_6.t_3.t_2.t_xrp /* Right link */ ! 438: #define t_width t_6.t_3.t_2.t_1.t_xfw /* Field width, bits */ ! 439: #define t_base t_6.t_3.t_2.t_1.t_xfb /* Field base bit */ ! 440: #define t_ival t_6.t_xival /* ICON value */ ! 441: #define t_lval t_6.t_xlval /* LCON value */ ! 442: #define t_dval t_6.t_xdval /* DCON value */ ! 443: #define t_zval t_6.t_xzval /* ZCON value */ ! 444: #define t_reg t_6.t_xreg /* Register code */ ! 445: #define t_offs t_6.t_5.t_xoffs /* Label offset */ ! 446: #define t_seg t_6.t_5.t_xseg /* Segment */ ! 447: #define t_label t_6.t_5.t_4.t_xlab /* Label # */ ! 448: #define t_sp t_6.t_5.t_4.t_xsp /* Global symbol link */ ! 449: ! 450: /* ! 451: * Opdope flag bits. ! 452: */ ! 453: #define PRIO 0x001F /* Priority */ ! 454: #define NSTL 0x0020 /* No structures on left */ ! 455: #define RAS 0x0040 /* Right associative */ ! 456: #define RLVL 0x0080 /* Require lvalue on left */ ! 457: #define NFLT 0x0100 /* No floats */ ! 458: #define NPTR 0x0200 /* No pointers on right */ ! 459: #define NPTL 0x0400 /* No pointers on left */ ! 460: #define RTOR 0x0800 /* Require truth value on right */ ! 461: #define RTOL 0x1000 /* Require truth value on left */ ! 462: #define ASGN 0x2000 /* Assignment op */ ! 463: #define NSTR 0x4000 /* No structures on right */ ! 464: #define FOLD 0x8000 /* Constant folding allowed */ ! 465: ! 466: /* ! 467: * Conversion dope bits. ! 468: */ ! 469: #define GOAL 077 /* Goal type */ ! 470: #define CVRA 0100 /* Convert right on assignment */ ! 471: #define CVR 0200 /* Convert right */ ! 472: #define CVL 0400 /* Convert left */ ! 473: #define GTL 01000 /* Goal type from left */ ! 474: #define GTR 02000 /* Goal type from right */ ! 475: #define UREL 04000 /* Unsigned relation check needed */ ! 476: #define CARA 010000 /* Cast right on assignment */ ! 477: ! 478: /* Macros. */ ! 479: #define ideq(tp) (strcmp((tp)->t_id, id) == 0) ! 480: ! 481: /* ! 482: * cpp variables. ! 483: */ ! 484: extern char dbuf[NDBUF], *dputp, *dpshp; ! 485: extern DSTACK dstack[], *dstackp, *dlistp; ! 486: extern ISTACK istack[], *istackp; ! 487: extern CSTACK cstack[], *cstackp; ! 488: extern HIDESET *hidefree, *hidesets; ! 489: extern int cstate; ! 490: extern int lastchar; ! 491: extern int instring; ! 492: extern int notskip; ! 493: extern int ndirs; ! 494: extern char *incdirs[]; ! 495: extern char deftrue[]; ! 496: extern char deffalse[]; ! 497: extern long curtime; ! 498: ! 499: /* ! 500: * Functions. ! 501: */ ! 502: extern TOK *newtoken(); ! 503: extern SYM *newsym(); ! 504: extern CPPSYM *newcpp(); ! 505: extern DIM *dupldim(); ! 506: extern DIM *tackdim(); ! 507: extern INFO *newinfo(); ! 508: extern char *new(); ! 509: extern TREE *expr(); ! 510: extern char *talloc(); ! 511: extern TREE *pexpr(); ! 512: extern DIM *tdalloc(); ! 513: extern TREE *build(); ! 514: extern TREE *charray(); ! 515: extern TREE *chfun(); ! 516: extern TREE *bicon(); ! 517: extern TREE *bzcon(); ! 518: extern TREE *bid(); ! 519: extern TREE *bcvt(); ! 520: extern TREE *bconvert(); ! 521: extern TREE *term(); ! 522: extern TREE *tree(); ! 523: extern TREE *bstring(); ! 524: extern TREE *fold0(); ! 525: extern SYM *deflookup(); ! 526: extern SYM *reflookup(); ! 527: extern SYM *moslookup(); ! 528: extern SYM *fakedef(); ! 529: extern SYM *taglookup(); ! 530: extern SYM *fixlevel(); ! 531: extern SYM *declare(); ! 532: extern long fieldalign(); ! 533: extern ival_t iconexpr(); ! 534: extern sizeof_t ssize(); ! 535: extern sizeof_t tsize(); ! 536: extern sizeof_t sdsize(); ! 537: extern sizeof_t tidsize(); ! 538: extern sizeof_t psize(); ! 539: extern sizeof_t getbound(); ! 540: extern TREE *cast(); /* cast declarator reader */ ! 541: /* mch/bind.c */ ! 542: extern TREE *transform(); ! 543: extern sizeof_t szcheck(); ! 544: #if FOLD_DOUBLES ! 545: extern double dval_to_d(); ! 546: extern void d_to_dval(); ! 547: #endif ! 548: ! 549: /* ! 550: * Variables. ! 551: */ ! 552: extern SYM *cfsym; ! 553: extern int cflab; ! 554: extern char id[]; ! 555: extern unsigned idhash; ! 556: extern unsigned idhide; ! 557: extern int idsize; ! 558: extern TOK *idp; ! 559: extern TOK *hash0[]; ! 560: extern int llex; ! 561: extern int lsym; ! 562: extern int s; ! 563: extern ival_t ival; ! 564: extern lval_t lval; ! 565: extern dval_t dval; ! 566: extern short tval; ! 567: extern int line; ! 568: extern char file[]; ! 569: extern char basefile[]; ! 570: extern TOK *tfile; ! 571: extern unsigned char ct[]; ! 572: extern int nerr; ! 573: extern char *passname; ! 574: extern int nargs; ! 575: extern SYM *args[]; ! 576: extern int incpp; ! 577: extern int ininit; ! 578: extern int incase; ! 579: extern short opdope[]; ! 580: extern short cvdope[]; ! 581: extern int oldseg; ! 582: extern int mnamef; ! 583: extern int labgen; ! 584: extern int cblab; ! 585: extern int cclab; ! 586: extern SBLOCK *sbp; ! 587: extern FILE *ifp; ! 588: extern FILE *ofp; /* Output file */ ! 589: ! 590: #if OVERLAID ! 591: extern jmp_buf death; /* Fatal errors */ ! 592: #endif ! 593: /* mch/bind.c */ ! 594: extern int mysizes[]; ! 595: extern char mytypes[]; ! 596: ! 597: /* end of h/cc0.h */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.