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