|
|
1.1 ! root 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: * Redistribution and use in source and binary forms are permitted ! 9: * provided that: (1) source distributions retain this entire copyright ! 10: * notice and comment, and (2) distributions including binaries display ! 11: * the following acknowledgement: ``This product includes software ! 12: * developed by the University of California, Berkeley and its contributors'' ! 13: * in the documentation or other materials provided with the distribution ! 14: * and in all advertising materials mentioning features or use of this ! 15: * software. Neither the name of the University nor the names of its ! 16: * contributors may be used to endorse or promote products derived ! 17: * from this software without specific prior written permission. ! 18: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 19: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 20: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 21: * ! 22: * @(#)mdef.h 5.5 (Berkeley) 6/1/90 ! 23: */ ! 24: ! 25: /* ! 26: * mdef.h ! 27: * Facility: m4 macro processor ! 28: * by: oz ! 29: */ ! 30: ! 31: #include <sys/signal.h> ! 32: #include <stdio.h> ! 33: #include <ctype.h> ! 34: #include "pathnames.h" ! 35: ! 36: /* ! 37: * ! 38: * m4 constants.. ! 39: * ! 40: */ ! 41: ! 42: #define MACRTYPE 1 ! 43: #define DEFITYPE 2 ! 44: #define EXPRTYPE 3 ! 45: #define SUBSTYPE 4 ! 46: #define IFELTYPE 5 ! 47: #define LENGTYPE 6 ! 48: #define CHNQTYPE 7 ! 49: #define SYSCTYPE 8 ! 50: #define UNDFTYPE 9 ! 51: #define INCLTYPE 10 ! 52: #define SINCTYPE 11 ! 53: #define PASTTYPE 12 ! 54: #define SPASTYPE 13 ! 55: #define INCRTYPE 14 ! 56: #define IFDFTYPE 15 ! 57: #define PUSDTYPE 16 ! 58: #define POPDTYPE 17 ! 59: #define SHIFTYPE 18 ! 60: #define DECRTYPE 19 ! 61: #define DIVRTYPE 20 ! 62: #define UNDVTYPE 21 ! 63: #define DIVNTYPE 22 ! 64: #define MKTMTYPE 23 ! 65: #define ERRPTYPE 24 ! 66: #define M4WRTYPE 25 ! 67: #define TRNLTYPE 26 ! 68: #define DNLNTYPE 27 ! 69: #define DUMPTYPE 28 ! 70: #define CHNCTYPE 29 ! 71: #define INDXTYPE 30 ! 72: #define SYSVTYPE 31 ! 73: #define EXITTYPE 32 ! 74: #define DEFNTYPE 33 ! 75: ! 76: #define STATIC 128 ! 77: ! 78: /* ! 79: * m4 special characters ! 80: */ ! 81: ! 82: #define ARGFLAG '$' ! 83: #define LPAREN '(' ! 84: #define RPAREN ')' ! 85: #define LQUOTE '`' ! 86: #define RQUOTE '\'' ! 87: #define COMMA ',' ! 88: #define SCOMMT '#' ! 89: #define ECOMMT '\n' ! 90: ! 91: /* ! 92: * other important constants ! 93: */ ! 94: ! 95: #define EOS (char) 0 ! 96: #define MAXINP 10 /* maximum include files */ ! 97: #define MAXOUT 10 /* maximum # of diversions */ ! 98: #define MAXSTR 512 /* maximum size of string */ ! 99: #define BUFSIZE 4096 /* size of pushback buffer */ ! 100: #define STACKMAX 1024 /* size of call stack */ ! 101: #define STRSPMAX 4096 /* size of string space */ ! 102: #define MAXTOK MAXSTR /* maximum chars in a tokn */ ! 103: #define HASHSIZE 199 /* maximum size of hashtab */ ! 104: ! 105: #define ALL 1 ! 106: #define TOP 0 ! 107: ! 108: #define TRUE 1 ! 109: #define FALSE 0 ! 110: #define cycle for(;;) ! 111: ! 112: /* ! 113: * m4 data structures ! 114: */ ! 115: ! 116: typedef struct ndblock *ndptr; ! 117: ! 118: struct ndblock { /* hastable structure */ ! 119: char *name; /* entry name.. */ ! 120: char *defn; /* definition.. */ ! 121: int type; /* type of the entry.. */ ! 122: ndptr nxtptr; /* link to next entry.. */ ! 123: }; ! 124: ! 125: #define nil ((ndptr) 0) ! 126: ! 127: struct keyblk { ! 128: char *knam; /* keyword name */ ! 129: int ktyp; /* keyword type */ ! 130: }; ! 131: ! 132: typedef union { /* stack structure */ ! 133: int sfra; /* frame entry */ ! 134: char *sstr; /* string entry */ ! 135: } stae; ! 136: ! 137: /* ! 138: * macros for readibility and/or speed ! 139: * ! 140: * gpbc() - get a possibly pushed-back character ! 141: * min() - select the minimum of two elements ! 142: * pushf() - push a call frame entry onto stack ! 143: * pushs() - push a string pointer onto stack ! 144: */ ! 145: #define gpbc() (bp > buf) ? *--bp : getc(infile[ilevel]) ! 146: #define min(x,y) ((x > y) ? y : x) ! 147: #define pushf(x) if (sp < STACKMAX) mstack[++sp].sfra = (x) ! 148: #define pushs(x) if (sp < STACKMAX) mstack[++sp].sstr = (x) ! 149: ! 150: /* ! 151: * . . ! 152: * | . | <-- sp | . | ! 153: * +-------+ +-----+ ! 154: * | arg 3 ----------------------->| str | ! 155: * +-------+ | . | ! 156: * | arg 2 ---PREVEP-----+ . ! 157: * +-------+ | ! 158: * . | | | ! 159: * +-------+ | +-----+ ! 160: * | plev | PARLEV +-------->| str | ! 161: * +-------+ | . | ! 162: * | type | CALTYP . ! 163: * +-------+ ! 164: * | prcf ---PREVFP--+ ! 165: * +-------+ | ! 166: * | . | PREVSP | ! 167: * . | ! 168: * +-------+ | ! 169: * | <----------+ ! 170: * +-------+ ! 171: * ! 172: */ ! 173: #define PARLEV (mstack[fp].sfra) ! 174: #define CALTYP (mstack[fp-1].sfra) ! 175: #define PREVEP (mstack[fp+3].sstr) ! 176: #define PREVSP (fp-3) ! 177: #define PREVFP (mstack[fp-2].sfra)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.