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