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