Home | History | Annotate | Line # | Download | only in m4
mdef.h revision 1.2
      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