196 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			196 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /****************************************************************
 | |
| Copyright (C) Lucent Technologies 1997
 | |
| All Rights Reserved
 | |
| 
 | |
| Permission to use, copy, modify, and distribute this software and
 | |
| its documentation for any purpose and without fee is hereby
 | |
| granted, provided that the above copyright notice appear in all
 | |
| copies and that both that the copyright notice and this
 | |
| permission notice and warranty disclaimer appear in supporting
 | |
| documentation, and that the name Lucent Technologies or any of
 | |
| its entities not be used in advertising or publicity pertaining
 | |
| to distribution of the software without specific, written prior
 | |
| permission.
 | |
| 
 | |
| LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 | |
| INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
 | |
| IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
 | |
| SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | |
| WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
 | |
| IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
 | |
| ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
 | |
| THIS SOFTWARE.
 | |
| ****************************************************************/
 | |
| 
 | |
| extern	int	yywrap(void);
 | |
| extern	void	setfname(Cell *);
 | |
| extern	int	constnode(Node *);
 | |
| extern	char	*strnode(Node *);
 | |
| extern	Node	*notnull(Node *);
 | |
| extern	int	yyparse(void);
 | |
| 
 | |
| extern	int	yylex(void);
 | |
| extern	void	startreg(void);
 | |
| extern	int	input(void);
 | |
| extern	void	unput(int);
 | |
| extern	void	unputstr(const char *);
 | |
| extern	int	yylook(void);
 | |
| extern	int	yyback(int *, int);
 | |
| extern	int	yyinput(void);
 | |
| 
 | |
| extern	fa	*makedfa(const char *, int);
 | |
| extern	fa	*mkdfa(const char *, int);
 | |
| extern	int	makeinit(fa *, int);
 | |
| extern	void	penter(Node *);
 | |
| extern	void	freetr(Node *);
 | |
| extern	int	hexstr(char **);
 | |
| extern	int	quoted(char **);
 | |
| extern	char	*cclenter(const char *);
 | |
| extern	void	overflo(const char *);
 | |
| extern	void	cfoll(fa *, Node *);
 | |
| extern	int	first(const Node *);
 | |
| extern	void	follow(Node *);
 | |
| extern	int	member(int, const char *);
 | |
| extern	int	match(fa *, const char *);
 | |
| extern	int	pmatch(fa *, const char *);
 | |
| extern	int	nematch(fa *, const char *);
 | |
| extern	Node	*reparse(const char *);
 | |
| extern	Node	*regexp(void);
 | |
| extern	Node	*primary(void);
 | |
| extern	Node	*concat(Node *);
 | |
| extern	Node	*alt(Node *);
 | |
| extern	Node	*unary(Node *);
 | |
| extern	int	relex(void);
 | |
| extern	int	cgoto(fa *, int, int);
 | |
| extern	void	freefa(fa *);
 | |
| 
 | |
| extern	int	pgetc(void);
 | |
| extern	char	*cursource(void);
 | |
| 
 | |
| extern	Node	*nodealloc(int);
 | |
| extern	Node	*exptostat(Node *);
 | |
| extern	Node	*node1(int, Node *);
 | |
| extern	Node	*node2(int, Node *, Node *);
 | |
| extern	Node	*node3(int, Node *, Node *, Node *);
 | |
| extern	Node	*node4(int, Node *, Node *, Node *, Node *);
 | |
| extern	Node	*stat3(int, Node *, Node *, Node *);
 | |
| extern	Node	*op2(int, Node *, Node *);
 | |
| extern	Node	*op1(int, Node *);
 | |
| extern	Node	*stat1(int, Node *);
 | |
| extern	Node	*op3(int, Node *, Node *, Node *);
 | |
| extern	Node	*op4(int, Node *, Node *, Node *, Node *);
 | |
| extern	Node	*stat2(int, Node *, Node *);
 | |
| extern	Node	*stat4(int, Node *, Node *, Node *, Node *);
 | |
| extern	Node	*celltonode(Cell *, int);
 | |
| extern	Node	*rectonode(void);
 | |
| extern	Node	*makearr(Node *);
 | |
| extern	Node	*pa2stat(Node *, Node *, Node *);
 | |
| extern	Node	*linkum(Node *, Node *);
 | |
| extern	void	defn(Cell *, Node *, Node *);
 | |
| extern	int	isarg(const char *);
 | |
| extern	char	*tokname(int);
 | |
| extern	Cell	*(*proctab[])(Node **, int);
 | |
| extern	int	ptoi(void *);
 | |
| extern	Node	*itonp(int);
 | |
| 
 | |
| extern	void	syminit(void);
 | |
| extern	void	arginit(int, char **);
 | |
| extern	void	envinit(char **);
 | |
| extern	Array	*makesymtab(int);
 | |
| extern	void	freesymtab(const Cell *);
 | |
| extern	void	freeelem(const Cell *, const char *);
 | |
| extern	Cell	*setsymtab(const char *, const char *, double, unsigned int, Array *);
 | |
| extern	int	hash(const char *, int);
 | |
