master xplshn/aruu / cmd / posix / awk / proto.h
  1/* ***************************************************************
  2 * copyright (c) lucent technologies 1997
  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 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
 13 * permission
 14 *
 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
 22 * THIS SOFTWARE
 23 * ************************************************************** */
 24
 25#include <stddef.h>
 26#include <stdio.h>
 27extern int   yywrap(void);
 28extern void  setfname(Cell *);
 29extern int   constnode(Node *);
 30extern char *strnode(Node *);
 31extern Node *notnull(Node *);
 32extern int   yyparse(void);
 33
 34extern int  yylex(void);
 35extern void startreg(void);
 36extern int  input(void);
 37extern void unput(int);
 38extern void unputstr(const char *);
 39
 40extern fa           *makedfa(const char *, bool);
 41extern fa           *mkdfa(const char *, bool);
 42extern int           makeinit(fa *, bool);
 43extern void          penter(Node *);
 44extern void          freetr(Node *);
 45extern int           quoted(const uschar **);
 46extern int          *cclenter(const char *);
 47extern noreturn void overflo(const char *);
 48extern void          cfoll(fa *, Node *);
 49extern int           first(Node *);
 50extern void          follow(Node *);
 51extern int           member(int, int *);
 52extern int           match(fa *, const char *);
 53extern int           pmatch(fa *, const char *);
 54extern int           nematch(fa *, const char *);
 55extern bool          fnematch(fa *, FILE *, char **, int *, int);
 56extern Node         *reparse(const char *);
 57extern Node         *regexp(void);
 58extern Node         *primary(void);
 59extern Node         *concat(Node *);
 60extern Node         *alt(Node *);
 61extern Node         *unary(Node *);
 62extern int           relex(void);
 63extern int           cgoto(fa *, int, int);
 64extern void          freefa(fa *);
 65
 66extern int   pgetc(void);
 67extern char *cursource(void);
 68
 69extern Node       *nodealloc(size_t);
 70extern Node       *exptostat(Node *);
 71extern Node       *node1(int, Node *);
 72extern Node       *node2(int, Node *, Node *);
 73extern Node       *node3(int, Node *, Node *, Node *);
 74extern Node       *node4(int, Node *, Node *, Node *, Node *);
 75extern Node       *stat3(int, Node *, Node *, Node *);
 76extern Node       *op2(int, Node *, Node *);
 77extern Node       *op1(int, Node *);
 78extern Node       *stat1(int, Node *);
 79extern Node       *op3(int, Node *, Node *, Node *);
 80extern Node       *op4(int, Node *, Node *, Node *, Node *);
 81extern Node       *stat2(int, Node *, Node *);
 82extern Node       *stat4(int, Node *, Node *, Node *, Node *);
 83extern Node       *celltonode(Cell *, int);
 84extern Node       *rectonode(void);
 85extern Node       *makearr(Node *);
 86extern Node       *pa2stat(Node *, Node *, Node *);
 87extern Node       *linkum(Node *, Node *);
 88extern void        defn(Cell *, Node *, Node *);
 89extern int         isarg(const char *);
 90extern const char *tokname(int);
 91extern Cell *(*proctab[])(Node **, int);
 92extern int   ptoi(void *);
 93extern Node *itonp(int);
 94
 95extern void   syminit(void);
 96extern void   arginit(int, char **);
 97extern void   envinit(char **);
 98extern Array *makesymtab(int);
 99extern void   freesymtab(Cell *);
