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