| /**************************************************************** |
| 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. |
| ****************************************************************/ |
| |
| /* To avoid conflicts with <stdio.h> getline declaration on Linux */ |
| #define getline awk_getline |
| |
| #include <stdint.h> |
| |
| 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 *); |
| extern int hexstr(char **); |
| extern int quoted(char **); |
| extern char *cclenter(const char *); |
| extern void overflo(const char *); |
| extern void cfoll(fa *, Node *); |
| extern int first(Node *); |
| 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 *); |
| 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 *); |
| 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 *); |
| 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 *); |
| extern char *tokname(int); |
| extern Cell *(*proctab[])(Node **, int); |
| extern intptr_t ptoi(void *); |
| extern Node *itonp(intptr_t); |
| |
| extern void syminit(void); |
| extern void arginit(int, char **); |
| extern void envinit(char **); |
| extern Array *makesymtab(int); |
| extern void freesymtab(Cell *); |
| extern void freeelem(Cell *, const char *); |
| extern Cell *setsymtab(const char *, const char *, double, unsigned int, Array *); |
| extern int hash(const char *, int); |
| extern void rehash(Array *); |
| extern Cell *lookup(const char *, Array *); |
| 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 *); |
| extern char *qstring(const char *, int); |
| |
| extern void recinit(unsigned int); |
| extern void initgetrec(void); |
| extern void makefields(int, int); |
| extern void growfldtab(int n); |
| extern int getrec(char **, int *, int); |
| extern void nextfile(void); |
| extern int readrec(char **buf, int *bufsize, FILE *inf); |
| extern char *getargv(int); |
| extern void setclvar(char *); |
| extern void fldbld(void); |
| extern void cleanfld(int, int); |
| extern void newfld(int); |
| extern int refldbld(const char *, const char *); |
| extern void recbld(void); |
| extern Cell *fieldadr(int); |
| extern void yyerror(const char *); |
| extern void fpecatch(int); |
| extern void bracecheck(void); |
| extern void bcheck2(int, int, int); |
| extern void SYNTAX(const char *, ...); |
| extern void FATAL(const char *, ...); |
| extern void WARNING(const char *, ...); |
| 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 *); |
| |
| extern int adjbuf(char **pb, int *sz, int min, int q, char **pbp, const char *what); |
| 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 *getline(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 *); |
| extern FILE *openfile(int, const char *); |
| extern const char *filename(FILE *); |
| extern Cell *closefile(Node **, int); |
| extern void closeall(void); |
| extern Cell *sub(Node **, int); |
| extern Cell *gsub(Node **, int); |
| |
| #if !defined(_WIN32) |
| /* In mingw, the following are defined with dllimport attributes. |
| Redefining here will only get warning reads: |
| |
| ... redeclared without dllimport attribute: previous dllimport ignored |
| */ |
| extern FILE *popen(const char *, const char *); |
| extern int pclose(FILE *); |
| #endif |