1 
2 #ifndef P
3 #if __STDC__
4 #define P(x) x
5 #else
6 #define P(x) ()
7 #endif
8 #endif
9 
10 extern void cfatal P((char*));
11 extern void cerror P((char*));
12 extern void cwarn P((char*));
13 extern FILE * open_include P((char*, char*, int));
14 
15 extern FILE * curfile;
16 extern char   curword[];
17 extern char * c_fname;
18 extern int    c_lineno;
19 extern int    alltok;
20 extern int    dialect;
21 
22 #define DI_KNR	1
23 #define DI_ANSI	2
24 
25 extern int gettok P((void));
26 
27 struct token_trans { char * name; int token; };
28 struct token_trans * is_ctok P((const char *str, unsigned int len));
29 struct token_trans * is_ckey P((const char *str, unsigned int len));
30 
31 #define WORDSIZE	128
32 #define TK_WSPACE	256
33 #define TK_WORD 	257
34 #define TK_NUM  	258
35 #define TK_FLT  	259
36 #define TK_QUOT 	260
37 #define TK_STR  	261
38 #define TK_FILE 	262
39 #define TK_LINE 	263
40 #define TK_COPY 	264
41 
42 #define TKS_CTOK  0x200
43 #define TKS_CKEY  0x300
44 
45 #define TK_NE_OP	(TKS_CTOK+ 0)
46 #define TK_MOD_ASSIGN	(TKS_CTOK+ 1)
47 #define TK_AND_OP	(TKS_CTOK+ 2)
48 #define TK_AND_ASSIGN	(TKS_CTOK+ 3)
49 #define TK_MUL_ASSIGN	(TKS_CTOK+ 4)
50 #define TK_INC_OP	(TKS_CTOK+ 5)
51 #define TK_ADD_ASSIGN	(TKS_CTOK+ 6)
52 #define TK_DEC_OP	(TKS_CTOK+ 7)
53 #define TK_SUB_ASSIGN	(TKS_CTOK+ 8)
54 #define TK_PTR_OP	(TKS_CTOK+ 9)
55 #define TK_ELLIPSIS	(TKS_CTOK+10)
56 #define TK_DIV_ASSIGN	(TKS_CTOK+11)
57 #define TK_LEFT_OP	(TKS_CTOK+12)
58 #define TK_LEFT_ASSIGN	(TKS_CTOK+13)
59 #define TK_LE_OP	(TKS_CTOK+14)
60 #define TK_EQ_OP	(TKS_CTOK+15)
61 #define TK_GE_OP	(TKS_CTOK+16)
62 #define TK_RIGHT_OP	(TKS_CTOK+17)
63 #define TK_RIGHT_ASSIGN	(TKS_CTOK+18)
64 #define TK_XOR_ASSIGN	(TKS_CTOK+19)
65 #define TK_OR_ASSIGN	(TKS_CTOK+20)
66 #define TK_OR_OP	(TKS_CTOK+21)
67 
68 #define TK_AUTO		(TKS_CKEY+ 0)
69 #define TK_BREAK	(TKS_CKEY+ 1)
70 #define TK_CASE		(TKS_CKEY+ 2)
71 #define TK_CHAR		(TKS_CKEY+ 3)
72 #define TK_CONST	(TKS_CKEY+ 4)
73 #define TK_CONTINUE	(TKS_CKEY+ 5)
74 #define TK_DEFAULT	(TKS_CKEY+ 6)
75 #define TK_DO		(TKS_CKEY+ 7)
76 #define TK_DOUBLE	(TKS_CKEY+ 8)
77 #define TK_ELSE		(TKS_CKEY+ 9)
78 #define TK_ENUM		(TKS_CKEY+10)
79 #define TK_EXTERN	(TKS_CKEY+11)
80 #define TK_FLOAT	(TKS_CKEY+12)
81 #define TK_FOR		(TKS_CKEY+13)
82 #define TK_GOTO		(TKS_CKEY+14)
83 #define TK_IF		(TKS_CKEY+15)
84 #define TK_INT		(TKS_CKEY+16)
85 #define TK_LONG		(TKS_CKEY+17)
86 #define TK_REGISTER	(TKS_CKEY+18)
87 #define TK_RETURN	(TKS_CKEY+19)
88 #define TK_SHORT	(TKS_CKEY+20)
89 #define TK_SIGNED	(TKS_CKEY+21)
90 #define TK_SIZEOF	(TKS_CKEY+22)
91 #define TK_STATIC	(TKS_CKEY+23)
92 #define TK_STRUCT	(TKS_CKEY+24)
93 #define TK_SWITCH	(TKS_CKEY+25)
94 #define TK_TYPEDEF	(TKS_CKEY+26)
95 #define TK_UNION	(TKS_CKEY+27)
96 #define TK_UNSIGNED	(TKS_CKEY+28)
97 #define TK_VOID		(TKS_CKEY+29)
98 #define TK_VOLATILE	(TKS_CKEY+30)
99 #define TK_WHILE	(TKS_CKEY+31)
100 
101 #define MAX_INCLUDE 64	/* Nested includes */
102 #define MAX_DEFINE  64	/* Nested defines */
103 
104 extern char * set_entry P((int,char*,void*));
105 extern void * read_entry P((int,char*));
106 
107 struct define_item
108 {
109    struct define_arg * next;
110    char * name;
111    int arg_count;	/* -1 = none; >=0 = brackets with N args */
112    int in_use;		/* Skip this one for looking up #defines */
113    int varargs;		/* No warning if unexpected arguments. */
114    char value[1];	/* [arg,]*value */
115 };
116