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