xref: /netbsd-src/usr.bin/m4/mdef.h (revision cda4f8f6ee55684e8d311b86c99ea59191e6b74f)
1 /*  Header : mdef.h
2     Author : Ozan Yigit
3     Updated: 4 May 1992
4 */
5 #ifndef	MACRTYPE
6 
7 #ifndef unix
8 #define unix 0
9 #endif
10 
11 #ifndef vms
12 #define vms 0
13 #endif
14 
15 #include <stdio.h>
16 #include <signal.h>
17 
18 #ifdef	__STDC__
19 #include <string.h>
20 #else
21 #ifdef	VOID
22 #define void	int
23 #endif
24 extern	int	strlen();
25 extern	int	strcmp();
26 extern	void	memcpy();
27 #endif
28 
29 /*  m4 constants */
30 
31 #define MACRTYPE        1
32 #define DEFITYPE        2
33 #define EXPRTYPE        3
34 #define SUBSTYPE        4
35 #define IFELTYPE        5
36 #define LENGTYPE        6
37 #define CHNQTYPE        7
38 #define SYSCTYPE        8
39 #define UNDFTYPE        9
40 #define INCLTYPE        10
41 #define SINCTYPE        11
42 #define PASTTYPE        12
43 #define SPASTYPE        13
44 #define INCRTYPE        14
45 #define IFDFTYPE        15
46 #define PUSDTYPE        16
47 #define POPDTYPE        17
48 #define SHIFTYPE        18
49 #define DECRTYPE        19
50 #define DIVRTYPE        20
51 #define UNDVTYPE        21
52 #define DIVNTYPE        22
53 #define MKTMTYPE        23
54 #define ERRPTYPE        24
55 #define M4WRTYPE        25
56 #define TRNLTYPE        26
57 #define DNLNTYPE        27
58 #define DUMPTYPE        28
59 #define CHNCTYPE        29
60 #define INDXTYPE        30
61 #define SYSVTYPE        31
62 #define EXITTYPE        32
63 #define DEFNTYPE        33
64 #define LINETYPE	34
65 #define TRIMTYPE	35
66 #define TLITTYPE	36
67 #define	DEFQTYPE	37		/* defquote */
68 #define QUTRTYPE	38		/* quoter thus defined */
69 
70 #define STATIC          128
71 
72 /* m4 special characters */
73 
74 #define ARGFLAG         '$'
75 #define LPAREN          '('
76 #define RPAREN          ')'
77 #define LQUOTE          '`'
78 #define RQUOTE          '\''
79 #define	VQUOTE		('V'&(' '- 1))
80 #define COMMA           ','
81 #define SCOMMT          '#'
82 #define ECOMMT          '\n'
83 
84 /*
85  * other important constants
86  */
87 
88 #define EOS             (char) 0
89 #define MAXINP          10              /* maximum include files   */
90 #define MAXOUT          10              /* maximum # of diversions */
91 #ifdef	SMALL
92 #define MAXSTR           512            /* maximum size of string  */
93 #define BUFSIZE         4096            /* size of pushback buffer */
94 #define STACKMAX        1024            /* size of call stack      */
95 #define STRSPMAX        4096            /* size of string space    */
96 #define HASHSIZE         199            /* maximum size of hashtab */
97 #else
98 #define MAXSTR          1024            /* maximum size of string  */
99 #define BUFSIZE         8192            /* size of pushback buffer */
100 #define STACKMAX        2048            /* size of call stack      */
101 #define STRSPMAX        8192            /* size of string space    */
102 #define HASHSIZE         509            /* maximum size of hashtab */
103 #endif
104 #define MAXTOK          MAXSTR          /* maximum chars in a tokn */
105 
106 #define ALL             1
107 #define TOP             0
108 
109 #define TRUE            1
110 #define FALSE           0
111 
112 /* m4 data structures */
113 
114 typedef struct ndblock *ndptr;
115 
116 struct ndblock                  /* hashtable structure        */
117     {
118         char    *name;          /* entry name..               */
119         char    *defn;          /* definition..               */
120         int     type;           /* type of the entry..        */
121         ndptr   nxtptr;         /* link to next entry..       */
122     };
123 
124 #define nil     ((ndptr) 0)
125 
126 typedef union			/* stack structure */
127     {	int	sfra;		/* frame entry  */
128 	char 	*sstr;		/* string entry */
129     } stae;
130 
131 /*
132  * macros for readibility and/or speed
133  *
134  *      gpbc()  - get a possibly pushed-back character
135  *      min()   - select the minimum of two elements
136  *      pushf() - push a call frame entry onto stack
137  *      pushs() - push a string pointer onto stack
138  */
139 #define gpbc() 	 bp == bb ? getc(infile[ilevel]) : *--bp
140 #define min(x,y) ((x > y) ? y : x)
141 #define pushf(x) if (sp < STACKMAX) mstack[++sp].sfra = (x)
142 #define pushs(x) if (sp < STACKMAX) mstack[++sp].sstr = (x)
143 
144 /*
145  *	    .				   .
146  *	|   .	|  <-- sp		|  .  |
147  *	+-------+			+-----+
148  *	| arg 3 ----------------------->| str |
149  *	+-------+			|  .  |
150  *	| arg 2 ---PREVEP-----+ 	   .
151  *	+-------+	      |
152  *	    .		      |		|     |
153  *	+-------+	      | 	+-----+
154  *	| plev	|  PARLEV     +-------->| str |
155  *	+-------+			|  .  |
156  *	| type	|  CALTYP		   .
157  *	+-------+
158  *	| prcf	---PREVFP--+
159  *	+-------+  	   |
160  *	|   .	|  PREVSP  |
161  *	    .	   	   |
162  *	+-------+	   |
163  *	|	<----------+
164  *	+-------+
165  *
166  */
167 #define PARLEV  (mstack[fp].sfra)
168 #define CALTYP  (mstack[fp-1].sfra)
169 #define PREVEP	(mstack[fp+3].sstr)
170 #define PREVSP	(fp-3)
171 #define PREVFP	(mstack[fp-2].sfra)
172 
173 #endif
174