master xplshn/aruu / cmd / posix / awk / proto.h
  1/****************************************************************
  2Copyright (C) Lucent Technologies 1997
  3All Rights Reserved
  4
  5Permission to use, copy, modify, and distribute this software and
  6its documentation for any purpose and without fee is hereby
  7granted, provided that the above copyright notice appear in all
  8copies and that both that the copyright notice and this
  9permission notice and warranty disclaimer appear in supporting
 10documentation, and that the name Lucent Technologies or any of
 11its entities not be used in advertising or publicity pertaining
 12to distribution of the software without specific, written prior
 13permission.
 14
 15LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 16INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
 17IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
 18SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 19WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
 20IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
 21ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
 22THIS 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);