1 /****************************************************************
2 Copyright (C) Lucent Technologies 1997
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 Lucent Technologies or any of
11 its entities not be used in advertising or publicity pertaining
12 to distribution of the software without specific, written prior
15 LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
16 INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
17 IN NO EVENT SHALL LUCENT 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
23 ****************************************************************/
25 extern int yywrap(void);
26 extern void setfname(Cell
*);
27 extern int constnode(Node
*);
28 extern char *strnode(Node
*);
29 extern Node
*notnull(Node
*);
30 extern int yyparse(void);
32 extern int yylex(void);
33 extern void startreg(void);
34 extern int input(void);
35 extern void unput(int);
36 extern void unputstr(const char *);
37 extern int yylook(void);
38 extern int yyback(int *, int);
39 extern int yyinput(void);
41 extern fa
*makedfa(const char *, int);
42 extern fa
*mkdfa(const char *, int);
43 extern int makeinit(fa
*, int);
44 extern void penter(Node
*);
45 extern void freetr(Node
*);
46 extern int hexstr(uschar
**);
47 extern int quoted(uschar
**);
48 extern char *cclenter(const char *);
49 extern void overflo(const char *);
50 extern void cfoll(fa
*, Node
*);
51 extern int first(Node
*);
52 extern void follow(Node
*);
53 extern int member(int, const char *);
54 extern int match(fa
*, const char *);
55 extern int pmatch(fa
*, const char *);
56 extern int nematch(fa
*, const char *);
57 extern Node
*reparse(const char *);
58 extern Node
*regexp(void);
59 extern Node
*primary(void);
60 extern Node
*concat(Node
*);
61 extern Node
*alt(Node
*);
62 extern Node
*unary(Node
*);
63 extern int relex(void);
64 extern int cgoto(fa
*, int, int);
65 extern void freefa(fa
*);
67 extern int pgetc(void);
68 extern char *cursource(void);
70 extern Node
*nodealloc(int);
71 extern Node
*exptostat(Node
*);
72 extern Node
*node1(int, Node
*);
73 extern Node
*node2(int, Node
*, Node
*);
74 extern Node
*node3(int, Node
*, Node
*, Node
*);
75 extern Node
*node4(int, Node
*, Node
*, Node
*, Node
*);
76 extern Node
*node5(int, Node
*, Node
*, Node
*, Node
*, Node
*);
77 extern Node
*stat3(int, Node
*, Node
*, Node
*);
78 extern Node
*op2(int, Node
*, Node
*);
79 extern Node
*op1(int, Node
*);
80 extern Node
*stat1(int, Node
*);
81 extern Node
*op3(int, Node
*, Node
*, Node
*);
82 extern Node
*op4(int, Node
*, Node
*, Node
*, Node
*);
83 extern Node
*op5(int, Node
*, Node
*, Node
*, Node
*, Node
*);
84 extern Node
*stat2(int, Node
*, Node
*);
85 extern Node
*stat4(int, Node
*, Node
*, Node
*, Node
*);
86 extern Node
*celltonode(Cell
*, int);
87 extern Node
*rectonode(void);
88 extern Node
*makearr(Node
*);
89 extern Node
*pa2stat(Node
*, Node
*, Node
*);
90 extern Node
*linkum(Node
*, Node
*);
91 extern void defn(Cell
*, Node
*, Node
*);
92 extern int isarg(const char *);
93 extern const char *tokname(int);
94 extern Cell
*(*proctab
[])(Node
**, int);
95 extern int ptoi(void *);
96 extern Node
*itonp(int);
98 extern void syminit(void);
99 extern void arginit(int, char **);
100 extern void envinit(char **);
101 extern Array
*makesymtab(int);
102 extern void freesymtab(Cell
*);
103 extern void freeelem(Cell
*, const char *);
104 extern Cell
*setsymtab(const char *, const char *, double, unsigned int, Array
*);
105 extern int hash(const char *, int);
106 extern void rehash(Array
*);
107 extern Cell
*lookup(const char *, Array
*);
108 extern double setfval(Cell
*, double);
109 extern void funnyvar(Cell
*, const char *);
110 extern char *setsval(Cell
*, const char *);
111 extern double getfval(Cell
*);
112 extern char *getsval(Cell
*);
113 extern char *getpssval(Cell
*); /* for print */
114 extern char *tostring(const char *);
115 extern char *tostringN(const char *, size_t n
);
116 extern char *qstring(const char *, int);
118 extern void recinit(unsigned int);
119 extern void initgetrec(void);
120 extern void makefields(int, int);
121 extern void growfldtab(int n
);
122 extern int getrec(uschar
**, int *, int);
123 extern void nextfile(void);
124 extern int readrec(uschar
**buf
, int *bufsize
, FILE *inf
);
125 extern char *getargv(int);
126 extern void setclvar(char *);
127 extern void fldbld(void);
128 extern void cleanfld(int, int);
129 extern void newfld(int);
130 extern int refldbld(const char *, const char *);
131 extern void recbld(void);
132 extern Cell
*fieldadr(int);
133 extern void yyerror(const char *);
134 extern void bracecheck(void);
135 extern void bcheck2(int, int, int);
136 extern void SYNTAX(const char *, ...);
137 extern void FATAL(const char *, ...);
138 extern void WARNING(const char *, ...);
139 extern void error(void);
140 extern void eprint(void);
141 extern void bclass(int);
142 extern double errcheck(double, const char *);
143 extern int isclvar(const char *);
144 extern int is_number(const char *);
146 extern int adjbuf(uschar
**pb
, int *sz
, int min
, int q
, uschar
**pbp
, const char *what
);
147 extern void run(Node
*);
148 extern Cell
*execute(Node
*);
149 extern Cell
*program(Node
**, int);
150 extern Cell
*call(Node
**, int);
151 extern Cell
*copycell(Cell
*);
152 extern Cell
*arg(Node
**, int);
153 extern Cell
*jump(Node
**, int);
154 extern Cell
*get_line(Node
**, int);
155 extern Cell
*getnf(Node
**, int);
156 extern Cell
*array(Node
**, int);
157 extern Cell
*awkdelete(Node
**, int);
158 extern Cell
*intest(Node
**, int);
159 extern Cell
*matchop(Node
**, int);
160 extern Cell
*boolop(Node
**, int);
161 extern Cell
*relop(Node
**, int);
162 extern void tfree(Cell
*);
163 extern Cell
*gettemp(void);
164 extern Cell
*field(Node
**, int);
165 extern Cell
*indirect(Node
**, int);
166 extern Cell
*substr(Node
**, int);
167 extern Cell
*sindex(Node
**, int);
168 extern int format(char **, int *, const char *, Node
*);
169 extern Cell
*awksprintf(Node
**, int);
170 extern Cell
*awkprintf(Node
**, int);
171 extern Cell
*arith(Node
**, int);
172 extern double ipow(double, int);
173 extern Cell
*incrdecr(Node
**, int);
174 extern Cell
*assign(Node
**, int);
175 extern Cell
*cat(Node
**, int);
176 extern Cell
*pastat(Node
**, int);
177 extern Cell
*dopa2(Node
**, int);
178 extern Cell
*split(Node
**, int);
179 extern Cell
*condexpr(Node
**, int);
180 extern Cell
*ifstat(Node
**, int);
181 extern Cell
*whilestat(Node
**, int);
182 extern Cell
*dostat(Node
**, int);
183 extern Cell
*forstat(Node
**, int);
184 extern Cell
*instat(Node
**, int);
185 extern Cell
*bltin(Node
**, int);
186 extern Cell
*printstat(Node
**, int);
187 extern Cell
*nullproc(Node
**, int);
188 extern FILE *redirect(int, Node
*);
189 extern FILE *openfile(int, const char *);
190 extern const char *filename(FILE *);
191 extern Cell
*closefile(Node
**, int);
192 extern void closeall(void);
193 extern Cell
*sub(Node
**, int);
194 extern Cell
*gsub(Node
**, int);
195 extern Cell
*gensub(Node
**, int);
197 extern FILE *popen(const char *, const char *);
198 extern int pclose(FILE *);