1250226Sjkim/* $OpenBSD: extern.h,v 1.52 2012/04/12 17:00:11 espie Exp $ */ 295060Sjmallett/* $NetBSD: extern.h,v 1.3 1996/01/13 23:25:24 pk Exp $ */ 395060Sjmallett 41590Srgrimes/*- 51590Srgrimes * Copyright (c) 1991, 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 * @(#)extern.h 8.1 (Berkeley) 6/6/93 3675551Sgshapiro * $FreeBSD$ 371590Srgrimes */ 381590Srgrimes 3995060Sjmallett/* eval.c */ 40228063Sbaptextern void eval(const char *[], int, int, int); 4195060Sjmallettextern void dodefine(const char *, const char *); 4295060Sjmallettextern unsigned long expansion_id; 431590Srgrimes 4495060Sjmallett/* expr.c */ 4595060Sjmallettextern int expr(const char *); 46241777Sedextern int32_t end_result; 4795060Sjmallett 4895060Sjmallett/* gnum4.c */ 49228063Sbaptextern void addtoincludepath(const char *); 5095060Sjmallettextern struct input_file *fopen_trypath(struct input_file *, const char *); 5195060Sjmallettextern void doindir(const char *[], int); 5295060Sjmallettextern void dobuiltin(const char *[], int); 5395060Sjmallettextern void dopatsubst(const char *[], int); 5495060Sjmallettextern void doregexp(const char *[], int); 5595060Sjmallett 5695060Sjmallettextern void doprintlineno(struct input_file *); 5795060Sjmallettextern void doprintfilename(struct input_file *); 5895060Sjmallett 5995060Sjmallettextern void doesyscmd(const char *); 60228063Sbaptextern void getdivfile(const char *); 61228063Sbaptextern void doformat(const char *[], int); 6295060Sjmallett 63228063Sbapt/* look.c */ 64100014Sjmallett 65228063Sbapt#define FLAG_UNTRACED 0 66228063Sbapt#define FLAG_TRACED 1 67228063Sbapt#define FLAG_NO_TRACE 2 68228063Sbapt 69228063Sbaptextern void init_macros(void); 7095060Sjmallettextern ndptr lookup(const char *); 71228063Sbaptextern void mark_traced(const char *, int); 72228063Sbaptextern struct ohash macros; 7395060Sjmallett 74228063Sbaptextern struct macro_definition *lookup_macro_definition(const char *); 75228063Sbaptextern void macro_define(const char *, const char *); 76228063Sbaptextern void macro_pushdef(const char *, const char *); 77228063Sbaptextern void macro_popdef(const char *); 78228063Sbaptextern void macro_undefine(const char *); 79228063Sbaptextern void setup_builtin(const char *, unsigned int); 80228063Sbaptextern void macro_for_all(void (*)(const char *, struct macro_definition *)); 81228063Sbapt#define macro_getdef(p) ((p)->d) 82228063Sbapt#define macro_name(p) ((p)->name) 83228063Sbapt#define macro_builtin_type(p) ((p)->builtin_type) 84228063Sbapt#define is_traced(p) ((p)->trace_flags == FLAG_NO_TRACE ? (trace_flags & TRACE_ALL) : (p)->trace_flags) 85228063Sbapt 86228063Sbaptextern ndptr macro_getbuiltin(const char *); 87228063Sbapt 8895060Sjmallett/* main.c */ 8995060Sjmallettextern void outputstr(const char *); 90228063Sbaptextern void do_emit_synchline(void); 91234310Sbaptextern int exit_code; 92228063Sbapt#define emit_synchline() do { if (synch_lines) do_emit_synchline(); } while(0) 9395060Sjmallett 9495060Sjmallett/* misc.c */ 9595060Sjmallettextern void chrsave(int); 96228063Sbaptextern char *compute_prevep(void); 9795060Sjmallettextern void getdiv(int); 9895060Sjmallettextern ptrdiff_t indx(const char *, const char *); 99228063Sbaptextern void initspaces(void); 10095060Sjmallettextern void killdiv(void); 10195060Sjmallettextern void onintr(int); 10295060Sjmallettextern void pbnum(int); 103228063Sbaptextern void pbnumbase(int, int, int); 10495060Sjmallettextern void pbunsigned(unsigned long); 10595060Sjmallettextern void pbstr(const char *); 106228063Sbaptextern void pushback(int); 107228063Sbaptextern void *xalloc(size_t, const char *fmt, ...); 108228063Sbaptextern void *xrealloc(void *, size_t, const char *fmt, ...); 10995060Sjmallettextern char *xstrdup(const char *); 11095060Sjmallettextern void usage(void); 11195060Sjmallettextern void resizedivs(int); 11295060Sjmallettextern size_t buffer_mark(void); 11395060Sjmallettextern void dump_buffer(FILE *, size_t); 114228063Sbaptextern void m4errx(int, const char *, ...); 11595060Sjmallett 116228063Sbaptextern int obtain_char(struct input_file *); 11795060Sjmallettextern void set_input(struct input_file *, FILE *, const char *); 11895060Sjmallettextern void release_input(struct input_file *); 11995060Sjmallett 120228063Sbapt/* speeded-up versions of chrsave/pushback */ 121228063Sbapt#define PUSHBACK(c) \ 12295060Sjmallett do { \ 12395060Sjmallett if (bp >= endpbb) \ 12495060Sjmallett enlarge_bufspace(); \ 12595060Sjmallett *bp++ = (c); \ 12695060Sjmallett } while(0) 127100014Sjmallett 12895060Sjmallett#define CHRSAVE(c) \ 12995060Sjmallett do { \ 13095060Sjmallett if (ep >= endest) \ 13195060Sjmallett enlarge_strspace(); \ 13295060Sjmallett *ep++ = (c); \ 13395060Sjmallett } while(0) 13495060Sjmallett 13595060Sjmallett/* and corresponding exposure for local symbols */ 13695060Sjmallettextern void enlarge_bufspace(void); 13795060Sjmallettextern void enlarge_strspace(void); 138228063Sbaptextern unsigned char *endpbb; 13995060Sjmallettextern char *endest; 14095060Sjmallett 14195060Sjmallett/* trace.c */ 142228063Sbaptextern unsigned int trace_flags; 143228063Sbapt#define TRACE_ALL 512 14495060Sjmallettextern void trace_file(const char *); 145228063Sbaptextern size_t trace(const char **, int, struct input_file *); 14695060Sjmallettextern void finish_trace(size_t); 14795060Sjmallettextern void set_trace_flags(const char *); 14895060Sjmallettextern FILE *traceout; 14995060Sjmallett 15095060Sjmallettextern stae *mstack; /* stack of m4 machine */ 15195060Sjmallettextern char *sstack; /* shadow stack, for string space extension */ 1521590Srgrimesextern FILE *active; /* active output file pointer */ 15395060Sjmallettextern struct input_file infile[];/* input file stack (0=stdin) */ 15495060Sjmallettextern FILE **outfile; /* diversion array(0=bitbucket) */ 15595060Sjmallettextern int maxout; /* maximum number of diversions */ 156228063Sbaptextern int fp; /* m4 call frame pointer */ 1571590Srgrimesextern int ilevel; /* input file stack pointer */ 1581590Srgrimesextern int oindex; /* diversion index. */ 1591590Srgrimesextern int sp; /* current m4 stack pointer */ 160228063Sbaptextern unsigned char *bp; /* first available character */ 161228063Sbaptextern unsigned char *buf; /* push-back buffer */ 162228063Sbaptextern unsigned char *bufbase; /* buffer base for this ilevel */ 163228063Sbaptextern unsigned char *bbase[]; /* buffer base per ilevel */ 16495060Sjmallettextern char ecommt[MAXCCHARS+1];/* end character for comment */ 1651590Srgrimesextern char *ep; /* first free char in strspace */ 16695060Sjmallettextern char lquote[MAXCCHARS+1];/* left quote character (`) */ 167228063Sbaptextern char **m4wraps; /* m4wrap string default. */ 168228063Sbaptextern int maxwraps; /* size of m4wraps array */ 169228063Sbaptextern int wrapindex; /* current index in m4wraps */ 170228063Sbapt 171228063Sbaptextern const char *null; /* as it says.. just a null. */ 17295060Sjmallettextern char rquote[MAXCCHARS+1];/* right quote character (') */ 17395060Sjmallettextern char scommt[MAXCCHARS+1];/* start character for comment */ 174228063Sbaptextern int synch_lines; /* line synchronisation directives */ 17595060Sjmallett 17695060Sjmallettextern int mimic_gnu; /* behaves like gnu-m4 */ 177228063Sbaptextern int prefix_builtins; /* prefix builtin macros with m4_ */ 17895095Sjmallett 179