1*823Speter /* Copyright (c) 1980 Regents of the University of California */ 2*823Speter 3*823Speter /* static char sccsid[] = "@(#)pc3.h 1.1 08/31/80"; */ 4*823Speter 5*823Speter /* 6*823Speter * a symbol table entry. 7*823Speter */ 8*823Speter struct symbol { 9*823Speter char *name; /* pointer to string table */ 10*823Speter unsigned char type; /* symbol type */ 11*823Speter int lookup; /* whether new or old */ 12*823Speter union { /* either */ 13*823Speter struct { /* for a symbol, */ 14*823Speter struct symbol *fromp; /* its defining .p file */ 15*823Speter struct symbol *fromi; /* its defining .i file */ 16*823Speter long iline; /* the .i file line */ 17*823Speter struct symbol *rfilep; /* its resolving file */ 18*823Speter long rline; /* resolving file line */ 19*823Speter } sym_str; 20*823Speter time_t modtime; /* for a file, its st_mtime */ 21*823Speter } sym_un; 22*823Speter }; 23*823Speter 24*823Speter #define NIL 0 25*823Speter 26*823Speter struct fileinfo { 27*823Speter FILE *file; 28*823Speter char *name; 29*823Speter time_t modtime; 30*823Speter off_t nextoffset; 31*823Speter }; 32*823Speter 33*823Speter #define OARMAG 0177545 34*823Speter 35*823Speter /* 36*823Speter * this is used to trim pointers into the range of a mod of a prime. 37*823Speter */ 38*823Speter #define SHORT_ABS( n ) ( n & 077777 ) 39*823Speter 40*823Speter /* 41*823Speter * a prime number which rounds a struct symboltableinfo up to ~BUFSIZ 42*823Speter */ 43*823Speter #define SYMBOLPRIME 1021 44*823Speter /* 45*823Speter * number of entries used in this symbol table, 46*823Speter * a chain to the next symbol table, 47*823Speter * and the entries. (pointers to struct symbols.) 48*823Speter */ 49*823Speter struct symboltableinfo { 50*823Speter long used; 51*823Speter struct symboltableinfo *chain; 52*823Speter struct symbol *entry[ SYMBOLPRIME ]; 53*823Speter }; 54*823Speter 55*823Speter /* 56*823Speter * if new struct symbols are needed, 57*823Speter * allocate this much space and hack it up into struct symbols. 58*823Speter */ 59*823Speter #define SYMBOLALLOC BUFSIZ 60*823Speter 61*823Speter /* 62*823Speter * a prime number which rounds a struct stringtableinfo up to ~BUFSIZ 63*823Speter */ 64*823Speter #define STRINGPRIME 1021 65*823Speter 66*823Speter /* 67*823Speter * number of entries used in this string table, 68*823Speter * a chain to the next string table, 69*823Speter * and the entries. (pointers to the character table.) 70*823Speter */ 71*823Speter struct stringtableinfo { 72*823Speter long used; 73*823Speter struct stringtableinfo *chain; 74*823Speter char *entry[ STRINGPRIME ]; 75*823Speter }; 76*823Speter 77*823Speter /* 78*823Speter * if more character table space is needed, 79*823Speter * allocate this much and hack it up into strings. 80*823Speter */ 81*823Speter #define CHARALLOC BUFSIZ 82*823Speter 83*823Speter /* 84*823Speter * an enumeration for error types 85*823Speter */ 86*823Speter #define FATAL 0 87*823Speter #define WARNING 1 88*823Speter 89*823Speter /* 90*823Speter * an enumeration for lookups 91*823Speter */ 92*823Speter #define NEW 0 93*823Speter #define OLD 1 94*823Speter 95*823Speter /* 96*823Speter * booleans 97*823Speter */ 98*823Speter #define BOOL int 99*823Speter #define FALSE 0 100*823Speter #define TRUE 1 101*823Speter 102*823Speter /* 103*823Speter * function types. 104*823Speter */ 105*823Speter struct symbol *entersymbol(); 106*823Speter struct symbol *symbolalloc(); 107*823Speter long stringhash(); 108*823Speter char *enterstring(); 109*823Speter char *charalloc(); 110*823Speter BOOL nextelement(); 111*823Speter time_t mtime(); 112*823Speter char *classify(); 113