master xplshn/aruu / cmd / posix / awk / proto.h
  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
 25extern	int	yywrap(void);
 26extern	void	setfname(Cell *);
 27extern	int	constnode(Node *);
 28extern	char	*strnode(Node *);
 29extern	Node	*notnull(Node *);
 30extern	int	yyparse(void);
 31
 32extern	int	yylex(void);
 33extern	void	startreg(void);
 34extern	int	input(void);
 35extern	void	unput(int);
 36extern	void	unputstr(const char *);
 37
 38extern	fa	*makedfa(const char *, bool);
 39extern	fa	*mkdfa(const char *, bool);
 40extern	int	makeinit(fa *, bool);
 41extern	void	penter(Node *);
 42extern	void	freetr(Node *);
 43extern	int	quoted(const uschar **);
 44extern	int	*cclenter(const char *);
 45extern	noreturn void	overflo(const char *);
 46extern	void	cfoll(fa *, Node *);
 47extern	int	first(Node *);
 48extern	void	follow(Node *);
 49extern	int	member(int, int *);
 50extern	int	match(fa *, const char *);
 51extern	int	pmatch(fa *, const char *);
 52extern	int	nematch(fa *, const char *);
 53extern	bool	fnematch(fa *, FILE *, char **, int *, int);
 54extern	Node	*reparse(const char *);
 55extern	Node	*regexp(void);
 56extern	Node	*primary(void);
 57extern	Node	*concat(Node *);
 58extern	Node	*alt(Node *);
 59extern	Node	*unary(Node *);
 60extern	int	relex(void);
 61extern	int	cgoto(fa *, int, int);
 62extern	void	freefa(fa *);
 63
 64extern	int	pgetc(void);
 65extern	char	*cursource(void);
 66
 67extern	Node	*nodealloc(size_t);
 68extern	Node	*exptostat(Node *);
 69extern	Node	*node1(int, Node *);
 70extern	Node	*node2(int, Node *, Node *);
 71extern	Node	*node3(int, Node *, Node *, Node *);
 72extern	Node	*node4(int, Node *, Node *, Node *, Node *);
 73extern	Node	*stat3(int, Node *, Node *, Node *);
 74extern	Node	*op2(int, Node *, Node *);
 75extern	Node	*op1(int, Node *);
 76extern	Node	*stat1(int, Node *);
 77extern	Node	*op3(int, Node *, Node *, Node *);
 78extern	Node	*op4(int, Node *, Node *, Node *, Node *);
 79extern	Node	*stat2(int, Node *, Node *);
 80extern	Node	*stat4(int, Node *, Node *, Node *, Node *);
 81extern	Node	*celltonode(Cell *, int);
 82extern	Node	*rectonode(void);
 83extern	Node	*makearr(Node *);
 84extern	Node	*pa2stat(Node *, Node *, Node *);
 85extern	Node	*linkum(Node *, Node *);
 86extern	void	defn(Cell *, Node *, Node *);
 87extern	int	isarg(const char *);
 88extern	const char *tokname(int);
 89extern	Cell	*(*proctab[])(Node **, int);
 90extern	int	ptoi(void *);
 91extern	Node	*itonp(int);
 92
 93extern	void	syminit(void);
 94extern	void	arginit(int, char **);
 95extern	void	envinit(char **);
 96extern	Array	*makesymtab(int);
 97extern	void	freesymtab(Cell *);
 98extern	void	freeelem(Cell *, const char *);
 99extern	Cell	*setsymtab(const char *, const char *, double, unsigned int, Array *);