100extern void   freeelem(Cell *, const char *);
101extern Cell  *setsymtab(const char *, const char *, double, unsigned int, Array *);
102extern int    hash(const char *, int);
103extern void   rehash(Array *);
104extern Cell  *lookup(const char *, Array *);
105extern double setfval(Cell *, double);
106extern void   funnyvar(Cell *, const char *);
107extern char  *setsval(Cell *, const char *);
108extern double getfval(Cell *);
109extern char  *getsval(Cell *);
110extern char  *getpssval(Cell *); /* for print */
111extern char  *tostring(const char *);
112extern char  *tostringN(const char *, size_t);
113extern char  *qstring(const char *, int);
114extern Cell  *catstr(Cell *, Cell *);
115
116extern void          recinit(unsigned int);
117extern void          initgetrec(void);
118extern void          makefields(int, int);
119extern void          growfldtab(int n);
120extern void          savefs(void);
121extern int           getrec(char **, int *, bool);
122extern void          nextfile(void);
123extern int           readrec(char **buf, int *bufsize, FILE *inf, bool isnew);
124extern char         *getargv(int);
125extern void          setclvar(char *);
126extern void          fldbld(void);
127extern void          cleanfld(int, int);
128extern void          newfld(int);
129extern void          setlastfld(int);
130extern int           refldbld(const char *, const char *);
131extern void          recbld(void);
132extern Cell         *fieldadr(int);
133extern void          yyerror(const char *);
134extern void          bracecheck(void);
135extern void          bcheck2(int, int, int);
136extern void          SYNTAX(const char *, ...) __attribute__((__format__(__printf__, 1, 2)));
137extern noreturn void FATAL(const char *, ...) __attribute__((__format__(__printf__, 1, 2)));
138extern void          WARNING(const char *, ...) __attribute__((__format__(__printf__, 1, 2)));
139extern void          error(void);
140extern void          eprint(void);
141extern void          bclass(int);
142extern int           isclvar(const char *);
143extern bool
144is_valid_number(const char *s, bool trailing_stuff_ok, bool *no_trailing, double *result);
145#define is_number(s, val) is_valid_number(s, false, NULL, val)
146
147extern int         adjbuf(char **pb, int *sz, int min, int q, char **pbp, const char *what);
148extern void        run(Node *);
149extern Cell       *execute(Node *);
150extern Cell       *program(Node **, int);
151extern Cell       *call(Node **, int);
152extern Cell       *copycell(Cell *);
153extern Cell       *arg(Node **, int);
154extern Cell       *jump(Node **, int);
155extern Cell       *awkgetline(Node **, int);
156extern Cell       *getnf(Node **, int);
157extern Cell       *array(Node **, int);
158extern Cell       *awkdelete(Node **, int);
159extern Cell       *intest(Node **, int);
160extern Cell       *matchop(Node **, int);
161extern Cell       *boolop(Node **, int);
162extern Cell       *relop(Node **, int);
163extern void        tfree(Cell *);
164extern Cell       *gettemp(void);
165extern Cell       *indirect(Node **, int);
166extern Cell       *substr(Node **, int);
167extern Cell       *sindex(Node **, int);
168extern int         format(char **, int *, const char *, Node *);
169extern Cell       *awksprintf(Node **, int);
170extern Cell       *awkprintf(Node **, int);
171extern Cell       *arith(Node **, int);
172extern double      ipow(double, int);
173extern Cell       *incrdecr(Node **, int);
174extern Cell       *assign(Node **, int);
175extern Cell       *cat(Node **, int);
176extern Cell       *pastat(Node **, int);
177extern Cell       *dopa2(Node **, int);
178extern Cell       *split(Node **, int);
179extern Cell       *condexpr(Node **, int);
180extern Cell       *ifstat(Node **, int);
181extern Cell       *whilestat(Node **, int);
182extern Cell       *dostat(Node **, int);
183extern Cell       *forstat(Node **, int);
184extern Cell       *instat(Node **, int);
185extern Cell       *bltin(Node **, int);
186extern Cell       *printstat(Node **, int);
187extern Cell       *nullproc(Node **, int);
188extern FILE       *redirect(int, Node *);
189extern FILE       *openfile(int, const char *, bool *);
190extern const char *filename(FILE *);
191extern Cell       *closefile(Node **, int);
192extern void        closeall(void);
193extern Cell       *dosub(Node **, int);
194
195extern FILE *popen(const char *, const char *);
196extern int   pclose(FILE *);
197
198extern const char *flags2str(int flags);
199
200extern double exp_errcheck(double);
201extern double log_errcheck(double);
202extern double pow_errcheck(double, double);
203extern double sqrt_errcheck(double);