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 hexstr(const uschar **); 47extern int quoted(const uschar **); 48extern 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 *); 57extern bool fnematch(fa *, FILE *, char **, int *, int); 58extern 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 *node5(int, Node *, Node *, Node *, Node *, Node *); 78extern Node *stat3(int, Node *, Node *, Node *); 79extern Node *op2(int, Node *, Node *); 80extern Node *op1(int, Node *); 81extern Node *stat1(int, Node *); 82extern Node *op3(int, Node *, Node *, Node *); 83extern Node *op4(int, Node *, Node *, Node *, Node *); 84extern Node *op5(int, Node *, Node *, Node *, Node *, Node *); 85extern Node *stat2(int, Node *, Node *); 86extern Node *stat4(int, Node *, Node *, Node *, Node *); 87extern Node *celltonode(Cell *, int); 88extern Node *rectonode(void); 89extern Node *makearr(Node *); 90extern Node *pa2stat(Node *, Node *, Node *); 91extern Node *linkum(Node *, Node *); 92extern void defn(Cell *, Node *, Node *); 93extern int isarg(const char *); 94extern const char *tokname(int); 95extern Cell *(*proctab[])(Node **, int); 96extern int ptoi(void *); 97extern Node *itonp(int); 98 99extern void syminit(void); 100extern void arginit(int, char **); 101extern void envinit(char **); 102extern Array *makesymtab(int); 103extern void freesymtab(Cell *); 104extern void freeelem(Cell *, const char *); 105extern Cell *setsymtab(const char *, const char *, double, unsigned int, Array *); 106extern int hash(const char *, int); 107extern void rehash(Array *); 108extern Cell *lookup(const char *, Array *); 109extern double setfval(Cell *, double); 110extern void funnyvar(Cell *, const char *); 111extern char *setsval(Cell *, const char *); 112extern double getfval(Cell *); 113extern char *getsval(Cell *); 114extern char *getpssval(Cell *); /* for print */ 115extern char *tostring(const char *); 116extern char *tostringN(const char *, size_t); 117extern char *qstring(const char *, int); 118extern Cell *catstr(Cell *, Cell *); 119 120extern void recinit(unsigned int); 121extern void initgetrec(void); 122extern void makefields(int, int); 123extern void growfldtab(int n); 124extern void savefs(void); 125extern int getrec(char **, int *, bool); 126extern void nextfile(void); 127extern int readrec(char **, int *, FILE *, bool); 128extern char *getargv(int); 129extern void setclvar(char *); 130extern void fldbld(void); 131extern void cleanfld(int, int); 132extern void newfld(int); 133extern void setlastfld(int); 134extern int refldbld(const char *, const char *); 135extern void recbld(void); 136extern Cell *fieldadr(int); 137extern void yyerror(const char *); 138extern void bracecheck(void); 139extern void bcheck2(int, int, int); 140extern void SYNTAX(const char *, ...) 141 __attribute__((__format__(__printf__, 1, 2))); 142extern void FATAL(const char *, ...) 143 __attribute__((__format__(__printf__, 1, 2), __noreturn__)); 144extern void WARNING(const char *, ...) 145 __attribute__((__format__(__printf__, 1, 2))); 146extern void error(void); 147extern void eprint(void); 148extern void bclass(int); 149extern double errcheck(double, const char *); 150extern int isclvar(const char *); 151extern int is_number(const char *); 152extern void check_number(Cell *); 153 154extern int adjbuf(char **, int *, int, int, char **, const char *); 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 *sub(Node **, int); 202extern Cell *gsub(Node **, int); 203extern Cell *gensub(Node **, int); 204 205extern FILE *popen(const char *, const char *); 206extern int pclose(FILE *); 207 208extern const char *flags2str(int flags); 209