| extern	void	rehash(Array *);
 | |
| extern	Cell	*lookup(const char *, const Array *);
 | |
| extern	double	setfval(Cell *, double);
 | |
| extern	void	funnyvar(Cell *, const char *);
 | |
| extern	char	*setsval(Cell *, const char *);
 | |
| extern	double	getfval(Cell *);
 | |
| extern	char	*getsval(Cell *);
 | |
| extern	char	*getpssval(Cell *);     /* for print */
 | |
| extern	char	*tostring(const char *);
 | |
| extern	char	*qstring(const char *, int);
 | |
| 
 | |
| extern	void	recinit(unsigned int);
 | |
| extern	void	initgetrec(void);
 | |
| extern	void	makefields(int, int);
 | |
| extern	void	growfldtab(int n);
 | |
| extern	int	getrec(char **, int *, int);
 | |
| extern	void	nextfile(void);
 | |
| extern	int	readrec(char **buf, int *bufsize, FILE *inf);
 | |
| extern	char	*getargv(int);
 | |
| extern	void	setclvar(char *);
 | |
| extern	void	fldbld(void);
 | |
| extern	void	cleanfld(int, int);
 | |
| extern	void	newfld(int);
 | |
| extern	int	refldbld(const char *, const char *);
 | |
| extern	void	recbld(void);
 | |
| extern	Cell	*fieldadr(int);
 | |
| extern	void	yyerror(const char *);
 | |
| extern	void	fpecatch(int);
 | |
| extern	void	bracecheck(void);
 | |
| extern	void	bcheck2(int, int, int);
 | |
| extern	void	SYNTAX(const char *, ...);
 | |
| extern	void	FATAL(const char *, ...);
 | |
| extern	void	WARNING(const char *, ...);
 | |
| extern	void	error(void);
 | |
| extern	void	eprint(void);
 | |
| extern	void	bclass(int);
 | |
| extern	double	errcheck(double, const char *);
 | |
| extern	int	isclvar(const char *);
 | |
| extern	int	is_number(const char *);
 | |
| 
 | |
| extern	int	adjbuf(char **pb, int *sz, int min, int q, char **pbp, const char *what);
 | |
| extern	void	run(Node *);
 | |
| extern	Cell	*execute(Node *);
 | |
| extern	Cell	*program(Node **, int);
 | |
| extern	Cell	*call(Node **, int);
 | |
| extern	Cell	*copycell(Cell *);
 | |
| extern	Cell	*arg(Node **, int);
 | |
| extern	Cell	*jump(Node **, int);
 | |
| extern	Cell	*awkgetline(Node **, int);
 | |
| extern	Cell	*getnf(Node **, int);
 | |
| extern	Cell	*array(Node **, int);
 | |
| extern	Cell	*awkdelete(Node **, int);
 | |
| extern	Cell	*intest(Node **, int);
 | |
| extern	Cell	*matchop(Node **, int);
 | |
| extern	Cell	*boolop(Node **, int);
 | |
| extern	Cell	*relop(Node **, int);
 | |
| extern	void	tfree(Cell *);
 | |
| extern	Cell	*gettemp(void);
 | |
| extern	Cell	*field(Node **, int);
 | |
| extern	Cell	*indirect(Node **, int);
 | |
| extern	Cell	*substr(Node **, int);
 | |
| extern	Cell	*sindex(Node **, int);
 | |
| extern	int	format(char **, int *, const char *, Node *);
 | |
| extern	Cell	*awksprintf(Node **, int);
 | |
| extern	Cell	*awkprintf(Node **, int);
 | |
| extern	Cell	*arith(Node **, int);
 | |
| extern	double	ipow(double, int);
 | |
| extern	Cell	*incrdecr(Node **, int);
 | |
| extern	Cell	*assign(Node **, int);
 | |
| extern	Cell	*cat(Node **, int);
 | |
| extern	Cell	*pastat(Node **, int);
 | |
| extern	Cell	*dopa2(Node **, int);
 | |
| extern	Cell	*split(Node **, int);
 | |
| extern	Cell	*condexpr(Node **, int);
 | |
| extern	Cell	*ifstat(Node **, int);
 | |
| extern	Cell	*whilestat(Node **, int);
 | |
| extern	Cell	*dostat(Node **, int);
 | |
| extern	Cell	*forstat(Node **, int);
 | |
| extern	Cell	*instat(Node **, int);
 | |
| extern	Cell	*bltin(Node **, int);
 | |
| extern	Cell	*printstat(Node **, int);
 | |
| extern	Cell	*nullproc(Node **, int);
 | |
| extern	FILE	*redirect(int, Node *);
 | |
| extern	FILE	*openfile(int, const char *);
 | |
| extern	const char	*filename(FILE *);
 | |
| extern	Cell	*closefile(Node **, int);
 | |
| extern	void	closeall(void);
 | |
| extern	Cell	*sub(Node **, int);
 | |
| extern	Cell	*gsub(Node **, int);
 | |
| 
 | |
| extern	FILE	*popen(const char *, const char *);
 | |
| extern	int	pclose(FILE *);
 | 
