14b588458SPeter Avalos /**************************************************************** 24b588458SPeter Avalos Copyright (C) Lucent Technologies 1997 34b588458SPeter Avalos All Rights Reserved 44b588458SPeter Avalos 54b588458SPeter Avalos Permission to use, copy, modify, and distribute this software and 64b588458SPeter Avalos its documentation for any purpose and without fee is hereby 74b588458SPeter Avalos granted, provided that the above copyright notice appear in all 84b588458SPeter Avalos copies and that both that the copyright notice and this 94b588458SPeter Avalos permission notice and warranty disclaimer appear in supporting 104b588458SPeter Avalos documentation, and that the name Lucent Technologies or any of 114b588458SPeter Avalos its entities not be used in advertising or publicity pertaining 124b588458SPeter Avalos to distribution of the software without specific, written prior 134b588458SPeter Avalos permission. 144b588458SPeter Avalos 154b588458SPeter Avalos LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 164b588458SPeter Avalos INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. 174b588458SPeter Avalos IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY 184b588458SPeter Avalos SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 194b588458SPeter Avalos WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 204b588458SPeter Avalos IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, 214b588458SPeter Avalos ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF 224b588458SPeter Avalos THIS SOFTWARE. 234b588458SPeter Avalos ****************************************************************/ 244b588458SPeter Avalos 254b588458SPeter Avalos extern int yywrap(void); 264b588458SPeter Avalos extern void setfname(Cell *); 274b588458SPeter Avalos extern int constnode(Node *); 284b588458SPeter Avalos extern char *strnode(Node *); 294b588458SPeter Avalos extern Node *notnull(Node *); 304b588458SPeter Avalos extern int yyparse(void); 314b588458SPeter Avalos 324b588458SPeter Avalos extern int yylex(void); 334b588458SPeter Avalos extern void startreg(void); 344b588458SPeter Avalos extern int input(void); 354b588458SPeter Avalos extern void unput(int); 364b588458SPeter Avalos extern void unputstr(const char *); 374b588458SPeter Avalos extern int yylook(void); 384b588458SPeter Avalos extern int yyback(int *, int); 394b588458SPeter Avalos extern int yyinput(void); 404b588458SPeter Avalos 411d48fce0SDaniel Fojt extern fa *makedfa(const char *, bool); 421d48fce0SDaniel Fojt extern fa *mkdfa(const char *, bool); 431d48fce0SDaniel Fojt extern int makeinit(fa *, bool); 444b588458SPeter Avalos extern void penter(Node *); 454b588458SPeter Avalos extern void freetr(Node *); 461d48fce0SDaniel Fojt extern int quoted(const uschar **); 47*ed569bc2SAaron LI extern int *cclenter(const char *); 481d48fce0SDaniel Fojt extern noreturn void overflo(const char *); 494b588458SPeter Avalos extern void cfoll(fa *, Node *); 504b588458SPeter Avalos extern int first(Node *); 514b588458SPeter Avalos extern void follow(Node *); 52*ed569bc2SAaron LI extern int member(int, int *); 534b588458SPeter Avalos extern int match(fa *, const char *); 544b588458SPeter Avalos extern int pmatch(fa *, const char *); 554b588458SPeter Avalos extern int nematch(fa *, const char *); 561d48fce0SDaniel Fojt extern bool fnematch(fa *, FILE *, char **, int *, int); 574b588458SPeter Avalos extern Node *reparse(const char *); 584b588458SPeter Avalos extern Node *regexp(void); 594b588458SPeter Avalos extern Node *primary(void); 604b588458SPeter Avalos extern Node *concat(Node *); 614b588458SPeter Avalos extern Node *alt(Node *); 624b588458SPeter Avalos extern Node *unary(Node *); 634b588458SPeter Avalos extern int relex(void); 644b588458SPeter Avalos extern int cgoto(fa *, int, int); 654b588458SPeter Avalos extern void freefa(fa *); 664b588458SPeter Avalos 674b588458SPeter Avalos extern int pgetc(void); 684b588458SPeter Avalos extern char *cursource(void); 694b588458SPeter Avalos 70*ed569bc2SAaron LI extern Node *nodealloc(size_t); 714b588458SPeter Avalos extern Node *exptostat(Node *); 724b588458SPeter Avalos extern Node *node1(int, Node *); 734b588458SPeter Avalos extern Node *node2(int, Node *, Node *); 744b588458SPeter Avalos extern Node *node3(int, Node *, Node *, Node *); 754b588458SPeter Avalos extern Node *node4(int, Node *, Node *, Node *, Node *); 764b588458SPeter Avalos extern Node *stat3(int, Node *, Node *, Node *); 774b588458SPeter Avalos extern Node *op2(int, Node *, Node *); 784b588458SPeter Avalos extern Node *op1(int, Node *); 794b588458SPeter Avalos extern Node *stat1(int, Node *); 804b588458SPeter Avalos extern Node *op3(int, Node *, Node *, Node *); 814b588458SPeter Avalos extern Node *op4(int, Node *, Node *, Node *, Node *); 824b588458SPeter Avalos extern Node *stat2(int, Node *, Node *); 834b588458SPeter Avalos extern Node *stat4(int, Node *, Node *, Node *, Node *); 844b588458SPeter Avalos extern Node *celltonode(Cell *, int); 854b588458SPeter Avalos extern Node *rectonode(void); 864b588458SPeter Avalos extern Node *makearr(Node *); 874b588458SPeter Avalos extern Node *pa2stat(Node *, Node *, Node *); 884b588458SPeter Avalos extern Node *linkum(Node *, Node *); 894b588458SPeter Avalos extern void defn(Cell *, Node *, Node *); 904b588458SPeter Avalos extern int isarg(const char *); 911d48fce0SDaniel Fojt extern const char *tokname(int); 924b588458SPeter Avalos extern Cell *(*proctab[])(Node **, int); 934b588458SPeter Avalos extern int ptoi(void *); 944b588458SPeter Avalos extern Node *itonp(int); 954b588458SPeter Avalos 964b588458SPeter Avalos extern void syminit(void); 974b588458SPeter Avalos extern void arginit(int, char **); 984b588458SPeter Avalos extern void envinit(char **); 994b588458SPeter Avalos extern Array *makesymtab(int); 1004b588458SPeter Avalos extern void freesymtab(Cell *); 1014b588458SPeter Avalos extern void freeelem(Cell *, const char *); 1024b588458SPeter Avalos extern Cell *setsymtab(const char *, const char *, double, unsigned int, Array *); 1034b588458SPeter Avalos extern int hash(const char *, int); 1044b588458SPeter Avalos extern void rehash(Array *); 1054b588458SPeter Avalos extern Cell *lookup(const char *, Array *); 1064b588458SPeter Avalos extern double setfval(Cell *, double); 1074b588458SPeter Avalos extern void funnyvar(Cell *, const char *); 1084b588458SPeter Avalos extern char *setsval(Cell *, const char *); 1094b588458SPeter Avalos extern double getfval(Cell *); 1104b588458SPeter Avalos extern char *getsval(Cell *); 1114b588458SPeter Avalos extern char *getpssval(Cell *); /* for print */ 1124b588458SPeter Avalos extern char *tostring(const char *); 1131d48fce0SDaniel Fojt extern char *tostringN(const char *, size_t); 1144b588458SPeter Avalos extern char *qstring(const char *, int); 1151d48fce0SDaniel Fojt extern Cell *catstr(Cell *, Cell *); 1164b588458SPeter Avalos 1174b588458SPeter Avalos extern void recinit(unsigned int); 1184b588458SPeter Avalos extern void initgetrec(void); 1194b588458SPeter Avalos extern void makefields(int, int); 1204b588458SPeter Avalos extern void growfldtab(int n); 1211d48fce0SDaniel Fojt extern void savefs(void); 1221d48fce0SDaniel Fojt extern int getrec(char **, int *, bool); 1234b588458SPeter Avalos extern void nextfile(void); 1241d48fce0SDaniel Fojt extern int readrec(char **buf, int *bufsize, FILE *inf, bool isnew); 1254b588458SPeter Avalos extern char *getargv(int); 1264b588458SPeter Avalos extern void setclvar(char *); 1274b588458SPeter Avalos extern void fldbld(void); 1284b588458SPeter Avalos extern void cleanfld(int, int); 1294b588458SPeter Avalos extern void newfld(int); 1301d48fce0SDaniel Fojt extern void setlastfld(int); 1314b588458SPeter Avalos extern int refldbld(const char *, const char *); 1324b588458SPeter Avalos extern void recbld(void); 1334b588458SPeter Avalos extern Cell *fieldadr(int); 1344b588458SPeter Avalos extern void yyerror(const char *); 1354b588458SPeter Avalos extern void bracecheck(void); 1364b588458SPeter Avalos extern void bcheck2(int, int, int); 1371d48fce0SDaniel Fojt extern void SYNTAX(const char *, ...) 1381d48fce0SDaniel Fojt __attribute__((__format__(__printf__, 1, 2))); 1391d48fce0SDaniel Fojt extern noreturn void FATAL(const char *, ...) 1401d48fce0SDaniel Fojt __attribute__((__format__(__printf__, 1, 2))); 1411d48fce0SDaniel Fojt extern void WARNING(const char *, ...) 1421d48fce0SDaniel Fojt __attribute__((__format__(__printf__, 1, 2))); 1434b588458SPeter Avalos extern void error(void); 1444b588458SPeter Avalos extern void eprint(void); 1454b588458SPeter Avalos extern void bclass(int); 1464b588458SPeter Avalos extern double errcheck(double, const char *); 1474b588458SPeter Avalos extern int isclvar(const char *); 14848f09a05SAntonio Huete Jimenez extern bool is_valid_number(const char *s, bool trailing_stuff_ok, 14948f09a05SAntonio Huete Jimenez bool *no_trailing, double *result); 15048f09a05SAntonio Huete Jimenez #define is_number(s, val) is_valid_number(s, false, NULL, val) 1514b588458SPeter Avalos 1524b588458SPeter Avalos extern int adjbuf(char **pb, int *sz, int min, int q, char **pbp, const char *what); 1534b588458SPeter Avalos extern void run(Node *); 1544b588458SPeter Avalos extern Cell *execute(Node *); 1554b588458SPeter Avalos extern Cell *program(Node **, int); 1564b588458SPeter Avalos extern Cell *call(Node **, int); 1574b588458SPeter Avalos extern Cell *copycell(Cell *); 1584b588458SPeter Avalos extern Cell *arg(Node **, int); 1594b588458SPeter Avalos extern Cell *jump(Node **, int); 1604b588458SPeter Avalos extern Cell *awkgetline(Node **, int); 1614b588458SPeter Avalos extern Cell *getnf(Node **, int); 1624b588458SPeter Avalos extern Cell *array(Node **, int); 1634b588458SPeter Avalos extern Cell *awkdelete(Node **, int); 1644b588458SPeter Avalos extern Cell *intest(Node **, int); 1654b588458SPeter Avalos extern Cell *matchop(Node **, int); 1664b588458SPeter Avalos extern Cell *boolop(Node **, int); 1674b588458SPeter Avalos extern Cell *relop(Node **, int); 1684b588458SPeter Avalos extern void tfree(Cell *); 1694b588458SPeter Avalos extern Cell *gettemp(void); 1704b588458SPeter Avalos extern Cell *field(Node **, int); 1714b588458SPeter Avalos extern Cell *indirect(Node **, int); 1724b588458SPeter Avalos extern Cell *substr(Node **, int); 1734b588458SPeter Avalos extern Cell *sindex(Node **, int); 1744b588458SPeter Avalos extern int format(char **, int *, const char *, Node *); 1754b588458SPeter Avalos extern Cell *awksprintf(Node **, int); 1764b588458SPeter Avalos extern Cell *awkprintf(Node **, int); 1774b588458SPeter Avalos extern Cell *arith(Node **, int); 1784b588458SPeter Avalos extern double ipow(double, int); 1794b588458SPeter Avalos extern Cell *incrdecr(Node **, int); 1804b588458SPeter Avalos extern Cell *assign(Node **, int); 1814b588458SPeter Avalos extern Cell *cat(Node **, int); 1824b588458SPeter Avalos extern Cell *pastat(Node **, int); 1834b588458SPeter Avalos extern Cell *dopa2(Node **, int); 1844b588458SPeter Avalos extern Cell *split(Node **, int); 1854b588458SPeter Avalos extern Cell *condexpr(Node **, int); 1864b588458SPeter Avalos extern Cell *ifstat(Node **, int); 1874b588458SPeter Avalos extern Cell *whilestat(Node **, int); 1884b588458SPeter Avalos extern Cell *dostat(Node **, int); 1894b588458SPeter Avalos extern Cell *forstat(Node **, int); 1904b588458SPeter Avalos extern Cell *instat(Node **, int); 1914b588458SPeter Avalos extern Cell *bltin(Node **, int); 1924b588458SPeter Avalos extern Cell *printstat(Node **, int); 1934b588458SPeter Avalos extern Cell *nullproc(Node **, int); 1944b588458SPeter Avalos extern FILE *redirect(int, Node *); 1951d48fce0SDaniel Fojt extern FILE *openfile(int, const char *, bool *); 1964b588458SPeter Avalos extern const char *filename(FILE *); 1974b588458SPeter Avalos extern Cell *closefile(Node **, int); 1984b588458SPeter Avalos extern void closeall(void); 199*ed569bc2SAaron LI extern Cell *dosub(Node **, int); 2004b588458SPeter Avalos 2014b588458SPeter Avalos extern FILE *popen(const char *, const char *); 2024b588458SPeter Avalos extern int pclose(FILE *); 2031d48fce0SDaniel Fojt 2041d48fce0SDaniel Fojt extern const char *flags2str(int flags); 205