summaryrefslogtreecommitdiffstats
path: root/usr.bin/m4/extern.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/m4/extern.h')
-rw-r--r--usr.bin/m4/extern.h106
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);
-}
OpenPOWER on IntegriCloud