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);