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