xref: /csrg-svn/usr.bin/pascal/pc3/pc3.h (revision 823)
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