xref: /freebsd/contrib/one-true-awk/proto.h (revision 3078531de10dcae44b253a35125c949ff4235284)
1 /****************************************************************
2 Copyright (C) Lucent Technologies 1997
3 All Rights Reserved
4 
5 Permission to use, copy, modify, and distribute this software and
6 its documentation for any purpose and without fee is hereby
7 granted, provided that the above copyright notice appear in all
8 copies and that both that the copyright notice and this
9 permission notice and warranty disclaimer appear in supporting
10 documentation, and that the name Lucent Technologies or any of
11 its entities not be used in advertising or publicity pertaining
12 to distribution of the software without specific, written prior
13 permission.
14 
15 LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
16 INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
17 IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
18 SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
20 IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
21 ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
22 THIS SOFTWARE.
23 ****************************************************************/
24 
25 extern	int	yywrap(void);
26 extern	void	setfname(Cell *);
27 extern	int	constnode(Node *);
28 extern	char	*strnode(Node *);
29 extern	Node	*notnull(Node *);
30 extern	int	yyparse(void);
31 
32 extern	int	yylex(void);
33 extern	void	startreg(void);
34 extern	int	input(void);
35 extern	void	unput(int);
36 extern	void	unputstr(const char *);
37 extern	int	yylook(void);
38 extern	int	yyback(int *, int);
39 extern	int	yyinput(void);
40 
41 extern	fa	*makedfa(const char *, bool);
42 extern	fa	*mkdfa(const char *, bool);
43 extern	int	makeinit(fa *, bool);
44 extern	void	penter(Node *);
45 extern	void	freetr(Node *);
46 extern	int	hexstr(const uschar **);
47 extern	int	quoted(const uschar **);
48 extern	char	*cclenter(const char *);
49 extern	noreturn void	overflo(const char *);
50 extern	void	cfoll(fa *, Node *);
51 extern	int	first(Node *);
52 extern	void	follow(Node *);
53 extern	int	member(int, const char *);
54 extern	int	match(fa *, const char *);
55 extern	int	pmatch(fa *, const char *);
56 extern	int	nematch(fa *, const char *);
57 extern	bool	fnematch(fa *, FILE *, char **, int *, int);
58 extern	Node	*reparse(const char *);
59 extern	Node	*regexp(void);
60 extern	Node	*primary(void);
61 extern	Node	*concat(Node *);
62 extern	Node	*alt(Node *);
63 extern	Node	*unary(Node *);
64 extern	int	relex(void);
65 extern	int	cgoto(fa *, int, int);
66 extern	void	freefa(fa *);
67 
68 extern	int	pgetc(void);
69 extern	char	*cursource(void);
70 
71 extern	Node	*nodealloc(int);
72 extern	Node	*exptostat(Node *);
73 extern	Node	*node1(int, Node *);
74 extern	Node	*node2(int, Node *, Node *);
75 extern	Node	*node3(int, Node *, Node *, Node *);
76 extern	Node	*node4(int, Node *, Node *, Node *, Node *);
77 extern	Node	*node5(int, Node *, Node *, Node *, Node *, Node *);
78 extern	Node	*stat3(int, Node *, Node *, Node *);
79 extern	Node	*op2(int, Node *, Node *);
80 extern	Node	*op1(int, Node *);
81 extern	Node	*stat1(int, Node *);
82 extern	Node	*op3(int, Node *, Node *, Node *);
83 extern	Node	*op4(int, Node *, Node *, Node *, Node *);
84 extern	Node	*op5(int, Node *, Node *, Node *, Node *, Node *);
85 extern	Node	*stat2(int, Node *, Node *);
86 extern	Node	*stat4(int, Node *, Node *, Node *, Node *);
87 extern	Node	*celltonode(Cell *, int);
88 extern	Node	*rectonode(void);
89 extern	Node	*makearr(Node *);
90 extern	Node	*pa2stat(Node *, Node *, Node *);
91 extern	Node	*linkum(Node *, Node *);
92 extern	void	defn(Cell *, Node *, Node *);
93 extern	int	isarg(const char *);
94 extern	const char *tokname(int);
95 extern	Cell	*(*proctab[])(Node **, int);
96 extern	int	ptoi(void *);
97 extern	Node	*itonp(int);
98 
99 extern	void	syminit(void);
100 extern	void	arginit(int, char **);
101 extern	void	envinit(char **);
102 extern	Array	*makesymtab(int);
103 extern	void	freesymtab(Cell *);
104 extern	void	freeelem(Cell *, const char *);
105 extern	Cell	*setsymtab(const char *, const char *, double, unsigned int, Array *);
106 extern	int	hash(const char *, int);
107 extern	void	rehash(Array *);
108 extern	Cell	*lookup(const char *, Array *);
109 extern	double	setfval(Cell *, double);
110 extern	void	funnyvar(Cell *, const char *);
111 extern	char	*setsval(Cell *, const char *);
112 extern	double	getfval(Cell *);
113 extern	char	*getsval(Cell *);
114 extern	char	*getpssval(Cell *);     /* for print */
115 extern	char	*tostring(const char *);
116 extern	char	*tostringN(const char *, size_t);
117 extern	char	*qstring(const char *, int);
118 extern	Cell	*catstr(Cell *, Cell *);
119 
120 extern	void	recinit(unsigned int);
121 extern	void	initgetrec(void);
122 extern	void	makefields(int, int);
123 extern	void	growfldtab(int n);
124 extern	void	savefs(void);
125 extern	int	getrec(char **, int *, bool);
126 extern	void	nextfile(void);
127 extern	int	readrec(char **buf, int *bufsize, FILE *inf, bool isnew);
128 extern	char	*getargv(int);
129 extern	void	setclvar(char *);
130 extern	void	fldbld(void);
131 extern	void	cleanfld(int, int);
132 extern	void	newfld(int);
133 extern	void	setlastfld(int);
134 extern	int	refldbld(const char *, const char *);
135 extern	void	recbld(void);
136 extern	Cell	*fieldadr(int);
137 extern	void	yyerror(const char *);
138 extern	void	bracecheck(void);
139 extern	void	bcheck2(int, int, int);
140 extern	void	SYNTAX(const char *, ...)
141     __attribute__((__format__(__printf__, 1, 2)));
142 extern	noreturn void	FATAL(const char *, ...)
143     __attribute__((__format__(__printf__, 1, 2)));
144 extern	void	WARNING(const char *, ...)
145     __attribute__((__format__(__printf__, 1, 2)));
146 extern	void	error(void);
147 extern	void	eprint(void);
148 extern	void	bclass(int);
149 extern	double	errcheck(double, const char *);
150 extern	int	isclvar(const char *);
151 extern	bool	is_valid_number(const char *s, bool trailing_stuff_ok,
152 				bool *no_trailing, double *result);
153 #define is_number(s, val)	is_valid_number(s, false, NULL, val)
154 
155 extern	int	adjbuf(char **pb, int *sz, int min, int q, char **pbp, const char *what);
156 extern	void	run(Node *);
157 extern	Cell	*execute(Node *);
158 extern	Cell	*program(Node **, int);
159 extern	Cell	*call(Node **, int);
160 extern	Cell	*copycell(Cell *);
161 extern	Cell	*arg(Node **, int);
162 extern	Cell	*jump(Node **, int);
163 extern	Cell	*awkgetline(Node **, int);
164 extern	Cell	*getnf(Node **, int);
165 extern	Cell	*array(Node **, int);
166 extern	Cell	*awkdelete(Node **, int);
167 extern	Cell	*intest(Node **, int);
168 extern	Cell	*matchop(Node **, int);
169 extern	Cell	*boolop(Node **, int);
170 extern	Cell	*relop(Node **, int);
171 extern	void	tfree(Cell *);
172 extern	Cell	*gettemp(void);
173 extern	Cell	*field(Node **, int);
174 extern	Cell	*indirect(Node **, int);
175 extern	Cell	*substr(Node **, int);
176 extern	Cell	*sindex(Node **, int);
177 extern	int	format(char **, int *, const char *, Node *);
178 extern	Cell	*awksprintf(Node **, int);
179 extern	Cell	*awkprintf(Node **, int);
180 extern	Cell	*arith(Node **, int);
181 extern	double	ipow(double, int);
182 extern	Cell	*incrdecr(Node **, int);
183 extern	Cell	*assign(Node **, int);
184 extern	Cell	*cat(Node **, int);
185 extern	Cell	*pastat(Node **, int);
186 extern	Cell	*dopa2(Node **, int);
187 extern	Cell	*split(Node **, int);
188 extern	Cell	*condexpr(Node **, int);
189 extern	Cell	*ifstat(Node **, int);
190 extern	Cell	*whilestat(Node **, int);
191 extern	Cell	*dostat(Node **, int);
192 extern	Cell	*forstat(Node **, int);
193 extern	Cell	*instat(Node **, int);
194 extern	Cell	*bltin(Node **, int);
195 extern	Cell	*printstat(Node **, int);
196 extern	Cell	*nullproc(Node **, int);
197 extern	FILE	*redirect(int, Node *);
198 extern	FILE	*openfile(int, const char *, bool *);
199 extern	const char	*filename(FILE *);
200 extern	Cell	*closefile(Node **, int);
201 extern	void	closeall(void);
202 extern	Cell	*sub(Node **, int);
203 extern	Cell	*gsub(Node **, int);
204 extern	Cell	*gensub(Node **, int);
205 
206 extern	FILE	*popen(const char *, const char *);
207 extern	int	pclose(FILE *);
208 
209 extern  const char	*flags2str(int flags);
210