diff options
Diffstat (limited to 'usr.bin/m4/extern.h')
-rw-r--r-- | usr.bin/m4/extern.h | 106 |
1 files changed, 56 insertions, 50 deletions
diff --git a/usr.bin/m4/extern.h b/usr.bin/m4/extern.h index 649b7f0..29ac774 100644 --- a/usr.bin/m4/extern.h +++ b/usr.bin/m4/extern.h @@ -1,4 +1,4 @@ -/* $OpenBSD: extern.h,v 1.29 2002/02/16 21:27:48 millert Exp $ */ +/* $OpenBSD: extern.h,v 1.51 2011/09/27 07:24:02 espie Exp $ */ /* $NetBSD: extern.h,v 1.3 1996/01/13 23:25:24 pk Exp $ */ /*- @@ -16,7 +16,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -37,7 +37,7 @@ */ /* eval.c */ -extern void eval(const char *[], int, int); +extern void eval(const char *[], int, int, int); extern void dodefine(const char *, const char *); extern unsigned long expansion_id; @@ -45,7 +45,7 @@ extern unsigned long expansion_id; extern int expr(const char *); /* gnum4.c */ -extern void addtoincludepath(const char *); +extern void addtoincludepath(const char *); extern struct input_file *fopen_trypath(struct input_file *, const char *); extern void doindir(const char *[], int); extern void dobuiltin(const char *[], int); @@ -56,45 +56,67 @@ extern void doprintlineno(struct input_file *); extern void doprintfilename(struct input_file *); extern void doesyscmd(const char *); - +extern void getdivfile(const char *); +extern void doformat(const char *[], int); /* look.c */ -extern ndptr addent(const char *); -extern unsigned hash(const char *); + +#define FLAG_UNTRACED 0 +#define FLAG_TRACED 1 +#define FLAG_NO_TRACE 2 + +extern void init_macros(void); extern ndptr lookup(const char *); -extern void remhash(const char *, int); +extern void mark_traced(const char *, int); +extern struct ohash macros; + +extern struct macro_definition *lookup_macro_definition(const char *); +extern void macro_define(const char *, const char *); +extern void macro_pushdef(const char *, const char *); +extern void macro_popdef(const char *); +extern void macro_undefine(const char *); +extern void setup_builtin(const char *, unsigned int); +extern void macro_for_all(void (*)(const char *, struct macro_definition *)); +#define macro_getdef(p) ((p)->d) +#define macro_name(p) ((p)->name) +#define macro_builtin_type(p) ((p)->builtin_type) +#define is_traced(p) ((p)->trace_flags == FLAG_NO_TRACE ? (trace_flags & TRACE_ALL) : (p)->trace_flags) + +extern ndptr macro_getbuiltin(const char *); /* main.c */ extern void outputstr(const char *); -extern int builtin_type(const char *); -extern const char *builtin_realname(int); -extern void emitline(void); +extern void do_emit_synchline(void); +#define emit_synchline() do { if (synch_lines) do_emit_synchline(); } while(0) /* misc.c */ extern void chrsave(int); -extern char *compute_prevep(void); +extern char *compute_prevep(void); extern void getdiv(int); extern ptrdiff_t indx(const char *, const char *); -extern void initspaces(void); +extern void initspaces(void); extern void killdiv(void); extern void onintr(int); extern void pbnum(int); +extern void pbnumbase(int, int, int); extern void pbunsigned(unsigned long); extern void pbstr(const char *); -extern void putback(int); -extern void *xalloc(size_t); +extern void pushback(int); +extern void *xalloc(size_t, const char *fmt, ...); +extern void *xrealloc(void *, size_t, const char *fmt, ...); extern char *xstrdup(const char *); extern void usage(void); extern void resizedivs(int); extern size_t buffer_mark(void); extern void dump_buffer(FILE *, size_t); +extern void m4errx(int, const char *, ...); -extern int obtain_char(struct input_file *); +extern int obtain_char(struct input_file *); extern void set_input(struct input_file *, FILE *, const char *); extern void release_input(struct input_file *); -/* speeded-up versions of chrsave/putback */ -#define PUTBACK(c) \ +/* speeded-up versions of chrsave/pushback */ +#define PUSHBACK(c) \ do { \ if (bp >= endpbb) \ enlarge_bufspace(); \ @@ -111,60 +133,44 @@ extern void release_input(struct input_file *); /* and corresponding exposure for local symbols */ extern void enlarge_bufspace(void); extern void enlarge_strspace(void); -extern char *endpbb; +extern unsigned char *endpbb; extern char *endest; /* trace.c */ -extern void mark_traced(const char *, int); -extern int is_traced(const char *); +extern unsigned int trace_flags; +#define TRACE_ALL 512 extern void trace_file(const char *); -extern ssize_t trace(const char **, int, struct input_file *); +extern size_t trace(const char **, int, struct input_file *); extern void finish_trace(size_t); -extern int traced_macros; extern void set_trace_flags(const char *); extern FILE *traceout; -extern ndptr hashtab[]; /* hash table for macros etc. */ extern stae *mstack; /* stack of m4 machine */ extern char *sstack; /* shadow stack, for string space extension */ extern FILE *active; /* active output file pointer */ extern struct input_file infile[];/* input file stack (0=stdin) */ -extern char *inname[]; /* names of these input files */ -extern int inlineno[]; /* current number in each input file */ extern FILE **outfile; /* diversion array(0=bitbucket) */ extern int maxout; /* maximum number of diversions */ -extern int fp; /* m4 call frame pointer */ +extern int fp; /* m4 call frame pointer */ extern int ilevel; /* input file stack pointer */ extern int oindex; /* diversion index. */ extern int sp; /* current m4 stack pointer */ -extern char *bp; /* first available character */ -extern char *buf; /* push-back buffer */ -extern char *bufbase; /* buffer base for this ilevel */ -extern char *bbase[]; /* buffer base per ilevel */ +extern unsigned char *bp; /* first available character */ +extern unsigned char *buf; /* push-back buffer */ +extern unsigned char *bufbase; /* buffer base for this ilevel */ +extern unsigned char *bbase[]; /* buffer base per ilevel */ extern char ecommt[MAXCCHARS+1];/* end character for comment */ extern char *ep; /* first free char in strspace */ extern char lquote[MAXCCHARS+1];/* left quote character (`) */ -extern const char *m4wraps; /* m4wrap string default. */ -extern char null[]; /* as it says.. just a null. */ +extern char **m4wraps; /* m4wrap string default. */ +extern int maxwraps; /* size of m4wraps array */ +extern int wrapindex; /* current index in m4wraps */ + +extern const char *null; /* as it says.. just a null. */ extern char rquote[MAXCCHARS+1];/* right quote character (') */ extern char scommt[MAXCCHARS+1];/* start character for comment */ -extern int synccpp; /* Line synchronisation for C preprocessor */ +extern int synch_lines; /* line synchronisation directives */ extern int mimic_gnu; /* behaves like gnu-m4 */ +extern int prefix_builtins; /* prefix builtin macros with m4_ */ -/* get a possibly pushed-back-character, increment lineno if need be */ -static __inline int gpbc(void) -{ - int chscratch; /* Scratch space. */ - - if (bp > bufbase) { - if (*--bp) - return ((unsigned char)*bp); - else - return (EOF); - } - chscratch = obtain_char(infile+ilevel); - if (chscratch == '\n') - ++inlineno[ilevel]; - return (chscratch); -} |