dmake: do not set MAKEFLAGS=k
[unleashed/tickless.git] / usr / src / cmd / sgs / m4 / common / m4.h
blob279448732eea3702228532070142e96b79edd8a4
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
21 /* Copyright (c) 1988 AT&T */
22 /* All Rights Reserved */
26 * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
30 * Copyright (c) 2011 Gary Mills
33 #ifndef _M4_H
34 #define _M4_H
36 #include <ctype.h>
37 #include <stdio.h>
38 #include <stdlib.h>
39 #include <string.h>
40 #include <errno.h>
41 #include <locale.h>
42 #include <limits.h>
44 #include <wchar.h>
45 #include <wctype.h>
47 #define EOS ((wchar_t)0)
48 #define MAXSYM 5
49 #define PUSH 1
50 #define NOPUSH 0
51 #define OK 0
52 #define NOT_OK 1
54 /* Used in m4.c and m4ext.c */
55 #define DEF_HSHSIZE 199 /* default hash table size (prime). */
56 #define DEF_BUFSIZE 4096 /* default pushback & arg text buffers size */
57 #define DEF_STKSIZE 100 /* default call stack size */
58 #define DEF_TOKSIZE 512 /* default token buffer size */
60 #define BUILTIN 0x40000000
61 #define INVALID_CHAR 0x80000000
62 #define builtin(x) ((x) | BUILTIN)
63 #define builtin_idx(x) ((x) & (wchar_t)~BUILTIN)
64 #define is_builtin(x) ((x) != WEOF && ((x) & BUILTIN))
67 * Since we have expanded char to wchar_t, large vaule(has BUILTIN set)
68 * can be given to the ctype macros. First check BUILTIN, and return
69 * FALSE if it was set. EOF/WEOF will be in this case.
71 #define is_alpha(x) (!is_builtin(x) && \
72 (wide ? iswalpha(x) : isalpha(x)))
73 #define is_alnum(x) (!is_builtin(x) && \
74 (wide ? iswalnum(x) : isalnum(x)))
75 #define is_space(x) (!is_builtin(x) && \
76 (wide ? iswspace(x) : isspace(x)))
77 #define is_digit(x) (!is_builtin(x) && iswascii(x) && isdigit(x))
80 struct bs {
81 void (*bfunc)(wchar_t **, int);
82 wchar_t *bname;
85 struct call {
86 wchar_t **argp;
87 int plev;
90 struct nlist {
91 wchar_t *name;
92 wchar_t *def;
93 char tflag;
94 struct nlist *next;
97 struct Wrap {
98 wchar_t *wrapstr;
99 struct Wrap *nxt;
102 typedef struct {
103 unsigned char buffer[MB_LEN_MAX + 1];
104 char nbytes;
105 } ibuf_t;
107 extern FILE *cf;
108 extern FILE *ifile[];
109 extern FILE *ofile[];
110 extern FILE *xfopen(char *, char *);
111 extern wchar_t **Ap;
112 extern wchar_t **argstk;
113 extern wchar_t *astklm;
114 extern void *xmalloc(size_t);
115 extern char *fname[];
116 extern wchar_t *ibuf;
117 extern wchar_t *ibuflm;
118 extern wchar_t *ip;
119 extern wchar_t *ipflr;
120 extern wchar_t *ipstk[10];
121 extern wchar_t *obuf;
122 extern wchar_t *obuflm;
123 extern wchar_t *op;
124 extern char *procnam;
125 extern char *tempfile;
126 extern wchar_t *token;
127 extern wchar_t *toklm;
128 extern wchar_t C;
129 extern wchar_t getchr();
130 extern wchar_t lcom[];
131 extern wchar_t lquote[];
132 extern wchar_t nullstr[];
133 extern wchar_t rcom[];
134 extern wchar_t rquote[];
135 extern int bufsize;
136 extern int fline[];
137 extern int hshsize;
138 extern unsigned int hshval;
139 extern int ifx;
140 extern int nflag;
141 extern int ofx;
142 extern int sflag;
143 extern int stksize;
144 extern int sysrval;
145 extern int toksize;
146 extern int trace;
147 extern int exitstat;
148 extern long ctol(wchar_t *);
149 extern struct bs barray[];
150 extern struct call *Cp;
151 extern struct call *callst;
152 extern struct nlist **hshtab;
153 extern void install();
154 extern struct nlist *lookup();
155 extern struct Wrap *wrapstart;
156 extern int wide;
157 extern ibuf_t ibuffer[];
159 extern void setfname(char *);
160 extern void pbstr(wchar_t *);
161 extern void pbnum(long);
162 extern void pbnbr(long, int, int);
163 extern void undiv(int, int);
164 extern void delexit(int, int);
165 extern void error(char *);
166 extern int min(int, int);
167 extern void putbak(wchar_t);
168 extern void stkchr(wchar_t);
169 extern void errorf(char *, char *);
170 extern void error2(char *, int);
172 extern wchar_t *wstrdup(wchar_t *);
173 extern int wstoi(wchar_t *);
174 extern char *wstr2str(wchar_t *, int);
175 extern wchar_t *str2wstr(char *, int);
177 extern void dodef(wchar_t **, int);
178 extern void doundef(wchar_t **, int);
179 extern int undef(wchar_t *);
182 * macros for performance reason.
184 #define putbak(c) \
185 if (ip < ibuflm) \
186 *ip++ = (c); \
187 else \
188 error2(gettext("pushed back more than %d chars"), bufsize)
190 #define stkchr(c) \
191 if (op < obuflm) \
192 *op++ = (c); \
193 else \
194 error2(gettext("more than %d chars of argument text"), bufsize)
196 #endif /* _M4_H */