2010-03-17 17:16:52 +01:00
|
|
|
/****************************************************************
|
|
|
|
Copyright (C) Lucent Technologies 1997
|
|
|
|
All Rights Reserved
|
|
|
|
|
|
|
|
Permission to use, copy, modify, and distribute this software and
|
|
|
|
its documentation for any purpose and without fee is hereby
|
|
|
|
granted, provided that the above copyright notice appear in all
|
|
|
|
copies and that both that the copyright notice and this
|
|
|
|
permission notice and warranty disclaimer appear in supporting
|
|
|
|
documentation, and that the name Lucent Technologies or any of
|
|
|
|
its entities not be used in advertising or publicity pertaining
|
|
|
|
to distribution of the software without specific, written prior
|
|
|
|
permission.
|
|
|
|
|
|
|
|
LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
|
|
|
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
|
|
|
|
IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
|
|
|
|
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
|
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
|
|
|
|
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
|
|
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
|
|
|
THIS SOFTWARE.
|
|
|
|
****************************************************************/
|
|
|
|
|
|
|
|
extern int yywrap(void);
|
|
|
|
extern void setfname(Cell *);
|
|
|
|
extern int constnode(Node *);
|
|
|
|
extern char *strnode(Node *);
|
|
|
|
extern Node *notnull(Node *);
|
|
|
|
extern int yyparse(void);
|
|
|
|
|
|
|
|
extern int yylex(void);
|
|
|
|
extern void startreg(void);
|
|
|
|
extern int input(void);
|
|
|
|
extern void unput(int);
|
|
|
|
extern void unputstr(const char *);
|
|
|
|
extern int yylook(void);
|
|
|
|
extern int yyback(int *, int);
|
|
|
|
extern int yyinput(void);
|
|
|
|
|
|
|
|
extern fa *makedfa(const char *, int);
|
|
|
|
extern fa *mkdfa(const char *, int);
|
|
|
|
extern int makeinit(fa *, int);
|
|
|
|
extern void penter(Node *);
|
|
|
|
extern void freetr(Node *);
|
2012-06-06 15:03:39 +02:00
|
|
|
extern int hexstr(const uschar **);
|
|
|
|
extern int quoted(const uschar **);
|
2010-03-17 17:16:52 +01:00
|
|
|
extern char *cclenter(const char *);
|
2013-12-06 12:04:52 +01:00
|
|
|
extern void overflo(const char *) __attribute__((__noreturn__));
|
2010-03-17 17:16:52 +01:00
|
|
|
extern void cfoll(fa *, Node *);
|
2012-06-06 15:03:39 +02:00
|
|
|
extern int first(Node *);
|
2010-03-17 17:16:52 +01:00
|
|
|
extern void follow(Node *);
|
|
|
|
extern int member(int, const char *);
|
|
|
|
extern int match(fa *, const char *);
|
|
|
|
extern int pmatch(fa *, const char *);
|
|
|
|
extern int nematch(fa *, const char *);
|
2012-06-06 15:03:39 +02:00
|
|
|
extern int fnematch(fa *, FILE *, uschar **, int *, int);
|
2010-03-17 17:16:52 +01:00
|
|
|
extern Node *reparse(const char *);
|
|
|
|
extern Node *regexp(void);
|
|
|
|
extern Node *primary(void);
|
|
|
|
extern Node *concat(Node *);
|
|
|
|
extern Node *alt(Node *);
|
|
|
|
extern Node *unary(Node *);
|
|
|
|
extern int relex(void);
|
|
|
|
extern int cgoto(fa *, int, int);
|
|
|
|
extern void freefa(fa *);
|
|
|
|
|
|
|
|
extern int pgetc(void);
|
|
|
|
extern char *cursource(void);
|
|
|
|
|
|
|
|
extern Node *nodealloc(int);
|
|
|
|
extern Node *exptostat(Node *);
|
|
|
|
extern Node *node1(int, Node *);
|
|
|
|
extern Node *node2(int, Node *, Node *);
|
|
|
|
extern Node *node3(int, Node *, Node *, Node *);
|
|
|
|
extern Node *node4(int, Node *, Node *, Node *, Node *);
|
2012-06-06 15:03:39 +02:00
|
|
|
extern Node *node5(int, Node *, Node *, Node *, Node *, Node *);
|
2010-03-17 17:16:52 +01:00
|
|
|
extern Node *stat3(int, Node *, Node *, Node *);
|
|
|
|
extern Node *op2(int, Node *, Node *);
|
|
|
|
extern Node *op1(int, Node *);
|
|
|
|
extern Node *stat1(int, Node *);
|
|
|
|
extern Node *op3(int, Node *, Node *, Node *);
|
|
|
|
extern Node *op4(int, Node *, Node *, Node *, Node *);
|
2012-06-06 15:03:39 +02:00
|
|
|
extern Node *op5(int, Node *, Node *, Node *, Node *, Node *);
|
2010-03-17 17:16:52 +01:00
|
|
|
extern Node *stat2(int, Node *, Node *);
|
|
|
|
extern Node *stat4(int, Node *, Node *, Node *, Node *);
|
|
|
|
extern Node *celltonode(Cell *, int);
|
|
|
|
extern Node *rectonode(void);
|
|
|
|
extern Node *makearr(Node *);
|
|
|
|
extern Node *pa2stat(Node *, Node *, Node *);
|
|
|
|
extern Node *linkum(Node *, Node *);
|
|
|
|
extern void defn(Cell *, Node *, Node *);
|
|
|
|
extern int isarg(const char *);
|
2012-06-06 15:03:39 +02:00
|
|
|
extern const char *tokname(int);
|
2010-03-17 17:16:52 +01:00
|
|
|
extern Cell *(*proctab[])(Node **, int);
|
|
|
|
extern int ptoi(void *);
|
|
|
|
extern Node *itonp(int);
|
|
|
|
|
|
|
|
extern void syminit(void);
|
|
|
|
extern void arginit(int, char **);
|
|
|
|
extern void envinit(char **);
|
|
|
|
extern Array *makesymtab(int);
|
2012-06-06 15:03:39 +02:00
|
|
|
extern void freesymtab(Cell *);
|
|
|
|
extern void freeelem(Cell *, const char *);
|
2010-03-17 17:16:52 +01:00
|
|
|
extern Cell *setsymtab(const char *, const char *, double, unsigned int, Array *);
|
|
|
|
extern int hash(const char *, int);
|
|
|
|
extern void rehash(Array *);
|
2012-06-06 15:03:39 +02:00
|
|
|
extern Cell *lookup(const char *, Array *);
|
2010-03-17 17:16:52 +01:00
|
|
|
extern double setfval(Cell *, double);
|
|
|
|
extern void funnyvar(Cell *, const char *);
|
|
|
|
extern char *setsval(Cell *, const char *);
|
|
|
|
extern double getfval(Cell *);
|
|
|
|
extern char *getsval(Cell *);
|
|
|
|
extern char *getpssval(Cell *); /* for print */
|
|
|
|
extern char *tostring(const char *);
|
2012-06-06 15:03:39 +02:00
|
|
|
extern char *tostringN(const char *, size_t n);
|
2010-03-17 17:16:52 +01:00
|
|
|
extern char *qstring(const char *, int);
|
2012-06-06 15:03:39 +02:00
|
|
|
extern Cell *catstr(Cell *, Cell *);
|
2010-03-17 17:16:52 +01:00
|
|
|
|
|
|
|
extern void recinit(unsigned int);
|
|
|
|
extern void initgetrec(void);
|
|
|
|
extern void makefields(int, int);
|
|
|
|
extern void growfldtab(int n);
|
2012-06-06 15:03:39 +02:00
|
|
|
extern int getrec(uschar **, int *, int);
|
2010-03-17 17:16:52 +01:00
|
|
|
extern void nextfile(void);
|
2013-12-06 12:04:52 +01:00
|
|
|
extern int readrec(uschar **buf, int *, FILE *, int);
|
2010-03-17 17:16:52 +01:00
|
|
|
extern char *getargv(int);
|
|
|
|
extern void setclvar(char *);
|
|
|
|
extern void fldbld(void);
|
|
|
|
extern void cleanfld(int, int);
|
|
|
|
extern void newfld(int);
|
2012-06-06 15:03:39 +02:00
|
|
|
extern void setlastfld(int);
|
2010-03-17 17:16:52 +01:00
|
|
|
extern int refldbld(const char *, const char *);
|
|
|
|
extern void recbld(void);
|
|
|
|
extern Cell *fieldadr(int);
|
|
|
|
extern void yyerror(const char *);
|
|
|
|
extern void bracecheck(void);
|
|
|
|
extern void bcheck2(int, int, int);
|
2012-06-06 15:03:39 +02:00
|
|
|
extern void SYNTAX(const char *, ...)
|
|
|
|
__attribute__((__format__(__printf__, 1, 2)));
|
|
|
|
extern void FATAL(const char *, ...) __dead
|
2013-12-06 12:04:52 +01:00
|
|
|
__attribute__((__format__(__printf__, 1, 2), __noreturn__));
|
2012-06-06 15:03:39 +02:00
|
|
|
extern void WARNING(const char *, ...)
|
|
|
|
__attribute__((__format__(__printf__, 1, 2)));
|
2010-03-17 17:16:52 +01:00
|
|
|
extern void error(void);
|
|
|
|
extern void eprint(void);
|
|
|
|
extern void bclass(int);
|
|
|
|
extern double errcheck(double, const char *);
|
|
|
|
extern int isclvar(const char *);
|
|
|
|
extern int is_number(const char *);
|
|
|
|
|
2013-12-06 12:04:52 +01:00
|
|
|
extern int adjbuf(uschar **, int *, int, int, uschar **, const char *);
|
2010-03-17 17:16:52 +01:00
|
|
|
extern void run(Node *);
|
|
|
|
extern Cell *execute(Node *);
|
|
|
|
extern Cell *program(Node **, int);
|
|
|
|
extern Cell *call(Node **, int);
|
|
|
|
extern Cell *copycell(Cell *);
|
|
|
|
extern Cell *arg(Node **, int);
|
|
|
|
extern Cell *jump(Node **, int);
|
|
|
|
extern Cell *awkgetline(Node **, int);
|
|
|
|
extern Cell *getnf(Node **, int);
|
|
|
|
extern Cell *array(Node **, int);
|
|
|
|
extern Cell *awkdelete(Node **, int);
|
|
|
|
extern Cell *intest(Node **, int);
|
|
|
|
extern Cell *matchop(Node **, int);
|
|
|
|
extern Cell *boolop(Node **, int);
|
|
|
|
extern Cell *relop(Node **, int);
|
|
|
|
extern void tfree(Cell *);
|
|
|
|
extern Cell *gettemp(void);
|
|
|
|
extern Cell *field(Node **, int);
|
|
|
|
extern Cell *indirect(Node **, int);
|
|
|
|
extern Cell *substr(Node **, int);
|
|
|
|
extern Cell *sindex(Node **, int);
|
|
|
|
extern int format(char **, int *, const char *, Node *);
|
|
|
|
extern Cell *awksprintf(Node **, int);
|
|
|
|
extern Cell *awkprintf(Node **, int);
|
|
|
|
extern Cell *arith(Node **, int);
|
|
|
|
extern double ipow(double, int);
|
|
|
|
extern Cell *incrdecr(Node **, int);
|
|
|
|
extern Cell *assign(Node **, int);
|
|
|
|
extern Cell *cat(Node **, int);
|
|
|
|
extern Cell *pastat(Node **, int);
|
|
|
|
extern Cell *dopa2(Node **, int);
|
|
|
|
extern Cell *split(Node **, int);
|
|
|
|
extern Cell *condexpr(Node **, int);
|
|
|
|
extern Cell *ifstat(Node **, int);
|
|
|
|
extern Cell *whilestat(Node **, int);
|
|
|
|
extern Cell *dostat(Node **, int);
|
|
|
|
extern Cell *forstat(Node **, int);
|
|
|
|
extern Cell *instat(Node **, int);
|
|
|
|
extern Cell *bltin(Node **, int);
|
|
|
|
extern Cell *printstat(Node **, int);
|
|
|
|
extern Cell *nullproc(Node **, int);
|
|
|
|
extern FILE *redirect(int, Node *);
|
2012-06-06 15:03:39 +02:00
|
|
|
extern FILE *openfile(int, const char *, int *);
|
2010-03-17 17:16:52 +01:00
|
|
|
extern const char *filename(FILE *);
|
|
|
|
extern Cell *closefile(Node **, int);
|
|
|
|
extern void closeall(void);
|
|
|
|
extern Cell *sub(Node **, int);
|
|
|
|
extern Cell *gsub(Node **, int);
|
2012-06-06 15:03:39 +02:00
|
|
|
extern Cell *gensub(Node **, int);
|
2010-03-17 17:16:52 +01:00
|
|
|
|
|
|
|
extern FILE *popen(const char *, const char *);
|
|
|
|
extern int pclose(FILE *);
|