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