1*74a4d8c2SCharles.Forsyth /**************************************************************** 2*74a4d8c2SCharles.Forsyth Copyright (C) Lucent Technologies 1997 3*74a4d8c2SCharles.Forsyth All Rights Reserved 4*74a4d8c2SCharles.Forsyth 5*74a4d8c2SCharles.Forsyth Permission to use, copy, modify, and distribute this software and 6*74a4d8c2SCharles.Forsyth its documentation for any purpose and without fee is hereby 7*74a4d8c2SCharles.Forsyth granted, provided that the above copyright notice appear in all 8*74a4d8c2SCharles.Forsyth copies and that both that the copyright notice and this 9*74a4d8c2SCharles.Forsyth permission notice and warranty disclaimer appear in supporting 10*74a4d8c2SCharles.Forsyth documentation, and that the name Lucent Technologies or any of 11*74a4d8c2SCharles.Forsyth its entities not be used in advertising or publicity pertaining 12*74a4d8c2SCharles.Forsyth to distribution of the software without specific, written prior 13*74a4d8c2SCharles.Forsyth permission. 14*74a4d8c2SCharles.Forsyth 15*74a4d8c2SCharles.Forsyth LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 16*74a4d8c2SCharles.Forsyth INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. 17*74a4d8c2SCharles.Forsyth IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY 18*74a4d8c2SCharles.Forsyth SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 19*74a4d8c2SCharles.Forsyth WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 20*74a4d8c2SCharles.Forsyth IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, 21*74a4d8c2SCharles.Forsyth ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF 22*74a4d8c2SCharles.Forsyth THIS SOFTWARE. 23*74a4d8c2SCharles.Forsyth ****************************************************************/ 24*74a4d8c2SCharles.Forsyth 25*74a4d8c2SCharles.Forsyth extern int yywrap(void); 26*74a4d8c2SCharles.Forsyth extern void setfname(Cell *); 27*74a4d8c2SCharles.Forsyth extern int constnode(Node *); 28*74a4d8c2SCharles.Forsyth extern char *strnode(Node *); 29*74a4d8c2SCharles.Forsyth extern Node *notnull(Node *); 30*74a4d8c2SCharles.Forsyth extern int yyparse(void); 31*74a4d8c2SCharles.Forsyth 32*74a4d8c2SCharles.Forsyth extern int yylex(void); 33*74a4d8c2SCharles.Forsyth extern void startreg(void); 34*74a4d8c2SCharles.Forsyth extern int input(void); 35*74a4d8c2SCharles.Forsyth extern void unput(int); 36*74a4d8c2SCharles.Forsyth extern void unputstr(char *); 37*74a4d8c2SCharles.Forsyth extern int yylook(void); 38*74a4d8c2SCharles.Forsyth extern int yyback(int *, int); 39*74a4d8c2SCharles.Forsyth extern int yyinput(void); 40*74a4d8c2SCharles.Forsyth 41*74a4d8c2SCharles.Forsyth extern fa *makedfa(char *, int); 42*74a4d8c2SCharles.Forsyth extern fa *mkdfa(char *, int); 43*74a4d8c2SCharles.Forsyth extern int makeinit(fa *, int); 44*74a4d8c2SCharles.Forsyth extern void penter(Node *); 45*74a4d8c2SCharles.Forsyth extern void freetr(Node *); 46*74a4d8c2SCharles.Forsyth extern int hexstr(char **); 47*74a4d8c2SCharles.Forsyth extern int quoted(char **); 48*74a4d8c2SCharles.Forsyth extern char *cclenter(char *); 49*74a4d8c2SCharles.Forsyth extern void overflo(char *); 50*74a4d8c2SCharles.Forsyth extern void cfoll(fa *, Node *); 51*74a4d8c2SCharles.Forsyth extern int first(Node *); 52*74a4d8c2SCharles.Forsyth extern void follow(Node *); 53*74a4d8c2SCharles.Forsyth extern int member(int, char *); 54*74a4d8c2SCharles.Forsyth extern int match(fa *, char *); 55*74a4d8c2SCharles.Forsyth extern int pmatch(fa *, char *); 56*74a4d8c2SCharles.Forsyth extern int nematch(fa *, char *); 57*74a4d8c2SCharles.Forsyth extern Node *reparse(char *); 58*74a4d8c2SCharles.Forsyth extern Node *regexp(void); 59*74a4d8c2SCharles.Forsyth extern Node *primary(void); 60*74a4d8c2SCharles.Forsyth extern Node *concat(Node *); 61*74a4d8c2SCharles.Forsyth extern Node *alt(Node *); 62*74a4d8c2SCharles.Forsyth extern Node *unary(Node *); 63*74a4d8c2SCharles.Forsyth extern int relex(void); 64*74a4d8c2SCharles.Forsyth extern int cgoto(fa *, int, int); 65*74a4d8c2SCharles.Forsyth extern void freefa(fa *); 66*74a4d8c2SCharles.Forsyth 67*74a4d8c2SCharles.Forsyth extern int pgetc(void); 68*74a4d8c2SCharles.Forsyth extern char *cursource(void); 69*74a4d8c2SCharles.Forsyth 70*74a4d8c2SCharles.Forsyth extern Node *nodealloc(int); 71*74a4d8c2SCharles.Forsyth extern Node *exptostat(Node *); 72*74a4d8c2SCharles.Forsyth extern Node *node1(int, Node *); 73*74a4d8c2SCharles.Forsyth extern Node *node2(int, Node *, Node *); 74*74a4d8c2SCharles.Forsyth extern Node *node3(int, Node *, Node *, Node *); 75*74a4d8c2SCharles.Forsyth extern Node *node4(int, Node *, Node *, Node *, Node *); 76*74a4d8c2SCharles.Forsyth extern Node *stat3(int, Node *, Node *, Node *); 77*74a4d8c2SCharles.Forsyth extern Node *op2(int, Node *, Node *); 78*74a4d8c2SCharles.Forsyth extern Node *op1(int, Node *); 79*74a4d8c2SCharles.Forsyth extern Node *stat1(int, Node *); 80*74a4d8c2SCharles.Forsyth extern Node *op3(int, Node *, Node *, Node *); 81*74a4d8c2SCharles.Forsyth extern Node *op4(int, Node *, Node *, Node *, Node *); 82*74a4d8c2SCharles.Forsyth extern Node *stat2(int, Node *, Node *); 83*74a4d8c2SCharles.Forsyth extern Node *stat4(int, Node *, Node *, Node *, Node *); 84*74a4d8c2SCharles.Forsyth extern Node *celltonode(Cell *, int); 85*74a4d8c2SCharles.Forsyth extern Node *rectonode(void); 86*74a4d8c2SCharles.Forsyth extern Node *makearr(Node *); 87*74a4d8c2SCharles.Forsyth extern Node *pa2stat(Node *, Node *, Node *); 88*74a4d8c2SCharles.Forsyth extern Node *linkum(Node *, Node *); 89*74a4d8c2SCharles.Forsyth extern void defn(Cell *, Node *, Node *); 90*74a4d8c2SCharles.Forsyth extern int isarg(char *); 91*74a4d8c2SCharles.Forsyth extern char *tokname(int); 92*74a4d8c2SCharles.Forsyth extern Cell *(*proctab[])(Node **, int); 93*74a4d8c2SCharles.Forsyth extern int ptoi(void *); 94*74a4d8c2SCharles.Forsyth extern Node *itonp(int); 95*74a4d8c2SCharles.Forsyth 96*74a4d8c2SCharles.Forsyth extern void syminit(void); 97*74a4d8c2SCharles.Forsyth extern void arginit(int, char **); 98*74a4d8c2SCharles.Forsyth extern void envinit(char **); 99*74a4d8c2SCharles.Forsyth extern Array *makesymtab(int); 100*74a4d8c2SCharles.Forsyth extern void freesymtab(Cell *); 101*74a4d8c2SCharles.Forsyth extern void freeelem(Cell *, char *); 102*74a4d8c2SCharles.Forsyth extern Cell *setsymtab(char *, char *, double, unsigned int, Array *); 103*74a4d8c2SCharles.Forsyth extern int hash(char *, int); 104*74a4d8c2SCharles.Forsyth extern void rehash(Array *); 105*74a4d8c2SCharles.Forsyth extern Cell *lookup(char *, Array *); 106*74a4d8c2SCharles.Forsyth extern double setfval(Cell *, double); 107*74a4d8c2SCharles.Forsyth extern void funnyvar(Cell *, char *); 108*74a4d8c2SCharles.Forsyth extern char *setsval(Cell *, char *); 109*74a4d8c2SCharles.Forsyth extern double getfval(Cell *); 110*74a4d8c2SCharles.Forsyth extern char *getsval(Cell *); 111*74a4d8c2SCharles.Forsyth extern char *tostring(char *); 112*74a4d8c2SCharles.Forsyth extern char *qstring(char *, int); 113*74a4d8c2SCharles.Forsyth 114*74a4d8c2SCharles.Forsyth extern void recinit(unsigned int); 115*74a4d8c2SCharles.Forsyth extern void initgetrec(void); 116*74a4d8c2SCharles.Forsyth extern void makefields(int, int); 117*74a4d8c2SCharles.Forsyth extern void growfldtab(int n); 118*74a4d8c2SCharles.Forsyth extern int getrec(char **, int *, int); 119*74a4d8c2SCharles.Forsyth extern void nextfile(void); 120*74a4d8c2SCharles.Forsyth extern int readrec(char **buf, int *bufsize, FILE *inf); 121*74a4d8c2SCharles.Forsyth extern char *getargv(int); 122*74a4d8c2SCharles.Forsyth extern void setclvar(char *); 123*74a4d8c2SCharles.Forsyth extern void fldbld(void); 124*74a4d8c2SCharles.Forsyth extern void cleanfld(int, int); 125*74a4d8c2SCharles.Forsyth extern void newfld(int); 126*74a4d8c2SCharles.Forsyth extern int refldbld(char *, char *); 127*74a4d8c2SCharles.Forsyth extern void recbld(void); 128*74a4d8c2SCharles.Forsyth extern Cell *fieldadr(int); 129*74a4d8c2SCharles.Forsyth extern void yyerror(char *); 130*74a4d8c2SCharles.Forsyth extern void fpecatch(int); 131*74a4d8c2SCharles.Forsyth extern void bracecheck(void); 132*74a4d8c2SCharles.Forsyth extern void bcheck2(int, int, int); 133*74a4d8c2SCharles.Forsyth extern void SYNTAX(char *, ...); 134*74a4d8c2SCharles.Forsyth extern void FATAL(char *, ...); 135*74a4d8c2SCharles.Forsyth extern void WARNING(char *, ...); 136*74a4d8c2SCharles.Forsyth extern void error(void); 137*74a4d8c2SCharles.Forsyth extern void eprint(void); 138*74a4d8c2SCharles.Forsyth extern void bclass(int); 139*74a4d8c2SCharles.Forsyth extern double errcheck(double, char *); 140*74a4d8c2SCharles.Forsyth extern int isclvar(char *); 141*74a4d8c2SCharles.Forsyth extern int is_number(char *); 142*74a4d8c2SCharles.Forsyth 143*74a4d8c2SCharles.Forsyth extern int adjbuf(char **pb, int *sz, int min, int q, char **pbp, char *what); 144*74a4d8c2SCharles.Forsyth extern void run(Node *); 145*74a4d8c2SCharles.Forsyth extern Cell *execute(Node *); 146*74a4d8c2SCharles.Forsyth extern Cell *program(Node **, int); 147*74a4d8c2SCharles.Forsyth extern Cell *call(Node **, int); 148*74a4d8c2SCharles.Forsyth extern Cell *copycell(Cell *); 149*74a4d8c2SCharles.Forsyth extern Cell *arg(Node **, int); 150*74a4d8c2SCharles.Forsyth extern Cell *jump(Node **, int); 151*74a4d8c2SCharles.Forsyth extern Cell *getline(Node **, int); 152*74a4d8c2SCharles.Forsyth extern Cell *getnf(Node **, int); 153*74a4d8c2SCharles.Forsyth extern Cell *array(Node **, int); 154*74a4d8c2SCharles.Forsyth extern Cell *awkdelete(Node **, int); 155*74a4d8c2SCharles.Forsyth extern Cell *intest(Node **, int); 156*74a4d8c2SCharles.Forsyth extern Cell *matchop(Node **, int); 157*74a4d8c2SCharles.Forsyth extern Cell *boolop(Node **, int); 158*74a4d8c2SCharles.Forsyth extern Cell *relop(Node **, int); 159*74a4d8c2SCharles.Forsyth extern void tfree(Cell *); 160*74a4d8c2SCharles.Forsyth extern Cell *gettemp(void); 161*74a4d8c2SCharles.Forsyth extern Cell *field(Node **, int); 162*74a4d8c2SCharles.Forsyth extern Cell *indirect(Node **, int); 163*74a4d8c2SCharles.Forsyth extern Cell *substr(Node **, int); 164*74a4d8c2SCharles.Forsyth extern Cell *sindex(Node **, int); 165*74a4d8c2SCharles.Forsyth extern int format(char **, int *, char *, Node *); 166*74a4d8c2SCharles.Forsyth extern Cell *awksprintf(Node **, int); 167*74a4d8c2SCharles.Forsyth extern Cell *awkprintf(Node **, int); 168*74a4d8c2SCharles.Forsyth extern Cell *arith(Node **, int); 169*74a4d8c2SCharles.Forsyth extern double ipow(double, int); 170*74a4d8c2SCharles.Forsyth extern Cell *incrdecr(Node **, int); 171*74a4d8c2SCharles.Forsyth extern Cell *assign(Node **, int); 172*74a4d8c2SCharles.Forsyth extern Cell *cat(Node **, int); 173*74a4d8c2SCharles.Forsyth extern Cell *pastat(Node **, int); 174*74a4d8c2SCharles.Forsyth extern Cell *dopa2(Node **, int); 175*74a4d8c2SCharles.Forsyth extern Cell *split(Node **, int); 176*74a4d8c2SCharles.Forsyth extern Cell *condexpr(Node **, int); 177*74a4d8c2SCharles.Forsyth extern Cell *ifstat(Node **, int); 178*74a4d8c2SCharles.Forsyth extern Cell *whilestat(Node **, int); 179*74a4d8c2SCharles.Forsyth extern Cell *dostat(Node **, int); 180*74a4d8c2SCharles.Forsyth extern Cell *forstat(Node **, int); 181*74a4d8c2SCharles.Forsyth extern Cell *instat(Node **, int); 182*74a4d8c2SCharles.Forsyth extern Cell *bltin(Node **, int); 183*74a4d8c2SCharles.Forsyth extern Cell *printstat(Node **, int); 184*74a4d8c2SCharles.Forsyth extern Cell *nullproc(Node **, int); 185*74a4d8c2SCharles.Forsyth extern FILE *redirect(int, Node *); 186*74a4d8c2SCharles.Forsyth extern FILE *openfile(int, char *); 187*74a4d8c2SCharles.Forsyth extern char *filename(FILE *); 188*74a4d8c2SCharles.Forsyth extern Cell *closefile(Node **, int); 189*74a4d8c2SCharles.Forsyth extern void closeall(void); 190*74a4d8c2SCharles.Forsyth extern Cell *sub(Node **, int); 191*74a4d8c2SCharles.Forsyth extern Cell *gsub(Node **, int); 192*74a4d8c2SCharles.Forsyth 193*74a4d8c2SCharles.Forsyth extern FILE *popen(const char *, const char *); 194*74a4d8c2SCharles.Forsyth extern int pclose(FILE *); 195