blob: aac254778646d01f0e17453e9d40edce94681781 [file] [log] [blame]
Brian Kernighan87b94932012-12-22 10:35:39 -05001/****************************************************************
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 *);
37extern int yylook(void);
38extern int yyback(int *, int);
39extern int yyinput(void);
40
Arnold D. Robbins108224b2019-11-10 21:19:18 +020041extern fa *makedfa(const char *, bool);
42extern fa *mkdfa(const char *, bool);
43extern int makeinit(fa *, bool);
Brian Kernighan87b94932012-12-22 10:35:39 -050044extern void penter(Node *);
45extern void freetr(Node *);
zoulasc65892082019-10-24 09:40:15 -040046extern int hexstr(const uschar **);
47extern int quoted(const uschar **);
Brian Kernighan87b94932012-12-22 10:35:39 -050048extern char *cclenter(const char *);
49extern void overflo(const char *) __attribute__((__noreturn__));
50extern void cfoll(fa *, Node *);
51extern int first(Node *);
52extern void follow(Node *);
53extern int member(int, const char *);
54extern int match(fa *, const char *);
55extern int pmatch(fa *, const char *);
56extern int nematch(fa *, const char *);
Arnold D. Robbins108224b2019-11-10 21:19:18 +020057extern bool fnematch(fa *, FILE *, char **, int *, int);
Brian Kernighan87b94932012-12-22 10:35:39 -050058extern Node *reparse(const char *);
59extern Node *regexp(void);
60extern Node *primary(void);
61extern Node *concat(Node *);
62extern Node *alt(Node *);
63extern Node *unary(Node *);
64extern int relex(void);
65extern int cgoto(fa *, int, int);
66extern void freefa(fa *);
67
68extern int pgetc(void);
69extern char *cursource(void);
70
71extern Node *nodealloc(int);
72extern Node *exptostat(Node *);
73extern Node *node1(int, Node *);
74extern Node *node2(int, Node *, Node *);
75extern Node *node3(int, Node *, Node *, Node *);
76extern Node *node4(int, Node *, Node *, Node *, Node *);
77extern Node *stat3(int, Node *, Node *, Node *);
78extern Node *op2(int, Node *, Node *);
79extern Node *op1(int, Node *);
80extern Node *stat1(int, Node *);
81extern Node *op3(int, Node *, Node *, Node *);
82extern Node *op4(int, Node *, Node *, Node *, Node *);
83extern Node *stat2(int, Node *, Node *);
84extern Node *stat4(int, Node *, Node *, Node *, Node *);
85extern Node *celltonode(Cell *, int);
86extern Node *rectonode(void);
87extern Node *makearr(Node *);
88extern Node *pa2stat(Node *, Node *, Node *);
89extern Node *linkum(Node *, Node *);
90extern void defn(Cell *, Node *, Node *);
91extern int isarg(const char *);
zoulasc0d8778b2019-10-25 10:59:10 -040092extern const char *tokname(int);
Brian Kernighan87b94932012-12-22 10:35:39 -050093extern Cell *(*proctab[])(Node **, int);
94extern int ptoi(void *);
95extern Node *itonp(int);
96
97extern void syminit(void);
98extern void arginit(int, char **);
99extern void envinit(char **);
100extern Array *makesymtab(int);
101extern void freesymtab(Cell *);
102extern void freeelem(Cell *, const char *);
103extern Cell *setsymtab(const char *, const char *, double, unsigned int, Array *);
104extern int hash(const char *, int);
105extern void rehash(Array *);
106extern Cell *lookup(const char *, Array *);
107extern double setfval(Cell *, double);
108extern void funnyvar(Cell *, const char *);
109extern char *setsval(Cell *, const char *);
110extern double getfval(Cell *);
111extern char *getsval(Cell *);
112extern char *getpssval(Cell *); /* for print */
113extern char *tostring(const char *);
Arnold D. Robbins5068d202020-02-06 22:27:31 +0200114extern char *tostringN(const char *, size_t);
Brian Kernighan87b94932012-12-22 10:35:39 -0500115extern char *qstring(const char *, int);
Arnold D. Robbinsc95b9602019-07-28 20:09:24 +0300116extern Cell *catstr(Cell *, Cell *);
Brian Kernighan87b94932012-12-22 10:35:39 -0500117
118extern void recinit(unsigned int);
119extern void initgetrec(void);
120extern void makefields(int, int);
121extern void growfldtab(int n);
Cody Peter Mellob4636802018-10-19 15:07:53 -0700122extern void savefs(void);
Arnold D. Robbins108224b2019-11-10 21:19:18 +0200123extern int getrec(char **, int *, bool);
Brian Kernighan87b94932012-12-22 10:35:39 -0500124extern void nextfile(void);
125extern int readrec(char **buf, int *bufsize, FILE *inf);
126extern char *getargv(int);
127extern void setclvar(char *);
128extern void fldbld(void);
129extern void cleanfld(int, int);
130extern void newfld(int);
Arnold D. Robbins32093f52018-08-22 20:40:26 +0300131extern void setlastfld(int);
Brian Kernighan87b94932012-12-22 10:35:39 -0500132extern 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);
Arnold D. Robbins5068d202020-02-06 22:27:31 +0200139extern void SYNTAX(const char *, ...)
140 __attribute__((__format__(__printf__, 1, 2)));
141extern void FATAL(const char *, ...)
142 __attribute__((__format__(__printf__, 1, 2), __noreturn__));
143extern void WARNING(const char *, ...)
144 __attribute__((__format__(__printf__, 1, 2)));
Brian Kernighan87b94932012-12-22 10:35:39 -0500145extern void error(void);
146extern void eprint(void);
147extern void bclass(int);
148extern double errcheck(double, const char *);
149extern int isclvar(const char *);
150extern int is_number(const char *);
151
152extern int adjbuf(char **pb, int *sz, int min, int q, char **pbp, const char *what);
153extern void run(Node *);
154extern Cell *execute(Node *);
155extern Cell *program(Node **, int);
156extern Cell *call(Node **, int);
157extern Cell *copycell(Cell *);
158extern Cell *arg(Node **, int);
159extern Cell *jump(Node **, int);
160extern Cell *awkgetline(Node **, int);
161extern Cell *getnf(Node **, int);
162extern Cell *array(Node **, int);
163extern Cell *awkdelete(Node **, int);
164extern Cell *intest(Node **, int);
165extern Cell *matchop(Node **, int);
166extern Cell *boolop(Node **, int);
167extern Cell *relop(Node **, int);
168extern void tfree(Cell *);
169extern Cell *gettemp(void);
170extern Cell *field(Node **, int);
171extern Cell *indirect(Node **, int);
172extern Cell *substr(Node **, int);
173extern Cell *sindex(Node **, int);
174extern int format(char **, int *, const char *, Node *);
175extern Cell *awksprintf(Node **, int);
176extern Cell *awkprintf(Node **, int);
177extern Cell *arith(Node **, int);
178extern double ipow(double, int);
179extern Cell *incrdecr(Node **, int);
180extern Cell *assign(Node **, int);
181extern Cell *cat(Node **, int);
182extern Cell *pastat(Node **, int);
183extern Cell *dopa2(Node **, int);
184extern Cell *split(Node **, int);
185extern Cell *condexpr(Node **, int);
186extern Cell *ifstat(Node **, int);
187extern Cell *whilestat(Node **, int);
188extern Cell *dostat(Node **, int);
189extern Cell *forstat(Node **, int);
190extern Cell *instat(Node **, int);
191extern Cell *bltin(Node **, int);
192extern Cell *printstat(Node **, int);
193extern Cell *nullproc(Node **, int);
194extern FILE *redirect(int, Node *);
195extern FILE *openfile(int, const char *);
196extern const char *filename(FILE *);
197extern Cell *closefile(Node **, int);
198extern void closeall(void);
199extern Cell *sub(Node **, int);
200extern Cell *gsub(Node **, int);
201
202extern FILE *popen(const char *, const char *);
203extern int pclose(FILE *);
Arnold D. Robbins32093f52018-08-22 20:40:26 +0300204
205extern const char *flags2str(int flags);