xref: /original-bsd/usr.bin/m4/mdef.h (revision 7a8f01dc)
1 /*
2  * Copyright (c) 1989 The Regents of the University of California.
3  * All rights reserved.
4  *
5  * This code is derived from software contributed to Berkeley by
6  * Ozan Yigit.
7  *
8  * %sccs.include.redist.c%
9  *
10  *	@(#)mdef.h	5.5 (Berkeley) 06/01/90
11  */
12 
13 /*
14  * mdef.h
15  * Facility: m4 macro processor
16  * by: oz
17  */
18 
19 #include <sys/signal.h>
20 #include <stdio.h>
21 #include <ctype.h>
22 #include "pathnames.h"
23 
24 /*
25  *
26  * m4 constants..
27  *
28  */
29 
30 #define MACRTYPE        1
31 #define DEFITYPE        2
32 #define EXPRTYPE        3
33 #define SUBSTYPE        4
34 #define IFELTYPE        5
35 #define LENGTYPE        6
36 #define CHNQTYPE        7
37 #define SYSCTYPE        8
38 #define UNDFTYPE        9
39 #define INCLTYPE        10
40 #define SINCTYPE        11
41 #define PASTTYPE        12
42 #define SPASTYPE        13
43 #define INCRTYPE        14
44 #define IFDFTYPE        15
45 #define PUSDTYPE        16
46 #define POPDTYPE        17
47 #define SHIFTYPE        18
48 #define DECRTYPE        19
49 #define DIVRTYPE        20
50 #define UNDVTYPE        21
51 #define DIVNTYPE        22
52 #define MKTMTYPE        23
53 #define ERRPTYPE        24
54 #define M4WRTYPE        25
55 #define TRNLTYPE        26
56 #define DNLNTYPE        27
57 #define DUMPTYPE        28
58 #define CHNCTYPE        29
59 #define INDXTYPE        30
60 #define SYSVTYPE        31
61 #define EXITTYPE        32
62 #define DEFNTYPE        33
63 
64 #define STATIC          128
65 
66 /*
67  * m4 special characters
68  */
69 
70 #define ARGFLAG         '$'
71 #define LPAREN          '('
72 #define RPAREN          ')'
73 #define LQUOTE          '`'
74 #define RQUOTE          '\''
75 #define COMMA           ','
76 #define SCOMMT          '#'
77 #define ECOMMT          '\n'
78 
79 /*
80  * other important constants
81  */
82 
83 #define EOS             (char) 0
84 #define MAXINP          10              /* maximum include files   */
85 #define MAXOUT          10              /* maximum # of diversions */
86 #define MAXSTR          512             /* maximum size of string  */
87 #define BUFSIZE         4096            /* size of pushback buffer */
88 #define STACKMAX        1024            /* size of call stack      */
89 #define STRSPMAX        4096            /* size of string space    */
90 #define MAXTOK          MAXSTR          /* maximum chars in a tokn */
91 #define HASHSIZE        199             /* maximum size of hashtab */
92 
93 #define ALL             1
94 #define TOP             0
95 
96 #define TRUE            1
97 #define FALSE           0
98 #define cycle           for(;;)
99 
100 /*
101  * m4 data structures
102  */
103 
104 typedef struct ndblock *ndptr;
105 
106 struct ndblock {                /* hastable structure         */
107         char    *name;          /* entry name..               */
108         char    *defn;          /* definition..               */
109         int     type;           /* type of the entry..        */
110         ndptr   nxtptr;         /* link to next entry..       */
111 };
112 
113 #define nil     ((ndptr) 0)
114 
115 struct keyblk {
116         char    *knam;          /* keyword name */
117         int     ktyp;           /* keyword type */
118 };
119 
120 typedef union {			/* stack structure */
121 	int	sfra;		/* frame entry  */
122 	char 	*sstr;		/* string entry */
123 } stae;
124 
125 /*
126  * macros for readibility and/or speed
127  *
128  *      gpbc()  - get a possibly pushed-back character
129  *      min()   - select the minimum of two elements
130  *      pushf() - push a call frame entry onto stack
131  *      pushs() - push a string pointer onto stack
132  */
133 #define gpbc() 	 (bp > buf) ? *--bp : getc(infile[ilevel])
134 #define min(x,y) ((x > y) ? y : x)
135 #define pushf(x) if (sp < STACKMAX) mstack[++sp].sfra = (x)
136 #define pushs(x) if (sp < STACKMAX) mstack[++sp].sstr = (x)
137 
138 /*
139  *	    .				   .
140  *	|   .	|  <-- sp		|  .  |
141  *	+-------+			+-----+
142  *	| arg 3 ----------------------->| str |
143  *	+-------+			|  .  |
144  *	| arg 2 ---PREVEP-----+ 	   .
145  *	+-------+	      |
146  *	    .		      |		|     |
147  *	+-------+	      | 	+-----+
148  *	| plev	|  PARLEV     +-------->| str |
149  *	+-------+			|  .  |
150  *	| type	|  CALTYP		   .
151  *	+-------+
152  *	| prcf	---PREVFP--+
153  *	+-------+  	   |
154  *	|   .	|  PREVSP  |
155  *	    .	   	   |
156  *	+-------+	   |
157  *	|	<----------+
158  *	+-------+
159  *
160  */
161 #define PARLEV  (mstack[fp].sfra)
162 #define CALTYP  (mstack[fp-1].sfra)
163 #define PREVEP	(mstack[fp+3].sstr)
164 #define PREVSP	(fp-3)
165 #define PREVFP	(mstack[fp-2].sfra)
166