1228063Sbapt/* $OpenBSD: mdef.h,v 1.31 2011/09/27 07:24:02 espie Exp $ */ 295060Sjmallett/* $NetBSD: mdef.h,v 1.7 1996/01/13 23:25:27 pk Exp $ */ 395060Sjmallett 41590Srgrimes/* 51590Srgrimes * Copyright (c) 1989, 1993 61590Srgrimes * The Regents of the University of California. All rights reserved. 71590Srgrimes * 81590Srgrimes * This code is derived from software contributed to Berkeley by 91590Srgrimes * Ozan Yigit at York University. 101590Srgrimes * 111590Srgrimes * Redistribution and use in source and binary forms, with or without 121590Srgrimes * modification, are permitted provided that the following conditions 131590Srgrimes * are met: 141590Srgrimes * 1. Redistributions of source code must retain the above copyright 151590Srgrimes * notice, this list of conditions and the following disclaimer. 161590Srgrimes * 2. Redistributions in binary form must reproduce the above copyright 171590Srgrimes * notice, this list of conditions and the following disclaimer in the 181590Srgrimes * documentation and/or other materials provided with the distribution. 19228063Sbapt * 3. Neither the name of the University nor the names of its contributors 201590Srgrimes * may be used to endorse or promote products derived from this software 211590Srgrimes * without specific prior written permission. 221590Srgrimes * 231590Srgrimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 241590Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 251590Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 261590Srgrimes * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 271590Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 281590Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 291590Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 301590Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 311590Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 321590Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 331590Srgrimes * SUCH DAMAGE. 341590Srgrimes * 351590Srgrimes * @(#)mdef.h 8.1 (Berkeley) 6/6/93 3694957Sjmallett * $FreeBSD$ 371590Srgrimes */ 381590Srgrimes 39228063Sbapt#ifdef __GNUC__ 40228063Sbapt# define UNUSED __attribute__((__unused__)) 41228063Sbapt#else 42228063Sbapt# define UNUSED 43228063Sbapt#endif 44228063Sbapt 451590Srgrimes#define MACRTYPE 1 461590Srgrimes#define DEFITYPE 2 471590Srgrimes#define EXPRTYPE 3 481590Srgrimes#define SUBSTYPE 4 491590Srgrimes#define IFELTYPE 5 501590Srgrimes#define LENGTYPE 6 511590Srgrimes#define CHNQTYPE 7 521590Srgrimes#define SYSCTYPE 8 531590Srgrimes#define UNDFTYPE 9 541590Srgrimes#define INCLTYPE 10 551590Srgrimes#define SINCTYPE 11 561590Srgrimes#define PASTTYPE 12 571590Srgrimes#define SPASTYPE 13 581590Srgrimes#define INCRTYPE 14 591590Srgrimes#define IFDFTYPE 15 601590Srgrimes#define PUSDTYPE 16 611590Srgrimes#define POPDTYPE 17 621590Srgrimes#define SHIFTYPE 18 631590Srgrimes#define DECRTYPE 19 641590Srgrimes#define DIVRTYPE 20 651590Srgrimes#define UNDVTYPE 21 661590Srgrimes#define DIVNTYPE 22 671590Srgrimes#define MKTMTYPE 23 681590Srgrimes#define ERRPTYPE 24 691590Srgrimes#define M4WRTYPE 25 701590Srgrimes#define TRNLTYPE 26 711590Srgrimes#define DNLNTYPE 27 721590Srgrimes#define DUMPTYPE 28 731590Srgrimes#define CHNCTYPE 29 741590Srgrimes#define INDXTYPE 30 751590Srgrimes#define SYSVTYPE 31 761590Srgrimes#define EXITTYPE 32 771590Srgrimes#define DEFNTYPE 33 7895060Sjmallett#define SELFTYPE 34 7995060Sjmallett#define INDIRTYPE 35 8095060Sjmallett#define BUILTINTYPE 36 8195060Sjmallett#define PATSTYPE 37 8295060Sjmallett#define FILENAMETYPE 38 8395060Sjmallett#define LINETYPE 39 8495060Sjmallett#define REGEXPTYPE 40 8595060Sjmallett#define ESYSCMDTYPE 41 8695060Sjmallett#define TRACEONTYPE 42 8795060Sjmallett#define TRACEOFFTYPE 43 88228063Sbapt#define FORMATTYPE 44 898874Srgrimes 90228063Sbapt#define BUILTIN_MARKER "__builtin_" 91100014Sjmallett 9295060Sjmallett#define TYPEMASK 63 /* Keep bits really corresponding to a type. */ 9395060Sjmallett#define RECDEF 256 /* Pure recursive def, don't expand it */ 9495060Sjmallett#define NOARGS 512 /* builtin needs no args */ 9595060Sjmallett#define NEEDARGS 1024 /* mark builtin that need args with this */ 961590Srgrimes 971590Srgrimes/* 981590Srgrimes * m4 special characters 991590Srgrimes */ 100100014Sjmallett 1011590Srgrimes#define ARGFLAG '$' 1021590Srgrimes#define LPAREN '(' 1031590Srgrimes#define RPAREN ')' 1041590Srgrimes#define LQUOTE '`' 1051590Srgrimes#define RQUOTE '\'' 1061590Srgrimes#define COMMA ',' 1071590Srgrimes#define SCOMMT '#' 1081590Srgrimes#define ECOMMT '\n' 1091590Srgrimes 1101590Srgrimes#ifdef msdos 1111590Srgrimes#define system(str) (-1) 1121590Srgrimes#endif 1131590Srgrimes 1141590Srgrimes/* 1151590Srgrimes * other important constants 1161590Srgrimes */ 1171590Srgrimes 11895060Sjmallett#define EOS '\0' 119228063Sbapt#define MAXINP 10 /* maximum include files */ 120228063Sbapt#define MAXOUT 10 /* maximum # of diversions */ 12195060Sjmallett#define BUFSIZE 4096 /* starting size of pushback buffer */ 122228063Sbapt#define INITSTACKMAX 4096 /* starting size of call stack */ 12395060Sjmallett#define STRSPMAX 4096 /* starting size of string space */ 124228063Sbapt#define MAXTOK 512 /* maximum chars in a tokn */ 12595060Sjmallett#define MAXCCHARS 5 /* max size of comment/quote delim */ 126100014Sjmallett 1271590Srgrimes#define ALL 1 1281590Srgrimes#define TOP 0 129100014Sjmallett 1301590Srgrimes#define TRUE 1 1311590Srgrimes#define FALSE 0 1321590Srgrimes#define cycle for(;;) 1331590Srgrimes 1341590Srgrimes/* 1351590Srgrimes * m4 data structures 1361590Srgrimes */ 137100014Sjmallett 1381590Srgrimestypedef struct ndblock *ndptr; 139100014Sjmallett 140228063Sbaptstruct macro_definition { 141228063Sbapt struct macro_definition *next; 14295060Sjmallett char *defn; /* definition.. */ 14395060Sjmallett unsigned int type; /* type of the entry.. */ 1441590Srgrimes}; 145100014Sjmallett 146100014Sjmallett 147228063Sbaptstruct ndblock { /* hashtable structure */ 148228063Sbapt unsigned int builtin_type; 149228063Sbapt unsigned int trace_flags; 150228063Sbapt struct macro_definition *d; 151228063Sbapt char name[1]; /* entry name.. */ 1521590Srgrimes}; 1531590Srgrimes 1541590Srgrimestypedef union { /* stack structure */ 1551590Srgrimes int sfra; /* frame entry */ 156228063Sbapt char *sstr; /* string entry */ 1571590Srgrimes} stae; 1581590Srgrimes 15995060Sjmallettstruct input_file { 160228063Sbapt FILE *file; 161228063Sbapt char *name; 162228063Sbapt unsigned long lineno; 163228063Sbapt unsigned long synch_lineno; /* used for -s */ 164228063Sbapt int c; 16595060Sjmallett}; 16695060Sjmallett 16795060Sjmallett#define CURRENT_NAME (infile[ilevel].name) 16895060Sjmallett#define CURRENT_LINE (infile[ilevel].lineno) 1691590Srgrimes/* 1701590Srgrimes * macros for readibility and/or speed 1711590Srgrimes * 172228063Sbapt * gpbc() - get a possibly pushed-back character 1731590Srgrimes * pushf() - push a call frame entry onto stack 1741590Srgrimes * pushs() - push a string pointer onto stack 1751590Srgrimes */ 176228063Sbapt#define gpbc() (bp > bufbase) ? *--bp : obtain_char(infile+ilevel) 177228063Sbapt#define pushf(x) \ 178228063Sbapt do { \ 179228063Sbapt if (++sp == (int)STACKMAX) \ 180228063Sbapt enlarge_stack();\ 181228063Sbapt mstack[sp].sfra = (x); \ 182228063Sbapt sstack[sp] = 0; \ 18395060Sjmallett } while (0) 1841590Srgrimes 185228063Sbapt#define pushs(x) \ 186228063Sbapt do { \ 187228063Sbapt if (++sp == (int)STACKMAX) \ 188228063Sbapt enlarge_stack();\ 189228063Sbapt mstack[sp].sstr = (x); \ 190228063Sbapt sstack[sp] = 1; \ 19195060Sjmallett } while (0) 19295060Sjmallett 193228063Sbapt#define pushs1(x) \ 194228063Sbapt do { \ 195228063Sbapt if (++sp == (int)STACKMAX) \ 196228063Sbapt enlarge_stack();\ 197228063Sbapt mstack[sp].sstr = (x); \ 198228063Sbapt sstack[sp] = 0; \ 19995060Sjmallett } while (0) 20095060Sjmallett 2011590Srgrimes/* 2021590Srgrimes * . . 2031590Srgrimes * | . | <-- sp | . | 2041590Srgrimes * +-------+ +-----+ 2051590Srgrimes * | arg 3 ----------------------->| str | 2061590Srgrimes * +-------+ | . | 207228063Sbapt * | arg 2 ---PREVEP-----+ . 2081590Srgrimes * +-------+ | 2091590Srgrimes * . | | | 210228063Sbapt * +-------+ | +-----+ 2111590Srgrimes * | plev | PARLEV +-------->| str | 2121590Srgrimes * +-------+ | . | 2131590Srgrimes * | type | CALTYP . 2141590Srgrimes * +-------+ 2151590Srgrimes * | prcf ---PREVFP--+ 216228063Sbapt * +-------+ | 2171590Srgrimes * | . | PREVSP | 218228063Sbapt * . | 2191590Srgrimes * +-------+ | 2201590Srgrimes * | <----------+ 2211590Srgrimes * +-------+ 2221590Srgrimes * 2231590Srgrimes */ 2241590Srgrimes#define PARLEV (mstack[fp].sfra) 225228063Sbapt#define CALTYP (mstack[fp-2].sfra) 226228063Sbapt#define TRACESTATUS (mstack[fp-1].sfra) 2271590Srgrimes#define PREVEP (mstack[fp+3].sstr) 228228063Sbapt#define PREVSP (fp-4) 229228063Sbapt#define PREVFP (mstack[fp-3].sfra) 230