m4: Sync with FreeBSD.
[dragonfly.git] / usr.bin / m4 / extern.h
index 652b620..63b95e3 100644 (file)
@@ -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 $    */
 
 /*-
  * 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.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 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.
  *
  * SUCH DAMAGE.
  *
  *     @(#)extern.h    8.1 (Berkeley) 6/6/93
- * $FreeBSD: src/usr.bin/m4/extern.h,v 1.12 2004/08/16 14:18:22 tjr Exp $
- * $DragonFly: src/usr.bin/m4/extern.h,v 1.3 2006/12/27 21:29:02 pavalos Exp $
+ * $FreeBSD: src/usr.bin/m4/extern.h,v 1.17 2012/11/17 01:54:24 svnexp Exp $
  */
 
 /* 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;
 
 /* expr.c */
 extern int     expr(const char *);
+extern int32_t end_result;
 
 /* 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);
@@ -61,52 +57,75 @@ 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);
+extern int exit_code;
+#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();     \
                *bp++ = (c);                    \
        } while(0)
 
-#define CHRSAVE(c)                             \
+#define        CHRSAVE(c)                              \
        do {                                    \
                if (ep >= endest)               \
                        enlarge_strspace();     \
@@ -116,60 +135,43 @@ 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 */
-
-/* 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);
-}
+extern int prefix_builtins;    /* prefix builtin macros with m4_ */