100extern	int	hash(const char *, int);
101extern	void	rehash(Array *);
102extern	Cell	*lookup(const char *, Array *);
103extern	double	setfval(Cell *, double);
104extern	void	funnyvar(Cell *, const char *);
105extern	char	*setsval(Cell *, const char *);
106extern	double	getfval(Cell *);
107extern	char	*getsval(Cell *);
108extern	char	*getpssval(Cell *);     /* for print */
109extern	char	*tostring(const char *);
110extern	char	*tostringN(const char *, size_t);
111extern	char	*qstring(const char *, int);
112extern	Cell	*catstr(Cell *, Cell *);
113
114extern	void	recinit(unsigned int);
115extern	void	initgetrec(void);
116extern	void	makefields(int, int);
117extern	void	growfldtab(int n);
118extern	void	savefs(void);
119extern	int	getrec(char **, int *, bool);
120extern	void	nextfile(void);
121extern	int	readrec(char **buf, int *bufsize, FILE *inf, bool isnew);
122extern	char	*getargv(int);
123extern	void	setclvar(char *);
124extern	void	fldbld(void);
125extern	void	cleanfld(int, int);
126extern	void	newfld(int);
127extern	void	setlastfld(int);
128extern	int	refldbld(const char *, const char *);
129extern	void	recbld(void);
130extern	Cell	*fieldadr(int);
131extern	void	yyerror(const char *);
132extern	void	bracecheck(void);
133extern	void	bcheck2(int, int, int);
134extern	void	SYNTAX(const char *, ...)
135    __attribute__((__format__(__printf__, 1, 2)));
136extern	noreturn void	FATAL(const char *, ...)
137    __attribute__((__format__(__printf__, 1, 2)));
138extern	void	WARNING(const char *, ...)
139    __attribute__((__format__(__printf__, 1, 2)));
140extern	void	error(void);
141extern	void	eprint(void);
142extern	void	bclass(int);
143extern	int	isclvar(const char *);
144extern	bool	is_valid_number(const char *s, bool trailing_stuff_ok,
145				bool *no_trailing, double *result);
146#define is_number(s, val)	is_valid_number(s, false, NULL, val)
147
148extern	int	adjbuf(char **pb, int *sz, int min, int q, char **pbp, const char *what);
149extern	void	run(Node *);
150extern	Cell	*execute(Node *);
151extern	Cell	*program(Node **, int);
152extern	Cell	*call(Node **, int);
153extern	Cell	*copycell(Cell *);
154extern	Cell	*arg(Node **, int);
155extern	Cell	*jump(Node **, int);
156extern	Cell	*awkgetline(Node **, int);
157extern	Cell	*getnf(Node **, int);
158extern	Cell	*array(Node **, int);
159extern	Cell	*awkdelete(Node **, int);
160extern	Cell	*intest(Node **, int);
161extern	Cell	*matchop(Node **, int);
162extern	Cell	*boolop(Node **, int);
163extern	Cell	*relop(Node **, int);
164extern	void	tfree(Cell *);
165extern	Cell	*gettemp(void);
166extern	Cell	*indirect(Node **, int);
167extern	Cell	*substr(Node **, int);
168extern	Cell	*sindex(Node **, int);
169extern	int	format(char **, int *, const char *, Node *);
170extern	Cell	*awksprintf(Node **, int);
171extern	Cell	*awkprintf(Node **, int);
172extern	Cell	*arith(Node **, int);
173extern	double	ipow(double, int);
174extern	Cell	*incrdecr(Node **, int);
175extern	Cell	*assign(Node **, int);
176extern	Cell	*cat(Node **, int);
177extern	Cell	*pastat(Node **, int);
178extern	Cell	*dopa2(Node **, int);
179extern	Cell	*split(Node **, int);
180extern	Cell	*condexpr(Node **, int);
181extern	Cell	*ifstat(Node **, int);
182extern	Cell	*whilestat(Node **, int);
183extern	Cell	*dostat(Node **, int);
184extern	Cell	*forstat(Node **, int);
185extern	Cell	*instat(Node **, int);
186extern	Cell	*bltin(Node **, int);
187extern	Cell	*printstat(Node **, int);
188extern	Cell	*nullproc(Node **, int);
189extern	FILE	*redirect(int, Node *);
190extern	FILE	*openfile(int, const char *, bool *);
191extern	const char	*filename(FILE *);
192extern	Cell	*closefile(Node **, int);
193extern	void	closeall(void);
194extern	Cell	*dosub(Node **, int);
195
196extern	FILE	*popen(const char *, const char *);
197extern	int	pclose(FILE *);
198
199extern  const char	*flags2str(int flags);
200
201extern	double	exp_errcheck(double);
202extern	double	log_errcheck(double);
203extern	double	pow_errcheck(double, double);
204extern	double	sqrt_errcheck(double);