|
|
1.1 root 1: /* Copyright (c) 1980 Regents of the University of California */
2:
3: /* static char sccsid[] = "@(#)pc3.h 1.3 9/4/80"; */
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();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.